package main import ( "math/rand" "strings" "time" "dim13.org/pq/internal/character" ) func init() { rand.Seed(time.Now().UnixNano()) } var kparts = [][]string{ {`br`, `cr`, `dr`, `fr`, `gr`, `j`, `kr`, `l`, `m`, `n`, `pr`, ``, ``, ``, `r`, `sh`, `tr`, `v`, `wh`, `x`, `y`, `z`}, {`a`, `a`, `e`, `e`, `i`, `i`, `o`, `o`, `u`, `u`, `ae`, `ie`, `oo`, `ou`}, {`b`, `ck`, `d`, `g`, `k`, `m`, `n`, `p`, `t`, `v`, `x`, `z`}, } func Pick(s []string) string { return s[rand.Intn(len(s))] } func GenerateName() string { var s string for i := 0; i < 6; i++ { s += Pick(kparts[i%3]) } return strings.Title(s) } func Roll() int { return 3 + rand.Intn(6) + rand.Intn(6) + rand.Intn(6) } type Guy struct { Name, Race, Klass string Level int Attr map[character.Attr]int Inventory map[string]int queue chan Queue Spells []string } func NewGuy() *Guy { r := character.Races.Pick() k := character.Klasses.Pick() g := Guy{ Name: GenerateName(), Race: r.Name, Klass: k.Name, Level: 1, Attr: make(map[character.Attr]int), Inventory: make(map[string]int), queue: make(chan Queue, 10), } for i := character.Attr(0); i < character.Nattr; i++ { g.Attr[i] = Roll() } for _, v := range r.Attr { g.Attr[v] += 1 } for _, v := range k.Attr { g.Attr[v] += 1 } g.Inventory["Gold"] = 0 g.queue <- Queue{Task, 10, "Experiencing an enigmatic and foreboding night vision"} g.queue <- Queue{Task, 6, "Much is revealed about that wise old bastard you'd underestimated"} g.queue <- Queue{Task, 6, "A shocking series of events leaves you alone and bewildered, but resolute"} g.queue <- Queue{Task, 4, "Drawing upon an unrealized reserve of determination, you set out on a long and dangerous journey"} g.queue <- Queue{Plot, 2, "Loading"} // DEBUG close(g.queue) return &g }