• 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 Assassin Storyline: Updates for Beta 4.1

OK, this to go at the end of "StartStoryline.c" for "Assassin":
Code:
   island = GetIslandByID(IslaMona);
   island.smuggling_nation = ENGLAND;                 // GR: Default is SPAIN, this line makes soldiers English
And a similar pair to go into "quests_reaction.c" at case "acaba_mona" to put it back to Spain, that being where the "Cannons of Isla Mona" quest closes after you've taken La Couronne, which I believe is supposed to be happening round about the time the vice admiral is sending his force to take Isla Mona. Both "StartStoryline.c" and "quests_reaction.c" to have declarations for 'ref island;'.

All the above subject to approval by @Bartolomeu o Portugues of course!
Added to my game version now for the next update. :doff
 
I was hoping to wait for approval from @Bartolomeu o Portugues first, this being his storyline. ;) Especially for the changes to nationality of Isla Mona, most especially for the change back to Spain after "Cannons of Isla Mona" ends, in case he either doesn't want that at all or intended for Spain to take Isla Mona at some other point.
Fair deal! :cheers

It being in my game files means I'll get to see it next time I do a WinMerge, so it serves as a reminder.
But I'll be sure to ask Bartolomeu again if he hasn't responded by then. :doff
 
I was hoping to wait for approval from @Bartolomeu o Portugues first, this being his storyline. ;) Especially for the changes to nationality of Isla Mona, most especially for the change back to Spain after "Cannons of Isla Mona" ends, in case he either doesn't want that at all or intended for Spain to take Isla Mona at some other point.
I like the idea. Maybe, you could add some dialogues to the Vice-admiral or a quest text telling the spaniards took the island after the success of the Elting's mission.
 
Talking of dialogs, I've now become convinced that @Pieter Boelen is right to want those dialogs which add storyline-related bits to general character dialogs to go into the general "PROGRAM\DIALOGS" folder rather than into storyline-specific folders. However, the rewrites necessary for this to happen to "Assassin" dialogs are beyond the scope of my minor tweaking, so for the moment I'm just doing what I can to get the dialogs to work.

Cole Arkwright_dialog.c/h: Cole Arkwright is the generic name for the governor of Governor's Harbour, or in "Spanish Main" period, Puerto la Cruz. When I went to talk to the governor about arresting Roxanne Lalliere, no dialog about the arrest was available. Looking at the files, the code for that dialog is there, but not the code to activate it. Looking at the Beta 3 main archive file (yes, I still have that, very useful for finding out why something which worked before doesn't work now :)) there used to be a storyline-specific version of these files. Whoever merged them with the general versions missed out the bit in case "quests" which activates that piece of dialog. This was easily fixed, I simply copied case "quests" from the Beta 3 storyline version into the Beta 4 standard version, then I was able to talk to the governor about Roxanne Lalliere.

Reynard Grueneveldt_dialog.c/h: Reynard Grueneveldt is governor of Kralendijk, with involvement in at least two storylines plus two side quests. This is one busy governor! The problem is that the storyline-specific versions of his files in "Assassin" don't include the sidequest stuff, which makes the "Strange Things Going On" sidequest impossible and the "Saving Toff's Daughter" harder. Another problem is that the dialog cases which govern his "Assassin" storyline stuff seem to have the same names as the cases which govern his "Bartolomeu" storyline stuff in the general versions of his files. I didn't realise that at first; I spotted familiar case names, hoped this meant the "Assassin" stuff had been copied into the general files, renamed the storyline-specific files to deactivate them so Reynard Grueneveldt would pick up the general files instead, and ended up talking to him about "Bartolomeu" story rather than "Assassin" story. The quick'n'dirty fix I came up with was to leave the storyline versions renamed, then have him switch to using them at that point in the storyline where you go to make peace with Holland, then have him switch back to the general file immediately afterwards. It's not pretty but it does mean Elting can do the "Strange Things Going On" sidequest, possibly during one of the two periods when the vice admiral effectively orders him to go off and do some free-play.

blaze_dialog.c: critical for "Saving Toff's Daughter", but the way it handles this seems to have changed, and the storyline-specific version doesn't have the new version. So when I tried to save Toff's daughter, and went to the port, I got the wrong piece of dialog - it repeated something which had been said to the governor and did not give options to go to the ship or wait. And I can't make a merged version because the file also controls part of the "Hard Labours of an Assassin" side quest, only the "Assassin" storyline has its own version of that. So I've copied the new version of the "Saving Toff's Daughter" stuff into the storyline version of "blaze_dialog.c". Again, not ideal, but it works.

