• 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 Claire Larrouse Issues

There are two identically named cases

case "abording_bad_fight_exit":

one in Clair Larrouse_dialog and one in quests_side which is probably confusing things

The one in the dialogue
Code:
case "abording_bad_fight_exit":
            DialogExit();
            NextDiag.CurrentNode = NextDiag.TempNode;
            AddQuestRecord("larrouse", 4);
            AddDialogExitQuest("abording_bad_fight_exit");
should probably call abording_bad_fight_exit1 instead and rename the case in quests_side to match (that is the case that sets up the fight with Clair and two others)
 
There are two identically named cases

case "abording_bad_fight_exit":

one in Clair Larrouse_dialog and one in quests_side which is probably confusing things

The one in the dialogue
Code:
case "abording_bad_fight_exit":
            DialogExit();
            NextDiag.CurrentNode = NextDiag.TempNode;
            AddQuestRecord("larrouse", 4);
            AddDialogExitQuest("abording_bad_fight_exit");
should probably call abording_bad_fight_exit1 instead and rename the case in quests_side to match (that is the case that sets up the fight with Clair and two others)
Those case may have the same name, but they're referenced in independent sections of the code (the dialog file and the quest code), so that shouldn't be the problem.

@Grey Roger: Do you have a savegame prior to the fight with Larrouse? Sounds like this one could do with some testing.

The code you posted does look like it has the potential to work properly, but apparently some things don't work as expected.
Perhaps a large section of that "exit_from_oxbay_to_sea_complete" code needs to be executed while still ashore so that the ship is present when you go to 3D sailing mode.
What happens now when you enter 3D sailing mode at Barbados? Anything out of the ordinary at all?

It is also possible that the LAi_group_SetCheck("LARROUSE", "fight_with_larrouse_complete"); case never gets triggered.
Is the red, flashing "danger icon" still on after the fight? If so, then the game thinks the fight isn't over yet.
Are there indeed two extra characters present who join in the fight?
Code:
  LAi_group_MoveCharacter(characterfromID("Larrouse_pirate_01"), "LARROUSE");  // TALISMAN was quest_pirate_01
  LAi_group_MoveCharacter(characterfromID("Larrouse_smuggler_01"), "LARROUSE");  // TALISMAN was quest_smuggler_01
 
