aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-06-17 17:42:44 +0200
committerAstatin <[email protected]>2025-06-17 17:42:44 +0200
commitb84a1c2c0ebb484e23753c2f9db8742389fcc99a (patch)
tree0036439ad1a5cc4c08c4bef79c0255b851a894f2 /scripts
parenta9142d0163f41c89196ea201ce8245899c701b82 (diff)
loading ldtk tilemaps + adding dungeon structure that can be loaded at runtime
Diffstat (limited to 'scripts')
-rw-r--r--scripts/parse-ldtkmap.py37
1 files changed, 36 insertions, 1 deletions
diff --git a/scripts/parse-ldtkmap.py b/scripts/parse-ldtkmap.py
index 5071515..c80181b 100644
--- a/scripts/parse-ldtkmap.py
+++ b/scripts/parse-ldtkmap.py
@@ -5,14 +5,39 @@ import os
filename = sys.argv[1]
label = "_map_" + os.path.basename(filename)[:-5].replace(".", " ").title().replace(" ", "_")
+check_same_bank = "_same_bank_check_"+label+""
print(label+":")
+
file = open(filename, "r")
ldtk = json.loads(file.read())
intgridLayer = [i for i in ldtk['levels'][0]['layerInstances'] if i['__type'] == 'IntGrid'][0]['intGridCsv']
autoLayer = [i for i in ldtk['levels'][0]['layerInstances'] if i['__type'] == 'AutoLayer'][0]['autoLayerTiles']
+tiles = [i for i in ldtk['levels'][0]['layerInstances'] if i['__type'] == 'Tiles'][0]
+tile_width = tiles['__cWid']
+tile_height = tiles['__cHei']
+grid_tiles = tiles['gridTiles']
+
+tilemap = [0 for _ in range(0, tile_width*tile_height)]
+
+for tile in autoLayer:
+ x = int(tile['px'][0]/8)
+ y = int(tile['px'][1]/8)
+ t = tile['t']
+ topleft = (((t & 0b100) >> 1) | (t & 0b1)) + 0x20
+ topright = ((t & 0b110) >> 1) + 0x24
+ bottomleft = (((t & 0b1000) >> 2) | (t & 0b1)) + 0x28
+ bottomright = (((t & 0b1000) >> 2) | ((t & 0b10) >> 1)) + 0x2c
+
+ tilemap[y * tile_width + x] = topleft
+ tilemap[y * tile_width + x+1] = topright
+ tilemap[(y+1) * tile_width + x] = bottomleft
+ tilemap[(y+1) * tile_width + x+1] = bottomright
+
+for tile in grid_tiles:
+ tilemap[tile['d'][0]] = tile['t']
collision_map = []
for y in range(0, 32):
@@ -23,11 +48,21 @@ for y in range(0, 32):
collision_u8 |= 1 << (7-i)
collision_map.append(collision_u8 ^ 0xff)
+print("\t.collisons:")
for i in range(0, int(len(collision_map) / 16)):
- print("\t.DB ", end="")
+ print("\t\t.DB ", end="")
for j in range(0, 15):
print("${:02x}, ".format(collision_map[i*16+j]), end="")
print("${:02x}".format(collision_map[i*16+15]))
+print("\t.tiles:")
+for i in range(0, int(len(tilemap) / 16)):
+ print("\t\t.DB ", end="")
+ for j in range(0, 15):
+ print("${:02x}, ".format(tilemap[i*16+j]), end="")
+ print("${:02x}".format(tilemap[i*16+15]))
+
+print(".ASSERT", "bank(="+label+")", "bank(.)")
+
# print("============================")
# print(autoLayer)