From e0e4140c9b9eb23aff3cbb34eb60abecb5e9f159 Mon Sep 17 00:00:00 2001 From: SlyVTT Date: Tue, 1 Aug 2023 22:26:59 +0200 Subject: [PATCH] Made map importation from tmx a bit cleaner + map structure slightly lighter --- assets/converters.py | 81 ++++++++++++++++++++++++++++++++++++-------- assets/level0.tmx | 14 ++++---- src/mapstruct.h | 10 +++--- 3 files changed, 80 insertions(+), 25 deletions(-) diff --git a/assets/converters.py b/assets/converters.py index a17ab53..7a9cb8b 100644 --- a/assets/converters.py +++ b/assets/converters.py @@ -40,29 +40,82 @@ def convert_map(input, output, params, target): nbTilelayer = ["data" in i for i in data["layers"]].count(True) - 1 print( nbTilelayer) + #index of the various layers (may change from one map to another) + layer_walkable = 0 + layer_foreground = 0 + layer_background = 0 + + + #create the structure of the map structMap = fxconv.Structure() - structMap += fxconv.u32(w) + fxconv.u32(h) + fxconv.u32(nbTilelayer) + structMap += fxconv.u16(w) + fxconv.u16(h) + fxconv.u16(nbTilelayer) + structMap += fxconv.u16(tileset_size) structMap += fxconv.ref(f"img_{nameTilesetFree}") - structMap += fxconv.u32(tileset_size) + + + #extraction of the data contained in the layer "Walkable" of the map + for i in range(nbTilelayer+1): + datavalid = data["layers"][i] + if datavalid["name"]=="Walkable": + layer_walkable = i + print( "Walkable Tile Data in layer : ", layer_walkable) + break + elif i==nbTilelayer: + printf( "ERROR : No Walkable layer data !!!" ) + walk_data = bytes() - layer = data["layers"][nbTilelayer] + layer = data["layers"][layer_walkable] for tile in layer["data"]: - if tile == 0: walk_data += fxconv.u16(tile) - else : walk_data += fxconv.u16(tile-indexWalkable) - + #print( tile ) + if tile == 0: walk_data += fxconv.u8(tile) #if walkable_data = 0 then it is a blanck cell so nothing to change + else : walk_data += fxconv.u8(tile-indexWalkable) #if !=0 than we need to shift the tile number by considering the first tileID (given by indexwalkable) structMap += fxconv.ptr(walk_data) - #generate the array of tiles from the layer - for i in range(nbTilelayer): - print(i) - layer_data = bytes() - layer = data["layers"][i] - for tile in layer["data"]: - layer_data += fxconv.u16(tile-1) - structMap += fxconv.ptr(layer_data) + #extraction of the data contained in the layer "Background" and "Foreground" of the map + + + #import the Background layer of the map + for i in range(nbTilelayer+1): + datavalid = data["layers"][i] + if datavalid["name"]=="Background": + layer_background = i + print( "Background Tile Data in layer : ", layer_background) + break + elif i==nbTilelayer: + printf( "ERROR : No Background layer data !!!" ) + + + layer_data = bytes() + layer = data["layers"][layer_background] + for tile in layer["data"]: + layer_data += fxconv.u16(tile-1) + structMap += fxconv.ptr(layer_data) + + + + #import the foreground layer of the map + for i in range(nbTilelayer+1): + datavalid = data["layers"][i] + if datavalid["name"]=="Foreground": + layer_foreground = i + print( "Foreground Tile Data in layer : ", layer_foreground) + break + elif i==nbTilelayer: + printf( "ERROR : No Foreground layer data !!!" ) + + + layer_data = bytes() + layer = data["layers"][layer_foreground] + for tile in layer["data"]: + layer_data += fxconv.u16(tile-1) + structMap += fxconv.ptr(layer_data) + + + + #generate ! fxconv.elf(structMap, output, "_" + params["name"], **target) diff --git a/assets/level0.tmx b/assets/level0.tmx index e51ad31..98b7b8f 100644 --- a/assets/level0.tmx +++ b/assets/level0.tmx @@ -1,5 +1,5 @@ - + @@ -14,7 +14,7 @@ 257,2,2,385,2,2,385,2,265,266,2,2,208,209,352,353,257,2,2,2,2,2,2,297,298,299,300,2,2,2,2,25,26,27,27,97,98,99,98,99,100,26,26,27,28,131,2,2, 281,176,2,2,2,2,2,385,289,290,2,2,232,233,376,377,281,2,326,2,154,153,190,2,2,2,2,2,2,2,2,49,2,2,2,121,59,60,60,61,124,2,2,2,52,132,2,2, 2,2,2,2,2,385,2,2,265,266,2,385,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,297,298,299,300,73,2,2,2,145,83,84,84,85,148,2,2,2,76,132,2,2, -2,2,2,2,326,2,385,2,265,266,2,2,2,2,214,215,2,2,2,2,2,2,190,2,2,2,2,2,2,385,2,49,404,405,2,169,107,108,108,109,172,2,402,403,76,132,2,2, +2,2,2,2,326,2,385,2,265,266,2,2,2,2,2,2,2,2,2,2,2,2,190,2,2,2,2,2,2,385,2,49,404,405,2,169,107,108,108,109,172,2,402,403,76,132,2,2, 2,2,2,2,2,2,2,2,289,290,2,258,259,260,238,239,260,260,261,262,262,263,264,2,2,2,2,2,2,2,385,49,134,135,2,2,2,2,2,2,2,2,134,135,52,132,297,298, 2,2,2,2,2,2,2,2,265,266,2,282,283,284,285,285,285,285,285,285,286,287,288,297,298,299,300,2,117,118,2,73,373,2,217,2,190,373,373,190,2,219,2,373,76,132,2,2, 297,298,299,300,2,2,2,2,290,2,2,306,307,308,309,308,309,308,309,310,310,311,312,131,2,339,340,2,134,135,2,97,98,99,99,98,99,2,2,98,98,99,98,99,100,132,2,2, @@ -42,7 +42,7 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,302,0,130,129,166,0,0,0,0,249,250,251,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,202, 0,0,0,0,278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,202,203,204,273,274,275,276,0,356,357,0,0,0,0,0,0,0,0,354,355,0,0,225,226, 201,202,203,204,302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166,225,226,227,228,0,0,0,0,0,380,381,0,0,0,0,0,0,0,0,378,379,0,0,249,250, -225,226,227,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,250,251,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,273,274, +225,226,227,228,0,0,0,0,0,0,0,0,0,0,214,215,0,0,0,0,0,0,0,249,250,251,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,273,274, 249,250,251,252,201,202,203,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,273,274,275,276,0,93,94,0,0,0,0,0,0,166,0,0,166,0,0,0,0,0,0,0,0, 273,274,275,276,225,226,227,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,203, 0,0,0,0,249,250,251,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,227, @@ -61,7 +61,7 @@ 226,227,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,226,228,273,274,275,276,225,227,228,201,202,203,204,201,202,203,204,0,201,202,203,204,249,250,251,252,273,274,275 - + 0,0,410,410,0,0,0,0,410,410,0,0,0,0,0,0,0,410,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,410,0,0,0,410,410,410,410,0,410,410, 410,410,410,410,410,410,410,410,410,410,410,410,0,0,410,410,410,410,410,0,0,0,0,0,0,0,0,0,410,410,0,0,0,0,0,410,410,410,410,410,410,410,410,410,410,0,410,410, @@ -70,15 +70,15 @@ 410,0,0,0,0,0,0,0,0,0,0,0,410,411,411,411,410,0,0,0,0,0,0,0,410,410,0,0,0,0,0,410,410,410,410,410,410,410,410,410,410,410,410,410,410,0,0,0, 410,0,0,0,0,0,0,0,0,0,0,0,411,411,411,411,410,0,410,0,410,410,410,0,0,0,0,0,0,0,0,410,0,0,0,410,410,410,410,410,410,0,0,0,410,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,410,0,410,0,0,0,410,410,410,410,410,410,0,0,0,410,0,0,0, -0,0,0,0,410,0,0,0,0,0,0,0,0,0,410,410,0,0,0,0,0,0,410,0,0,0,0,0,0,0,0,410,410,410,0,410,410,0,0,410,410,0,410,410,410,0,0,0, +0,0,0,0,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,0,0,0,0,0,0,0,0,410,410,410,0,410,410,0,0,410,410,0,410,410,410,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,410,410,410,410,410,410,410,410,410,410,410,410,0,0,0,0,0,0,0,0,410,0,0,0,0,0,0,0,0,0,0,0,0,410,0,0,410, 0,0,0,0,0,0,0,0,0,0,0,410,410,410,410,410,410,410,410,410,410,410,410,0,410,410,0,0,410,410,0,410,0,0,0,0,410,0,0,410,0,0,0,0,410,0,0,0, 0,410,410,0,0,0,0,0,0,0,0,410,410,410,410,410,410,410,410,410,410,410,410,0,0,410,0,0,0,0,0,410,410,410,410,410,410,0,0,410,410,410,410,410,410,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,410,410,410,410,410,410,410,410,410,410,410,410,0,0,410,410,0,0,0,0,410,410,410,410,410,410,0,0,410,410,410,410,410,410,0,0,0, 0,0,0,0,0,410,410,0,0,0,0,410,410,410,410,410,410,410,410,410,410,410,410,0,0,0,0,0,0,0,0,410,410,410,410,410,410,0,0,410,410,410,410,410,410,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,410,410,410,410,410,410,410,410,410,410,410,410,0,0,0,0,0,0,0,0,410,410,410,410,410,410,0,0,410,410,410,410,0,0,410,410,410, -0,0,0,0,412,412,412,412,412,0,0,410,410,410,410,410,0,0,410,410,410,410,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410, -410,410,0,0,412,412,412,412,412,0,0,0,0,0,0,0,0,0,0,0,0,0,410,410,0,0,0,0,0,0,0,410,0,0,0,410,410,0,0,0,0,0,0,410,0,0,0,410, +0,0,0,0,412,412,412,412,412,0,0,410,410,410,410,410,0,0,410,410,410,410,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +410,410,0,0,412,412,412,412,412,0,0,0,0,0,0,0,0,0,0,0,0,0,410,410,0,0,0,0,0,0,0,410,0,0,0,410,410,0,0,0,0,0,0,410,0,0,0,0, 0,0,0,0,412,412,412,412,412,0,0,410,410,0,0,0,0,0,0,0,0,0,410,410,0,0,410,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,410,410,410, 0,0,0,0,412,412,412,412,412,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,410,410,410, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,410,410,410, diff --git a/src/mapstruct.h b/src/mapstruct.h index 66f3094..571301a 100644 --- a/src/mapstruct.h +++ b/src/mapstruct.h @@ -2,6 +2,7 @@ #define MAPSTRUCT_H #include +#include @@ -17,19 +18,20 @@ typedef struct { typedef struct { /* width, height and the number of layer of the map */ - int w, h, nblayers; + uint16_t w, h; + uint16_t nblayers; + uint16_t tileset_size; /* the tileset to use */ bopti_image_t *tileset; - int tileset_size; /* contain the properties of the tiles */ /* this is given by the layer Walkable of the map in Tiled */ - short *walkable; + uint8_t *walkable; /* list of all the tiles */ - short *layers[]; + uint16_t *layers[]; } Map;