#include "../common/yx_uint8.h" /* yx_uint8 */
#include "cleanup.h" /* set_cleanup_flag() */
#include "hardcoded_strings.h" /* s */
-#include "map.h" /* is_passable() */
#include "rrand.h" /* rrand() */
#include "thing_actions.h" /* actor_wait */
#include "world.h" /* world */
-#include "yx_uint8.h" /* yx_uint8_cmp() */
-/* Free ThingsInMemory chain starting at "tm". */
-static void free_things_in_memory(struct ThingInMemory * tm);
-
/* To linked list of NextAndId structs (or rather structs whose start region is
* compatible to it) starting at "start", add newly allocated element of
* "n_size" and an ID that is either "id" or, if "id" is <= UINT8_MAX and >=
-static void free_things_in_memory(struct ThingInMemory * tm)
-{
- if (!tm)
- {
- return;
- }
- free_things_in_memory(tm->next);
- free(tm);
-}
-
-
-
static struct NextAndId * add_to_struct_list(size_t n_size, uint8_t start_id,
int16_t id, uint8_t struct_id,
struct NextAndId ** start)
+extern void free_things_in_memory(struct ThingInMemory * tm)
+{
+ if (!tm)
+ {
+ return;
+ }
+ free_things_in_memory(tm->next);
+ free(tm);
+}
+
+
+
extern struct ThingAction * get_thing_action(uint8_t id)
{
struct ThingAction * ta = world.thing_actions;
struct yx_uint8 pos;
while (1)
{
- char * err = "Space to put thing on too hard to find."
- "Map too small?";
+ char * err="Space to put thing on too hard to find. Map too small?";
uint16_t i_pos = 0;
- for (pos.y = pos.x = 0; 0 == is_passable(pos); i_pos++)
+ for (pos.y = pos.x = 0;
+ '.' != world.map.cells[pos.y * world.map.length + pos.x];
+ i_pos++)
{
exit_err(UINT16_MAX == i_pos, err);
pos.y = rrand() % world.map.length;
uint8_t clear = 1;
for (t = world.things; t; t = t->next)
{
- if (yx_uint8_cmp(&pos, &t->pos) && 0 != t->lifepoints)
+ if (0 != t->lifepoints && pos.y==t->pos.y && pos.x==t->pos.x)
{
clear = 0;
break;