Add tileset info in level pack
parent
abdf246382
commit
188c2e30a5
|
@ -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)
|
for (lvls = 0; lvls < n_levels; ++lvls)
|
||||||
{
|
{
|
||||||
printf("Parsing level %u\n", lvls);
|
printf("Parsing level %u\n", lvls);
|
||||||
output.size = 38;
|
output.size = 40;
|
||||||
output.pos = 0;
|
output.pos = 0;
|
||||||
|
|
||||||
do
|
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].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].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].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';
|
pack_info->pack.levels[lvls].level_name[31] = '\0';
|
||||||
printf("Level name: %s\n", pack_info->pack.levels[lvls].level_name);
|
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);
|
printf("WxH: %u %u\n", pack_info->pack.levels[lvls].width, pack_info->pack.levels[lvls].height);
|
||||||
|
|
|
@ -59,6 +59,7 @@ typedef struct LevelMap
|
||||||
uint16_t width;
|
uint16_t width;
|
||||||
uint16_t height;
|
uint16_t height;
|
||||||
uint16_t n_chests;
|
uint16_t n_chests;
|
||||||
|
uint16_t flags; // In case of extras
|
||||||
LevelTileInfo_t* tiles;
|
LevelTileInfo_t* tiles;
|
||||||
}LevelMap_t;
|
}LevelMap_t;
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,11 @@ with open(converted_filename, 'wb+') as out_file:
|
||||||
level_name = level["identifier"]
|
level_name = level["identifier"]
|
||||||
print("Parsing level", level_name)
|
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 = {}
|
level_layout = {}
|
||||||
entity_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
|
# Dimensions of each level is obtained via __cWid and __cHei. Get the __gridSize as well
|
||||||
width = level_layout["__cWid"]
|
width = level_layout["__cWid"]
|
||||||
height = level_layout["__cHei"]
|
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
|
# Create a W x H array of tile information
|
||||||
n_tiles = width * height
|
n_tiles = width * height
|
||||||
tiles_info = [[0,0,0] for _ in range(n_tiles)]
|
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"]
|
x,y = ent["__grid"]
|
||||||
tiles_info[y*width + x][0] = ENUMIDS_TILETYPE_MAPPING[ent["__identifier"]]
|
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:
|
for tile in tiles_info:
|
||||||
out_file.write(struct.pack("<3Bx", *tile))
|
out_file.write(struct.pack("<3Bx", *tile))
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,13 @@ bool load_level_tilemap(LevelScene_t* scene, unsigned int level_num)
|
||||||
scene->data.coins.current = 0;
|
scene->data.coins.current = 0;
|
||||||
scene->data.coins.total = lvl_map.n_chests;
|
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);
|
clear_all_game_entities(scene);
|
||||||
|
|
||||||
for (size_t i = 0; i < scene->data.tilemap.n_tiles;i++)
|
for (size_t i = 0; i < scene->data.tilemap.n_tiles;i++)
|
||||||
|
|
Loading…
Reference in New Issue