ReSkate mods / wawvy

Imperfect Landings

Humans aren't perfect, so neither is your skating. Tricks, grinds, and landings now have the chance to fail. Fully configurable!

by wawvy · v1.10.0 · 1 MB · 418 downloads · updated Nov 3, 2026

How to installDownload .zip (v1.10.0)Thunderstore page

Imperfect Landings icon

From the author's README on Thunderstore

By wawvy · Version 1.10.0 · MIT License

A ReSkate Lua plugin that makes landings less automatic. Easy tricks usually land cleanly; difficulty stacks into a chance of a sketchy recovery or native ragdoll. Protective falls add a smooth arm brace and knee tuck near the ground.

Install

Import ImperfectLandings-1.10.0.zip in the launcher's MY MODS, or copy this folder into ReSkate/Mods/ImperfectLandings.

Choose Turn on when asked to approve the updated plugin. Compared with 1.6.2, this release adds world.raycast for ground/arm-path checks and events.physics for native body-contact observations. Open Insert > PLUGINS > Imperfect Landings to configure it. Manual ragdoll and powerslides need a connected controller. Turn No Bail off to test falls. Leave Controller for falls / powerslides on Automatic or select your controller.

Built for ReSkate 2.1.4, plugin API 1. No additional executable, loader or library is needed.

Landing outcomes

  • Clean: normal game landing.
  • Sketchy: a modest forward lean and staggered arm catch over the game's landing animation. It blends in over roughly 0.4 seconds, then settles over the rest of the default 1.1-second recovery. The game controls the hips, knees and feet throughout. The extra carry/crouch helper and its knee-depth setting have been removed to address feet floating above the board and snapping back when recovery ends. Recovery intensity stays limited to keep the motion small.
  • Tiny powerslide: a brief native left-stick powerslide request on sketchy ground landings, 90 ms by default (adjustable from 40–120 ms). It uses the game's own slide behavior, not a drawn board offset or a velocity impulse. The live right stick, buttons and triggers are copied unchanged on every update. Existing lateral steering is retained; otherwise a small left/right input picks the slide side. The request ends immediately on jumping, grinding, dismounting or pausing, and skips speeds below 2 m/s. Tiny powerslide on sketchy landings can turn it off independently.
  • Bail: the game's manual-ragdoll chord, preserving the behavior used since version 1.2. No force-based slam or additional velocity is used.

Grind entries skip sketchy recovery completely, including in the guaranteed-sketchy test. Their sketchy probability becomes clean probability; bail probability is unchanged. Entering a grind also cancels an active ground recovery. Landings after exiting a grind can still recover normally.

The former held-stick trip implementation and its controls have been removed. Direct run-outs are unavailable through the current plugin API: native run-out counts can be observed, but there is no exported command to trigger one. Mod-triggered trips are disabled rather than modifying a trick or movement input. Failed rolls currently use native ragdoll. A direct trip requires a native ReSkate API addition.

Recovery feedback and tests

The optional Show mod-triggered sketchy / bail HUD is off by default; enable it in settings to display accepted recovery updates, blocked recovery layers, ragdoll requests and observed ragdoll confirmations. Natural falls alone do not produce a badge. The HUD hides in menus, out of focus, and in Throwdowns. Accepted API calls do not prove how an animation looks in game.

Sketchy landings request native ticker text replacements such as Sketchy Kickflip and Sketchy instead of Clean/Perfect. This changes display text, not the game's scoring-quality flag. It depends on the game resolving that text again with enough buffer space, so an already-cached ticker row may not update. Plugin settings show hook availability. Labels clear on the next attempt, timeout or protected context.

Guaranteed bail chance and Guaranteed sketchy chance override future rolls without changing saved probabilities. Select one, close the menu and land a trick. Select it again to restore normal odds. Bail uses the normal manual-ragdoll path; sketchy still skips grind entries. Missing controllers, competing input owners and unconfirmed ragdolls are reported explicitly. No Bail can prevent ragdoll.

Preview sketchy recovery runs after closing the menu within five seconds while riding. It uses the same gentle limits as real recovery and does not label a trick Sketchy. Test modes do not persist between launches; map changes, disabling the plugin, protected multiplayer and Throwdowns clear them.

Protective falls

Protective arms and tuck near ground is on by default. Natural and mod-triggered ragdolls can brace toward ground nearest the head area. Front and side falls use one shared ground target for both hands. Backward and inverted falls use separate head-guard positions, with a stronger chin and knee tuck.

