diff options
| -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] | 
