diff options
author | Gene Pasquet <gene@pacerevenue.com> | 2025-05-14 00:08:32 +0200 |
---|---|---|
committer | Gene Pasquet <gene@pacerevenue.com> | 2025-05-14 00:08:32 +0200 |
commit | 36791b258ae7618cc1bde3ac279f1d2c5a1abb11 (patch) | |
tree | 9cb75538c7236e8fca98bb36d6f2981d21d15b4f | |
parent | 6640f0dd8ea05a473adfda3e3ac90ff852af1c7a (diff) |
Improve design, macro handling
-rw-r--r-- | TODO.org | 14 | ||||
-rw-r--r-- | assets/level-1.tmx | 65 | ||||
-rw-r--r-- | assets/monochrome_transparent.tsx | 4 | ||||
-rw-r--r-- | src/macroknight/game.hy | 42 |
4 files changed, 57 insertions, 68 deletions
diff --git a/TODO.org b/TODO.org new file mode 100644 index 0000000..c75dd7d --- /dev/null +++ b/TODO.org @@ -0,0 +1,14 @@ +* Bugs +** Collision detection when moving sideways and jumping +** Resolve collisions between each macro move +** Amount of movement from macros + +* Improvements +** Display each stage of macro execution with a timer + +* To do +** Add enemies +** Create enemy classes and behaviour +** Flip player sprite when moving the other way +** Animate player sprite +** Add help text diff --git a/assets/level-1.tmx b/assets/level-1.tmx index 3e5771f..9f062ef 100644 --- a/assets/level-1.tmx +++ b/assets/level-1.tmx @@ -1,40 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <map version="1.10" tiledversion="1.11.2" orientation="orthogonal" renderorder="right-down" width="40" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="1"> <tileset firstgid="1" source="tileset_colored.tsx"/> - <layer id="1" name="background" width="40" height="30"> - <data encoding="csv"> -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -</data> - </layer> + <tileset firstgid="1025" source="monochrome_transparent.tsx"/> <layer id="3" name="ground" width="40" height="30"> <data encoding="csv"> 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -50,23 +17,23 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -587,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450,0,0,0, -557,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,555,0,0,0, -555,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,556,555,555,555, -557,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,20,20,20,20,20,21,0,0,0,0,0,0,0,0,555,555,555,555, -555,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,0,0,53,0,0,0,0,0,0,0,0,329,555,555,555, -361,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,52,0,147,20,20,20,20,20,20,20,20,20,20,20,20, -20,20,20,20,20,20,20,20,21,0,0,0,0,0,0,0,0,0,0,0,19,148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,147,21,0,0,0,0,0,0,0,0,0,19,148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,52,0,0,0,0,0,147,20,20,20,20,20,20,20,20,20,148,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,52,0, +1963,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1712,0,0,0, +1870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1868,0,0,0, +1868,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1869,1570,1570,1570, +1870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,1044,1044,1044,1044,1044,1045,0,0,0,0,0,0,0,0,1868,1868,1868,1868, +1868,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1092,0,0,0,0,0,1094,0,0,0,0,0,0,0,0,1468,1868,1868,1868, +1572,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1092,0,0,0,1093,0,1239,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044, +1044,1044,1044,1044,1044,1044,1044,1044,1045,0,0,0,0,0,0,0,0,0,0,0,1043,1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1239,1045,0,0,0,0,0,0,0,0,0,1043,1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1093,0,0,0,0,0,1239,1044,1044,1044,1044,1044,1044,1044,1044,1044,1240,0,0,0,0,0,0,0,0,0,0,0,1093,0,0,0,0,0,0,1093,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,52,0,0,0,0, -0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1093,0,0,0,0,1093,0,0,0,0, +0,0,0,0,1093,0,0,0,0,0,0,0,0,0,0,1093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1093,0,0,0,0,0,0,0,0,0,0 </data> </layer> </map> diff --git a/assets/monochrome_transparent.tsx b/assets/monochrome_transparent.tsx new file mode 100644 index 0000000..279c64d --- /dev/null +++ b/assets/monochrome_transparent.tsx @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tileset version="1.10" tiledversion="1.11.2" name="monochrome_transparent" tilewidth="16" tileheight="16" spacing="1" tilecount="1078" columns="49"> + <image source="monochrome-transparent.png" width="832" height="373"/> +</tileset> diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index 5b230ac..32ba2a8 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -11,15 +11,18 @@ (setv TILE_SIZE (* TILE_SCALING 16)) (setv GRAVITY 5) +(defn neg [value] + (* -1 value)) + (defn invert [move] - #((* -1 (get move 0)) - (* -1 (get move 1)))) + #((neg (get move 0)) + (neg (get move 1)))) (defclass TileSet [] (defn __init__ [self image tile-w tile-h [padding 0]] (setv self.sheet - (let [surf (pygame.image.load "assets/tileset_legacy.png")] + (let [surf (pygame.image.load "assets/monochrome-transparent.png")] (if (!= TILE_SCALING 1) (pygame.transform.scale surf @@ -34,6 +37,7 @@ (.blit tile self.sheet #(0 0) #(x y tile-w tile-h)) tile))))) + ;; Define systems here (defn apply-gravity [entity entities] (when (not entity.fixed) @@ -94,7 +98,7 @@ (setv self.jumping True) (when (< self.jump_move self.MAX_JUMPING) (setv self.jump_move (+ self.jump_move self.JUMP_IMPULSE)) - (.move self #(0 (* -1 self.JUMP_IMPULSE))))) + (.move self #(0 (neg self.JUMP_IMPULSE))))) (defn ground [self] (setv self.jump_move 0)) @@ -106,7 +110,7 @@ (setv clock (pygame.time.Clock)) (setv running True) -(setv tiles (TileSet "assets/tileset_legacy.png" TILE_SIZE TILE_SIZE 1)) +(setv tiles (TileSet "assets/monochrome-transparent.png" TILE_SIZE TILE_SIZE 1)) (setv player (Player (get tiles.tiles 28) 0 0)) (setv sprites-group []) @@ -115,7 +119,7 @@ (setv macro-input-mode False) (setv macro-commands [None None None]) -(for [tiledef (enumerate (.tiles (get level.layers 1)))] +(for [tiledef (enumerate (.tiles (get level.layers 0)))] (.append sprites-group (LevelTile (get tiledef 0) #* (get tiledef 1)))) (setv ongoing_inputs []) @@ -142,7 +146,7 @@ pygame.KEYUP (when (in event.key ongoing_inputs) (.remove ongoing_inputs event.key)))) - (.fill screen "#472d3c") + (.fill screen "#000000") (if macro-input-mode ;; If the commands list is full @@ -150,33 +154,33 @@ ;; Process commands (do (for [command macro-commands] - (print command) (case command - pygame.K_a (.move player #((* -1 player.SPEED) 0)) + pygame.K_a (.move player #((neg TILE_SIZE) 0)) pygame.K_s (.move player #(0 1)) - pygame.K_w (.move player #(0 player.MAX_JUMPING)) - pygame.K_d (.move player #(player.SPEED 0)))) + pygame.K_w (.move player #(0 (neg TILE_SIZE))) + pygame.K_d (.move player #(TILE_SIZE 0)))) (setv macro-commands [None None None]) (setv macro-input-mode False)) - (do (draw-tile screen 757 3 1) + (do (draw-tile screen 774 3 1) (for [#(num command) (enumerate macro-commands)] (let [x-pos (+ 4 num)] (case command - pygame.K_w (draw-tile screen 700 x-pos 1) - pygame.K_d (draw-tile screen 701 x-pos 1) - pygame.K_s (draw-tile screen 702 x-pos 1) - pygame.K_a (draw-tile screen 703 x-pos 1)))))) + pygame.K_w (draw-tile screen 1057 x-pos 1) + pygame.K_d (draw-tile screen 1058 x-pos 1) + pygame.K_s (draw-tile screen 1059 x-pos 1) + pygame.K_a (draw-tile screen 1060 x-pos 1)))))) (do (for [inp ongoing_inputs] (case inp - pygame.K_a (.move player #((* -1 player.SPEED) 0)) + pygame.K_a (.move player #((neg player.SPEED) 0)) pygame.K_s (.move player #(0 1)) pygame.K_w (.jump player) pygame.K_d (.move player #(player.SPEED 0)))) - (for [sprite sprites-group] - (apply-collisions sprite sprites-group)) + (when (any ongoing_inputs) + (for [sprite sprites-group] + (apply-collisions sprite sprites-group))) ;; Apply systems (for [sprite sprites-group] |