• 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 Marie Celeste

I certainly tested it:
Fixed - Marie Celeste

The problem then was that prisoners who were executed were not being properly cleared, so anyone who routinely executed prisoners would fill up the "Enc_CabinCaptain_" characters, preventing a new one from being generated.

But @Peter Norton reports the problem after releasing prisoners for reputation. This is what I do most of the time. The only time when a captain failed to appear for me was when he had in fact appeared but was wearing dark clothes and hard to see against the cabin wall behind where he was standing on deck. I found him after looking harder.

First, capture a few prisoners. Try adding the same lines to "console.c" as I did here:
Fixed - Marie Celeste
Then try the same experiment. Run that console to see what it says about all your prisoners, and whether it lists anyone who shouldn't be there. Execute at least two (there are two methods of execution, hanging and feeding to sharks, make sure to get both), hire at least one, release at least one for ransom and one for reputation. Then run console again and see what has happened to each of the prisoners you executed, hired or released.

(Both the links show the label "Fixed - Marie Celeste" but they link to specific posts within this thread.)
Thanks, I will test it today. Btw, I completely forgot to check those models that @Pieter Boelen mentioned a few months ago. Can you upload it so I can take a look?
 
Since I couldn't incorporate the PTBR language into the game, I replaced the Spanish files with PTBR and selected Spanish in the language menu, it's working fine.

I think I already gave you the script to do this switch between the two languages, it just renames the directories that keep the Spanish backup.

I made some customizations for my own comfort, I didn't see a suggestion thread here, so I'm sending it here.

I presented this to Pieter B. he said to present it to you too.

Having the rifle made it uncomfortable to use the F key to equip better weapons.

When you draw your sword, the rifle scope appears and this is a hindrance when the rifle is not essential.

For my comfort, I wrote the attached code to use the 5 key to equip a cavalry pistol, regardless of the pistol I have. I'm sharing the idea, but I still think this code can be improved and needs some new entries in the interface_strings.txt file.

Other changes were to keys 3 and 4, to quickly equip shovels and pickaxes, which helps with treasure hunting.

I no longer see the bug with the ship without a captain. After freeing all the prisoners, I run the script to clear the names of the prisoners.


I have been investigating the reason why the X does not appear to mark the treasure location.
When the variable assumes the value of an island name (oxbay, redmond, etc.) the X is displayed on the map. When it assumes the values OShore, CShore, etc., the treasure indicator is not displayed.
It is also not displayed when it assumes the values Cuba_Shore_01, Hispaniola_grot3, etc., although these names are valid.
 

Attachments

  • horse pistol.txt
    2.6 KB · Views: 12
Last edited:
@Peter Norton: there are a few problems with that script to change weapon assignments. For one thing, in periods earlier than "Golden Age of Piracy", horse pistols don't exist (apart from a set carried by Clint Eastwood, who has special permission to carry the most powerful handgun in the world :guns:). Also, you should not be able to equip a brace of horse pistols unless you have the "Gunman" ability, nor equip a brace of four horse pistols unless you have "Professional gunman". (Besides, my personal preference is to leave the auto-assignment as it is - 3, 4 and 5 are cobblestone, sandbag and etherbottle. I'm more likely to want to stun someone who has just picked my pocket than to go digging for treasure.)

I've already got Portuguese working as a language selectable the same way as Russian and Spanish - have a look at that update.

Back to the problem of missing captains. I've found another cause for prisoners not being properly cleared. @Peter Norton, have you been hiring any surrendered captains, particularly while they are still on deck, not after taking them prisoner? @Mirsaneli, the same question to your players.

Hiring a prisoner captain from the hold goes through function 'TIH_PrisonerHiredAsOfficerProcess', which ends by setting attribute "ClearUponExit" onto the prisoner. Hiring him directly from deck goes through 'TIH_OfficerHiredProcess', which does not. I found that out by running a different version of "console.c" which shows prisoners in more detail but does not clear them. It showed four of them not cleared, all matching the names of officers I'd hired. After hunting a couple of ships and getting one of them to surrender, and being lucky that the captain chose not to duel, I had the chance to experiment. Hiring him on deck did not clear him when he became an officer; hiring him in the hold did.