The default Protective fall ground distance is 3.5 m, adjustable from 1–6 m. Saved 2.2 m values migrate to the new default; other custom distances are preserved. A safe ground direction blends from head cover toward reaching over about 200 ms, followed by the existing target and arm smoothing. Maximum reach angle from chest facing defaults to 100 degrees (75–110 adjustable), with a margin and short stable-direction delay to avoid repeated switching during a roll.

Each arm has its own elbow bend, reach limits and terrain checks. A touching hand, forearm, upper arm or collarbone releases that arm's pose immediately; short contact gaps do not reapply it. Head/neck contact also releases the head offset. The knees curl more during the head guard. The brace ends after impact or within 1.2 seconds and clears on new riding, rising, missing ground, pauses, map changes, unload and protected contexts.

This changes visible posture; it does not drive the native collision bodies or slow physical tumbling. Native arm contact takes priority, and blocked or unavailable terrain checks leave the affected arm native. The settings page shows the latest brace/guard status. Protective knee tuck applies during falls; sketchy landings use the game's own leg and foot placement.

Grind bails

A failed rail entry keeps the existing progressive balance-loss stage (240 ms by default), then releases its pose and requests native manual ragdoll. There is no crouch or powerslide request on the rail. A pop, dismount, fall, pause or match entry cancels a pending rail failure.

Mid-grind bails

Mid-grind bails is enabled by default in GRIND FAILURES. A continuous grind has a higher-risk opening, then a lower ongoing chance:

Phase Default bail chance
First 4 seconds 2.5% per second
After 4 seconds 0.4% per second

The opening is adjustable from 3–5 seconds, with separate chance sliders for both phases. These are per-second probabilities integrated over time, so a higher frame rate does not increase risk. Risk remains present after the opening.

Speed above 6 m/s multiplies either rate by an extra 10% per additional m/s. At 12 m/s, the default opening chance is 4% per second and the settled chance is 0.64% per second. The speed threshold and growth are configurable; the resulting rate caps at 50% per second. These ongoing settings are separate from landing/entry odds.

A mid-grind failure requests the existing native manual ragdoll directly, without adding crouch, powerslide or slam force. The HUD identifies Mid-grind ragdoll requested, and settings show the latest risk snapshot and mid-grind request count. A request is not an observed fall; ordinary native ragdoll confirmation still applies.

Only one bail attempt is made per continuous grind, including entry failures. An unavailable controller is reported rather than retried continuously. Leaving a grind, respawning, pausing or changing maps clears its timer. Throwdowns and multiplayer opt-out block this feature too. Ongoing grind rolls pause while either guaranteed landing test is active, so the sketchy test stays predictable.

Manual ragdoll uses a brief game-only LB + RB + L3 + R3 controller replacement. ReSkate's own bindings read the physical controller, so injected L3 does not activate ReSkate Forward Boost. Analog sticks and triggers are neutral during that pulse. The layer releases after 140 ms, on a fall, or on pause; saved bindings remain unchanged.

Online protection

Multiplayer free skating is enabled by default, with a persistent ON/OFF button. Throwdowns always disable the entire mod, including tests, ticker overrides, recovery and the HUD, regardless of that button. Both live match state and match events are checked, including a match already active when loading the plugin. Old contacts and previews are discarded instead of replayed afterward.

Default odds

Powerslides are excluded from landing rolls, including mod-triggered slides and guaranteed test modes. Their score entries and delayed contact notifications cannot trigger another sketchy recovery, powerslide or bail. A new real trick or jump remains eligible immediately afterward.

Each landing gets one outcome roll. Multiple contact notifications are combined; chances are not re-rolled every frame. Grind entry and subsequent exit are separate contacts.

Low, slow trick Bail Sketchy Clean
No flips or spin 0.75% 3.00% 96.25%
Kickflip 2.00% 4.88% 93.13%
Double kickflip 5.75% 10.50% 83.75%
Triple kickflip 12.00% 19.88% 68.13%

Rounded percentages can differ from 100% by 0.01. On grind entry only, the sketchy share becomes clean.

All difficulty contributions add together:

Factor Default addition to difficulty
Each board flip 1.25 points
Multiple-flip penalty 2.50 × flips × (flips − 1) / 2
Each 180° of body spin 0.65 points
Each 180° of board spin 0.35 points
Each 360° of body flip/roll 2.50 points
Each metre of descent beyond 1.5 m 0.65 points
Each m/s of speed beyond 6 m/s 0.30 points
Grind entry 1.25 points
Grind exit 0.80 points
Each late/dark modifier 0.60 points
Named trick difficulty Family bonus below × Named trick difficulty setting

