/******************************************************************* * Decompiled By: Bog * Decompiled File: maps/mp/_exo_repulsor.gsc * Game: Call of Duty: Advanced Warfare * Platform: PC * Function Count: 13 * Decompile Time: 299 ms * Timestamp: 10/27/2023 1:48:48 AM *******************************************************************/ //Function Number: 1 exo_repulsor_think() { self notify("exo_repulsor_taken"); level endon("game_ended"); self endon("death"); self endon("disconnect"); self endon("joined_team"); self endon("faux_spawn"); self endon("exo_repulsor_taken"); if(!self hasweapon("exorepulsor_equipment_mp")) { return; } exorepulsorinit(); thread monitorplayerdeath(); thread wait_for_game_end(); for(;;) { self waittill("exo_ability_activate",var_00); if(var_00 == "exorepulsor_equipment_mp") { thread tryuserepulsor(); } } } //Function Number: 2 exorepulsorinit() { self.repulsoractive = 0; self batterysetdischargescale("exorepulsor_equipment_mp",1); var_00 = self batterygetsize("exorepulsor_equipment_mp"); self.projectilesstopped = 0; if(self gettacticalweapon() == "exorepulsor_equipment_mp") { self setclientomnvar("exo_ability_nrg_req0",0); self setclientomnvar("exo_ability_nrg_total0",var_00); self setclientomnvar("ui_exo_battery_level0",var_00); } else if(self getlethalweapon() == "exorepulsor_equipment_mp") { self setclientomnvar("exo_ability_nrg_req1",0); self setclientomnvar("exo_ability_nrg_total1",var_00); self setclientomnvar("ui_exo_battery_level1",var_00); } if(!isdefined(level.exo_repulsor_impact)) { level.exo_repulsor_impact = loadfx("vfx/explosion/exo_repulsor_impact"); } if(!isdefined(level.exo_repulsor_activate_vfx)) { level.exo_repulsor_activate_vfx = loadfx("vfx/unique/repulsor_bubble"); } if(!isdefined(level.exo_repulsor_deactivate_vfx)) { level.exo_repulsor_deactivate_vfx = loadfx("vfx/unique/repulsor_bubble_deactivate"); } if(!isdefined(level.exo_repulsor_player_vfx_active)) { level.exo_repulsor_player_vfx_active = loadfx("vfx/unique/exo_repulsor_emitter"); } if(!isdefined(level.exo_repulsor_player_vfx_inactive)) { level.exo_repulsor_player_vfx_inactive = loadfx("vfx/unique/exo_repulsor_inactive"); } wait(0.05); if(!maps\mp\_utility::invirtuallobby()) { playfxontag(level.exo_repulsor_player_vfx_inactive,self,getrepulsortag()); } } //Function Number: 3 getrepulsortag() { if(isdefined(level.getrepulsortagfunc)) { return self [[ level.getrepulsortagfunc ]](); } return "TAG_JETPACK"; } //Function Number: 4 tryuserepulsor(param_00) { self endon("exo_repulsor_taken"); if(self.repulsoractive == 1) { thread stop_repulsor(1); return; } thread start_repulsor(); } //Function Number: 5 killrepulsorfx() { if(isdefined(self.repulsor_fx)) { self.repulsor_fx delete(); self.repulsor_fx = undefined; } } //Function Number: 6 start_repulsor() { self endon("death"); self endon("disconnect"); self endon("joined_team"); self endon("faux_spawn"); self endon("stop_exo_repulsor"); self endon("exo_repulsor_taken"); self.repulsoractive = 1; thread do_exo_repulsor(); self batterydischargebegin("exorepulsor_equipment_mp"); maps\mp\_exo_battery::set_exo_ability_hud_omnvar("exorepulsor_equipment_mp","ui_exo_battery_toggle",1); thread maps\mp\_exo_battery::update_exo_battery_hud("exorepulsor_equipment_mp"); maps\mp\_snd_common_mp::snd_message("mp_exo_repulsor_activate"); killrepulsorfx(); if(!isdefined(self.exo_cloak_on) || self.exo_cloak_on == 0) { self.repulsor_fx = spawnlinkedfx(level.exo_repulsor_player_vfx_active,self,getrepulsortag()); triggerfx(self.repulsor_fx); } wait(0.05); if(!self.repulsoractive) { return; } if(isdefined(level.exo_repulsor_activate_vfx)) { playfxontagforclients(level.exo_repulsor_activate_vfx,self,"j_head",self); } } //Function Number: 7 stop_repulsor(param_00) { if(!isdefined(self.repulsoractive) || !self.repulsoractive) { return; } if(!isdefined(param_00)) { param_00 = 1; } self notify("stop_exo_repulsor"); self.repulsoractive = 0; self batterydischargeend("exorepulsor_equipment_mp"); maps\mp\_exo_battery::set_exo_ability_hud_omnvar("exorepulsor_equipment_mp","ui_exo_battery_toggle",0); killrepulsorfx(); if(param_00 == 1) { maps\mp\_snd_common_mp::snd_message("mp_exo_repulsor_deactivate"); if(!isdefined(self.exo_cloak_on) || self.exo_cloak_on == 0) { self.repulsor_fx = spawnlinkedfx(level.exo_repulsor_player_vfx_inactive,self,getrepulsortag()); triggerfx(self.repulsor_fx); } wait(0.05); if(isdefined(level.exo_repulsor_deactivate_vfx)) { playfxontagforclients(level.exo_repulsor_deactivate_vfx,self,"j_head",self); } } } //Function Number: 8 monitorplayerdeath() { level endon("game_ended"); self endon("disconnect"); common_scripts\utility::waittill_any("death","joined_team","faux_spawn","exo_repulsor_taken"); self.projectilesstopped = 0; thread stop_repulsor(0); } //Function Number: 9 update_exo_battery_hud() { var_00 = self batterygetcharge("exorepulsor_equipment_mp"); maps\mp\_exo_battery::set_exo_ability_hud_omnvar("exorepulsor_equipment_mp","ui_exo_battery_level",var_00); } //Function Number: 10 do_exo_repulsor() { level endon("game_ended"); self endon("death"); self endon("disconnect"); self endon("joined_team"); self endon("faux_spawn"); self endon("stop_exo_repulsor"); self endon("exo_repulsor_taken"); while(self batterygetcharge("exorepulsor_equipment_mp") > 0) { for(var_00 = 0;var_00 < level.grenades.size;var_00++) { var_01 = level.grenades[var_00]; if(!isdefined(var_01.weaponname)) { continue; } if(isdefined(var_01.weaponname) && maps\mp\_utility::is_exo_ability_weapon(var_01.weaponname)) { continue; } if(!isdefined(var_01.owner)) { continue; } if(isdefined(var_01.owner) && var_01.owner == self) { continue; } if(level.teambased && isdefined(var_01.owner.team) && var_01.owner.team == self.team) { continue; } var_02 = distance(var_01.origin,self.origin); if(var_02 < 385) { if(sighttracepassed(self geteye(),var_01.origin,0,self)) { var_03 = var_01.origin - self.origin; var_04 = vectortoangles(var_03); var_05 = anglestoup(var_04); var_06 = anglestoforward(var_04); var_07 = vectornormalize(var_06); var_08 = var_01.origin - 0.2 * var_02 * var_07; playfx(level.exo_repulsor_impact,var_08,var_07,var_05); var_01 maps\mp\_snd_common_mp::snd_message("mp_exo_repulsor_repel"); if(var_01.weaponname == "explosive_drone_mp") { var_01 notify("mp_exo_repulsor_repel"); var_01 thread maps\mp\_explosive_drone::explosivegrenadedeath(); } else { if(isdefined(level.iszombiegame) && level.iszombiegame) { var_01 notify("repulsor_repel"); } var_01 delete(); } self.projectilesstopped++; maps\mp\gametypes\_missions::processchallenge("ch_exoability_repulser"); self batterydischargeonce("exorepulsor_equipment_mp",int(self batterygetsize("exorepulsor_equipment_mp") / 2)); update_exo_battery_hud(); } } } for(var_00 = 0;var_00 < level.missiles.size;var_00++) { var_09 = level.missiles[var_00]; if(!isdefined(var_09.owner)) { continue; } if(isdefined(var_09.owner) && var_09.owner == self) { continue; } if(level.teambased && isdefined(var_09.owner.team) && var_09.owner.team == self.team) { continue; } var_0A = distance(var_09.origin,self.origin); if(var_0A < 385) { if(sighttracepassed(self geteye(),var_09.origin,0,self)) { var_0B = var_09.origin - self.origin; var_0C = vectortoangles(var_0B); var_0D = anglestoup(var_0C); var_0E = anglestoforward(var_0C); var_0F = vectornormalize(var_0E); var_08 = var_09.origin - 0.2 * var_0A * var_0F; playfx(level.exo_repulsor_impact,var_08,var_0F,var_0D); var_09 maps\mp\_snd_common_mp::snd_message("mp_exo_repulsor_repel"); if(isdefined(var_09.weaponname) && var_09.weaponname == "iw5_exocrossbow_mp") { stopfxontag(common_scripts\utility::getfx("exocrossbow_sticky_blinking"),var_09.fx_origin,"tag_origin"); } var_09 delete(); self.projectilesstopped++; maps\mp\gametypes\_missions::processchallenge("ch_exoability_repulser"); self batterydischargeonce("exorepulsor_equipment_mp",int(self batterygetsize("exorepulsor_equipment_mp") / 2)); update_exo_battery_hud(); } } } for(var_00 = 0;var_00 < level.explosivedrones.size;var_00++) { var_10 = level.explosivedrones[var_00]; if(isdefined(var_10)) { if(!isdefined(var_10.owner)) { continue; } if(isdefined(var_10.owner) && var_10.owner == self) { continue; } if(level.teambased && isdefined(var_10.owner.team) && var_10.owner.team == self.team) { continue; } var_11 = distance(var_10.origin,self.origin); if(var_11 < 385) { if(sighttracepassed(self geteye(),var_10.origin,0,self)) { var_12 = var_10.origin - self.origin; var_13 = vectortoangles(var_12); var_14 = anglestoup(var_13); var_15 = anglestoforward(var_13); var_16 = vectornormalize(var_15); var_08 = var_10.origin - 0.2 * var_11 * var_16; playfx(level.exo_repulsor_impact,var_08,var_16,var_14); var_10 maps\mp\_snd_common_mp::snd_message("mp_exo_repulsor_repel"); if(isdefined(var_10.explosivedrone)) { var_10.explosivedrone delete(); } var_10 delete(); self.projectilesstopped++; maps\mp\gametypes\_missions::processchallenge("ch_exoability_repulser"); self batterydischargeonce("exorepulsor_equipment_mp",int(self batterygetsize("exorepulsor_equipment_mp") / 2)); update_exo_battery_hud(); } } } } foreach(var_18 in level.trackingdrones) { if(!isdefined(var_18.owner)) { continue; } if(isdefined(var_18.owner) && var_18.owner == self) { continue; } if(level.teambased && isdefined(var_18.owner.team) && var_18.owner.team == self.team) { continue; } var_19 = distance(var_18.origin,self.origin); if(var_19 < 385) { if(sighttracepassed(self geteye(),var_18.origin,0,self)) { var_1A = var_18.origin - self.origin; var_1B = vectortoangles(var_1A); var_1C = anglestoup(var_1B); var_1D = anglestoforward(var_1B); var_1E = vectornormalize(var_1D); var_08 = var_18.origin - 0.2 * var_19 * var_1E; playfx(level.exo_repulsor_impact,var_08,var_1E,var_1C); var_18 maps\mp\_snd_common_mp::snd_message("mp_exo_repulsor_repel"); if(!isremovedentity(var_18) && isdefined(var_18)) { var_18 notify("death"); maps\mp\_utility::decrementfauxvehiclecount(); } self.projectilesstopped++; maps\mp\gametypes\_missions::processchallenge("ch_exoability_repulser"); self batterydischargeonce("exorepulsor_equipment_mp",int(self batterygetsize("exorepulsor_equipment_mp") / 2)); update_exo_battery_hud(); } } } if(self.projectilesstopped >= 2) { if(!isdefined(level.ishorde)) { thread maps\mp\_events::fourplayevent(); } self.projectilesstopped = self.projectilesstopped - 2; } wait(0.05); } thread stop_repulsor(1); } //Function Number: 11 take_exo_repulsor() { self notify("kill_battery"); self notify("exo_repulsor_taken"); self takeweapon("exorepulsor_equipment_mp"); } //Function Number: 12 give_exo_repulsor() { self giveweapon("exorepulsor_equipment_mp"); thread exo_repulsor_think(); } //Function Number: 13 wait_for_game_end() { self endon("death"); self endon("disconnect"); self endon("joined_team"); self endon("faux_spawn"); self endon("exo_repulsor_taken"); level waittill("game_ended"); thread stop_repulsor(0); }