Attached is quite a long "compile.log". The game started with me at Playa de Sierra Maestra about to put to sea to attack the payroll ship, SP_CastelF Siroco. My ship at this time was Shnyava2 Tonina. There are some error messages to do with me having got a locator for where I thought I could place 'Siroco' by standing on the beach with visible locators - wrong, that shows locators associated with the shore, not with the island. The ship always shows up anyway so I never noticed until now, but a bit of messing with TOOL got me a genuine island locator in about the right area. Anyway.
Next come some "FLAGS" messages as both Havana and Santiago forts try to remember me but don't have "PlayerShip" because they got their "PlayerNation" memories before the changes. No harm done. Siroco correctly reports that I'm not hostile and doesn't care.
Up goes the pirate flag. Both Siroco and Santiago fort note me as pirate in a shnyava2. Boarding happens - lots of messages to do with that. You can tell when the boarding is over because "Quest name piratebook" happens, shortly followed by "Quest name payroll_ship_taken". I sail away, now in the Siroco. Shnyava2 Tonina is now at the bottom of the sea. Off to Isla Mona for quest stuff, then to Santo Domingo, whose fort reports not being interested because I'd put the Spanish flag back up before arriving there. After doing stuff in Santo Domingo I'm back at sea, and the fort again reports not interested - I'm completely unfamous so it has almost no chance of recognising a false flag.
And then I return to Santiago, whose fort reports remembering me in a Shnyava2 which I no longer have.
But what is the part that seems wrong to you? I read through that 1.5 times and I must be missing something.
Code:
FLAGS: The 'Santiago Fort' has spotted us at 696.52 and will remember us as Pirate in Shnyava2 with visibility=867.5
[...]
FLAGS: The 'Santiago Fort' remembered us as having Shnyava2, which we no longer have.
^ There it also seems like it is doing exactly what you meant it to.
I do wonder if this section needs to be reordered a bit:
Code:
// Remember player's previous flag
if (!CheckAttribute(chr, "PlayerShip") || GetNationRelation(iNation, nNation) == RELATION_ENEMY)
{
if (ship_range < visibility_range)
{
if (GetNationRelation(iNation, nNation) == RELATION_ENEMY)
{
chr.PlayerNation = iNation;
chr.PlayerShip = GetCharacterShipModel(GetMainCharacter());
Trace("FLAGS: The " + GetMyShipNameShow(chr) + " has spotted us at " + ship_range + " and will remember us as " + GetNationDescByType(iNation) + " in " + chr.PlayerShip + " with visibility=" + visibility_range);
}
else Trace("FLAGS: The " + GetMyShipNameShow(chr) + " has spotted us at " + ship_range + ", but is not interested as we are not hostile");
}
else
{
// Trace("FLAGS: The " + GetMyShipNameShow(chr) + " is out of range and is not checking our flag");
}
}
else
{
if (CheckAttribute(chr, "PlayerShip") && !HasThisShip(chr.PlayerShip))
{
Trace("FLAGS: The " + GetMyShipNameShow(chr) + " remembered us as having " + chr.PlayerShip + ", which we no longer have");
ResetCharacterMemory(chr);
}
else
{
iNation = sti(chr.PlayerNation);
Trace("FLAGS: The " + GetMyShipNameShow(chr) + " remembers us as " + GetNationDescByType(iNation) );
}
}
Should the
ResetCharacterMemory not be triggered only within visible range? Otherwise they'd forget even if they don't even know you're there.
And when they do forget, shouldn't they immediately remember your new ship and flag instead?
In effect, adding:
Code:
if (!CheckAttribute(chr, "PlayerShip") && ship_range < visibility_range) CheckInitialFlagRelations(chr, visibility_range, ship_range);
to "CheckAllShips".
If
intialize = true, then it does
CheckInitialFlagRelations for ALL ships and forts.
If it is
false, it does it once for any ship that comes within range. So it isn't entirely the same in both cases.
Take no chances, check both:
Code:
if (!CheckAttribute(chr, "PlayerNation") || !CheckAttribute(chr, "PlayerShip") || GetNationRelation(iNation, nNation) == RELATION_ENEMY)
Why not? Can't hurt.
True if relations are static. Not true if they're not. This is where
@Hylie Pistof ran into trouble - he'd entered a French port under a Portuguese flag while France and Portugal were at peace, then got into trouble because the fort remembered him as Portuguese after France and Portugal had gone to war. If you're in the habit of using any friendly false flag to get into port then you're in trouble if the one you used last time is now hostile even if the fort didn't recognise your false flag so has no idea who you are, and didn't recognise your false flag this time either. If the fort doesn't remember you unless it knows you're hostile then this problem should not arise. Anyway, why should the fort remember you if it has no reason to believe you're hostile?
While Hylie's example was definitely surprising, as I said earlier, I don't see it as being actually
wrong.
For all that fort knows, the flag you flew last time was actually true. Which means that now you're an enemy because war has been declared.
They don't know it was a false flag. There was no need to use that flag, so that makes it a player mistake, not an issue with the system.
A mistake that can be corrected within the game; just costs some money.
Reading Hornblower, those crews can recognize specific ships (with names!) when they appear
at the horizon, quite literally "from the cut of their jibs", e.g. from their rigging.
So if ship crews can do
that, it isn't such a stretch that a fort could maintain some sort of log of all ships that it sees.
Probably this wouldn't be 100% watertight as ship identification systems and record keeping at the time must have been less good than they are now.
But still, I imagine they would have given it their best shot.
So why
shouldn't they remember and act based on that memory?
As far as I'm concerned, that fort in Hylie's example did do exactly what it was meant to do.
And yet we have already had one instance of it causing trouble.
"Trouble" or "misunderstanding/confusion"?
Anyway, I was referring there to the situation WITH your "changing ship type resets memory" feature included.
What happened before was unlikely and with your change becomes even MORE unlikely, with extra (FREE!) ways around it.
Quests. In my case, Santiago has significant plot purposes, but I have very definite ideas about when the player is going to be encouraged to make peace with Spain. In "Tales of a Sea Hawk", because you have to go to San Juan repeatedly, including one occasion where you have to go to the port and may not know that the quest will probably work if you enter town from the jungle and then walk into port. In "Bartolomeu", where one of your earliest missions takes you to Marigot, but France is hostile because you're Portuguese. Or in "Early Explorers" when you're playing anyone other than Spanish or Portuguese, and almost all towns are hostile.
If the main quest requires you to go to towns, nation relations and such should all make sense and not make it very difficult.
Unless it is
meant to be difficult in the context of the story (e.g. an infiltration mission).
If you cannot do certain side quests, because they involve towns that are hard to get into, that is
part of the game.
Ideally, the side quests shouldn't be a "collect them all" situation, but should actually fit in with the "story of the character you're playing".
If your character is hostile to France, it doesn't make so much sense to then do all sorts of quests that involve going into French towns.
Having towns hostile to you is part of the challenge. How you deal with that is part of the game experience. It isn't
meant to be all too easy.
If in Early Explorers, you want to do quests in the hostile towns, maybe you first need to make some allies somehow.
Or, if that isn't an option, prey on your enemies until you're strong enough to FORCE towns to become your allies.
For example.
Whereas I'm still remembering your earlier offer:
Later you even inadvertently suggested the code to do exactly that.
Big question here is what you would want to accomplish: A "stripped down" version of my original functionality for "personal use"?
Or something that goes into the main modpack?
For the first case, everyone is welcome to make whatever changes they want and I'll happily point in the direction to make those changes.
For the second case, more thought is required as it should ideally be something
everyone is happy with.
As long as it is me making the modpack updates, I do have ultimate control over what goes in and how.
Normally I try to make everybody happy with the decisions made, but of course I myself do also need to agree that it is the best choice.
On this particular subject, I am not yet sold. Your "changing ship type resets memory" feature does sound sensible to me and I'm quite happy to add that.
But for all the other things that have been mentioned, I am decidedly undecided.
Of course it is rather dubious how much longer I will remain "in charge", because I don't particularly
want to be.
Not by myself anyway. See:
Discussion - Releasing Future Modpack Versions | PiratesAhoy!
More seriously: the more the game tightens up and becomes annoying or inconvenient for players, the more players are likely to either find and stick with an earlier, less annoying version, or give it up entirely.
Features added to the game can often go two ways: They can either add to the gameplay, or be annoying.
The difference can depend hugely on the point of view of the player.
Some people may consider it annoying that forts and other ships maintain a memory of the last time they saw you.
Other people might consider dealing with those complexities to be part of the fun.
This is especially true for the various "realism modes/toggles" that we have.
Neither opinion is objectively "right" or "wrong". It is just a matter of personal preference.
Which brings up the fact that I asked SO MANY TIMES now if some sort of "Arcade mode" is desired for some of the more complicated features I have introduced this past year.
This mainly for the stuff dealing with "false flag detection" and also the "acts of piracy".
I personally like the concept of how I wrote it now, but I don't necessarily want to force my preferences onto everyone.
That is why I asked that question.
So many times.
But since I never did get an answer, I no longer care at all and I just focus on "doing it my way".
Not because I consider "my way to be the right way", but because I cannot try to second-guess the wishes of people who don't
tell me their wishes.
And also because I DO believe there is value to my ideas and trying them is the only way to get feedback.
I wonder how hard it would be to have some of this based on difficulty setting? "Landlubber", no memory at all; "Mariner", remember ship type; "Swashbuckler", remember ship model; "Sea Dog", I've still to decide.
Should not be hard at all. Though I'd suggest considering it a "Realism Setting" rather than a "Difficulty Level".
Maybe with an extra independent toggle at the top of PROGRAM\InternalSettings.h as well.
Normally I don't like having more toggles than necessary, but this seems like a potentially important one to have.