So now I'm entering the closing phase of the storyline and when I'm finished, I'll post all these updates. Meanwhile, I've converted several dialog files in "Ardent" to be suitable to move into the general dialog folders, then moved them.
 
How's this for an Assassin's fleet?
three_diablos.jpg three_diablos_sea.jpg

The original El Diablo is the one I got at the start of the game. El Diablo II is the one I got after bringing in La Couronne. El Diablo III is the one Chico Cois brought me while I was telling Reynard Grueneveldt what I'd done to the vice admiral. That, by the way, is why you can see the Dutch naval ensign on the lead ship - Governor Greuneveldt's reward for bumping off both Vice Admiral Benavides and Enrique Padilla was a free Dutch LoM.

At some point after Nicholas Butcher has left but before Bartolomeu gives you his ship, berth your ship. You can't do that while you have a companion which is why Nicholas Butcher has to be out of the way, so timing is tight, but it can be done. Then, when you have taken Chico Cois to the beach, go back to Eleuthera and retrieve the ship. While you're at it, retrieve whichever one you berthed after the La Couronne incident.
 
Cole Arkwright_dialog.c/h: Cole Arkwright is the generic name for the governor of Governor's Harbour, or in "Spanish Main" period, Puerto la Cruz. When I went to talk to the governor about arresting Roxanne Lalliere, no dialog about the arrest was available. Looking at the files, the code for that dialog is there, but not the code to activate it. Looking at the Beta 3 main archive file (yes, I still have that, very useful for finding out why something which worked before doesn't work now :)) there used to be a storyline-specific version of these files. Whoever merged them with the general versions missed out the bit in case "quests" which activates that piece of dialog. This was easily fixed, I simply copied case "quests" from the Beta 3 storyline version into the Beta 4 standard version, then I was able to talk to the governor about Roxanne Lalliere.
You can probably blame me for that then....
There were bound to be some mistakes in that; it was rather a large job to do that for all storyline governors.:oops:

blaze_dialog.c: critical for "Saving Toff's Daughter", but the way it handles this seems to have changed, and the storyline-specific version doesn't have the new version. So when I tried to save Toff's daughter, and went to the port, I got the wrong piece of dialog - it repeated something which had been said to the governor and did not give options to go to the ship or wait. And I can't make a merged version because the file also controls part of the "Hard Labours of an Assassin" side quest, only the "Assassin" storyline has its own version of that. So I've copied the new version of the "Saving Toff's Daughter" stuff into the storyline version of "blaze_dialog.c". Again, not ideal, but it works.
What is the difference with that sidequest? I don't remember now.... :unsure

So now I'm entering the closing phase of the storyline and when I'm finished, I'll post all these updates. Meanwhile, I've converted several dialog files in "Ardent" to be suitable to move into the general dialog folders, then moved them.
Thank you very much indeed! :bow

The original El Diablo is the one I got at the start of the game. El Diablo II is the one I got after bringing in La Couronne. El Diablo III is the one Chico Cois brought me while I was telling Reynard Grueneveldt what I'd done to the vice admiral. That, by the way, is why you can see the Dutch naval ensign on the lead ship - Governor Greuneveldt's reward for bumping off both Vice Admiral Benavides and Enrique Padilla was a free Dutch LoM.

At some point after Nicholas Butcher has left but before Bartolomeu gives you his ship, berth your ship. You can't do that while you have a companion which is why Nicholas Butcher has to be out of the way, so timing is tight, but it can be done. Then, when you have taken Chico Cois to the beach, go back to Eleuthera and retrieve the ship. While you're at it, retrieve whichever one you berthed after the La Couronne incident.
What are the reasons for losing your ship again?
In the Bartolomeu Storyline, I added a "stolenship" attribute so you would get the same ship back that was stolen, even if that was a different ship than the storyline intended.
Maybe something similar might help here?
 
You can probably blame me for that then....
There were bound to be some mistakes in that; it was rather a large job to do that for all storyline governors.:oops:
Yes, I'd guessed as much. I wasn't interested in pointing fingers, though, just in catching the inevitable error which slipped through. Given the amount of mistakes I've had to correct in my own storyline to get it working, based on feedback, I'm just in awe that you didn't let a few more through. :bow

What is the difference with that sidequest? I don't remember now.... :unsure
Several targets have moved to different locations. In particular, Pepin Bertillon has moved from Nevis to San Salvador ("Spanish Main" name for Turks Island).

