#include maps\mp\zombies\_zm_equip_springpad; #include common_scripts\utility; #include maps\mp\_utility; #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_equipment; #include maps\mp\gametypes_zm\_weaponobjects; #include maps\mp\zombies\_zm; #include maps\mp\zombies\_zm_unitrigger; #include maps\mp\zombies\_zm_power; #include maps\mp\zombies\_zm_buildables; springpadthink(weapon, electricradius, armed) { self endon("death"); self endon("disconnect"); self endon("equip_springpad_zm_taken"); weapon endon("death"); radiussquared = electricradius * electricradius; trigger = spawn("trigger_box", weapon getcentroid(), 1, 48, 48, 32); trigger.origin += anglestoforward(flat_angle(weapon.angles)) * -15; trigger.angles = weapon.angles; trigger enablelinkto(); trigger linkto(weapon); weapon.trigger = trigger; weapon thread springpadthinkcleanup(trigger); direction_forward = anglestoforward(flat_angle(weapon.angles) + vectorscale((-1, 0, 0), 60.0)); direction_vector = vectorscale(direction_forward, 1024); direction_origin = weapon.origin + direction_vector; home_angles = weapon.angles; weapon.is_armed = 0; self thread springpad_fx(weapon); self thread springpad_animate(weapon, armed); weapon waittill("armed"); weapon.is_armed = 1; weapon.fling_targets = []; self thread targeting_thread(weapon, trigger); while (isdefined(weapon)) { wait_for_targets(weapon); if (isdefined(weapon.fling_targets) && weapon.fling_targets.size > 0) { weapon notify("fling", weapon.zombies_only); weapon.is_armed = 0; weapon.zombies_only = 1; weapon.springpad_kills++; foreach (ent in weapon.fling_targets) { if (isplayer(ent)) { ent thread player_fling(weapon.origin + vectorscale((0, 0, 1), 30.0), weapon.angles, direction_vector, weapon); continue; } if (isdefined(ent) && isdefined(ent.custom_springpad_fling)) { if (!isdefined(self.num_zombies_flung)) self.num_zombies_flung = 0; self.num_zombies_flung++; self notify("zombie_flung"); ent thread [[ent.custom_springpad_fling]](weapon, self); continue; } if (isdefined(ent)) { if (!isdefined(self.num_zombies_flung)) self.num_zombies_flung = 0; self.num_zombies_flung++; self notify("zombie_flung"); if (!isdefined(weapon.fling_scaler)) weapon.fling_scaler = 1; if (isdefined(weapon.direction_vec_override)) direction_vector = weapon.direction_vec_override; ent dodamage(ent.health + 666, ent.origin); ent startragdoll(); ent launchragdoll(direction_vector / 4 * weapon.fling_scaler); } } weapon.fling_targets = []; weapon waittill("armed"); weapon.is_armed = 1; if (weapon.springpad_kills >= 15) { self thread springpad_expired(weapon); return; } } else wait 0.1; } } player_fling(origin, angles, velocity, weapon) { torigin = (self.origin[0], self.origin[1], origin[2]); aorigin = (origin + torigin) * 0.5; trace = physicstrace(origin, torigin, vectorscale((-1, -1, 0), 15.0), (15, 15, 30), self); self setorigin(aorigin); self setvelocity((0, 0, 0)); wait_network_frame(); self setvelocity(velocity); } wait_for_targets(weapon) { weapon endon("hi_priority_target"); while (isdefined(weapon)) { if (isdefined(weapon.fling_targets) && weapon.fling_targets.size > 0) { return; } wait 0.05; } } #using_animtree("zombie_springpad"); springpad_animate(weapon, armed) { self endon("death"); self endon("disconnect"); self endon("equip_springpad_zm_taken"); weapon endon("death"); weapon useanimtree(#animtree); f_animlength = getanimlength(%o_zombie_buildable_tramplesteam_reset_zombie); r_animlength = getanimlength(%o_zombie_buildable_tramplesteam_reset); l_animlength = getanimlength(%o_zombie_buildable_tramplesteam_launch); weapon thread springpad_audio(); prearmed = 0; if (isdefined(armed) && armed) prearmed = 1; fast_reset = 0; while (isdefined(weapon)) { if (!prearmed) { if (fast_reset) { weapon setanim(%o_zombie_buildable_tramplesteam_reset_zombie); weapon thread playspringpadresetaudio(f_animlength); wait(f_animlength); } else { weapon setanim(%o_zombie_buildable_tramplesteam_reset); weapon thread playspringpadresetaudio(r_animlength); wait(r_animlength); } } else wait 0.05; prearmed = 0; weapon notify("armed"); fast_reset = 1; if (isdefined(weapon)) { weapon setanim(%o_zombie_buildable_tramplesteam_compressed_idle); weapon waittill("fling", fast); } if (isdefined(weapon)) { weapon setanim(%o_zombie_buildable_tramplesteam_launch); wait(l_animlength); } } }