aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/level-0.tmx4
-rw-r--r--assets/level-1.tmx55
-rw-r--r--assets/tileset_colored.tsx4
-rw-r--r--assets/tileset_legacy.pngbin26124 -> 0 bytes
-rw-r--r--assets/untitled.tiled-project13
-rw-r--r--assets/untitled.tiled-session13
-rw-r--r--assets/untitled.tmx28
-rw-r--r--macroknight.tiled-project (renamed from untitled.tiled-project)0
-rw-r--r--macroknight.tiled-session39
-rw-r--r--src/macroknight/entities.hy17
-rw-r--r--src/macroknight/game.hy231
-rw-r--r--src/macroknight/systems.hy23
-rw-r--r--src/macroknight/tiles.hy12
-rw-r--r--untitled.tiled-session59
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
deleted file mode 100644
index 6c3751c..0000000
--- a/assets/tileset_legacy.png
+++ /dev/null
Binary files differ
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"
- ]
-}