aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <gene@pacerevenue.com>2025-05-14 00:08:32 +0200
committerGene Pasquet <gene@pacerevenue.com>2025-05-14 00:08:32 +0200
commit36791b258ae7618cc1bde3ac279f1d2c5a1abb11 (patch)
tree9cb75538c7236e8fca98bb36d6f2981d21d15b4f
parent6640f0dd8ea05a473adfda3e3ac90ff852af1c7a (diff)
Improve design, macro handling
-rw-r--r--TODO.org14
-rw-r--r--assets/level-1.tmx65
-rw-r--r--assets/monochrome_transparent.tsx4
-rw-r--r--src/macroknight/game.hy42
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]