You're welcome! I'm trying to peg animal companion strength to the Mirror Golem's, as comparisons between both are inevitable. In general, I am thinking of a general power level of Dragon > Dinosaur > Other Companions = Telthor = Mirror Golem, due to the difficulty of getting the Dragon companion and the extra feats required for both Dinosaur and Dragon. A 40 basic companion should at least be somewhat comparable to a CL52-CL55 Mirror Golem given how easily accessible this is, otherwise I can foresee more “nerf arcane” cries from brownyman
I've given some thought to decentralizing the companion coding completely, and do see some merits to adjusting single companions with such an approach. However, I still think that having a general scaling code alongside companion specific modifiers has some benefits.
1) It gives a handle if the general power level of all companions is seen as too low or high. Decentralized coding on a per-companion basis means that if something like this happens, you will have to adjust many different independent scaling scripts. For example, if k3d's concern about companions dying too often is proven valid and you want to increase AC across the board, the AC scaling formula can be tweaked for a universal AC boost instead of having to dig through the companions 1 by 1 and doing individual adjustments.
2) You can still easily scale individual companions independently of the overall scaling formula in cases where a particular companion is seen as too strong/weak relative to the others. For example, if the bear's HP boost is seen as too big an advantage, the code for its HP can just be adjusted from "SetHP = 1.5*BaseHP" to "SetHP = 1.3*BaseHP".
3) If there is ever a push to scale up the other summon spells and abilities (FS set amulet, Epic Gate, Hexblade Hound, Summon Creature etc...) these formulae can be used as a scaling baseline.
This approach thus gives 2 levels of flexibility, and can be built on for other non animal companion summons.
A pseudocode for the scaling can look something like this (I am terrible with nwscript syntax, so have no way of providing actually usable code)
Code: Select all
//Execute script on companion summon
//1st part of script defines the universal baselines based on the summoner level.
If companion == telthor
level = (Shaman Level – 3) + (Lion of Talisid Level) + (Paladin Level – 4, if exalted tracker) + feats
level = (Druid Level) + (Cleric Level, if Animal Domain) + (Ranger Level – 3) + (Lion of Talisid Level) + (Paladin Level – 4, if Exalted Tracker) + Feats
BaseHP = F(level)
BaseAC = F(level) etc for all the basic statistics
Givefeat = "All universal baseline feats"
//Next, comes the 2nd part of the code where the companion type specific modifiers are applied to the baselines and assigned to the companion
If companion == bear
SetHP = BaseHP x 1.5
SetAC = BaseAC + 5
SetBAB = BaseBAB etcetc
else IF companion == wolf
SetHP = BaseHP
SetAC = BaseAC etcetc
In this code, BaseHP and BaseAC are not functions, but rather Integer values that are scaled based on the level of the summoner. They are assigned to the companion via SetHP and SetAC etc, with or without a companion-type specific multiplier or additive bonus.
You can adjust part 1 if an overall buff/nerf to all companions is desired without changing the relative power between companion types, and adjust part 2 if the companions need to be balanced relative to one another without changing overall general power level.
Of course, since you're doing the coding, it's up to you which would be better. I have no objection if we still go with the decentralized route.
A level by level scaling makes it hard for the player to envision the companion’s power level at any given level, as you have to add multiple lines of different variables. It’s one of my issues with the way the description for Curse Song was written. It’s really hard to get a summary of the effects given Bard Level X and Perform Skill Y without doing some serious math.
This approach of listing level ups as:
LVL 1: 1d2 Physical Damage
LVL 2: Blind Fight, 50 Bonus HP, + 1 BAB
LVL 3: +1 Natural AC
makes sense for player character classes, as a player needs to pick and mix classes, and such knowledge helps them decide how many of each class to take. (e.g. This info tells me I should take Frostmage to 6 because they get Piercing Cold, and then Sorcerer to 15 for bonus feat, and 2 Paladin for Divine Grace) This makes less sense for a companion as they follow a monotonic single path leveling progression without multiclassing options. No 10 Bear/10 Wolf/20 Badger crossbreeds for example.
Thus, I am not really comfortable with setting a leveling code on a level-by-level basis, as it becomes easy to over or undershoot a desired power level. If it's still preferred, perhaps this can be done by reverse-engineering a formula? This prevents severe over- or under-scaling.
On another note, given that physical damage is by far the most commonly seen immunity in high level mobs, and they are also given 10 DR on any EX level, a pet with purely physical damage (like the proposed bear) is going to see awful damage at high levels given the sheer prevalence of 50+% physical immunity on mobs.
I would thus prefer something like the Mirror Golem’s decentralized damage approach, where damage is split across multiple types. Although this is less coherent from a RP sense, it yields more consistent damage for the companions against a variety of content.
My thinking of scaling companions to 50 instead of 40 stems from the long length of time a player character spends in the ERs, and the huge power difference between a fresh 30 and a 30 ER4, rather than a simple desire to match it with spellcasting. A scaling of 40 levels would have the same companion for both these characters despite big power differences from ER stats, spell scaling and special metals/forges. A 40 level scaling would also need to put way more scaling between 30-40 compared to 1-30 per level due to the way player characters advance in power with level (better gear, synergistic feats along with character advancement)