• 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

Have you a savegame in which you are standing in front of this man? Then I can try to fix the problem.

I tried your savegame in front of St. Pierre tavern. I talked to the innkeeper, went to the room, told the captain I was going to kill him, and did kill him. Then I went through the dialog with the innkeeper choosing all the first options. He left and I was able to leave the room, then leave the tavern. This worked in both English and Russian. Exactly what did you say to the captain and then to the innkeeper?

Also, I'm surprised you even got that far unless you have changed questbook "Story_1stTaskReceived.txt". The version I have contains two very long lines for "text.t4" and "text.t13", as previously mentioned in post #1037. If you have a version with those lines shortened, please upload it.
 
Have you a savegame in which you are standing in front of this man? Then I can try to fix the problem.
Attached archive with saving.
Also, I'm surprised you even got that far unless you have changed questbook "Story_1stTaskReceived.txt". The version I have contains two very long lines for "text.t4" and "text.t13", as previously mentioned in post #1037. If you have a version with those lines shortened, please upload it.
At first I also thought that the lines were too long. Previously, the game worked with up to 730 characters, but now it crashes if there are more than 700. I changed them to 667 and it doesn’t seem to crash anymore.
 

Attachments

  • -=Тест1=- Ямайка. Exit from Порт-Роял 14-е Апреля 1751г.7z
    628.3 KB · Views: 60
Well, I tried. First I put brackets round the '"DIALOGS\" + LanguageGetLanguage() + "\B_resident_text.h"' and it didn't like that either. Then I tried looking at how normal dialog finds the correct .h file for a language, adapted it, and that didn't work.

Now look at the big comment at the top of "B_HOUSE.H". It seems someone else already tried this, also without success. And I've seen other attempts to change working code just to fit in with someone's idea of programming style, only to then introduce bugs where there were none before.

The original versions of "B_HOUSE.C" and "B_HOUSE.H" work, even if they don't look pretty. At least, they work in English and Spanish. They don't work in Russian because the original Russian "B_HOUSE.H" has two mistakes, both easily fixed. For one thing, it has the line '#include "DIALOGS\English\B_resident_text.h"'. Because it's in Russian "B_HOUSE.H", that can be changed from "English" to "Russian" - the Spanish one already has this correction. Also, line 158 includes 'program\dialogs\" " + NPchar.dialog.filename'. That has one speech mark too many, it should be 'program\dialogs\" + NPchar.dialog.filename'. With those corrections, the original files work perfectly in Russian.

There's also a small problem in "Enc_Officer_dialog.h". Lines 114 and 115 end with spaces. But all the translated building types in "common.ini" have leading spaces. So when the officer confirms what you want to build, there are double spaces. I'm always watching for those because usually it means a word is missing because a preprocessed variable is not being filled in. Here, it just means the spaces at the end of lines 114 and 115 need to be removed.
 
Well, I tried. First I put brackets round the '"DIALOGS\" + LanguageGetLanguage() + "\B_resident_text.h"' and it didn't like that either. Then I tried looking at how normal dialog finds the correct .h file for a language, adapted it, and that didn't work.

Now look at the big comment at the top of "B_HOUSE.H". It seems someone else already tried this, also without success. And I've seen other attempts to change working code just to fit in with someone's idea of programming style, only to then introduce bugs where there were none before.

The original versions of "B_HOUSE.C" and "B_HOUSE.H" work, even if they don't look pretty. At least, they work in English and Spanish. They don't work in Russian because the original Russian "B_HOUSE.H" has two mistakes, both easily fixed. For one thing, it has the line '#include "DIALOGS\English\B_resident_text.h"'. Because it's in Russian "B_HOUSE.H", that can be changed from "English" to "Russian" - the Spanish one already has this correction. Also, line 158 includes 'program\dialogs\" " + NPchar.dialog.filename'. That has one speech mark too many, it should be 'program\dialogs\" + NPchar.dialog.filename'. With those corrections, the original files work perfectly in Russian.

There's also a small problem in "Enc_Officer_dialog.h". Lines 114 and 115 end with spaces. But all the translated building types in "common.ini" have leading spaces. So when the officer confirms what you want to build, there are double spaces. I'm always watching for those because usually it means a word is missing because a preprocessed variable is not being filled in. Here, it just means the spaces at the end of lines 114 and 115 need to be removed.
In fact, I would move the text that is used from "B_resident_text.h" to "B_HOUSE.H" and #include "DIALOGS\English\B_resident_text.h" will not be needed.
 
