void light_initialise(void) { struct Light *lgt; int i; for (i=0; i < LIGHTS_COUNT; i++) { lgt = &game.lish.lights[i]; if ((lgt->flags & LgtF_Allocated) != 0) light_delete_light(lgt->index); } if (!game.lish.field_4614E) { light_initialise_lighting_tables(); for (i=0; i < 32; i++) { light_bitmask[i] = 1 << (31-i); } game.lish.field_4614E = 1; } stat_light_needs_updating = 1; light_total_dynamic_lights = 0; light_total_stat_lights = 0; light_rendered_dynamic_lights = 0; light_rendered_optimised_dynamic_lights = 0; light_updated_stat_lights = 0; light_out_of_date_stat_lights = 0; }
void delete_thing_structure_f(struct Thing *thing, long a2, const char *func_name) { TRACE_THING(thing); if ((thing->alloc_flags & TAlF_InDungeonList) != 0) { remove_first_creature(thing); } if (!a2) { if (thing->light_id != 0) { light_delete_light(thing->light_id); thing->light_id = 0; } } struct CreatureControl *cctrl; cctrl = creature_control_get_from_thing(thing); if (!creature_control_invalid(cctrl)) { if ( !a2 ) { remove_creature_lair(thing); if (creature_is_group_member(thing)) { remove_creature_from_group(thing); } } delete_control_structure(cctrl); } if (thing->snd_emitter_id != 0) { S3DDestroySoundEmitterAndSamples(thing->snd_emitter_id); thing->snd_emitter_id = 0; } remove_thing_from_its_class_list(thing); remove_thing_from_mapwho(thing); if (thing->index > 0) { game.free_things_start_index--; game.free_things[game.free_things_start_index] = thing->index; } else { #if (BFDEBUG_LEVEL > 0) ERRORMSG("%s: Performed deleting of thing with bad index %d!",func_name,(int)thing->index); #endif } LbMemorySet(thing, 0, sizeof(struct Thing)); }
short creature_arrived_at_prison(struct Thing *creatng) { struct CreatureControl *cctrl; struct Room *room; TRACE_THING(creatng); cctrl = creature_control_get_from_thing(creatng); cctrl->target_room_id = 0; room = get_room_thing_is_on(creatng); if (!room_initially_valid_as_type_for_thing(room, RoK_PRISON, creatng)) { WARNLOG("Room %s owned by player %d is invalid for %s index %d",room_code_name(room->kind),(int)room->owner,thing_model_name(creatng),(int)creatng->index); set_start_state(creatng); return 0; } if (!add_creature_to_work_room(creatng, room)) { output_message_room_related_from_computer_or_player_action(room->owner, room->kind, OMsg_RoomTooSmall); cctrl->flgfield_1 &= ~CCFlg_NoCompControl; set_start_state(creatng); return 0; } cctrl->field_82 = game.play_gameturn; cctrl->flgfield_1 |= CCFlg_NoCompControl; internal_set_thing_state(creatng, CrSt_CreatureInPrison); if (creature_affected_by_spell(creatng, SplK_Speed)) { terminate_thing_spell_effect(creatng, SplK_Speed); } if (creature_affected_by_spell(creatng, SplK_Invisibility)) { terminate_thing_spell_effect(creatng, SplK_Invisibility); } if (creatng->light_id != 0) { light_delete_light(creatng->light_id); creatng->light_id = 0; } return 1; }