X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=sidebyside;f=src%2Fserver%2Fthings.h;h=33a07db1616b073e4253aebaa82de349ea9923ac;hb=96cdebb17848901906799677f45c67263f759f6a;hp=940d108ab2f2b44d613737d08ce39fd3586e65a2;hpb=28b8b4234e395c3fdc4800e5cfb3dcd70a15cadf;p=plomrogue
diff --git a/src/server/things.h b/src/server/things.h
index 940d108..33a07db 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,14 @@ 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 consumable; /* can be eaten if !0, for so much .satiation win */
+ uint8_t corpse_id; /* type to change thing into upon destruction */
+ uint8_t lifepoints; /* default start value for thing's .lifepoints */
+ 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 +78,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 +112,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.