• 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!

Escape from Port au Prince

BathtubPirate

Privateer
Storm Modder
I'm too tired to try around right now so I just ask here: How am I supposed to leave Port au Prince after I rescued my crew from the fort? (with the fake letter and dressed as an officer)

The fort blows my ship to pieces before I can leave the bay. I have a a french flag, even wear the french uniform.

The walkthrough doesn't say anything specific.
 
Is @Grey Roger not around? I'd really like to continue but I can't.

Right now my only solution would be to return to an earlier save and moor at some beach for this part, but I'd have to replay about one hour of story (Isla Mona, Guadeloupe). So I'll wait to hear if there might be another solution.
 
He seems to show up for an hour or two during some weekends.
Okay, let's see if he's here tomorrow.

I replayed the last part anyway (it's the best part of the story so far, so it wasn't a problem. Took me about 45 minutes. So now I have I save where I perhaps might bring may ship to a different anchorage before going into the fort, but I don't know exactly...

EDIT No, I can't. I arrive in town as a prisoner and can't enter my ship before freeing my crew. Damn… How do I leave this town without getting shot by the fort? :ko
 
Never done that bit of Ardent but...

Once you've freed your crew can you berth your ship, buy something small in the shipyard (to be seen sailing something different by the fort - which if I understand it will reset their memory) then return and swap back to your proper ship which should now be unrecognised?

Not the correct method I'm sure but does it work.


"- I did see a fair bit of iForceDetectionFalseFlag = 0; and iForceDetectionFalseFlag = 1; in the code (but not at the point you leave Port au Prince)"
 
Hmm, I don't know exactly what you mean. I can buy a different ship, but I can't swap it for my own because as soon as I get to sea, the fort massacres me. And how could I leave my proper ship back in the harbour and pick it up later?

The order is: I arrive in PoP by default, so I'm brought to the port by the story and can't get on my ship before I do my business. The business is freeing my crew, using an uniform and an official document and without alerting any soldiers. Then I can get back on my ship to leave town, but the fort kills me #InstantKill.
 
Go to the ship yard, F2 select ship at the bottom ship berthing. Berth your ship (appoint an officer as captain)

Leave that menu. Enter shipyard menu buy new ship.

If you do it another way ie just buy ship and swap using f2 ship transfer interface (before you go to sea)the original is still in your fleet so the fort still blasts you

On return can sell (or berth) the other ship EDIT or give it to an officer to sail EDIT and unberth your original.
 
Last edited:
@pedrwyth

Thank you so far! First try:

I berth my ship, buy a lugger, go to sea. Fort leaves me alone.

I go back to town, sell my lugger, relaunch my ship, go to sea. Screen turns black :8q

I'll try some other things with different ships… Really hope there is some solution to this, I can't continue otherwise. I also would be interested whether this is intentional or not when @Grey Roger Comes back.

EDIT: Right now, nothing seems to work except for leaving my ship in PoP for good, which I'd hate to do. Also what tells me the screen won't turn black again when I return later to reclaim my ship? :(
 
Okay, I found a solution!

Of course there is no Direct-Sail when the fort shoots my ship, but I have Instant Boarding, which is basically the same. :sail So I can just board some random pirate ship around Hispaniola and teleport away from the fort.
 
Okay, I found a solution!

Of course there is no Direct-Sail when the fort shoots my ship, but I have Instant Boarding, which is basically the same. :sail So I can just board some random pirate ship around Hispaniola and teleport away from the fort.

Glad you found a way
Thank you so far! First try:
I berth my ship, buy a lugger, go to sea. Fort leaves me alone.

I go back to town, sell my lugger, relaunch my ship, go to sea. Screen turns black :8q

That shouldn't be happening (obviously) - no matter what the storyline. Could you post a save so I can try and see why in your case.
 
Could you post a save so I can try and see why in your case.

Sure. I haven't tried it again, it happened the first and only time when I applied your tactic with the berthing.

Wait for nighttime, then go the stairs near the residence. Go in, pick up document, go out, take a room until morning. Edmundo copies the text. Go to the fort in french uniform, in the second section free the officers. Then do what you suggested to me (berth ship, buy another, go to sea - go to town, sell ship, launch first ship) and see if it turns black too.
 

Attachments

  • -=Player=- Hispaniola. Port au Prince port. December 23rd, 1692.zip
    1.1 MB · Views: 181
Thanks for the save :onya The black screen is repeatable if (after sailing your temp ship) you follow the sequence

Sell ship
relaunch berthed ship

The interface correctly forces you to put it into the first slot and appears to set player as captain. However I think the wrong ship icon is shown and if you fast travel to its deck you get a blackscreen on next change location (be it to sea or back to dock). So the interface change of ship/captain is causing a problem. Incidentally if you walk to the dock the boat icon appears but won't load you to ship. So it's like some bits think you have a ship and some don't.

It works OK if you launch the berthed ship before disposing of your temporary one and then swap ships (or just swap which is berthed) - you can then sail away.

So looks like I have a bug to track down in shipberthing. :treasure: However I think I have seen mention of a similar bug on fast travel to an escorted ship (or possibly companion) shipdeck which may be somewhat related so I'll look that up again (if I can find it).
 
I'm too tired to try around right now so I just ask here: How am I supposed to leave Port au Prince after I rescued my crew from the fort? (with the fake letter and dressed as an officer)

The fort blows my ship to pieces before I can leave the bay. I have a a french flag, even wear the french uniform.
I'm back for a little while, so...

At a guess, some time before this point in the story, Port au Prince fort saw you under a hostile flag and now remembers you. This is part of standard gameplay, not the story. You can make the fort forget you by going there in a different type of ship with a French flag. So, if you have a savegame from before you were captured at Guadeloupe, get a different ship, then sail to Port au Prince, then go to Guadeloupe to continue the story. Note: you must sell or berth your original ship because Port au Prince fort will recognise you even if that ship is in your fleet as a companion.

Another option: when you and Edmundo arrive at at Port au Prince, go to the governor and buy amnesty. You can buy a letter of marque too, which is another way to get the governor's signature for Edmundo.
 
@pedrwyth I'll leave that to you :beer: I couldn't help with that one anyway and storywise it doesn't really concern me anymore. If there's a bug then I'm at least glad we discovered it but I'll leave it to you if there really is one and what can be done about it.

@Grey Roger welcome back... As I said I managed to escape the fort with Instant Boarding of a distant ship, so I was able to continue. Did the fort see me earlier with an enemy flag? Might be, although I would say I'd probably remember that (the fort would obviously have shot at me and knowing my style of playing, I would have reloaded to avoid the damage on my ship). I thought it might be related to the story, maybe the french discovered me after I freed the crew, in that case I would have said the challenge is too difficult, but if it's gameplay-related then it's not a problem (or was only a temporary problem for me).

Anyway, I finished the main storyline after I got pass that one and usurped the Dauphin Royale. I left some of my impressions of the story in the "feedback for Ardent" thread, including a note about another smaller problem (not being able to see the museum).
 
Did the fort see me earlier with an enemy flag? Might be, although I would say I'd probably remember that (the fort would obviously have shot at me and knowing my style of playing, I would have reloaded to avoid the damage on my ship).
Compile.log should give a clue on that.
If it's not there, try enabling some of the outcommented Trace lines here in PROGRAM\Screwface_functions.c:
Code:
void CheckInitialFlagRelations(ref chr, float visibility_range, float ship_range)
{
   // Initialize nations
   int iNation = GetCurrentFlag();
   int nNation = sti(chr.nation);
   float rel = GetRMRelation(GetMainCharacter(), nNation);
   bool IsFort = GetAttribute(chr, "ship.type") == SHIP_FORT_NAME;

   // Initialize relations between NPC ships
   UpdateAllShipsAtSea(chr, IsFort);

   if (IsCompanion    (chr)) return; // Companions don't care
   if (CharacterIsDead(chr)) return; // Already dead, don't change relation again

   if (rel <= REL_WAR && iForceDetectionFalseFlag == 1 && ship_range < visibility_range) chr.recognized = 1; // GR: obey forced recognition of false flag

   // Ships that recognized you are ALWAYS hostile
   if (CheckAttribute(chr, "recognized") && !CheckAttribute(chr, "surrendered"))
   {
       Trace("FLAGS: The " + GetMyShipNameShow(chr) + " turned hostile as they have recognized us");
       SetCharRelationToFleet(chr, RELATION_ENEMY);
   }
   else
   {
       // Remember player's previous flag
       if (!CheckAttribute(chr, "PlayerNation") || !CheckAttribute(chr, "PlayerShip") || GetNationRelation(iNation, nNation) == RELATION_ENEMY)
       {
           if (ship_range < visibility_range)
           {
               if (GetNationRelation(iNation, nNation) == RELATION_ENEMY || !RELATION_IGNORE_FRIENDLY)
               {
                   chr.PlayerNation = iNation;
//                   chr.PlayerShip = GetCharacterShipID(GetMainCharacter());
                   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 (ship_range < visibility_range)
           {
               if (!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) );
               }
           }
           else
           {
               Trace("FLAGS: The " + GetMyShipNameShow(chr) + " is out of range so can neither remember nor forget us");
           }
       }

       // Turn hostile depending on player's previous flag
       if (IsFort && iNation == PIRATE)
       {
       //   Trace("FLAGS: The " + GetMyShipNameShow(chr) + " turned " + GetFortRelationToPirates(chr) + " based on their relation to pirates");
           SetCharRelationToFleet(chr, GetFortRelationToPirates(chr));
       }
       else
       {
           if(GetNationRelation(iNation, sti(chr.nation)) == RELATION_ENEMY)
           {
           //   Trace("FLAGS: The " + GetMyShipNameShow(chr) + " turned hostile as they believe us to be " + GetNationDescByType(iNation));
               if (SeaAI_GetRelation(GetMainCharacterIndex(), sti(chr.index)) != RELATION_ENEMY)
               {
                   SetCharRelationToFleet(chr, RELATION_ENEMY);
               }
           }
           else
           {
           //   Trace("FLAGS: The " + GetMyShipNameShow(chr) + " believes our current flag");
               SetCharRelationToFleet(chr, GetNationRelation(GetCurrentFlag(), nNation));
           }
       }
   }
}

So looks like I have a bug to track down in shipberthing. :treasure: However I think I have seen mention of a similar bug on fast travel to an escorted ship (or possibly companion) shipdeck which may be somewhat related so I'll look that up again (if I can find it).
:bow :bow :bow
 
Did the fort see me earlier with an enemy flag? Might be, although I would say I'd probably remember that (the fort would obviously have shot at me and knowing my style of playing, I would have reloaded to avoid the damage on my ship).
Not necessarily. Forts can see a long way. The one at Marigot can see you while you are in Philipsburg, for example.
 
With regard to the shipberthing interface - well it's complicated.

The bug arises because there is no PChar.location.from_sea attribute (well actually it is set to "" in shipyard.c when you relinquish your ship).

Restoring that with console allows the bugged versions to continue normally. So where to place it?

It turns out there is already code to do this in transfer_main.c
Code:
// NK 04-17 lay up ships bugfix
 
        if(!CheckAttribute(refMyCharacter,"location.from_sea"))
        {
             if( CheckAttribute(refMyCharacter,"location.old_from_sea") )
            {
                refMyCharacter.location.from_sea = refMyCharacter.location.old_from_sea;
                SetFleetInTown(GetTownIDFromLocID(refMyCharacter.location.from_sea), "pchar"); // NK 05-04-02 WM/IT set fleet.
                DeleteAttribute(refMyCharacter,"location.old_from_sea");
            }
        }
        if(refMyCharacter.location.from_sea == "")
        {
            if( CheckAttribute(refMyCharacter,"location.old_from_sea") )
            {
                refMyCharacter.location.from_sea = refMyCharacter.location.old_from_sea;
                SetFleetInTown(GetTownIDFromLocID(refMyCharacter.location.from_sea), "pchar"); // NK 05-04-02 WM/IT set fleet.
                DeleteAttribute(refMyCharacter,"location.old_from_sea");
            }
        }
        // NK <--

but this is not getting called by the code that now exists in kam_shipberthing_ship.c. So I copied that bug fix code for laying up ships from transfer_main to kam_shipberthing_ship and that seems to do the necessary.

You can slightly screw it up if you land at one location and sell your ship and then run through the jungle to another where you have a stored ship because the from_sea will place you back at the first port. I might look at that but really if you're trying that hard to break it you get what you deserve.

[Another case could be the apothecary quest where you're moved to Cartagena without using your ship so I don't know what ship berthing would make of launching a ship there with presumably your last from_sea being in Bridgetown].

In the meantime here is a revised kam_shipberthing_ship.c

The crash on jumping to companion ship decks at sea is because the system used is one designed for going to your deck (or a boarding ship) and back. It stores the "back" but placing another intermediate jump (or more if you visit more) breaks the return to so the system hangs. In this case your companions are shown at the last port of call NOT at sea and your own ship is dragged back there by the current "return to" location storing.I haven't quite worked out where and when to solve this yet -- WIP

It is referenced here
Unconfirmed Bug - Bugs (Re-)encountered in build 14 february 2019
 

Attachments

  • kam_shipberthing_ship.c
    42 KB · Views: 211
Last edited:
It turns out there is already code to do this in transfer_main.c but this is not getting called by the code that now exists in kam_shipberthing_ship.c.
Gotta love bugfixes getting undone.
I've seen that happen in professional software development as well. :facepalm

So I copied that bug fix code for laying up ships from transfer_main to kam_shipberthing_ship and that seems to do the necessary.
:bow :bow

You can slightly screw it up if you land at one location and sell your ship and then run through the jungle to another where you have a stored ship because the from_sea will place you back at the first port. I might look at that but really if you're trying that hard to break it you get what you deserve.
Fair enough. :rofl
 
Back
Top