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