summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-03-12 03:08:43 +0100
committerDimitri Sokolyuk <demon@dim13.org>2018-03-12 03:08:43 +0100
commite532c47753c112f8168de7354d255efb95f1f0b8 (patch)
tree5adc7b837d9bb06bafaaf5cfef27ae5bfede802c
parent3f3bc476993e9ca4e64404cef1fdc4bd1aed4d97 (diff)
split
-rw-r--r--attr_string.go16
-rw-r--r--config.go727
-rw-r--r--internal/character/character.go101
-rw-r--r--internal/equipment/equipment.go318
-rw-r--r--internal/inventory/inventory.go31
-rw-r--r--internal/monster/monster.go260
-rw-r--r--internal/spells/spells.go77
-rw-r--r--main.go10
-rw-r--r--newguy.go12
9 files changed, 801 insertions, 751 deletions
diff --git a/attr_string.go b/attr_string.go
deleted file mode 100644
index ceb150b..0000000
--- a/attr_string.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// generated by stringer -type=Attr; DO NOT EDIT
-
-package main
-
-import "fmt"
-
-const _Attr_name = "CHACONDEXHPMaxINTMPMaxSTRWISNattr"
-
-var _Attr_index = [...]uint8{0, 3, 6, 9, 14, 17, 22, 25, 28, 33}
-
-func (i Attr) String() string {
- if i < 0 || i >= Attr(len(_Attr_index)-1) {
- return fmt.Sprintf("Attr(%d)", i)
- }
- return _Attr_name[_Attr_index[i]:_Attr_index[i+1]]
-}
diff --git a/config.go b/config.go
deleted file mode 100644
index 9c9a811..0000000
--- a/config.go
+++ /dev/null
@@ -1,727 +0,0 @@
-package main
-
-import "math/rand"
-
-//go:generate stringer -type=Attr
-
-var Spells = []string{
- `Slime Finger`,
- `Rabbit Punch`,
- `Hastiness`,
- `Good Move`,
- `Sadness`,
- `Seasick`,
- `Gyp`,
- `Shoelaces`,
- `Innoculate`,
- `Cone of Annoyance`,
- `Magnetic Orb`,
- `Invisible Hands`,
- `Revolting Cloud`,
- `Aqueous Humor`,
- `Spectral Miasma`,
- `Clever Fellow`,
- `Lockjaw`,
- `History Lesson`,
- `Hydrophobia`,
- `Big Sister`,
- `Cone of Paste`,
- `Mulligan`,
- `Nestor's Bright Idea`,
- `Holy Batpole`,
- `Tumor (Benign)`,
- `Braingate`,
- `Nonplus`,
- `Animate Nightstand`,
- `Eye of the Troglodyte`,
- `Curse Name`,
- `Dropsy`,
- `Vitreous Humor`,
- `Roger's Grand Illusion`,
- `Covet`,
- `Astral Miasma`,
- `Spectral Oyster`,
- `Acrid Hands`,
- `Angioplasty`,
- `Grognor's Big Day Off`,
- `Tumor (Malignant)`,
- `Animate Tunic`,
- `Ursine Armor`,
- `Holy Roller`,
- `Tonsilectomy`,
- `Curse Family`,
- `Infinite Confusion`,
-}
-
-type Attrib struct {
- Name string
- Level int
-}
-
-var OffenseAttrib = []Attrib{
- {`Polished`, 1},
- {`Serrated`, 1},
- {`Heavy`, 1},
- {`Pronged`, 2},
- {`Steely`, 2},
- {`Vicious`, 3},
- {`Venomed`, 4},
- {`Stabbity`, 4},
- {`Dancing`, 5},
- {`Invisible`, 6},
- {`Vorpal`, 7},
-}
-
-var DefenseAttrib = []Attrib{
- {`Studded`, 1},
- {`Banded`, 2},
- {`Gilded`, 2},
- {`Festooned`, 3},
- {`Holy`, 4},
- {`Cambric`, 1},
- {`Fine`, 4},
- {`Impressive`, 5},
- {`Custom`, 3},
-}
-
-var Shields = []Attrib{
- {`Parasol`, 0},
- {`Pie Plate`, 1},
- {`Garbage Can Lid`, 2},
- {`Buckler`, 3},
- {`Plexiglass`, 4},
- {`Fender`, 4},
- {`Round Shield`, 5},
- {`Carapace`, 5},
- {`Scutum`, 6},
- {`Propugner`, 6},
- {`Kite Shield`, 7},
- {`Pavise`, 8},
- {`Tower Shield`, 9},
- {`Baroque Shield`, 11},
- {`Aegis`, 12},
- {`Magnetic Field`, 18},
-}
-
-var Armors = []Attrib{
- {`Lace`, 1},
- {`Macrame`, 2},
- {`Burlap`, 3},
- {`Canvas`, 4},
- {`Flannel`, 5},
- {`Chamois`, 6},
- {`Pleathers`, 7},
- {`Leathers`, 8},
- {`Bearskin`, 9},
- {`Ringmail`, 10},
- {`Scale Mail`, 12},
- {`Chainmail`, 14},
- {`Splint Mail`, 15},
- {`Platemail`, 16},
- {`ABS`, 17},
- {`Kevlar`, 18},
- {`Titanium`, 19},
- {`Mithril Mail`, 20},
- {`Diamond Mail`, 25},
- {`Plasma`, 30},
-}
-
-var Weapons = []Attrib{
- {`Stick`, 0},
- {`Broken Bottle`, 1},
- {`Shiv`, 1},
- {`Sprig`, 1},
- {`Oxgoad`, 1},
- {`Eelspear`, 2},
- {`Bowie Knife`, 2},
- {`Claw Hammer`, 2},
- {`Handpeen`, 2},
- {`Andiron`, 3},
- {`Hatchet`, 3},
- {`Tomahawk`, 3},
- {`Hackbarm`, 3},
- {`Crowbar`, 4},
- {`Mace`, 4},
- {`Battleadze`, 4},
- {`Leafmace`, 5},
- {`Shortsword`, 5},
- {`Longiron`, 5},
- {`Poachard`, 5},
- {`Baselard`, 5},
- {`Whinyard`, 6},
- {`Blunderbuss`, 6},
- {`Longsword`, 6},
- {`Crankbow`, 6},
- {`Blibo`, 7},
- {`Broadsword`, 7},
- {`Kreen`, 7},
- {`Morning Star`, 8},
- {`Pole-adze`, 8},
- {`Spontoon`, 8},
- {`Bastard Sword`, 9},
- {`Peen-arm`, 9},
- {`Culverin`, 10},
- {`Lance`, 10},
- {`Halberd`, 11},
- {`Poleax`, 12},
- {`Bandyclef`, 15},
-}
-
-var Specials = []string{
- `Diadem`,
- `Festoon`,
- `Gemstone`,
- `Phial`,
- `Tiara`,
- `Scabbard`,
- `Arrow`,
- `Lens`,
- `Lamp`,
- `Hymnal`,
- `Fleece`,
- `Laurel`,
- `Brooch`,
- `Gimlet`,
- `Cobble`,
- `Albatross`,
- `Brazier`,
- `Bandolier`,
- `Tome`,
- `Garnet`,
- `Amethyst`,
- `Candelabra`,
- `Corset`,
- `Sphere`,
- `Sceptre`,
- `Ankh`,
- `Talisman`,
- `Orb`,
- `Gammel`,
- `Ornament`,
- `Brocade`,
- `Galoon`,
- `Bijou`,
- `Spangle`,
- `Gimcrack`,
- `Hood`,
- `Vulpeculum`,
-}
-
-var ItemAttrib = []string{
- `Golden`,
- `Gilded`,
- `Spectral`,
- `Astral`,
- `Garlanded`,
- `Precious`,
- `Crafted`,
- `Dual`,
- `Filigreed`,
- `Cruciate`,
- `Arcane`,
- `Blessed`,
- `Reverential`,
- `Lucky`,
- `Enchanted`,
- `Gleaming`,
- `Grandiose`,
- `Sacred`,
- `Legendary`,
- `Mythic`,
- `Crystalline`,
- `Austere`,
- `Ostentatious`,
- `One True`,
- `Proverbial`,
- `Fearsome`,
- `Deadly`,
- `Benevolent`,
- `Unearthly`,
- `Magnificent`,
- `Iron`,
- `Ormolu`,
- `Puissant`,
-}
-
-var ItemOfs = []string{
- `Foreboding`,
- `Foreshadowing`,
- `Nervousness`,
- `Happiness`,
- `Torpor`,
- `Danger`,
- `Craft`,
- `Silence`,
- `Invisibility`,
- `Rapidity`,
- `Pleasure`,
- `Practicality`,
- `Hurting`,
- `Joy`,
- `Petulance`,
- `Intrusion`,
- `Chaos`,
- `Suffering`,
- `Extroversion`,
- `Frenzy`,
- `Solitude`,
- `Punctuality`,
- `Efficiency`,
- `Comfort`,
- `Patience`,
- `Internment`,
- `Incarceration`,
- `Misapprehension`,
- `Loyalty`,
- `Envy`,
- `Acrimony`,
- `Worry`,
- `Fear`,
- `Awe`,
- `Guile`,
- `Prurience`,
- `Fortune`,
- `Perspicacity`,
- `Domination`,
- `Submission`,
- `Fealty`,
- `Hunger`,
- `Despair`,
- `Cruelty`,
- `Grob`,
- `Dignard`,
- `Ra`,
- `the Bone`,
- `Diamonique`,
- `Electrum`,
- `Hydragyrum`,
-}
-
-var BoringItems = []string{
- `nail`,
- `lunchpail`,
- `sock`,
- `I.O.U.`,
- `cookie`,
- `pint`,
- `toothpick`,
- `writ`,
- `newspaper`,
- `letter`,
- `plank`,
- `hat`,
- `egg`,
- `coin`,
- `needle`,
- `bucket`,
- `ladder`,
- `chicken`,
- `twig`,
- `dirtclod`,
- `counterpane`,
- `vest`,
- `teratoma`,
- `bunny`,
- `rock`,
- `pole`,
- `carrot`,
- `canoe`,
- `inkwell`,
- `hoe`,
- `bandage`,
- `trowel`,
- `towel`,
- `planter box`,
- `anvil`,
- `axle`,
- `tuppence`,
- `casket`,
- `nosegay`,
- `trinket`,
- `credenza`,
- `writ`,
-}
-
-type Monster struct {
- Name string
- Level int
- Swag string
-}
-
-var Monsters = []Monster{
- {`Anhkheg`, 6, `chitin`},
- {`Ant`, 0, `antenna`},
- {`Ape`, 4, `ass`},
- {`Baluchitherium`, 14, `ear`},
- {`Beholder`, 10, `eyestalk`},
- {`Black Pudding`, 10, `saliva`},
- {`Blink Dog`, 4, `eyelid`},
- {`Cub Scout`, 1, `neckercheif`},
- {`Girl Scout`, 2, `cookie`},
- {`Boy Scout`, 3, `merit badge`},
- {`Eagle Scout`, 4, `merit badge`},
- {`Bugbear`, 3, `skin`},
- {`Bugboar`, 3, `tusk`},
- {`Boogie`, 3, `slime`},
- {`Camel`, 2, `hump`},
- {`Carrion Crawler`, 3, `egg`},
- {`Catoblepas`, 6, `neck`},
- {`Centaur`, 4, `rib`},
- {`Centipede`, 0, `leg`},
- {`Cockatrice`, 5, `wattle`},
- {`Couatl`, 9, `wing`},
- {`Crayfish`, 0, `antenna`},
- {`Demogorgon`, 53, `tentacle`},
- {`Jubilex`, 17, `gel`},
- {`Manes`, 1, `tooth`},
- {`Orcus`, 27, `wand`},
- {`Succubus`, 6, `bra`},
- {`Vrock`, 8, `neck`},
- {`Hezrou`, 9, `leg`},
- {`Glabrezu`, 10, `collar`},
- {`Nalfeshnee`, 11, `tusk`},
- {`Marilith`, 7, `arm`},
- {`Balor`, 8, `whip`},
- {`Yeenoghu`, 25, `flail`},
- {`Asmodeus`, 52, `leathers`},
- {`Baalzebul`, 43, `pants`},
- {`Barbed Devil`, 8, `flame`},
- {`Bone Devil`, 9, `hook`},
- {`Dispater`, 30, `matches`},
- {`Erinyes`, 6, `thong`},
- {`Geryon`, 30, `cornucopia`},
- {`Malebranche`, 5, `fork`},
- {`Ice Devil`, 11, `snow`},
- {`Lemure`, 3, `blob`},
- {`Pit Fiend`, 13, `seed`},
- {`Anklyosaurus`, 9, `tail`},
- {`Brontosaurus`, 30, `brain`},
- {`Diplodocus`, 24, `fin`},
- {`Elasmosaurus`, 15, `neck`},
- {`Gorgosaurus`, 13, `arm`},
- {`Iguanadon`, 6, `thumb`},
- {`Megalosaurus`, 12, `jaw`},
- {`Monoclonius`, 8, `horn`},
- {`Pentasaurus`, 12, `head`},
- {`Stegosaurus`, 18, `plate`},
- {`Triceratops`, 16, `horn`},
- {`Tyranosauraus Rex`, 18, `forearm`},
- {`Djinn`, 7, `lamp`},
- {`Doppleganger`, 4, `face`},
- {`Black Dragon`, 7, `*`},
- {`Plaid Dragon`, 7, `sporrin`},
- {`Blue Dragon`, 9, `*`},
- {`Beige Dragon`, 9, `*`},
- {`Brass Dragon`, 7, `pole`},
- {`Tin Dragon`, 8, `*`},
- {`Bronze Dragon`, 9, `medal`},
- {`Chromatic Dragon`, 16, `scale`},
- {`Copper Dragon`, 8, `loafer`},
- {`Gold Dragon`, 8, `filling`},
- {`Green Dragon`, 8, `*`},
- {`Platinum Dragon`, 21, `*`},
- {`Red Dragon`, 10, `cocktail`},
- {`Silver Dragon`, 10, `*`},
- {`White Dragon`, 6, `tooth`},
- {`Dragon Turtle`, 13, `shell`},
- {`Dryad`, 2, `acorn`},
- {`Dwarf`, 1, `drawers`},
- {`Eel`, 2, `sashimi`},
- {`Efreet`, 10, `cinder`},
- {`Sand Elemental`, 8, `glass`},
- {`Bacon Elemental`, 10, `bit`},
- {`Porn Elemental`, 12, `lube`},
- {`Cheese Elemental`, 14, `curd`},
- {`Hair Elemental`, 16, `follicle`},
- {`Swamp Elf`, 1, `lilypad`},
- {`Brown Elf`, 1, `tusk`},
- {`Sea Elf`, 1, `jerkin`},
- {`Ettin`, 10, `fur`},
- {`Frog`, 0, `leg`},
- {`Violet Fungi`, 3, `spore`},
- {`Gargoyle`, 4, `gravel`},
- {`Gelatinous Cube`, 4, `jam`},
- {`Ghast`, 4, `vomit`},
- {`Ghost`, 10, `*`},
- {`Ghoul`, 2, `muscle`},
- {`Humidity Giant`, 12, `drops`},
- {`Beef Giant`, 11, `steak`},
- {`Quartz Giant`, 10, `crystal`},
- {`Porcelain Giant`, 9, `fixture`},
- {`Rice Giant`, 8, `grain`},
- {`Cloud Giant`, 12, `condensation`},
- {`Fire Giant`, 11, `cigarettes`},
- {`Frost Giant`, 10, `snowman`},
- {`Hill Giant`, 8, `corpse`},
- {`Stone Giant`, 9, `hatchling`},
- {`Storm Giant`, 15, `barometer`},
- {`Mini Giant`, 4, `pompadour`},
- {`Gnoll`, 2, `collar`},
- {`Gnome`, 1, `hat`},
- {`Goblin`, 1, `ear`},
- {`Grid Bug`, 1, `carapace`},
- {`Jellyrock`, 9, `seedling`},
- {`Beer Golem`, 15, `foam`},
- {`Oxygen Golem`, 17, `platelet`},
- {`Cardboard Golem`, 14, `recycling`},
- {`Rubber Golem`, 16, `ball`},
- {`Leather Golem`, 15, `fob`},
- {`Gorgon`, 8, `testicle`},
- {`Gray Ooze`, 3, `gravy`},
- {`Green Slime`, 2, `sample`},
- {`Griffon`, 7, `nest`},
- {`Banshee`, 7, `larynx`},
- {`Harpy`, 3, `mascara`},
- {`Hell Hound`, 5, `tongue`},
- {`Hippocampus`, 4, `mane`},
- {`Hippogriff`, 3, `egg`},
- {`Hobgoblin`, 1, `patella`},
- {`Homonculus`, 2, `fluid`},
- {`Hydra`, 8, `gyrum`},
- {`Imp`, 2, `tail`},
- {`Invisible Stalker`, 8, `*`},
- {`Iron Peasant`, 3, `chaff`},
- {`Jumpskin`, 3, `shin`},
- {`Kobold`, 1, `penis`},
- {`Leprechaun`, 1, `wallet`},
- {`Leucrotta`, 6, `hoof`},
- {`Lich`, 11, `crown`},
- {`Lizard Man`, 2, `tail`},
- {`Lurker`, 10, `sac`},
- {`Manticore`, 6, `spike`},
- {`Mastodon`, 12, `tusk`},
- {`Medusa`, 6, `eye`},
- {`Multicell`, 2, `dendrite`},
- {`Pirate`, 1, `booty`},
- {`Berserker`, 1, `shirt`},
- {`Caveman`, 2, `club`},
- {`Dervish`, 1, `robe`},
- {`Merman`, 1, `trident`},
- {`Mermaid`, 1, `gills`},
- {`Mimic`, 9, `hinge`},
- {`Mind Flayer`, 8, `tentacle`},
- {`Minotaur`, 6, `map`},
- {`Yellow Mold`, 1, `spore`},
- {`Morkoth`, 7, `teeth`},
- {`Mummy`, 6, `gauze`},
- {`Naga`, 9, `rattle`},
- {`Nebbish`, 1, `belly`},
- {`Neo-Otyugh`, 11, `organ `},
- {`Nixie`, 1, `webbing`},
- {`Nymph`, 3, `hanky`},
- {`Ochre Jelly`, 6, `nucleus`},
- {`Octopus`, 2, `beak`},
- {`Ogre`, 4, `talon`},
- {`Ogre Mage`, 5, `apparel`},
- {`Orc`, 1, `snout`},
- {`Otyugh`, 7, `organ`},
- {`Owlbear`, 5, `feather`},
- {`Pegasus`, 4, `aileron`},
- {`Peryton`, 4, `antler`},
- {`Piercer`, 3, `tip`},
- {`Pixie`, 1, `dust`},
- {`Man-o-war`, 3, `tentacle`},
- {`Purple Worm`, 15, `dung`},
- {`Quasit`, 3, `tail`},
- {`Rakshasa`, 7, `pajamas`},
- {`Rat`, 0, `tail`},
- {`Remorhaz`, 11, `protrusion`},
- {`Roc`, 18, `wing`},
- {`Roper`, 11, `twine`},
- {`Rot Grub`, 1, `eggsac`},
- {`Rust Monster`, 5, `shavings`},
- {`Satyr`, 5, `hoof`},
- {`Sea Hag`, 3, `wart`},
- {`Silkie`, 3, `fur`},
- {`Shadow`, 3, `silhouette`},
- {`Shambling Mound`, 10, `mulch`},
- {`Shedu`, 9, `hoof`},
- {`Shrieker`, 3, `stalk`},
- {`Skeleton`, 1, `clavicle`},
- {`Spectre`, 7, `vestige`},
- {`Sphinx`, 10, `paw`},
- {`Spider`, 0, `web`},
- {`Sprite`, 1, `can`},
- {`Stirge`, 1, `proboscis`},
- {`Stun Bear`, 5, `tooth`},
- {`Stun Worm`, 2, `trode`},
- {`Su-monster`, 5, `tail`},
- {`Sylph`, 3, `thigh`},
- {`Titan`, 20, `sandal`},
- {`Trapper`, 12, `shag`},
- {`Treant`, 10, `acorn`},
- {`Triton`, 3, `scale`},
- {`Troglodyte`, 2, `tail`},
- {`Troll`, 6, `hide`},
- {`Umber Hulk`, 8, `claw`},
- {`Unicorn`, 4, `blood`},
- {`Vampire`, 8, `pancreas`},
- {`Wight`, 4, `lung`},
- {`Will-o-the-Wisp`, 9, `wisp`},
- {`Wraith`, 5, `finger`},
- {`Wyvern`, 7, `wing`},
- {`Xorn`, 7, `jaw`},
- {`Yeti`, 4, `fur`},
- {`Zombie`, 2, `forehead`},
- {`Wasp`, 0, `stinger`},
- {`Rat`, 1, `tail`},
- {`Bunny`, 0, `ear`},
- {`Moth`, 0, `dust`},
- {`Beagle`, 0, `collar`},
- {`Midge`, 0, `corpse`},
- {`Ostrich`, 1, `beak`},
- {`Billy Goat`, 1, `beard`},
- {`Bat`, 1, `wing`},
- {`Koala`, 2, `heart`},
- {`Wolf`, 2, `paw`},
- {`Whippet`, 2, `collar`},
- {`Uruk`, 2, `boot`},
- {`Poroid`, 4, `node`},
- {`Moakum`, 8, `frenum`},
- {`Fly`, 0, `*`},
- {`Hogbird`, 3, `curl`},
-}
-
-var MonMods = []string{
- `-4 fœtal %v`,
- `-4 dying %v`,
- `-3 crippled %v`,
- `-3 baby %v`,
- `-2 adolescent`,
- `-2 very sick %v`,
- `-1 lesser %v`,
- `-1 undernourished %v`,
- `+1 greater %v`,
- `+1 %v Elder`,
- `+2 war %v`,
- `+2 Battle-%v`,
- `+3 Were-%v`,
- `+3 undead %v`,
- `+4 giant %v`,
- `+4 %v Rex`,
-}
-
-var OffenseBad = []Attrib{
- {`Dull`, -2},
- {`Tarnished`, -1},
- {`Rusty`, -3},
- {`Padded`, -5},
- {`Bent`, -4},
- {`Mini`, -4},
- {`Rubber`, -6},
- {`Nerf`, -7},
- {`Unbalanced`, -2},
-}
-
-var DefenseBad = []Attrib{
- {`Holey`, -1},
- {`Patched`, -1},
- {`Threadbare`, -2},
- {`Faded`, -1},
- {`Rusty`, -3},
- {`Motheaten`, -3},
- {`Mildewed`, -2},
- {`Torn`, -3},
- {`Dented`, -3},
- {`Cursed`, -5},
- {`Plastic`, -4},
- {`Cracked`, -4},
- {`Warped`, -3},
- {`Corroded`, -3},
-}
-
-type Attr int
-
-const (
- CHA Attr = iota
- CON
- DEX
- HPMax
- INT
- MPMax
- STR
- WIS
- Nattr
-)
-
-type Character struct {
- Name string
- Attr []Attr
-}
-
-type Characters []Character
-
-func (c Characters) Pick() Character {
- return c[rand.Intn(len(c))]
-}
-
-var Races = Characters{
- {`Half Orc`, []Attr{HPMax}},
- {`Half Man`, []Attr{CHA}},
- {`Half Halfling`, []Attr{DEX}},
- {`Double Hobbit`, []Attr{STR}},
- {`Hob-Hobbit`, []Attr{DEX, CON}},
- {`Low Elf`, []Attr{CON}},
- {`Dung Elf`, []Attr{WIS}},
- {`Talking Pony`, []Attr{MPMax, INT}},
- {`Gyrognome`, []Attr{DEX}},
- {`Lesser Dwarf`, []Attr{CON}},
- {`Crested Dwarf`, []Attr{CHA}},
- {`Eel Man`, []Attr{DEX}},
- {`Panda Man`, []Attr{CON, STR}},
- {`Trans-Kobold`, []Attr{WIS}},
- {`Enchanted Motorcycle`, []Attr{MPMax}},
- {`Will o' the Wisp`, []Attr{WIS}},
- {`Battle-Finch`, []Attr{DEX, INT}},
- {`Double Wookiee`, []Attr{STR}},
- {`Skraeling`, []Attr{WIS}},
- {`Demicanadian`, []Attr{CON}},
- {`Land Squid`, []Attr{STR, HPMax}},
-}
-
-var Klasses = Characters{
- {`Ur-Paladin`, []Attr{WIS, CON}},
- {`Voodoo Princess`, []Attr{INT, CHA}},
- {`Robot Monk`, []Attr{STR}},
- {`Mu-Fu Monk`, []Attr{DEX}},
- {`Mage Illusioner`, []Attr{INT, MPMax}},
- {`Shiv-Knight`, []Attr{DEX}},
- {`Inner Mason`, []Attr{CON}},
- {`Fighter/Organist`, []Attr{CHA, STR}},
- {`Puma Burgular`, []Attr{DEX}},
- {`Runeloremaster`, []Attr{WIS}},
- {`Hunter Strangler`, []Attr{DEX, INT}},
- {`Battle-Felon`, []Attr{STR}},
- {`Tickle-Mimic`, []Attr{WIS, INT}},
- {`Slow Poisoner`, []Attr{CON}},
- {`Bastard Lunatic`, []Attr{CON}},
- {`Jungle Clown`, []Attr{DEX, CHA}},
- {`Birdrider`, []Attr{WIS}},
- {`Vermineer`, []Attr{INT}},
-}
-
-var Titles = []string{
- `Mr.`,
- `Mrs.`,
- `Sir`,
- `Sgt.`,
- `Ms.`,
- `Captain`,
- `Chief`,
- `Admiral`,
- `Saint`,
-}
-
-var ImpressiveTitles = []string{
- `King`,
- `Queen`,
- `Lord`,
- `Lady`,
- `Viceroy`,
- `Mayor`,
- `Prince`,
- `Princess`,
- `Chief`,
- `Boss`,
- `Archbishop`,
-}
diff --git a/internal/character/character.go b/internal/character/character.go
new file mode 100644
index 0000000..5be6d68
--- /dev/null
+++ b/internal/character/character.go
@@ -0,0 +1,101 @@
+package character
+
+import "math/rand"
+
+//go:generate stringer -type=Attr
+
+type Attr int
+
+const (
+ CHA Attr = iota
+ CON
+ DEX
+ HPMax
+ INT
+ MPMax
+ STR
+ WIS
+ Nattr
+)
+
+type Character struct {
+ Name string
+ Attr []Attr
+}
+
+type Characters []Character
+
+func (c Characters) Pick() Character {
+ return c[rand.Intn(len(c))]
+}
+
+var Races = Characters{
+ {`Half Orc`, []Attr{HPMax}},
+ {`Half Man`, []Attr{CHA}},
+ {`Half Halfling`, []Attr{DEX}},
+ {`Double Hobbit`, []Attr{STR}},
+ {`Hob-Hobbit`, []Attr{DEX, CON}},
+ {`Low Elf`, []Attr{CON}},
+ {`Dung Elf`, []Attr{WIS}},
+ {`Talking Pony`, []Attr{MPMax, INT}},
+ {`Gyrognome`, []Attr{DEX}},
+ {`Lesser Dwarf`, []Attr{CON}},
+ {`Crested Dwarf`, []Attr{CHA}},
+ {`Eel Man`, []Attr{DEX}},
+ {`Panda Man`, []Attr{CON, STR}},
+ {`Trans-Kobold`, []Attr{WIS}},
+ {`Enchanted Motorcycle`, []Attr{MPMax}},
+ {`Will o' the Wisp`, []Attr{WIS}},
+ {`Battle-Finch`, []Attr{DEX, INT}},
+ {`Double Wookiee`, []Attr{STR}},
+ {`Skraeling`, []Attr{WIS}},
+ {`Demicanadian`, []Attr{CON}},
+ {`Land Squid`, []Attr{STR, HPMax}},
+}
+
+var Klasses = Characters{
+ {`Ur-Paladin`, []Attr{WIS, CON}},
+ {`Voodoo Princess`, []Attr{INT, CHA}},
+ {`Robot Monk`, []Attr{STR}},
+ {`Mu-Fu Monk`, []Attr{DEX}},
+ {`Mage Illusioner`, []Attr{INT, MPMax}},
+ {`Shiv-Knight`, []Attr{DEX}},
+ {`Inner Mason`, []Attr{CON}},
+ {`Fighter/Organist`, []Attr{CHA, STR}},
+ {`Puma Burgular`, []Attr{DEX}},
+ {`Runeloremaster`, []Attr{WIS}},
+ {`Hunter Strangler`, []Attr{DEX, INT}},
+ {`Battle-Felon`, []Attr{STR}},
+ {`Tickle-Mimic`, []Attr{WIS, INT}},
+ {`Slow Poisoner`, []Attr{CON}},
+ {`Bastard Lunatic`, []Attr{CON}},
+ {`Jungle Clown`, []Attr{DEX, CHA}},
+ {`Birdrider`, []Attr{WIS}},
+ {`Vermineer`, []Attr{INT}},
+}
+
+var Titles = []string{
+ `Mr.`,
+ `Mrs.`,
+ `Sir`,
+ `Sgt.`,
+ `Ms.`,
+ `Captain`,
+ `Chief`,
+ `Admiral`,
+ `Saint`,
+}
+
+var ImpressiveTitles = []string{
+ `King`,
+ `Queen`,
+ `Lord`,
+ `Lady`,
+ `Viceroy`,
+ `Mayor`,
+ `Prince`,
+ `Princess`,
+ `Chief`,
+ `Boss`,
+ `Archbishop`,
+}
diff --git a/internal/equipment/equipment.go b/internal/equipment/equipment.go
new file mode 100644
index 0000000..4a15877
--- /dev/null
+++ b/internal/equipment/equipment.go
@@ -0,0 +1,318 @@
+package equipment
+
+type Attrib struct {
+ Name string
+ Level int
+}
+
+var OffenseAttrib = []Attrib{
+ {`Polished`, 1},
+ {`Serrated`, 1},
+ {`Heavy`, 1},
+ {`Pronged`, 2},
+ {`Steely`, 2},
+ {`Vicious`, 3},
+ {`Venomed`, 4},
+ {`Stabbity`, 4},
+ {`Dancing`, 5},
+ {`Invisible`, 6},
+ {`Vorpal`, 7},
+}
+
+var DefenseAttrib = []Attrib{
+ {`Studded`, 1},
+ {`Banded`, 2},
+ {`Gilded`, 2},
+ {`Festooned`, 3},
+ {`Holy`, 4},
+ {`Cambric`, 1},
+ {`Fine`, 4},
+ {`Impressive`, 5},
+ {`Custom`, 3},
+}
+
+var Shields = []Attrib{
+ {`Parasol`, 0},
+ {`Pie Plate`, 1},
+ {`Garbage Can Lid`, 2},
+ {`Buckler`, 3},
+ {`Plexiglass`, 4},
+ {`Fender`, 4},
+ {`Round Shield`, 5},
+ {`Carapace`, 5},
+ {`Scutum`, 6},
+ {`Propugner`, 6},
+ {`Kite Shield`, 7},
+ {`Pavise`, 8},
+ {`Tower Shield`, 9},
+ {`Baroque Shield`, 11},
+ {`Aegis`, 12},
+ {`Magnetic Field`, 18},
+}
+
+var Armors = []Attrib{
+ {`Lace`, 1},
+ {`Macrame`, 2},
+ {`Burlap`, 3},
+ {`Canvas`, 4},
+ {`Flannel`, 5},
+ {`Chamois`, 6},
+ {`Pleathers`, 7},
+ {`Leathers`, 8},
+ {`Bearskin`, 9},
+ {`Ringmail`, 10},
+ {`Scale Mail`, 12},
+ {`Chainmail`, 14},
+ {`Splint Mail`, 15},
+ {`Platemail`, 16},
+ {`ABS`, 17},
+ {`Kevlar`, 18},
+ {`Titanium`, 19},
+ {`Mithril Mail`, 20},
+ {`Diamond Mail`, 25},
+ {`Plasma`, 30},
+}
+
+var Weapons = []Attrib{
+ {`Stick`, 0},
+ {`Broken Bottle`, 1},
+ {`Shiv`, 1},
+ {`Sprig`, 1},
+ {`Oxgoad`, 1},
+ {`Eelspear`, 2},
+ {`Bowie Knife`, 2},
+ {`Claw Hammer`, 2},
+ {`Handpeen`, 2},
+ {`Andiron`, 3},
+ {`Hatchet`, 3},
+ {`Tomahawk`, 3},
+ {`Hackbarm`, 3},
+ {`Crowbar`, 4},
+ {`Mace`, 4},
+ {`Battleadze`, 4},
+ {`Leafmace`, 5},
+ {`Shortsword`, 5},
+ {`Longiron`, 5},
+ {`Poachard`, 5},
+ {`Baselard`, 5},
+ {`Whinyard`, 6},
+ {`Blunderbuss`, 6},
+ {`Longsword`, 6},
+ {`Crankbow`, 6},
+ {`Blibo`, 7},
+ {`Broadsword`, 7},
+ {`Kreen`, 7},
+ {`Morning Star`, 8},
+ {`Pole-adze`, 8},
+ {`Spontoon`, 8},
+ {`Bastard Sword`, 9},
+ {`Peen-arm`, 9},
+ {`Culverin`, 10},
+ {`Lance`, 10},
+ {`Halberd`, 11},
+ {`Poleax`, 12},
+ {`Bandyclef`, 15},
+}
+
+var ItemAttrib = []string{
+ `Golden`,
+ `Gilded`,
+ `Spectral`,
+ `Astral`,
+ `Garlanded`,
+ `Precious`,
+ `Crafted`,
+ `Dual`,
+ `Filigreed`,
+ `Cruciate`,
+ `Arcane`,
+ `Blessed`,
+ `Reverential`,
+ `Lucky`,
+ `Enchanted`,
+ `Gleaming`,
+ `Grandiose`,
+ `Sacred`,
+ `Legendary`,
+ `Mythic`,
+ `Crystalline`,
+ `Austere`,
+ `Ostentatious`,
+ `One True`,
+ `Proverbial`,
+ `Fearsome`,
+ `Deadly`,
+ `Benevolent`,
+ `Unearthly`,
+ `Magnificent`,
+ `Iron`,
+ `Ormolu`,
+ `Puissant`,
+}
+var Specials = []string{
+ `Diadem`,
+ `Festoon`,
+ `Gemstone`,
+ `Phial`,
+ `Tiara`,
+ `Scabbard`,
+ `Arrow`,
+ `Lens`,
+ `Lamp`,
+ `Hymnal`,
+ `Fleece`,
+ `Laurel`,
+ `Brooch`,
+ `Gimlet`,
+ `Cobble`,
+ `Albatross`,
+ `Brazier`,
+ `Bandolier`,
+ `Tome`,
+ `Garnet`,
+ `Amethyst`,
+ `Candelabra`,
+ `Corset`,
+ `Sphere`,
+ `Sceptre`,
+ `Ankh`,
+ `Talisman`,
+ `Orb`,
+ `Gammel`,
+ `Ornament`,
+ `Brocade`,
+ `Galoon`,
+ `Bijou`,
+ `Spangle`,
+ `Gimcrack`,
+ `Hood`,
+ `Vulpeculum`,
+}
+
+var ItemOfs = []string{
+ `Foreboding`,
+ `Foreshadowing`,
+ `Nervousness`,
+ `Happiness`,
+ `Torpor`,
+ `Danger`,
+ `Craft`,
+ `Silence`,
+ `Invisibility`,
+ `Rapidity`,
+ `Pleasure`,
+ `Practicality`,
+ `Hurting`,
+ `Joy`,
+ `Petulance`,
+ `Intrusion`,
+ `Chaos`,
+ `Suffering`,
+ `Extroversion`,
+ `Frenzy`,
+ `Solitude`,
+ `Punctuality`,
+ `Efficiency`,
+ `Comfort`,
+ `Patience`,
+ `Internment`,
+ `Incarceration`,
+ `Misapprehension`,
+ `Loyalty`,
+ `Envy`,
+ `Acrimony`,
+ `Worry`,
+ `Fear`,
+ `Awe`,
+ `Guile`,
+ `Prurience`,
+ `Fortune`,
+ `Perspicacity`,
+ `Domination`,
+ `Submission`,
+ `Fealty`,
+ `Hunger`,
+ `Despair`,
+ `Cruelty`,
+ `Grob`,
+ `Dignard`,
+ `Ra`,
+ `the Bone`,
+ `Diamonique`,
+ `Electrum`,
+ `Hydragyrum`,
+}
+
+var BoringItems = []string{
+ `nail`,
+ `lunchpail`,
+ `sock`,
+ `I.O.U.`,
+ `cookie`,
+ `pint`,
+ `toothpick`,
+ `writ`,
+ `newspaper`,
+ `letter`,
+ `plank`,
+ `hat`,
+ `egg`,
+ `coin`,
+ `needle`,
+ `bucket`,
+ `ladder`,
+ `chicken`,
+ `twig`,
+ `dirtclod`,
+ `counterpane`,
+ `vest`,
+ `teratoma`,
+ `bunny`,
+ `rock`,
+ `pole`,
+ `carrot`,
+ `canoe`,
+ `inkwell`,
+ `hoe`,
+ `bandage`,
+ `trowel`,
+ `towel`,
+ `planter box`,
+ `anvil`,
+ `axle`,
+ `tuppence`,
+ `casket`,
+ `nosegay`,
+ `trinket`,
+ `credenza`,
+ `writ`,
+}
+
+var OffenseBad = []Attrib{
+ {`Dull`, -2},
+ {`Tarnished`, -1},
+ {`Rusty`, -3},
+ {`Padded`, -5},
+ {`Bent`, -4},
+ {`Mini`, -4},
+ {`Rubber`, -6},
+ {`Nerf`, -7},
+ {`Unbalanced`, -2},
+}
+
+var DefenseBad = []Attrib{
+ {`Holey`, -1},
+ {`Patched`, -1},
+ {`Threadbare`, -2},
+ {`Faded`, -1},
+ {`Rusty`, -3},
+ {`Motheaten`, -3},
+ {`Mildewed`, -2},
+ {`Torn`, -3},
+ {`Dented`, -3},
+ {`Cursed`, -5},
+ {`Plastic`, -4},
+ {`Cracked`, -4},
+ {`Warped`, -3},
+ {`Corroded`, -3},
+}
diff --git a/internal/inventory/inventory.go b/internal/inventory/inventory.go
new file mode 100644
index 0000000..4fe3be0
--- /dev/null
+++ b/internal/inventory/inventory.go
@@ -0,0 +1,31 @@
+package inventory
+
+type Inventory struct {
+ Items []Item
+}
+
+type Item struct {
+ Title string
+ Quantity int
+}
+
+func (m *Inventory) Add(title string) {
+ for _, v := range m.Items {
+ if v.Title == title {
+ v.Quantity += 1
+ return
+ }
+ }
+ m.Items = append(m.Items, Item{Title: title, Quantity: 1})
+}
+
+func (m *Inventory) Del(title string) int {
+ for i, v := range m.Items {
+ if v.Title == title {
+ count := v.Quantity
+ m.Items = append(m.Items[:i], m.Items[i+1:]...)
+ return count
+ }
+ }
+ return 0
+}
diff --git a/internal/monster/monster.go b/internal/monster/monster.go
new file mode 100644
index 0000000..835b1a7
--- /dev/null
+++ b/internal/monster/monster.go
@@ -0,0 +1,260 @@
+package monster
+
+type Monster struct {
+ Name string
+ Level int
+ Swag string
+}
+
+var Monsters = []Monster{
+ {`Anhkheg`, 6, `chitin`},
+ {`Ant`, 0, `antenna`},
+ {`Ape`, 4, `ass`},
+ {`Baluchitherium`, 14, `ear`},
+ {`Beholder`, 10, `eyestalk`},
+ {`Black Pudding`, 10, `saliva`},
+ {`Blink Dog`, 4, `eyelid`},
+ {`Cub Scout`, 1, `neckercheif`},
+ {`Girl Scout`, 2, `cookie`},
+ {`Boy Scout`, 3, `merit badge`},
+ {`Eagle Scout`, 4, `merit badge`},
+ {`Bugbear`, 3, `skin`},
+ {`Bugboar`, 3, `tusk`},
+ {`Boogie`, 3, `slime`},
+ {`Camel`, 2, `hump`},
+ {`Carrion Crawler`, 3, `egg`},
+ {`Catoblepas`, 6, `neck`},
+ {`Centaur`, 4, `rib`},
+ {`Centipede`, 0, `leg`},
+ {`Cockatrice`, 5, `wattle`},
+ {`Couatl`, 9, `wing`},
+ {`Crayfish`, 0, `antenna`},
+ {`Demogorgon`, 53, `tentacle`},
+ {`Jubilex`, 17, `gel`},
+ {`Manes`, 1, `tooth`},
+ {`Orcus`, 27, `wand`},
+ {`Succubus`, 6, `bra`},
+ {`Vrock`, 8, `neck`},
+ {`Hezrou`, 9, `leg`},
+ {`Glabrezu`, 10, `collar`},
+ {`Nalfeshnee`, 11, `tusk`},
+ {`Marilith`, 7, `arm`},
+ {`Balor`, 8, `whip`},
+ {`Yeenoghu`, 25, `flail`},
+ {`Asmodeus`, 52, `leathers`},
+ {`Baalzebul`, 43, `pants`},
+ {`Barbed Devil`, 8, `flame`},
+ {`Bone Devil`, 9, `hook`},
+ {`Dispater`, 30, `matches`},
+ {`Erinyes`, 6, `thong`},
+ {`Geryon`, 30, `cornucopia`},
+ {`Malebranche`, 5, `fork`},
+ {`Ice Devil`, 11, `snow`},
+ {`Lemure`, 3, `blob`},
+ {`Pit Fiend`, 13, `seed`},
+ {`Anklyosaurus`, 9, `tail`},
+ {`Brontosaurus`, 30, `brain`},
+ {`Diplodocus`, 24, `fin`},
+ {`Elasmosaurus`, 15, `neck`},
+ {`Gorgosaurus`, 13, `arm`},
+ {`Iguanadon`, 6, `thumb`},
+ {`Megalosaurus`, 12, `jaw`},
+ {`Monoclonius`, 8, `horn`},
+ {`Pentasaurus`, 12, `head`},
+ {`Stegosaurus`, 18, `plate`},
+ {`Triceratops`, 16, `horn`},
+ {`Tyranosauraus Rex`, 18, `forearm`},
+ {`Djinn`, 7, `lamp`},
+ {`Doppleganger`, 4, `face`},
+ {`Black Dragon`, 7, `*`},
+ {`Plaid Dragon`, 7, `sporrin`},
+ {`Blue Dragon`, 9, `*`},
+ {`Beige Dragon`, 9, `*`},
+ {`Brass Dragon`, 7, `pole`},
+ {`Tin Dragon`, 8, `*`},
+ {`Bronze Dragon`, 9, `medal`},
+ {`Chromatic Dragon`, 16, `scale`},
+ {`Copper Dragon`, 8, `loafer`},
+ {`Gold Dragon`, 8, `filling`},
+ {`Green Dragon`, 8, `*`},
+ {`Platinum Dragon`, 21, `*`},
+ {`Red Dragon`, 10, `cocktail`},
+ {`Silver Dragon`, 10, `*`},
+ {`White Dragon`, 6, `tooth`},
+ {`Dragon Turtle`, 13, `shell`},
+ {`Dryad`, 2, `acorn`},
+ {`Dwarf`, 1, `drawers`},
+ {`Eel`, 2, `sashimi`},
+ {`Efreet`, 10, `cinder`},
+ {`Sand Elemental`, 8, `glass`},
+ {`Bacon Elemental`, 10, `bit`},
+ {`Porn Elemental`, 12, `lube`},
+ {`Cheese Elemental`, 14, `curd`},
+ {`Hair Elemental`, 16, `follicle`},
+ {`Swamp Elf`, 1, `lilypad`},
+ {`Brown Elf`, 1, `tusk`},
+ {`Sea Elf`, 1, `jerkin`},
+ {`Ettin`, 10, `fur`},
+ {`Frog`, 0, `leg`},
+ {`Violet Fungi`, 3, `spore`},
+ {`Gargoyle`, 4, `gravel`},
+ {`Gelatinous Cube`, 4, `jam`},
+ {`Ghast`, 4, `vomit`},
+ {`Ghost`, 10, `*`},
+ {`Ghoul`, 2, `muscle`},
+ {`Humidity Giant`, 12, `drops`},
+ {`Beef Giant`, 11, `steak`},
+ {`Quartz Giant`, 10, `crystal`},
+ {`Porcelain Giant`, 9, `fixture`},
+ {`Rice Giant`, 8, `grain`},
+ {`Cloud Giant`, 12, `condensation`},
+ {`Fire Giant`, 11, `cigarettes`},
+ {`Frost Giant`, 10, `snowman`},
+ {`Hill Giant`, 8, `corpse`},
+ {`Stone Giant`, 9, `hatchling`},
+ {`Storm Giant`, 15, `barometer`},
+ {`Mini Giant`, 4, `pompadour`},
+ {`Gnoll`, 2, `collar`},
+ {`Gnome`, 1, `hat`},
+ {`Goblin`, 1, `ear`},
+ {`Grid Bug`, 1, `carapace`},
+ {`Jellyrock`, 9, `seedling`},
+ {`Beer Golem`, 15, `foam`},
+ {`Oxygen Golem`, 17, `platelet`},
+ {`Cardboard Golem`, 14, `recycling`},
+ {`Rubber Golem`, 16, `ball`},
+ {`Leather Golem`, 15, `fob`},
+ {`Gorgon`, 8, `testicle`},
+ {`Gray Ooze`, 3, `gravy`},
+ {`Green Slime`, 2, `sample`},
+ {`Griffon`, 7, `nest`},
+ {`Banshee`, 7, `larynx`},
+ {`Harpy`, 3, `mascara`},
+ {`Hell Hound`, 5, `tongue`},
+ {`Hippocampus`, 4, `mane`},
+ {`Hippogriff`, 3, `egg`},
+ {`Hobgoblin`, 1, `patella`},
+ {`Homonculus`, 2, `fluid`},
+ {`Hydra`, 8, `gyrum`},
+ {`Imp`, 2, `tail`},
+ {`Invisible Stalker`, 8, `*`},
+ {`Iron Peasant`, 3, `chaff`},
+ {`Jumpskin`, 3, `shin`},
+ {`Kobold`, 1, `penis`},
+ {`Leprechaun`, 1, `wallet`},
+ {`Leucrotta`, 6, `hoof`},
+ {`Lich`, 11, `crown`},
+ {`Lizard Man`, 2, `tail`},
+ {`Lurker`, 10, `sac`},
+ {`Manticore`, 6, `spike`},
+ {`Mastodon`, 12, `tusk`},
+ {`Medusa`, 6, `eye`},
+ {`Multicell`, 2, `dendrite`},
+ {`Pirate`, 1, `booty`},
+ {`Berserker`, 1, `shirt`},
+ {`Caveman`, 2, `club`},
+ {`Dervish`, 1, `robe`},
+ {`Merman`, 1, `trident`},
+ {`Mermaid`, 1, `gills`},
+ {`Mimic`, 9, `hinge`},
+ {`Mind Flayer`, 8, `tentacle`},
+ {`Minotaur`, 6, `map`},
+ {`Yellow Mold`, 1, `spore`},
+ {`Morkoth`, 7, `teeth`},
+ {`Mummy`, 6, `gauze`},
+ {`Naga`, 9, `rattle`},
+ {`Nebbish`, 1, `belly`},
+ {`Neo-Otyugh`, 11, `organ `},
+ {`Nixie`, 1, `webbing`},
+ {`Nymph`, 3, `hanky`},
+ {`Ochre Jelly`, 6, `nucleus`},
+ {`Octopus`, 2, `beak`},
+ {`Ogre`, 4, `talon`},
+ {`Ogre Mage`, 5, `apparel`},
+ {`Orc`, 1, `snout`},
+ {`Otyugh`, 7, `organ`},
+ {`Owlbear`, 5, `feather`},
+ {`Pegasus`, 4, `aileron`},
+ {`Peryton`, 4, `antler`},
+ {`Piercer`, 3, `tip`},
+ {`Pixie`, 1, `dust`},
+ {`Man-o-war`, 3, `tentacle`},
+ {`Purple Worm`, 15, `dung`},
+ {`Quasit`, 3, `tail`},
+ {`Rakshasa`, 7, `pajamas`},
+ {`Rat`, 0, `tail`},
+ {`Remorhaz`, 11, `protrusion`},
+ {`Roc`, 18, `wing`},
+ {`Roper`, 11, `twine`},
+ {`Rot Grub`, 1, `eggsac`},
+ {`Rust Monster`, 5, `shavings`},
+ {`Satyr`, 5, `hoof`},
+ {`Sea Hag`, 3, `wart`},
+ {`Silkie`, 3, `fur`},
+ {`Shadow`, 3, `silhouette`},
+ {`Shambling Mound`, 10, `mulch`},
+ {`Shedu`, 9, `hoof`},
+ {`Shrieker`, 3, `stalk`},
+ {`Skeleton`, 1, `clavicle`},
+ {`Spectre`, 7, `vestige`},
+ {`Sphinx`, 10, `paw`},
+ {`Spider`, 0, `web`},
+ {`Sprite`, 1, `can`},
+ {`Stirge`, 1, `proboscis`},
+ {`Stun Bear`, 5, `tooth`},
+ {`Stun Worm`, 2, `trode`},
+ {`Su-monster`, 5, `tail`},
+ {`Sylph`, 3, `thigh`},
+ {`Titan`, 20, `sandal`},
+ {`Trapper`, 12, `shag`},
+ {`Treant`, 10, `acorn`},
+ {`Triton`, 3, `scale`},
+ {`Troglodyte`, 2, `tail`},
+ {`Troll`, 6, `hide`},
+ {`Umber Hulk`, 8, `claw`},
+ {`Unicorn`, 4, `blood`},
+ {`Vampire`, 8, `pancreas`},
+ {`Wight`, 4, `lung`},
+ {`Will-o-the-Wisp`, 9, `wisp`},
+ {`Wraith`, 5, `finger`},
+ {`Wyvern`, 7, `wing`},
+ {`Xorn`, 7, `jaw`},
+ {`Yeti`, 4, `fur`},
+ {`Zombie`, 2, `forehead`},
+ {`Wasp`, 0, `stinger`},
+ {`Rat`, 1, `tail`},
+ {`Bunny`, 0, `ear`},
+ {`Moth`, 0, `dust`},
+ {`Beagle`, 0, `collar`},
+ {`Midge`, 0, `corpse`},
+ {`Ostrich`, 1, `beak`},
+ {`Billy Goat`, 1, `beard`},
+ {`Bat`, 1, `wing`},
+ {`Koala`, 2, `heart`},
+ {`Wolf`, 2, `paw`},
+ {`Whippet`, 2, `collar`},
+ {`Uruk`, 2, `boot`},
+ {`Poroid`, 4, `node`},
+ {`Moakum`, 8, `frenum`},
+ {`Fly`, 0, `*`},
+ {`Hogbird`, 3, `curl`},
+}
+
+var MonMods = []string{
+ `-4 fœtal %v`,
+ `-4 dying %v`,
+ `-3 crippled %v`,
+ `-3 baby %v`,
+ `-2 adolescent`,
+ `-2 very sick %v`,
+ `-1 lesser %v`,
+ `-1 undernourished %v`,
+ `+1 greater %v`,
+ `+1 %v Elder`,
+ `+2 war %v`,
+ `+2 Battle-%v`,
+ `+3 Were-%v`,
+ `+3 undead %v`,
+ `+4 giant %v`,
+ `+4 %v Rex`,
+}
diff --git a/internal/spells/spells.go b/internal/spells/spells.go
new file mode 100644
index 0000000..828c9e9
--- /dev/null
+++ b/internal/spells/spells.go
@@ -0,0 +1,77 @@
+package spells
+
+import "math/rand"
+
+var spells = []string{
+ `Slime Finger`,
+ `Rabbit Punch`,
+ `Hastiness`,
+ `Good Move`,
+ `Sadness`,
+ `Seasick`,
+ `Gyp`,
+ `Shoelaces`,
+ `Innoculate`,
+ `Cone of Annoyance`,
+ `Magnetic Orb`,
+ `Invisible Hands`,
+ `Revolting Cloud`,
+ `Aqueous Humor`,
+ `Spectral Miasma`,
+ `Clever Fellow`,
+ `Lockjaw`,
+ `History Lesson`,
+ `Hydrophobia`,
+ `Big Sister`,
+ `Cone of Paste`,
+ `Mulligan`,
+ `Nestor's Bright Idea`,
+ `Holy Batpole`,
+ `Tumor (Benign)`,
+ `Braingate`,
+ `Nonplus`,
+ `Animate Nightstand`,
+ `Eye of the Troglodyte`,
+ `Curse Name`,
+ `Dropsy`,
+ `Vitreous Humor`,
+ `Roger's Grand Illusion`,
+ `Covet`,
+ `Astral Miasma`,
+ `Spectral Oyster`,
+ `Acrid Hands`,
+ `Angioplasty`,
+ `Grognor's Big Day Off`,
+ `Tumor (Malignant)`,
+ `Animate Tunic`,
+ `Ursine Armor`,
+ `Holy Roller`,
+ `Tonsilectomy`,
+ `Curse Family`,
+ `Infinite Confusion`,
+}
+
+func Pick() string {
+ n := rand.Intn(len(spells))
+ return spells[n]
+}
+
+type SpellBook struct {
+ Spells []Spell
+}
+
+type Spell struct {
+ Title string
+ Level int
+}
+
+func (m *SpellBook) Add(title string) {
+ for i, v := range m.Spells {
+ if v.Title == title {
+ v.Level += 1
+ m.Spells[i] = v
+ return
+ }
+ }
+ m.Spells = append(m.Spells, Spell{Title: title, Level: 1})
+}
diff --git a/main.go b/main.go
index 77d1442..c198723 100644
--- a/main.go
+++ b/main.go
@@ -1,8 +1,12 @@
package main
-import "log"
+import (
+ "log"
+
+ "dim13.org/pq/internal/character"
+)
func main() {
- log.Println(Races)
- log.Println(Klasses)
+ log.Println(character.Races)
+ log.Println(character.Klasses)
}
diff --git a/newguy.go b/newguy.go
index cf85404..0d50bd6 100644
--- a/newguy.go
+++ b/newguy.go
@@ -4,6 +4,8 @@ import (
"math/rand"
"strings"
"time"
+
+ "dim13.org/pq/internal/character"
)
func init() {
@@ -36,25 +38,25 @@ func Roll() int {
type Guy struct {
Name, Race, Klass string
Level int
- Attr map[Attr]int
+ Attr map[character.Attr]int
Inventory map[string]int
queue chan Queue
Spells []string
}
func NewGuy() *Guy {
- r := Races.Pick()
- k := Klasses.Pick()
+ r := character.Races.Pick()
+ k := character.Klasses.Pick()
g := Guy{
Name: GenerateName(),
Race: r.Name,
Klass: k.Name,
Level: 1,
- Attr: make(map[Attr]int),
+ Attr: make(map[character.Attr]int),
Inventory: make(map[string]int),
queue: make(chan Queue, 10),
}
- for i := Attr(0); i < Nattr; i++ {
+ for i := character.Attr(0); i < character.Nattr; i++ {
g.Attr[i] = Roll()
}
for _, v := range r.Attr {