• 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!

Mod Release Build 14 Gamma Version [Last update: 12th January 2024]

The stormy start is supposed to give you a random sword. Normally you'll get a sabre ("blade1"). Stormy start gives you a random weapon which may be better (Maltese Knight Sword, Piranha, and the fix will give you a Highlander instead of a French Admiralty Rapier). Or it may be worse (dagger, badelaire, yataghan).

If you want to definitely start with a good sword, choose Adventurer or Sword Master as your background, and don't choose the stormy start.
 
Just a couple of things. Were in the Barbados jungle is the Portuguese officers sword. Going back to my original intent to getting more of those award blades in the game other ways maybe the could placed in various locations around the game to be discovered. just a thought.
 
I played through the Sprieghtstown dungeon and the only blade I found was an Arabic Scimitar. Did I miss the Portuguese officers sword? or is it somewhere in the Jungle?
 
Well I finally tried something just a little different. Normally I play Free Play and stormy start as Rebel and start with dozen or so so outfits and a full compliment of officers. For the first time I did Free Play as adventurer and got a good blade and gold cuirass but no officers. I presume that depending on the experience you chose you choose, you start with different accoutrements is that correct.? If so it is really neat design.
 
I played through the Sprieghtstown dungeon and the only blade I found was an Arabic Scimitar. Did I miss the Portuguese officers sword? or is it somewhere in the Jungle?
It's in the jungle. Follow the road between Bridgetown and Speightstown and look for a side road leading to a cave.

Going back to my original intent to getting more of those award blades in the game other ways maybe the could placed in various locations around the game to be discovered. just a thought.
That's not happening - as you may have noticed earlier in this thread, award blades are supposed to be awarded, not routinely left lying around! However, if you want to change what is in Speightstown dungeon, look in "PROGRAM\Locations\init\Oxbay.c". (Speightstown in the mod is Oxbay from the stock game and the game code still uses the old name.) Look for the section about "Dungeon 1", specifically this line:
Code:
Locations[n].items.randitem1 = "blade12";
Now look in "PROGRAM\ITEMS\initItems.c". The Arabic Scimitar is "blade12". Find the ID for whichever blade you want to put in the dungeon and change the 'Locations[n].items.randitem1' line to use that ID instead of "blade12".

Now, look at the walkthrough for one of the treasure quests on Cayman:
Lost Treasure on Cayman (Sand Bluff)
Go there when you do not have an active treasure quest. A treasure quest in a dungeon temporarily removes all the items hidden in the dungeon, including swords, to make sure you can find the treasure instead. But if you can find this particular dungeon when no treasure quest is hiding its items, you can find a unique sword in there.
 
I have spent 3 hours on this and have changed the color, the ribble in the sea. This is for the RADEON graphics card. Go out in the sea to check it out!

Put it in the MODULES/Techniques/Weather/Shaders and rename it to ATIShaders.sha

I don't have NVidia's graphics card, so you can test it yourself.

Update! Redownload please, fixes!
 

Attachments

  • ATIShaders.txt
    4.6 KB · Views: 23
Last edited:
I have spent 3 hours on this and have changed the color, the ribble in the sea. This is for the RADEON graphics card. Go out in the sea to check it out!

Put it in the MODULES/Techniques/Weather/Shaders and rename it to ATIShaders.sha

I don't have NVidia's graphics card, so you can test it yourself.
Sounds cool!
@Grey Roger, is that something that can be added to the main mod?
 
It can be. But it's provisional - it gets removed if anyone reports weirdness at sea. I have not forgotten the last time I let a new module in, the result being milky white seas until it was removed again.

And as I have an nVidia card, it will be up to other players to test this one...
 
It can be. But it's provisional - it gets removed if anyone reports weirdness at sea. I have not forgotten the last time I let a new module in, the result being milky white seas until it was removed again.

And as I have an nVidia card, it will be up to other players to test this one...
Turns out the cause of abnormal white milky sea is in syntax error, now all fixed, please redownload!

P.S. - The pictures couldn't fully capture the beauty of sea, especially when sun is setting down, I'm in love! DISABLE ENB (Shift+F12) or in the settings enbseries.ini
[GLOBAL]
UseEffect=0
 

