Files
IL-GSC/MW3/PC/SP/maps/_patrol.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

809 lines
17 KiB
Plaintext

/*******************************************************************
* 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;
}
}