I don't have any savegames compatible with any recent version because, having got into a good position with a free-play of Francis Drake, I'm having a bit more fun with it before I run the latest installer. (Clair Larrouse's dialog is going to need the same sort of overhaul as many others, to use a variable instead of a hard-coded name because in "Early Explorers" you won't normally be raiding English gold. In my game she's telling the truth because I'd previously visited both ports on Las Barbados with a captured Spanish Heavy War Galleon and they're not Portuguese any more. :D)

But I do have a savegame from an earlier version, in which I'm at the jungle road junction just about to go to the shore and trigger the fight scene with the soldiers. I'm fairly sure the red flashing stopped when Clair was dead, and I don't recall any additional characters joining in.
 
I don't have any savegames compatible with any recent version because, having got into a good position with a free-play of Francis Drake, I'm having a bit more fun with it before I run the latest installer.
Just post whatever savegame you do have; I'll set the savegame compatibility number in my game to whatever is needed to be able to load your file.
That is easily done. :yes

Clair Larrouse's dialog is going to need the same sort of overhaul as many others, to use a variable instead of a hard-coded name because in "Early Explorers" you won't normally be raiding English gold. In my game she's telling the truth because I'd previously visited both ports on Las Barbados with a captured Spanish Heavy War Galleon and they're not Portuguese any more. :D
:rofl :rofl :rofl
 
@Grey Roger: Any chance of that savegame? If you post it soon, I can check it this evening; otherwise it will have to wait.
 
Here are some of the related compile.log entries:
Code:
Quest name fight_with_larrouse_complete FOUND in SideQuestComplete
Quest name remove_faked_officers FOUND in SideQuestComplete
Quest name exit_from_oxbay_to_sea_complete FOUND in SideQuestComplete
ERROR - Missing Character ID: Ferro cerezo
Quest name killing_clair_in_sea_complete FOUND in SideQuestComplete
SEA: Error: Group Clair Larrouse, Island Oxbay
SEA: Error: Find locators Group , Locator
SEA: Warn: I am automatically deleting group 'Clair Larrouse', because it's empty
So the game IS executing all necessary quest code. Sounds to me like the problem arises because Claire is ALREADY DEAD as you just killed her.
The game is trying to put a copy of Claire with a different first name at sea, but that doesn't work because she's gone.
Might be related to this in PROGRAM\Characters\init\Officers.c:
Code:
  ch.old.name = "Claire";
   ch.old.lastname = "Larrouse";
   ch.name = TranslateString("","Claire"); // was Clair
   ch.lastname = TranslateString("","Larrouse");
   ch.id     = "Clair Larrouse";
   ch.model = "50_33_40Claire"; // was corsair1_1
   [...]
   LAi_NoRebirthEnable(ch); // <--------- THIS LINE ---------
   ch.greeting = "Gr_Clair Larrouse";
   AddGameCharacter(n, ch);
Executing this code through console.c doesn't seem to help though;
Code:
LAi_NoRebirthDisable(characterFromID("Clair Larrouse"));
A better solution might be to create a separate character to serve as captain for Claire's ship in the following sea battle.

Claire is gone as your companion straight away when you kill her, so this doesn't even do anything:
Code:
      RemoveCharacterCompanion(Pchar, &Characters[GetCharacterIndex("Clair Larrouse")]);
       SetCharacterRemovable(characterFromID("Clair Larrouse"), true); // NK
Also, does anyone have any clue what is the point of these checks with "Blaze Crewmember"?
Code:
      iPassenger = makeint(Pchar.Temp.Officer.idx1);
       if (characters[iPassenger].id == "Blaze_Crewmember_01" || characters[iPassenger].id == "Blaze_Crewmember_02" || characters[iPassenger].id == "Blaze_Crewmember_03")
       {
         RemovePassenger(pchar, &characters[iPassenger]);
       }
       iPassenger = makeint(Pchar.Temp.Officer.idx2);
       if (characters[iPassenger].id == "Blaze_Crewmember_01" || characters[iPassenger].id == "Blaze_Crewmember_02" || characters[iPassenger].id == "Blaze_Crewmember_03")
       {
         RemovePassenger(pchar, &characters[iPassenger]);
       }
       iPassenger = makeint(Pchar.Temp.Officer.idx3);
       if (characters[iPassenger].id == "Blaze_Crewmember_01" || characters[iPassenger].id == "Blaze_Crewmember_02" || characters[iPassenger].id == "Blaze_Crewmember_03")
       {
         RemovePassenger(pchar, &characters[iPassenger]);
       }
Looks like some "fake officers" are being added to you for some reason if you don't actually have any officers of your own.
But why? Are the fights so difficult that you need the extra hands?

And if we're questioning this sidequest anyway.... Why does it start with an automatic reload from sea to the Canyon location?
Why not just let the player get their by his/her own means like the game normally would?

So yes, this sidequest does seem quite needlessly confusing. o_O


Some nasty error logs too:
Code:
RUNTIME ERROR - file: quests\quests_side.c; line: 6936
Missed array index
RUNTIME ERROR - file: quests\quests_side.c; line: 6937
Missed array index
RUNTIME ERROR - file: quests\quests_side.c; line: 6938
Missed array index
RUNTIME ERROR - file: quests\quests.c; line: 434
invalid index -1 [size:2250]
RUNTIME ERROR - file: quests\quests.c; line: 434
function 'CharacterFromID' stack error
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Using reference variable without initializing
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
uninitialized function argument
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
function 'LAi_IsDead' stack error
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Invalid argument type for '!' opearator
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Using reference variable without initializing
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Using reference variable without initializing
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
invalid index -1 [size:2250]
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
invalid array index
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
function 'SideQuestComplete' stack error
Looks like these are related to these two Standard Storyline characters being referred to outside the Standard Storyline:
Code:
    case "killing_clair_in_sea_complete":
       [...]
       if (!LAI_IsDead(characterFromID("Ferro cerezo")) && makeint(characters[GetCharacterIndex("danielle")].rank) < 9)
       {
         locations[FindLocation("Oxbay_canyon")].reload.l3.disable = 0;
       }
So I have to wonder: WHY is that check even there? Is there any reason to not just get rid of that if-statement altogether?
 
Does anyone have any clues on the references to Standard Storyline stuff in the above Claire Larrouse sidequest code?
@Grey Roger or @Talisman, perhaps?

I can't fix it properly if I don't understand the intention behind all that. :facepalm
 
:ahoy

Looks like these are related to these two Standard Storyline characters being referred to outside the Standard Storyline:
Code:
    case "killing_clair_in_sea_complete":
       [...]
       if (!LAI_IsDead(characterFromID("Ferro cerezo")) && makeint(characters[GetCharacterIndex("danielle")].rank) < 9)
       {
         locations[FindLocation("Oxbay_canyon")].reload.l3.disable = 0;
       }

So I have to wonder: WHY is that check even there? Is there any reason to not just get rid of that if-statement altogether?



I don't know what Ferro cerezo is doing there - he is the guy that is blackmailing Padre Domingues - player goes to Sao Gorge tavern , Grenada and takes the incriminating papers from him and goes back to Padre Domingues with them - then player goes to Bridgetown to search the mines ( in the Find Danielle section ) :woot - so the check might be to make sure the reload at the correct end of the canyon works.

When going to the mines after Padre Domingues I think you can enter the Canyon from either end ( Sea (Lighthouse) or Town ( at the town end the story places Muggers who try to sell player into slavery in the Mines ) - in Claire Larousse you are transported to the canyon at the Sea end ( so - perhaps they did not want the player to enter the canyon from the Town end and get mixed up with the Main Story Muggers/Mine etc ) and go through it - then through the town.


So I think it must be something to do with this :shrug - could there be problems if someone played Claire after giving Domingues his letters back - but before going to the Mines/Canyon in the Main Story - since both Claire & Domingues are located in San Juan, Puerto Rico.

Looks like some "fake officers" are being added to you for some reason if you don't actually have any officers of your own.
But why? Are the fights so difficult that you need the extra hands?


If I remember - in Claire Larousse - when you arrive on Barbados - the story gives Claire 2 Crewmen and the player some crewmen as well ( perhaps the writers thought that the player might not take and officers/crew themselves. :shrug there are quite a few groups of soldiers that you have to fight in the story. :dance




:duel:

 
Last edited:
Thanks! I'm inclined to kick out all Standard Storyline references and make sure it works just as an individual sidequest.
Interference with the storyline should be quite unlikely, I reckon.

Though indeed you could end up doing both sections at the same time if you don't bother visiting Puerto Rico prior to the storyline leading you there.
That should probably be tested after any updates have been completed.
 
I have just played the Start of Claire larrouse

was not sure about the code referring to Ferro being dead so:-

2 saves attached ( Beta 4 23Aug version )

Save in Puerto Rico church - after giving letters back to Domingues ( Ferro Dead ) Next stop Barbados Mines.

Save outside Church - after giving letters back to Domingues ( Ferro left Alive - bought letters from him ) Next stop Barbados Mines.

In both cases I went to tavern and talked to Claire & started quest - sailed to Barbados with her - On arrival ( Land Ho) - transported to Canyon Claire's quest continues OK - fight soldiers.

So it appears that the transport to Canyon is to make sure that you do Claire's Quest before you go to the Mines for the main Sea Hawk story.


:read
 

Attachments

  • -=Player=- Puerto Rico. San Juan. Center. May 23rd, 1751.7z
    606 KB · Views: 194
  • -=Player=- Puerto Rico.7z
    605.2 KB · Views: 214
So it appears that the transport to Canyon is to make sure that you do Claire's Quest before you go to the Mines for the main Sea Hawk story.
Aha! So if I change it to the player having to manually travel everywhere, it could cause interference with the Standard Storyline?
Not sure if it is worth the effort to change it then.

What actual problems are there with this sidequest?
If it it just the missing ship if you double-cross Claire, that should be solvable by giving command to another character rather than trying to reuse a resurrected Claire.
 
Aha! So if I change it to the player having to manually travel everywhere, it could cause interference with the Standard Storyline?
Not sure if it is worth the effort to change it then.


Yes - it appears to be there just to ensure no conflicts if the Player plays Claire at a very specific point in the Sea Hawk Story - where both Quests use the same location ( Barbados Canyon)

:read
 
Here are some of the related compile.log entries:
Code:
Quest name fight_with_larrouse_complete FOUND in SideQuestComplete
Quest name remove_faked_officers FOUND in SideQuestComplete
Quest name exit_from_oxbay_to_sea_complete FOUND in SideQuestComplete
ERROR - Missing Character ID: Ferro cerezo
Quest name killing_clair_in_sea_complete FOUND in SideQuestComplete
SEA: Error: Group Clair Larrouse, Island Oxbay
SEA: Error: Find locators Group , Locator
SEA: Warn: I am automatically deleting group 'Clair Larrouse', because it's empty
So the game IS executing all necessary quest code. Sounds to me like the problem arises because Claire is ALREADY DEAD as you just killed her.
The game is trying to put a copy of Claire with a different first name at sea, but that doesn't work because she's gone.
Might be related to this in PROGRAM\Characters\init\Officers.c:
Code:
  ch.old.name = "Claire";
   ch.old.lastname = "Larrouse";
   ch.name = TranslateString("","Claire"); // was Clair
   ch.lastname = TranslateString("","Larrouse");
   ch.id     = "Clair Larrouse";
   ch.model = "50_33_40Claire"; // was corsair1_1
   [...]
   LAi_NoRebirthEnable(ch); // <--------- THIS LINE ---------
   ch.greeting = "Gr_Clair Larrouse";
   AddGameCharacter(n, ch);
Executing this code through console.c doesn't seem to help though;
Code:
LAi_NoRebirthDisable(characterFromID("Clair Larrouse"));
A better solution might be to create a separate character to serve as captain for Claire's ship in the following sea battle.

Claire is gone as your companion straight away when you kill her, so this doesn't even do anything:
Code:
      RemoveCharacterCompanion(Pchar, &Characters[GetCharacterIndex("Clair Larrouse")]);
       SetCharacterRemovable(characterFromID("Clair Larrouse"), true); // NK
Also, does anyone have any clue what is the point of these checks with "Blaze Crewmember"?
Code:
      iPassenger = makeint(Pchar.Temp.Officer.idx1);
       if (characters[iPassenger].id == "Blaze_Crewmember_01" || characters[iPassenger].id == "Blaze_Crewmember_02" || characters[iPassenger].id == "Blaze_Crewmember_03")
       {
         RemovePassenger(pchar, &characters[iPassenger]);
       }
       iPassenger = makeint(Pchar.Temp.Officer.idx2);
       if (characters[iPassenger].id == "Blaze_Crewmember_01" || characters[iPassenger].id == "Blaze_Crewmember_02" || characters[iPassenger].id == "Blaze_Crewmember_03")
       {
         RemovePassenger(pchar, &characters[iPassenger]);
       }
       iPassenger = makeint(Pchar.Temp.Officer.idx3);
       if (characters[iPassenger].id == "Blaze_Crewmember_01" || characters[iPassenger].id == "Blaze_Crewmember_02" || characters[iPassenger].id == "Blaze_Crewmember_03")
       {
         RemovePassenger(pchar, &characters[iPassenger]);
       }
Looks like some "fake officers" are being added to you for some reason if you don't actually have any officers of your own.
But why? Are the fights so difficult that you need the extra hands?

And if we're questioning this sidequest anyway.... Why does it start with an automatic reload from sea to the Canyon location?
Why not just let the player get their by his/her own means like the game normally would?

So yes, this sidequest does seem quite needlessly confusing. o_O


Some nasty error logs too:
Code:
RUNTIME ERROR - file: quests\quests_side.c; line: 6936
Missed array index
RUNTIME ERROR - file: quests\quests_side.c; line: 6937
Missed array index
RUNTIME ERROR - file: quests\quests_side.c; line: 6938
Missed array index
RUNTIME ERROR - file: quests\quests.c; line: 434
invalid index -1 [size:2250]
RUNTIME ERROR - file: quests\quests.c; line: 434
function 'CharacterFromID' stack error
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Using reference variable without initializing
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
uninitialized function argument
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
function 'LAi_IsDead' stack error
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Invalid argument type for '!' opearator
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Using reference variable without initializing
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
Using reference variable without initializing
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
invalid index -1 [size:2250]
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
invalid array index
RUNTIME ERROR - file: quests\quests_side.c; line: 7081
function 'SideQuestComplete' stack error
Looks like these are related to these two Standard Storyline characters being referred to outside the Standard Storyline:
Code:
    case "killing_clair_in_sea_complete":
       [...]
       if (!LAI_IsDead(characterFromID("Ferro cerezo")) && makeint(characters[GetCharacterIndex("danielle")].rank) < 9)
       {
         locations[FindLocation("Oxbay_canyon")].reload.l3.disable = 0;
       }
So I have to wonder: WHY is that check even there? Is there any reason to not just get rid of that if-statement altogether?
For the next version, I have made the following changes:
- Claire is actually named that IN CODE too (no more Clair) and the old "Clair Larrouse" returns to captain her ship after you kill her.
That way the ship SHOULD get to have a captain and hopefully will actually show up now.
- Remove the Standard Storyline dependent if-statement to prevent error logs; I doubt that will mess up much of anything.
 
What is it needed here to test?
Play the "Claire Larousse" sidequest and double-cross here at the end.
There should be a ship generated at sea for you to fight after killing her and then the quest should completely properly.
That wasn't the case before.
 
Reminder that I do want to get this one tested as soon as possible so I'll know if more changes are needed!
 
:aar


Just tried to play Claire Larousse ( in Jack Sparrow story ) - everything OK except ending - if you double cross & kill her - her ship is not there to fight when you go to sea.

& I think you don't get all the money - just the same amount as if you had split it with her ( 30,000) :walkplank

Tried both dialog options for double crossing her - same result. :shrug

P.S. Is the player supposed to have fake crew/officers with them ( provided for them ) - Claire had 2 crew, but I did not take any of my own and so there was only me ( player), Claire, and 2 of Clarie's crew. Claire's crew were killed in the first fight , so from then on it was just me and Claire against the soldiers. :duel:

Save is just before you get to beach & fight last lot of soldiers.
 

Attachments

  • -=Player=- Barbados.7z
    577.8 KB · Views: 189
  • error_CL1.log
    1.1 KB · Views: 180
  • compile_CL1.log
    34.8 KB · Views: 183
  • system_CL1.log
    22.1 KB · Views: 186
  • error_CL2.log
    445 bytes · Views: 181
  • compile_CL2.log
    5.9 KB · Views: 184
  • system_CL2.log
    5.8 KB · Views: 191
Last edited:
Back
Top