diff options
author | Gene Pasquet <dev@etenil.net> | 2025-05-16 22:31:16 +0100 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2025-05-16 22:31:16 +0100 |
commit | be71ead1e21d55049a18747f2d0d2159b11868f3 (patch) | |
tree | e3c548cb9feedd13d4f6f095d50d2b5c2720c2f4 | |
parent | 984d55db9fd77f6b53f1f0495e616d5cfb6bc828 (diff) |
Support displaying enemies
-rw-r--r-- | TODO.org | 4 | ||||
-rw-r--r-- | assets/level-3.tmx | 40 | ||||
-rw-r--r-- | macroknight.tiled-session | 34 | ||||
-rw-r--r-- | src/macroknight/entities.hy | 20 | ||||
-rw-r--r-- | src/macroknight/game.hy | 18 |
5 files changed, 63 insertions, 53 deletions
@@ -6,9 +6,7 @@ * Improvements ** DONE Display each stage of macro execution with a timer - -* To do -** TODO Add enemies +** DONE Add enemies ** TODO Create enemy classes and behaviour ** DONE Flip player sprite when moving the other way ** TODO Animate player sprite diff --git a/assets/level-3.tmx b/assets/level-3.tmx index ab1ea48..1c2b04a 100644 --- a/assets/level-3.tmx +++ b/assets/level-3.tmx @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<map version="1.8" tiledversion="1.8.2" orientation="orthogonal" renderorder="right-down" width="40" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="3" nextobjectid="7"> +<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="40" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="3" nextobjectid="7"> <tileset firstgid="1" source="monochrome_transparent.tsx"/> <layer id="1" name="Tile Layer 1" width="40" height="30"> <data encoding="csv"> @@ -7,37 +7,37 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,939, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,978,918,978,880,0,0,0,0,893, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,939, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,893, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,846, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,844, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,20,216,0,0,0,0,0,0,0,0,846, 13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,217,644,644,644,644,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,844, 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,217,644,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,444, -12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,644,0,0,0,0,0,644,0,0,0,0,0,0,0,0,0,0,0,215,20,0,20,20,20, +12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,644,0,0,0,0,0,743,0,0,0,0,0,0,0,0,0,0,0,215,20,0,20,20,20, 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,644,0,0,644,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -12,0,0,0,0,0,0,0,0,0,0,0,0,0,644,0,0,0,0,0,0,0,644,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, +12,0,0,0,0,0,0,0,0,0,0,0,0,0,644,0,0,0,0,0,0,0,743,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, 409,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,644,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -20,0,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -217,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -0,217,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -0,0,217,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -0,0,0,217,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, -0,0,0,0,217,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17, -0,0,0,0,0,217,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +20,0,20,743,743,743,638,743,638,743,638,743,743,743,638,743,638,743,638,743,638,743,743,20,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, +612,0,0,0,0,0,0,0,0,0,0,0,0,603,0,0,0,0,0,603,0,0,601,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, +0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, +0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, +0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, +0,69,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,638, +0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17, +0,0,0,0,0,0,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, +0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0, +0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 </data> </layer> <objectgroup id="2" name="Object Layer 1"> - <object id="1" gid="129" x="191.333" y="207.333" width="16" height="16"/> + <object id="1" name="enemy" type="Enemy1" gid="129" x="191.333" y="207.333" width="16" height="16"/> <object id="5" x="619.333" y="170.667"/> - <object id="6" gid="29" x="49.3333" y="206" width="16" height="16"/> + <object id="6" name="player" type="Player" gid="29" x="48.8661" y="206" width="16" height="16"/> </objectgroup> </map> diff --git a/macroknight.tiled-session b/macroknight.tiled-session index 7d1d922..20c0f18 100644 --- a/macroknight.tiled-session +++ b/macroknight.tiled-session @@ -3,15 +3,12 @@ "height": 4300, "width": 2 }, - "activeFile": "assets/level-1.tmx", + "activeFile": "assets/level-0.tmx", "expandedProjectPaths": [ ".", "assets" ], "fileStates": { - "": { - "scaleInDock": 1 - }, "assets/level-0.tmx": { "scale": 3, "selectedLayer": 1, @@ -21,33 +18,23 @@ } }, "assets/level-1.tmx": { - "scale": 2, - "selectedLayer": 0, - "viewCenter": { - "x": 201.75, - "y": 281.25 - } - }, - "assets/level-2.tmx": { - "scale": 1.5, + "scale": 4, "selectedLayer": 0, "viewCenter": { - "x": 252.3333333333333, - "y": 168.33333333333337 + "x": 553.625, + "y": 290.375 } }, "assets/level-3.tmx": { - "scale": 1.5, + "scale": 2.1404687499999997, "selectedLayer": 0, "viewCenter": { - "x": 315, - "y": 252.33333333333337 + "x": 320.25695306226737, + "y": 240.3679100664282 } }, "assets/monochrome_transparent.tsx": { - "dynamicWrapping": false, - "scaleInDock": 2, - "scaleInEditor": 2 + "scaleInDock": 1 }, "assets/tileset_colored.tsx": { "scaleInDock": 1 @@ -59,14 +46,11 @@ "map.tileWidth": 16, "map.width": 40, "openFiles": [ - "assets/monochrome_transparent.tsx", - "assets/level-0.tmx", - "assets/level-1.tmx" + "assets/level-0.tmx" ], "project": "macroknight.tiled-project", "recentFiles": [ "assets/level-1.tmx", - "assets/monochrome_transparent.tsx", "assets/level-0.tmx" ] } diff --git a/src/macroknight/entities.hy b/src/macroknight/entities.hy index 812193e..c490b25 100644 --- a/src/macroknight/entities.hy +++ b/src/macroknight/entities.hy @@ -87,3 +87,23 @@ (defn [property] surf [self] self._disp_surf)) + +(defclass Enemy [Entity] + (setv _type "enemy")) + +(defclass Enemy2Swords [Enemy] + (defn __init__ [self id tile tile-size x y] + (.__init__ (super) id tile tile-size x y) + (.flush self)) + + (defn move [self move] + (.append self.moves move) + (.move_ip self._rect (get move 0) (get move 1))) + + (defn flush [self] + (setv self.moves [])) + + (defn ground [self]) + + (defn [property] total-move [self] + (merge-moves self.moves))) diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index 005f356..4e1ce7e 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -2,7 +2,7 @@ (require hyrule *) (import pygame pytmx.util_pygame [load_pygame] - entities [Player LevelTile Goal] + entities [Player LevelTile Goal Enemy2Swords] tiles [TileSet draw-tile] utils [neg] text [render-text] @@ -19,8 +19,10 @@ (setv screen (pygame.display.set_mode #((* TILE_SCALING 640) (* TILE_SCALING 480)))) (setv clock (pygame.time.Clock)) (setv tileset (TileSet "assets/monochrome-transparent.png" TILE_SCALING TILE_SIZE TILE_SIZE 1)) -(setv levels [(load_pygame "assets/level-0.tmx") - (load_pygame "assets/level-1.tmx")]) +(setv levels [(load_pygame "assets/level-3.tmx") + (load_pygame "assets/level-0.tmx") + (load_pygame "assets/level-1.tmx") + (load_pygame "assets/level-2.tmx")]) (setv level-id 0) (defn abs-to-tile-index [abs-id] (int (floor (/ abs-id TILE_SIZE)))) @@ -43,8 +45,14 @@ (Goal (len entities) (get tileset.tiles 0) TILE_SIZE - (abs-to-tile-index item.x) - (abs-to-tile-index item.y)))))) + tile-x + tile-y)) + "Enemy1" (.append entities + (Enemy2Swords (len entities) + (get tileset.tiles 128) + TILE_SIZE + tile-x + tile-y))))) (setv player-pos (let [player-objects (lfor ent (get level.layers 1) :if (= ent.type "Player") ent)] |