/******************************************************************* * Decompiled By: Bog * Decompiled File: scripts\asm\superslasher\superslasher_actions.gsc * Game: Call of Duty: Infinite Warfare * Platform: PC * Function Count: 44 * Decompile Time: 2465 ms * Timestamp: 10/27/2023 12:02:16 AM *******************************************************************/ //Function Number: 1 superslasher_domeleedamage() { var_00 = 60; if(isdefined(self.var_233)) { var_01 = -28672; } else { var_01 = 25600; } var_02 = 72; var_03 = 0.707; var_04 = 5184; var_05 = 0.174; var_06 = anglestoforward(self.angles); foreach(var_08 in level.players) { if(!isalive(var_08)) { continue; } var_09 = var_08.origin - self.origin; var_0A = lengthsquared(var_09); if(var_0A > var_01) { continue; } if(abs(var_09[2]) > var_02) { continue; } var_0B = (var_09[0],var_09[1],0); var_09 = vectornormalize(var_0B); var_0C = vectordot(var_09,var_06); if(var_0A < var_04) { if(var_0C < var_05) { continue; } } else if(var_0C < var_03) { continue; } lib_0C73::func_5904(var_08,0.8 * var_08.maxhealth,"MOD_IMPACT"); var_0D = 20; if(!self isonground()) { var_0D = var_0D * 0.05; } var_0E = vectornormalize(var_08.origin + (0,0,45) - self.origin); var_0F = var_0E * var_0D * 10; var_08 setvelocity(var_0F); } } //Function Number: 2 superslasher_dogroundpoundimpact() { self radiusdamage(self.origin,256,90,90,self,"MOD_IMPACT"); self setscriptablepartstate("groundpound","on"); } //Function Number: 3 superslasher_summonminions(param_00) { self setscriptablepartstate("summon_minions","on"); if(param_00 == "ground") { dogenericsummons(self.nextsummonid,param_00,1.5,undefined); } else { dowallsummon(self.nextsummonid,param_00); } self.nextsummonid++; } //Function Number: 4 dogenericsummons(param_00,param_01,param_02,param_03) { var_04 = [(-4479,3951,-161),(-4200,4030,-164),(-4340,4527,-146),(-4174,4895,-144),(-4186,5220,-154),(-4261,5478,-160),(-4437,5668,-150),(-4805,5547,-134),(-4829,5045,-140),(-5111,4425,-67),(-4469,4789,-151),(-4642,4542,-156)]; var_05 = [130,146,160,193,163,205,238,266,291,12,237,85]; if(!isdefined(self.spawnwave)) { self.spawnwave = 0; } var_06 = min(self.spawnwave,10); self.spawnwave++; var_07 = []; for(var_08 = 0;var_08 < var_04.size;var_08++) { var_07[var_07.size] = var_08; } var_09 = scripts\common\utility::array_randomize(var_07); var_0A = var_09.size; if(param_01 == "ground") { var_0A = 8; } summontracker_init(param_00,var_0A,param_03); if(param_02 <= 0) { param_02 = 0.05; } } //Function Number: 5 dowallsummon(param_00,param_01) { thread dowalls(param_00); wait(0.1); dogenericsummons(param_00,param_01,0.05,::wallsummon_allguysdead); } //Function Number: 6 summontracker_init(param_00,param_01,param_02) { if(!isdefined(self.summontracker)) { self.summontracker = []; } var_03 = spawnstruct(); var_03.guysremaining = param_01; var_03.fnallguysdead = param_02; self.summontracker[param_00] = var_03; } //Function Number: 7 summontracker_decrement(param_00) { if(!isdefined(self)) { return; } var_01 = self.summontracker[param_00]; var_01.guysremaining--; if(var_01.guysremaining == 0) { if(isdefined(var_01.fnallguysdead)) { self [[ var_01.fnallguysdead ]](param_00); } self.summontracker[param_00] = undefined; } } //Function Number: 8 summoned_waitfordeath(param_00,param_01) { param_01 waittill("death"); summontracker_decrement(param_00); } //Function Number: 9 wallsummon_allguysdead(param_00) { self notify("wallSummonComplete_" + param_00); } //Function Number: 10 dowalls(param_00) { } //Function Number: 11 dowall(param_00,param_01,param_02,param_03,param_04,param_05) { level endon("game_ended"); } //Function Number: 12 dowall_waitfortimeordone(param_00,param_01) { self endon("wallSummonComplete_" + param_00); wait(param_01); } //Function Number: 13 checkwallsummondamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06) { self endon("killWallSummon_" + param_00); level endon("game_ended"); var_07 = 100; var_08 = var_07 / 1000; var_09 = param_05; for(;;) { var_09 = var_09 - var_07; if(var_09 <= 0) { break; } var_0A = param_05 - var_09 / param_05; var_0B = param_01 + param_04 * var_0A * param_03; foreach(var_0D in level.players) { if(isalive(var_0D) && var_0D getstance() != "prone") { var_0E = var_0D.origin - var_0B; var_0F = vectordot(var_0E,param_03); if(abs(var_0F) < param_06) { var_10 = var_0D.origin - var_0F * param_03; var_0D dodamage(0.75 * var_0D.maxhealth,var_10,self,self,"MOD_IMPACT"); } } } wait(var_08); } } //Function Number: 14 superslasher_domaskchange(param_00,param_01) { level endon("game_ended"); self endon("death"); var_02 = 3; param_00 = param_00 % var_02; thread domaskfx(param_00); wait(3); thread domaskattack(param_00,param_01); } //Function Number: 15 domaskattack(param_00,param_01) { switch(param_00) { case 0: domaskshockwave(param_01); break; case 1: domaskwires(); break; case 2: dosawsharks(param_01); break; } } //Function Number: 16 domaskfx(param_00) { self setscriptablepartstate("maskchange_" + param_00,"on"); } //Function Number: 17 domaskshockwave(param_00) { level endon("game_ended"); var_01 = param_00 == "roof"; var_02 = self.origin; if(var_01) { var_02 = (-5092,4644,-129); } var_03 = 30; var_04 = 5; var_05 = 1; var_06 = 3; playsoundatpos((-6061,4944,596),"superslasher_shockwave_wind_build"); playsoundatpos((-4818,4858,13),"superslasher_shockwave_plr_build"); scripts\common\utility::exploder(101); scripts\common\utility::exploder(102); scripts\cp\maps\cp_rave\cp_rave_super_slasher_fight::set_zombie_spawning_parameters("continuous",999999,2,0.05,"shockwave","skeleton"); wait(var_06); var_07 = thread scripts\common\utility::play_loopsound_in_space("superslasher_shockwave_plr_lp",(-4818,4858,13)); var_08 = shock_wave_wind_sfx(); scripts\cp\maps\cp_rave\cp_rave_super_slasher_fight::kill_off_existing_zombies(); var_09 = int(var_03 / var_04); var_0A = int(var_04 / var_05); for(var_0B = 0;var_0B < var_09;var_0B++) { scripts\common\utility::exploder(100); for(var_0C = 0;var_0C < var_0A;var_0C++) { foreach(var_0E in level.players) { if(playerinanysafearea(var_0E)) { continue; } if(scripts\cp\_laststand::player_in_laststand(var_0E)) { continue; } var_0E dodamage(0.3 * var_0E.maxhealth,var_02); } wait(var_05); } } level thread stop_wind_fire_sfxs(var_08); var_07 stoploopsound(); playsoundatpos((-4818,4858,13),"superslasher_shockwave_plr_end"); self.var_1198.bstoptauntingcontinuously = 1; scripts\cp\maps\cp_rave\cp_rave_super_slasher_fight::set_zombie_spawning_parameters("continuous",999999,0.2,0.05,"near_player","generic_zombie"); if(self.fight_round < 3) { level thread scripts\cp\maps\cp_rave\cp_rave_super_slasher_fight::soul_collection_sequence(); } } //Function Number: 18 shock_wave_wind_sfx() { var_00 = []; var_01 = []; var_01[0] = (-4949,4725,-99); var_01[1] = (-4274,4711,-99); var_01[2] = (-5051,3906,-99); var_01[3] = (-4005,3854,-99); var_01[4] = (-4747,5478,-99); var_01[5] = (-4005,5717,-99); var_01[6] = (-4947,6070,-99); var_01[7] = (-4681,6521,-99); var_01[8] = (-3436,4168,-99); var_01[9] = (-3543,5167,-99); var_01[10] = (-4076,6086,-99); foreach(var_03 in var_01) { var_04 = scripts\common\utility::play_loopsound_in_space("superslasher_shockwave_wind_lp",var_03); var_00[var_00.size] = var_04; var_04 playsound("superslasher_shockwave_wind_start"); } return var_00; } //Function Number: 19 stop_wind_fire_sfxs(param_00) { foreach(var_02 in param_00) { var_02 thread stop_wind_fire_sfx(var_02); } } //Function Number: 20 stop_wind_fire_sfx(param_00) { param_00 playsound("superslasher_shockwave_wind_end"); wait(0.5); param_00 stoploopsound(); wait(4); param_00 delete(); } //Function Number: 21 playerinanysafearea(param_00) { var_01 = [(-4542,3598,-175),(-4490,4148,-158),(-3587,4597,-145),(-4303,5204,-148),(-4422,6003,-146)]; var_02 = [-25536,-25536,-25536,-21436,-25536]; for(var_03 = 0;var_03 < var_01.size;var_03++) { if(distance2dsquared(var_01[var_03],param_00.origin) <= var_02[var_03]) { var_04 = getentarray("superslasher_shockwave_safe_area","targetname"); foreach(var_06 in var_04) { if(function_010F(var_01[var_03],var_06)) { param_00.super_slasher_shockwave_safe_area = var_06; return 1; } } } } return 0; } //Function Number: 22 domaskwires() { level endon("game_ended"); level endon("stop_wire_attack"); self.var_1198.bwired = 1; if(!isdefined(level.superslasher.fight_round)) { return; } if(level.superslasher.fight_round == 1) { return; } var_00 = 1; if(level.superslasher.fight_round == 2) { var_00 = level.players.size; } else { var_00 = 4; } for(var_01 = 1;var_01 <= var_00;var_01++) { scripts\cp\maps\cp_rave\cp_rave_super_slasher_fight::activate_super_slasher_barrier(var_01); } } //Function Number: 23 stopwireattack() { level notify("stop_wire_attack"); self.var_1198.bwired = undefined; } //Function Number: 24 dogroundjumpattackfx(param_00) { level endon("game_ended"); var_01 = allocattackent(); var_01 setattackentorigin(param_00); var_01 setscriptablepartstate("attack","jumptarget"); self.jumpattackent = var_01; } //Function Number: 25 groundjumpattackfxcleanup() { if(isdefined(self.jumpattackent)) { self.jumpattackent setscriptablepartstate("attack","off"); freeattackent(self.jumpattackent); self.jumpattackent = undefined; } } //Function Number: 26 superslasher_dosummonedsawblades() { var_00 = spawnstruct(); var_00.var_2C5 = (-5225,5716,20); var_00.var_6378 = (-4087,3870,-160); var_00.totaltime = 5000; var_00.var_257 = 48; var_00.bvertical = 1; thread superslasher_dosawblade(var_00); var_00 = spawnstruct(); var_00.var_2C5 = (-5687,3968,57); var_00.var_6378 = (-3717,5209,-203); var_00.totaltime = 5000; var_00.var_257 = 48; var_00.bvertical = 1; thread superslasher_dosawblade(var_00); } //Function Number: 27 superslasher_dosawfan() { var_00 = 12; var_01 = 360 / var_00; var_02 = 1500; for(var_03 = 0;var_03 < var_00;var_03++) { var_04 = rotatevector((1,0,0),(0,var_01 * var_03,0)); var_05 = spawnstruct(); var_05.var_2C5 = self.origin + var_04 * 40 + (0,0,48); var_05.var_6378 = var_05.var_2C5 + var_04 * var_02; var_05.totaltime = 3000; var_05.var_257 = 48; var_05.bvertical = 0; thread superslasher_dosawblade(var_05); if(var_03 % 4 == 0) { wait(0.05); } } } //Function Number: 28 superslasher_dosawblade(param_00) { magicbullet("zmb_superslasher_sawblade",param_00.var_2C5,param_00.var_6378,self); } //Function Number: 29 superslasher_dothrownsaw() { var_00 = self gettagorigin("j_wrist_ri"); if(isdefined(self.var_1198.throwsawtarget)) { var_01 = self.var_1198.throwsawtarget.origin + (0,0,48); } else { var_01 = self.var_1198.throwsawbackuptargetpos + (0,0,48); } var_02 = vectornormalize(var_01 - var_00); var_03 = vectortoyaw(var_02); var_04 = angleclamp180(var_03 - self.angles[1]); if(var_04 >= 45 || var_04 <= -45) { var_01 = self.origin + anglestoforward(self.angles) * 768; var_02 = vectornormalize(var_01 - var_00); } } //Function Number: 30 superslasher_dostompattack(param_00) { level endon("game_ended"); var_01 = 48; var_02 = 0.2; var_03 = 1024; if(isdefined(param_00)) { var_03 = param_00; } var_04 = int(var_03 / var_01 * 2); var_05 = var_03 - var_01 * 2 / var_04 - 1; var_06 = anglestoforward(self.angles); var_07 = 50 + var_01; var_08 = self.origin + var_06 * var_07; for(var_09 = 0;var_09 < var_04;var_09++) { var_0A = var_08 + var_09 * var_05 * var_06; thread dosticks(var_0A,var_01,1000); wait(var_02); } } //Function Number: 31 dosticks(param_00,param_01,param_02) { level endon("game_ended"); var_0F = allocattackent(); var_0F setattackentorigin(param_00); var_0F setscriptablepartstate("attack","punjisticks"); wait(param_02 / 1000); if(isdefined(var_0F)) { var_0F setscriptablepartstate("attack","off"); freeattackent(var_0F); } } //Function Number: 32 dostickdamage(param_00,param_01,param_02,param_03) { level endon("game_ended"); var_04 = param_02 * param_02; var_05 = 90; while(param_03 > 0) { foreach(var_07 in level.players) { if(isalive(var_07)) { if(distance2dsquared(var_07.origin,param_01) < var_04) { var_07 dodamage(0.9 * var_07.maxhealth,param_01,param_00,param_00,"MOD_IMPACT"); } } } param_03 = param_03 - 50; wait(0.05); } } //Function Number: 33 dosawsharks(param_00) { var_01 = level.players.size + 1; var_02 = self.origin; if(param_00 == "roof") { var_02 = (-4862,4788,-138); } self.sawsharks = []; var_03 = spawnstruct(); var_03.perplayer = []; foreach(var_05 in level.players) { var_03.perplayer[var_05 getentitynumber()] = 0; } var_07 = (90,0,0); var_08 = -25536; for(var_09 = 0;var_09 < var_01;var_09++) { var_0A = var_09 * 360 / var_01; var_0B = self.origin + rotatevector(var_07,(0,var_0A,0)); var_0C = spawnsawshark(var_0B); self.sawsharks[self.sawsharks.size] = var_0C; if(param_00 == "roof") { thread dosawshark_followtarget(var_0C,var_03,undefined,var_02 + rotatevector(var_07,(0,var_0A,0)),var_08); } else { thread dosawshark_followowner(var_0C,var_03,var_0A,var_08); } scripts\common\utility::func_136F7(); } } //Function Number: 34 spawnsawshark(param_00) { var_01 = spawn("script_model",param_00); var_01 setmodel("tag_origin"); var_01 thread delayplayingsawsharkvfx(var_01); var_01 playsound("superslasher_ground_saw_deploy_lr"); var_01 playloopsound("superslasher_ground_saw_deploy_lp"); return var_01; } //Function Number: 35 delayplayingsawsharkvfx(param_00) { param_00 endon("death"); param_00 rotateroll(90,0.05); wait(0.2); playfxontag(level._effect["super_slasher_saw_shark_spark"],param_00,"tag_origin"); } //Function Number: 36 killallsharks(param_00) { if(isdefined(param_00.sawsharks)) { foreach(var_02 in param_00.sawsharks) { if(isdefined(var_02)) { deletesawshark(var_02); } } } } //Function Number: 37 deletesawshark(param_00) { playfx(level._effect["super_slasher_saw_shark_hit"],param_00.origin); playsoundatpos(param_00.origin,"superslasher_ground_saw_explode"); param_00 delete(); } //Function Number: 38 updatesawsharkposandangles(param_00,param_01,param_02) { var_03 = 90; param_00.origin = param_01; param_00.angles = (param_02[0],param_02[1],var_03); } //Function Number: 39 getclosesttargetableplayerwithinwithlos(param_00,param_01,param_02) { var_03 = getclosestpointonnavmesh(param_01); var_04 = undefined; var_05 = param_02 * param_02; foreach(var_07 in level.players) { if(!isalive(var_07)) { continue; } if(param_00.perplayer[var_07 getentitynumber()] >= 2) { continue; } var_08 = distance2dsquared(var_07.origin,param_01); if(var_08 < var_05) { var_09 = getclosestpointonnavmesh(var_07.origin); if(navisstraightlinereachable(var_03,var_09)) { var_05 = var_08; var_04 = var_07; } } } return var_04; } //Function Number: 40 dosawshark_followowner(param_00,param_01,param_02,param_03) { level endon("game_ended"); self endon("death"); self endon("kill_sharks"); var_04 = (80,0,-3); var_05 = undefined; var_06 = undefined; while(param_03 > 0) { var_06 = self.origin + rotatevector(var_04,(0,param_02,0)); var_05 = getclosesttargetableplayerwithinwithlos(param_01,var_06,512); if(isdefined(var_05)) { break; } updatesawsharkposandangles(param_00,var_06,self.angles); param_03 = param_03 - 50; wait(0.05); } if(isdefined(var_05) && param_03 > 0) { thread dosawshark_followtarget(param_00,param_01,var_05,var_06,param_03); return; } deletesawshark(param_00); } //Function Number: 41 dosawshark_followtarget(param_00,param_01,param_02,param_03,param_04) { level endon("game_ended"); param_00 endon("death"); var_05 = param_03; var_06 = undefined; var_07 = 8; var_08 = 4; var_09 = 32; if(isdefined(param_02)) { var_06 = vectortoyaw(param_02.origin - var_05); var_0A = param_02 getentitynumber(); if(isdefined(param_01.perplayer[var_0A])) { param_01.perplayer[var_0A]++; } } var_0B = scripts\common\trace::func_48CC(1); while(param_04 > 0) { if(!isdefined(param_02) || !isalive(param_02)) { param_02 = getclosesttargetableplayerwithinwithlos(param_01,var_05,512); if(isdefined(param_02)) { var_06 = vectortoyaw(param_02.origin - var_05); param_01.perplayer[param_02 getentitynumber()]++; } } if(isdefined(param_02)) { var_0C = param_02.origin - var_05; var_0D = vectortoyaw(var_0C); var_0E = angleclamp180(var_0D - var_06); var_0E = clamp(var_0E,-1 * var_08,var_08); var_06 = angleclamp180(var_06 + var_0E); var_0F = var_05 + rotatevector((var_07,0,0),(0,var_06,0)); if(navisstraightlinereachable(var_05,var_0F)) { var_10 = scripts\common\trace::func_DCED(var_0F + (0,0,24),var_0F - (0,0,24),undefined,var_0B); var_05 = var_10["position"]; if(distance2dsquared(var_05,param_02.origin) < var_09 * var_09) { param_02 dodamage(0.8 * param_02.maxhealth,var_05,self,self,"MOD_IMPACT"); break; } } else { break; } updatesawsharkposandangles(param_01,vectortoangles(param_00.origin - param_01)); } param_04 = param_04 - 50; wait(0.05); } deletesawshark(param_00); } //Function Number: 42 allocattackent() { if(!isdefined(self.attackents)) { self.attackents = []; } var_00 = undefined; foreach(var_02 in self.attackents) { if(!var_02.binuse) { var_00 = var_02; break; } } if(!isdefined(var_00)) { var_00 = spawn("script_model",self.origin); var_00 setmodel("superslasher_attack_origin"); self.attackents[self.attackents.size] = var_00; } var_00.binuse = 1; return var_00; } //Function Number: 43 setattackentorigin(param_00) { self.origin = param_00; self dontinterpolate(); } //Function Number: 44 freeattackent(param_00) { param_00.binuse = 0; }