/******************************************************************* * Decompiled By: Bog * Decompiled File: scripts\asm\slasher\slasher_asm.gsc * Game: Call of Duty: Infinite Warfare * Platform: PC * Function Count: 58 * Decompile Time: 3073 ms * Timestamp: 10/27/2023 12:02:12 AM *******************************************************************/ //Function Number: 1 slasherinit(param_00,param_01,param_02,param_03) { lib_0C75::func_13F9A(param_00,param_01,param_02,param_03); self.var_71D0 = ::scripts\mp\agents\slasher\slasher_agent::shouldslasherplaypainanim; self setscriptablepartstate("slasher_audio","normal"); } //Function Number: 2 isvalidslasheraction(param_00) { switch(param_00) { case "grenade_throw": case "melee_spin": case "swipe_attack": case "block": case "ram_attack": case "sawblade_attack": case "summon": case "teleport": case "ground_pound": case "taunt": return 1; } return 0; } //Function Number: 3 setslasheraction(param_00) { self.requested_action = param_00; } //Function Number: 4 clearslasheraction() { self.requested_action = undefined; } //Function Number: 5 issawbladeattackdone(param_00,param_01,param_02,param_03) { if(!isdefined(self.requested_action)) { return 1; } if(self.requested_action != "sawblade_attack") { return 1; } return 0; } //Function Number: 6 shouldendblock(param_00,param_01,param_02,param_03) { if(!isdefined(self.requested_action) || self.requested_action != "block") { return 1; } return 0; } //Function Number: 7 shouldshootsawblade(param_00,param_01,param_02,param_03) { if(!isdefined(self.requested_action)) { return 0; } if(!lib_0A1B::func_291C()) { return 0; } return 1; } //Function Number: 8 shouldstopshootingsawblade(param_00,param_01,param_02,param_03) { return !shouldshootsawblade(param_00,param_01,param_02,param_03); } //Function Number: 9 shouldplayentranceanim(param_00,param_01,param_02,param_03) { return 0; } //Function Number: 10 playanimandlookatenemy(param_00,param_01,param_02,param_03) { thread lib_0C73::func_6A6A(param_01,scripts\mp\agents\slasher\slasher_agent::getenemy()); var_04 = lib_0A1D::func_2337(param_00,param_01); lib_0A1D::func_2365(param_00,param_01,param_02,var_04,1); } //Function Number: 11 isanimdone(param_00,param_01,param_02,param_03) { if(lib_0A1A::func_232B(param_01,"end")) { return 1; } if(lib_0A1A::func_232B(param_01,"early_end")) { return 1; } if(lib_0A1A::func_232B(param_01,"finish_early")) { return 1; } if(lib_0A1A::func_232B(param_01,"code_move")) { return 1; } return 0; } //Function Number: 12 playtauntanim(param_00,param_01,param_02,param_03) { self notify("taunt"); thread lib_0C73::func_6A6A(param_01,scripts\mp\agents\slasher\slasher_agent::getenemy()); lib_0A1D::func_2364(param_00,param_01,param_02,param_03); } //Function Number: 13 dosummonspawn() { } //Function Number: 14 dogroundpounddamage(param_00,param_01) { if(isdefined(param_00)) { self endon(param_00 + "_finished"); } if(isdefined(param_01)) { wait(param_01); } var_02 = scripts\mp\agents\slasher\slasher_tunedata::gettunedata(); foreach(var_04 in level.players) { if(isalive(var_04)) { if(distancesquared(self.origin,var_04.origin) < var_02.ground_pound_damage_radius_sq) { lib_0C73::func_5904(var_04,self.ground_pound_damage,"MOD_IMPACT"); } } } } //Function Number: 15 groundpoundnotehandler(param_00,param_01,param_02,param_03) { if(param_00 == "groundpound") { dogroundpounddamage(); } } //Function Number: 16 playgroundpound(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); thread dogroundpounddamage(param_01,0.75); lib_0A1D::func_2364(param_00,param_01,param_02,param_03); } //Function Number: 17 summonnotehandler(param_00,param_01,param_02,param_03) { if(param_00 == "start_summon_zombies") { dosummonspawn(); } } //Function Number: 18 meleenotehandler(param_00,param_01,param_02,param_03) { if(param_00 == "hit") { var_04 = scripts\mp\agents\slasher\slasher_agent::getenemy(); if(isdefined(var_04)) { if(distancesquared(var_04.origin,self.origin) < -25536) { self notify("attack_hit",var_04); lib_0C73::func_5904(var_04,self.var_B601,"MOD_IMPACT"); } else { self notify("attack_miss",var_04); } } if(!scripts\common\utility::istrue(self.bmovingmelee)) { self notify("stop_melee_face_enemy"); return; } return; } if(param_00 == "spin_attack_damage_begin") { thread startspinattackdamage(param_01); return; } if(param_00 == "spin_attack_damage_end") { stopspinattackdamage(); return; } } //Function Number: 19 shouldstartramanim(param_00,param_01,param_02,param_03) { if(lib_0A1B::func_2953(param_00,param_01,param_02,param_03)) { return 1; } return 0; } //Function Number: 20 func_100AD(param_00,param_01,param_02,param_03) { if(!lib_0A1B::func_298A()) { return 0; } return 1; } //Function Number: 21 func_2481(param_00,param_01,param_02) { self attach(param_01,param_02); thread func_5392(param_00,param_01,param_02); return param_02; } //Function Number: 22 func_5392(param_00,param_01,param_02) { self endon("stop grenade check"); self waittill(param_00 + "_finished"); if(!isdefined(self)) { return; } self detach(param_01,param_02); } //Function Number: 23 grenadethrownotehandler(param_00,param_01,param_02,param_03) { switch(param_00) { case "grenade_right": case "grenade_left": break; case "grenade_throw": if(scripts\common\utility::istrue(self.grenade_thrown)) { return; } self.grenade_thrown = 1; self notify("stop grenade check"); var_04 = lib_0A1B::func_2930(); if(isdefined(var_04)) { var_05 = self.var_1B2; var_06 = self method_806C(scripts\mp\agents\slasher\slasher_agent::getslashergrenadehandoffset(),var_05,0,"min time","min energy"); if(isdefined(var_06)) { self method_83C2(); lib_0A1A::func_232F("grenade_throw","thrown"); } else if(isdefined(self.enemygrenadepos)) { var_06 = self method_806C(scripts\mp\agents\slasher\slasher_agent::getslashergrenadehandoffset(),self.enemygrenadepos,0,"min time","min energy"); if(isdefined(var_06)) { self method_83C2(); lib_0A1A::func_232F("grenade_throw","thrown"); } } } break; } } //Function Number: 24 playgrenadethrowanim(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); scripts\mp\agents\slasher\slasher_agent::lookatslasherenemy(); lib_0A1D::func_2364(param_00,param_01,param_02,param_03); } //Function Number: 25 grenadethrowterminate(param_00,param_01,param_02) { self.grenade_thrown = undefined; } //Function Number: 26 shouldabortaction(param_00,param_01,param_02,param_03) { if(scripts\common\utility::istrue(self.btraversalteleport)) { return 0; } if(!isdefined(self.requested_action)) { return 1; } if(isdefined(param_03)) { if(self.requested_action != param_03) { return 1; } } return 0; } //Function Number: 27 shoulddoaction(param_00,param_01,param_02,param_03) { if(!isdefined(self.requested_action)) { return 0; } if(self.requested_action == param_02) { return 1; } return 0; } //Function Number: 28 firebladeburst(param_00,param_01,param_02) { self endon(param_00 + "_finished"); var_03 = scripts\mp\agents\slasher\slasher_tunedata::gettunedata(); var_04 = randomintrange(var_03.min_burst_count,var_03.max_burst_count); for(var_05 = 0;var_05 < var_04;var_05++) { var_06 = (randomfloatrange(var_03.sawblade_min_offset,var_03.sawblade_max_offset),randomfloatrange(var_03.sawblade_min_offset,var_03.sawblade_max_offset),randomfloatrange(var_03.sawblade_min_offset,var_03.sawblade_max_offset)); var_07 = magicbullet("iw7_slasher_sawblade_mp",param_01,param_02 + var_06,self); var_08 = getdvar("ui_mapname"); if(var_08 != "cp_final") { var_07 thread hide_and_show_blade(); } wait(var_03.sawblade_burst_interval); } } //Function Number: 29 fireblades(param_00) { self endon(param_00 + "_finished"); wait(0.2); var_01 = scripts\mp\agents\slasher\slasher_tunedata::gettunedata(); for(;;) { var_02 = scripts\mp\agents\slasher\slasher_agent::getenemy(); if(isdefined(var_02) && isdefined(self.var_1C2)) { var_03 = self gettagorigin("j_wrist_ri"); var_04 = self.var_1C2; if(randomint(100) < var_01.sawblade_burst_chance) { self notify("attack_shoot",var_02); firebladeburst(param_00,var_03,var_04); } else { var_05 = (randomfloatrange(var_01.sawblade_min_offset,var_01.sawblade_max_offset),randomfloatrange(var_01.sawblade_min_offset,var_01.sawblade_max_offset),randomfloatrange(var_01.sawblade_min_offset,var_01.sawblade_max_offset)); var_06 = magicbullet("iw7_slasher_sawblade_mp",var_03,var_04 + var_05,self); var_07 = getdvar("ui_mapname"); if(var_07 != "cp_final") { var_06 thread hide_and_show_blade(); } } var_08 = randomfloatrange(var_01.min_sawblade_fire_interval,var_01.max_sawblade_fire_interval); wait(var_08); continue; } wait(0.1); } } //Function Number: 30 hide_and_show_blade() { level endon("game_ended"); self endon("death"); foreach(var_01 in level.players) { if(!scripts\common\utility::istrue(var_01.var_DCEB)) { self method_8429(var_01); } } } //Function Number: 31 shootsawblades(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); thread fireblades(param_01); lib_0A1D::func_2364(param_00,param_01,param_02,param_03); } //Function Number: 32 playanimwithplaybackrate(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); var_04 = param_03; var_05 = lib_0A1D::func_2337(param_00,param_01); lib_0A1D::func_2365(param_00,param_01,param_02,var_05,var_04); } //Function Number: 33 playblockanim(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); var_04 = vectortoangles(self.damageaccumulator.lastdir * -1); var_04 = (0,var_04[1],0); self method_8289("face angle abs",var_04); self method_8281("anim deltas"); lib_0A1D::func_2364(param_00,param_01,param_02,param_03); } //Function Number: 34 func_BEA0(param_00,param_01,param_02,param_03) { var_04 = undefined; var_05 = scripts\mp\agents\slasher\slasher_agent::getenemy(); if(isdefined(self.var_1198.var_FECD) && isdefined(self.var_1198.var_FECD.var_65D3)) { var_04 = self.var_1198.var_FECD.var_65D3.origin; } else if(isdefined(self.var_1198.var_FECD) && isdefined(self.var_1198.var_FECD.var_D699)) { var_04 = self.var_1198.var_FECD.var_D699; } else if(isdefined(var_05)) { var_04 = var_05.origin; } if(!isdefined(var_04)) { return 0; } var_06 = self.angles[1] - vectortoyaw(var_04 - self.origin); var_07 = distancesquared(self.origin,var_04); if(var_07 < 65536) { var_08 = sqrt(var_07); if(var_08 > 3) { var_06 = var_06 + asin(-3 / var_08); } } if(abs(angleclamp180(var_06)) > self.var_129AF) { return 1; } return 0; } //Function Number: 35 func_81DE() { var_00 = 0.25; var_01 = undefined; var_02 = undefined; if(isdefined(self.var_1198.var_FECD)) { if(isdefined(self.var_1198.var_FECD.var_65D3)) { var_01 = self.var_1198.var_FECD.var_65D3; } else if(isdefined(self.var_1198.var_FECD.var_D699)) { var_02 = self.var_1198.var_FECD.var_D699; } } var_03 = scripts\mp\agents\slasher\slasher_agent::getenemy(); if(isdefined(var_03)) { if(!isdefined(var_01) && !isdefined(var_02)) { var_01 = var_03; } } if(isdefined(var_01) && !issentient(var_01)) { var_00 = 1.5; } var_04 = scripts\common\utility::func_8094(var_00,var_01,var_02); return var_04; } //Function Number: 36 func_3F0A(param_00,param_01,param_02) { var_03 = func_81DE(); if(var_03 < 0) { var_04 = "right"; } else { var_04 = "left"; } var_03 = abs(var_03); var_05 = 0; if(var_03 > 157.5) { var_05 = 180; } else if(var_03 > 112.5) { var_05 = 135; } else if(var_03 > 67.5) { var_05 = 90; } else { var_05 = 45; } var_06 = var_04 + "_" + var_05; var_07 = lib_0A1A::func_2358(param_01,var_06); var_08 = self method_8101(param_01,var_07); return var_07; } //Function Number: 37 func_D56A(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); var_04 = lib_0A1D::func_2337(param_00,param_01); var_05 = self.var_233; self method_8289("face angle abs",self.angles); self method_8281("anim deltas"); lib_0A1D::func_2365(param_00,param_01,param_02,var_04); if(!isdefined(var_05) && isdefined(self.var_233)) { self method_841F(); } lib_0A1D::func_237F("face current"); lib_0A1D::func_237E("code_move"); } //Function Number: 38 doramattackdamage(param_00) { param_00 endon("death"); if(scripts\common\utility::istrue(self.bramattackdamageoccured)) { return; } var_01 = vectornormalize(self getvelocity()); var_02 = scripts\mp\agents\slasher\slasher_tunedata::gettunedata(); self.bramattackdamageoccured = 1; param_00 method_84DC(var_01,var_02.ram_attack_push); wait(0.2); var_03 = int(var_02.ram_attack_damage / 100 * param_00.maxhealth); lib_0C73::func_5904(param_00,var_03,"MOD_IMPACT"); } //Function Number: 39 ramattacknotehandler(param_00,param_01,param_02,param_03) { if(param_00 == "hit") { if(isdefined(self.var_4B26)) { var_04 = scripts\mp\agents\slasher\slasher_tunedata::gettunedata(); var_05 = distancesquared(self.origin,self.var_4B26.origin); if(var_05 < var_04.ram_attack_melee_dist_sq && lib_0C73::func_9DD7(self.var_4B26,var_04.ram_attack_dot)) { thread doramattackdamage(self.var_4B26); return; } } } } //Function Number: 40 handleramattackprocessing(param_00,param_01,param_02) { self endon(param_00 + "_finished"); if(!isdefined(param_01)) { return; } self setscriptablepartstate("slasher_audio","charge"); var_03 = 1; var_04 = scripts\mp\agents\slasher\slasher_tunedata::gettunedata(); self notify("attack_charge"); for(;;) { var_05 = distance2dsquared(self.origin,param_01.origin); if(var_03 && var_05 > var_04.ram_attack_go_straight_radius_sq) { var_06 = param_01 getvelocity(); var_07 = param_01.origin + var_06 * 0.15; var_08 = var_07 - self.origin; var_08 = (var_08[0],var_08[1],0); var_08 = vectornormalize(var_08); self method_8289("face angle abs",vectortoangles(var_08)); } else if(var_03) { var_03 = 0; } if(param_02 && var_05 < var_04.ram_attack_collision_dist_sq) { if(lib_0C73::func_9DD7(param_01,var_04.ram_attack_dot)) { thread doramattackdamage(param_01); break; } } scripts\common\utility::func_136F7(); if(!isdefined(param_01) || !isalive(param_01)) { break; } } self setscriptablepartstate("slasher_audio","normal"); } //Function Number: 41 playramattackanim(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); thread handleramattackprocessing(param_01,self.var_4B26,0); playanimwithplaybackrate(param_00,param_01,param_02,param_03); self setscriptablepartstate("slasher_audio","normal"); } //Function Number: 42 playramattackloop(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); thread handleramattackprocessing(param_01,self.var_4B26,1); playanimwithplaybackrate(param_00,param_01,param_02,param_03); } //Function Number: 43 playmeleeattack(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); thread lib_0C73::func_6A6A(param_01,self.var_4B26); var_04 = lib_0A1D::func_2337(param_00,param_01); lib_0A1D::func_2365(param_00,param_01,param_02,var_04); } //Function Number: 44 playmeleespinattack(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); thread lib_0C73::func_6A6A(param_01,self.var_4B26); var_04 = lib_0A1D::func_2337(param_00,param_01); lib_0A1D::func_2365(param_00,param_01,param_02,var_04); } //Function Number: 45 startspinattackdamage(param_00) { self endon(param_00 + "_finished"); self endon("StopSpinAttackDamage"); var_01 = []; var_02 = scripts\mp\agents\slasher\slasher_tunedata::gettunedata(); for(;;) { var_03 = self gettagangles("tag_eye"); var_03 = (0,var_03[1],0); var_04 = anglestoforward(var_03); foreach(var_06 in level.players) { if(lib_0F74::func_1002C(var_06)) { continue; } if(!isalive(var_06)) { continue; } var_07 = distance2dsquared(var_06.origin,self.origin); if(var_07 > var_02.slasher_spin_damage_range_sq) { continue; } var_08 = var_01[var_06 getentitynumber()]; if(isdefined(var_08)) { if(gettime() - var_08 < 250) { continue; } } var_09 = abs(var_06.origin[2] - self.origin[2]); if(var_09 > 64) { continue; } var_0A = var_06.origin - self.origin * (1,1,0); var_0B = vectornormalize(var_0A); var_0C = vectordot(var_0B,var_04); if(var_0C < 0.966) { continue; } var_01[var_06 getentitynumber()] = gettime(); lib_0C73::func_5904(var_06,var_02.slasher_spin_damage_amt,"MOD_IMPACT"); } scripts\common\utility::func_136F7(); } } //Function Number: 46 stopspinattackdamage() { self notify("StopSpinAttackDamage"); } //Function Number: 47 slasherplaysharpturnanim(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); lib_0A1A::func_237B(1.5); lib_0F3B::func_D514(param_00,param_01,param_02,param_03); lib_0A1A::func_237B(1); } //Function Number: 48 slashershouldstartarrival(param_00,param_01,param_02,param_03) { var_04 = scripts\mp\agents\slasher\slasher_agent::getenemy(); if(isdefined(var_04)) { var_05 = distancesquared(self.origin,var_04.origin); if(var_05 < 65536) { return 0; } } return lib_0C75::func_10092(param_00,param_01,param_02,param_03); } //Function Number: 49 choosemeleeattack(param_00,param_01,param_02) { if(lib_0A1B::func_2955()) { var_03 = lib_0A1A::func_2358(param_01,"attack_moving"); } else { var_03 = lib_0A1A::func_2358(param_02,"attack"); } return var_03; } //Function Number: 50 func_3EE4(param_00,param_01,param_02) { return lib_0F3C::func_3EF4(param_00,param_01,param_02); } //Function Number: 51 playmovingpainanim(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); if(!isdefined(self.var_233) || self method_841E() < scripts\mp\agents\slasher\slasher_tunedata::gettunedata().min_moving_pain_dist) { var_04 = func_3EE4(param_00,"pain_generic",param_03); self method_8289("face angle abs",self.angles); lib_0A1D::func_2365(param_00,"pain_generic",param_02,var_04,1); return; } lib_0A1D::func_2364(param_01,param_02,param_03,var_04); } //Function Number: 52 playteleportout(param_00,param_01,param_02,param_03) { self endon(param_01 + "_finished"); var_04 = lib_0A1D::func_2337(param_00,param_01); var_05 = scripts\mp\agents\slasher\slasher_agent::getenemy(); self setscriptablepartstate("teleport","hide"); if(soundexists("slasher_teleport_in")) { play_teleport_sound_to_players("slasher_teleport_in"); } wait(0.1); self hide(); self setorigin(self.teleportpos,0); if(isdefined(var_05)) { self.angles = vectortoangles(var_05.origin - self.origin); } self.teleportpos = undefined; self method_8286(self.origin); self method_841F(); thread showmelater(); if(!scripts\common\utility::istrue(self.btraversalteleport)) { scripts\mp\agents\slasher\slasher_agent::lookatslasherenemy(); } lib_0A1D::func_2365(param_00,param_01,param_02,var_04,1.5); if(scripts\common\utility::istrue(self.btraversalteleport)) { self.var_9CEC = undefined; self.btraversalteleport = undefined; self notify("traverse_end"); lib_0A1A::func_237C("decide_idle",param_03); } } //Function Number: 53 showmelater() { wait(0.1); if(soundexists("slasher_teleport_out")) { play_teleport_sound_to_players("slasher_teleport_out"); } self setscriptablepartstate("teleport","show"); self show(); } //Function Number: 54 play_teleport_sound_to_players(param_00) { foreach(var_02 in level.players) { if(!self method_85B8() || scripts\common\utility::istrue(var_02.var_DCEB)) { self playsoundtoplayer(param_00,var_02); } } } //Function Number: 55 ontraversalteleport(param_00,param_01,param_02,param_03) { self.teleportpos = self method_8146(); self.btraversalteleport = 1; return 1; } //Function Number: 56 ram_attack_anim_terminate(param_00,param_01,param_02) { self setscriptablepartstate("slasher_audio","normal"); } //Function Number: 57 ram_attack_start_terminate(param_00,param_01,param_02) { self setscriptablepartstate("slasher_audio","normal"); } //Function Number: 58 ram_attack_loop_terminate(param_00,param_01,param_02) { self setscriptablepartstate("slasher_audio","normal"); }