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

Discussion Officer/Passenger Leveling

SillyWilly

Landlubber
Hello friends! I have been playing this mod for almost a year now and I have loved every minute of it :) I do have a question/discussion for you all to ponder. What is your preference for leveling up your officers/passengers?

On the Stock POTC leveling setting you can easily min/max the leveling of each passenger by having them chill on the ship and passively level their respective skills. For example, hiring a quartermaster at Speightstown of Nathaniel Hawk's storyline. The quartermaster will never be in any danger and will be maxed out in commerce fairly quickly.

The New way for leveling officers by using their skills is a bit too long and kind of unclear on how my passengers can level at all if they just sit in the ship all day. I prefer this leveling option for leveling my character but I don't particular like either of the two options for leveling officers/passengers.

FYI, I have turned off the "locked" abilities but I doubled the amount of ability points needed to unlock them to balance it.

I tried to limit myself to only hire 2 officers at a time and after leveling them up to max I would hire 2 more but I am not able to hire low level officers after I get to level 8 or so. After level 8 all the officers I want to hire are a bit too high level and will take even longer to level them to their maximum ability.

I can think of two ways to "answer" this question:

1) Only allow certain officers to level up if they are in your 4 man party (like Stock POTC) but somehow keep the New way of leveling based on using skills for my character.

2) Keep the leveling system as it is but find a way to reset hired officers to level 1 through the console


TLDR: How can I make it so leveling officers/passengers is not a slog or too easy, and what are your preferences on leveling your passengers?
 
After reading this over I feel like I was pretty vague with what I'm asking.

Does anyone know of a way to do either 1) or 2) of the above?

For 2) , I've tried looking in the mod's folders but I don't see a way to edit officers in there.
 
First, a little summary about how officers work.

There is almost no difference between officers in your immediate party and officers who stay on the ship, apart from the obvious one - those in your party accompany you on land and in boardings, so they'll get into fights when you do. Whether in your party or stuck on the ship, all officers gain experience in skills directly related to their jobs and no experience in any other skills. So whenever you sail around, your navigator will earn experience in "Sailing"; when you get into a sea battle and shoot at enemy ships, your gunner will earn experience in "Cannons" and "Accuracy"; and if you have sailcloth and planks to repair damage, your carpenter will earn experience in "Repair" later. Being specialists, they earn experience faster than you do, but only in these job-related skills. This, incidentally, means you probably want your boatswain and master at arms in your shore party - fighting is their job so they earn "Melee" experience faster than anyone else, including you.

Implementing option 1 would be very difficult, involving rewriting some of the levelling code. Option 2 should be possible, but be warned! Random enemies such as thugs in town and jungle, and highwaymen in the jungle, are based on your skill level. If you zap all your officers down to level 1 while you're at level 8, your party officers will probably be slaughtered by the next group of thugs who attack you.
 
First, a little summary about how officers work.

There is almost no difference between officers in your immediate party and officers who stay on the ship, apart from the obvious one - those in your party accompany you on land and in boardings, so they'll get into fights when you do. Whether in your party or stuck on the ship, all officers gain experience in skills directly related to their jobs and no experience in any other skills. So whenever you sail around, your navigator will earn experience in "Sailing"; when you get into a sea battle and shoot at enemy ships, your gunner will earn experience in "Cannons" and "Accuracy"; and if you have sailcloth and planks to repair damage, your carpenter will earn experience in "Repair" later. Being specialists, they earn experience faster than you do, but only in these job-related skills. This, incidentally, means you probably want your boatswain and master at arms in your shore party - fighting is their job so they earn "Melee" experience faster than anyone else, including you.

Implementing option 1 would be very difficult, involving rewriting some of the levelling code. Option 2 should be possible, but be warned! Random enemies such as thugs in town and jungle, and highwaymen in the jungle, are based on your skill level. If you zap all your officers down to level 1 while you're at level 8, your party officers will probably be slaughtered by the next group of thugs who attack you.

Sir, you are a gentlemen and an Admiral :)

Do you have any advice on where I should start/look for option 2)? After hiring an officer I would think their stats or info would appear in the Character folder but I'm either blind or I'm looking in the wrong place. Thank you for your response that definitely clears up my confusion on officers in general!
 
Do you have any advice on where I should start/look for option 2)? After hiring an officer I would think their stats or info would appear in the Character folder but I'm either blind or I'm looking in the wrong place. Thank you for your response that definitely clears up my confusion on officers in general!
That's where it gets tricky. The starting stats for quest officers such as Artois Voysey can be found in "PROGRAM\Characters\init\Officers.c" or "PROGRAM\Characters\init\SideQuest.c". Other quest officers specific to storylines can be found in the storyline's folders; for example, you'll find characters specific to "Tales of a Sea Hawk" in the files in "PROGRAM\Storyline\standard\characters\init".

