X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fserver%2Fthings.h;h=494d1a5aade2461d07c723e9f10ab53c68abc0f5;hb=3fb2cb493ae564f8b14ddb4143b6c1f5bf16f16a;hp=940d108ab2f2b44d613737d08ce39fd3586e65a2;hpb=28b8b4234e395c3fdc4800e5cfb3dcd70a15cadf;p=plomrogue diff --git a/src/server/things.h b/src/server/things.h index 940d108..494d1a5 100644 --- a/src/server/things.h +++ b/src/server/things.h @@ -11,7 +11,7 @@ #ifndef THINGS_H #define THINGS_H -#include /* uint8_t, int16_t */ +#include /* uint8_t, int16_t, uint16_t */ #include "../common/yx_uint8.h" /* yx_uint8 */ @@ -25,6 +25,8 @@ struct Thing 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 */ + char * mem_depth_map; /* map of map memory up-to-dateness */ + int16_t satiation; /* negative: hungry; positive: over-fed */ 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 */ @@ -42,13 +44,15 @@ struct ThingInMemory struct ThingType { struct ThingType * next; - uint8_t id; /* thing type identifier / sets .type */ - char char_on_map; /* thing symbol to appear on map */ - char * name; /* string to describe thing in game log */ - uint8_t corpse_id; /* type to change thing into upon destruction */ - uint8_t lifepoints; /* default start value for thing's .lifepoints */ - uint8_t consumable; /* can be eaten if !0, for so much hitpoint win */ - uint8_t start_n; /* how many of these does the map start with? */ + uint8_t id; /* thing type identifier / sets .type */ + char char_on_map; /* thing symbol to appear on map */ + char * name; /* string to describe thing in game log */ + uint16_t stomach; /* if >0, defines onset & chance of hunger suffering */ + uint8_t corpse_id; /* type to change thing into upon destruction */ + uint8_t lifepoints; /* default start value for thing's .lifepoints */ + uint8_t consumable; /* can be eaten if !0, for so much hitpoint win */ + uint8_t start_n; /* how many of these does the map start with? */ + uint8_t proliferate; /* if >0: inverse of chance to proliferate */ }; struct ThingAction @@ -75,7 +79,8 @@ extern struct ThingAction * add_thing_action(uint8_t id); 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. + * is not >= 0 and <= UINT8_MAX, use lowest unused id. Build .fov_map if + * world.exists is non-zero. Return thing. */ extern struct Thing * add_thing(int16_t id, uint8_t type, uint8_t y, uint8_t x); @@ -108,6 +113,12 @@ extern struct Thing * get_thing(struct Thing * ptr, uint8_t id, uint8_t deep); */ extern struct Thing * get_player(); +/* Try to create "t" offspring on random passable neighbor cell if available + * (and, if "t" is of animate thing type, not inhabited by animate thing) and + * "t"'s type's .proliferation is >0, with a chance of 1/.proliferation. + */ +extern void try_thing_proliferation(struct Thing * t); + /* Add thing(s) ("n": how many?) of "type" to map on random passable * position(s). New animate things are never placed in the same square with * other animate ones.