//TF2 style rocket jump by Duck (Dusk209) //No credit needed, feel free to use it however you want. addHook("MobjThinker", function(mo) //Explosion jump if mo.state == 2326 for player in players.iterate do if player.mo != nil local distance = P_AproxDistance(P_AproxDistance(player.mo.x-mo.x, player.mo.y-mo.y), player.mo.z-mo.z) local maxdist = 150 //How close the player needs to be to the explosion for the effect to happen local maxjumpforce = 10 //Cap on jump force to reduce the advantage of low ping and reduce the difficulty of performing a perfect rocket jump local forcediv = 10 //Divide jump force by x local rjdamage = 10 //Amount of self damage if distance <= maxdist * FRACUNIT if mo.target == player.mo S_StartSound(mo, 161) // Sound to play on explosion contact local jump = ((maxdist*FRACUNIT) - distance) / forcediv if jump > maxjumpforce*FRACUNIT jump = maxjumpforce*FRACUNIT end local zdist = player.mo.z - mo.z local angle = R_PointToAngle2(mo.x, mo.y, player.mo.x, player.mo.y); P_Thrust(player.mo, angle, jump) if zdist >= 0 player.mo.momz = $1 + jump else player.mo.momz = $1 - jump end if not player.powers[pw_super] and not player.powers[pw_flashing] and not player.powers[pw_invulnerability] if player.powers[pw_shield] == 0 and player.mo.health > 1 P_PlayRinglossSound(player.mo) player.rjemeralds = player.powers[pw_emeralds] or 0 player.rjringweapons = player.ringweapons or 0 player.rjcurrentweapon = player.currentweapon or 0 player.rjexplosion = player.powers[pw_explosionring] or 0 player.rjinfinity = player.powers[pw_infinityring] or 0 player.rjautomatic = player.powers[pw_automaticring] or 0 player.rjbounce = player.powers[pw_bouncering] or 0 player.rjscatter = player.powers[pw_scatterring] or 0 player.rjrail = player.powers[pw_railring] or 0 player.rjgrenade = player.powers[pw_grenadering] or 0 player.powers[pw_emeralds] = 0 player.ringweapons = 0 player.powers[pw_explosionring] = 0 player.powers[pw_infinityring] = 0 player.powers[pw_automaticring] = 0 player.powers[pw_bouncering] = 0 player.powers[pw_scatterring] = 0 player.powers[pw_railring] = 0 player.powers[pw_grenadering] = 0 player.lossprev = player.losstime if player.health > rjdamage P_PlayerRingBurst(player, rjdamage) else P_PlayerRingBurst(player, -1) end player.losstime = player.lossprev P_GivePlayerRings(player, -rjdamage) player.ringweapons = player.rjringweapons player.powers[pw_emeralds] = player.rjemeralds player.currentweapon = player.rjcurrentweapon player.powers[pw_explosionring] = player.rjexplosion player.powers[pw_infinityring] = player.rjinfinity player.powers[pw_automaticring] = player.rjautomatic player.powers[pw_bouncering] = player.rjbounce player.powers[pw_scatterring] = player.rjscatter player.powers[pw_railring] = player.rjrail player.powers[pw_grenadering] = player.rjgrenade elseif player.powers[pw_shield] P_RemoveShield(player) S_StartSound(player.mo, sfx_shldls) end player.powers[pw_flashing] = 100 player.mo.shortblink = 80 end end end end end end end, MT_THROWNEXPLOSION) addHook("MobjThinker", function(mo) //Grenade jump: Stronger than explosion and bounce if mo.state == 2326 for player in players.iterate do if player.mo != nil local distanceg = P_AproxDistance(P_AproxDistance(player.mo.x-mo.x, player.mo.y-mo.y), player.mo.z-mo.z) local maxdistg = 150 //How close the player needs to be to the explosion for the effect to happen local maxjumpforceg = 20 //Cap on jump force to reduce the advantage of low ping and reduce the difficulty of performing a perfect rocket jump local forcedivg = 5 //Divide jump force by x local gjdamage = 20 //Amount of self damage if distanceg <= maxdistg * FRACUNIT if mo.target == player.mo S_StartSound(mo, 161) // Sound to play on explosion contact local jumpg = ((maxdistg*FRACUNIT) - distanceg) / forcedivg if jumpg > maxjumpforceg*FRACUNIT jumpg = maxjumpforceg*FRACUNIT end local zdistg = player.mo.z - mo.z local angleg = R_PointToAngle2(mo.x, mo.y, player.mo.x, player.mo.y); P_Thrust(player.mo, angleg, jumpg) if zdistg >= 0 player.mo.momz = $1 + jumpg else player.mo.momz = $1 - jumpg end if not player.powers[pw_super] and not player.powers[pw_flashing] and not player.powers[pw_invulnerability] if player.powers[pw_shield] == 0 and player.mo.health > 1 P_PlayRinglossSound(player.mo) player.rjemeralds = player.powers[pw_emeralds] or 0 player.rjringweapons = player.ringweapons or 0 player.rjcurrentweapon = player.currentweapon or 0 player.rjexplosion = player.powers[pw_explosionring] or 0 player.rjinfinity = player.powers[pw_infinityring] or 0 player.rjautomatic = player.powers[pw_automaticring] or 0 player.rjbounce = player.powers[pw_bouncering] or 0 player.rjscatter = player.powers[pw_scatterring] or 0 player.rjrail = player.powers[pw_railring] or 0 player.rjgrenade = player.powers[pw_grenadering] or 0 player.powers[pw_emeralds] = 0 player.ringweapons = 0 player.powers[pw_explosionring] = 0 player.powers[pw_infinityring] = 0 player.powers[pw_automaticring] = 0 player.powers[pw_bouncering] = 0 player.powers[pw_scatterring] = 0 player.powers[pw_railring] = 0 player.powers[pw_grenadering] = 0 player.lossprev = player.losstime if player.health > gjdamage P_PlayerRingBurst(player, gjdamage) else P_PlayerRingBurst(player, -1) end player.losstime = player.lossprev P_GivePlayerRings(player, -gjdamage) player.ringweapons = player.rjringweapons player.powers[pw_emeralds] = player.rjemeralds player.currentweapon = player.rjcurrentweapon player.powers[pw_explosionring] = player.rjexplosion player.powers[pw_infinityring] = player.rjinfinity player.powers[pw_automaticring] = player.rjautomatic player.powers[pw_bouncering] = player.rjbounce player.powers[pw_scatterring] = player.rjscatter player.powers[pw_railring] = player.rjrail player.powers[pw_grenadering] = player.rjgrenade elseif player.powers[pw_shield] P_RemoveShield(player) S_StartSound(player.mo, sfx_shldls) end player.powers[pw_flashing] = 100 player.mo.shortblink = 80 end end end end end end end, MT_THROWNGRENADE) addHook("MobjThinker", function(mo) //pw_flashing cutoff if mo.player and mo.shortblink and mo.player.powers[pw_flashing] if mo.player.powers[pw_flashing] <= mo.shortblink mo.player.powers[pw_flashing] = 0 mo.shortblink = nil end end end, MT_PLAYER)