• 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

I have no objections at all.
Now that I see the original line, indeed he refers to the player as a privateer.
So indeed that would make no sense if you're not actually a privateer.

Should that mission be available if you're in the British Navy as well?
 
The condition is 'if(!IsInServiceOf(ENGLAND))'. So indeed you can get the mission if you're in the navy. Indeed, perhaps arrange another alternative dialog so that if you're in the navy then you're ordered to escort the pesky merchant. That, however, is for someone else to do - I'm busy enough alternating between tweaking "Assassin" and progressing "Ardent"!
 
The condition is 'if(!IsInServiceOf(ENGLAND))'. So indeed you can get the mission if you're in the navy. Indeed, perhaps arrange another alternative dialog so that if you're in the navy then you're ordered to escort the pesky merchant. That, however, is for someone else to do - I'm busy enough alternating between tweaking "Assassin" and progressing "Ardent"!
Fair enough by me. I doubt many naval officer players will get particularly worked up about being called a privateer in that one single dialog. :doff
 
@Grey Roger: Thanks again for the files!

I have some questions about the antigua_portadmiral.c file though.
Is this code correct?
Code:
    case "insist_admiral3":
       dialog.snd = "Voice\CLLA\CLLA008";
       if(IsInServiceOf(ENGLAND)) {
         dialog.text = DLG_TEXT[122];
       }else{
         dialog.text = DLG_TEXT[124];
         SetRank(PChar, ENGLAND, GetOldRank(PChar, ENGLAND));
       }
You can't get to that section unless you are already in the service of England, right?
And I can't seem to find the new DLG_TEXT[124] . :unsure
 
@Grey Roger: Thanks again for the files!

I have some questions about the antigua_portadmiral.c file though.
Is this code correct?
Code:
    case "insist_admiral3":
       dialog.snd = "Voice\CLLA\CLLA008";
       if(IsInServiceOf(ENGLAND)) {
         dialog.text = DLG_TEXT[122];
       }else{
         dialog.text = DLG_TEXT[124];
         SetRank(PChar, ENGLAND, GetOldRank(PChar, ENGLAND));
       }
You can't get to that section unless you are already in the service of England, right?
And I can't seem to find the new DLG_TEXT[124] . :unsure
Anyway, the code for the admiral to give you a free LoM when you do the "Assassin" job is still in there, so if you really object to the part where he requires a LoM in advance, feel free to take it out
If you're happy enough with the admiral requiring the player to have an English LoM in advance, delete the obsolete bits which would give you the LoM for free when needed for "Assassin". So, case "insist_admiral3" should now look like this:
Code:
    case "insist_admiral3":
       dialog.snd = "Voice\CLLA\CLLA008";
       dialog.text = DLG_TEXT[122];
       link.l1 = DLG_TEXT[123];
       link.l1.go = "exit";
       AddDialogExitQuest("FrenchPinnace");
     break;
which is how it was originally.
 

Attachments

  • antigua_portadmiral.c
    5.7 KB · Views: 138
If you're happy enough with the admiral requiring the player to have an English LoM in advance, delete the obsolete bits which would give you the LoM for free when needed for "Assassin". So, case "insist_admiral3" should now look like this:
Code:
case "insist_admiral3":
dialog.snd = "Voice\CLLA\CLLA008";
dialog.text = DLG_TEXT[122];
link.l1 = DLG_TEXT[123];
link.l1.go = "exit";
AddDialogExitQuest("FrenchPinnace");
break;
which is how it was originally.
With your change, case "convoy" can only be accessed if you are in the service of England.
That is the one that leads to the "insist" quest code, so that extra LoM-giving code you added could never get executed.
I personally am perfectly happy with having it as it used to be. Hopefully @Bartolomeu o Portugues is too. :doff
 
With your change, case "convoy" can only be accessed if you are in the service of England.
That is the one that leads to the "insist" quest code, so that extra LoM-giving code you added could never get executed.
Correct. I originally went for the quick fix of simply copying the code by which Salvadore Benavides gives you the Spanish LoM. Then I thought a bit more and added the new bit which has the port admiral demand a LoM rather than hand it to you for free. As you say, this means the "insist" code can only be reached if you already have a LoM, making the condition redundant, but I thought I may as well leave it there in case we wanted to go back to having the admiral give you the LoM. The version which I uploaded in post #45 eliminates the redundant code, so now you're stuck with the admiral telling you to go and get a LoM if you don't have one. :p
I personally am perfectly happy with having it as it used to be. Hopefully @Bartolomeu o Portugues is too. :doff
Indeed. Don't put any of the revisions to "Assassin" into an official update until @Bartolomeu o Portugues has approved them. "Assassin" is still his storyline so as far as I'm concerned, he has final approval on all my work there.
 
Correct. I originally went for the quick fix of simply copying the code by which Salvadore Benavides gives you the Spanish LoM. Then I thought a bit more and added the new bit which has the port admiral demand a LoM rather than hand it to you for free. As you say, this means the "insist" code can only be reached if you already have a LoM, making the condition redundant, but I thought I may as well leave it there in case we wanted to go back to having the admiral give you the LoM. The version which I uploaded in post #45 eliminates the redundant code, so now you're stuck with the admiral telling you to go and get a LoM if you don't have one. :p
Makes sense.
Did you add an extra line to the dialog.h file though?
Maybe I misread the code, but it looked as if the .c file referred to a line that wasn't in the .h file.
Doesn't matter if I use the file from post #45, but otherwise it might cause an error with that dialog file.
Unless my tired brain is misunderstanding. :oops:
 