You'd also need to copy it all into new versions of any other files which currently use "B_resident_text.h", such as "B_FARM.H" and "b_mansion.h".

Or just use the original files as they work already.
 
You'd also need to copy it all into new versions of any other files which currently use "B_resident_text.h", such as "B_FARM.H" and "b_mansion.h".

Or just use the original files as they work already.
So far I have done this for "B_HOUSE.H", later I will do it for others. Here are all the changes, I checked everything works. The only thing I couldn’t do was translate the structure in the dialogue, for which you said you need to make a variable.
 

Attachments

  • house.7z
    25.1 KB · Views: 28
So far I have done this for "B_HOUSE.H", later I will do it for others. Here are all the changes, I checked everything works. The only thing I couldn’t do was translate the structure in the dialogue, for which you said you need to make a variable.
Why? The existing files already work and do not require duplicate copies of the same dialog text. There's no need to add a translation of "my landlord" into "common.ini" because the existing version just translates it in "B_HOUSE.H". And, as I said:
I've seen other attempts to change working code just to fit in with someone's idea of programming style, only to then introduce bugs where there were none before.

Unless the existing version shows errors in actual dialog, best to leave it as it is and not introduce more problems.
 
1) Line 85 "France Trader_dialog.h" - "#smonsieur#" needs to be added, but the variable will not work in this line.
2) The tavern room is always open. In addition, you need to make a dialogue with the innkeeper that you cannot spend the night in the hall, but only pay for the room (this has already happened somewhere).
3) We need to make an entry in the quest log in 2 days if we don’t go to the tavern, as Jan said. After that we have to go back to Beltrop and say that Maginot is having financial difficulties.
4) You can use fast travel without talking to the soldiers after you leave the store, thereby breaking the quest.
5) If I choose the option to defend myself and not go to prison, then I cannot leave the port, although the quest log says that I need to return to the ship.
6) Shouldn't the ring be in the quests tab? You can also throw it away.
7) I can leave the residence before going to jail.
8) I can use fast travel to the ship in the prison.
9) In Marigot the residence is open at night.
10) Beltrop's ship attacked me because I had a French flag. Shouldn't he be friendly until I raise the pirate flag?
 

Attachments

  • 1725841863066.png
    1725841863066.png
    760.2 KB · Views: 44
  • 1725842554166.png
    1725842554166.png
    1 MB · Views: 19
  • 1725842649935.png
    1725842649935.png
    885 KB · Views: 15
  • 1725842790009.png
    1725842790009.png
    982.4 KB · Views: 31
  • 1725842973175.png
    1725842973175.png
    845.7 KB · Views: 15
  • 1725843196000.png
    1725843196000.png
    755 KB · Views: 25
  • 1725843383780.png
    1725843383780.png
    728.7 KB · Views: 15
  • 1725843678723.png
    1725843678723.png
    545 KB · Views: 24
1: Change "monsieur" to "#smonsieur#". In "France Trader_dialog.c", case "second_mission_truth", add:
Code:
Preprocessor_Add("monsieur", GetMyAddressForm(NPChar, PChar, ADDR_CIVIL, false, false));
Also change "monsieur" to "#smonsieur#" on line 33, and add the same code to case "quests" in the section 'if (CheckQuestAttribute("smuggler_line", "fourth_mission_to_jean"))'.
2: In "PROGRAM\Locations\init\SaintMartin.c", find the definition for "Marigot_tavern". In the reloads part for "Locations[n].reload.l2", add:
Code:
Locations[n].reload.l2.disable = true;
It will only take effect in a new game.

Do the same for "Philipsburg_tavern" in the same file.

