aboutsummaryrefslogtreecommitdiff
path: root/internal/game/hacking/hacking.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/hacking/hacking.go')
-rw-r--r--internal/game/hacking/hacking.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/internal/game/hacking/hacking.go b/internal/game/hacking/hacking.go
new file mode 100644
index 0000000..f022ee1
--- /dev/null
+++ b/internal/game/hacking/hacking.go
@@ -0,0 +1,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)
+}