diff options
author | Astatin <[email protected]> | 2025-06-17 17:42:44 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-06-17 17:42:44 +0200 |
commit | b84a1c2c0ebb484e23753c2f9db8742389fcc99a (patch) | |
tree | 0036439ad1a5cc4c08c4bef79c0255b851a894f2 /scripts | |
parent | a9142d0163f41c89196ea201ce8245899c701b82 (diff) |
loading ldtk tilemaps + adding dungeon structure that can be loaded at runtime
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/parse-ldtkmap.py | 37 |
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) |