Ronin MUD — Group Damage Simulator
Simulates a group of 5 characters fighting a training dummy for 600 seconds in 10 fights, using every skill and spell available to their subclass (subclass level 5, character level 50).
Select your group and press Simulate.
All subclasses (solo, same inputs — group buffs only affect themselves)
Model assumptions (from ronin/src): combat ticks every 3s (PULSE_VIOLENCE) = 200 rounds in 600s; the fights slider (1–30, default 10) splits those 200 rounds into N consecutive fights against a fresh dummy, so opening skills (Backstab, Engage, Flank, Lunge, Ambush) fire once per fight (skill lag resets on the new dummy, so backstabs/flanks/lunges/ambushes always equal the number of fights; after the Legionnaire’s opening Lunge it falls back to Clobber) and mana/buffs carry over between fights. Nomad Ambush: number(1,151)−dex_app, avg 6 × weapon damage (ambush_mult[50]=6), 3-round lag; Mercenary SC5 Sidearm adds one extra sidearm weapon hit per ~6 rounds (then number(4,6) rounds re-drawing, char_spec.c:919-930). Spell/buff durations are measured in 60s ticks (affect_update runs on PULSE_TICK, comm.c:1009), so 1 tick = 20 rounds.
Every character makes their basic multi-strike attack every round, plus at most one extra skill/spell/buff action per round. All skills share one lag timer (WAIT_STATE blocks every command, comm.c:797): after any skill, no other skill can be used until its lag elapses — circle 3 rounds, banzai 1 round, all others 2 rounds. Backstab (Thieves and Anti-Paladins) only works on an unengaged target, so Rogue/Bandit/Defiler/Infidel use it once per fight, as does the Gladiator’s Flank; Anti-Paladin Pummel can follow up with Hidden Blade (level 40+): chance(25+dex_app) for an extra level×2 on the stunned victim (act.offensive.c:1290-1299), and Defiler SC5 Bathed in Blood adds a 10% Vampiric Touch (450, unsavable) to each successful Backstab. Quick Recovery (Rogue SC5) cuts skill lag by 1 with chance(number(50,75)) ≈ expected −0.625 rounds; the lag is tracked fractionally so the reduction compounds across uses (expected circle lag 2.375 → ~84 circles per 200-round fight). So headbutt and flank must alternate (~50 each = ~100 total uses); only banzai (1-round lag) can fire every round, and it also grants one extra full basic-attack round on use. Rogue’s Circle can also Twist (Thief 45+: number(1,131) − dex_app − Vehemence ≤ learned TWIST → +250 damage, fight.c:3524) and Trip the target (SC4, toggle assumed on): separate checks after a successful circle; a trip stuns so the Rogue’s next regular hit deals ×2. The Pummeled Circles checkbox (off by default) assumes every Rogue/Bandit circle lands on a pummel'd, stunned target and doubles all circle damage.
Quick Cast (MU50, 100 mana, 5 ticks) halves cast lag → two casts per round while active (casting Quick itself takes a full lag). Both MUs share the full base-MU damage spellbook at level 50 (spell id ≤ 165 bypasses the subclass gate, subclass.c:48): Magic Missile 32.5/5, Burning Hands 55/17, Chill Touch 45/15, Shocking Grasp 75/19, Lightning Bolt 95/20, Color Spray 87.5/23, Fireball 135/25, Iceball 145/30, Lethal Fire 230/50, Death Spray 145/80, Electric Shock 475/100, Vampiric Touch 450/140, Firebreath ≈542/100 (5 uses), Disintegrate ≈750/150 (kill branch ignored — the dummy can’t die), Thunderball 950/200, Conflagration 1500/200. The Archmage ranks spells by damage per mana and always picks Meteor (10 vs WOA 7.6, Conflagration 7.5, Frostbolt 7): Quick Cast then Meteor twice per round as far as mana allows; the Enchanter also has Quick Cast (base MU50 spell) and tops up with its best affordable spell between Conflagrations.
Target is a standing, full-HP dummy: every attack has a 5% chance to miss (95% hit rate; a miss stops the multi-strike chain), no saving throws (the dummy never saves).
Stunning skills (Pummel, Backfist, Tigerkick, Headbutt, Smite) leave the target STUNNED so the next attack deals ×2 damage (Iron Fist Punch ×1.55 expected: 67% sitting ×1.333 + 33% stun ×2); Bash sets it resting (×1.5); Batter sets it sitting (×1.333); Clobber averages ×2.21 over its random victim states (25% MW ×2.5 + 25% incap ×2.333 + 50% stun ×2); the Cavalier’s steed trample hits the stunned victim at ×2 then leaves it resting (Pummel, ×1.5) or sitting (Smite, ×1.333).
Aid (Chanter SC4) is cast on the whole group: +10% of all damage to all 5 members for 5 ticks (100 rounds). War Chant ×1.2 (dummy isn't war-chantered), Magic Armament +2d5, Might +3 damroll 20 ticks, Power of Devotion +3 damroll 12 ticks (Cavalier SC4; strictly outclassed by Might), Righteousness +1d4 10 ticks, Rage ×1.5 all damage 5 ticks (cast as soon as affordable), Frenzy ×1.5 weapon damage, Tranquility +3 hit/dam 6 ticks, Mystic Swiftness 4 ticks, Blade Dance deals 350 + one full basic attack and refreshes Bladesinging (+40 damroll) for 10 rounds, each Shadow Wraith shadow lasts 10 ticks (200 rounds) and adds one extra basic attack per round only if the main attack lands; Dusk Requiem deals 350 per current shadow and consumes one shadow, so it is only cast when that burst exceeds the lost shadow damage (i.e. near the end of the run).
Buffs don’t stack: Aid, War Chant and Divine Hammer can only be recast after they expire. The Templar casts base Cleric damage spells between Divine Hammers (Flamestrike 110/25 mana, Harm 125/35, Searing Orb 125/60, Super Harm 600/100, Earthquake 54.5/15; Templar SC1 Conviction makes Harm and Super Harm unsaveable) and saves up mana for Divine Hammer (200) instead of spending it on cheaper spells.
Characters start with one tick of mana regen (the Mana_Regen input; cap 1000) and gain Mana_Regen every 60s. Skill success uses the source formulas
(e.g. number(1,137) − DEX_APP ≤ learned) with the Skills/Dexterity/Wisdom inputs;
expected values are used instead of random rolls so results are stable. Crits: Ranger assumed at its maximum 50%, Trapper 20% + 2%/Dex over 18, Ronin Sento Kata 20%; crits double weapon damage only.
Multi-strikes use the DUAL/TRIPLE/QUAD skill checks (Skills input) with Juggernaut (Warlord SC4) and Hostile (Gladiator SC5) toggles; Ninja always gets a 2nd hit.
Clerics and Bards are assumed under Haste: chance(30 + DEX_APP) of an extra basic attack each round (a missed haste attack stops the chain).
Passive toggles assumed on: Fury (both Paladins ×2.5 weapon damage), Berserk, Frenzy (×1.5), Awareness, Hostile, Vehemence, Trusty Steed, Dragon form (Druid); Shadowstep (Defiler SC4) is a ×2.0 bonus weapon hit every round with chance number(1,450) − dex_app×5 (≈39% at defaults, char_spec.c:245-301); Dragonfire engulfs the target (+2% damage taken per stack, 3 max stacks, subclass.skills.c:2489) so with a Druid in the group all members deal +6% damage for the whole fight. A pummel'd/stunned victim takes ×2 on the next hit (×5 total with Fury). The Cavalier’s steed trample (Pummel/Smite) is an extra basic attack at ×2 on the stunned victim, leaving it resting (×1.5) / sitting (×1.333). Snipe never fires vs a full-HP target. Disembowel (Warrior/Nomad, level 40+) only lands while the victim is below 30% HP (act.offensive.c:1933), modeled here as usable in the last 20% of each fight: number(5,10) → avg 7.5 × weapon damage, same dex check, 3-round lag.
Excluded (no corpse / defensive / no dummy interaction): Trophy, Wall of Thorns, Desecrate, Blade Barrier, Blackmantle, Orb, Fortification, Evasion, Defend, Riposte, Feint, Camaraderie, heals; Energy Drain (~5 dmg), Power Word Kill (0 vs a level-50 target), Call Lightning (needs outdoors + rain), Holy Word / Evil Word / Dispel Evil / Dispel Good (only hit good/evil-aligned victims — 0 vs a neutral dummy) and Poison (STR debuff on a passive target). Ronin SC3 Combat Zen is already implicit: with only dual-wield, a miss no longer breaking the chain raises expected landed hits to 2p = 1.9, exactly what the flat 2-hit model with the global 5% miss yields.