Individual trick difficulty

Kickflips, heelflips and ordinary pop shove-its get no technical bonus. Technical tricks add a separate contribution, on top of their flip count, board spin and other landing factors. These are adjustable gameplay ratings rather than an objective ranking of real-world trick difficulty.

Trick family Technical bonus Default bail chance, otherwise low/slow landing
Pop shove-it / shuvit 0 1.10%
Kickflip / heelflip 0 2.00%
Varial flip 1.5 3.85%
Tre / 360 flip 3 5.70%
Hardflip 4 6.35%
Impossible 6 6.75%
Inward heelflip 4.5 6.85%
Laser flip 6 8.70%

Pressure, hospital, casper, dolphin/forward, gazelle and dragon flips also have technical ratings. Stance prefixes, spaces and punctuation do not hide a named family. Named trick difficulty scales these bonuses together; zero disables them. Native trick-feed board-spin measurements take precedence over inferred spins, and rewritten trick names do not accumulate duplicate bonuses.

failure % = min(maximum failure %, base failure % + difficulty × overall difficulty)

sketchy % = min(100 − failure %, maximum sketchy %, base sketchy % + difficulty × overall difficulty × sketchy growth)

By default, overall failure odds cap at 35%, sketchy odds at 55%. Everything in the tables, the caps, the base chances, the recovery length/intensity and the protective fall settings can be adjusted on the plugin's page. Set a contribution to zero to remove that factor. Set overall difficulty to zero to use only flat base chances.

Height means apex to landing, not just the ledge's height: a higher jump or a landing below takeoff both increase the descent. Position samples and ReSkate's native jump telemetry are combined. A contact too short to sample uses downward impact speed to estimate descent. Peak takeoff/flight/contact speed is used. Body rotation from the trick feed and telemetry is compared rather than counted twice. The latest update for each trick-list entry is kept, so repeated HUD updates do not multiply the risk.

Controls and compatibility

Settings save automatically. The page shows measured difficulty, odds, landing detection, pose updates, ticker status and confirmed/unconfirmed ragdolls. Console commands: imperfect status, on, off, reset, preview.

Only one plugin can own each body pose or controller layer. Sketchy recovery uses upper-body rotation offsets and does not acquire a carry layer or write hip, leg, foot or board poses. Competing owners are respected; an unavailable powerslide does not block body recovery. The plugin settings report an input refusal or missing controller. A successful input request is not confirmation that the game rendered a powerslide; its angle, traction and speed loss remain native and need an in-game check. Recovery clears on new jumps, grinds, pauses, map changes and unload. The removed speed-scrub and trip settings are ignored.

Flip names and Double/Triple modifiers use the English trick feed; custom names or translations may hide information. Height combines sampled and native apex-to-landing descent; speed uses peak takeoff, flight and contact speed. Updated trick-list entries replace earlier notes rather than multiplying difficulty.

176 automated checks pass using the official Luau interpreter, covering native-foot-safe sketchy recovery through completion, preview and interruption; protective targeting, smoothing, shared hand targets and contact priority; plus the existing landing, powerslide, grind, HUD and protected-context behavior. A separate comparison checks 1,000 arm/terrain geometry cases and native contact groups against the last preview build. These checks simulate API calls and do not verify the rendered game animation.

Before uploading, use Preview sketchy recovery on flat ground and a bank, then test real sketchy landings with powerslides on and off. Check that feet follow the moving board through the recovery and its release. Also check a front fall, side fall and backward roll. The native manual-ragdoll input module remains unchanged from 1.2.0.

API reference: skater, world, events, input, Throwdowns.

Install Imperfect Landings

You need ReSkate and your own copy of skate. on Steam.

  1. Open ReSkateLauncher.exe and go to MODS.
  2. Search for Imperfect Landings and click install. The launcher also installs anything it depends on.
  3. Press PLAY. In game, the MODS tab of the ReSkate menu (Insert) turns it on and off.

Or install it by hand: download the .zip and drop it on the launcher window, or unzip it into its own folder in Mods\ beside Skate.exe.

Maps show up in the ReSkate menu's level list. To join a server running a custom map, you need the same map installed. If the game won't load after installing, see known issues.

skatemods doesn't host or review this mod. The download comes straight from Thunderstore. Only install mods you trust, because scripts can run code.