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

Problems with "Justine le Moigne's Disappearance"

Grey Roger

Sea Dog
Staff member
Administrator
Storm Modder
After finishing the "Missing Son of the Spanish Admiral" sidequest, if you recruit Lucas then a 3 month timer starts. If Lucas is an active officer when the timer expires then he talks to you and asks to go to St. Pierre to visit Justine le Moigne, who replaces both Arabella Silehard in the "Missing Son" quest and Elizabeth Shaw in the "Disappearance" quest. So this request is supposed to be your lead into "Justine le Moigne's Disappearance", and it doesn't happen if for any reason Lucas is not an active officer in your shore party at the end of the 3 months.

One way to deal with this is to have the timer trigger a quest case which then sets up checks in several locations - perhaps Nevis Pirate Settlement, Turks Island port and Tortuga port. Jack Sparrow is pretty well certain to visit at least one of those, whether on other sidequest business or just to cash in a promotion from the Brotherhood. So, when you arrive at one of these places, if Lucas isn't an active officer then he can spawn at a nearby locator.

Another way is not to bother. If Lucas can't ask to go to St. Pierre due to not being active, it doesn't break the quest because you can go to St. Pierre anyway and talk to Governor le Moigne.

So, which way do we want this to go? Lucas guaranteed to say his piece but only at the three pirate bases; or Lucas can say his piece anywhere, but only if he's in your shore party?


The other problem is at the end of the quest. After you've faced Davy Jones, been shot in the head, recovered in the tavern and been paid by the governor, Captain Maggee shows up and introduces you to Tia Dalma. When you go to worldmap, Davy Jones shows up on your quarterdeck and Tia Dalma tells him to leave you alone. This is how it's supposed to trigger:
Code:
           PChar.quest.Tia_to_Davy.win_condition.l1 = "MapEnter";
           PChar.quest.Tia_to_Davy.win_condition = "Tia_to_Davy";
And "Tia_to_Davy" does this:
Code:
           string QDeck = GetCharacterShipQDeck(pchar);
           DoQuestReloadToLocation(QDeck, "rld", "startloc", "Tia_to_Davy2");
That breaks, badly, if "MapEnter" was triggered by direct-sailing to another island rather than by going to worldmap. The fix is to do something similar to when Davy Jones appears earlier in the quest and you play Liar's Dice:
Code:
           PChar.quest.Tia_to_Davy1_5.win_condition.l1 = "SeaEnter";
           PChar.quest.Tia_to_Davy1_5.win_condition = "Tia_to_Davy1.5";
       break;

       case "Tia_to_Davy1.5":
           DoReloadFromSeaToLocation(GetCharacterShipQDeck(PChar), "rld", "startloc");
           PChar.quest.Tia_to_Davy2.win_condition.l1 = "location";
           PChar.quest.Tia_to_Davy2.win_condition.l1.location = GetCharacterShipQDeck(PChar);
           PChar.quest.Tia_to_Davy2.win_condition = "Tia_to_Davy2";
       break;
"Tia_to_Davy1.5" triggers right away if you're direct-sailing, or when you switch from worldmap back to sailing mode.

The only problem then is that, if you're doing this after the main story and it's gone down the incomplete DMC route, your ship teleports back to near the beach on Martinique, which isn't much fun if you've just direct-sailed to another island!
 
Maybe if Lucas isn't an officer, have a Question entry triggered that details what he would have said?

Why does the reload mess up?
I thought that worked in the regular sidequest...
 
Lucas asks to go to Martinique to see his girlfriend Justine. A self-dialog or questbook entry wouldn't work. ;) No such prompt exists for the standard "Elizabeth Shaw" version; you just get the mission if you happen to visit the governor of Cayman.

The reload at the end also does not exist in the regular sidequest. That finishes when you push Davy Jones into the sea, get shot, wake up in the tavern and go to the governor to collect your reward. The Jack Sparrow version then extends to being introduced to Tia Dalma, then Davy Jones catches up with you and she tells him to get lost. Depending on whether you did the quest before or after finishing the main story, she may then also ask you to take her to a shack which at present does not exist in the game. Someone better acquainted than me with the "Pirates of the Caribbean" film series may want to continue this bit...
 
