• 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 Jack Sparrow: Improvements to Maximus and Philippe Quest

- A bunch of "Treasure Quest" pirate characters are initialized in TActors.c
- These are reused again for each Treasure Quest; for details, see here: Fix in Progress - Levelling: Treasure Quest Pirates Unaffected | PiratesAhoy!
- However, these guys are ALSO re-purposed in this part of the Jack Sparrow main quest for some reason (???)
- They should appear as enemies, but they don't and they DO need to die for the quest to continue
- That doesn't actually break the quest though, since the reason they didn't appear is because the game figures they're ALREADY DEAD (remember we had that problem before, but at sea)
- Probably happens because they were used in a Treasure Quest, got killed and then the game considered them dead and wouldn't resurrect them properly again


Could these guys just be changed - to say Isle de Muerta pirates - sort of like Claire Larousse's crew in the canyon.

So that they would not belong to any other group. Just be for this one appearance.

What would it need - a couple of character init entries in TempQuest.c or Temp QuestEnemy.c and some changes in those cases in quests_reaction.c

:shrug

After all they have a short & very brief existance - how did they manage to find the Isle de Muerta anyway :razz ( probably shipwrecked there ) xD


:drunk
 
Indeed I was wondering myself what those enemies are even doing there at all.
The island doesn't seem very secret there, does it? :shock

@jack sparring: If you explain how you'd like the scene to ideally play out, I'll see about doing it for you.
I want to change the code for those Pirates anyway so they use a more normal solution.
 
Indeed I was wondering myself what those enemies are even doing there at all.

My guess is whoever coded this wanted to show the curse at work, being immortal. They do seem out of place and my opinion is that they probably shouldn't be there at all. So if you share that opinion you can just remove that and save yourself some time trying to fix them as well. I'll take care of the dialogs then.

@jack sparring: If you explain how you'd like the scene to ideally play out, I'll see about doing it for you.

I think the scene is already playing out pretty much as I imagined it to be. While the others are running away Jack shouts at them , a little bit confused cause he doesn't know what's going on and he didn't expect that. But after they leave he gets focused again and starts searching the island for something to help him. So I wouldn't change anything else , if you want to take a look at the dialog and why it is not showing better you can do that. I don't know why.

A small suggestion, while you are at it, take a look at the immortal thing after he supposedly puts the coins back because when i played it, I got into a couple of fights later in the game where I took no damage. I'm not sure about this because it was only a couple of short fights so maybe I just blocked all the attacks but I don't trust I am that good at fighting yet. Perhaps if I find the time to test this a little more I can tell for sure.
 
You can use the god mode cheat to toggle immortality.
That should tell you if it is still on or not.
 
What I'll try to do tonight:
- Replace the two "Treasure Quest" pirates with temporary ones like in normal quest cases.
- Check what is going on with the interface showing on top of the self dialog.
- Possibly add the player running behind the two leaving captains, then start the self dialog.
- Random enemy pirates showing up at a supposedly secret island seems rather weird to me. But how about some mummies instead?
It does make sense to show that you don't take damage anymore and the best way to do that is in a fight.

Actually, it is a bit of a shame that the Jack Sparrow storyline does not at all make use of the actual "Cursed Coins" feature.
 
Actually, it is a bit of a shame that the Jack Sparrow storyline does not at all make use of the actual "Cursed Coins" feature.

To do that you would probably have to have a side quest featuring Barbossa, Ragetti, Pintell and Bootstrap Bill - them taking the treasure after marooning Jack Sparrow - then discovering they are immortal - then searching for the coins that they have given away & are scattered around the islands - in certain places or with specific people that they have to find.

While they search for the coins they are affected by the curse.

Then returning the coins to the treasure chest until there is only one missing ( the one with Will Turner).

:drunk
 
To do that you would probably have to have a side quest featuring Barbossa, Ragetti, Pintell and Bootstrap Bill - them taking the treasure after marooning Jack Sparrow - then discovering they are immortal - then searching for the coins that they have given away & are scattered around the islands - in certain places or with specific people that they have to find.
That's what the Barbossa Free Play character is for. :cheeky

I was thinking more along the lines of applying the curse functionality to Jack during the few scenes he is cursed instead of handling all that through quest code.
But that is hardly important.
 
As a "fix" for the non-appearing pirates, try the attached.
Extract to PROGRAM\Storyline\JackSparrow\quests to make use of this.

