X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fserver%2Fthings.h;h=494d1a5aade2461d07c723e9f10ab53c68abc0f5;hb=3fb2cb493ae564f8b14ddb4143b6c1f5bf16f16a;hp=d87bee8de7a1bff851225032262bdf5fb0f3cf95;hpb=f6615d3be438bbca4997c38c546c0d8724da80d4;p=plomrogue diff --git a/src/server/things.h b/src/server/things.h index d87bee8..494d1a5 100644 --- a/src/server/things.h +++ b/src/server/things.h @@ -1,4 +1,8 @@ /* src/server/things.h + * + * This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3 + * or any later version. For details on its copyright, license, and warranties, + * see the file NOTICE in the root directory of the PlomRogue source package. * * Structs for things and their type and action definitions, and routines to * initialize these. @@ -7,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 */ @@ -21,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 */ @@ -38,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 @@ -71,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); @@ -104,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.