Attachments

  • Screenshot 2023-12-23 201928.png
    Screenshot 2023-12-23 201928.png
    1.2 MB · Views: 54
  • Screenshot 2023-12-23 201950.png
    Screenshot 2023-12-23 201950.png
    1.4 MB · Views: 43
  • Screenshot 2023-12-23 202034.png
    Screenshot 2023-12-23 202034.png
    1.4 MB · Views: 39
  • Screenshot 2023-12-23 202049.png
    Screenshot 2023-12-23 202049.png
    1.3 MB · Views: 47
Last edited:
@Grey Roger: Thanks to my latest Jack Sparrow "Pieter Plays" death, I caught an error in a dialog file.
Place attached in PROGRAM\DIALOGS and it should now work as I think it was originally intended.

I also double-checked if the same "dialog.text +=" error was in any other files, but it seems it was exclusive to only this one.

EDIT: By the way, these lines looks suspect too:
Code:
if (CheckQuestAttribute("Jacks_early_days", "Try_to_join_Skull") || CheckQuestAttribute("Jacks_early_days", "Words_from_Skull") && npchar.id == "QC_officiant")
Code:
if (CheckQuestAttribute("Jacks_early_days", "Ines_Diaz_Discussion") || CheckQuestAttribute("Susan_Shaypen_Quests", "Ines_Diaz_with_Susan") && npchar.id == "QC_officiant")
 

Attachments

  • eng_officiant_dialog.c
    13.7 KB · Views: 24
Last edited:
@Grey Roger: Thanks to my latest Jack Sparrow "Pieter Plays" death, I caught an error in a dialog file.
Place attached in PROGRAM\DIALOGS and it should now work as I think it was originally intended.

I also double-checked if the same "dialog.text +=" error was in any other files, but it seems it was exclusive to only this one.
That version of "eng_officiant_dialog.c" includes some "Preprocessor_Add" statements in case "Blaze_must_escape_2" which won't do much unless you also have a new version of "eng_officiant_dialog.h". I'm also not sure what the revised code does or what is wrong with the original, apart from the "dialog.text +=". One change is significant though, so it's going into my new version - replacing one 'DLG_TEXT[42]' with 'DLG_TEXT[28]' makes the sentence much more sensible!

EDIT: By the way, these lines looks suspect too:
Code:
if (CheckQuestAttribute("Jacks_early_days", "Try_to_join_Skull") || CheckQuestAttribute("Jacks_early_days", "Words_from_Skull") && npchar.id == "QC_officiant")
Code:
if (CheckQuestAttribute("Jacks_early_days", "Ines_Diaz_Discussion") || CheckQuestAttribute("Susan_Shaypen_Quests", "Ines_Diaz_with_Susan") && npchar.id == "QC_officiant")
You're better placed to test those than I am, since you're playing "Hoist the Colours". But there's also this:
Code:
if (characters[GetCharacterIndex("Father Bernard")].quest.church_help == "letters_1" || characters[GetCharacterIndex("Father Bernard")].quest.church_help == "letters_2" && npchar.id == "Greenford_officiant")
That one I could test as it's for the normal version of the "Help the church" sidequest. Progress through the quest is tracked by attribute "quest.church_help" on Father Bernard and when you're about to talk to Nadine Jensen about Father Jerald, it's either "letters_1" or "letters_2" depending on what you did before talking to Gilbert Ballester. So I saved game immediately before talking to Nadine Jensen. A bit of console magic to do 'DumpAttributes' on Father Bernard showed which "letters" value was in "quest.church_help". Nadine Jensen duly complained about Father Jerald. Another bit of consolery to set "quest.church_help" to the other value, reload savegame, and again Nadine said her piece about Father Jerald. Then set "quest.church_help" to some other value related to the quest, and this time Nadine reverted to the normal random bar wench dialog.

The '&& npchar.id == "Greenford_officiant"' is to check that you're talking to the right bar wench. If, after Gilbert Ballester has told you about Nadine Jensen and given you the letters, you then forget what you're supposed to be doing and go somewhere else, the bar wench there should not say anything about priests and letters! But if the logic is faulty, the game could decide that if "quest.church_help" is set the right way, the whole condition is true. So I reloaded the savegame, did not talk to Nadine Jensen, and instead sailed round to Speightstown. And indeed, the bar wench there...

