#ifndef NPC_H #define NPC_H #include #include #include "game.h" #include "memory.h" enum { NPC_NONE = 0, NPC_FRIENDLY = 1, // The player's team NPC_HOSTILE = 2, // to the player NPC_ALL = 3 }; typedef struct { /* current coordinates of the NPC */ float curx, cury; /* initial coordinates of the NPC (needed to get absolute coordinates of * path) */ uint32_t x; uint32_t y; /* the ID of the first element of the dialog */ /* (to be aligned with "dialogs.json" IDs)*/ uint32_t dialogID; /* the number of the target point of the path */ /* Note: it must keep the value 0 if NPC has no path assigned */ uint32_t currentPoint; /* data of the path */ uint32_t hasPath; uint32_t path_length; int16_t *xpath; int16_t *ypath; int type; int8_t current_group; int8_t hostile_to_group; /* is the current NPC in pause (during dialog) */ bool paused; char *face; } NPC; // Frees then malloc()s a new path to npc // Useful if you want to safely edit a path int npc_clear_path(NPC *npc); // Adds point x,y to the path of npc // Won't work on static NPCs, use npc_clear_path before or make them on the heap int npc_append_path(uint16_t x, uint16_t y, NPC *npc); // Clears the NPCs path and creates a new one going to dest, // avoiding non-walkable tiles // Returns non-zero on failure int npc_pathfind(int32_t dest_x, int32_t dest_y, Map *full_map, NPC *npc); // realloc()s npcRPG to adequate size and returns a pointer to the new element // Returns NULL on failure NPC *npc_create(); // Pops the NPC from npcRPG void npc_remove(NPC *npc); /* Draws the player player. This function should be called after drawing the * map! */ void npc_draw(Game *game); void update_npcs(Game *game); void update_npc(NPC *npc); void reload_npc(Game *game); #endif