It ended up as quite an insane bit of coding because I tried to make use of the already existing "Treas_Pirate" characters that were already in use there before:
Code:
    case "Fight_the_Muerte_Pirates":
//       AddQuestRecord("The Brotherhood",16); // Talisman moved up a case so player gets entry at treasure telling them what to do
     /*   LAi_ActorAttack(CharacterFromID("Treas_Pirate_8"), PChar, "");
       LAi_ActorAttack(CharacterFromID("Treas_Pirate_9"), PChar, "");*/
      
       for(cc =  8; cc <= 9 ; cc++)
       {
         sld = &Characters[GetcharacterIndex("Treas_Pirate_" + cc)];
         ClearCharacter(sld); // PB: Clear ALL attributes from previous character
         sld.nation = PIRATE;
         SetModelfromArray(sld, GetModelIndex(GetRandomModelForTypeExSubCheck(1, "Sailors", "man", sti(sld.nation))) );
         SetRandomNameToCharacter(sld);
         InitCharacterSkills(sld);   // PB: Reset this character
         LAi_NPC_Equip(sld, sti(sld.rank), true, true);
         LAi_SetWarriorType(sld);
         LAi_group_MoveCharacter(sld, "treasure_pirates");
         LAi_SetImmortal(sld, false);
       }

       ChangeCharacterAddressGroup(CharacterFromID("Treas_Pirate_9"), "IslaDemuerte_shore_01", "goto", "citizen01");
       ChangeCharacterAddressGroup(CharacterFromID("Treas_Pirate_8"), "IslaDemuerte_shore_01", "goto", "locator13");

Normally we would use one line like this to generate a temporary character:
Code:
sld = LAi_CreateFantomCharacter(false, 0, false, true, 0.25, "black_corsair", "goto", "goto19");
In this case though I wanted to know what was needed to make it work like this so that I could apply the same changes to GenerateTreasureQuest in MAXIMUS_functions.c .

This seems to work, but there should definitely be simpler and cleaner solutions.
@Levis should probably have a look into this one as similar situations may occur elsewhere as well.
Now they're mummies and no longer need to use such strange code: :cheeky
Code:
    case "Fight_the_Muerte_Pirates":
//       AddQuestRecord("The Brotherhood",16); // Talisman moved up a case so player gets entry at treasure telling them what to do

       sld = LAi_CreateFantomCharacter(false, 0, true, true, 0.25, "mummy", "goto", "citizen01");
       sld.name = "Heumac";
       sld.lastname = "";
  TakeItemFromCharacter(sld, FindCharacterItemByGroup(sld, BLADE_ITEM_TYPE));
  TakeItemFromCharacter(sld, FindCharacterItemByGroup(sld, GUN_ITEM_TYPE));
  GiveItem2Character(sld, "tomahawk");
  sld.equip.blade = "tomahawk";
  TakenItems(sld, "pistoldart", 2);
  sld.equip.gun = "pistoldart";
       LAi_group_MoveCharacter(sld, "MUERTA_ENEMIES");

       sld = LAi_CreateFantomCharacter(false, 0, true, true, 0.25, "mummy", "goto", "locator13");
       sld.name = "Tezcacoatl";
       sld.lastname = "";
  TakeItemFromCharacter(sld, FindCharacterItemByGroup(sld, BLADE_ITEM_TYPE));
  TakeItemFromCharacter(sld, FindCharacterItemByGroup(sld, GUN_ITEM_TYPE));
  GiveItem2Character(sld, "tomahawk");
  sld.equip.blade = "tomahawk";
  TakenItems(sld, "pistoldart", 2);
  sld.equip.gun = "pistoldart";
       LAi_group_MoveCharacter(sld, "MUERTA_ENEMIES");

       LAi_group_FightGroups("MUERTA_ENEMIES", LAI_GROUP_PLAYER, true);

       LAi_group_SetCheck("MUERTA_ENEMIES", "Killed_the_Muerte_Pirates");
     break;
 
As far as I'm concerned, the attached should do the trick.
This includes @jack sparring's added dialog, but I smoothed it out a bit more.
Plus Mummies instead of pirates as enemies, less strange code, bigger locator radius and disabling Godmode again.

To test the effect of that bigger locator radius, use this console command on the savegame posted earlier by @jack sparring:
Code:
Locations[FindLocation("Grotto")].locators_radius.goto.goto4 = 3.0;
 

Attachments

  • quests_reaction.zip
    53.7 KB · Views: 80
Back
Top