From 62d14fae5f04233baa525b764a7d0ff20b262f5d Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Mon, 12 May 2025 16:13:23 +0200 Subject: Some progress --- .gitinore | 2 + Makefile | 2 + assets/level-1.tmx | 72 +++++++++++++++++++++++++ assets/tileset_colored.tsx | 4 ++ assets/tileset_legacy.png | Bin 0 -> 26124 bytes assets/untitled.tiled-project | 13 +++++ assets/untitled.tiled-session | 13 +++++ assets/untitled.tmx | 28 ++++++++++ src/macroknight/game.hy | 123 +++++++++++++++++++++++++++++++++++++++--- untitled.tiled-project | 14 +++++ untitled.tiled-session | 39 ++++++++++++++ 11 files changed, 302 insertions(+), 8 deletions(-) create mode 100644 Makefile create mode 100644 assets/level-1.tmx create mode 100644 assets/tileset_colored.tsx create mode 100644 assets/tileset_legacy.png create mode 100644 assets/untitled.tiled-project create mode 100644 assets/untitled.tiled-session create mode 100644 assets/untitled.tmx create mode 100644 untitled.tiled-project create mode 100644 untitled.tiled-session diff --git a/.gitinore b/.gitinore index bd0041f..4bf4f05 100644 --- a/.gitinore +++ b/.gitinore @@ -2,3 +2,5 @@ *~ *.pyc /.venv +__pycache__ +__pycache__/* \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..901c5dd --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +run: + .venv/bin/hy src/macroknight/game.hy diff --git a/assets/level-1.tmx b/assets/level-1.tmx new file mode 100644 index 0000000..bd6ea10 --- /dev/null +++ b/assets/level-1.tmx @@ -0,0 +1,72 @@ + + + + + +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,52,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,52,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,52,1,1,1,1,1,1,52,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +52,1,1,1,1,1,1,1,52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,52,1,1,1,1,52,1,1,1,1, +1,1,1,1,52,1,1,1,1,1,1,1,1,1,1,52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,52,1,1,1,1,1,1,1,1,1,1 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,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,0,0,0,647, +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,0,0,0,556, +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,0,0,0,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,0,0,0,329, +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,0,0,147,20,20,20,20,20,20,20,20,20,20,20,20, +20,20,20,20,20,20,20,20,2147484002,0,0,0,0,0,0,0,0,0,0,0,117,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,417,2147484002,0,0,0,0,0,0,0,0,0,117,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,0,0,417,20,20,20,20,20,20,20,20,20,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/assets/tileset_colored.tsx b/assets/tileset_colored.tsx new file mode 100644 index 0000000..4d0ee20 --- /dev/null +++ b/assets/tileset_colored.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/assets/tileset_legacy.png b/assets/tileset_legacy.png new file mode 100644 index 0000000..6c3751c Binary files /dev/null and b/assets/tileset_legacy.png differ diff --git a/assets/untitled.tiled-project b/assets/untitled.tiled-project new file mode 100644 index 0000000..ee4f73b --- /dev/null +++ b/assets/untitled.tiled-project @@ -0,0 +1,13 @@ +{ + "automappingRulesFile": "", + "commands": [ + ], + "compatibilityVersion": 1100, + "extensionsPath": "extensions", + "folders": [ + ], + "properties": [ + ], + "propertyTypes": [ + ] +} diff --git a/assets/untitled.tiled-session b/assets/untitled.tiled-session new file mode 100644 index 0000000..a3ce475 --- /dev/null +++ b/assets/untitled.tiled-session @@ -0,0 +1,13 @@ +{ + "activeFile": "", + "expandedProjectPaths": [ + "." + ], + "fileStates": { + }, + "openFiles": [ + ], + "project": "untitled.tiled-project", + "recentFiles": [ + ] +} diff --git a/assets/untitled.tmx b/assets/untitled.tmx new file mode 100644 index 0000000..401c2fd --- /dev/null +++ b/assets/untitled.tmx @@ -0,0 +1,28 @@ + + + + + +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +34,34,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +2684354601,2684354601,2684354602,34,34,34,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1610612778,2684354601,2684354601,2684354601,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + + + diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index 2db0f29..c910416 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -1,20 +1,127 @@ (require hy) (require hyrule) -(import pygame) +(import pygame + pytmx.util_pygame [load_pygame] + pprint [pprint]) (pygame.init) -(setv screen (pygame.display.set_mode #(1280 720))) + +(setv TILE_SCALING 1) +(setv TILE_SIZE 32) +(setv GRAVITY 5) + +(defclass TileSet [] + (defn __init__ [self image tile-w tile-h [padding 0]] + + (setv self.sheet + (let [surf (pygame.image.load "assets/tileset_legacy.png")] + (if (!= TILE_SCALING 1) + (pygame.transform.scale + surf + #((* (.get_width surf) TILE_SCALING) + (* (.get_height surf) TILE_SCALING))) + surf))) + + (setv self.tiles + (lfor y (range 0 (.get_height self.sheet) (+ tile-h (* padding TILE_SCALING))) + x (range 0 (.get_width self.sheet) (+ tile-w (* padding TILE_SCALING))) + (let [tile (pygame.Surface #(tile-w tile-h))] + (.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) + (.move entity 0 GRAVITY))) + +(defn apply-collisions [entity entities] + (for [ent entities] + (when (and (!= ent.id entity.id) + (.colliderect entity.rect ent.rect) + (not entity.fixed)) + (let [collision (.clip entity.rect ent.rect)] + (print f"{entity.id} == {ent.id}") + (.move entity + (* -1 collision.width) + (* -1 collision.height)))))) + +;; Define entities here +(defclass LevelTile [] + (setv fixed True) + + (defn __init__ [self id x y surf] + (setv self.id id) + (setv self.surf + (if (!= TILE_SCALING 1) + (pygame.transform.scale + surf + #((* (.get_width surf) TILE_SCALING) + (* (.get_height surf) TILE_SCALING))) + surf)) + + (setv self.rect (.get_rect surf :left (* x TILE_SIZE) :top (* y TILE_SIZE))))) + +(defclass Player [pygame.sprite.Sprite] + (setv fixed False) + (setv SPEED 5) + (setv JUMP_IMPULSE 5) + + (defn __init__ [self tile initial-x initial-y] + (.__init__ (super)) + (setv self.id 1) + (setv self.surf (pygame.Surface #(TILE_SIZE TILE_SIZE))) + (.blit self.surf tile #(0 0)) + (setv self.rect (.get_rect self.surf))) + + (defn move [self dx dy] + (.move_ip self.rect dx dy))) + +(setv screen (pygame.display.set_mode #((* TILE_SCALING 640) (* TILE_SCALING 480)))) (setv clock (pygame.time.Clock)) (setv running True) +(setv tiles (TileSet "assets/tileset_legacy.png" TILE_SIZE TILE_SIZE 1)) + +(setv player (Player (get tiles.tiles 28) 0 0)) +(setv sprites-group []) +(.append sprites-group player) +(setv level (load_pygame "assets/level-1.tmx")) + +(pprint (next (.tiles (get level.layers 1)))) + +(for [tiledef (enumerate (.tiles (get level.layers 1)))] + (.append sprites-group (LevelTile (get tiledef 0) #* (get tiledef 1)))) + + +(setv ongoing_inputs []) + (while running - (when (any - (lfor event (pygame.event.get) - (= event.type pygame.QUIT))) - (setv running False)) - (.fill screen "purple") + (for [event (pygame.event.get)] + (match event.type + pygame.QUIT (setv running False) + pygame.KEYDOWN (.append ongoing_inputs event.key) + pygame.KEYUP (.remove ongoing_inputs event.key))) + + (for [inp ongoing_inputs] + (match inp + pygame.K_w (.move player 0 (* -1 player.JUMP_IMPULSE)) + pygame.K_a (.move player (* -1 player.SPEED) 0) + pygame.K_s (.move player 0 1) + pygame.K_d (.move player player.SPEED 0))) + + (.fill screen "#472d3c") + + ;; Apply systems + (for [sprite sprites-group] + (apply-gravity sprite sprites-group) + (apply-collisions sprite sprites-group)) + + (for [sprite sprites-group] + (.blit screen sprite.surf sprite.rect)) + (pygame.display.flip) - (.tick clock 60)) + (.tick clock 60) + ) (pygame.quit) diff --git a/untitled.tiled-project b/untitled.tiled-project new file mode 100644 index 0000000..d0eb592 --- /dev/null +++ b/untitled.tiled-project @@ -0,0 +1,14 @@ +{ + "automappingRulesFile": "", + "commands": [ + ], + "compatibilityVersion": 1100, + "extensionsPath": "extensions", + "folders": [ + "." + ], + "properties": [ + ], + "propertyTypes": [ + ] +} diff --git a/untitled.tiled-session b/untitled.tiled-session new file mode 100644 index 0000000..980bb24 --- /dev/null +++ b/untitled.tiled-session @@ -0,0 +1,39 @@ +{ + "Map/SizeTest": { + "height": 4300, + "width": 2 + }, + "activeFile": "assets/untitled.tmx", + "expandedProjectPaths": [ + "assets", + "." + ], + "fileStates": { + "assets/tileset_colored.tsx": { + "scaleInDock": 1.5, + "scaleInEditor": 1 + }, + "assets/untitled.tmx": { + "scale": 2.09, + "selectedLayer": 0, + "viewCenter": { + "x": 240.19138755980865, + "y": 160.04784688995215 + } + } + }, + "map.height": 30, + "map.lastUsedFormat": "tmx", + "map.tileHeight": 16, + "map.tileWidth": 16, + "map.width": 40, + "openFiles": [ + "assets/tileset_colored.tsx", + "assets/untitled.tmx" + ], + "project": "untitled.tiled-project", + "recentFiles": [ + "assets/tileset_colored.tsx", + "assets/untitled.tmx" + ] +} -- cgit v1.2.3