Devblog:

Hello friends,

I hope the year 2020 is treating you all well. This blog post is the first of what I hope will be many this year, and today we're going to look at specializations ("classes"), the Ranger in particular.

For years, the Ranger has been particularly problematic, and it all boils down to the zuluctf game from the early days of Zulu Hotel, back when the emulator was an early version of POL and there were no classes except for in the Capture the Flag mini game. Those classes were "War Axe", "Mace", "Bow", "Mage", "Cleric", and "Warrior". Over the years those were refined into the standard breakdown we're familiar with today, and they have an agreeable symmetry: All the specializations have 8 core skills with no overlap, and things were okay when the POL codebase was in flux, but as things converged to be more "OSI-like" (or EA-like if you prefer), certain inter-dependencies became standardized.

One of those things is that on the official servers, Tactics gives a percentage bonus to weapon damage. POL picked this up early on, but of course that poses a problem: Rangers don't have Tactics as a class skill. POL hardcoded the Tactics bonus in their core starting with version 094 or 095, and if you dig into the script releases for some early Zulu Hotel clones you can see there are specific if checks as a workaround:

for i := 0 to SKILLID__HIGHEST
                var amount := GetEffectiveSkill( who , i );
                total := total + amount;
                if( i in classe_skills )
                        classe := classe + amount;
                        if( i == 31)
                                rangersak := 1;
                        endif
                endif
        endfor

        if ( rangersak == 1)
                total := total - GetEffectiveskill(who , SKILLID_TACTICS);
        endif

However in RunUO:

    damage += ( damage * ( ( attacker.Skills[SkillName.Tactics].Value - 50.0 ) / 100.0 ) );

That's a straight bonus to damage amounting to +50% at 100 effective skill in the standard RunUO codebase. Ours is of course edited slightly to account for the 130 skill cap, but it's illustrative regardless.

We could if-else the Tactics check away, but as our illustrious tester Turmoil recently documented, this causes a dramatic decrease in Archery damage. A spec warrior in fact does more damage with a bow than a spec ranger, due to the Tactics increase. It also precludes any use of +Tactics bows that drop in loot.

We could rejig loot on archery weapons, and we could bump up archery damage in response, but now we're getting into some tricky balance issues, so I opted for the simpler route: The Ranger spec now has Tactics as an integral skill, and when calculating on-spec skills we average out the number of skills so that the exact number of unique skills doesn't really matter.