/******************************************************************* * Decompiled By: Bog * Decompiled File: maps\_patrol.gsc * Game: Call of Duty: Modern Warfare 3 * Platform: PC * Function Count: 23 * Decompile Time: 387 ms * Timestamp: 10/27/2023 2:23:10 AM *******************************************************************/ //Function Number: 1 patrol(param_00) { if(isdefined(self.enemy)) { return; } self endon("enemy"); self endon("death"); self endon("damage"); self endon("end_patrol"); waittillframeend; if(isdefined(self.script_stealthgroup)) { [[ level.global_callbacks["_patrol_endon_spotted_flag"] ]](); } thread waittill_combat(); thread waittill_death(); self.goalradius = 32; self allowedstances("stand"); self.disablearrivals = 1; self.disableexits = 1; self.allowdeath = 1; self.script_patroller = 1; maps\_utility::disable_cqbwalk(); linkpet(); set_patrol_run_anim_array(); var_01["ent"][1] = ::get_target_ents; var_1C["ent"] = 0; var_1C["node"] = 1; var_1C["node"] = 0; var_1C["struct"] = 1; var_1C["struct"] = 0; param_00["ent"] = ::maps\_utility::set_goal_ent; if(isdefined(var_01)) { self.target = var_01; } if(isdefined(self.target)) { var_03 = 1; var_04 = get_target_ents(); var_05 = get_target_nodes(); var_06 = get_target_structs(); if(var_04.size) { var_07 = common_scripts\utility::random(var_04); var_08 = "ent"; } else if(var_07.size) { var_07 = common_scripts\utility::random(var_07); var_08 = "node"; } else { var_07 = common_scripts\utility::random(var_08); var_08 = "struct"; } } else { var_03 = 0; var_04 = common_scripts\utility::get_linked_ents(); var_05 = get_linked_nodes(); var_06 = maps\_utility::get_linked_structs(); if(var_06.size) { var_07 = common_scripts\utility::random(var_06); var_08 = "ent"; } else if(var_07.size) { var_07 = common_scripts\utility::random(var_07); var_08 = "node"; } else { var_07 = common_scripts\utility::random(var_08); var_08 = "struct"; } } var_09 = []; var_0A = var_07; for(;;) { while(isdefined(var_0A.patrol_claimed)) { wait 0.05; } var_07.patrol_claimed = undefined; var_07 = var_0A; self notify("release_node",var_7B["phone"],"patrol_idle_phone",var_7B["checkphone"],"patrol_idle_checkphone",var_7B["stretch"],"patrol_idle_stretch",var_7B["smoke"],"patrol_idle_smoke",var_7B["turn180"],common_scripts\utility::ter_op(isdefined(self.patrol_anim_turn180),self.patrol_anim_turn180,"patrol_turn180"),var_7B["pause"],"patrol_idle_",var_7B["struct"],::maps\_utility::set_goal_ent,var_7B["node"],::maps\_utility::set_goal_node,::maps\_utility::get_linked_structs,::get_target_structs,::get_linked_nodes,::get_target_nodes,::common_scripts\utility::get_linked_ents); var_07.patrol_claimed = 1; self.last_patrol_goal = var_07; [[ var_7B[var_08] ]](var_07); if(isdefined(var_07.radius) && var_07.radius > 0) { self.goalradius = var_07.radius; } else { self.goalradius = 32; } self waittill("goal"); var_07 notify("trigger",self); if(isdefined(var_07.script_flag_set)) { common_scripts\utility::flag_set(var_07.script_flag_set); } if(isdefined(var_07.script_ent_flag_set)) { maps\_utility::ent_flag_set(var_07.script_ent_flag_set); } if(isdefined(var_07.script_flag_clear)) { common_scripts\utility::flag_clear(var_07.script_flag_clear); } var_0B = var_07 [[ var_1C[var_08][var_03] ]](); if(!var_0B.size) { self notify("reached_path_end"); self notify("_patrol_reached_path_end"); if(isalive(self.patrol_pet)) { self.patrol_pet notify("master_reached_patrol_end"); } } if(isdefined(var_07.script_flag_wait)) { common_scripts\utility::flag_wait(var_07.script_flag_wait); } var_07 maps\_utility::script_delay(); var_0C = ::animscripts/reactions::func_F20; var_0D = var_07.script_animation; if(isdefined(var_0D)) { if(!isdefined(self.patrol_no_stop_transition)) { patrol_do_stop_transition_anim(var_0D,var_0C,var_07); } if(isdefined(var_07.script_faceangles)) { self orientmode("face angle",var_07.angles[1]); } self.patrol_script_animation = 1; var_0E = var_09[var_0D]; if(isdefined(var_0E)) { if(var_0D == "pause") { if(isdefined(self.patrol_scriptedanim) && isdefined(self.patrol_scriptedanim[var_0D])) { var_0E = self.patrol_scriptedanim[var_0D][randomint(self.patrol_scriptedanim[var_0D].size)]; } else { var_0E = var_0E + randomintrange(1,6); } } maps\_anim::anim_generic_custom_animmode(self,"gravity",var_0E,undefined,var_0C); if(var_0B.size && var_0D != "turn180") { patrol_do_start_transition_anim(var_0D,var_0C); } } self.patrol_script_animation = undefined; } if(!var_0B.size) { if(isdefined(self.patrol_end_idle) && !isdefined(var_0D)) { patrol_do_stop_transition_anim("path_end_idle",var_0C,var_07); for(;;) { var_0F = self.patrol_end_idle[randomint(self.patrol_end_idle.size)]; maps\_anim::anim_generic_custom_animmode(self,"gravity",var_0F,undefined,var_0C); } } break; } var_0A = common_scripts\utility::random(var_0B); } } //Function Number: 2 patrol_do_stop_transition_anim(param_00,param_01,param_02) { var_03 = self; var_04 = 0; if(isdefined(param_02.script_faceangles)) { var_03 = param_02; self.noteleport = 1; var_04 = 1; } if(isdefined(self.patrol_stop) && isdefined(self.patrol_stop[param_00])) { var_03 maps\_anim::anim_generic_custom_animmode(self,"gravity",self.patrol_stop[param_00],undefined,param_01,var_04); return; } var_03 maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_stop",undefined,param_01,var_04); } //Function Number: 3 patrol_do_start_transition_anim(param_00,param_01) { if(isdefined(self.patrol_start) && isdefined(self.patrol_start[param_00])) { maps\_anim::anim_generic_custom_animmode(self,"gravity",self.patrol_start[param_00],undefined,param_01); return; } maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_start",undefined,param_01); } //Function Number: 4 stand_up_if_necessary() { if(self.a.pose == "crouch" && isdefined(self.a.array)) { var_00 = self.a.array["stance_change"]; if(isdefined(var_00)) { self setflaggedanimknoballrestart("stand_up",var_00,%root,1); animscripts/shared::donotetracks("stand_up"); } } } //Function Number: 5 patrol_resume_move_start_func() { self endon("enemy"); self animmode("zonly_physics",0); self orientmode("face current"); stand_up_if_necessary(); var_00 = level.scr_anim["generic"]["patrol_radio_in_clear"]; self setflaggedanimknoballrestart("radio",var_00,%root,1); animscripts/shared::donotetracks("radio"); turn_180_move_start_func(); } //Function Number: 6 turn_180_move_start_func() { if(!isdefined(self.pathgoalpos)) { return; } var_00 = self.pathgoalpos; var_01 = var_00 - self.origin; var_01 = (var_01[0],var_01[1],0); var_02 = lengthsquared(var_01); if(var_02 < 1) { return; } var_01 = var_01 / sqrt(var_02); var_03 = anglestoforward(self.angles); if(vectordot(var_03,var_01) < -0.5) { self animmode("zonly_physics",0); self orientmode("face current"); stand_up_if_necessary(); var_04 = level.scr_anim["generic"]["patrol_turn180"]; self setflaggedanimknoballrestart("move",var_04,%root,1); if(animhasnotetrack(var_04,"code_move")) { animscripts/shared::donotetracks("move"); self orientmode("face motion"); self animmode("none",0); } animscripts/shared::donotetracks("move"); } } //Function Number: 7 set_patrol_run_anim_array() { var_00 = "patrol_walk"; if(isdefined(self.patrol_walk_anim)) { var_00 = self.patrol_walk_anim; } var_01 = undefined; if(isdefined(self.patrol_walk_twitch)) { var_01 = self.patrol_walk_twitch; } maps\_utility::set_generic_run_anim_array(var_00,var_01); } //Function Number: 8 waittill_combat_wait() { self endon("end_patrol"); if(isdefined(self.patrol_master)) { self.patrol_master endon("death"); } self waittill("enemy"); } //Function Number: 9 waittill_death() { self waittill("death"); if(!isdefined(self)) { return; } self notify("release_node"); if(!isdefined(self.last_patrol_goal)) { return; } self.last_patrol_goal.patrol_claimed = undefined; } //Function Number: 10 waittill_combat() { self endon("death"); waittill_combat_wait(); var_00 = maps\_utility::ent_flag_exist("_stealth_enabled") && maps\_utility::ent_flag("_stealth_enabled"); if(!var_00) { maps\_utility::clear_run_anim(); self allowedstances("stand","crouch","prone"); self.disablearrivals = 0; self.disableexits = 0; self stopanimscripted(); self notify("stop_animmode"); self.script_nobark = undefined; self.goalradius = level.default_goalradius; } if(isdefined(self.old_interval)) { self.interval = self.old_interval; } self.moveplaybackrate = 1; if(!isdefined(self)) { return; } self notify("release_node"); if(!isdefined(self.last_patrol_goal)) { return; } self.last_patrol_goal.patrol_claimed = undefined; } //Function Number: 11 get_target_ents() { var_00 = []; if(isdefined(self.target)) { var_00 = getentarray(self.target,"targetname"); } return var_00; } //Function Number: 12 get_target_nodes() { var_00 = []; if(isdefined(self.target)) { var_00 = getnodearray(self.target,"targetname"); } return var_00; } //Function Number: 13 get_target_structs() { var_00 = []; if(isdefined(self.target)) { var_00 = common_scripts\utility::getstructarray(self.target,"targetname"); } return var_00; } //Function Number: 14 get_linked_nodes() { var_00 = []; if(isdefined(self.script_linkto)) { var_01 = strtok(self.script_linkto," "); for(var_02 = 0;var_02 < var_01.size;var_02++) { var_03 = getnode(var_01[var_02],"script_linkname"); if(isdefined(var_03)) { var_00[var_00.size] = var_03; } } } return var_00; } //Function Number: 15 showclaimed(param_00) { self endon("release_node"); } //Function Number: 16 linkpet() { if(isdefined(self.patrol_pet)) { self.patrol_pet thread pet_patrol(); return; } if(!isdefined(self.script_pet)) { return; } waittillframeend; var_00 = getaispeciesarray(self.team,"dog"); var_01 = undefined; for(var_02 = 0;var_02 < var_00.size;var_02++) { if(!isdefined(var_00[var_02].script_pet)) { continue; } if(var_00[var_02].script_pet != self.script_pet) { continue; } var_01 = var_00[var_02]; self.patrol_pet = var_01; var_01.patrol_master = self; break; } if(!isdefined(var_01)) { return; } var_01 thread pet_patrol(); } //Function Number: 17 pet_patrol() { maps\_utility::spawn_failed(self); if(isdefined(self.enemy)) { return; } self endon("enemy"); self endon("death"); self endon("end_patrol"); if(isdefined(self.script_stealthgroup)) { [[ level.global_callbacks["_patrol_endon_spotted_flag"] ]](); } self.patrol_master endon("death"); thread waittill_combat(); self.goalradius = 4; self.allowdeath = 1; var_00 = pet_patrol_create_positions(); var_01 = vectornormalize(self.origin - self.patrol_master.origin); var_02 = anglestoright(self.patrol_master.angles); var_03 = "left"; if(vectordot(var_01,var_02) > 0) { var_03 = "right"; } wait 1; thread pet_patrol_handle_move_state(); thread pet_patrol_handle_movespeed(); self.old_interval = self.interval; self.interval = 70; for(;;) { if(isdefined(self.patrol_master) && !isdefined(self.patrol_master.patrol_script_animation)) { var_00 = pet_patrol_init_positions(var_00); if(var_03 == "null") { var_03 = "back"; } var_03 = pet_patrol_get_available_origin(var_00,var_03); self.patrol_goal_pos = var_00[var_03].origin; } else { self.patrol_goal_pos = self.origin; } self setgoalpos(self.patrol_goal_pos); wait 0.05; } } //Function Number: 18 pet_patrol_create_positions() { var_00 = []; var_01 = spawnstruct(); var_01.options = []; var_01.options[var_01.options.size] = "right"; var_01.options[var_01.options.size] = "back_right"; var_02 = spawnstruct(); var_02.options = []; var_02.options[var_02.options.size] = "right"; var_02.options[var_02.options.size] = "back_right"; var_02.options[var_02.options.size] = "back"; var_03 = spawnstruct(); var_03.options = []; var_03.options[var_03.options.size] = "back_right"; var_03.options[var_03.options.size] = "back_left"; var_03.options[var_03.options.size] = "back"; var_04 = spawnstruct(); var_04.options = []; var_04.options[var_04.options.size] = "left"; var_04.options[var_04.options.size] = "back_left"; var_04.options[var_04.options.size] = "back"; var_05 = spawnstruct(); var_05.options = []; var_05.options[var_05.options.size] = "left"; var_05.options[var_05.options.size] = "back_left"; var_06 = spawnstruct(); var_00["right"] = var_01; var_00["left"] = var_05; var_00["back_right"] = var_02; var_00["back_left"] = var_04; var_00["back"] = var_03; var_00["null"] = var_06; return var_00; } //Function Number: 19 pet_patrol_init_positions(param_00) { var_01 = vectortoangles(self.patrol_master.last_patrol_goal.origin - self.patrol_master.origin); var_02 = self.patrol_master.origin; var_03 = anglestoright(var_01); var_04 = anglestoforward(var_01); param_00["right"].origin = var_02 + var_03 * 40 + var_04 * 30; param_00["left"].origin = var_02 + var_03 * -40 + var_04 * 30; param_00["back_right"].origin = var_02 + var_03 * 32 + var_04 * -16; param_00["back_left"].origin = var_02 + var_03 * -32 + var_04 * -16; param_00["back"].origin = var_02 + var_04 * -48; param_00["null"].origin = self.origin; var_05 = getarraykeys(param_00); for(var_06 = 0;var_06 < var_05.size;var_06++) { var_07 = var_05[var_06]; param_00[var_07].checked = 0; param_00[var_07].recursed = 0; } return param_00; } //Function Number: 20 pet_debug_positions(param_00) { var_01 = getarraykeys(param_00); for(var_02 = 0;var_02 < var_01.size;var_02++) { var_03 = var_01[var_02]; if(var_03 == "null") { continue; } } } //Function Number: 21 pet_patrol_get_available_origin(param_00,param_01) { param_00[param_01].recursed = 1; for(var_02 = 0;var_02 < param_00[param_01].options.size;var_02++) { var_03 = param_00[param_01].options[var_02]; if(param_00[var_03].checked) { continue; } if(self maymovetopoint(param_00[var_03].origin)) { return var_03; } param_00[var_03].checked = 1; } for(var_02 = 0;var_02 < param_00[param_01].options.size;var_02++) { var_03 = param_00[param_01].options[var_02]; if(param_00[var_03].recursed) { continue; } var_03 = pet_patrol_get_available_origin(param_00,var_03); return var_03; } return "null"; } //Function Number: 22 pet_patrol_handle_move_state(param_00) { if(isdefined(self.enemy)) { return; } self endon("enemy"); self endon("death"); self endon("end_patrol"); self.patrol_master endon("death"); if(isdefined(self.patrol_master.script_noteworthy) && self.patrol_master.script_noteworthy == "cqb_patrol") { maps\_utility::set_dog_walk_anim(); return; } if(!isdefined(param_00)) { param_00 = 200; } maps\_utility::set_dog_walk_anim(); for(;;) { wait 0.1; var_01 = self.patrol_goal_pos; var_02 = distancesquared(self.origin,self.patrol_goal_pos); if(var_02 > squared(param_00)) { if(self.a.movement == "run") { continue; } maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_dog_start"); maps\_utility::clear_run_anim(); self.script_nobark = 1; continue; } if(self.a.movement != "walk") { self notify("stopped_while_patrolling"); maps\_anim::anim_generic_custom_animmode(self,"gravity","patrol_dog_stop"); maps\_utility::set_dog_walk_anim(); } } } //Function Number: 23 pet_patrol_handle_movespeed(param_00,param_01) { if(isdefined(self.enemy)) { return; } self endon("enemy"); self endon("death"); self endon("end_patrol"); self.patrol_master endon("death"); if(isdefined(self.patrol_master.script_noteworthy) && self.patrol_master.script_noteworthy == "cqb_patrol") { for(;;) { wait 0.05; var_02 = self.patrol_goal_pos; var_03 = distancesquared(self.origin,self.patrol_goal_pos); if(var_03 < squared(16)) { if(self.moveplaybackrate > 0.4) { self.moveplaybackrate = self.moveplaybackrate - 0.05; } continue; } if(var_03 > squared(48)) { if(self.moveplaybackrate < 1.8) { self.moveplaybackrate = self.moveplaybackrate + 0.05; } continue; } self.moveplaybackrate = 1; } } if(!isdefined(param_00)) { param_00 = 16; } if(!isdefined(param_01)) { param_01 = 48; } var_04 = param_00 * param_00; var_05 = param_01 * param_01; for(;;) { wait 0.05; var_02 = self.patrol_goal_pos; var_03 = distancesquared(self.origin,self.patrol_goal_pos); if(self.a.movement != "walk") { self.moveplaybackrate = 1; continue; } if(var_03 < var_04) { if(self.moveplaybackrate > 0.4) { self.moveplaybackrate = self.moveplaybackrate - 0.05; } continue; } if(var_03 > var_05) { if(self.moveplaybackrate < 0.75) { self.moveplaybackrate = self.moveplaybackrate + 0.05; } continue; } self.moveplaybackrate = 0.5; } }