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

Need Help Updating the Russian Translation

You can't have 4 officers with you. Assign three officers in the "Passengers" screen. Their icons should appear next to yours at the bottom left of the screen. They should certainly follow you from ship to shore, they should follow you from one land location to the next, though they won't always appear inside buildings. (They do always follow me around, though I almost never use fast travel.) They should follow if you walk from Smugglers Lair to Leviathan Rock and they should follow if you fast travel and if "reload_tables.c" is set to teleport you to "reload", "locator3". But they might not follow if you change it to "goto", "locator11".

You can, of course, have a lot more than three officers on your ship. They'll contribute their skills and abilities without being in your party. Only those assigned to the squares in the "Passengers" screen will follow you around on land, though.
 
1) I think there needs to be a slight fade before line 52 of "quest_soldier_dialog.h" to create an imitation of searching for contraband. Now the soldier just stands still and says that he conducted a search...
2) For some reason, the papers that Maginot gives do not have a title, although ItemsDescribe has one.
3) It is better to place the Barracuda in the goto2 locator while it waits for a place in the squadron to become available. At the moment he is standing in the doorway.
 

Attachments

  • 1725995674434.png
    1725995674434.png
    889 KB · Views: 40
  • 1726000907019.png
    1726000907019.png
    711.7 KB · Views: 38
Last edited:
1: Try this version of "quest_soldier_dialog.c". I can't upload a quest file because my version now has all the "Night Craft" code moved into "quests_side.c" so that in the future I can use it for FreePlay as well as "Tales of a Sea Hawk". So, in your "quests_reaction.c", before case "fourth_mission_after_shop_wrong", add:
Code:
        case "fourth_mission_shop_wrong_pause":
            LAi_fade("fourth_mission_soldier_continue_to_player", "")
        break;

        case "fourth_mission_soldier_continue_to_player":
            NPChar = CharacterFromID("MarigotPatrol7");
            NPChar.dialog.currentnode = "fourth_mission_with_officer_to_shop_wrong_3";
            LAi_SetActorType(NPChar);
            LAi_ActorDialogNow(NPChar, PChar, "", -1.0);
        break;
Then see if there is a fade before the soldier reports finding the contraband.

2: Check "RESOURCE\INI\TEXTS\RUSSIAN\ItemsDescribe.txt". Find the entry for "itmname_shop_papers". For this to work, there must be a blank line directly above it. In the version which I have, there is a comment above. Delete the text of that comment to turn it into a blank line.

3: At the top of case "fifth_mission_wait_for_join_barrakuda", try adding:
Code:
            Characters[GetCharacterIndex("barrakuda")].location.group = "goto";
            Characters[GetCharacterIndex("barrakuda")].location.locator = "goto2";
 

Attachments

  • quest_soldier_dialog.c
    7.3 KB · Views: 21
1: Try this version of "quest_soldier_dialog.c". I can't upload a quest file because my version now has all the "Night Craft" code moved into "quests_side.c" so that in the future I can use it for FreePlay as well as "Tales of a Sea Hawk". So, in your "quests_reaction.c", before case "fourth_mission_after_shop_wrong", add:
Code:
case "fourth_mission_shop_wrong_pause":
LAi_fade("fourth_mission_soldier_continue_to_player", "")
break;

case "fourth_mission_soldier_continue_to_player":
NPChar = CharacterFromID("MarigotPatrol7");
NPChar.dialog.currentnode = "fourth_mission_with_officer_to_shop_wrong_3";
LAi_SetActorType(NPChar);
LAi_ActorDialogNow(NPChar, PChar, "", -1.0);
break;
Then see if there is a fade before the soldier reports finding the contraband.
Yes, everything is fine.
3: At the top of case "fifth_mission_wait_for_join_barrakuda", try adding:
Code:
Characters[GetCharacterIndex("barrakuda")].location.group = "goto";
Characters[GetCharacterIndex("barrakuda")].location.locator = "goto2";
Yes, it works.
 
