• New Horizons on Maelstrom
    Maelstrom New Horizons


    Visit our website www.piratehorizons.com to quickly find download links for the newest versions of our New Horizons mods Beyond New Horizons and Maelstrom New Horizons!

Fixed soldier reinforcements in quests

Hylie Pistof

Curmudgeon
QA Tester
Storm Modder
Pirate Legend
Methinks I just found a game breaker. :ko

The first hint was when we went to Silehard's bedroom to confront him. In the fight the soldiers were reinforced but it worked out ok.
POTC new 2015-05-21 15-08-09-69.jpg

From there I went to the Bridgetown prison where I had to fight four or five soldiers. It isn't bad enough that I am on my own, but I get backed into a corner where I can't see myself and have to just guess if I am blocking or striking while fighting them two at a time. But now when I kill one soldier he is replaced by two more! This is impossible. :rumgone
 
Well I found a way out. After talking to the garrison commander I just took off running and made it out the door into this. POTC new 2015-05-21 15-43-00-74.jpg At least I was able to continue.
 
Can you make a list of all quest scenes that trigger soldier reinforcements? Possibly with compile.log files and savegames to go with them?
I was afraid that might happen and our is not intentional, but I need the specific details to prevent it.
Make a new bug tracker entry for it too.
 
When fighting soldiers in scripted quest scenes when a soldier dies he is replaced by more soldiers running in. These reinforcements can overwhelm the player.

Here is my list so far.

1. In Silehard's bedroom with Danielle. The two soldiers get reinforced by four more. With Danielle's help this worked out ok.

2. At the Bridgetown prison when you want to talk to the garrison commander about the gold statue a fight starts and you are overwhelmed. I do not know how many soldiers there were but the room was packed full.

I have no saves unfortunately.

I suspect that the reinforcements also happen in the bar fight in Bridgetown where you first meet Danielle and get arrested, but I survived that fine.

In the Bridgetown prison where you meet Edgar Attwood reinforcements DO arrive but I was able to block a door long enough for Silehard to arrive and stop the fight. It took many attempts to figure that out.
 
Thanks for posting.

If you run into any similar situations, please post a save and/or compile.log as that would tell me where to look.
I'm hoping if we find the code for one such case, the others will be similar and could be tackled the same way.
 
I think the shore assault there is pretty much a normal town assault now, which is pretty much a boarding action ashore.
 
I got a couple of soldier reinforcements during "The French Pirate In The Tavern". During the fight at the canyon mine, there were two such reports. The reinforcements seemed to be just one soldier each; after the fight at the mine was over, I went round the corner and saw a soldier running towards me with a second some way up the path heading the same way. No further reports appeared during the battles at the jungle junction or the beach, possibly because the soldiers there are created by the quest while the ones at the mine are permanent guards. No log files because after finishing off the reinforcements in the canyon, I continued with the game.
 
Indeed permanent guards are generally the problem. This is currently the code that decides if reinforcements should be sent:
Code:
bool IsTownGuard(ref refCharacter)
{
   if(!HasSubStr(GetAttribute(refCharacter, "id"), "soldier"))               return false;
   if(!HasSubStr(GetAttribute(refCharacter, "Dialog.Filename"), "Soldier_dialog.c"))   return false;
   return true;
}
The idea is that this should apply to persistent characters in towns, but not random quest ones.
Problems occur when regular town guards are used for quest purposes.
 
Here's a suggestion that might help a fair bit:
Code:
bool IsTownGuard(ref refCharacter)
{
   if(!HasSubStr(GetAttribute(refCharacter, "id"), "soldier"))               return false;
   if(!HasSubStr(GetAttribute(refCharacter, "Dialog.Filename"), "Soldier_dialog.c"))   return false;
   if( HasSubStr(GetAttribute(refCharacter, "location"), "port"))             return true;
   if( HasSubStr(GetAttribute(refCharacter, "location"), "town"))             return true;
   return false;
}
That should limit the reinforcement effect to ONLY when you're in town or port.
So that excludes prisons, bedrooms and mines.
 
Back
Top