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.
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?