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

466 lines
9.0 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\_hiding_door.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 13
* Decompile Time: 210 ms
* Timestamp: 10/27/2023 2:23:07 AM
*******************************************************************/
//Function Number: 1
hiding_door_spawner()
{
var_00 = getentarray("hiding_door_guy_org","targetname");
var_01 = maps\_utility::getclosest(self.origin,var_00);
var_01.targetname = undefined;
var_02 = getentarray(var_01.target,"targetname");
var_03 = undefined;
var_04 = undefined;
var_05 = undefined;
if(isdefined(var_01.script_linkto))
{
var_05 = var_01 common_scripts\utility::get_linked_ent();
}
if(var_02.size == 1)
{
var_03 = var_02[0];
}
else
{
foreach(var_07 in var_02)
{
if(var_07.code_classname == "script_brushmodel")
{
var_04 = var_07;
continue;
}
if(var_07.code_classname == "script_model")
{
var_03 = var_07;
}
}
}
var_09 = getent(var_03.target,"targetname");
var_0A = undefined;
if(isdefined(var_09.target))
{
var_0A = getent(var_09.target,"targetname");
}
if(isdefined(var_0A))
{
var_01 thread hiding_door_guy_pushplayer(var_0A);
if(!isdefined(level._hiding_door_pushplayer_clips))
{
level._hiding_door_pushplayer_clips = [];
}
level._hiding_door_pushplayer_clips[level._hiding_door_pushplayer_clips.size] = var_0A;
}
var_03 delete();
var_0B = maps\_utility::spawn_anim_model("hiding_door");
var_01 thread maps\_anim::anim_first_frame_solo(var_0B,"fire_3");
if(isdefined(var_04))
{
var_04 linkto(var_0B,"door_hinge_jnt");
var_0B hide();
}
if(isdefined(var_09))
{
var_09 linkto(var_0B,"door_hinge_jnt");
var_09 disconnectpaths();
}
var_0C = undefined;
if(isdefined(self.target))
{
var_0C = getent(self.target,"targetname");
if(!issubstr(var_0C.classname,"trigger"))
{
var_0C = undefined;
}
}
if(!isdefined(self.script_flag_wait) && !isdefined(var_0C))
{
var_0D = 200;
if(isdefined(self.radius))
{
var_0D = self.radius;
}
var_0C = spawn("trigger_radius",var_01.origin,0,var_0D,48);
}
if(isdefined(var_05))
{
badplace_brush(var_05 getentitynumber(),0,var_05,"allies");
}
maps\_utility::add_spawn_function(::hiding_door_guy,var_01,var_0C,var_0B,var_09,var_05);
}
//Function Number: 2
hiding_door_guy(param_00,param_01,param_02,param_03,param_04)
{
var_05 = hiding_door_starts_open(param_00);
self.animname = "hiding_door_guy";
self endon("death");
self endon("damage");
self.grenadeammo = 2;
maps\_utility::set_deathanim("death_2");
self.allowdeath = 1;
self.health = -15536;
var_06 = [];
thread hiding_door_guy_cleanup(param_01,self,param_03,param_04,var_05);
thread hiding_door_death(param_03,param_01,self,param_04,var_05);
if(var_06)
{
param_01 thread maps\_anim::anim_loop(var_7B,"idle");
}
else
{
param_01 thread maps\_anim::anim_first_frame(var_7B,"fire_3");
}
if(isdefined(param_02))
{
wait 0.05;
param_02 waittill(param_02,var_7B[var_06.size],self,var_7B[var_7B.size],"trigger");
}
else
{
common_scripts\utility::flag_wait(self.script_flag_wait);
}
if(var_06)
{
param_01 notify("stop_loop");
param_01 maps\_anim::anim_single(var_7B,"close");
}
var_07 = 0;
var_08 = 0;
for(;;)
{
var_09 = level.player;
if(isdefined(self.enemy))
{
var_09 = self.enemy;
}
var_0A = hiding_door_get_enemy_direction(param_03.angles,self.origin,var_09.origin);
if(player_entered_backdoor(var_0A))
{
if(quit_door_behavior())
{
return;
}
}
if(var_07 >= 2)
{
if(quit_door_behavior(1))
{
return;
}
}
var_0B = undefined;
if(var_0A == "left" || var_0A == "front")
{
var_0B = "fire_3";
}
else if(var_0A == "right")
{
var_0B = "fire_1";
if(common_scripts\utility::cointoss())
{
var_0B = "fire_2";
}
}
else
{
param_01 maps\_anim::anim_single(var_7B,"open");
param_01 maps\_anim::anim_single(var_7B,"close");
var_07++;
continue;
}
if(hiding_door_guy_should_charge(var_0A,var_09,var_08))
{
var_0B = "jump";
if(common_scripts\utility::cointoss())
{
if(self maymovetopoint(animscripts/utility::func_F99(level.scr_anim[self.animname]["kick"])))
{
var_0B = "kick";
}
}
thread hiding_door_death_door_connections(param_04,var_05);
param_01 notify("push_player");
self notify("charge");
self.allowdeath = 1;
self.health = 100;
maps\_utility::clear_deathanim();
param_01 maps\_anim::anim_single(var_7B,var_0B);
quit_door_behavior();
return;
}
if(hiding_door_guy_should_throw_grenade(var_0A,var_08))
{
self.grenadeammo--;
var_0B = "grenade";
}
var_07 = 0;
var_08++;
param_01 thread maps\_anim::anim_single(var_7B,var_0B);
maps\_utility::delaythread(0.05,::maps\_anim::anim_set_time,var_7B,var_0B,0.3);
param_01 waittill(var_0B);
param_01 thread maps\_anim::anim_first_frame(var_7B,"open");
wait randomfloatrange(0.2,1);
param_01 notify("stop_loop");
}
}
//Function Number: 3
quit_door_behavior(param_00,param_01)
{
if(!isdefined(param_00))
{
param_00 = 0;
}
if(param_00)
{
if(!sighttracepassed(level.player geteye(),self geteye(),0,self))
{
return 0;
}
}
self.health = 100;
maps\_utility::clear_deathanim();
self.goalradius = 512;
self setgoalpos(self.origin);
self notify("quit_door_behavior");
self stopanimscripted();
self notify("killanimscript");
return 1;
}
//Function Number: 4
player_entered_backdoor(param_00)
{
if(param_00 != "behind")
{
return 0;
}
var_01 = distance(self.origin,level.player.origin);
if(var_01 > 250)
{
return 0;
}
if(!sighttracepassed(level.player geteye(),self geteye(),0,self))
{
return 0;
}
return 1;
}
//Function Number: 5
hiding_door_guy_should_charge(param_00,param_01,param_02)
{
var_03 = 3;
var_04 = 100;
var_05 = 600;
if(param_02 < var_03)
{
return 0;
}
if(param_01 != level.player)
{
return 0;
}
if(param_00 != "front")
{
return 0;
}
var_06 = distance(self.origin,level.player.origin);
if(var_06 < var_04)
{
return 0;
}
if(var_06 > var_05)
{
return 0;
}
return common_scripts\utility::cointoss();
}
//Function Number: 6
hiding_door_guy_should_throw_grenade(param_00,param_01)
{
if(param_01 < 1)
{
return 0;
}
if(param_00 == "behind")
{
return 0;
}
if(randomint(100) < 25 * self.grenadeammo)
{
return 1;
}
return 0;
}
//Function Number: 7
hiding_door_get_enemy_direction(param_00,param_01,param_02)
{
var_03 = anglestoforward(param_00);
var_04 = vectornormalize(var_03);
var_05 = vectortoangles(var_04);
var_06 = vectortoangles(param_02 - param_01);
var_07 = var_05[1] - var_06[1];
var_07 = var_07 + 360;
var_07 = int(var_07) % 360;
var_08 = undefined;
if(var_07 >= 90 && var_07 <= 270)
{
var_08 = "behind";
}
else if(var_07 >= 300 || var_07 <= 45)
{
var_08 = "front";
}
else if(var_07 < 90)
{
var_08 = "right";
}
else if(var_07 > 270)
{
var_08 = "left";
}
return var_08;
}
//Function Number: 8
hiding_door_guy_cleanup(param_00,param_01,param_02,param_03,param_04)
{
param_01 endon("charge");
param_01 common_scripts\utility::waittill_either("death","quit_door_behavior");
param_00 notify("stop_loop");
thread hiding_door_death_door_connections(param_03,param_04);
param_00 notify("push_player");
if(!isdefined(param_02.played_death_anim))
{
param_02.played_death_anim = 1;
param_00 thread maps\_anim::anim_single_solo(param_02,"death_2");
}
}
//Function Number: 9
hiding_door_guy_pushplayer(param_00)
{
self waittill("push_player");
param_00 moveto(self.origin,1.5);
wait 1.5;
param_00 delete();
}
//Function Number: 10
hiding_door_guy_grenade_throw(param_00)
{
var_01 = param_00 gettagorigin("J_Wrist_RI");
var_02 = distance(level.player.origin,param_00.origin) * 2;
if(var_02 < 300)
{
var_02 = 300;
}
if(var_02 > 1000)
{
var_02 = 1000;
}
var_03 = vectornormalize(level.player.origin - param_00.origin);
var_04 = var_03 * var_02;
param_00 magicgrenademanual(var_01,var_04,randomfloatrange(3,5));
}
//Function Number: 11
hiding_door_death(param_00,param_01,param_02,param_03,param_04)
{
param_02 endon("charge");
param_02 endon("quit_door_behavior");
param_02 waittill("damage",var_05,var_06);
if(!isalive(param_02))
{
return;
}
thread hiding_door_death_door_connections(param_03,param_04);
param_01 notify("push_player");
param_01 thread maps\_anim::anim_single_solo(param_02,"death_2");
if(!isdefined(param_00.played_death_anim))
{
param_00.played_death_anim = 1;
param_01 thread maps\_anim::anim_single_solo(param_00,"death_2");
}
wait 0.5;
if(isalive(param_02))
{
if(isdefined(var_06))
{
param_02 kill((0,0,0),var_06);
return;
}
param_02 kill((0,0,0));
}
}
//Function Number: 12
hiding_door_death_door_connections(param_00,param_01)
{
wait 2;
if(isdefined(param_00))
{
param_00 disconnectpaths();
}
if(isdefined(param_01))
{
badplace_delete(param_01 getentitynumber());
}
}
//Function Number: 13
hiding_door_starts_open(param_00)
{
return isdefined(param_00.script_noteworthy) && param_00.script_noteworthy == "starts_open";
}