package hacking type Minigame interface { Init(level int) string HandleInput(input string) (output string, done bool, won bool) Name() string } type XPBonuser interface { BonusXP() int } type Session struct { Minigame Minigame TerminalID string Level int ReqLevel int Started bool } type TerminalDef struct { ObjectID string Level int Minigame func() Minigame BaseXPWin int BaseXPLose int Name string } var Terminals = map[string]TerminalDef{ "terminal_basic": { ObjectID: "terminal_basic", Level: 1, Minigame: func() Minigame { return NewWumpusGame() }, BaseXPWin: 50, BaseXPLose: 10, Name: "Hunt the Wumpus", }, "terminal_advanced": { ObjectID: "terminal_advanced", Level: 20, Minigame: func() Minigame { return NewMastermindGame() }, BaseXPWin: 150, BaseXPLose: 30, Name: "Code Breaker", }, "terminal_secure": { ObjectID: "terminal_secure", Level: 40, Minigame: func() Minigame { return NewLiarsDiceGame() }, BaseXPWin: 300, BaseXPLose: 50, Name: "Signal Bluff", }, } func CalcXP(baseXP int, playerLevel int, reqLevel int) int { multiplier := 1.0 + 0.01*float64(playerLevel-reqLevel) if multiplier < 1.0 { multiplier = 1.0 } return int(float64(baseXP) * multiplier) }