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

Needs Testing Rebalancing Officer Skill Gain

Pieter Boelen

Navigation Officer
Administrator
Storm Modder
Hearts of Oak Donator
Which is how it should be, ideally, but what I mean to say is this: In my current playthrough, my character is level 36. My navigator, Artois Voysey, is level 47. He's got everything maxed out already. I simply can't stop him. Nor the others. They're galloping. Most of them are over level 40, and that's without Shared Experience. The main character is the weakest one. Gameplay-wise, I shouldn't complain; the stronger they are, the fewer bouts of headache I deal with. On the other hand, if I were Artois, would my level 47 hide care to follow this level 36 captain who's inferior to me in every possible way? Even worse when you abandon the Elder Scrolls-style skill progress and go back to the vanilla leveling; everyone maxes out everything at level 45-46 anyway, so it's a question of who levels faster, and the answer is the officers, by a great margin.
Relevant file is PROGRAM\Characters\Leveling.c .
Look specifically for 'bool AddXP(ref chref, string expName, int _exp, string group)'.
 
Feels awkward to chime in while tbe actual contributors are discussing the mod's direction,

Nothing worse than not commenting and watching the game mods sail off in the wrong direction (for your particular taste/playing style).

Since I rarely add anything from my own ideas rather just (try) and fix what someone else added /intended, be they modders or original game designers, I am particularly sensitive to trying to have a consensus of how something should be since really I don't value my own experience as enough to justify any particular direction. The more creative storywriters obviously (and justifiably) have their own view of what they wish to see in their story.

For me there are things that clearly make little sense but since they exist there is always resistance to change. A clear example is when I played the stock game I would often be struck for cash so would need to see the smugglers then run to the town to repair my ship and restock, beef up the crew etc before leaving the beach and possibly run into coastguard ships. Clear nonsense in immersion but I would fight to the last for that ability not to be removed because that is how I played. As @Grey Roger said for anything like that you don't like - don't do it - although I do understand the plaintive "well WHY didn't they prevent that" - answer rushed release, later modding resistance and a little bit of "if you care enough do it yourself" -I've got my own wishlist".

In addition to that there is the "if it ain't broke" because quite often attempting to change things (and particularly the more ambitious re-writing) led to broken features and so many changes at once that the problem that resulted could not readily be tracked down.

With regard to your problems with leveling, it is not as system I have really looked at since others were involved in taking it forward but there are a number of variables in leveling.c which would look good candidates for trial and error adjustments by you
Code:
#define XP_GROUP_PLAYER        "player"            //(DO NOT CHANGE) XP will only be given to the player
#define XP_GROUP_OFFIC        "officers"            //(DO NOT CHANGE) XP will be given to player and officers
#define XP_GROUP_PARTY        "party"                //(DO NOT CHANGE) XP will be given to everyone in the party

#define SKILLS_UP_BONUS            25                // From 10 to 99 - speed of player's skills-increase
#define SKILL_EXPERIENCE_MULTIPLIER    0.8            // FLOAT - Must be a float higher than 0.0 - default is 1.0 - the rate at which the characters gain skill experience: For a 30% increase set to 1.3
#define EXPERIENCE_MULTIPLIER    0.8                // FLOAT - Must be a float higher than 0.0 - default is 1.0 - the rate at which the characters gain experience: For a 30% increase set to 1.3

#define ADD_SKILLPOINTS_PERLEVEL        2        // INT - The amount of new skill points added each level up for ALL characters (player and officers)
#define ADD_ABILITYPOINTS_PERLEVEL        1        // INT - The amount of new ability points added each level up for ALL characters (player and officers)

#define IMPORTANCE_BONUS_GAIN            25        // INT - The multiplier for the importance if a bonus is present for this skill
#define IMPORTANCE_SKILL_GAIN            30        // INT - The multiplier for each level the character has already in this skill
#define IMPORTANCE_BOOST                40        // INT - The multiplier for the importance set in officers.c

#define NPC_ONE_BONUS_CHANCE            60        // INT - The chance an NPC will have only 1 bonus skill
#define NPC_TWO_BONUS_CHANCE            30        // INT - The chance an NPC will have 2 bonus skills. If one and two aren't 100 together, there is a chance the NPC has no bonus skills.

@Pieter Boelen should be able to give you more of a steer but even if you just search how and where the variables are used it should give you a good idea of their importance in the scheme of things. If you do experiment let us know the result because your taste of level of skill gain/experience may just be someone else's too.

