From 39648a7353094e358b25534862194b1f0b6f320f Mon Sep 17 00:00:00 2001 From: bgiraudr Date: Thu, 26 Aug 2021 01:17:48 +0200 Subject: [PATCH] change the way dialogs work update converters.py thanks to Lephenixnoir now dialogs are inside the map directly on Tiled --- CMakeLists.txt | 8 +-- assets-cg/characters/KikooDX.char | 4 -- assets-cg/characters/Lephenixnoir.char | 4 -- assets-cg/characters/Massena.char | 4 -- assets-cg/characters/PancarteVille.char | 4 -- assets-cg/characters/Tituya.char | 4 -- assets-cg/characters/Tituya2.char | 4 -- assets-cg/characters/fxconv-metadata.txt | 3 - assets-cg/converters.py | 71 ++++++++++++++--------- assets-cg/maps/inside/interior_1.tmx | 10 +++- assets-cg/maps/testCarte.tmx | 34 ++++++++++- assets-cg/maps/tileset.tsx | 14 +++-- assets-cg/tileset.png | Bin 54738 -> 54813 bytes include/character.h | 17 ------ include/game.h | 2 - include/map.h | 6 +- include/talkable.h | 15 +++++ src/character.c | 66 --------------------- src/engine.c | 6 +- src/main.c | 2 - src/map.c | 3 +- src/talkable.c | 41 +++++++++++++ 22 files changed, 160 insertions(+), 162 deletions(-) delete mode 100644 assets-cg/characters/KikooDX.char delete mode 100644 assets-cg/characters/Lephenixnoir.char delete mode 100644 assets-cg/characters/Massena.char delete mode 100644 assets-cg/characters/PancarteVille.char delete mode 100644 assets-cg/characters/Tituya.char delete mode 100644 assets-cg/characters/Tituya2.char delete mode 100644 assets-cg/characters/fxconv-metadata.txt delete mode 100644 include/character.h create mode 100644 include/talkable.h delete mode 100644 src/character.c create mode 100644 src/talkable.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d8c447..9fd19ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,7 @@ add_custom_command( set(SOURCES src/main.c - src/character.c + src/talkable.c src/vec2.c src/game.c src/engine.c @@ -39,12 +39,6 @@ set(ASSETS_cg assets-cg/maps/testCarte.json assets-cg/maps/inside/interior_1.json assets-cg/spritesheet.png - assets-cg/characters/Tituya.char - assets-cg/characters/Lephenixnoir.char - assets-cg/characters/KikooDX.char - assets-cg/characters/Massena.char - assets-cg/characters/Tituya2.char - assets-cg/characters/PancarteVille.char ) fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) diff --git a/assets-cg/characters/KikooDX.char b/assets-cg/characters/KikooDX.char deleted file mode 100644 index 051dbbe..0000000 --- a/assets-cg/characters/KikooDX.char +++ /dev/null @@ -1,4 +0,0 @@ -41 -10 -KikooDX -Je te rassure, pas de Pokemon ! diff --git a/assets-cg/characters/Lephenixnoir.char b/assets-cg/characters/Lephenixnoir.char deleted file mode 100644 index 25cbde8..0000000 --- a/assets-cg/characters/Lephenixnoir.char +++ /dev/null @@ -1,4 +0,0 @@ -50 -30 -Lephenixnoir -Regarde ! Je n'ai pas de reflet ! diff --git a/assets-cg/characters/Massena.char b/assets-cg/characters/Massena.char deleted file mode 100644 index 4773a4c..0000000 --- a/assets-cg/characters/Massena.char +++ /dev/null @@ -1,4 +0,0 @@ -2 -9 -Massena -C'est une belle ville non ? diff --git a/assets-cg/characters/PancarteVille.char b/assets-cg/characters/PancarteVille.char deleted file mode 100644 index 3211b27..0000000 --- a/assets-cg/characters/PancarteVille.char +++ /dev/null @@ -1,4 +0,0 @@ -10 -20 -Planete City -90+E FTW diff --git a/assets-cg/characters/Tituya.char b/assets-cg/characters/Tituya.char deleted file mode 100644 index b45e6dc..0000000 --- a/assets-cg/characters/Tituya.char +++ /dev/null @@ -1,4 +0,0 @@ -37 -32 -Tituya -J'ai toujours aimé ce pont;Pas toi ? diff --git a/assets-cg/characters/Tituya2.char b/assets-cg/characters/Tituya2.char deleted file mode 100644 index d29ec4c..0000000 --- a/assets-cg/characters/Tituya2.char +++ /dev/null @@ -1,4 +0,0 @@ -52 -2 -Tituya -La belle montagne ! diff --git a/assets-cg/characters/fxconv-metadata.txt b/assets-cg/characters/fxconv-metadata.txt deleted file mode 100644 index 6e6b439..0000000 --- a/assets-cg/characters/fxconv-metadata.txt +++ /dev/null @@ -1,3 +0,0 @@ -*.char: - custom-type: character - name_regex: (.*)\.char character_\1 diff --git a/assets-cg/converters.py b/assets-cg/converters.py index 37a38a5..ff5481d 100644 --- a/assets-cg/converters.py +++ b/assets-cg/converters.py @@ -5,9 +5,6 @@ def convert(input, output, params, target): if params["custom-type"] == "map": convert_map(input, output, params, target) return 0 - elif params["custom-type"] == "character": - convert_character(input, output, params, target) - return 0 else: return 1 @@ -16,7 +13,7 @@ def convert_map(input, output, params, target): TILE_SOLID = 1 TILE_DOOR_IN = 2 TILE_DOOR_OUT = 3 - TILE_CHARACTER = 4 + TILE_TALKABLE = 4 TILE_BRIDGE = -1 #only for bridge detection to avoid solid behind @@ -52,8 +49,8 @@ def convert_map(input, output, params, target): value = TILE_DOOR_IN elif type == "door_out": value = TILE_DOOR_OUT - elif type == "character": - value = TILE_CHARACTER + elif type == "talkable": + value = TILE_TALKABLE elif type == "bridge": value = TILE_BRIDGE else: @@ -65,11 +62,40 @@ def convert_map(input, output, params, target): #Extract from the json the width, height and layers of the map w, h = data["width"], data["height"] - nblayer = len(data["layers"]) + indexObjectlayer = None - o = fxconv.ObjectData() - o += fxconv.u32(w) + fxconv.u32(h) + fxconv.u32(nblayer) - o += fxconv.ref(f"img_{nameTilesetFree}") + nbTilelayer = len(data["layers"]) + for i in range(nbTilelayer): + try: + data["layers"][i]["data"] + #nbTileLayer is the number of "true" layers (without ObjectsLayer) + nbTilelayer = i+1 + except KeyError: + indexObjectlayer = i + break + + if indexObjectlayer != None: + nbDialog = len(data["layers"][indexObjectlayer]["objects"]) + else: + nbDialog = 0 + + structMap = fxconv.Structure() + structMap += fxconv.u32(w) + fxconv.u32(h) + fxconv.u32(nbTilelayer) + fxconv.u32(nbDialog) + structMap += fxconv.ref(f"img_{nameTilesetFree}") + + dialogs = fxconv.Structure() + if indexObjectlayer != None: + #generate all of the dialog + for i in data["layers"][indexObjectlayer]["objects"]: + dialogs += fxconv.u32(int(i["x"]/i["width"])) + #Tiled seem to start at the bottom y of the object + #So if tile is 16 px wide, you would start at line y = 1 + dialogs += fxconv.u32(int(i["y"]/i["width"])-1) + for j in i["properties"]: + if(j["value"] == ""): j["value"] = " " + dialogs += fxconv.string(j["value"]) + + structMap += fxconv.ptr(dialogs) #generation of the collision map (take the maximum of the layer except for bridges) #bridges are always walkable @@ -78,7 +104,7 @@ def convert_map(input, output, params, target): maxValue = 0 bridge = False for x in range(w*h): - for i in range(nblayer): + for i in range(nbTilelayer): value = tile_value.get(data["layers"][i]["data"][x]) if value == None: value = TILE_AIR if value > maxValue: maxValue = value @@ -91,27 +117,16 @@ def convert_map(input, output, params, target): info_map += fxconv.u16(maxValue) maxValue = 0 bridge = False - o += fxconv.ref(info_map) + structMap += fxconv.ref(info_map) #generate the array of tiles from the layer - for layer in data["layers"]: + for i in range(nbTilelayer): layer_data = bytes() - + layer = data["layers"][i] for tile in layer["data"]: layer_data += fxconv.u16(tile) - - o += fxconv.ref(layer_data) + + structMap += fxconv.ref(layer_data) #generate ! - fxconv.elf(o, output, "_" + params["name"], **target) - -def convert_character(input, output, params, target): - with open(input,"r") as dialog: - file = dialog.read().splitlines() - - o = fxconv.ObjectData() - o += fxconv.u32((int)(file[0])) + fxconv.u32((int)(file[1])) - o += fxconv.ref(bytes(file[2], 'utf-8') + bytes(1)) #bytes(1) is necessary to end a char - o += fxconv.ref(bytes(file[3], 'utf-8') + bytes(1)) - - fxconv.elf(o, output, "_" + params["name"], **target) \ No newline at end of file + fxconv.elf(structMap, output, "_" + params["name"], **target) \ No newline at end of file diff --git a/assets-cg/maps/inside/interior_1.tmx b/assets-cg/maps/inside/interior_1.tmx index e8bee6f..599ff4f 100644 --- a/assets-cg/maps/inside/interior_1.tmx +++ b/assets-cg/maps/inside/interior_1.tmx @@ -1,5 +1,5 @@ - + @@ -46,4 +46,12 @@ 0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + diff --git a/assets-cg/maps/testCarte.tmx b/assets-cg/maps/testCarte.tmx index f4343a8..6c87ce3 100644 --- a/assets-cg/maps/testCarte.tmx +++ b/assets-cg/maps/testCarte.tmx @@ -1,5 +1,5 @@ - + @@ -88,4 +88,36 @@ 294,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,381,382,383,381,382,383,381,382,383,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets-cg/maps/tileset.tsx b/assets-cg/maps/tileset.tsx index 502667b..e2b2cb0 100644 --- a/assets-cg/maps/tileset.tsx +++ b/assets-cg/maps/tileset.tsx @@ -19,13 +19,13 @@ - - + + - - + + @@ -88,6 +88,12 @@ + + + + + + diff --git a/assets-cg/tileset.png b/assets-cg/tileset.png index 8a202528a601c9b9a40b57a1cebe143847f56fc5..4303121a9cb7d3586d84e1716d6fa3d34f5e4226 100644 GIT binary patch delta 33232 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 delta 33116 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୪` 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 diff --git a/include/character.h b/include/character.h deleted file mode 100644 index a015c59..0000000 --- a/include/character.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -struct Character { - /*the position of the character*/ - int x, y; - /*the name*/ - char *name; - /*the text to say*/ - char *dialog; -}; - -/*draw the dialog of a specified character*/ -void draw_dialog(struct Character *character); -/*find the character using the player's position*/ -struct Character* get_character_xy(struct Character *characters[], int x, int y); -/*get the characters for a specified map*/ -struct Character** get_map_characters(int id); diff --git a/include/game.h b/include/game.h index adddade..9f3f713 100644 --- a/include/game.h +++ b/include/game.h @@ -6,8 +6,6 @@ struct Game { struct Map *map; /*the player*/ struct Player *player; - /*list of all the characters on the map*/ - struct Character **characters; /*the camera*/ struct Camera camera; /*the background color*/ diff --git a/include/map.h b/include/map.h index 1e84ad5..38b2aa8 100644 --- a/include/map.h +++ b/include/map.h @@ -5,9 +5,11 @@ struct Map { /*width, height and the number of layer of the map (max 2)*/ - int w, h, nb_layers; + int w, h, nb_layers, dialog_count; /*the tileset to use*/ bopti_image_t *tileset; + /*list of all the dialog*/ + struct Talkable *dialogs; /*state of each tile on the map (solid, air ...)*/ short *info_map; /*list of all the tiles*/ @@ -19,7 +21,7 @@ enum map_state { TILE_SOLID = 1, TILE_DOOR_IN = 2, TILE_DOOR_OUT = 3, - TILE_CHARACTER = 4, + TILE_TALKABLE = 4, }; /*check if a tile is walkable*/ diff --git a/include/talkable.h b/include/talkable.h new file mode 100644 index 0000000..b833529 --- /dev/null +++ b/include/talkable.h @@ -0,0 +1,15 @@ +#pragma once +#include "map.h" +struct Talkable { + /*the position of the tile*/ + int x, y; + /*the name*/ + char *name; + /*the text to display*/ + char *text; +}; + +/*draw the dialog of a specified talkable tile*/ +void draw_dialog(struct Talkable *character); +/*find the talkable tile using the player's position*/ +struct Talkable* get_dialog_xy(struct Map *map, int x, int y); \ No newline at end of file diff --git a/src/character.c b/src/character.c deleted file mode 100644 index fd969d9..0000000 --- a/src/character.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include "character.h" -#include "engine.h" -#include "map.h" -#include "util.h" - -struct Character character_default = { - .x = 0, - .y = 0, - .name = "default name", - .dialog = "default dialog" -}; - -/*draw the dialog of a specified character*/ -void draw_dialog(struct Character *character) { - const char *delim = ";"; - - char *str = strdup(character->dialog); - char *curr_line = strtok(str, delim); - - while(curr_line != NULL) { - drect(20,10,370,80,C_WHITE); - dprint(25,20, C_BLACK, "%s", character->name); - dprint(25,40, C_BLACK, "%s", curr_line); - dupdate(); - curr_line = strtok(NULL, delim); - wait_for_input(KEY_SHIFT); - } -} - -/*find the character using the player's position*/ -struct Character* get_character_xy(struct Character *characters[], int x, int y) { - int i = 0; - while(strcmp(characters[i]->name,"default name") != 0) { - if(characters[i]->x == x && characters[i]->y == y) return characters[i]; - i++; - } - return &character_default; -} - -/*get the characters for a specified map*/ -struct Character** get_map_characters(int id) { - if(id == 1) { - extern struct Character character_Tituya; - extern struct Character character_Lephenixnoir; - extern struct Character character_Tituya2; - extern struct Character character_KikooDX; - extern struct Character character_Massena; - extern struct Character character_PancarteVille; - - static struct Character *characters[] = { - &character_Tituya, - &character_Lephenixnoir, - &character_Massena, - &character_Tituya2, - &character_KikooDX, - &character_PancarteVille, - &character_default, - }; - return characters; - } - static struct Character *characters[] = {}; - return characters; -} diff --git a/src/engine.c b/src/engine.c index 4ba9381..0e9a102 100644 --- a/src/engine.c +++ b/src/engine.c @@ -6,7 +6,7 @@ #include "player.h" #include "animation.h" #include "define.h" -#include "character.h" +#include "talkable.h" #include "camera.h" #include "vec2.h" @@ -107,11 +107,11 @@ void engine_set_background(struct Game *game, int color) { /*make an interaction with something*/ void engine_action(struct Game const *game, int action) { if(action == ACTION_SHIFT) { - if(player_facing(game) == TILE_CHARACTER) { + if(player_facing(game) == TILE_TALKABLE) { int direction = game->player->direction; int dx = (direction == DIR_RIGHT) - (direction == DIR_LEFT); int dy = (direction == DIR_DOWN) - (direction == DIR_UP); - draw_dialog(get_character_xy(game->characters, game->player->pos.x + dx, game->player->pos.y + dy)); + draw_dialog(get_dialog_xy(game->map, game->player->pos.x + dx, game->player->pos.y + dy)); } } } diff --git a/src/main.c b/src/main.c index 7b6165b..a0791e0 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,6 @@ #include "engine.h" #include "player.h" #include "animation.h" -#include "character.h" #include "camera.h" #include "define.h" @@ -44,7 +43,6 @@ int main(void) { .camera = camera_new(&player.pos_visual), .background = C_WHITE }; - game.characters = get_map_characters(1); /*Timer*/ static volatile int tick = 1; diff --git a/src/map.c b/src/map.c index 90ee4d2..d4635ad 100644 --- a/src/map.c +++ b/src/map.c @@ -8,7 +8,7 @@ int map_walkable(struct Map const *map, int x, int y) { int tile = map->info_map[x + map->w * y]; if(x < 0 || x > map->w-1 || y < 0 || y > map->h-1) return 0; - return (tile != TILE_SOLID && tile != TILE_CHARACTER); + return (tile != TILE_SOLID && tile != TILE_TALKABLE); } /*get the tile under the player*/ @@ -20,7 +20,6 @@ void generate_interior_map(struct Game *game) { extern struct Map in_1; game->map = &in_1; set_player_xy(game->player, 3,3); - //game->camera.target = &VEC2F(DWIDTH/2, DHEIGHT/2); game->camera.pos.x = in_1.w/2 * TILE_SIZE + game->player->x_mid; game->camera.pos.y = in_1.h/2 * TILE_SIZE + game->player->y_mid; } \ No newline at end of file diff --git a/src/talkable.c b/src/talkable.c new file mode 100644 index 0000000..a46dda9 --- /dev/null +++ b/src/talkable.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include "talkable.h" +#include "engine.h" +#include "map.h" +#include "util.h" + +struct Talkable default_value = { + .x = 0, + .y = 0, + .name = "default name", + .text = "default dialog" +}; + +/*draw the dialog of a specified talkable tile*/ +void draw_dialog(struct Talkable *talkable) { + const char *delim = ";"; + + char *str = strdup(talkable->text); + char *curr_line = strtok(str, delim); + + while(curr_line != NULL) { + drect(20,10,370,80,C_WHITE); + dprint(25,20, C_BLACK, "%s", talkable->name); + dprint(25,40, C_BLACK, "%s", curr_line); + dupdate(); + curr_line = strtok(NULL, delim); + wait_for_input(KEY_SHIFT); + } +} + +/*find the talkable tile using the player's position*/ +struct Talkable* get_dialog_xy(struct Map *map, int x, int y) { + int i = 0; + while(i < map->dialog_count) { + if(map->dialogs[i].x == x && map->dialogs[i].y == y) return &map->dialogs[i]; + i++; + } + return &default_value; +} \ No newline at end of file