| 
				
			 | 
			
			 | 
			@@ -14,12 +14,34 @@ type Class struct { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				StatPriority []string | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			type Race struct { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Name     string | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Str      int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Dex      int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Con      int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Int      int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Wis      int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Cha      int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Features []string | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			type Player struct { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Name  string | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Class Class | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Class *Class | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Race  *Race | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				Stats map[string]int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			func choiceClass(ary []Class) Class { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				r := rand.Intn(len(ary)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				return ary[r] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			func choiceRace(ary []Race) Race { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				r := rand.Intn(len(ary)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				return ary[r] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			func stats() []int { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				rolls := make([]int, 6) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				for i := 0; i < 6; i++ { | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -41,19 +63,82 @@ func stats() []int { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				return rolls | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			func pickClass() *Class { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				barbarian := Class{"Barbarian", 12, []string{"Int", "Wis", "Cha", "Dex", "Con", "Str"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				bard := Class{"Bard", 8, []string{"Str", "Con", "Wis", "Int", "Dex", "Cha"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				cleric := Class{"Cleric", 8, []string{"Dex", "Int", "Cha", "Str", "Con", "Wis"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				druid := Class{"Druid", 8, []string{"Cha", "Str", "Dex", "Int", "Con", "Wis"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				fighter_arch := Class{"Fighter", 10, []string{"Int", "Cha", "Wis", "Str", "Con", "Dex"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				fighter_melee := Class{"Fighter", 10, []string{"Int", "Cha", "Wis", "Dex", "Con", "Str"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				monk := Class{"Monk", 8, []string{"Cha", "Int", "Str", "Con", "Wis", "Dex"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				paladin := Class{"Paladin", 10, []string{"Dex", "Int", "Wis", "Con", "Cha", "Str"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ranger := Class{"Ranger", 10, []string{"Cha", "Int", "Con", "Str", "Wis", "Dex"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				rogue := Class{"Rogue", 8, []string{"Wis", "Str", "Con", "Int", "Cha", "Dex"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				sorcerer := Class{"Sorcerer", 6, []string{"Str", "Dex", "Wis", "Int", "Con", "Cha"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				warlock := Class{"Warlock", 8, []string{"Str", "Dex", "Wis", "Int", "Con", "Cha"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				wizard := Class{"Wizard", 6, []string{"Str", "Dex", "Cha", "Con", "Wis", "Int"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				classlist := []Class{barbarian, bard, cleric, druid, fighter_arch, fighter_melee, monk, paladin, ranger, rogue, sorcerer, warlock, wizard} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				rclass := choiceClass(classlist) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				return &rclass | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			func (hmn *Race) humanAttr() { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				for i := 0; i < 2; i++ { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					switch r := rand.Intn(6); r { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					case 0: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						hmn.Str++ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					case 1: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						hmn.Dex++ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					case 2: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						hmn.Con++ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					case 3: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						hmn.Int++ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					case 4: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						hmn.Wis++ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					case 5: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						hmn.Cha++ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			func pickRace() *Race { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				dragonborn := Race{"Dragonborn", 2, 0, 0, 0, 0, 1, []string{"Draconic Ancestry", "Breath Weapon", "Damage Resistance"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				dwarf := Race{"Dwarf", 0, 0, 2, 0, 0, 0, []string{"Darkvision", "Dwarven Resilience", "Dwarven Combat Training", "Stonecunning"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				elf := Race{"Elf", 0, 2, 0, 0, 0, 0, []string{"Darkvision", "Keen Senses", "Fey Ancestry", "Trance"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				gnome := Race{"Gnome", 0, 0, 0, 2, 0, 0, []string{"Darkvision", "Gnome Cunning"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				halfelf := Race{"Half-Elf", 0, 0, 0, 0, 0, 2, []string{"Darkvision", "Fey Ancestry", "Skill Versatility"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				halfling := Race{"Halfling", 0, 2, 0, 0, 0, 0, []string{"Lucky", "Brave", "Halfling Nimbleness"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				halforc := Race{"Half-Orc", 2, 0, 1, 0, 0, 0, []string{"Darkvision", "Menacing", "Relentless Endurance", "Savage Attacks"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				human := Race{"Human", 1, 1, 1, 1, 1, 1, []string{"Extra Language"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				tiefling := Race{"Tiefling", 0, 0, 0, 1, 0, 2, []string{"Darkvision", "Hellish Resistance", "Infernal Legacy"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				racelist := []Race{dragonborn, dwarf, elf, gnome, halfelf, halfling, halforc, human, tiefling} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				rrace := choiceRace(racelist) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				if rrace.Name == "Half-Elf" { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					rrace.humanAttr() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				return &rrace | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			func main() { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				rand.Seed(time.Now().UnixNano()) // Keep this the first line in main() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				barb := Class{"Barbarian", 12, []string{"Int", "Wis", "Cha", "Dex", "Con", "Str"}} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				fmt.Println("=== Generated D&D character ===") | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				rolls := stats() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				fmt.Println("Rolls: ", rolls) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				sort.Ints(rolls) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply := Player{util.Namegen(), barb, make(map[string]int)} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				for k, v := range barb.StatPriority { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply := Player{util.Namegen(), pickClass(), pickRace(), make(map[string]int)} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				for k, v := range ply.Class.StatPriority { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					ply.Stats[v] = rolls[k] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				fmt.Printf("%s - %s\n", ply.Name, ply.Class.Name) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply.Stats["Str"] += ply.Race.Str | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply.Stats["Dex"] += ply.Race.Dex | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply.Stats["Con"] += ply.Race.Con | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply.Stats["Int"] += ply.Race.Int | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply.Stats["Wis"] += ply.Race.Wis | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ply.Stats["Cha"] += ply.Race.Cha | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				fmt.Printf("%s - %s %s\n", ply.Name, ply.Race.Name, ply.Class.Name) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				fmt.Printf("Str: %d\tInt: %d\nDex: %d\tWis: %d\nCon: %d\tCha: %d\n", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					ply.Stats["Str"], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					ply.Stats["Int"], |