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.pngBinary files differ deleted 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" -    ] -} | 
