No such luck.
For one thing, that crashed the game - it should, of course, be "chref", not "ch".
With that corrected, it did not solve the problem; officers still did not join in boarding.
I guessed that function is called when the character is initially created and possibly when he levels up. So, to see if setting the "AbordageMode" attribute has any effect, I put it into "console.c":
Code:
ch = CharacterFromId("Two Dogs")
if (!CheckAttribute(ch,"AbordageMode")) ch.AbordageMode = 1;
logit("Two Dogs: Abordagemode = " + characters[getCharacterIndex("Two Dogs")].AbordageMode);
The 'logit' confirmed that Two Dogs did indeed now have the attribute set, and he still failed to show up in the boarding. Incidentally, there was a problem with "console.c" - I don't recall the exact message now but it was somewhere in switch case 3, and as I didn't have time to check it in detail, I just commented out the entire case 3 block.
I also tried this:
Code:
ch = CharacterFromId("Two Dogs")
if (CheckAttribute(ch,"AbordageMode")) logit("Two Dogs: Abordagemode = " + characters[getCharacterIndex("Two Dogs")].AbordageMode);
else logit("Two Dogs: AbordageMode not set");
That showed Two Dogs
already having 'AbordageMode' set to 1 - either the function in "Leveling.c" had been called anyway, or it was already set at character creation.
Just to be absolutely certain, could you try one tavern-hired officer as well?
Then at least we can rule out if that makes a difference or not.
I'm not sure if the boatswain was a tavern or a random walker, but he certainly isn't a quest officer. So I assigned him to the party, replacing one of the quest officers. He didn't appear during boarding either.
Attached: "console.c" with the command to set "AbordageMode", and a savegame standing on Playa de Sierra Maestra beach about to put to sea and attack the payroll ship.