X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=inline;f=src%2Fserver%2Fthings.h;h=03b52d83a911441147ffee6d206535091cc3a80f;hb=a9377a5125c28779f812f859564d4f4d0b744e89;hp=599d877ac2b858257480b8c09fd3aab0392971e0;hpb=51aa064d49b98de950dbcd7b154fa73d5d2eb359;p=plomrogue
diff --git a/src/server/things.h b/src/server/things.h
index 599d877..03b52d8 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.
@@ -8,34 +12,44 @@
#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
{
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 */
+ 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
@@ -55,21 +69,29 @@ struct ThingAction
*/
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. 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);
-/* 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);
@@ -88,6 +110,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.