April 29, 2013

Version 29 Update Notes

New Features

- New ability processing system.
- Revised skills. See Ability Changes for documentation. Players are encouraged to respec.
- Revised resurrect options on death.
- More ability points for players who reach level 30 and above, averaging 3 points per level instead of 2. Specifically, even levels grant +4 while odd levels grant +2. Respec is necessary to retroactively claim these points.
- The Daze status effect now lasts a minimum of one second, even if the target is hit by an attack.

Bugs Fixed

- Fixed a bug/exploit where percentage-based buffs or debuffs would reduce that stat to nearly zero, greatly weakening it.
- Fixed a numerical rounding issue for buffs that could give one less point than it should.
- Fixed ground-target or player-location area of effect abilities that could fail to trigger due to incorrect differences in elevation.
- Fixed a bug where negative element armor ratings (after a debuff) would erroneously produce misses for that element instead of hits.

Revised Skills

This update features a completely revamped ability processing system which allows for easy modification of abilities. To showcase this feature, the existing ability set has been significantly revised.

Many rarely-used or useless abilities of all classes have been improved. Altered damage, charge costs, status effect durations, cooldowns, purchase costs, etc.

Not all abilities have been revised. Most abilities of common use have not been modified, unless to fix certain problems with damage formulas across tiers. Retaining balance is still a goal, so further tweaks may be necessary.

All players are encouraged to respecialize and rebuild their skillset.

Revised Rez Screen

You may hover the mouse over the buttons to see their new effects.

If you click the wrong button, you can now click another option as long as the timer is still counting down.

Technical Details

The original ability set was hardcoded into the server, requiring over 20,000 lines of code. It was buggy, prone to errors (responsible for at least some crashes) and any large-scale changes would've been a nightmare.

The reason for this was that C++ does not natively support evaluation of arbitrary mathematical expressions. It was easier to use a computer program to generate source code from the ability table.

Now, using the wonders of the Shunting-Yard Algorithm and Reverse Polish Notation, a formula class has been created which can solve the basic mathematical formulas of the ability table, and also allow for named variable substitution for player stats and other attributes.

The client's internal ability table, which is basically a spreadsheet, has been converted into a simple file containing rows of ability definitions. Each row contains all the information a particular ability of a certain class and tier needs to function. Activation conditions, action functions, warmup time, point cost, client description info, etc.

As a simple text file which can be loaded into a spreadsheet application and saved back out, abilities can be easily edited.

Additionally, custom server-side action functions and attribute names can be defined and programmed, to extend the the capabilities and mechanics of existing skills.

A crude file written in notepad, documenting most of the changes:
Ability Changes