One thing though if you are mainly using quest characters I have seen reference to their being protected from the leveling system (haven't checked that out myself though - it may be just their initial settings that are not reworked)

EDIT AH I see @Pieter Boelen has already steered you a bit whilst I was typing this ENDEDIT
 
Last edited:
@Pieter Boelen should be able to give you more of a steer but even if you just search how and where the variables are used it should give you a good idea of their importance in the scheme of things. If you do experiment let us know the result because your taste of level of skill gain/experience may just be someone else's too.
Seconded.

I seem to remember rewriting that 'AddXP' function myself a bit and I think @Grey Roger worked on it too.
But if I look at it, there doesn't seem to be a lot of balancing applied just yet.
Multipliers are either 0.5 or 1.0 and there are a whole bunch of checks for 'if smaller than 0.5', which doesn't seem to really be possible so it's "just in case" code.

Note that 'GetOfficerSkillFactor' can be 0, 1 OR 2!
This is defined in PROGRAM\Characters\officertypes\init_officertypes.c .
That results in 200% skill gain for officers in their areas of expertise.

As comparison, the player only ever gets 50%, which is the same as everybody else gets when Shared Experience is active.
Only skills the player gets 100% for are Leadership and Sailing (because player is a captain).
But even then, officers specialised in that could get 200% for those.

So definitely the system is stacked in favour of the officers.
In part on purpose, because as soon as the player is better than an officer, the officer becomes superfluous.
And we don't want that to happen too soon.

Sounds like this may get a bit excessive though once the officer's main skills are maxed out.
Maybe some check should be added for 'if skill is the one the officer is specialised in AND that skill is maxed out', reduce the number.
Otherwise I believe the 200% still applies, but it ends up distributed over whatever other skills are left.
Compare that to 50% for the player, and we've got the makings of those super-officers @Kara Korson describes...

Maybe it could be as simple as finding:
Code:
           if (skillmult < 0.5 && SharedXP)                                   skillmult = 0.5;   // Sharing XP, so everybody gets at least 50%
           if(DEBUG_EXPERIENCE>1) Trace("XP LOG: skillmult = "+skillmult);
And adding a line inbetween:
Code:
           if (skillmult < 0.5 && SharedXP)                                   skillmult = 0.5;   // Sharing XP, so everybody gets at least 50%
           if (GetCharacterBaseSkill(chr, expName) == 10)                       skillmult = 0.5;   // Once this skill is maxed out, slow down progression (as this spreads to other skills)
           if(DEBUG_EXPERIENCE>1) Trace("XP LOG: skillmult = "+skillmult);
I haven't tested that, but it might be worth a try.

EDIT AH I see @Pieter Boelen has already steered you a bit whilst I was typing this ENDEDIT
Ninja'd. :rofl

Your post is far better though than my two lines. :cheers
 
That's an incredible amount of detail about the subject of leveling, and I thank you all for the time you took to explain things to this layman. I'll be sure to spend some time tinkering with the settings, most likely break everything and end up doing a clean install, but I'll take a shot at it for sure.

Giving the particularly overgrown officers a boat and turning them into companions seems to halt their progress, by the way. Except maybe sea battles, but then all you gotta do is avoid naval encounters and do stuff on dry land till you catch up.
 
Maybe it could be as simple as finding:
Code:
if (skillmult < 0.5 && SharedXP) skillmult = 0.5; // Sharing XP, so everybody gets at least 50%
if(DEBUG_EXPERIENCE>1) Trace("XP LOG: skillmult = "+skillmult);
And adding a line inbetween:
Code:
if (skillmult < 0.5 && SharedXP) skillmult = 0.5; // Sharing XP, so everybody gets at least 50%
if (GetCharacterBaseSkill(chr, expName) == 10) skillmult = 0.5; // Once this skill is maxed out, slow down progression (as this spreads to other skills)
if(DEBUG_EXPERIENCE>1) Trace("XP LOG: skillmult = "+skillmult);
I haven't tested that, but it might be worth a try.
Any thoughts on this one?
Does something like that make sense?

Giving the particularly overgrown officers a boat and turning them into companions seems to halt their progress, by the way.
I wonder if they still join in the Shared Experience perk if they're on another ship.
Not sure...

If you put them in charge of a ship, does their officer type change to a Captain of sorts?
 
Officers on another ship do not get Shared Experience. They earn XP based on what their ship does.

Officers put in charge of a ship do indeed change to the relevant type of captain - privateer, navy or pirate, depending on what you are. Usually they change back when you sell the ship and they return to your Passengers list.
 
Officers on another ship do not get Shared Experience. They earn XP based on what their ship does.
The Shared XP of their ship then. Not yours.
Which probably means they miss out on a lot of the "action"; both at sea, but especially on land.

Officers put in charge of a ship do indeed change to the relevant type of captain - privateer, navy or pirate, depending on what you are. Usually they change back when you sell the ship and they return to your Passengers list.
Thanks. That means their skill gain properties would change too as soon as they're put in charge.
 
Fooling around with Leveling.c right now; while a slight nerf brought skill experience back to a decent balance, plain regular experience gain had to be chopped severely in order to make my officers follow the leader juuuust a couple steps behind. I'll go with 0.65 for the skill experience multiplier and 0.4 for the experience multiplier.

Thanks again for the pointers!
 
Good test, @Kara Korsan!

I'm not sure though if those two multipliers are the best spot to tweak balancing between the player and officers.
As far as I know, both values should apply to the player and officers equally; so whatever relative difference it makes, it should be relatively minor.

That's why I suggested looking into the 'AddXP' function instead.
That is where clear differences between player and officers are introduced.
 
I'm not sure though if those two multipliers are the best spot to tweak balancing between the player and officers.
As far as I know, both values should apply to the player and officers equally; so whatever relative difference it makes, it should be relatively minor.
Went back to see what else I changed and forgot to mention. Found it thanks to the comments.
That's why I suggested looking into the 'AddXP' function instead.
That is where clear differences between player and officers are introduced.
Exactly. There it was:
Code:
            if (IsMainCharacter(chr))                                                                // Special case for the player, because you cannot focus on all skills at the same time
            {
                skillmult = 0.8;                                                                    // Only 50% of all skills
                if (expName == SKILL_LEADERSHIP)                                skillmult = 1.0;    // But a captain MUST know how to lead a crew
                if (expName == SKILL_SAILING)                                    skillmult = 1.0;    // And navigate a ship
            }
0.8 doesn't mean 50%, so apparently I touched there, too, and forgot to revert it. Whoops.
 
0.8 doesn't mean 50%, so apparently I touched there, too, and forgot to revert it. Whoops.
Ah; that WOULD indeed boost the player gain compared to your officers.

My own suggestion was to keep the differences as they are; but only slow them down once skills are maxed out.
So officers remain specialised in their fields. But they (hopefully) doesn't start becoming all-round supermen (or women) once they've reached that point.
 
Back
Top