Having said that, looking at the dialog files, the self-dialog doesn't actually mention the location so we might get away with merging it to the central version after all.

What are the reasons for losing your ship again?
In the Bartolomeu Storyline, I added a "stolenship" attribute so you would get the same ship back that was stolen, even if that was a different ship than the storyline intended.
Maybe something similar might help here?
There's no particular reason for you to lose your ship when you take La Couronne. You need to be personally in command of the battleship when you return to the vice admiral, as he doesn't know you have it if it's a companion under command of one of your officers. So you need to swap ship to it, and perhaps there was the assumption that you'd lose your ship when you did. But it's easy enough to put a companion officer onto the battleship and then swap ship, so you have the battleship and he has El Diablo. And you definitely have at least one officer because he's given to you right at the start - Chico Cois. The only catch is that you'll need "Leadership" at least 5 by the time you get to this point, either in person or via another officer, because if you're relying on Boatswain Cois to provide your "Leadership" then it disappears when you put him onto his own ship.

The next time you're likely to lose your ship is when, having joined forces with Bartolomeu, you hike to Alice Town and then sail off in his ship, supposedly abandoning yours in Puerto la Cruz. Once you know what's about to happen, you can berth it, then return and get it back later.

I've figured out my own way to take your ship from you and then return exactly the same ship later, and it's implemented in "Ardent". And, for that matter, in "Tales of a Sea Hawk", which is where I got the idea. You swap ship with some other character, then later you swap it back. "Ardent" pulls a nautical version of the trick with three balls and a cup - Mauricio Juradu initially has a fishing boat, then you swap ships with him when he steals it, ready for you to meet up with the fisherman and "officially" get the fishing boat. When you meet up with Juradu again, you swap ship again. Fisherman Doolin Becart doesn't actually have a ship at all.
 
Yes, I'd guessed as much. I wasn't interested in pointing fingers, though, just in catching the inevitable error which slipped through. Given the amount of mistakes I've had to correct in my own storyline to get it working, based on feedback, I'm just in awe that you didn't let a few more through. :bow
Who says I didn't? Maybe they just haven't been found yet! :razz

I definitely remember having a hard time with those storyline-specific governor dialogs.
And I think there is still some sidequest code hiding in versions of governor dialogs that should have nothing to do with it.
So you might be able to proceed the Animists sidequests at another governor. Which is obviously NOT intentional. :facepalm

Several targets have moved to different locations. In particular, Pepin Bertillon has moved from Nevis to San Salvador ("Spanish Main" name for Turks Island).

Having said that, looking at the dialog files, the self-dialog doesn't actually mention the location so we might get away with merging it to the central version after all.
Oh wait, you're referring to the HITMAN sidequest. Sorry, I got confused there.

I've figured out my own way to take your ship from you and then return exactly the same ship later, and it's implemented in "Ardent". And, for that matter, in "Tales of a Sea Hawk", which is where I got the idea. You swap ship with some other character, then later you swap it back. "Ardent" pulls a nautical version of the trick with three balls and a cup - Mauricio Juradu initially has a fishing boat, then you swap ships with him when he steals it, ready for you to meet up with the fisherman and "officially" get the fishing boat. When you meet up with Juradu again, you swap ship again. Fisherman Doolin Becart doesn't actually have a ship at all.
That works too. :onya
 
I've now completed a playthrough of this storyline under the 22nd May version of Beta 4.1. The complete set of fixes can now be found here:
http://www.piratesahoy.net/threads/...a-4-0-public-release.27077/page-3#post-541174

There was one minor hiccup. In the storeroom where Johan Elting, Henry Morgan and Bartolomeu o Portugues finally get to steal the Aztec throne, there was an error message:
ERROR - Quest name morro_entrepot5 NOT found in ANY function
Here's why:
Code:
    case "morro_entrepot4":
  ref morrob;     
      morrob = &Locations[FindLocation("Morro_Fort")];
       DeleteAttribute(morrob,"building");
       
       LAi_SetOfficerType(characterFromID("Bartolomeu"));       
  LAi_ActorGoToLocator(characterFromID("Henry Morgan"), "goto", "goto10", "morro_entrepot5", 18.0); // <--- This is what causes the error
  break;

I've no idea what case "morro_entrepot5" was supposed to do, but it's not defined. Case "morro_entrepot6" is defined, though.

@Bartolomeu o Portugues: this doesn't stop the quest from continuing to conclusion, it just spawns an error message. The easy fix would be to add an empty case:
Code:
case "case "morro_entrepot5":
break;
But did you have anything else in mind that was supposed to happen at this point, which would be handled by case "morro_entrepot5"?
 

