short tunneller_doing_nothing(struct Thing *creatng) { //return _DK_tunneller_doing_nothing(creatng); struct CreatureControl *cctrl; cctrl = creature_control_get_from_thing(creatng); // Wait for some time if (game.play_gameturn - cctrl->last_mood_sound_turn <= 1) { return 1; } /* Sometimes we may have no target dungeon. In that case, destination dungeon * index is negative. */ if (cctrl->party.target_plyr_idx == -1) { script_support_send_tunneller_to_appropriate_dungeon(creatng); return 0; } if (!player_cannot_win(cctrl->party.target_plyr_idx)) { if (good_can_move_to_dungeon_heart(creatng, cctrl->party.target_plyr_idx)) { internal_set_thing_state(creatng, CrSt_GoodDoingNothing); return 1; } } cctrl->party.target_plyr_idx = good_find_enemy_dungeon(creatng); if (cctrl->party.target_plyr_idx != -1) { internal_set_thing_state(creatng, CrSt_GoodDoingNothing); return 1; } int plyr_idx; plyr_idx = get_best_dungeon_to_tunnel_to(creatng); if (plyr_idx == -1) { return 1; } struct Dungeon *dungeon; dungeon = get_dungeon(plyr_idx); if ( dungeon->num_active_creatrs || dungeon->num_active_diggers ) { struct Coord3d pos; get_random_position_in_dungeon_for_creature(plyr_idx, 1, creatng, &pos); send_tunneller_to_point_in_dungeon(creatng, plyr_idx, &pos); } else { good_setup_wander_to_dungeon_heart(creatng, plyr_idx); } return 1; }
TbBool attempt_anger_job_damage_walls(struct Thing *creatng) { if (!can_change_from_state_to(creatng, creatng->active_state, CrSt_CreatureDamageWalls)) { return false; } struct Coord3d pos; if (!get_random_position_in_dungeon_for_creature(creatng->owner, 1, creatng, &pos)) { return false; } if (!external_set_thing_state(creatng, CrSt_CreatureAttemptToDamageWalls)) { return false; } setup_person_move_to_coord(creatng, &pos, NavRtF_Default); creatng->continue_state = CrSt_CreatureAttemptToDamageWalls; return true; }