From 90503c7e97d305cf9cb718b149fb15cebf5c8654 Mon Sep 17 00:00:00 2001 From: bgiraudr Date: Sat, 23 Apr 2022 01:53:08 +0200 Subject: [PATCH] Areas can now handle events --- assets-cg/converters.py | 35 ++++++++++++++++------------------- assets-cg/maps/testCarte.tmx | 13 +++++++++++-- include/map.h | 1 + src/engine.c | 6 ++++++ src/monster.c | 8 ++++++-- src/player.c | 9 ++++----- 6 files changed, 44 insertions(+), 28 deletions(-) diff --git a/assets-cg/converters.py b/assets-cg/converters.py index 098a63b..ae7ebb9 100644 --- a/assets-cg/converters.py +++ b/assets-cg/converters.py @@ -189,28 +189,25 @@ def parseZone(layer): zone += fxconv.u32(origin[1]) zone += fxconv.u32(to[0]) zone += fxconv.u32(to[1]) + zone += fxconv.string(i["properties"][0]["value"]) #event + print(i["properties"][0]["value"]) monsters = bytes() - try: - zone += fxconv.u32(i["properties"][0]["value"]) - monster_list_raw = i["properties"][1]["value"].split(";") - monster_list = [] - #x-y notation generate an array - for i in monster_list_raw: - if "-" in i: - a = i.split("-") - monster_list.extend(list(range(int(a[0]),int(a[1])+1))) - else: - monster_list.append(int(i)) - zone += fxconv.u32(len(monster_list)) + zone += fxconv.u32(int(i["properties"][1]["value"]) if i["properties"][1]["value"] != "" else -1) #level + monster_list_raw = [] + if i["properties"][2]["value"] != "": monster_list_raw = i["properties"][2]["value"].split(";") #monster list + monster_list = [] + #x-y notation generate an array + for i in monster_list_raw: + if "-" in i: + a = i.split("-") + monster_list.extend(list(range(int(a[0]),int(a[1])+1))) + else: + monster_list.append(int(i)) + zone += fxconv.u32(len(monster_list)) - for j in monster_list: - monsters += fxconv.u16(int(j)) - except IndexError: - raise Exception(f"parseZone() : La zone {origin};{to} n'a pas de monstres associés") - except KeyError: - print(f"parseZone() : Zone {origin};{to} sans niveau de référence, passage automatique à -1") - zone += fxconv.u32(-1) + for j in monster_list: + monsters += fxconv.u16(int(j)) zone += fxconv.ptr(monsters) return zone diff --git a/assets-cg/maps/testCarte.tmx b/assets-cg/maps/testCarte.tmx index da54580..3333c74 100644 --- a/assets-cg/maps/testCarte.tmx +++ b/assets-cg/maps/testCarte.tmx @@ -1,5 +1,5 @@ - + @@ -216,12 +216,21 @@ + - + + + + + + + + + diff --git a/include/map.h b/include/map.h index 361c541..408e1f6 100644 --- a/include/map.h +++ b/include/map.h @@ -11,6 +11,7 @@ struct Teleporter { struct Zone { int start_x, start_y; int end_x, end_y; + char *event; int level; int nbMonsters; short *monsters; diff --git a/src/engine.c b/src/engine.c index 79980e5..46dd979 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1,5 +1,6 @@ #include #include +#include #include "engine.h" #include "game.h" @@ -15,6 +16,7 @@ #include "util.h" #include "inventory.h" #include "item.h" +#include "event.h" /*draw the current state of the game*/ void engine_draw(struct Game const *game) { @@ -145,6 +147,10 @@ void engine_action(struct Game *game, int action) { void engine_check_position(struct Game *game) { static struct Map *old_map; static struct Vec2 old_pos; + if(is_in_zone(game->player, game->map)) { + struct Zone zone = get_zone(game->player, game->map); + if(strcmp(zone.event, "")) handle_event(game, zone.event); + } int player_curr_tile = map_get_player_tile(game); if(player_curr_tile == TILE_DOOR_IN) { diff --git a/src/monster.c b/src/monster.c index 4ff8946..647a592 100644 --- a/src/monster.c +++ b/src/monster.c @@ -31,8 +31,12 @@ struct Monster *generate_monster(struct Game *game) { struct Monster *monster; if(is_in_zone(game->player, game->map)) { struct Zone zone = get_zone(game->player, game->map); - monster = copyMonster(get_monster_id(zone.monsters[rand_range(0,zone.nbMonsters)])); - level_zone = zone.level; + if(zone.nbMonsters != 0) { + monster = copyMonster(get_monster_id(zone.monsters[rand_range(0,zone.nbMonsters)])); + } else { + monster = copyMonster(get_monster_id(0)); + } + level_zone = zone.level != -1 ? zone.level : game->player->stats.level; } else { monster = copyMonster(get_monster_id(0)); level_zone = game->player->stats.level; diff --git a/src/player.c b/src/player.c index ef37710..41c9480 100644 --- a/src/player.c +++ b/src/player.c @@ -96,14 +96,13 @@ int get_nb_moves(struct Player *player) { void add_move(struct Player *player, struct Move move) { int index = get_nb_moves(player); - dimage(42,DHEIGHT-75,&img_dialogue); if(index != NB_PLAYER_MOVES) { - dprint(50,DHEIGHT-47,C_BLACK,"Vous apprenez %s !", move.name); + format_text(50, DHEIGHT-47, C_BLACK, "Vous apprenez %s !", move.name); dupdate(); wait_for_input(KEY_SHIFT); player->moves[index] = copy_move(move); } else { - dprint(50,DHEIGHT-47,C_BLACK,"Vous pouvez apprendre %s !", move.name); + format_text(50, DHEIGHT-47, C_BLACK, "Vous pouvez apprendre %s !", move.name); dupdate(); wait_for_input(KEY_SHIFT); replace_capacities(player, move); @@ -128,7 +127,7 @@ void replace_capacities(struct Player *player, struct Move move) { if(selection > NB_PLAYER_MOVES-1) selection = NB_PLAYER_MOVES-1; if(selection < 0) selection = 0; - dtext(130,15,C_BLACK, "Remplacer"); + dtext(180,15,C_BLACK, "Remplacer"); draw_classic_move(200,DHEIGHT/2-30, &move); draw_player_moves(player); @@ -162,7 +161,7 @@ int select_capacity(struct Player *player, char* context, bool allow_back) { if(selection > NB_PLAYER_MOVES-1) selection = NB_PLAYER_MOVES-1; if(selection < 0) selection = 0; - dtext(130,10,C_BLACK,context); + dtext(180,10,C_BLACK,context); draw_player_moves(player); dtext(105, 42+65*selection , C_RED, "[X]");