1) Ships not translated: "Secretive", "Unstoppable", "Obstacle", "Apostle", "Smashing", "Retribution".
2) Should I be attacked by my 2 ships? ("Apostle", "Secretive")
 

Attachments

  • 1726063215712.png
    1726063215712.png
    586 KB · Views: 21
  • 1726063263275.png
    1726063263275.png
    524.2 KB · Views: 27
  • 1726063302712.png
    1726063302712.png
    660.5 KB · Views: 38
  • 1726063319093.png
    1726063319093.png
    496.7 KB · Views: 32
  • 1726063438333.png
    1726063438333.png
    487.4 KB · Views: 18
  • 1726063599585.png
    1726063599585.png
    693.6 KB · Views: 26
1: Add translations for them to the end of "RESOURCE\INI\TEXTS\RUSSIAN\Storyline\storyline_strings.txt". (Not the one in the subfolder "standard". The characters who use those ships are already defined in "PROGRAM\Characters\init\Sidequest.c" for when "Night Craft" goes into "quests_side.c".)
2: That depends on what flag you're flying. They're programmed to use a Personal flag so that they should be friendly to you. If you're flying a false flag which would normally be hostile to you, they'll think that you're your own enemy and attack. What flag were you flying in this battle?
 
2: That depends on what flag you're flying. They're programmed to use a Personal flag so that they should be friendly to you. If you're flying a false flag which would normally be hostile to you, they'll think that you're your own enemy and attack. What flag were you flying in this battle?
Portuguese flag. Then you need to make sure that it changes to personal.
 
Or let the player do some thinking. You've been told that the Portuguese are setting this trap to catch the smugglers. Therefore the enemy are Portuguese. So you probably don't want to show the smugglers that you're Portuguese. ;) Besides, I've never liked Personal flags generally - in reality, if a ship sees you flying anything other than a recognised national flag then it's likely to think you're a pirate. One of the Personal flags even looks nearly the same as one of the Pirate flags.
 
How can I check the tasks to restore my reputation with the governor? At the moment, after killing Beltrop or collaborating, the governor does not give me a task.
In addition, I cannot check the case of the kidnapping of Maginot's daughter due to the fact that I cannot escape from the soldiers in the port (it is closed).
It's better to add "HoistFlag(PERSONAL_NATION);" in case "fifth_mission_trap_begin", because an error may occur in which fast travel will be lost if you shoot at your ships.
 
Last edited:
How can I check the tasks to restore my reputation with the governor? At the moment, after killing Beltrop or collaborating, the governor does not give me a task.
In addition, I cannot check the case of the kidnapping of Maginot's daughter due to the fact that I cannot escape from the soldiers in the port (it is closed).
It's better to add "HoistFlag(PERSONAL_NATION);" in case "fifth_mission_trap_begin", because an error may occur in which fast travel will be lost if you shoot at your ships.
I don't think I'd added the code for the governor to give you a task to restore your relations in the June update. See if you're still hostile to Portugal after your final meeting with Beltrop. In that update, I believe I simply restore relations with Portugal without doing anything with the governor.

I've still to figure out how to stop the soldiers getting reinforcements when you kill them. But it doesn't always do that. Save game before you talk to Jean Maginot in the second mission, then keep trying. Certainly I've been able to fight the soldiers, get away with the ring, and then kidnap Suzanne Maginot in the fourth mission. (Or you might be able to run away without fighting. Fast travel is blocked until you walk or run away from the port, but it's still possible to escape.)

