Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature currently requires accessing the site using the built-in Safari browser.
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!
Join our discord server for regular podcasts/AMA about upcoming and released pirate games (Caribbean Legend, Corsairs Legacy, Ahoy, ERAS 2, etc.):
No, the dialog is not trying to add the character's name there. "Node_7" and parts of "Second time" and "Help_Failed" certainly need the correction, and case "Agreed_Help" may as well be corrected even though it does add the space between 'GetMyAddressForm(NPChar, PChar, ADDR_CIVIL, false, false)' and 'GetMyName(PChar)'.
1) PROGRAM\Storyline\standard\quests\quests_reaction.c
In the case of "Story_InvasionVideoAfterLeaveOxbay" the video for English and other versions is not produced because the folder with the video is not specified.
Replace:
else PostVideoAndQuest("Invasion",1,"Story_MapLoadAfterleavingOxbay");
On the:
else PostVideoAndQuest("standard\English\Invasion",1,"Story_MapLoadAfterleavingOxbay");
2) Tancrede Rimbaud_dialog.c
Why do you need GetMyAddressForm(NPChar, PChar, ADDR_CIVIL, false, false) for Virgile Boone if the character is always male.
In this case, I approached this Tancrede and he said don’t interfere with talking to Mademoiselle Boone.
1: Odd. The video works for me in English and it's been like that for ages, even in the stock game.
2: That's certainly a mistake, though the mistake is putting "PChar" there when it should be referring to Virgile Boone. Also, the line then adds 'Characters[GetCharacterIndex(DLG_TEXT[2])].lastname' to the end. We've been trying to discourage direct use of attributes like that, and the whole line can be made much tidier by using 'GetMyAddressFrom' properly. The 'false, false' part is two arguments which control whether the character's first and last names are to be included. So there is no need to explicitly add the character's last name if the second 'false' is changed to 'true'.
2: That's certainly a mistake, though the mistake is putting "PChar" there when it should be referring to Virgile Boone. Also, the line then adds 'Characters[GetCharacterIndex(DLG_TEXT[2])].lastname' to the end. We've been trying to discourage direct use of attributes like that, and the whole line can be made much tidier by using 'GetMyAddressFrom' properly. The 'false, false' part is two arguments which control whether the character's first and last names are to be included. So there is no need to explicitly add the character's last name if the second 'false' is changed to 'true'.
It's strange, because this video is not in the RESOURCE\VIDEOS folder. Translators into Polish at beyond-new-horizons informed me about this and there is a black screen in any language except Russian. Probably because this video is in the POTC engine itself? In the standard version of NH the video works, but in the English version I have a video in Russian.
Check that you have the correct version of "PROGRAM\INTERFACE\interface.c". Function 'PostVideoAndQuest' is defined there. It calls 'StartPostVideo', which sets an event handler for "evntPostVideo" and then triggers the event. The handler is function 'stPostVideo', which calls 'StartVideo', which sends a call to the engine using function 'GetVideoFileName' to supply the full filename for the video.
'GetVideoFileName' is the function which tries to find the file:
If the video name presented to the function ends with ".wmv", it just returns that name. That's not the case here - the name presented to the function is just "Invasion".
Next, it finds which storyline you're playing and finds the folder for that storyline. In sequence, it searches the subfolder for your chosen language, the subfolder for the default language (English), and the storyline folder itself.
If that doesn't work, it tries the "common" folder and again tries first the subfolder for your language, the subfolder for the default language, and the "common" folder itself.
It should find the Russian version automatically. And indeed, if I delete that and just leave 'PostVideoAndQuest("Invasion",1,"Story_MapLoadAfterleavingOxbay");', then switch to Russian language and start "Tales of a Sea Hawk", it plays the Russian version of the "Invasion" video. On the other hand, if I don't change "quests_reaction.c" and leave those lines in, and if I play in English or Spanish, it plays the English video.
Try this version of "interface.c". If the game crashes, post "error.log" because it means I've probably made a typing mistake. Otherwise, try starting "Tales of a Sea Hawk" in any language except Russian, play as far as the video, then quit and post "compile.log" and "system.log". This "interface.c" has a lot of 'trace' commands added which should show what 'GetVideoFileName' is doing.
Check that you have the correct version of "PROGRAM\INTERFACE\interface.c". Function 'PostVideoAndQuest' is defined there. It calls 'StartPostVideo', which sets an event handler for "evntPostVideo" and then triggers the event. The handler is function 'stPostVideo', which calls 'StartVideo', which sends a call to the engine using function 'GetVideoFileName' to supply the full filename for the video.
'GetVideoFileName' is the function which tries to find the file:
If the video name presented to the function ends with ".wmv", it just returns that name. That's not the case here - the name presented to the function is just "Invasion".
Next, it finds which storyline you're playing and finds the folder for that storyline. In sequence, it searches the subfolder for your chosen language, the subfolder for the default language (English), and the storyline folder itself.
If that doesn't work, it tries the "common" folder and again tries first the subfolder for your language, the subfolder for the default language, and the "common" folder itself.
It should find the Russian version automatically. And indeed, if I delete that and just leave 'PostVideoAndQuest("Invasion",1,"Story_MapLoadAfterleavingOxbay");', then switch to Russian language and start "Tales of a Sea Hawk", it plays the Russian version of the "Invasion" video. On the other hand, if I don't change "quests_reaction.c" and leave those lines in, and if I play in English or Spanish, it plays the English video.
Try this version of "interface.c". If the game crashes, post "error.log" because it means I've probably made a typing mistake. Otherwise, try starting "Tales of a Sea Hawk" in any language except Russian, play as far as the video, then quit and post "compile.log" and "system.log". This "interface.c" has a lot of 'trace' commands added which should show what 'GetVideoFileName' is doing.
Here are the logs for English and Spanish. I think I understood why my Russian video was playing in English. For some reason, in the RESOURCE\VIDEOS\standard\English folder there was a Russian video, not an English one. I replaced it from beyond-new-horizons with the correct video.
In both English and Spanish, "compile.log" shows a full set of traces near the top. That's probably an introductory video when you start the game and it's probably in "RESOURCE\VIDEOS\common", so that's to be expected.
Near the end, English "compile.log" has this line alone:
That's also to be expected - the chosen language is English so the first place 'GetVideoFileName' looks is "RESOURCE\VIDEOS\standard\English", which is where it finds the English "Invasion.wmv".
In both English and Spanish, "compile.log" shows a full set of traces near the top. That's probably an introductory video when you start the game and it's probably in "RESOURCE\VIDEOS\common", so that's to be expected.
Near the end, English "compile.log" has this line alone:
That's also to be expected - the chosen language is English so the first place 'GetVideoFileName' looks is "RESOURCE\VIDEOS\standard\English", which is where it finds the English "Invasion.wmv".
"Hornblower" should work - the video folder is "Hornblower", which is also the storyline folder defined in "PROGRAM\Storyline\Hornblower.c", so 'GetVideoFileName' should look in the right place.
"JackSparrow" is another matter. "PROGRAM\Storyline\JackSparrow.c" defines the storyline folder as "JackSparrow\" but the videos are in "LegendJackSparrow". So all the quest commands to play videos specific to the storyline include the path, e.g. in case "Jack's_arrival_at_Redmond2":
My guess is that 'GetVideoFileName' will search for the whole string "LegendJackSparrow\jack_entrance", fail to find it in any of the places it expects, and then return the string unchanged. That's fine as the string itself includes the folder name, but it does mean the check for Russian is needed.
1) If you kill the soldiers without talking to them, the plot will break and Tobias will not say that you need to go to the shipyard. (case "Counterspy_Exit_fight")
2) I am teleported outside without having time to finish the dialogue in the tavern with Rabel Iverneau. Teleports on line 23 of the dialogue "Rabel Yverneau_dialog.h".
3) During the first fight with Pintel and Ragetti, I can run into the tavern and then I will freeze in place.
3: They're cursed pirates. They're magical. If you try to cheat by somehow skipping past them into the tavern, expect them to use magic to cheat back. ;p
Can you provide a savegame from just before you start talking to the pirates? I'll need to see about adding some more 'StartQuestMovie' and 'EndQuestMovie' commands to lock all exits after you first talk to the pirates and then unlock them when you've given them the chest.
3: They're cursed pirates. They're magical. If you try to cheat by somehow skipping past them into the tavern, expect them to use magic to cheat back. ;p
Can you provide a savegame from just before you start talking to the pirates? I'll need to see about adding some more 'StartQuestMovie' and 'EndQuestMovie' commands to lock all exits after you first talk to the pirates and then unlock them when you've given them the chest.
Here are 2 saves, one at night just before the tavern, and the second on the open sea in front of Port Royal and teleporting to the residence in case you need it in the morning.
Try these versions of "quests_reaction.c" and "both_reaction.c". A new pair of 'StartQuestMovie' and 'EndQuestMovie' are added to "both_reaction.c" to block all exits from the start of the encounter until you hand over the chest, and "quest_reaction.c" now blocks fast travel from when you finish talking to Silehard until you've been to the tavern. That's because the scene in which you meet Danielle (or Nathaniel, since you're playing a female character) takes place in a quest-specific duplicate of the tavern. If you fast-travel to the tavern, you'll be in the normal tavern, not the quest one, so you won't see Danielle/Nathaniel. A player who prefers to fast-travel everywhere and who teleports to the tavern right after talking to Silehard won't even meet the cursed pirates either. So, no fast-travel until you've met the cursed pirates, handed over the chest, then walked through the door into the quest tavern.
Try these versions of "quests_reaction.c" and "both_reaction.c". A new pair of 'StartQuestMovie' and 'EndQuestMovie' are added to "both_reaction.c" to block all exits from the start of the encounter until you hand over the chest, and "quest_reaction.c" now blocks fast travel from when you finish talking to Silehard until you've been to the tavern. That's because the scene in which you meet Danielle (or Nathaniel, since you're playing a female character) takes place in a quest-specific duplicate of the tavern. If you fast-travel to the tavern, you'll be in the normal tavern, not the quest one, so you won't see Danielle/Nathaniel. A player who prefers to fast-travel everywhere and who teleports to the tavern right after talking to Silehard won't even meet the cursed pirates either. So, no fast-travel until you've met the cursed pirates, handed over the chest, then walked through the door into the quest tavern.
Delete this line in case "to_quest_redmond_tavern_complete":
Code:
DisableFastTravel(false); // And you can fast-travel again
And put it (minus the comment) in case "blaze_from_prison_to_residence_complete". That's when Silehard has talked to you in prison, then you teleport to the residence. Ideally fast travel should be enabled after he talks to you in the residence, but the dialog does not trigger another quest case. It just sets an attribute which will be recognised by Ines Diaz when you go to Nevis Pirate Settlement tavern. But the dialog with Silehard happens immediately after the teleport, so if anyone manages to fast travel before he talks, they're really determined to break the game - let them have their fun.
1) The new hero Gerald Blanc is not being translated.
2) As soon as I start talking to the townspeople, an entry is immediately written in the quest log stating that Raoul Reims was on the island. I don't even select the dialogue item about him. (6 line QC citizen_dialog.h)
3) I tried all the options for reputation and authority, but Ines never told me anything.
Go to tavern – talk to tavernkeeper – if you have the correct Reputation and Leadership Skill Level tavernkeeper will tell you what you need to know.
1: In "RESOURCE\INI\TEXTS\RUSSIAN\Storyline\storyline_strings.txt", you'll probably find the untranslated "Gérald" and "Blanc" directly under the translated text for "Aveline" and "de_Grandpré". Translate it.
2: In "PROGRAM\DIALOGS\QC citizen_dialog.c", find this line in case "first time":
Code:
AddQuestRecord("Blaze_search_Rheims", "12");
Move it to the top of case "search_rheims". And then check that the dialog line correctly ends by calling you "sir" or "ma'am". It's using a preprocessed variable and questbook entries sometimes mess those up. That is why the line to add it must be at the top of the dialog case, before the 'Preprocessor_Add' command.
It shouldn't make much difference here, but using "name" and "lastname" attributes directly can sometimes do odd things - better to use functions like 'GetMySimpleName'.
3: If I read the code properly, your reputation must be over 40, which is slightly below neutral. And your Leadership must be higher than 4. That's your Leadership - officers don't count, though bonus items might. Depending on what you say next, you may need Leadership higher than 5.
If your reputation is at least neutral and your Leadership is at least 5, and you're still not getting anything useful from Ines Diaz, upload a savegame before you talk to her and I'll see if I can figure out why.
2: In "PROGRAM\DIALOGS\QC citizen_dialog.c", find this line in case "first time":
Code:
AddQuestRecord("Blaze_search_Rheims", "12");
Move it to the top of case "search_rheims". And then check that the dialog line correctly ends by calling you "sir" or "ma'am". It's using a preprocessed variable and questbook entries sometimes mess those up. That is why the line to add it must be at the top of the dialog case, before the 'Preprocessor_Add' command.
It shouldn't make much difference here, but using "name" and "lastname" attributes directly can sometimes do odd things - better to use functions like 'GetMySimpleName'.
3: If I read the code properly, your reputation must be over 40, which is slightly below neutral. And your Leadership must be higher than 4. That's your Leadership - officers don't count, though bonus items might. Depending on what you say next, you may need Leadership higher than 5.
If your reputation is at least neutral and your Leadership is at least 5, and you're still not getting anything useful from Ines Diaz, upload a savegame before you talk to her and I'll see if I can figure out why.
That is correct. If you follow the dialog branch to information about the colony, the dialog goes into a loop in which you can ask about places, people, or the colony generally. You won't get to ask about Rheims again until you exit the dialog and then talk to the citizen again.
That is correct. If you follow the dialog branch to information about the colony, the dialog goes into a loop in which you can ask about places, people, or the colony generally. You won't get to ask about Rheims again until you exit the dialog and then talk to the citizen again.