... had the normal random bar wench dialog. Another reload, another call on "console" to set "quest.church_help" to the other "letters" value, another trip to Speightstown, and another piece of random bar wench dialog. Just for good measure, I then returned to Bridgetown, where Nadine complained about Father Jerald.

So that line seems to work properly. You can try something similar to see if it works properly in Maelstrom or Build 15.
 
How do I download this again? Sorry, long time since I played the mod =)
By clicking on that link. ;) Then you need to unzip it - this is just a simple zip file, not a .exe which does anything automatically. But its folder structure is the same as the game's, so you can either unzip it straight into the game's top level installation folder, or unzip it somewhere completely different and then copy the whole lot straight to the game folder.
 
Another suggested update in PROGRAM\Loc_ai\LAi_events.c:
Code:
            if( CheckAttribute(weapon, "poison" ) )     // if weapon poisonous
            {
                if(GetAttribute(findCh, "id") == "Blackbeard")    LAi_SetImmortal(findCh, false);    // PB: Blackbeard can be killed also by a stinkpot or ether bottle
                findCh.chr_ai.poison =  300 ;    // poisons EVERY near character
And:
Code:
    if( CheckAttribute(weapon, "poison" ) )     // if weapon poisonous
    {
        if(GetAttribute(enemy, "id") == "Blackbeard")    LAi_SetImmortal(enemy, false);    // PB: Blackbeard can be killed also by a poisoned throwing knife
I think that should work to allow other poisoned weapons to also affect Blackbeard.
Don't know why I didn't do that in the first place... :confused:

That version of "eng_officiant_dialog.c" includes some "Preprocessor_Add" statements in case "Blaze_must_escape_2" which won't do much unless you also have a new version of "eng_officiant_dialog.h".
Actually, no; the preprocessors are not in the DLG_TEXT, but in the 'ShipLocationName' that gets merged in-between.
I copied those lines from the earlier case for dying in a friendly town above:
Code:
        case "survival3":
// KK -->//changed by MAXIMUS string GetCharacterShipLocation(ref rChar) declared in locations.c
            ShipLocationName = TranslateString("", GetCharacterShipLocationName(PChar));
            Preprocessor_Add("island_name", XI_ConvertString(GetIslandNameByLocationID(PChar.location)));
            if (CheckAttribute(&Locations[FindLoadedLocation()], "townsack")) Preprocessor_Add("town_name", FindTownName(GetCurrentTownID()));
            ShipLocationName = PreprocessText(ShipLocationName);
            Preprocessor_Remove("island_name");
            Preprocessor_Remove("town_name");
            if (HasSubStr(ShipLocationName, "port"))
                dialog.text = DLG_TEXT[27] + ShipLocationName + DLG_TEXT[29];
            else
                dialog.text = DLG_TEXT[27] + DLG_TEXT[28] + ShipLocationName + DLG_TEXT[29];
            link.l1 = DLG_TEXT[30] + DLG_TEXT[31];
            link.l1.go = "survival4";
// <-- KK
        break;
I can assure you, they are needed.
Originally tested it without and the location name didn't display correctly.
With these added, it does work right.

I'm also not sure what the revised code does or what is wrong with the original, apart from the "dialog.text +=".
That's the point.
The "dialog.text +=" simply doesn't work, so none of that second sentence ever displayed.
It was a very invisible sort of bug, but a bug nonetheless.
I caught this when my ship got moved to another location upon my death, but I didn't realize that happened.
The dialog was always meant to tell me about that, but it didn't because of this error.

One change is significant though, so it's going into my new version - replacing one 'DLG_TEXT[42]' with 'DLG_TEXT[28]' makes the sentence much more sensible!
Well, without the other changes, there's no point.
It won't display. :razz

So that line seems to work properly.
Guess it's fine then.
I got a bit alarmed with mixing && and || in the same statement.
Especially without brackets or anything.
I just never feel comfortable doing that, because I'm not sure how the game interprets that.
 

Attachments

  • LAi_events.c
    138.3 KB · Views: 15
Another suggested update in PROGRAM\Loc_ai\LAi_events.c:
Code:
            if( CheckAttribute(weapon, "poison" ) )     // if weapon poisonous
            {
                if(GetAttribute(findCh, "id") == "Blackbeard")    LAi_SetImmortal(findCh, false);    // PB: Blackbeard can be killed also by a stinkpot or ether bottle
                findCh.chr_ai.poison =  300 ;    // poisons EVERY near character
And:
Code:
    if( CheckAttribute(weapon, "poison" ) )     // if weapon poisonous
    {
        if(GetAttribute(enemy, "id") == "Blackbeard")    LAi_SetImmortal(enemy, false);    // PB: Blackbeard can be killed also by a poisoned throwing knife
I think that should work to allow other poisoned weapons to also affect Blackbeard.
Don't know why I didn't do that in the first place... :confused:
Doesn't that make him too easy to kill? He has a good melee weapon and good stats, though he could probably do with a "questchar" attribute so that levelling doesn't wreck those stats. So you just keep your distance and lob a poisoned throwing knife at him, rather than having to close and hit him with a poisoned sword.

Actually, no; the preprocessors are not in the DLG_TEXT, but in the 'ShipLocationName' that gets merged in-between.
I copied those lines from the earlier case for dying in a friendly town above:
...
I can assure you, they are needed.
Originally tested it without and the location name didn't display correctly.
With these added, it does work right.
OK, I'll add them in.

That's the point.

The "dialog.text +=" simply doesn't work, so none of that second sentence ever displayed.
That was my point - it was the one part of your revised code that I did recognise as a correction. ;)

Guess it's fine then.
I got a bit alarmed with mixing && and || in the same statement.
Especially without brackets or anything.
I just never feel comfortable doing that, because I'm not sure how the game interprets that.
Yes, I've seen some problems caused by that mixture. This time, however, it seems to work.

Incidentally, your playthrough pointed out another bug - you could repeatedly blackmail Father Jerald. That won't work for much longer. The first time you show the letters to Father Jerald, he gets a new attribute "letters_done". Whenever you talk to him and he says "Is this concerning your faith?", that attribute is checked and if it exists, you don't have the choice to talk about letters again.
 
Doesn't that make him too easy to kill? He has a good melee weapon and good stats, though he could probably do with a "questchar" attribute so that levelling doesn't wreck those stats. So you just keep your distance and lob a poisoned throwing knife at him, rather than having to close and hit him with a poisoned sword.
I dunno?
Can't quite decide...

That was my point - it was the one part of your revised code that I did recognise as a correction. ;)
I thought you meant the double DLG_TXT[42] was the only significant thing.
Misunderstanding. :facepalm

Incidentally, your playthrough pointed out another bug - you could repeatedly blackmail Father Jerald. That won't work for much longer. The first time you show the letters to Father Jerald, he gets a new attribute "letters_done". Whenever you talk to him and he says "Is this concerning your faith?", that attribute is checked and if it exists, you don't have the choice to talk about letters again.
Excellent!
I hoped as much.
:onya
 
Turns out the cause of abnormal white milky sea is in syntax error, now all fixed, please redownload!
@tuan16: I think you misunderstood. The milky white sea was the result of a different module some years ago. That one was provided by a different modder. I thought I'd tested it by renaming the existing version of the module and then copying the new version into my game, which seemed to work. But that was because the system loaded all modules, not just the ones with correct names, so it loaded the renamed original as well as the new one. Other players didn't have the renamed original, and they soon reported the problem. The faulty module was removed in the 2022 installer.

Your new version did fix a different problem, though. However, there are still a couple of odd things. Islands or rocks in the sea are sometimes reflected, and the reflections look blocky. By comparison, the old shader doesn't show the reflections at all. Screenshots of new and old versions:
new_shader_rocks.jpg old_shader_rocks.jpg

Although the whole sea doesn't turn white, it's very pale near the horizon shortly after dawn, but not with the original shader:
new_shader_dawn.jpg old_shader_dawn.jpg
Not seen here is a ship I spotted on the horizon - I didn't get a screenshot of that. Because the difference between sea and sky was not clear, the ship seemed to be floating in the air. But that might actually be realistic, causing the sort of mirage which may have been the cause of the Flying Dutchman legend.
 
Back
Top