Changing flag in "fifth_mission_trap_begin" is too late. That case triggers when you go to sea, which means the smugglers will see your flag before it's changed. Instead, in case "fifth_mission_trap", add:
Code:
if (GetRMRelation(PChar, GetCurrentFlag()) <= REL_WAR || GetCurrentFlag() == GetTownNation("Conceicao")) HoistFlag(PERSONAL_NATION);
That should change your flag to Personal, but only if necessary - if you're flying a false flag hostile to yourself or you're flying the same flag as the local government. (If I get round to making this quest available for FreePlay smugglers, the local government will be British if the player chose "Revolutions" or "Napoleonic" periods. That's why I'm checking the town's government and not just Portugal.)
 
In addition, I cannot check the case of the kidnapping of Maginot's daughter due to the fact that I cannot escape from the soldiers in the port (it is closed).
The fix:
Find this line in the quest code, case "second_mission_money_troubles":
Code:
sld.id = "smuggler_line_soldier_03";
Change it to:
Code:
sld.id = "smuggler_line_officer";
You don't need to change any of the other ID's, just "smuggler_line_soldier_03".

The explanation:
There's something odd with Marigot port which I have not been able to track down. If you attack a guard, all the rest will join in, but the game seems to think there's something else in the soldier AI group and stays in battle mode with the red flashing icons even after you kill all the soldiers. This happens any time, not just in "Night Craft".

When you fought the soldiers after demanging money from Maginot, you probably saw an on-screen message "The Garrison Commander sent immediate reinforcements...". This is part of a mechanism to prevent players from getting free weapons by killing soldiers. When you kill a normal guard, that message appears and all exits are locked until you have killed all the guards plus the reinforcements. The reinforcements are called if the character has the word "soldier" in both his ID and dialog filename. Because of that bug in Marigot port, the battle can never end, which is why the guard in Marigot port are "MarigotPatrol1" and "MarigotPatrol2" - they don't have "soldier" in their ID's so they don't get reinforcements. But the soldiers in "Night Craft" are "smuggler_line_soldier_01", "smuggler_line_soldier_02" and "smuggler_line_soldier_03", and "smuggler_line_soldier_03" has dialog file "quest_soldier_dialog.c". So he has "soldier" in both his ID and dialog filename, so he gets reinforcements. Renaming him to "smuggler_line_officer" is enough to stop him getting reinforcements. The other two don't have dialog filenames at all so they also don't get reinforcements. The game will stay in battle mode with red flashing icons but the exits aren't locked and you can leave the port.
 
The fix:
Find this line in the quest code, case "second_mission_money_troubles":
Code:
sld.id = "smuggler_line_soldier_03";
Change it to:
Code:
sld.id = "smuggler_line_officer";
You don't need to change any of the other ID's, just "smuggler_line_soldier_03".

The explanation:
There's something odd with Marigot port which I have not been able to track down. If you attack a guard, all the rest will join in, but the game seems to think there's something else in the soldier AI group and stays in battle mode with the red flashing icons even after you kill all the soldiers. This happens any time, not just in "Night Craft".

When you fought the soldiers after demanging money from Maginot, you probably saw an on-screen message "The Garrison Commander sent immediate reinforcements...". This is part of a mechanism to prevent players from getting free weapons by killing soldiers. When you kill a normal guard, that message appears and all exits are locked until you have killed all the guards plus the reinforcements. The reinforcements are called if the character has the word "soldier" in both his ID and dialog filename. Because of that bug in Marigot port, the battle can never end, which is why the guard in Marigot port are "MarigotPatrol1" and "MarigotPatrol2" - they don't have "soldier" in their ID's so they don't get reinforcements. But the soldiers in "Night Craft" are "smuggler_line_soldier_01", "smuggler_line_soldier_02" and "smuggler_line_soldier_03", and "smuggler_line_soldier_03" has dialog file "quest_soldier_dialog.c". So he has "soldier" in both his ID and dialog filename, so he gets reinforcements. Renaming him to "smuggler_line_officer" is enough to stop him getting reinforcements. The other two don't have dialog filenames at all so they also don't get reinforcements. The game will stay in battle mode with red flashing icons but the exits aren't locked and you can leave the port.
ERROR - Missing Character ID: smuggler_line_soldier_03
 

Attachments

  • 1726484754123.png
    1726484754123.png
    1.1 MB · Views: 28
Also change "smuggler_line_soldier_03" to "smuggler_line_officer" in case "second_mission_money_troubles2":
Code:
LAi_ActorDialog(CharacterFromID("smuggler_line_soldier_03"), PChar, "", 3.0, 1.0);
... and "second_mission_money_troubles_fight":
Code:
LAi_SetWarriorType(CharacterFromID("smuggler_line_soldier_03"));
Code:
LAi_group_MoveCharacter(CharacterFromID("smuggler_line_soldier_03"), "FRANCE_SOLDIERS");
 
Also change "smuggler_line_soldier_03" to "smuggler_line_officer" in case "second_mission_money_troubles2":
Code:
LAi_ActorDialog(CharacterFromID("smuggler_line_soldier_03"), PChar, "", 3.0, 1.0);
... and "second_mission_money_troubles_fight":
Code:
LAi_SetWarriorType(CharacterFromID("smuggler_line_soldier_03"));
Code:
LAi_group_MoveCharacter(CharacterFromID("smuggler_line_soldier_03"), "FRANCE_SOLDIERS");
Yes, everything works now.
 
Prisoned_dialog.c
dialog.Text = DLG_TEXT[17] + CalcEncOfficerPrice(NPChar) + DLG_TEXT[40] + strlower(GetMyAddressForm(NPChar, PChar, ADDR_CIVIL, false, false) + " " + XI_ConvertString("captain") + " " + strlower(CaptSir)) + "?";
It seems to me that this variable is not needed "strlower(CaptSir))".
 

Attachments

  • 1726509488653.png
    1726509488653.png
    724.7 KB · Views: 23
It seems that the prisoner you're offering to recruit is being very polite, addressing you by as many respectful words as possible - "Miss Captain ma'am". It could be shortened to just one of the three but that would lose the effect. The prisoner is desperate to be recruited, for a suitable price, and sounds as though he is begging. That is probably the intention of this dialog. So I'd leave it as it is.

Incidentally, I'm hoping to put out the next update soon, possibly this week. Please upload your most recent translations, especially "RESOURCE\INI\TEXTS\RUSSIAN\Storyline\standard\QUESTBOOK\Story_1stTaskReceived.txt" with the shortened lines.
 
It seems that the prisoner you're offering to recruit is being very polite, addressing you by as many respectful words as possible - "Miss Captain ma'am". It could be shortened to just one of the three but that would lose the effect. The prisoner is desperate to be recruited, for a suitable price, and sounds as though he is begging. That is probably the intention of this dialog. So I'd leave it as it is.

Incidentally, I'm hoping to put out the next update soon, possibly this week. Please upload your most recent translations, especially "RESOURCE\INI\TEXTS\RUSSIAN\Storyline\standard\QUESTBOOK\Story_1stTaskReceived.txt" with the shortened lines.
I uploaded my files to Yandex disk and GitHub.
 
In prison there is a person in the cell with me, is this how it should be? This happens somewhere in the quest "prepare_Edgar_to_Blaze_complete".
 

Attachments

  • 1727913130644.png
    1727913130644.png
    771.1 KB · Views: 24
Prison cells usually have additional occupants. Sometimes there really should be nobody other than the quest prisoner; for example, Downing's dungeon in "Ardent" is a private location and should not have any prisoners except Lucia/Edmundo. In such cases, the location can be given the "vcskip" attribute. But this is Port Royale prison, which is a normal prison, so normal prison rules apply and extra prisoners can be placed.

Prisons also have randomly generated guards as well as randomly generated prisoners. Those guards will also disappear if the "vcskip" attribute is used.
 
In the morning, for some reason, the window was open, right after I got to Beltrop.
Most likely 07:47 is considered night, although it is probably already morning. If you sleep in the tavern until morning, it will be 10:30 and the window will be closed.
 

Attachments

  • 1728174867152.png
    1728174867152.png
    812.2 KB · Views: 16
Last edited:
Back
Top