aboutsummaryrefslogtreecommitdiff
path: root/internal/game/hacking/hacking.go
blob: f022ee1362374b33b1b4c65c54565a371dd58601 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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)
}