X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fserver%2Fthings.h;h=d87bee8de7a1bff851225032262bdf5fb0f3cf95;hb=57bdbc3817e5ff9aab9eeeaf43fa70584a78fa10;hp=6f7d124bc414e3af0e04701b5cc675bcd97944c3;hpb=891ba8fbca53d920f6b3704827fa6b8aee737de4;p=plomrogue diff --git a/src/server/things.h b/src/server/things.h index 6f7d124..d87bee8 100644 --- a/src/server/things.h +++ b/src/server/things.h @@ -8,22 +8,31 @@ #define THINGS_H #include /* uint8_t, int16_t */ -#include "../common/yx_uint8.h" /* yx_uint8 structs */ +#include "../common/yx_uint8.h" /* yx_uint8 */ struct Thing { struct Thing * next; - uint8_t id; /* individual thing's unique identifier */ - struct Thing * owns; /* chain of things owned / in inventory */ - struct yx_uint8 pos; /* coordinate on map */ - uint8_t * fov_map; /* map of the thing's field of view */ - uint8_t type; /* ID of appropriate thing definition */ - uint8_t lifepoints; /* 0: thing is inanimate; >0: hitpoints */ - uint8_t command; /* thing's current action; 0 if none */ - uint8_t arg; /* optional field for .command argument */ - uint8_t progress; /* turns already passed to realize .command */ + uint8_t id; /* individual thing's unique identifier */ + struct Thing * owns; /* chain of things owned / in inventory */ + struct ThingInMemory * t_mem; /* chain of things remembered */ + struct yx_uint8 pos; /* coordinate on map */ + char * fov_map; /* thing's FOV map; 'v':visible, 'H':hidden */ + char * mem_map; /* map knowledge of thing by FOV and memory */ + uint8_t type; /* ID of appropriate thing definition */ + uint8_t lifepoints; /* 0: thing is inanimate; >0: hitpoints */ + uint8_t command; /* thing's current action; 0 if none */ + uint8_t arg; /* optional field for .command argument */ + uint8_t progress; /* turns already passed to realize .command */ +}; + +struct ThingInMemory +{ + struct ThingInMemory * next; + struct yx_uint8 pos; /* position on memorized */ + uint8_t type; /* thing type identifier */ }; struct ThingType @@ -53,23 +62,30 @@ struct ThingAction * s[S_CMD_WAIT], .func to actor_wait() and .effort to 1. If "id" is not >= 1 * and <= UINT8_MAX, use lowest unused id. Return thing action. */ -extern struct ThingAction * add_thing_action(int16_t id); +extern struct ThingAction * add_thing_action(uint8_t id); -/* Add thing type of "id", with .corpse_id defaulting to "id" to - * world.thing_types, .name to "(none)" and the remaining values to 0. If "id" - * is not >= 0 and <= UINT8_MAX, use lowest unused id. Return thing type. +/* Add thing type of "id" to world.thing_types, with .corpse_id defaulting to + * the new thing type's .id, .name to "(none)" and the remaining values to 0. If + * "id" is not >= 0 and <= UINT8_MAX, use lowest unused id. Return thing type. */ extern struct ThingType * add_thing_type(int16_t id); -/* Add thing of "id" and "type" on position of "y"/x" to world.things.If "id" is - * not >= 0 and <= UINT8_MAX, use lowest unused id. Return thing. +/* Add thing of "id" and "type" on position of "y"/x" to world.things. If "id" + * is not >= 0 and <= UINT8_MAX, use lowest unused id. Return thing. */ extern struct Thing * add_thing(int16_t id, uint8_t type, uint8_t y, uint8_t x); -/* Free ThingAction/ThingType/Thing * chain starting at "ta"/"tt"/"t". */ +/* Add to thing memory of "t" thing of type id "type" and position "y"/"x". */ +extern void add_thing_to_memory_map(struct Thing * t, uint8_t type, + uint8_t y, uint8_t x); + +/* Free ThingAction / ThingType / Thing / ThingInMemory chain starting at "ta" / + * "tt" / "t" / "tm". + */ extern void free_thing_actions(struct ThingAction * ta); extern void free_thing_types(struct ThingType * tt); extern void free_things(struct Thing * t); +extern void free_things_in_memory(struct ThingInMemory * tm); /* Return pointer to ThingAction/ThingType of "id", or NULL if none found. */ extern struct ThingAction * get_thing_action(uint8_t id);