The attached version of "PROGRAM\Dialog_func.c" adds a line to 'TIH_OfficerHiredProcess' to check if the character being hired has "Enc_CabinCaptain" in his ID, and if so, clear him. With that in place, the captain cleared properly after being hired.

Also attached is the version of "console.c", here named as "console_show_cabincaptains". If you've downloaded the version which clears captains, rename it to something else, such as "console_clear_cabincaptains". Then copy and rename whichever version you want to to use as "console.c". You don't need screenshots, "console_show_cabincaptains" dumps the results to "compile.log" as well as showing them on screen. For example:
Enc_CabinCaptain_0: name = 'Gil Urquijo', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_1: name = 'Francisco Escaño', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_2: name = 'Celestin Brocard', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_3: name = 'Abulio Vallejo', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_4: name = 'Pedro Oliva', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_5: name = '', location = 'none', bAllies = 0
Enc_CabinCaptain_6: name = '', location = 'none', bAllies = 0
Enc_CabinCaptain_7: name = 'Isore Deniau', location = '', bAllies = 0
Enc_CabinCaptain_8: name = 'Aleyn Orpett', location = '', bAllies = 0
Enc_CabinCaptain_9: name = 'Gabriel Atyeo', location = '', bAllies = 0
Enc_CabinCaptain_10: name = 'Sansão Jorge', location = '', bAllies = 0
Enc_CabinCaptain_11: name = 'Guichard Duran', location = '', bAllies = 0
Enc_CabinCaptain_12: name = 'Henrique Maia', location = '', bAllies = 0
Enc_CabinCaptain_13: name = 'Loup Paleologue', location = '', bAllies = 0
Enc_CabinCaptain_14: name = 'Girars Renouard', location = '', bAllies = 0
Enc_CabinCaptain_15: name = 'Manuel Navarrete', location = '', bAllies = 0
Enc_CabinCaptain_16: name = 'Mayew Cottier', location = '', bAllies = 0
Enc_CabinCaptain_17: name = 'Tomaz Pereira', location = '', bAllies = 0
Enc_CabinCaptain_18: name = 'Aurelien Bardot', location = '', bAllies = 0
Enc_CabinCaptain_19: name = 'Archambaud Ballanger', location = '', bAllies = 0
Enc_CabinCaptain_20: name = 'Liclaeys Karaay', location = '', bAllies = 0
Enc_CabinCaptain_21: name = 'Auguste Desire', location = '', bAllies = 0
Enc_CabinCaptain_22: name = 'Coenrarde Teeuw', location = '', bAllies = 0
Enc_CabinCaptain_23: name = 'Egidio Morante', location = '', bAllies = 0
Enc_CabinCaptain_24: name = 'Leonce Belgraver', location = '', bAllies = 0
Enc_CabinCaptain_25: name = 'Armando Braga', location = '', bAllies = 0
Enc_CabinCaptain_26: name = 'Henry Lymburner', location = '', bAllies = 0
Enc_CabinCaptain_27: name = 'Gerner Sauvaigo', location = '', bAllies = 0
Enc_CabinCaptain_28: name = 'Felipe Sierra', location = '', bAllies = 0
Enc_CabinCaptain_29: name = 'Kermit Officer', location = '', bAllies = 0
Enc_CabinCaptain_30: name = 'Rene Catellier', location = '', bAllies = 0
Enc_CabinCaptain_31: name = 'Alaerdus Bronckhorst', location = '', bAllies = 0
Enc_CabinCaptain_32: name = 'Godfried Bonnel', location = '', bAllies = 0
Enc_CabinCaptain_33: name = 'Gregorio Alcalá', location = '', bAllies = 0
Enc_CabinCaptain_34: name = 'Geffrey Leather', location = '', bAllies = 0
Enc_CabinCaptain_35: no character index
'Enc_CabinCaptain_5' is free
The first four are characters who have previously been hired and should have been cleared. Pedro Oliva is a genuine prisoner. Two more have been fully cleared. Others still show names but 'bAllies' shows 0, which is fine because the function which looks for a free slot checks that.
 

Attachments

  • console_show_cabincaptains.c
    35 KB · Views: 11
  • Dialog_func.c
    107.3 KB · Views: 9