3: Yes, and also the quest case triggered by going to the tavern needs to be closed so it doesn't happen if you return to Marigot later and go to the tavern for other reasons. In quest case "second_mission_wait_two_days", add:
Code:
            PChar.quest.second_mission_to_tavern_room.fail_condition.l1 = "timer";
            PChar.quest.second_mission_to_tavern_room.fail_condition.l1.date.day = GetAddingDataDay(0, 0, 3);
            PChar.quest.second_mission_to_tavern_room.fail_condition.l1.date.month = GetAddingDataMonth(0, 0, 3);
            PChar.quest.second_mission_to_tavern_room.fail_condition.l1.date.year = GetAddingDataYear(0, 0, 3);
            PChar.quest.second_mission_to_tavern_room.fail_condition.l1.win_condition = "second_mission_two_days_passed";
Then add:
Code:
        case "second_mission_two_days_passed":
            AddQuestRecord("smuggler_line", 66);
        break;
At the end of "smuggler_line.txt", translate:
Code:
text.t66=It's been more than two days and I have not been to the tavern. Time to return to Beltrop.

4: At the end of case "second_mission_money_prepare_for_troubles", find this:
Code:
            PChar.quest.second_mission_money_reset_marigot.win_condition.l1 = "Location";
            PChar.quest.second_mission_money_reset_marigot.win_condition.l1.location = PChar.location.from_sea;
            PChar.quest.second_mission_money_reset_marigot.win_condition = "second_mission_reset_marigot";
That's probably triggering at once if you're moored at Marigot port. Delete it. At the end of case "second_mission_money_troubles", add:
Code:
            PChar.quest.second_mission_money_reset_marigot.win_condition.l1 = "ExitFromLocation";
            PChar.quest.second_mission_money_reset_marigot.win_condition.l1.location = "Marigot_port";
            PChar.quest.second_mission_money_reset_marigot.win_condition = "second_mission_reset_marigot";
That should re-enable fast travel if you leave the port either by running away from the soldiers or by fighting them.

5: I'll need to figure out how to fix that. There's something odd about Marigot - sometimes the game fails to recognise that you have killed all French soldiers, which also means you may be stuck if you attack a guard at any other time. Killing a guard triggers reinforcements and you can't leave the area until all soldiers are dead - but you can not do that if the game thinks there is still a soldier hiding somewhere.

6: No, the ring is a general item. You can sell it or throw it away. And then you'll probably fail the fourth mission. But then, unless you demanded money immediately and then chose to fight the soldiers, you won't have the ring anyway. (There may still be a way to succeed in the fourth mission. After Jean Maginot refuses to sell the store, try to put a ring into his pocket. Sometimes he'll catch you, sometimes you will succeed. If you succeed, go to the area with the town hall. If you're hostile to France, go to the governor and pay for an amnesty. Then tell the patrolling soldier that Maginot stole your ring but do not tell him about smuggling sandal. The soldier will go to the store, you can go too, then the soldier will want to arrest Maginot. You can ask the soldier to spare him. Then you can demand he sells the store.)

7, 8: At case "second_mission_speak_with_france_governor", add:
Code:
DisableFastTravel(true);
Then in both cases "second_mission_exit_from_cam_completed" and "second_mission_exit_from_cam_without_danielle", add:
Code:
DisableFastTravel(false);

9: In "PROGRAM\Locations\init\SaintMartin.c", find the definition for "Marigot_town_01". In the reloads part for "Locations[n].reload.l7", add:
Code:
Locations[n].reload.l7.close_for_night = 1;
Again, this will only take effect in a new game.

10: That's difficult under the system which has been in use for some years, in which ships' reaction to you is based entirely on flags. Beltrop is defined as Portuguese. Portugal is at war with France and Spain. So if he sees you under a French or Spanish flag, he'll attack. Possibly add something in the dialog for the third mission to tell you that he normally flies a Portuguese flag, which is fine if he's near a Dutch island because Portugal and Holland are at peace, but it does mean he has to fire at any ships hostile to Portugal or Holland. That means pirates, French or Spanish, so don't fly any of those flags anywhere near him.
 