But random officers such as those hired from taverns are generated randomly when you first meet them. So their starting stats aren't found anywhere. That's why you can't find low level officers when you're high level - the code which spawns them intentionally makes them somewhere near your level.

There is actually a way in the game to wipe an officer's skills and abilities, though it only wipes the skills if you're using the original skill system. You might get away with going to the "Options" menu, changing to "Manually distribute received skill points", wiping the officers, then reverting to "Player actions define the skill increases". You'll also need to edit "PROGRAM\InternalSettings.h", go to the bottom, and set "ENABLE_CHEATMODE" to 1. Then go and talk to any tailor, where you should have the dialog option "By the might of El Rapido! Reset the main character's and/or the 3 assigned officers' skills and abilities." From there go to "Aye! Reset just the 3 assigned OFFICERS' skills and abilities - and do it quickly!" That should wipe the officers in your party. It won't reduce them to level 1 but it will zap all their skills and abilities, and give them skill and ability points to match their levels. Go to the "Options" menu and switch back to "Player actions define the skill increases". Make sure you save game before you do any of this because I'm not sure whether changing the skill setting in "Options" in the middle of a game will mess things up; if you start seeing weirdness, go back to that saved game. In any case, this only affects the three officers in your party, so you'll need to then go to "Passengers", assign another three, then have the tailor reset them, and so on for all your passengers.
 
Very relevant file:
PROGRAM\Characters\Leveling.c

There's a bunch of #define's at the top that you could look into tweaking.
Plus this famed section of code also, of course:
Code:
       float skillmult, tempmult;
       capt = GetCharacter(FindCaptainIndex(chref));                                               // Get the captain of the ship
       for(i=-1; i < GetPassengersQuantity(capt); i++)                                               // Start at -1 to include captain
       {
           if (i == -1)   cn = sti(capt.index);                                                   // Captain of the group
           else           cn = GetPassenger(capt, i);                                               // Passenger of this character
           if (cn < 0)                                                   continue;                   // Skip invalid characters
           chr = GetCharacter(cn);                                                                   // Reference to the character
           if (CheckAttribute(chr,"prisoned") && sti(chr.prisoned))   continue;                   // Filter prisoned characters
           if(DEBUG_EXPERIENCE>1) Trace("XP LOG: Loop "+i+", Checking Officer "+GetMySimpleName(chr)+" with id "+chr.id);

           // Determine Skill Multiplier for this character
           skillmult = 0.0;
           if (cn == sti(chref.index))                                           skillmult = 1.0;   // The character who gained the XP gets 100%
           if (expName == "")                                                   skillmult = 1.0;   // All characters join in "general XP"
           if (expName == SKILL_FENCING)                                                           // Fencing is a personal skill and should be handled differently
           {
               if (skillmult < 0.5 && bAllies(chref) && IsOfficer(chr))   skillmult = 0.5;   // Character is in the player shore party
           }
           else                                                                                   // For any non-personal skills
           {
               tempmult = GetOfficerSkillFactor(chr, expName);                                       // This means some officers can get 200% XP!
               if (skillmult < tempmult) skillMult = tempmult;                                       // The officer who gains the XP will ALWAYS get it
           }
           if (IsMainCharacter(chr))                                                               // Special case for the player, because you cannot focus on all skills at the same time
           {
               skillmult = 0.5;                                                                   // 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
           }
           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);

           // Add Experience
           if (skillmult > 0.0)                                                                   // If any XP is to be added to this character
           {
               if(AddXP(chr, expName, makeint(_exp*skillmult), XP_GROUP_PLAYER)) LevelUp = true;   // Add that XP and see if it resulted in a Level-Up
           }
       }

And if you're looking at balancing, this at the bottom of that same file looks very relevant too:
Code:
float GetXPmult(string Skillname)
{
   float expMult = 1;
   switch (Skillname)
   {
       case "Leadership":   expMult =  2.5 ; break;
       case "Fencing":       expMult =  1.75; break;
       case "Sailing":       expMult =  0.8 ; break;
       case "Accuracy":   expMult =  1.25; break;
       case "Cannons":       expMult =  0.4 ; break;
       case "Repair":       expMult = 50   ; break;
       case "Defence":       expMult =  1.5 ; break;
       case "Sneak":       expMult =  1.5 ; break;
       case "Grappling":   expMult =  3   ; break;
       case "Commerce":    expMult =  0.50; break;
   }
   return

Keep in mind also that the "Shared Experience" Ability makes quite a difference as well.
 
Back
Top