diff --git a/engine/assets.c b/engine/assets.c index 3fc4d1d..40e7030 100644 --- a/engine/assets.c +++ b/engine/assets.c @@ -275,7 +275,7 @@ static LevelPack_t* add_level_pack_zst(Assets_t* assets, const char* name, const for (lvls = 0; lvls < n_levels; ++lvls) { printf("Parsing level %u\n", lvls); - output.size = 38; + output.size = 40; output.pos = 0; do @@ -311,6 +311,7 @@ static LevelPack_t* add_level_pack_zst(Assets_t* assets, const char* name, const memcpy(&pack_info->pack.levels[lvls].width, level_decompressor.out_buffer + 32, 2); memcpy(&pack_info->pack.levels[lvls].height, level_decompressor.out_buffer + 34, 2); memcpy(&pack_info->pack.levels[lvls].n_chests, level_decompressor.out_buffer + 36, 2); + memcpy(&pack_info->pack.levels[lvls].flags, level_decompressor.out_buffer + 38, 2); pack_info->pack.levels[lvls].level_name[31] = '\0'; printf("Level name: %s\n", pack_info->pack.levels[lvls].level_name); printf("WxH: %u %u\n", pack_info->pack.levels[lvls].width, pack_info->pack.levels[lvls].height); diff --git a/engine/assets.h b/engine/assets.h index 569ec19..bbdbfc2 100644 --- a/engine/assets.h +++ b/engine/assets.h @@ -59,6 +59,7 @@ typedef struct LevelMap uint16_t width; uint16_t height; uint16_t n_chests; + uint16_t flags; // In case of extras LevelTileInfo_t* tiles; }LevelMap_t; diff --git a/res/ldtk_repacker.py b/res/ldtk_repacker.py index 848bcd8..85d918d 100644 --- a/res/ldtk_repacker.py +++ b/res/ldtk_repacker.py @@ -82,6 +82,11 @@ with open(converted_filename, 'wb+') as out_file: level_name = level["identifier"] print("Parsing level", level_name) + level_metadata = level['fieldInstances'] + level_tileset = 0; + for data in level_metadata: + if data["__identifier"] == "TileSet": + level_tileset = data["__value"] level_layout = {} entity_layout = {} @@ -97,7 +102,7 @@ with open(converted_filename, 'wb+') as out_file: # Dimensions of each level is obtained via __cWid and __cHei. Get the __gridSize as well width = level_layout["__cWid"] height = level_layout["__cHei"] - print(f"Dim.: {width}x{height}") + print(f"Dim.: {width}x{height}. N Tiles: {width * height}") # Create a W x H array of tile information n_tiles = width * height tiles_info = [[0,0,0] for _ in range(n_tiles)] @@ -120,7 +125,7 @@ with open(converted_filename, 'wb+') as out_file: x,y = ent["__grid"] tiles_info[y*width + x][0] = ENUMIDS_TILETYPE_MAPPING[ent["__identifier"]] - out_file.write(struct.pack("<32s3H", level_name.encode('utf-8'), width, height, n_chests)) + out_file.write(struct.pack("<32s4H", level_name.encode('utf-8'), width, height, n_chests, level_tileset)) for tile in tiles_info: out_file.write(struct.pack("<3Bx", *tile)) diff --git a/scenes/scene_systems.c b/scenes/scene_systems.c index e857518..05025f6 100644 --- a/scenes/scene_systems.c +++ b/scenes/scene_systems.c @@ -106,6 +106,13 @@ bool load_level_tilemap(LevelScene_t* scene, unsigned int level_num) scene->data.coins.current = 0; scene->data.coins.total = lvl_map.n_chests; + #define N_SOLID_TILESETS 3 + static const char* SOLID_TILE_SELECTIONS[N_SOLID_TILESETS] = { + "stile0", "stile1", "stile2" + }; + scene->data.selected_solid_tilemap = lvl_map.flags; + scene->data.solid_tile_sprites = get_sprite(&scene->scene.engine->assets, SOLID_TILE_SELECTIONS[lvl_map.flags]); + clear_all_game_entities(scene); for (size_t i = 0; i < scene->data.tilemap.n_tiles;i++)