3: Yes, and also the quest case triggered by going to the tavern needs to be closed so it doesn't happen if you return to Marigot later and go to the tavern for other reasons. In quest case "second_mission_wait_two_days", add:
Code:
PChar.quest.second_mission_to_tavern_room.fail_condition.l1 = "timer";
PChar.quest.second_mission_to_tavern_room.fail_condition.l1.date.day = GetAddingDataDay(0, 0, 3);
PChar.quest.second_mission_to_tavern_room.fail_condition.l1.date.month = GetAddingDataMonth(0, 0, 3);
PChar.quest.second_mission_to_tavern_room.fail_condition.l1.date.year = GetAddingDataYear(0, 0, 3);
PChar.quest.second_mission_to_tavern_room.fail_condition.l1.win_condition = "second_mission_two_days_passed";
Then add:
Code:
case "second_mission_two_days_passed":
AddQuestRecord("smuggler_line", 66);
break;
At the end of "smuggler_line.txt", translate:
Code:
text.t66=It's been more than two days and I have not been to the tavern. Time to return to Beltrop.
After swimming for 2 days at sea, for some reason an error appeared instead of an entry in the task log.
ERROR - Quest name NOT found in ANY function
7) I can leave the residence before going to jail.
The door is still open.
8) I can use fast travel to the ship in the prison.
Now there is no fast travel in the cell itself, but there is a moment before the conversation with Nathaniel.
Possibly add something in the dialog for the third mission to tell you that he normally flies a Portuguese flag, which is fine if he's near a Dutch island because Portugal and Holland are at peace, but it does mean he has to fire at any ships hostile to Portugal or Holland. That means pirates, French or Spanish, so don't fly any of those flags anywhere near him.
I added a sentence about the Portuguese flag in line 168 of "Desmond Ray Beltrop_dialog.h". And also in line 25 "smuggler_line.txt".

If I talk to Beltrop on the beach, he will ask me to leave his house. This is line 2 "Desmond Ray Beltrop_dialog.h".
 

Attachments

  • 1725895729699.png
    1725895729699.png
    755 KB · Views: 18
  • 1725897980431.png
    1725897980431.png
    791.3 KB · Views: 32
Last edited:
3: My mistake in copying and pasting. Change this:
Code:
PChar.quest.second_mission_to_tavern_room.fail_condition.l1.win_condition = "second_mission_two_days_passed";
... to this...
Code:
PChar.quest.second_mission_to_tavern_room.fail_condition = "second_mission_two_days_passed";

7: You should not be able to move at all at that point. Quest case "second_mission_speak_with_france_governor" puts you in actor mode. You should still be in actor mode when you arrive in prison. Did you get a self-dialog in which you say "So, I’ve been in this damn cell for three days already, damn me... Hmm... what’s that noise?"

Now there is no fast travel in the cell itself, but there is a moment before the conversation with Nathaniel.
There is no quest case later than that where fast travel can be enabled, except by leaving it disabled for too long. The next quest case is "smuggler_line_second_mission_uncapture_Marigot" which triggers six days later. Players who like to fast travel will want to do it a lot sooner than that! This is one of those situations where a player who is that determined to break a story can do so and live with the result.

If I talk to Beltrop on the beach, he will ask me to leave his house. This is line 2 "Desmond Ray Beltrop_dialog.h".
At case "fourth_mission_acepted", change 'LAi_SetStayType(CharacterFromID("Desmond Ray Beltrop"));' to 'LAi_SetActorType(CharacterFromID("Desmond Ray Beltrop"));'. Then add 'LAi_SetStayType(CharacterFromID("Desmond Ray Beltrop"));' to case "fourth_mission_to_Marigot". That should mean Beltrop stands on the beach and says nothing. It also means he'll stand and say nothing if you return to his house before going to Marigot for the fourth mission.
 
3: My mistake in copying and pasting. Change this:
Code:
PChar.quest.second_mission_to_tavern_room.fail_condition.l1.win_condition = "second_mission_two_days_passed";
... to this...
Code:
PChar.quest.second_mission_to_tavern_room.fail_condition = "second_mission_two_days_passed";
For some reason Beltrop doesn't give me the next task after I don't come to the tavern. I swam to him, and he asked me to leave his house.
7: You should not be able to move at all at that point. Quest case "second_mission_speak_with_france_governor" puts you in actor mode. You should still be in actor mode when you arrive in prison. Did you get a self-dialog in which you say "So, I’ve been in this damn cell for three days already, damn me... Hmm... what’s that noise?"
Please insert
case "second_mission_speak_with_france_governor" at the beginning:
Locations[FindLocation("Marigot_mansion_hall")].reload.l1.disable = true;
and at the beginning
case "second_mission_prison_wait_for_resque":
Locations[FindLocation("Marigot_mansion_hall")].reload.l1.disable = false;
This will lock the residence door until I'm in jail.
There is no quest case later than that where fast travel can be enabled, except by leaving it disabled for too long. The next quest case is "smuggler_line_second_mission_uncapture_Marigot" which triggers six days later. Players who like to fast travel will want to do it a lot sooner than that! This is one of those situations where a player who is that determined to break a story can do so and live with the result.
What if you remove "DisableFastTravel(false);" in case "second_mission_exit_from_cam_completed"
and add it at the end of case "second_mission_exit_from_cam_without_danielle"
This way, fast travel does not work before a conversation.

