mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-27 01:47:54 -05:00
451 lines
10 KiB
Plaintext
451 lines
10 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: scripts\mp\agents\slasher\slasher_agent.gsc
|
|
* Game: Call of Duty: Infinite Warfare
|
|
* Platform: PC
|
|
* Function Count: 17
|
|
* Decompile Time: 915 ms
|
|
* Timestamp: 10/27/2023 12:11:23 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
registerscriptedagent()
|
|
{
|
|
lib_0A02::init();
|
|
behaviortree\slasher::func_DEE8();
|
|
scripts\asm\slasher\mp\states::func_2371();
|
|
scripts\mp\agents\slasher\slasher_tunedata::setuptunedata();
|
|
thread func_FAB0();
|
|
}
|
|
|
|
//Function Number: 2
|
|
func_FAB0()
|
|
{
|
|
level endon("game_ended");
|
|
if(!isdefined(level.agent_definition))
|
|
{
|
|
level waittill("scripted_agents_initialized");
|
|
}
|
|
|
|
level.agent_definition["slasher"]["setup_func"] = ::setupagent;
|
|
level.agent_definition["slasher"]["setup_model_func"] = ::func_FACE;
|
|
level.agent_funcs["slasher"]["on_damaged_finished"] = ::onslasherdamagefinished;
|
|
level.agent_funcs["slasher"]["on_killed"] = ::onslasherkilled;
|
|
}
|
|
|
|
//Function Number: 3
|
|
func_FACE(param_00)
|
|
{
|
|
var_01 = getdvar("ui_mapname");
|
|
if(var_01 == "cp_final")
|
|
{
|
|
self setmodel("body_final_slasher");
|
|
}
|
|
else
|
|
{
|
|
self setmodel("body_zmb_slasher");
|
|
}
|
|
|
|
self attach("head_zmb_slasher");
|
|
self attach("weapon_zmb_slasher_vm","tag_weapon_right");
|
|
}
|
|
|
|
//Function Number: 4
|
|
setupzombiegametypevars()
|
|
{
|
|
self.var_4004 = undefined;
|
|
self.var_BCF6 = undefined;
|
|
self.var_26B9 = undefined;
|
|
self.var_86BD = undefined;
|
|
self.name = undefined;
|
|
self.var_EB6A = undefined;
|
|
self.var_CA5B = undefined;
|
|
self.var_13CA0 = undefined;
|
|
self.var_C2AD = undefined;
|
|
self.sessionteam = undefined;
|
|
self.sessionstate = undefined;
|
|
self.var_55E6 = undefined;
|
|
self.disabledweaponswitch = undefined;
|
|
self.var_55D9 = undefined;
|
|
self.var_55E4 = 1;
|
|
self.nocorpse = undefined;
|
|
self.ignoreme = 0;
|
|
self.var_180 = 0;
|
|
self.var_116D4 = undefined;
|
|
self.var_441A = undefined;
|
|
self.var_4B82 = undefined;
|
|
self.do_immediate_ragdoll = undefined;
|
|
self.var_37FD = 0;
|
|
self.var_24CA = undefined;
|
|
self.entered_playspace = 0;
|
|
self.var_B36E = undefined;
|
|
self.var_126A3 = undefined;
|
|
self.var_8C35 = 0;
|
|
self.attackent = undefined;
|
|
self.var_9342 = 1;
|
|
self.var_1B03 = "idle";
|
|
self.var_1F5 = "walk";
|
|
self.sharpturnnotifydist = 100;
|
|
self.var_257 = 15;
|
|
self.height = 40;
|
|
self.var_252B = 26 + self.var_257;
|
|
self.var_B640 = "normal";
|
|
self.var_B641 = 50;
|
|
self.var_2539 = 54;
|
|
self.var_253A = -64;
|
|
self.var_4D45 = 2250000;
|
|
self.var_181 = 1;
|
|
self.var_86BD = self getentitynumber();
|
|
self.var_BCE4 = 1;
|
|
self.var_C081 = 1;
|
|
self.var_126E8 = 1;
|
|
self.var_772A = 1;
|
|
self.var_2AB2 = 0;
|
|
self.var_2AB8 = 1;
|
|
self.var_118FC = 0;
|
|
self.var_2F = 1;
|
|
self.var_B5F9 = 40;
|
|
self.var_B62E = 70;
|
|
self.var_B631 = 80;
|
|
self.var_B62F = squared(self.var_B62E);
|
|
self.var_503C = self.var_257 + 1;
|
|
self.var_B607 = 0.5;
|
|
self.var_565C = 0;
|
|
self.var_9BAC = 0;
|
|
self.var_54CB = 0;
|
|
self.damaged_by_player = 0;
|
|
self.var_9E0C = undefined;
|
|
self.flung = undefined;
|
|
self.var_B0FC = 1;
|
|
self.full_gib = 0;
|
|
self.var_12E = undefined;
|
|
self.var_E821 = undefined;
|
|
self.var_A8A2 = [];
|
|
self.var_8C12 = 0;
|
|
self.hasplayedvignetteanim = undefined;
|
|
self.var_9BA7 = undefined;
|
|
self.var_179 = 200;
|
|
self.deathmethod = undefined;
|
|
self.var_10A57 = undefined;
|
|
self.var_828A = undefined;
|
|
self.var_CE65 = undefined;
|
|
self.var_29D2 = 1;
|
|
self.vignette_nocorpse = undefined;
|
|
self.death_anim_no_ragdoll = undefined;
|
|
self.dont_cleanup = 1;
|
|
if(getdvarint("scr_zombie_left_foot_sharp_turn_only",0) == 1)
|
|
{
|
|
self.var_AB3F = 1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 5
|
|
setupagent()
|
|
{
|
|
setupzombiegametypevars();
|
|
self.height = self.var_18F4;
|
|
self.var_257 = self.var_18F9;
|
|
self.var_9341 = 1;
|
|
self.var_B62D = 70;
|
|
self.var_B62E = 70;
|
|
self.var_B631 = 80;
|
|
self.var_B62F = squared(self.var_B62E);
|
|
self.var_503C = self.var_257 + 1;
|
|
self.var_B607 = 0.5;
|
|
self.var_B601 = 45;
|
|
self.meleeattackchance["melee_spin"] = 10;
|
|
self.meleeattackchance["ground_pound"] = 30;
|
|
self.meleeattackchance["swipe_attack"] = 100;
|
|
self.var_504E = 55;
|
|
self.var_129AF = 55;
|
|
self.var_368 = -60;
|
|
self.var_100 = 60;
|
|
self.var_166 = "slasher_grenade_zm";
|
|
self.var_162 = 999;
|
|
self.ground_pound_damage = 50;
|
|
self.footstepdetectdist = 2500;
|
|
self.footstepdetectdistwalk = 2500;
|
|
self.footstepdetectdistsprint = 2500;
|
|
self.var_71D0 = ::shouldslasherplaypainanim;
|
|
self.var_180 = 1;
|
|
var_00 = getdvar("ui_mapname");
|
|
if(var_00 != "cp_final")
|
|
{
|
|
self method_85B7(1);
|
|
}
|
|
|
|
if(isdefined(level.slasher_level))
|
|
{
|
|
if(level.wave_num < 30 && level.wave_num > 19 && level.slasher_level < 3)
|
|
{
|
|
level.slasher_level = 2;
|
|
}
|
|
else if(level.wave_num > 29)
|
|
{
|
|
level.slasher_level = 3;
|
|
}
|
|
}
|
|
|
|
thread turn_on_saw_blade_after_time(5);
|
|
thread listen_for_fake_death();
|
|
}
|
|
|
|
//Function Number: 6
|
|
turn_on_saw_blade_after_time(param_00)
|
|
{
|
|
self endon("death");
|
|
wait(param_00);
|
|
self setscriptablepartstate("slasher_saw","active");
|
|
var_01 = getdvar("ui_mapname");
|
|
if(var_01 == "cp_final")
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(level.slasher_level))
|
|
{
|
|
switch(level.slasher_level)
|
|
{
|
|
case 1:
|
|
self setscriptablepartstate("mask","blue_mask");
|
|
break;
|
|
|
|
case 2:
|
|
self setscriptablepartstate("mask","yellow_mask");
|
|
break;
|
|
|
|
case 3:
|
|
self setscriptablepartstate("mask","green_mask");
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
accumulatedamage(param_00,param_01)
|
|
{
|
|
if(!isdefined(self.damageaccumulator))
|
|
{
|
|
self.damageaccumulator = spawnstruct();
|
|
self.damageaccumulator.accumulateddamage = 0;
|
|
}
|
|
else if(!isdefined(self.damageaccumulator.var_A96A) || gettime() > self.damageaccumulator.var_A96A + 1000)
|
|
{
|
|
self.damageaccumulator.accumulateddamage = 0;
|
|
self.damageaccumulator.var_A96A = 0;
|
|
}
|
|
|
|
self.damageaccumulator.var_A96A = gettime();
|
|
if(!isdefined(param_01))
|
|
{
|
|
param_01 = (1,1,1);
|
|
}
|
|
|
|
self.damageaccumulator.lastdir = param_01;
|
|
self.damageaccumulator.accumulateddamage = self.damageaccumulator.accumulateddamage + param_00;
|
|
}
|
|
|
|
//Function Number: 8
|
|
isinravemode()
|
|
{
|
|
if(self method_85B8())
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 9
|
|
onslasherdamagefinished(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B,param_0C)
|
|
{
|
|
var_0D = param_02;
|
|
if(param_05 == "iw7_harpoon_zm")
|
|
{
|
|
param_02 = min(0.1 * self.maxhealth,2000);
|
|
param_02 = int(param_02);
|
|
}
|
|
else if(issubstr(param_05,"harpoon1"))
|
|
{
|
|
param_02 = min(0.01 * self.maxhealth,100);
|
|
param_02 = int(param_02);
|
|
}
|
|
else if(issubstr(param_05,"harpoon2"))
|
|
{
|
|
param_02 = min(0.1 * self.maxhealth,1500);
|
|
param_02 = int(param_02);
|
|
}
|
|
else if(issubstr(param_05,"harpoon3"))
|
|
{
|
|
param_02 = min(0.1 * self.maxhealth,1500);
|
|
param_02 = int(param_02);
|
|
}
|
|
else if(issubstr(param_05,"harpoon4"))
|
|
{
|
|
param_02 = min(0.01 * self.maxhealth,1000);
|
|
param_02 = int(param_02);
|
|
}
|
|
|
|
if(isdefined(param_05) && param_05 == "iw7_slasher_zm")
|
|
{
|
|
param_02 = param_02 * 0.1;
|
|
param_02 = int(param_02);
|
|
}
|
|
else
|
|
{
|
|
if(isinravemode() || scripts\common\utility::istrue(param_01.var_DCEB))
|
|
{
|
|
param_02 = 0;
|
|
}
|
|
|
|
if(lib_0A1A::func_2354("block"))
|
|
{
|
|
param_02 = param_02 * 0.1;
|
|
param_02 = int(param_02);
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.players) && level.players.size > 1)
|
|
{
|
|
if(param_02 != 0)
|
|
{
|
|
var_0E = int(param_02 / level.players.size + 1);
|
|
param_02 = int(max(var_0E,1));
|
|
}
|
|
}
|
|
|
|
if(param_02 > 0)
|
|
{
|
|
accumulatedamage(param_02,param_07);
|
|
}
|
|
|
|
if(isdefined(self.nodamagescale))
|
|
{
|
|
param_02 = var_0D;
|
|
}
|
|
|
|
slasher_on_damage_finished(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,0,param_0B,param_0C);
|
|
}
|
|
|
|
//Function Number: 10
|
|
slasher_on_damage_finished(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B,param_0C)
|
|
{
|
|
var_0D = self.health;
|
|
if(isdefined(param_07))
|
|
{
|
|
var_0E = vectortoyaw(param_07);
|
|
var_0F = self.angles[1];
|
|
self.var_E3 = angleclamp180(var_0E - var_0F);
|
|
}
|
|
else
|
|
{
|
|
self.var_E3 = 0;
|
|
}
|
|
|
|
self.var_DD = param_08;
|
|
self.var_DE = param_04;
|
|
self.var_4D3F = param_01;
|
|
self.var_DC = param_07;
|
|
self.var_E1 = param_02;
|
|
self.var_E2 = param_05;
|
|
self.var_4D62 = param_06;
|
|
if(param_02 >= self.health)
|
|
{
|
|
param_02 = 0;
|
|
if(isdefined(param_05) && param_05 == "iw7_slasher_zm")
|
|
{
|
|
param_01 notify("slasher_killed_by_own_weapon",param_01,param_05);
|
|
}
|
|
|
|
self notify("fake_death");
|
|
}
|
|
|
|
self method_80E9(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,0,param_0B,param_0C,0,1);
|
|
if(self.health > 0 && self.health < var_0D)
|
|
{
|
|
self notify("pain");
|
|
}
|
|
|
|
if(isalive(self) && isdefined(self.agent_type))
|
|
{
|
|
var_10 = level.agent_funcs[self.agent_type]["gametype_on_damage_finished"];
|
|
if(isdefined(var_10))
|
|
{
|
|
[[ var_10 ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B,param_0C);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
onslasherkilled(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
|
|
{
|
|
self detach("weapon_zmb_slasher_vm","tag_weapon_right");
|
|
self.nocorpse = 1;
|
|
scripts\mp\_mp_agent::func_5006(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08);
|
|
}
|
|
|
|
//Function Number: 12
|
|
getslashergrenadehandoffset()
|
|
{
|
|
return (12,12,100);
|
|
}
|
|
|
|
//Function Number: 13
|
|
getslasherhandposition()
|
|
{
|
|
return self method_81E7(self.origin + (12,12,100));
|
|
}
|
|
|
|
//Function Number: 14
|
|
shouldslasherplaypainanim()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 15
|
|
getenemy()
|
|
{
|
|
if(isdefined(self.slasherenemy))
|
|
{
|
|
return self.slasherenemy;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
//Function Number: 16
|
|
lookatslasherenemy()
|
|
{
|
|
var_00 = getenemy();
|
|
if(isdefined(var_00))
|
|
{
|
|
var_01 = var_00.origin - self.origin;
|
|
var_02 = vectortoangles(var_01);
|
|
self method_8289("face angle abs",var_02);
|
|
return;
|
|
}
|
|
|
|
self method_8289("face angle abs",self.angles);
|
|
}
|
|
|
|
//Function Number: 17
|
|
listen_for_fake_death()
|
|
{
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
self waittill("fake_death");
|
|
if(!scripts\common\utility::istrue(level.slasher_fight))
|
|
{
|
|
self.var_180 = 1;
|
|
self setscriptablepartstate("teleport","hide");
|
|
wait(0.1);
|
|
self hide();
|
|
wait(0.1);
|
|
self suicide();
|
|
}
|
|
}
|
|
} |