diff options
author | Gene Pasquet <dev@etenil.net> | 2025-05-16 19:57:20 +0100 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2025-05-16 19:57:20 +0100 |
commit | c44bcbe373f70a5a82da1117cc5239e323f104f3 (patch) | |
tree | 9606a3dc1827b21768c4c42de8eb851b3f4e644d | |
parent | cbb2602ed9dedf973ddbf6d769b11c666de2ea22 (diff) |
WIP again
-rw-r--r-- | assets/level-0.tmx | 4 | ||||
-rw-r--r-- | assets/level-1.tmx | 55 | ||||
-rw-r--r-- | assets/tileset_colored.tsx | 4 | ||||
-rw-r--r-- | assets/tileset_legacy.png | bin | 26124 -> 0 bytes | |||
-rw-r--r-- | assets/untitled.tiled-project | 13 | ||||
-rw-r--r-- | assets/untitled.tiled-session | 13 | ||||
-rw-r--r-- | assets/untitled.tmx | 28 | ||||
-rw-r--r-- | macroknight.tiled-project (renamed from untitled.tiled-project) | 0 | ||||
-rw-r--r-- | macroknight.tiled-session | 39 | ||||
-rw-r--r-- | src/macroknight/entities.hy | 17 | ||||
-rw-r--r-- | src/macroknight/game.hy | 231 | ||||
-rw-r--r-- | src/macroknight/systems.hy | 23 | ||||
-rw-r--r-- | src/macroknight/tiles.hy | 12 | ||||
-rw-r--r-- | untitled.tiled-session | 59 |
14 files changed, 229 insertions, 269 deletions
diff --git a/assets/level-0.tmx b/assets/level-0.tmx index 6ddf38f..3655221 100644 --- a/assets/level-0.tmx +++ b/assets/level-0.tmx @@ -1,6 +1,5 @@ <?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="8" nextobjectid="4"> - <tileset firstgid="1" source="tileset_colored.tsx"/> +<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="40" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="5"> <tileset firstgid="1025" source="monochrome_transparent.tsx"/> <layer id="3" name="ground" width="40" height="30"> <data encoding="csv"> @@ -43,5 +42,6 @@ <property name="text" value="hit space to start a macro"/> </properties> </object> + <object id="4" name="goal" type="Goal" x="560.48" y="287.914" width="16" height="16"/> </objectgroup> </map> diff --git a/assets/level-1.tmx b/assets/level-1.tmx index fae100e..9ec19ce 100644 --- a/assets/level-1.tmx +++ b/assets/level-1.tmx @@ -1,39 +1,42 @@ <?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="5" nextobjectid="1"> - <tileset firstgid="1" source="tileset_colored.tsx"/> - <tileset firstgid="1025" source="monochrome_transparent.tsx"/> +<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="40" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="3"> + <tileset firstgid="1" source="monochrome_transparent.tsx"/> <layer id="3" name="ground" width="40" height="30"> <data encoding="csv"> -0,0,0,0,1192,1240,0,0,0,0,1239,1193,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1192,1240,0,0,1239,1193,0,0,0,0, -0,0,0,1192,1240,0,0,0,0,0,0,1239,1193,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1192,1240,0,0,0,0,1239,1193,0,0,1192, -0,0,1192,1240,0,0,0,0,0,0,0,0,1239,1193,0,0,0,0,0,0,0,0,1192,1193,0,0,0,0,1192,1240,0,0,0,0,0,0,1239,1193,1192,1240, -0,1192,1240,0,0,0,0,0,0,0,0,0,0,1239,1193,0,0,1192,1193,0,0,1192,1240,1239,1193,0,0,1192,1240,0,0,0,0,0,0,0,0,1239,1193,0, -1192,1240,0,0,0,0,0,0,0,0,0,0,0,0,1239,1193,1192,1240,1239,1193,1192,1240,0,0,1239,1193,1192,1240,0,0,0,0,0,0,0,0,0,0,1239,1193, -1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1239,1193,0,0,1192,1240,0,0,0,0,1239,1240,0,0,0,0,0,0,0,0,0,0,0,0,1239, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1239,1193,1192,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,0,0,0,0,0,0,0,0,0,0,0,1239,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,168,216,0,0,0,0,215,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,216,0,0,215,169,0,0,0,0, +0,0,0,168,216,0,0,0,0,0,0,215,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,216,0,0,0,0,215,169,0,0,168, +0,0,168,216,0,0,0,0,0,0,0,0,215,169,0,0,0,0,0,0,0,0,168,169,0,0,0,0,168,216,0,0,0,0,0,0,215,169,168,216, +0,168,216,0,0,0,0,0,0,0,0,0,0,215,169,0,0,168,169,0,0,168,216,215,169,0,0,168,216,0,0,0,0,0,0,0,0,215,169,0, +168,216,0,0,0,0,0,0,0,0,0,0,0,0,215,169,168,216,215,169,168,216,0,0,215,169,168,216,0,0,0,0,0,0,0,0,0,0,215,169, +216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,169,0,0,168,216,0,0,0,0,215,216,0,0,0,0,0,0,0,0,0,0,0,0,215, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,169,168,216,0,0,0,0,0,0,0,0,0,0,0,0,0,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,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,1043,1044,1044,1044,1044,1044,1045,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,1092,1025,1025,1025,1025,1025,1094,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,1239,1045,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,1025,1239,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, +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,688,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,844,0,0,0, +844,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,845,546,546,546, +846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,1,1,1,1,1,70,0,0,0,0,0,0,0,0,844,844,844,844, +844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0,0,0,0,0,215,21,0,0,0,0,0,0,0,444,844,844,844, +548,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0,0,0,69,0,1,215,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,216,0,0,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,21,0,0,0,0,0,0,0,0,0,19,216,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,215,20,20,20,20,20,20,20,20,20,216,0,0,0,0,0,0,0,0,0,0,0,69,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,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,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,69,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,69,0,0,0,0,69,0,0,0,0, +0,0,0,0,69,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,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,69,0,0,0,0,0,0,0,0,0,0 </data> </layer> + <objectgroup id="5" name="objects" offsetx="0" offsety="0"> + <object id="1" name="goal" type="Goal" x="560.182" y="287.636" width="16" height="16"/> + <object id="2" name="player" type="Player" gid="29" x="209.182" y="289.697" width="16" height="16"/> + </objectgroup> </map> diff --git a/assets/tileset_colored.tsx b/assets/tileset_colored.tsx deleted file mode 100644 index 4d0ee20..0000000 --- a/assets/tileset_colored.tsx +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<tileset version="1.2" tiledversion="2018.12.22" name="colored" tilewidth="16" tileheight="16" spacing="1" tilecount="1024" columns="32">
- <image source="tileset_legacy.png" width="543" height="543"/>
-</tileset>
diff --git a/assets/tileset_legacy.png b/assets/tileset_legacy.png Binary files differdeleted file mode 100644 index 6c3751c..0000000 --- a/assets/tileset_legacy.png +++ /dev/null diff --git a/assets/untitled.tiled-project b/assets/untitled.tiled-project deleted file mode 100644 index ee4f73b..0000000 --- a/assets/untitled.tiled-project +++ /dev/null @@ -1,13 +0,0 @@ -{ - "automappingRulesFile": "", - "commands": [ - ], - "compatibilityVersion": 1100, - "extensionsPath": "extensions", - "folders": [ - ], - "properties": [ - ], - "propertyTypes": [ - ] -} diff --git a/assets/untitled.tiled-session b/assets/untitled.tiled-session deleted file mode 100644 index a3ce475..0000000 --- a/assets/untitled.tiled-session +++ /dev/null @@ -1,13 +0,0 @@ -{ - "activeFile": "", - "expandedProjectPaths": [ - "." - ], - "fileStates": { - }, - "openFiles": [ - ], - "project": "untitled.tiled-project", - "recentFiles": [ - ] -} diff --git a/assets/untitled.tmx b/assets/untitled.tmx deleted file mode 100644 index 401c2fd..0000000 --- a/assets/untitled.tmx +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<map version="1.10" tiledversion="1.11.2" orientation="orthogonal" renderorder="right-down" width="30" height="20" tilewidth="16" tileheight="16" infinite="0" nextlayerid="2" nextobjectid="1"> - <tileset firstgid="1" source="tileset_colored.tsx"/> - <layer id="1" name="Tile Layer 1" width="30" height="20"> - <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, -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 -</data> - </layer> -</map> diff --git a/untitled.tiled-project b/macroknight.tiled-project index d0eb592..d0eb592 100644 --- a/untitled.tiled-project +++ b/macroknight.tiled-project diff --git a/macroknight.tiled-session b/macroknight.tiled-session new file mode 100644 index 0000000..95f22d5 --- /dev/null +++ b/macroknight.tiled-session @@ -0,0 +1,39 @@ +{ + "activeFile": "assets/level-0.tmx", + "expandedProjectPaths": [ + ".", + "assets" + ], + "fileStates": { + "assets/level-0.tmx": { + "scale": 1.939583333333333, + "selectedLayer": 0, + "viewCenter": { + "x": 320.4296455424276, + "y": 314.7583243823846 + } + }, + "assets/level-1.tmx": { + "scale": 2.1404687499999997, + "selectedLayer": 0, + "viewCenter": { + "x": 320.25695306226737, + "y": 240.3679100664282 + } + }, + "assets/monochrome_transparent.tsx": { + "scaleInDock": 1 + }, + "assets/tileset_colored.tsx": { + "scaleInDock": 1 + } + }, + "openFiles": [ + "assets/level-0.tmx" + ], + "project": "macroknight.tiled-project", + "recentFiles": [ + "assets/level-1.tmx", + "assets/level-0.tmx" + ] +} diff --git a/src/macroknight/entities.hy b/src/macroknight/entities.hy index 1ac59ce..50d774c 100644 --- a/src/macroknight/entities.hy +++ b/src/macroknight/entities.hy @@ -7,14 +7,14 @@ ;;; Game entity (setv _fixed False) - (defn __init__ [self id tile tile-size initial-pos] + (defn __init__ [self id tile tile-size x y] (.__init__ (super)) (setv self.id id) (setv self._surf (Surface #(tile-size tile-size))) (.blit self._surf tile #(0 0)) (setv self._rect (.get_rect self._surf - :left (* (get initial-pos 0) tile-size) - :top (* (get initial-pos 1) tile-size)))) + :left (* x tile-size) + :top (* y tile-size)))) (defn [property] fixed [self] self._fixed) @@ -28,21 +28,24 @@ (defclass LevelTile [Entity] (setv _fixed True) - (defn __init__ [self id tile-size scaling x y tile] + (defn __init__ [self id tile tile-size x y scaling] (let [tile-width (* (.get_width tile) scaling) tile-height (* (.get_height tile) scaling) tile_ (if (!= scaling 1) (pygame.transform.scale tile #(tile-width tile-height)) tile)] - (.__init__ (super) id tile_ tile-size #(x y))))) + (.__init__ (super) id tile_ tile-size x y)))) + +(defclass Goal [Entity] + (setv _fixed True)) (defclass Player [Entity] (setv SPEED 3) (setv JUMP_IMPULSE 10) (setv MAX_JUMPING 100) - (defn __init__ [self id tile tile-size initial-x initial-y] - (.__init__ (super) id tile tile-size #(initial-x initial-y)) + (defn __init__ [self id tile tile-size x y] + (.__init__ (super) id tile tile-size x y) (setv self.jumping False) (setv self.jump-move 0)) diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index 1c10c95..a8f6c62 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -1,8 +1,9 @@ (require hy) (require hyrule *) (import pygame + pprint [pprint] pytmx.util_pygame [load_pygame] - entities [Player LevelTile] + entities [Player LevelTile Goal] tiles [TileSet draw-tile] utils [neg] text [render-text] @@ -20,120 +21,150 @@ (setv clock (pygame.time.Clock)) (setv running True) (setv tileset (TileSet "assets/monochrome-transparent.png" TILE_SCALING TILE_SIZE TILE_SIZE 1)) -(setv sprites-group []) -(setv level (load_pygame "assets/level-0.tmx")) +(setv levels [(load_pygame "assets/level-0.tmx") + (load_pygame "assets/level-1.tmx")]) +(setv level-id 0) (defn abs-to-tile-index [abs-id] (int (floor (/ abs-id TILE_SIZE)))) -(setv player-pos - (let [player-objects (lfor ent (get level.layers 1) :if (= ent.type "Player") ent)] - (if (any player-objects) - (let [player-object (get player-objects 0)] - #((abs-to-tile-index player-object.x) - (abs-to-tile-index player-object.y))) - #(5 5)))) -(setv player (Player 1 (get tileset.tiles 28) TILE_SIZE #* player-pos)) -(.append sprites-group player) -(setv macro-input-mode False) -(setv macro-wait-time 0) -(setv macro-commands [None None None]) - -(for [tiledef (enumerate (.tiles (get level.layers 0)))] - (.append sprites-group (LevelTile (get tiledef 0) TILE_SIZE TILE_SCALING #* (get tiledef 1)))) - -(setv ongoing_inputs []) - -(while running - (for [event (pygame.event.get)] - (case event.type - pygame.QUIT (setv running False) - pygame.KEYDOWN (if (= event.key pygame.K_ESCAPE) - (setv running False) - (if macro-input-mode - (when (in event.key [pygame.K_a pygame.K_w pygame.K_a pygame.K_s pygame.K_d]) - (setv (get macro-commands (.index macro-commands None)) event.key)) - (if (and (= event.key pygame.K_SPACE) (= macro-wait-time 0)) - (setv macro-input-mode True) - (.append ongoing_inputs event.key)))) - pygame.KEYUP (when (in event.key ongoing_inputs) - (.remove ongoing_inputs event.key)))) - - (.fill screen "#000000") - - ;; Render text objects + +(setv game-running True) + + +(while game-running + + ;; Load the level + (setv level (get levels level-id)) + (setv entities []) + (setv player-pos #(5 5)) (for [item (get level.layers 1)] - (when (= item.type "Text") - (render-text screen - tileset - (.upper item.text) - (abs-to-tile-index item.x) - (abs-to-tile-index item.y)))) - - - (if macro-input-mode - ;; If the commands list is full - (if (get macro-commands -1) - ;; Process commands - (do - (let [#(command-id command) (get (lfor command (enumerate macro-commands) :if (get command 1) command) 0)] - (case command - pygame.K_a (.move player #((neg (* 2 TILE_SIZE)) 0)) - pygame.K_s (.move player #(0 TILE_SIZE)) - pygame.K_w (.move player #(0 (neg (/ player.MAX_JUMPING 2)))) - pygame.K_d (.move player #((* 2 TILE_SIZE) 0))) - (if (= command-id (- (len macro-commands) 1)) - (do (setv macro-commands [None None None]) - (setv macro-input-mode False) - (setv macro-wait-time (+ (pygame.time.get_ticks) MACRO_COOLDOWN))) - (setv (get macro-commands command-id) None))) - (pygame.time.wait MACRO_STEP_WAIT)) - - ;; If there's still space in the commands list - (for [#(num command) (enumerate macro-commands)] - (let [x-pos (+ 4 num)] - (case command - pygame.K_w (draw-tile screen tileset 1057 x-pos 5) - pygame.K_d (draw-tile screen tileset 1058 x-pos 5) - pygame.K_s (draw-tile screen tileset 1059 x-pos 5) - pygame.K_a (draw-tile screen tileset 1060 x-pos 5) - None (draw-tile screen tileset 725 x-pos 5))))) - - ;; Not in macro mode - (do - (when (> macro-wait-time 0) - (let [progress (round (* 3 (/ (- (pygame.time.get_ticks) macro-wait-time) MACRO_COOLDOWN)))] - (for [indicator (range 3)] - (draw-tile - screen tileset 725 )))) - (for [inp ongoing_inputs] - (case inp - 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)))) + (let [tile-x (abs-to-tile-index item.x) + tile-y (abs-to-tile-index item.y)] + (case item.type + "Player" (setv player-pos #(tile-x tile-y)) + "Goal" (.append entities + (Goal (len entities) + (get tileset.tiles 0) + TILE_SIZE + (abs-to-tile-index item.x) + (abs-to-tile-index item.y)))))) + + (setv player-pos + (let [player-objects (lfor ent (get level.layers 1) :if (= ent.type "Player") ent)] + (if (any player-objects) + (let [player-object (get player-objects 0)] + #((abs-to-tile-index player-object.x) + (abs-to-tile-index player-object.y))) + #(5 5)))) + (setv player (Player 1 (get tileset.tiles 28) TILE_SIZE #* player-pos)) + (.append entities player) + (setv macro-input-mode False) + (setv macro-wait-time 0) + (setv macro-commands [None None None]) + (for [#(id tiledef) (enumerate (.tiles (get level.layers 0)))] + (let [x (get tiledef 0) + y (get tiledef 1) + tile (get tiledef 2)] + (.append entities (LevelTile id tile TILE_SIZE x y TILE_SCALING)))) + + (setv ongoing_inputs []) + + (pprint (get entities 0)) + + (while running + (for [event (pygame.event.get)] + (case event.type + pygame.QUIT (do + (setv running False) + (setv game-running False)) + pygame.KEYDOWN (if (= event.key pygame.K_ESCAPE) + (do + (setv running False) + (setv game-running False)) + (if macro-input-mode + (when (in event.key [pygame.K_a pygame.K_w pygame.K_a pygame.K_s pygame.K_d]) + (setv (get macro-commands (.index macro-commands None)) event.key)) + (if (and (= event.key pygame.K_SPACE) (= macro-wait-time 0)) + (setv macro-input-mode True) + (.append ongoing_inputs event.key)))) + pygame.KEYUP (when (in event.key ongoing_inputs) + (.remove ongoing_inputs event.key)))) + + (.fill screen "#000000") + + ;; Render special objects + (for [item (get level.layers 1)] + (case item.type + "Text" (render-text screen + tileset + (.upper item.text) + (abs-to-tile-index item.x) + (abs-to-tile-index item.y)))) + + (if macro-input-mode + ;; If the commands list is full + (if (get macro-commands -1) + ;; Process commands + (do + (let [#(command-id command) (get (lfor command (enumerate macro-commands) :if (get command 1) command) 0)] + (case command + pygame.K_a (.move player #((neg (* 2 TILE_SIZE)) 0)) + pygame.K_s (.move player #(0 TILE_SIZE)) + pygame.K_w (.move player #(0 (neg (/ player.MAX_JUMPING 2)))) + pygame.K_d (.move player #((* 2 TILE_SIZE) 0))) + (if (= command-id (- (len macro-commands) 1)) + (do (setv macro-commands [None None None]) + (setv macro-input-mode False) + (setv macro-wait-time (+ (pygame.time.get_ticks) MACRO_COOLDOWN))) + (setv (get macro-commands command-id) None))) + (pygame.time.wait MACRO_STEP_WAIT)) + + ;; If there's still space in the commands list + (for [#(num command) (enumerate macro-commands)] + (let [x-pos (+ 4 num)] + (case command + pygame.K_w (draw-tile screen tileset 1057 x-pos 5) + pygame.K_d (draw-tile screen tileset 1058 x-pos 5) + pygame.K_s (draw-tile screen tileset 1059 x-pos 5) + pygame.K_a (draw-tile screen tileset 1060 x-pos 5) + None (draw-tile screen tileset 725 x-pos 5))))) + + ;; Not in macro mode + (do + (when (> macro-wait-time 0) + (let [progress (round (* 3 (/ (- (pygame.time.get_ticks) macro-wait-time) MACRO_COOLDOWN)))] + (for [indicator (range 3)] + (draw-tile + screen tileset 725 )))) + (for [inp ongoing_inputs] + (case inp + 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)))) (when (any ongoing_inputs) - (for [sprite sprites-group] - (apply-collisions sprite sprites-group))) + (for [entity entities] + (apply-collisions entity entities))) (.flush player) ;; Apply systems - (for [sprite sprites-group] - (apply-gravity sprite sprites-group) - (apply-collisions sprite sprites-group)) + (for [entity entities] + (apply-gravity entity entities) + (apply-collisions entity entities)) (.flush player))) - (for [sprite sprites-group] - (.blit screen sprite.surf sprite.rect)) + (for [entity entities] + (.blit screen entity.surf entity.rect)) - (pygame.display.flip) + (pygame.display.flip) - (when (or (= 0 macro-wait-time) - (< (- (pygame.time.get_ticks) macro-wait-time) 0)) - (setv macro-wait-time 0)) + (when (or (= 0 macro-wait-time) + (< (- (pygame.time.get_ticks) macro-wait-time) 0)) + (setv macro-wait-time 0)) - (.tick clock 60)) + (.tick clock 60))) (pygame.quit) diff --git a/src/macroknight/systems.hy b/src/macroknight/systems.hy index 2762247..b02bc50 100644 --- a/src/macroknight/systems.hy +++ b/src/macroknight/systems.hy @@ -6,15 +6,14 @@ (.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-rect (.clip entity.rect ent.rect) - move-x (get entity.total-move 0) - move-y (get entity.total-move 1)] - (when (!= move-x 0) - (.move entity #((* (if (> move-x 0) -1 1) collision-rect.width) 0))) - (when (!= move-y 0) - (.move entity #(0 (* (if (> move-y 0) -1 1) collision-rect.height))))) - (.ground entity)))) + (when (not entity.fixed) + (for [ent (gfor enti entities :if (!= enti.id entity.id) enti)] + (when (.colliderect entity.rect ent.rect) + (let [collision-rect (.clip entity.rect ent.rect) + move-x (get entity.total-move 0) + move-y (get entity.total-move 1)] + (when (!= move-x 0) + (.move entity #((* (if (> move-x 0) -1 1) collision-rect.width) 0))) + (when (!= move-y 0) + (.move entity #(0 (* (if (> move-y 0) -1 1) collision-rect.height))))) + (.ground entity))))) diff --git a/src/macroknight/tiles.hy b/src/macroknight/tiles.hy index f9e112d..2345e17 100644 --- a/src/macroknight/tiles.hy +++ b/src/macroknight/tiles.hy @@ -22,15 +22,17 @@ tile))))) (defclass MiniSprite [pygame.sprite.Sprite] - (defn __init__ [self tile tile-size x y] + (defn __init__ [self tile tile-size x y [goal False]] (.__init__ (super)) (setv self.surf (pygame.Surface #(tile-size tile-size))) (.blit self.surf tile #(0 0)) (setv self.rect (.get_rect self.surf :left (* x tile-size) - :top (* y tile-size))))) + :top (* y tile-size))) + (setv self.goal goal))) -(defn draw-tile [target tileset tile-id x y] +(defn draw-tile [target tileset tile-id #* args #** kwargs] (let [tile (get tileset.tiles tile-id) - sprite (MiniSprite tile tileset.tile-w x y)] - (.blit target sprite.surf sprite.rect))) + sprite (MiniSprite tile tileset.tile-w #* args #** kwargs)] + (.blit target sprite.surf sprite.rect) + sprite)) diff --git a/untitled.tiled-session b/untitled.tiled-session deleted file mode 100644 index d7e4e07..0000000 --- a/untitled.tiled-session +++ /dev/null @@ -1,59 +0,0 @@ -{ - "Map/SizeTest": { - "height": 4300, - "width": 2 - }, - "activeFile": "assets/monochrome_transparent.tsx", - "expandedProjectPaths": [ - "assets", - "." - ], - "fileStates": { - "assets/level-1.tmx": { - "scale": 2, - "selectedLayer": 0, - "viewCenter": { - "x": 233.25, - "y": 272.25 - } - }, - "assets/monochrome-transparent.tsx": { - "scaleInDock": 1, - "scaleInEditor": 2 - }, - "assets/monochrome_transparent.tsx": { - "scaleInDock": 2, - "scaleInEditor": 2 - }, - "assets/tileset_colored.tsx": { - "scaleInDock": 2, - "scaleInEditor": 2 - }, - "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/level-1.tmx", - "assets/monochrome_transparent.tsx" - ], - "project": "untitled.tiled-project", - "recentFiles": [ - "assets/tileset_colored.tsx", - "assets/level-1.tmx", - "assets/monochrome_transparent.tsx", - "assets/monochrome-transparent.tsx", - "assets/untitled.tmx" - ] -} |