Un-overload Object fields and pre-parse damage dice (refactor step 3)
Object.Arm carried four meanings in C (o_arm/o_charges/o_goldval plus
ring bonuses); it is now four fields: ArmorClass, Charges, GoldValue,
and Bonus. Stats.Arm becomes Stats.ArmorClass. The Charges()/GoldVal()
accessor pair is gone.
Damage dice strings ("1x4/1x2") are parsed once into DiceSpec — at
table definition for the bestiary and weapon tables, at creation for
items — instead of re-parsed with atoi on every swing as fight.c
roll_em did. ParseDice preserves the C parse semantics exactly,
including the junk-tolerant "%%%x0" bestiary placeholder and the
"000x0" flytrap reset (regression-tested in dice_test.go); the
flytrap's growing grip becomes DiceSpec{{VfHit, 1}}.
Save format bumps to 5.4.4-go3 (field renames and retypes would
silently zero under gob's match-by-name decoding).
No behavior change; full suite green.
This commit is contained in:
@@ -123,20 +123,20 @@ func (g *RogueGame) wield() {
|
||||
|
||||
// initWeaps is the weapons.c init_dam[] table.
|
||||
var initWeaps = [NumWeaponTypes]struct {
|
||||
dam string // damage when wielded
|
||||
hrl string // damage when thrown
|
||||
dam DiceSpec // damage when wielded
|
||||
hrl DiceSpec // damage when thrown
|
||||
launch WeaponKind // launching weapon
|
||||
flags ObjFlags
|
||||
}{
|
||||
{"2x4", "1x3", noWeapon, 0}, // WeaponMace
|
||||
{"3x4", "1x2", noWeapon, 0}, // Long sword
|
||||
{"1x1", "1x1", noWeapon, 0}, // WeaponBow
|
||||
{"1x1", "2x3", WeaponBow, Stackable | Missile}, // WeaponArrow
|
||||
{"1x6", "1x4", noWeapon, Missile}, // WeaponDagger
|
||||
{"4x4", "1x2", noWeapon, 0}, // 2h sword
|
||||
{"1x1", "1x3", noWeapon, Stackable | Missile}, // WeaponDart
|
||||
{"1x2", "2x4", noWeapon, Stackable | Missile}, // Shuriken
|
||||
{"2x3", "1x6", noWeapon, Missile}, // WeaponSpear
|
||||
{dice("2x4"), dice("1x3"), noWeapon, 0}, // WeaponMace
|
||||
{dice("3x4"), dice("1x2"), noWeapon, 0}, // Long sword
|
||||
{dice("1x1"), dice("1x1"), noWeapon, 0}, // WeaponBow
|
||||
{dice("1x1"), dice("2x3"), WeaponBow, Stackable | Missile}, // WeaponArrow
|
||||
{dice("1x6"), dice("1x4"), noWeapon, Missile}, // WeaponDagger
|
||||
{dice("4x4"), dice("1x2"), noWeapon, 0}, // 2h sword
|
||||
{dice("1x1"), dice("1x3"), noWeapon, Stackable | Missile}, // WeaponDart
|
||||
{dice("1x2"), dice("2x4"), noWeapon, Stackable | Missile}, // Shuriken
|
||||
{dice("2x3"), dice("1x6"), noWeapon, Missile}, // WeaponSpear
|
||||
}
|
||||
|
||||
// initWeapon sets up a new weapon (weapons.c init_weapon).
|
||||
|
||||
Reference in New Issue
Block a user