@Peter Norton: there are a few problems with that script to change weapon assignments. For one thing, in periods earlier than "Golden Age of Piracy", horse pistols don't exist (apart from a set carried by Clint Eastwood, who has special permission to carry the most powerful handgun in the world :guns:). Also, you should not be able to equip a brace of horse pistols unless you have the "Gunman" ability, nor equip a brace of four horse pistols unless you have "Professional gunman". (Besides, my personal preference is to leave the auto-assignment as it is - 3, 4 and 5 are cobblestone, sandbag and etherbottle. I'm more likely to want to stun someone who has just picked my pocket than to go digging for treasure.)

I've already got Portuguese working as a language selectable the same way as Russian and Spanish - have a look at that update.

Back to the problem of missing captains. I've found another cause for prisoners not being properly cleared. @Peter Norton, have you been hiring any surrendered captains, particularly while they are still on deck, not after taking them prisoner? @Mirsaneli, the same question to your players.

Hiring a prisoner captain from the hold goes through function 'TIH_PrisonerHiredAsOfficerProcess', which ends by setting attribute "ClearUponExit" onto the prisoner. Hiring him directly from deck goes through 'TIH_OfficerHiredProcess', which does not. I found that out by running a different version of "console.c" which shows prisoners in more detail but does not clear them. It showed four of them not cleared, all matching the names of officers I'd hired. After hunting a couple of ships and getting one of them to surrender, and being lucky that the captain chose not to duel, I had the chance to experiment. Hiring him on deck did not clear him when he became an officer; hiring him in the hold did.

The attached version of "PROGRAM\Dialog_func.c" adds a line to 'TIH_OfficerHiredProcess' to check if the character being hired has "Enc_CabinCaptain" in his ID, and if so, clear him. With that in place, the captain cleared properly after being hired.

Also attached is the version of "console.c", here named as "console_show_cabincaptains". If you've downloaded the version which clears captains, rename it to something else, such as "console_clear_cabincaptains". Then copy and rename whichever version you want to to use as "console.c". You don't need screenshots, "console_show_cabincaptains" dumps the results to "compile.log" as well as showing them on screen. For example:
Enc_CabinCaptain_0: name = 'Gil Urquijo', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_1: name = 'Francisco Escaño', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_2: name = 'Celestin Brocard', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_3: name = 'Abulio Vallejo', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_4: name = 'Pedro Oliva', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_5: name = '', location = 'none', bAllies = 0
Enc_CabinCaptain_6: name = '', location = 'none', bAllies = 0
Enc_CabinCaptain_7: name = 'Isore Deniau', location = '', bAllies = 0
Enc_CabinCaptain_8: name = 'Aleyn Orpett', location = '', bAllies = 0
Enc_CabinCaptain_9: name = 'Gabriel Atyeo', location = '', bAllies = 0
Enc_CabinCaptain_10: name = 'Sansão Jorge', location = '', bAllies = 0
Enc_CabinCaptain_11: name = 'Guichard Duran', location = '', bAllies = 0
Enc_CabinCaptain_12: name = 'Henrique Maia', location = '', bAllies = 0
Enc_CabinCaptain_13: name = 'Loup Paleologue', location = '', bAllies = 0
Enc_CabinCaptain_14: name = 'Girars Renouard', location = '', bAllies = 0
Enc_CabinCaptain_15: name = 'Manuel Navarrete', location = '', bAllies = 0
Enc_CabinCaptain_16: name = 'Mayew Cottier', location = '', bAllies = 0
Enc_CabinCaptain_17: name = 'Tomaz Pereira', location = '', bAllies = 0
Enc_CabinCaptain_18: name = 'Aurelien Bardot', location = '', bAllies = 0
Enc_CabinCaptain_19: name = 'Archambaud Ballanger', location = '', bAllies = 0
Enc_CabinCaptain_20: name = 'Liclaeys Karaay', location = '', bAllies = 0
Enc_CabinCaptain_21: name = 'Auguste Desire', location = '', bAllies = 0
Enc_CabinCaptain_22: name = 'Coenrarde Teeuw', location = '', bAllies = 0
Enc_CabinCaptain_23: name = 'Egidio Morante', location = '', bAllies = 0
Enc_CabinCaptain_24: name = 'Leonce Belgraver', location = '', bAllies = 0
Enc_CabinCaptain_25: name = 'Armando Braga', location = '', bAllies = 0
Enc_CabinCaptain_26: name = 'Henry Lymburner', location = '', bAllies = 0
Enc_CabinCaptain_27: name = 'Gerner Sauvaigo', location = '', bAllies = 0
Enc_CabinCaptain_28: name = 'Felipe Sierra', location = '', bAllies = 0
Enc_CabinCaptain_29: name = 'Kermit Officer', location = '', bAllies = 0
Enc_CabinCaptain_30: name = 'Rene Catellier', location = '', bAllies = 0
Enc_CabinCaptain_31: name = 'Alaerdus Bronckhorst', location = '', bAllies = 0
Enc_CabinCaptain_32: name = 'Godfried Bonnel', location = '', bAllies = 0
Enc_CabinCaptain_33: name = 'Gregorio Alcalá', location = '', bAllies = 0
Enc_CabinCaptain_34: name = 'Geffrey Leather', location = '', bAllies = 0
Enc_CabinCaptain_35: no character index
'Enc_CabinCaptain_5' is free
The first four are characters who have previously been hired and should have been cleared. Pedro Oliva is a genuine prisoner. Two more have been fully cleared. Others still show names but 'bAllies' shows 0, which is fine because the function which looks for a free slot checks that.
I already imagined that you wouldn't be interested in the code, they are just my customizations.

