mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
D&D: give Human +1 to all stats and rebalance races to +6 net
Human was mechanically blank (all-zero mods, "not yet implemented" passive). Wire the Standard Human flavor: +1 to every ability score, no setup-wizard choice so !setup stays uniform across races. That put Human at +6 net with no downside, ahead of every other race. Retune the rest to +6 net as well, keeping their negatives intact so each stays a spiky specialist rather than a flat generalist.
This commit is contained in:
@@ -52,8 +52,8 @@ type DnDRaceInfo struct {
|
||||
Key DnDRace
|
||||
Display string
|
||||
// Stat modifiers applied at setup-confirm time. STR/DEX/CON/INT/WIS/CHA.
|
||||
// Human's "+1 to any" is not yet implemented in Phase 1 — Human gets +0
|
||||
// across the board and we'll add the floating bonus in a later phase.
|
||||
// Human takes the Standard Human flavor: +1 to every stat, no setup-wizard
|
||||
// choice (keeps !setup uniform across races).
|
||||
Mods [6]int
|
||||
Passive string
|
||||
}
|
||||
@@ -72,13 +72,13 @@ type DnDClassInfo struct {
|
||||
}
|
||||
|
||||
var dndRaces = []DnDRaceInfo{
|
||||
{RaceHuman, "Human", [6]int{0, 0, 0, 0, 0, 0}, "Versatile (floating +1 bonus not yet implemented)"},
|
||||
{RaceElf, "Elf", [6]int{0, 2, -1, 1, 1, 0}, "Darkvision; immune to sleep effects"},
|
||||
{RaceDwarf, "Dwarf", [6]int{1, -1, 2, 0, 1, -1}, "Poison resistance; bonus vs. underground enemies"},
|
||||
{RaceHalfling, "Halfling", [6]int{0, 2, 0, 0, 1, 0}, "Lucky: once per combat, reroll a natural 1"},
|
||||
{RaceOrc, "Orc", [6]int{3, -1, 2, -1, -1, -1}, "Rage: once per combat, +50% damage for one turn"},
|
||||
{RaceTiefling, "Tiefling", [6]int{0, 1, 0, 1, 0, 2}, "Fire resistance; bonus on CHA checks"},
|
||||
{RaceHalfElf, "Half-Elf", [6]int{0, 1, 0, 1, 0, 2}, "Two bonus skill proficiencies"},
|
||||
{RaceHuman, "Human", [6]int{1, 1, 1, 1, 1, 1}, "Versatile: +1 to every ability score"},
|
||||
{RaceElf, "Elf", [6]int{0, 3, -1, 2, 2, 0}, "Darkvision; immune to sleep effects"},
|
||||
{RaceDwarf, "Dwarf", [6]int{2, -1, 3, 1, 2, -1}, "Poison resistance; bonus vs. underground enemies"},
|
||||
{RaceHalfling, "Halfling", [6]int{0, 3, 1, 0, 2, 0}, "Lucky: once per combat, reroll a natural 1"},
|
||||
{RaceOrc, "Orc", [6]int{5, -1, 4, -1, -1, 0}, "Rage: once per combat, +50% damage for one turn"},
|
||||
{RaceTiefling, "Tiefling", [6]int{0, 2, 0, 2, 0, 2}, "Fire resistance; bonus on CHA checks"},
|
||||
{RaceHalfElf, "Half-Elf", [6]int{0, 2, 0, 1, 1, 2}, "Two bonus skill proficiencies"},
|
||||
}
|
||||
|
||||
var dndClasses = []DnDClassInfo{
|
||||
|
||||
@@ -106,16 +106,16 @@ func TestComputeAC(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestApplyRaceMods(t *testing.T) {
|
||||
// Elf: STR +0, DEX +2, CON -1, INT +1, WIS +1, CHA +0
|
||||
// Elf: STR +0, DEX +3, CON -1, INT +2, WIS +2, CHA +0
|
||||
base := [6]int{10, 10, 10, 10, 10, 10}
|
||||
got := applyRaceMods(RaceElf, base)
|
||||
want := [6]int{10, 12, 9, 11, 11, 10}
|
||||
want := [6]int{10, 13, 9, 12, 12, 10}
|
||||
if got != want {
|
||||
t.Errorf("applyRaceMods(Elf) = %v, want %v", got, want)
|
||||
}
|
||||
// Orc: STR +3, DEX -1, CON +2, INT -1, WIS -1, CHA -1
|
||||
// Orc: STR +5, DEX -1, CON +4, INT -1, WIS -1, CHA +0
|
||||
got = applyRaceMods(RaceOrc, base)
|
||||
want = [6]int{13, 9, 12, 9, 9, 9}
|
||||
want = [6]int{15, 9, 14, 9, 9, 10}
|
||||
if got != want {
|
||||
t.Errorf("applyRaceMods(Orc) = %v, want %v", got, want)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user