Lucas asks to go to Martinique to see his girlfriend Justine. A self-dialog or questbook entry wouldn't work. ;) No such prompt exists for the standard "Elizabeth Shaw" version; you just get the mission if you happen to visit the governor of Cayman.
Couldn't the request be posted to the quest book?
Not very fancy, I admit, but I'm trying to be simple...

The reload at the end also does not exist in the regular sidequest. That finishes when you push Davy Jones into the sea, get shot, wake up in the tavern and go to the governor to collect your reward. The Jack Sparrow version then extends to being introduced to Tia Dalma, then Davy Jones catches up with you and she tells him to get lost. Depending on whether you did the quest before or after finishing the main story, she may then also ask you to take her to a shack which at present does not exist in the game. Someone better acquainted than me with the "Pirates of the Caribbean" film series may want to continue this bit...
Can something be done so that the reload checks if you're doing DirectSail to avoid it messing up?

Why don't you watch the PotC films?
The second one is still mostly OK. :cheeky
 
Couldn't the request be posted to the quest book?
Not very fancy, I admit, but I'm trying to be simple...
The whole point is for Lucas to ask you to go to Martinique. You have the option to refuse. Then it goes into the questbook along with your decision.

The simplest is to do nothing. If Lucas isn't an active officer then he can't ask you anything, and you just have to find the quest the same way as you would find the general version. The next simplest is to make him appear at a choice of locations. (I've done this before in "Ardent". 1 month after you complete the convoy quest, someone wants to tell you that Isla Mona has been taken by the French. He can appear in any of five locations. Lucas only needs a choice of three. :))

Can something be done so that the reload checks if you're doing DirectSail to avoid it messing up?
I don't know. Is there a way to check if you're doing DirectSail? (The first thing I tried was to check if, after the 'DoQuestReloadToLocation', you actually were on the quarterdeck. That didn't work. Then I had the idea of throwing in the check for "SeaEnter" after the check for "MapEnter". Then I had the idea of looking to see what the game does when Davy Jones appears earlier. It does the same thing. :D)

Anyway, I've already coded this. And tested it, both on worldmap and by direct-sailing to Barbados. It works both ways. It's just a bit odd ending up at Martinique beach after spending all that time sailing away from Martinique. If anyone ever wants to figure out where Pelogostos is, the code can probably be changed to teleport there instead. You can blame Tia Dalma for the teleport. xD

Why don't you watch the PotC films?
The second one is still mostly OK. :cheeky
I do watch them, but I haven't memorised the details enough to use them as the basis for a quest. If I tried, I'd probably get it wrong and someone would complain. Besides, occasionally we get someone here wanting to do a storyline about Jack Sparrow. The next one who asks about that can be volunteered to do the DMC extension. xD
 
I do watch them, but I haven't memorised the details enough to use them as the basis for a quest. If I tried, I'd probably get it wrong and someone would complain. Besides, occasionally we get someone here wanting to do a storyline about Jack Sparrow. The next one who asks about that can be volunteered to do the DMC extension. xD
The Jack Sparrow storyline we've got is hardly fully film-accurate anyway.
Not many people complained about that.
 
I don't know. Is there a way to check if you're doing DirectSail?

You could always set a new global variable to be changed when "DirectSail" is activated, and as long as it is running (set it back in the function where it ends). Then, you can check for the value of this variable in your function, and make it act accordingly.

Edit:
I know, not the best wording; but I'm not sure how to word it better... Maybe in steps:

1. Create/set (declare) a new global variable.
2. Change its value in the function that activates "DirectSail".
3. Change it back to its original value in the function that ends "DirectSail".
4. Now you have a way to check if "DirectSail" is on in your own function/code.
 
Last edited:
DirectSail is nothing more than continuing in normal sailing mode, then switching to another island when you've sailed far enough to reach it. That also triggers the "MapEnter" check. An alternative approach might be to put the variable into the worldmap code. Then, if "MapEnter" triggers and the worldmap variable isn't set, you obviously sailed to the other island by DirectSail.

Of course, neither method solves the problem that you've sailed to Barbados, the meeting with Davy Jones and Tia Dalma happens, and suddenly you're back to the coast of Martinique. ;)
 
Can't you trigger a worldmap origin position update? I know that in CT the game keeps track of your position between WorldMap to BattleInterface transitions by setting your WorldMap origin to the place you've last exited the WorldMap from. Update that -- set it to Barbados -- when you DirectSail to the island, and you won't be back to Martinique after the meeting.

Edit:
See here for reference (in worldmap_reload.c):
Code:
// VANO function: return sea coordinates
void WdmPrepareMapForAbordage(aref arPos)
{
   //Êîîðäèíàòû èãðîêà íà êàðòå
   float psX = MakeFloat(worldMap.playerShipX);
   float psZ = MakeFloat(worldMap.playerShipZ);
   //Ó÷èòûâàåì îñòðîâ
   if(worldMap.island != WDM_NONE_ISLAND)
   {
       //Island
       wdmLoginToSea.island = worldMap.island;
       float ix = MakeFloat(worldMap.island.x);
       float iz = MakeFloat(worldMap.island.z);
       arPos.x = (psX - ix)*WDM_MAP_TO_SEA_SCALE;
       arPos.z = (psZ - iz)*WDM_MAP_TO_SEA_SCALE;
       arPos.y = worldMap.playerShipAY;
       worldMap.zeroX = ix;
       worldMap.zeroZ = iz;
   }else{
       //no Island
       wdmLoginToSea.island = "";
       //Player ship
       arPos.x = 0;
       arPos.z = 0;
       arPos.y = worldMap.playerShipAY;
       worldMap.zeroX = worldMap.playerShipX;
       worldMap.zeroZ = worldMap.playerShipZ;
   }
}
 
Last edited:
Something like that must indeed be possible; it looks fairly familiar.

@Grey Roger, I think console.c contains a few QuestReloadToLocation lines that have an additional line to set the ship location.
I can't remember which function is used there, but I do remember that function call also sets your world map coordinates correctly.
Maybe that helps?
 
The reason you teleport back to Martinique is because of the quest code:
Code:
       case "reload_to_sea_after_davy":
           QuestToSeaLogin_PrepareLoc("FalaiseDeFleur", "reload", "reload_2", false);
           QuestToSeaLogin_Launch();
       break;
Presumably there's a reason for that. Also, if anyone chooses to continue developing this quest and decides where to put Pelogostos, all they need to do is change that 'QuestToSeaLogin_PrepareLoc' line.
 
@Grey Roger, I think console.c contains a few QuestReloadToLocation lines that have an additional line to set the ship location.
I can't remember which function is used there, but I do remember that function call also sets your world map coordinates correctly.
Maybe that helps?
From "console.c":
Code:
       //   DoQuestReloadToLocation("Redmond_port", "reload", "Sea_2_back" ,"_");
       //   PlaceFleetNearShore("Redmond_port");
       //   DoQuestReloadToLocation("Oxbay_Port", "reload", "reload1" ,"_");
       //   PlaceFleetNearShore("Oxbay_Port");
And:
Code:
           DoQuestReloadToLocation("IslaDeMuerte_Cabin", "reload", "reload1" ,"_");
           PlaceFleetNearShore("IslaDeMuerte_shore_02");
'DoQuestReloadToLocation' moves you, not your ship. Then 'PlaceFleetNearShore' puts your ship in port so it's there for you to board.

There are no 'QuestToSeaLogin' lines in "console.c".
 
Well, I'm not sure what you're going to do with the hardcoded quest teleportation (I'm not sure why it even needs to happen that way), but I'm pretty sure you can change the ship's 'reload to' location with the hint I've given you -- using "worldMap.zeroX" and "worldMap.zeroY".
 
Back
Top