I will try to run NH, but until I migrated to BNH I was unable to make it work here, I will soon send the most updated PTBR files.

I avoid hiring officers, and I never hire the captain of a captured ship, I send everyone to the hold to release them later without ransom.

I will test the functioning of Dialog_func.c and report back later.

I will also examine the console script, but I have not seen the problem occur here.
 
@Peter Norton: there are a few problems with that script to change weapon assignments. For one thing, in periods earlier than "Golden Age of Piracy", horse pistols don't exist (apart from a set carried by Clint Eastwood, who has special permission to carry the most powerful handgun in the world :guns:). Also, you should not be able to equip a brace of horse pistols unless you have the "Gunman" ability, nor equip a brace of four horse pistols unless you have "Professional gunman". (Besides, my personal preference is to leave the auto-assignment as it is - 3, 4 and 5 are cobblestone, sandbag and etherbottle. I'm more likely to want to stun someone who has just picked my pocket than to go digging for treasure.)

I've already got Portuguese working as a language selectable the same way as Russian and Spanish - have a look at that update.

Back to the problem of missing captains. I've found another cause for prisoners not being properly cleared. @Peter Norton, have you been hiring any surrendered captains, particularly while they are still on deck, not after taking them prisoner? @Mirsaneli, the same question to your players.

Hiring a prisoner captain from the hold goes through function 'TIH_PrisonerHiredAsOfficerProcess', which ends by setting attribute "ClearUponExit" onto the prisoner. Hiring him directly from deck goes through 'TIH_OfficerHiredProcess', which does not. I found that out by running a different version of "console.c" which shows prisoners in more detail but does not clear them. It showed four of them not cleared, all matching the names of officers I'd hired. After hunting a couple of ships and getting one of them to surrender, and being lucky that the captain chose not to duel, I had the chance to experiment. Hiring him on deck did not clear him when he became an officer; hiring him in the hold did.

The attached version of "PROGRAM\Dialog_func.c" adds a line to 'TIH_OfficerHiredProcess' to check if the character being hired has "Enc_CabinCaptain" in his ID, and if so, clear him. With that in place, the captain cleared properly after being hired.