Attachments

  • compile.log
    44.1 KB · Views: 130
The easy fix would be to add an empty case:
Or a cleaner fix:
Code:
LAi_ActorGoToLocator(characterFromID("Henry Morgan"), "goto", "goto10", "", 18.0);
E.g. avoid calling a quest case that doesn't exist. ;)

That log message is something I added mainly for debugging purposes.
In the past, we never even noticed if quest cases didn't exist. :facepalm
 
Or a cleaner fix:
Code:
LAi_ActorGoToLocator(characterFromID("Henry Morgan"), "goto", "goto10", "", 18.0);
E.g. avoid calling a quest case that doesn't exist. ;)
I had considered that, but on at least one occasion when I did that during development of "Ardent" I got an error message that case "" does not exist. That's why "Ardent" has case "test", which just puts out a silly 'logit' message, and whose only purpose in existence is so that if I do a teleport through console then it can take"test" as the quest parameter.
 
I had considered that, but on at least one occasion when I did that during development of "Ardent" I got an error message that case "" does not exist. That's why "Ardent" has case "test", which just puts out a silly 'logit' message, and whose only purpose in existence is so that if I do a teleport through console then it can take"test" as the quest parameter.
In that case, use "_" instead of "".
 
All @Grey Roger's fixes now included in my game for the next update.

Also, I removed the reference to the non-existent quest case with "_" so no log messages should show anymore.
 
That's weird this bug doesn't stop the quest because morro_entrepot6 has the next dialogue to continue the quest and it isn't called anywhere else from what i checked. Normally, in the quests_reaction.c, you should change the name of the case morro_entrepot6 to morro_entrepot5.
 
That's weird this bug doesn't stop the quest because morro_entrepot6 has the next dialogue to continue the quest and it isn't called anywhere else from what i checked. Normally, in the quests_reaction.c, you should change the name of the case morro_entrepot6 to morro_entrepot5.
Case "morro_entrepot6" is called from here:
Code:
    case "morro_entrepot3":
       pchar.quest.ver_trone.win_condition.l1 = "locator";
       pchar.quest.ver_trone.win_condition.l1.location = "Morro_warehouse";
       pchar.quest.ver_trone.win_condition.l1.locator_group = "goto";
       pchar.quest.ver_trone.win_condition.l1.locator = "goto7";
       pchar.quest.ver_trone.win_condition = "morro_entrepot6";
     
  Characters[GetCharacterIndex("Henry Morgan")].dialog.currentnode = "begin_47";
  LAi_SetActorType(characterFromID("Henry Morgan"));
       LAi_ActorDialog(characterFromID("Henry Morgan"), pchar, "", 0.0, 0.0);
  break;
Walking up to a certain point (near the throne, if I remember correctly) is what triggers it. This is why the reference to "morro_entrepot5" does not break the quest, it merely produces an error message and log.

If "morro_entrepot6" is now "morro_entrepot5" then there will still be an error message from the above code. If that's changed to refer to "morro_entrepot5" then there will be two ways to trigger "morro_entrepot5", either from your movement to the throne or from Henry Morgan's movement in case "morro_entrepot4". Which is not necessarily a bad thing - I've intentionally done that in both "Hornblower" and "Ardent" on a couple of occasions so that the quest continues regardless of whether you or an NPC moves first. I'll perhaps need to change "morro_entrepot6" to "morro_entrepot5" in my own installation, find a savegame from before Elting enters the fort, then see how this plays out after the change.

But the simplest fix is probably to do what @Pieter Boelen suggested earlier, which is replace the reference to "morro_entrepot5" with "_" so that Henry Morgan's move no longer tries to call any quest case. This leaves the gameplay exactly as it was and just stops the error message.
 
But the simplest fix is probably to do what @Pieter Boelen suggested earlier, which is replace the reference to "morro_entrepot5" with "_" so that Henry Morgan's move no longer tries to call any quest case. This leaves the gameplay exactly as it was and just stops the error message.
I have done that in my game and then, for consistency, renamed "morro_entrepot6" to "morro_entrepot5" as per @Bartolomeu o Portugues' request.
 
Ok, now, I think I remember what happened in that time when I wrote the quest.
Forget what i said yesterday Pieter and change the line to:
LAi_ActorGoToLocator(characterFromID("Henry Morgan"), "goto", "goto10", "_", 18.0);
Thanks @Grey Roger , I forgot the case was triggered by a locator :modding
 
Back
Top