I did add an extra line. And then I took it out again when it wasn't needed. I probably should have left it there if I was going to leave the redundant code in as well, but as that's gone now as well, it doesn't really matter. :D
 
I did add an extra line. And then I took it out again when it wasn't needed. I probably should have left it there if I was going to leave the redundant code in as well, but as that's gone now as well, it doesn't really matter. :D
Indeed it doesn't matter now.
Just so you know though, having a reference in the dialog.c file to a line that doesn't exist in the dialog.h file causes an error that prevents the dialog from loading.
 
A couple more problems with the "Cannons of Isla Mona" section have emerged, both illustrated in this screenshot:
isla_mona_commander_house.jpg

The commander's house is locked, which is a nuisance as I've just been told that Chico Cois has been arrested and I need to talk to the commander. And those soldiers walking around in the background are Spanish.

The house is locked at case "arrived_islamona":
Code:
     case "arrived_islamona":
     SetCurrentTime(17.00, 0);     
       Locations[FindLocation("IslaMona_port")].reload.l1.disable = 1;
       Locations[FindLocation("IslaMona_port")].reload.l3.disable = 1;
       Locations[FindLocation("IslaMona_port")].reload.l6.disable = 1;       
       Locations[FindLocation("IslaMona_port_exit")].reload.l2.disable = 1;
       Locations[FindLocation("IslaMona_port_exit")].reload.l4.disable = 1;
But it's not unlocked until case "antes_IMfortbis3". This is too late, it's where you're in the warehouse and about to set off to blow up the cannons. If another unlock line is added to case "news_coisbis", which is where you've just been told about Chico Cois' arrest, you can then go and talk to the commander.

The reason for the Spanish soldiers is in "PROGRAM\ISLANDS\Islands_init.c":
Code:
rIsland.smuggling_nation = SPAIN; // PB: Matches with Isla Muelle
Change that to "ENGLAND". At present Isla Mona is only used by "Assassin", "Woodes Rogers" and "Ardent", and the latter two make their own arrangements for the island's ownership. (We probably don't want an on-screen message saying that Cozumel has been captured by England. At least, not until later. Plot dictates that England does indeed want to capture Cozumel from the French, and sends ships to do so after the Isla Mona incident.)
 
The reason for the Spanish soldiers is in "PROGRAM\ISLANDS\Islands_init.c":
Code:
rIsland.smuggling_nation = SPAIN; // PB: Matches with Isla Muelle
Change that to "ENGLAND". At present Isla Mona is only used by "Assassin", "Woodes Rogers" and "Ardent", and the latter two make their own arrangements for the island's ownership. (We probably don't want an on-screen message saying that Cozumel has been captured by England. At least, not until later. Plot dictates that England does indeed want to capture Cozumel from the French, and sends ships to do so after the Isla Mona incident.)
I'd suggest changing that smuggling nation in the Assassin StartStoryline.c OR have it happen at the relevant time in the quest.
Otherwise you would see it being English in all periods and storylines if you right-click the island in the Archipelago Map interface.
 
If I'm going to change it in "StartStoryline.c", what do I put instead of "rIsland"? If it works, it would also probably be a neater solution for "Ardent" than the clumsy trick of pretending it's Cozumel and capturing it for "PIRATE". It could also perhaps change back to "SPAIN" within "quests_reaction.c" after the incident with the cannons - the vice admiral mentions that with the big guns gone, he wants to send a fleet to kick the English out, and Elting mentions this would be a good time to do so because the English fleet is busy at Cozumel.
 
You should be able to use GetIslandFromID("IslaMona") .
I'm writing this from memory, so my syntax may be wrong; but that does work.

If it works, it would also probably be a neater solution for "Ardent" than the clumsy trick of pretending it's Cozumel and capturing it for "PIRATE".
The main reason for "pretending it is Cozumel" is because Isla Mona doesn't actually have a town to capture (as far as the game code is concerned).
Using the full town capture function affects a lot more than the smuggling nation. @Jack Rackham needed that to ensure he'd get a Personal Flag flying for his storyline.
And for Ardent you have that so that all characters in the init files are changed as well.

It could also perhaps change back to "SPAIN" within "quests_reaction.c" after the incident with the cannons - the vice admiral mentions that with the big guns gone, he wants to send a fleet to kick the English out, and Elting mentions this would be a good time to do so because the English fleet is busy at Cozumel.
Sure. :onya
 
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!
 
There is probably a way to do it without requiring additional variables, but I have to check the correct syntax for that at home.
 
Possibly by using 'FindIsland'? Like 'GetIslandById', it's defined in "islands.c" but returns an index rather than a reference. So perhaps:
Code:
Islands[FindIsland("IslaMona")].smuggling_nation = ENGLAND;
would work?
 
Possibly by using 'FindIsland'? Like 'GetIslandById', it's defined in "islands.c" but returns an index rather than a reference. So perhaps:
Code:
Islands[FindIsland("IslaMona")].smuggling_nation = ENGLAND;
would work?
Yep, that's it. You may have to use an '&' sign though:
Code:
&Islands[FindIsland("IslaMona")].smuggling_nation = ENGLAND;
That's what we always do for locations. Not entirely sure why that's necessary, but I think it's important. o_O
 
"Always"? Various commands throughout "quests_reaction.c" (and for that matter in Ardent's "StartStoryline.c") to change reload links don't use it, e.g.
Code:
Islands[FindIsland("IslaMona")].reload.l1.goto_enable = true;
Unlocks the port so you can dock there. (I think I probably copied it straight from "Assassin", which is why the "Ardent" version is the same. xD)
 
Back
Top