Also attached is the version of "console.c", here named as "console_show_cabincaptains". If you've downloaded the version which clears captains, rename it to something else, such as "console_clear_cabincaptains". Then copy and rename whichever version you want to to use as "console.c". You don't need screenshots, "console_show_cabincaptains" dumps the results to "compile.log" as well as showing them on screen. For example:
Enc_CabinCaptain_0: name = 'Gil Urquijo', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_1: name = 'Francisco Escaño', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_2: name = 'Celestin Brocard', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_3: name = 'Abulio Vallejo', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_4: name = 'Pedro Oliva', location = 'none', bAllies = 1
Character is in player AI group
Enc_CabinCaptain_5: name = '', location = 'none', bAllies = 0
Enc_CabinCaptain_6: name = '', location = 'none', bAllies = 0
Enc_CabinCaptain_7: name = 'Isore Deniau', location = '', bAllies = 0
Enc_CabinCaptain_8: name = 'Aleyn Orpett', location = '', bAllies = 0
Enc_CabinCaptain_9: name = 'Gabriel Atyeo', location = '', bAllies = 0
Enc_CabinCaptain_10: name = 'Sansão Jorge', location = '', bAllies = 0
Enc_CabinCaptain_11: name = 'Guichard Duran', location = '', bAllies = 0
Enc_CabinCaptain_12: name = 'Henrique Maia', location = '', bAllies = 0
Enc_CabinCaptain_13: name = 'Loup Paleologue', location = '', bAllies = 0
Enc_CabinCaptain_14: name = 'Girars Renouard', location = '', bAllies = 0
Enc_CabinCaptain_15: name = 'Manuel Navarrete', location = '', bAllies = 0
Enc_CabinCaptain_16: name = 'Mayew Cottier', location = '', bAllies = 0
Enc_CabinCaptain_17: name = 'Tomaz Pereira', location = '', bAllies = 0
Enc_CabinCaptain_18: name = 'Aurelien Bardot', location = '', bAllies = 0
Enc_CabinCaptain_19: name = 'Archambaud Ballanger', location = '', bAllies = 0
Enc_CabinCaptain_20: name = 'Liclaeys Karaay', location = '', bAllies = 0
Enc_CabinCaptain_21: name = 'Auguste Desire', location = '', bAllies = 0
Enc_CabinCaptain_22: name = 'Coenrarde Teeuw', location = '', bAllies = 0
Enc_CabinCaptain_23: name = 'Egidio Morante', location = '', bAllies = 0
Enc_CabinCaptain_24: name = 'Leonce Belgraver', location = '', bAllies = 0
Enc_CabinCaptain_25: name = 'Armando Braga', location = '', bAllies = 0
Enc_CabinCaptain_26: name = 'Henry Lymburner', location = '', bAllies = 0
Enc_CabinCaptain_27: name = 'Gerner Sauvaigo', location = '', bAllies = 0
Enc_CabinCaptain_28: name = 'Felipe Sierra', location = '', bAllies = 0
Enc_CabinCaptain_29: name = 'Kermit Officer', location = '', bAllies = 0
Enc_CabinCaptain_30: name = 'Rene Catellier', location = '', bAllies = 0
Enc_CabinCaptain_31: name = 'Alaerdus Bronckhorst', location = '', bAllies = 0
Enc_CabinCaptain_32: name = 'Godfried Bonnel', location = '', bAllies = 0
Enc_CabinCaptain_33: name = 'Gregorio Alcalá', location = '', bAllies = 0
Enc_CabinCaptain_34: name = 'Geffrey Leather', location = '', bAllies = 0
Enc_CabinCaptain_35: no character index
'Enc_CabinCaptain_5' is free
The first four are characters who have previously been hired and should have been cleared. Pedro Oliva is a genuine prisoner. Two more have been fully cleared. Others still show names but 'bAllies' shows 0, which is fine because the function which looks for a free slot checks that.

Players mostly complain that after a longer playthrough, surrendered captains don't appear on deck of their ships, which makes you unable to go back to sea. I assume they are not cleared properly and that is what is causing them to be missing.
 
Players mostly complain that after a longer playthrough, surrendered captains don't appear on deck of their ships, which makes you unable to go back to sea. I assume they are not cleared properly and that is what is causing them to be missing.
After releasing all prisoners, I run the script that clears the names (given by Roger Grey), I no longer saw the problem occur.
 
Players mostly complain that after a longer playthrough, surrendered captains don't appear on deck of their ships, which makes you unable to go back to sea. I assume they are not cleared properly and that is what is causing them to be missing.
Yes, but what have they been doing with their prisoners? Hiring, releasing for ransom, releasing for reputation, executing? Hiring on the ship's deck without taking them prisoner?

The alternative version of "console.c" might help you to figure out why prisoners are not being cleared. In particular, does it show prisoners with or without the "bAllies" attribute?
 
Yes, but what have they been doing with their prisoners? Hiring, releasing for ransom, releasing for reputation, executing? Hiring on the ship's deck without taking them prisoner?

The alternative version of "console.c" might help you to figure out why prisoners are not being cleared. In particular, does it show prisoners with or without the "bAllies" attribute?
I always trap them in the basement and then release them without a ransom.

I haven't installed NH yet or used the suggested codes.
 
Back
Top