1) Should the prison be closed in Marigot?
2) After fast travel from the smugglers' lair to the bay on the island of La Grenada, the character becomes stuck in place.
 

Attachments

  • 1725912075942.png
    1725912075942.png
    863.9 KB · Views: 34
For some reason Beltrop doesn't give me the next task after I don't come to the tavern. I swam to him, and he asked me to leave his house.
In case "second_mission_two_days_passed", add:
Code:
PChar.quest.smuggler_line = "second_mission_truth_to_maginot";
That should lead to the same conversation as if you had told Maginot that you would report his problems to Beltrop.

Please insert
case "second_mission_speak_with_france_governor" at the beginning:
Locations[FindLocation("Marigot_mansion_hall")].reload.l1.disable = true;
and at the beginning
case "second_mission_prison_wait_for_resque":
Locations[FindLocation("Marigot_mansion_hall")].reload.l1.disable = false;
This will lock the residence door until I'm in jail.
Done, though I still wonder why you are able to move. When you teleport to the residence, are you right next to the door, or are you able to walk around?

What if you remove "DisableFastTravel(false);" in case "second_mission_exit_from_cam_completed"
and add it at the end of case "second_mission_exit_from_cam_without_danielle"
This way, fast travel does not work before a conversation.
And it also will not work after you leave the prison when Danielle/Nathaniel is an officer. Leave the line in case "second_mission_exit_from_cam_completed" but put it inside the condition 'if (CheckQuestAttribute("danielle_on_ship", "true"))'. Then it will only happen in this quest case if there is no further dialog with Danielle/Nathaniel. The other half of the condition, after 'else', is where the dialog is triggered. The dialog ends by triggering quest case "second_mission_exit_from_cam_without_danielle", where you also need to re-enable fast travel.

1) Should the prison be closed in Marigot?
2) After fast travel from the smugglers' lair to the bay on the island of La Grenada, the character becomes stuck in place.
1: Yes - why would you want to go back in after you have escaped? The prison has no further purpose - it did not even exist in the game until I added it for this scene.
2: Do the same again, then upload "compile.log" so I can see where in the quest code you are getting stuck.
 
In case "second_mission_two_days_passed", add:
Code:
PChar.quest.smuggler_line = "second_mission_truth_to_maginot";
That should lead to the same conversation as if you had told Maginot that you would report his problems to Beltrop.
Yes, everything works now.
Done, though I still wonder why you are able to move. When you teleport to the residence, are you right next to the door, or are you able to walk around?
I just stand next to the open door in actor mode and can go outside.
2: Do the same again, then upload "compile.log" so I can see where in the quest code you are getting stuck.
Attached.
 

Attachments

  • compile.log
    2.6 KB · Views: 10
  • system.log
    255.7 KB · Views: 9
"system.log" does not show anything suspicious. "compile.log" is missing the beginning which shows which version of the game you're playing and it does not show any quest code being run.

Start a FreePlay as a Portuguese character. Change the character type to anything which begins the game in Sao Jorge. Any of corsair, merchant, army veteran, adventurer or social climber will do. Rebel and smuggler will not work, they'll send you somewhere else. And don't choose the stormy start either.

If your ship is moored at Leviathan Rock in your "Tales of a Sea Hawk" game, move it there in the FreePlay too. If it's in Sao Jorge port in "Tales of a Sea Hawk", leave it there in the FreePlay. Go to Smugglers Lair, then fast travel back to Leviathan Rock and see if the same problem happens. That should show whether it's something to do with "Night Craft" or a basic problem with fast travel there.
 
