I have finished a rewrite of the combat controller, the hit/dodge/block code, and the combat damage code. This also required me to tweak all of EmpireMUD’s weapons and NPCs with new values.
Asynchronous Combat Controller
The old combat system was split into discrete rounds, where each character had a number of attacks per round, both sides did their damage, and the round ended. These rounds happened every 2 seconds.
The new combat controller is asynchronous — not split into rounds. Each player has an attack speed (based on their weapon, wits trait, and abilities). The speed is the time between attacks, so a lower speed is better. Ranged combat now lasts 4 seconds, but the number of shots taken in that time is also based on speed.
Hit, Dodge, Block
The chance to hit in combat is based on primarily on the dexterity trait, and modified by abilities. If the victim is awake and can see the attacker, his chance to dodge is similarly dexterity- and ability-based. Once the hit is successful, there is also a chance to block. Block will require an ability to work at all, and is based on the shield’s block rating and the character’s abilities.
Hit, dodge and block all have a random chance involved. With higher Dexterity and better Battle abilities, the chance increases significantly.
Damage for player characters is based on the strength trait and the weapon’s damage bonus. Damage is flat, not random or rolled on dice.
Your character’s actual damage is rated in DPS — Damage Per Second. This is your damage per hit divided by the speed of your attack. Two weapons can only really be compared using DPS, as the raw damage rating or raw speed is meaningless on its own. I will be adding DPS to the score screen and to the information shown when you Identify a weapon.
As always, I need feedback on this system to figure out where it needs tweaks or balancing. Thanks.