// No Cap (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 // Negate observed effects of Super Sneakers to avoid disrupting later calculations if player.powers[pw_sneakers] then if not player.sneakers then player.sneakers = true player.originalspeed = ($1 * 3) / 5 player.normalspeed = (skins[player.mo.skin].normalspeed * 3) / 5 end player.realspeed = ($1 * 3) / 5 elseif player.sneakers then player.sneakers = 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 then player.normalspeed = player.originalspeed end // Re-apply increased speed of Super Sneakers now that calculations are complete if player.sneakers then player.normalspeed = max($1, skins[player.mo.skin].normalspeed) end end end)