+/* Add thing action of "id" to world.thing_actions, with .name defaulting to
+ * 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(uint8_t id);
+
+/* 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. 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);
+
+/* 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);
+extern struct ThingType * get_thing_type(uint8_t id);
+
+/* Return world.thing_actions ThingAction.id for "name" or 0 if none found. */
+extern uint8_t get_thing_action_id_by_name(char * name);
+
+/* Return thing of "id" in chain at "ptr", search inventories too if "deep".
+ * Return NULL if nothing found.
+ */