- uint8_t id;
- static struct Thing * t = NULL;
- if (t && ( parse_thing_type(tok0, tok1, t)
- || parse_thing_command(tok0, tok1, t)
- || parse_val(tok0, tok1, s[S_CMD_ARGUMENT], '8', (char *)&t->arg)
- || parse_val(tok0,tok1,s[S_CMD_PROGRESS],'8',(char *)&t->progress)
- || parse_val(tok0, tok1, s[S_CMD_LIFEPOINTS], '8',
- (char *) &t->lifepoints)
- || parse_position(tok0, tok1, t)
- || parse_carry(tok0, tok1, t)));
- else if (parse_val(tok0, tok1, s[S_CMD_THING], '8', (char *) &id))
- {
- t = get_thing(world.things, id, 1);
- if (!t)
- {
- t = add_thing(id, 0, 0);
- set_cleanup_flag(CLEANUP_THINGS);
- t->fov_map= do_fov && t->lifepoints ? build_fov_map(t) : t->fov_map;
- }
- }
- else
- {
- return 0;
- }
- return 1;
+ uint16_t i_things = NULL != world.things;
+ struct Thing * t = world.things;
+ for (; t; t = t->next, i_things++);
+ int16_t * whitelist = try_malloc(i_things * sizeof(int16_t), __func__);
+ for (i_things = 0, t = world.things; t;
+ whitelist[i_things] = t->id, t = t->next, i_things++);
+ whitelist[i_things] = -1;
+ return whitelist;