From 17e7fef95c5fb6f41488227edf302a02a58a4e23 Mon Sep 17 00:00:00 2001 From: Zed Date: Tue, 7 Oct 2025 10:31:38 -0400 Subject: [PATCH] Forgot the diffs made with my jank diff thing. --- 02_mazes_and_enemies/game.go.diff | 19 ++++++++++++++++ 02_mazes_and_enemies/main.go.diff | 9 ++++++++ 02_mazes_and_enemies/map.go.diff | 34 ++++++++++++++++++++++++++++ 02_mazes_and_enemies/ui.go.diff | 12 ++++++++++ 03_pathing_enemies/data.go.diff | 20 +++++++++++++++++ 03_pathing_enemies/debug.go.diff | 29 ++++++++++++++++++++++++ 03_pathing_enemies/game.go.diff | 8 +++++++ 03_pathing_enemies/main.go.diff | 9 ++++++++ 03_pathing_enemies/map.go.diff | 19 ++++++++++++++++ 03_pathing_enemies/movement.go.diff | 13 +++++++++++ 03_pathing_enemies/ui.go.diff | 12 ++++++++++ 04_combat/data.go.diff | 9 ++++++++ 04_combat/game.go.diff | 16 +++++++++++++ 04_combat/go.mod.diff | 17 ++++++++++++++ 04_combat/main.go.diff | 35 +++++++++++++++++++++++++++++ 04_combat/movement.go.diff | 11 +++++++++ crank_diff.sh | 10 +++++++++ gen_diffs.sh | 4 ++++ 18 files changed, 286 insertions(+) create mode 100644 02_mazes_and_enemies/game.go.diff create mode 100644 02_mazes_and_enemies/main.go.diff create mode 100644 02_mazes_and_enemies/map.go.diff create mode 100644 02_mazes_and_enemies/ui.go.diff create mode 100644 03_pathing_enemies/data.go.diff create mode 100644 03_pathing_enemies/debug.go.diff create mode 100644 03_pathing_enemies/game.go.diff create mode 100644 03_pathing_enemies/main.go.diff create mode 100644 03_pathing_enemies/map.go.diff create mode 100644 03_pathing_enemies/movement.go.diff create mode 100644 03_pathing_enemies/ui.go.diff create mode 100644 04_combat/data.go.diff create mode 100644 04_combat/game.go.diff create mode 100644 04_combat/go.mod.diff create mode 100644 04_combat/main.go.diff create mode 100644 04_combat/movement.go.diff create mode 100644 crank_diff.sh create mode 100644 gen_diffs.sh diff --git a/02_mazes_and_enemies/game.go.diff b/02_mazes_and_enemies/game.go.diff new file mode 100644 index 0000000..585797c --- /dev/null +++ b/02_mazes_and_enemies/game.go.diff @@ -0,0 +1,19 @@ +--- 01_the_screen/game.go 2025-10-06 10:40:36.384247800 -0400 ++++ 02_mazes_and_enemies/game.go 2025-10-06 10:40:37.923662000 -0400 +@@ -3,4 +3,5 @@ + import ( + "os" ++ "math/rand" + ) + +@@ -24,2 +25,10 @@ + os.Exit(0) + } ++ ++func (game *Game) PlaceEnemies(places []Position) { ++ for _, pos := range places { ++ if rand.Int() % 2 == 0 { ++ game.Enemies[pos] = &Enemy{10, pos, 4} ++ } ++ } ++} diff --git a/02_mazes_and_enemies/main.go.diff b/02_mazes_and_enemies/main.go.diff new file mode 100644 index 0000000..7fc6b6a --- /dev/null +++ b/02_mazes_and_enemies/main.go.diff @@ -0,0 +1,9 @@ +--- 01_the_screen/main.go 2025-10-06 00:33:27.349824400 -0400 ++++ 02_mazes_and_enemies/main.go 2025-10-06 11:53:40.243831800 -0400 +@@ -8,4 +8,6 @@ + + game.NewMap() ++ dead_ends := game.NewMaze() ++ game.PlaceEnemies(dead_ends) + game.Render() + diff --git a/02_mazes_and_enemies/map.go.diff b/02_mazes_and_enemies/map.go.diff new file mode 100644 index 0000000..506ab6a --- /dev/null +++ b/02_mazes_and_enemies/map.go.diff @@ -0,0 +1,34 @@ +--- 01_the_screen/map.go 2025-10-06 23:32:48.943928000 -0400 ++++ 02_mazes_and_enemies/map.go 2025-10-06 23:33:02.887088700 -0400 +@@ -22,4 +22,5 @@ + + func (game *Game) Occupied(pos Position) bool { ++ _, is_enemy := game.Enemies[pos] + is_player := pos == game.Player.Pos + +@@ -27,4 +28,5 @@ + return !game.Inbounds(pos, 1) || + game.Level[pos.Y][pos.X] == WALL || ++ is_enemy || + is_player + } +@@ -35,2 +37,19 @@ + } + } ++ ++func (game *Game) Neighbors(near Position) []Position { ++ result := make([]Position, 0, 4) ++ points := compass(near, 2) ++ ++ for _, pos := range points { ++ if game.Inbounds(pos, 0) { ++ result = append(result, pos) ++ } ++ } ++ ++ return result ++} ++ ++func (game *Game) NewMap() { ++ game.FillMap(game.Level, '#') ++} diff --git a/02_mazes_and_enemies/ui.go.diff b/02_mazes_and_enemies/ui.go.diff new file mode 100644 index 0000000..0bac043 --- /dev/null +++ b/02_mazes_and_enemies/ui.go.diff @@ -0,0 +1,12 @@ +--- 01_the_screen/ui.go 2025-10-06 10:55:34.357039400 -0400 ++++ 02_mazes_and_enemies/ui.go 2025-10-06 11:18:20.691714300 -0400 +@@ -69,4 +69,9 @@ + game.DrawMap() + game.DrawEntity('@', game.Player.Pos, tcell.ColorYellow) ++ ++ for pos, _ := range game.Enemies { ++ game.DrawEntity('G', pos, tcell.ColorRed) ++ } ++ + game.DrawStatus() + game.Screen.Show() diff --git a/03_pathing_enemies/data.go.diff b/03_pathing_enemies/data.go.diff new file mode 100644 index 0000000..2ee10d7 --- /dev/null +++ b/03_pathing_enemies/data.go.diff @@ -0,0 +1,20 @@ +--- 02_mazes_and_enemies/data.go 2025-10-06 10:40:57.847195400 -0400 ++++ 03_pathing_enemies/data.go 2025-10-06 02:44:43.658927000 -0400 +@@ -11,9 +11,10 @@ + RENDER = true + SHOW_RENDER = false +- SHOW_PATHS = false ++ SHOW_PATHS = true + HEARING_DISTANCE = 6 + ) + + type Map [][]rune ++type Paths [][]int + + type Position struct { +@@ -31,4 +32,5 @@ + Screen tcell.Screen + Level Map ++ Paths Paths + Player Enemy + Status string diff --git a/03_pathing_enemies/debug.go.diff b/03_pathing_enemies/debug.go.diff new file mode 100644 index 0000000..0688428 --- /dev/null +++ b/03_pathing_enemies/debug.go.diff @@ -0,0 +1,29 @@ +--- 02_mazes_and_enemies/debug.go 2025-10-06 01:05:42.441647100 -0400 ++++ 03_pathing_enemies/debug.go 2025-10-05 23:47:48.686143800 -0400 +@@ -4,4 +4,6 @@ + "log" + "os" ++ "fmt" ++ "github.com/gdamore/tcell/v2" + ) + +@@ -13,2 +15,19 @@ + dbg = log.New(out, "", log.LstdFlags) + } ++ ++func (game *Game) DrawPaths() { ++ for y, row := range game.Paths { ++ for x, path_num := range row { ++ if path_num == PATH_LIMIT { continue } ++ ++ as_str := fmt.Sprintf("%x", path_num % 16) ++ style := tcell.StyleDefault.Foreground(tcell.ColorGray) ++ ++ if path_num >= 0 && path_num <= 16 { ++ style = style.Reverse(true) ++ } ++ ++ game.Screen.SetContent(x, y, rune(as_str[0]), nil, style) ++ } ++ } ++} diff --git a/03_pathing_enemies/game.go.diff b/03_pathing_enemies/game.go.diff new file mode 100644 index 0000000..d3d6afe --- /dev/null +++ b/03_pathing_enemies/game.go.diff @@ -0,0 +1,8 @@ +--- 02_mazes_and_enemies/game.go 2025-10-06 10:40:37.923662000 -0400 ++++ 03_pathing_enemies/game.go 2025-10-06 12:44:21.971080300 -0400 +@@ -13,4 +13,5 @@ + game.Enemies = make(map[Position]*Enemy) + game.Level = make(Map, height, height) ++ game.Paths = make(Paths, height, height) + game.Player = Enemy{20, Position{1,1}, 4} + diff --git a/03_pathing_enemies/main.go.diff b/03_pathing_enemies/main.go.diff new file mode 100644 index 0000000..0b8c590 --- /dev/null +++ b/03_pathing_enemies/main.go.diff @@ -0,0 +1,9 @@ +--- 02_mazes_and_enemies/main.go 2025-10-06 11:53:40.243831800 -0400 ++++ 03_pathing_enemies/main.go 2025-10-06 11:53:48.238068700 -0400 +@@ -13,4 +13,6 @@ + + for game.HandleEvents() { ++ game.CalculatePaths() ++ game.EnemyPathing() + game.Render() + } diff --git a/03_pathing_enemies/map.go.diff b/03_pathing_enemies/map.go.diff new file mode 100644 index 0000000..289f4b9 --- /dev/null +++ b/03_pathing_enemies/map.go.diff @@ -0,0 +1,19 @@ +--- 02_mazes_and_enemies/map.go 2025-10-06 23:33:02.887088700 -0400 ++++ 03_pathing_enemies/map.go 2025-10-06 10:44:52.350308600 -0400 +@@ -14,4 +14,16 @@ + } + ++func (game *Game) CloneMap() Map { ++ // this is a shallow copy though ++ new_map := slices.Clone(game.Level) ++ ++ for i, row := range new_map { ++ // this makes sure the row is an actual copy ++ new_map[i] = slices.Clone(row) ++ } ++ ++ return new_map ++} ++ + func (game *Game) Inbounds(pos Position, offset int) bool { + return pos.X >= offset && diff --git a/03_pathing_enemies/movement.go.diff b/03_pathing_enemies/movement.go.diff new file mode 100644 index 0000000..4215337 --- /dev/null +++ b/03_pathing_enemies/movement.go.diff @@ -0,0 +1,13 @@ +--- 02_mazes_and_enemies/movement.go 2025-10-06 10:48:12.166620400 -0400 ++++ 03_pathing_enemies/movement.go 2025-10-06 12:00:47.091211600 -0400 +@@ -11,2 +11,10 @@ + } + } ++ ++func (game *Game) MoveEnemy(from Position, to Position) { ++ enemy, ok := game.Enemies[from] ++ if !ok { dbg.Fatal("no enemy at", from, "wtf") } ++ ++ delete(game.Enemies, from) ++ game.Enemies[to] = enemy ++} diff --git a/03_pathing_enemies/ui.go.diff b/03_pathing_enemies/ui.go.diff new file mode 100644 index 0000000..3c20c36 --- /dev/null +++ b/03_pathing_enemies/ui.go.diff @@ -0,0 +1,12 @@ +--- 02_mazes_and_enemies/ui.go 2025-10-06 11:18:20.691714300 -0400 ++++ 03_pathing_enemies/ui.go 2025-10-06 12:10:53.153215100 -0400 +@@ -68,4 +68,9 @@ + game.Screen.Clear() + game.DrawMap() ++ ++ if SHOW_PATHS { ++ game.DrawPaths() ++ } ++ + game.DrawEntity('@', game.Player.Pos, tcell.ColorYellow) + diff --git a/04_combat/data.go.diff b/04_combat/data.go.diff new file mode 100644 index 0000000..317c01e --- /dev/null +++ b/04_combat/data.go.diff @@ -0,0 +1,9 @@ +--- 03_pathing_enemies/data.go 2025-10-06 02:44:43.658927000 -0400 ++++ 04_combat/data.go 2025-10-05 23:24:48.595383100 -0400 +@@ -11,5 +11,5 @@ + RENDER = true + SHOW_RENDER = false +- SHOW_PATHS = true ++ SHOW_PATHS = false + HEARING_DISTANCE = 6 + ) diff --git a/04_combat/game.go.diff b/04_combat/game.go.diff new file mode 100644 index 0000000..a733659 --- /dev/null +++ b/04_combat/game.go.diff @@ -0,0 +1,16 @@ +--- 03_pathing_enemies/game.go 2025-10-06 12:44:21.971080300 -0400 ++++ 04_combat/game.go 2025-10-06 10:56:30.634388900 -0400 +@@ -34,2 +34,13 @@ + } + } ++ ++func (game *Game) Restart() { ++ game.SetStatus("YOU DIED! Try again.") ++ game.Player.HP = 20 ++ game.Player.Pos = Position{1,1} ++ clear(game.Enemies) ++ game.FillPaths(game.Paths, PATH_LIMIT) ++ game.FillMap(game.Level, '#') ++ ++ game.Render() ++} diff --git a/04_combat/go.mod.diff b/04_combat/go.mod.diff new file mode 100644 index 0000000..6823ddc --- /dev/null +++ b/04_combat/go.mod.diff @@ -0,0 +1,17 @@ +--- 03_pathing_enemies/go.mod 2025-09-29 00:25:59.856341100 -0400 ++++ 04_combat/go.mod 2025-10-06 00:24:48.519375000 -0400 +@@ -3,12 +3,10 @@ + go 1.25.1 + +-require ( +- github.com/gdamore/tcell/v2 v2.9.0 +- github.com/mattn/go-runewidth v0.0.16 +-) ++require github.com/gdamore/tcell/v2 v2.9.0 + + require ( + github.com/gdamore/encoding v1.0.1 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect ++ github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + golang.org/x/sys v0.35.0 // indirect diff --git a/04_combat/main.go.diff b/04_combat/main.go.diff new file mode 100644 index 0000000..1af54a4 --- /dev/null +++ b/04_combat/main.go.diff @@ -0,0 +1,35 @@ +--- 03_pathing_enemies/main.go 2025-10-06 11:53:48.238068700 -0400 ++++ 04_combat/main.go 2025-10-06 11:53:46.781950000 -0400 +@@ -7,15 +7,22 @@ + game.InitScreen() + +- game.NewMap() +- dead_ends := game.NewMaze() +- game.PlaceEnemies(dead_ends) +- game.Render() +- +- for game.HandleEvents() { +- game.CalculatePaths() +- game.EnemyPathing() ++ for { ++ game.NewMap() ++ dead_ends := game.NewMaze() ++ game.PlaceEnemies(dead_ends) + game.Render() +- } + +- game.Exit() ++ for game.HandleEvents() && game.Player.HP > 0 { ++ game.EnemyDeath() ++ game.CalculatePaths() ++ game.EnemyPathing() ++ game.Render() ++ } ++ ++ if game.Player.HP <= 0 { ++ game.Restart() ++ } else { ++ game.Exit() ++ } ++ } + } diff --git a/04_combat/movement.go.diff b/04_combat/movement.go.diff new file mode 100644 index 0000000..6d2b257 --- /dev/null +++ b/04_combat/movement.go.diff @@ -0,0 +1,11 @@ +--- 03_pathing_enemies/movement.go 2025-10-06 12:00:47.091211600 -0400 ++++ 04_combat/movement.go 2025-10-06 12:00:49.969794700 -0400 +@@ -7,5 +7,7 @@ + } + +- if !game.Occupied(target) { ++ if game.Occupied(target) { ++ game.Attack(target) ++ } else { + game.Player.Pos = target + } diff --git a/crank_diff.sh b/crank_diff.sh new file mode 100644 index 0000000..9228348 --- /dev/null +++ b/crank_diff.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +for p in `diff $1 $2 | grep "^diff" | cut -d " " -f 2-3 | sed "s/ /#/g"` +do + echo $(echo $p | sed "s/#/ /g") + + read -r from to <<< "$(echo $p | sed 's/#/ /g')" + + diff -u2 $from $to > $to.diff +done diff --git a/gen_diffs.sh b/gen_diffs.sh new file mode 100644 index 0000000..7dd3a7d --- /dev/null +++ b/gen_diffs.sh @@ -0,0 +1,4 @@ +find . -name "*.diff" -exec rm {} \; +./crank_diff.sh 01_the_screen 02_mazes_and_enemies +./crank_diff.sh 02_mazes_and_enemies 03_pathing_enemies +./crank_diff.sh 03_pathing_enemies 04_combat