-- No Cap v1.1 (Chaotic Variant) by Wumbo -- Special thanks to Rumia1, whose implementation in Classic.wad provided some guidance for my own addHook("ThinkFrame", do for player in players.iterate do -- Get movement speed of player proportional to scale player.realspeed = FixedDiv(FixedHypot(player.rmomx, player.rmomy), player.mo.scale) -- Get the character's default normalspeed if player.originalspeed == nil then player.originalspeed = skins[player.mo.skin].normalspeed end -- Temporarily negate effects of speed-increasing powerups to avoid disrupting later calculations if player.powers[pw_sneakers] or player.powers[pw_super] then if not player.fast then player.fast = true player.originalspeed = ($1 * 3) / 5 player.normalspeed = (skins[player.mo.skin].normalspeed * 3) / 5 end player.realspeed = ($1 * 3) / 5 elseif player.fast then player.fast = false player.originalspeed = skins[player.mo.skin].normalspeed player.normalspeed = skins[player.mo.skin].normalspeed end -- Prevent the movement speed value from exceeding normalspeed when the player is airborne -- The first tic after touching the ground is also taken into account if player.airborne or not P_IsObjectOnGround(player.mo) then player.realspeed = FixedMul($1, player.mo.friction) end player.airborne = not P_IsObjectOnGround(player.mo) -- Allow conservation of speed underwater by bringing movement speed value closer to normalspeed if player.mo.eflags & MFE_UNDERWATER and P_IsObjectOnGround(player.mo) then player.realspeed = $1 * 2 end -- Make sure underwater speed adjustments don't carry over when the player exits water if player.underwater and not (player.mo.eflags & MFE_UNDERWATER) and player.realspeed > player.originalspeed then player.realspeed = $1 / 2 end player.underwater = player.mo.eflags & MFE_UNDERWATER -- Disable speed cap when movement speed value exceeds normalspeed -- This is done by adjusting the normalspeed to match the movement speed value on the fly if player.realspeed > player.normalspeed then player.normalspeed = $1 + player.realspeed - player.originalspeed elseif player.realspeed <= player.originalspeed and not (player.powers[pw_strong] & STR_DASH) then player.normalspeed = player.originalspeed end -- Re-apply effects of speed-increasing powerups now that calculations are complete if player.fast then player.normalspeed = max($1, skins[player.mo.skin].normalspeed) end end end)