"system.log" does not show anything suspicious. "compile.log" is missing the beginning which shows which version of the game you're playing and it does not show any quest code being run.

Start a FreePlay as a Portuguese character. Change the character type to anything which begins the game in Sao Jorge. Any of corsair, merchant, army veteran, adventurer or social climber will do. Rebel and smuggler will not work, they'll send you somewhere else. And don't choose the stormy start either.

If your ship is moored at Leviathan Rock in your "Tales of a Sea Hawk" game, move it there in the FreePlay too. If it's in Sao Jorge port in "Tales of a Sea Hawk", leave it there in the FreePlay. Go to Smugglers Lair, then fast travel back to Leviathan Rock and see if the same problem happens. That should show whether it's something to do with "Night Craft" or a basic problem with fast travel there.
Yes, the character will still get stuck.
Here are the logs from the very beginning of the game.
 

Attachments

  • compile.log
    15.7 KB · Views: 7
  • system.log
    9.6 KB · Views: 7
The video shows you appearing in the sea, where you get stuck. Teleporting to a locator which does not exist will do that.

Try this version of "PROGRAM\BATTLE_INTERFACE\reload_tables.c". It changes the target locator for fast travel to Leviathan Rock from "reload_3" (which probably does not exist) to "locator3" (which should be where you arrive if you walk from Smugglers Lair to the shore).
 

Attachments

  • reload_tables.c
    22.2 KB · Views: 10
The video shows you appearing in the sea, where you get stuck. Teleporting to a locator which does not exist will do that.

Try this version of "PROGRAM\BATTLE_INTERFACE\reload_tables.c". It changes the target locator for fast travel to Leviathan Rock from "reload_3" (which probably does not exist) to "locator3" (which should be where you arrive if you walk from Smugglers Lair to the shore).
Now I appear near the exit from the location. Maybe "goto locator 11" or "goto citizen02" will do?
 

Attachments

  • 1725980674712.png
    1725980674712.png
    990.4 KB · Views: 25
  • 1725980755925.png
    1725980755925.png
    740.4 KB · Views: 46
Now I appear near the exit from the location.
Good, that was the intention.

You can try editing the file yourself. Look for this section:
Code:
    if (HasSubStr(lcn.filespath.models,"Outside\Shore_4")) // PB
    {
        AddTimeToCurrent(0,TIME_FASTTRAVEL*3); // NK 04-09-21
        DoReloadCharacterToLocation(finishLocName, "Reload", "locator3");    // was "reload_3"
        return;
    }
You can try changing "Reload", "locator3" to "goto", "locator11" and see what happens. Note that a locator faces in a specific direction, and that's the way you'll face if you teleport to it. Also, if you have officers with you, they should go with you to "locator3" because it has associated locators for officers. "locator11" and "citizen02" do not, so you may arrive without your officers. (See those "officers" locators "see_1", "see_2" and "see_3"? They're the reason your officers appear when you land on shore from your ship. And those locators are all pointing away from the sea, so when you land from your ship, you're facing away from the sea.)
 
Good, that was the intention.

You can try editing the file yourself. Look for this section:
Code:
    if (HasSubStr(lcn.filespath.models,"Outside\Shore_4")) // PB
    {
        AddTimeToCurrent(0,TIME_FASTTRAVEL*3); // NK 04-09-21
        DoReloadCharacterToLocation(finishLocName, "Reload", "locator3");    // was "reload_3"
        return;
    }
You can try changing "Reload", "locator3" to "goto", "locator11" and see what happens. Note that a locator faces in a specific direction, and that's the way you'll face if you teleport to it. Also, if you have officers with you, they should go with you to "locator3" because it has associated locators for officers. "locator11" and "citizen02" do not, so you may arrive without your officers. (See those "officers" locators "see_1", "see_2" and "see_3"? They're the reason your officers appear when you land on shore from your ship. And those locators are all pointing away from the sea, so when you land from your ship, you're facing away from the sea.)
I was teleported to the "goto" locator, "locator11" facing the ship, but my 4 officers were not there. Although it is possible that they were not on the shore before. They are removed from passengers when I arrive ashore on a fast travel.
 

Attachments

  • 1725982330454.png
    1725982330454.png
    653.1 KB · Views: 23
Back
Top