Plugins: a general launch API in place of grind_exit; grind exits is all Lua, and 701 is a grind

The SDK knew grind exits: reskate.skater.grind_exit took a toe/heel/left/right wish, and C++ worked
out the rail's direction, toe and heel from the stance and facing, the 1.8 m/s and the strength.
That logic is now the grind-exits mod's own Lua (plugin/exits.lua, kept on this machine). What has
to run on the physics thread is general:
- Extension/Skater/launches: every launch of the local skater (ollie, grind, no_comply, boneless),
  classified by its call site and the state before it, with the board's direction of travel; the
  `launch` event for plugins with events.skater; reskate.skater.shape_launch(from, {across, along,
  up}) sets those speeds against the travel, one plugin a kind.
- reskate.skater.get() gains `right` (the root's right axis) and `switch` (the game's stance flag).
- Extension/Skater/pad_hide: reskate.input.hide's pad filter, out of the old grind exit file.
Removed: reskate.skater.grind_exit, the grind_exit event, GrindExitWish and GrindPop.

Physics state 701 is a grind too (the game checks it with 400 in about a dozen places; the
2026-10-11 measurement only reached the 400s): pops out of it were dropped, and skater_state called
it "other". Launches, skater_state ("grinding") and the trainer's grind pop all count it now.
Tests: the grind-exits plugin test drives the new path (11 checks of its own).
This commit is contained in:
AyeZeeBB committed 2026-10-21 21:41:04 -05:00
1 parent 97793b79fc
commit 721ed9e64d
24 files changed
+630 -517

No files matched your search

+3 -3
View File
@@ -41,7 +41,7 @@
#include "Extension/UI/hud_corner.h"
#include "Extension/UI/Overlay/game_images.h"
#include "Extension/Plugins/plugin_runtime.h"
#include "Extension/Skater/grind_exit.h"
#include "Extension/Skater/launches.h"
#include "Extension/Skater/trick_rewrite.h"
#include "Extension/Skater/camera_observer.h"
#include "Extension/Progression/entitlement_request_hook.h"
@@ -481,8 +481,8 @@ extern "C" __declspec(dllexport) BOOL WINAPI DingoSDKDebugInitialize() {
dingosdk::overlay::prepare_game_images();
record("{\"event\":\"skater_physics_initialized\",\"active\":" + std::string(physics ? "true" : "false") + ",\"xray\":" +
std::string(xray ? "true" : "false") + "}");
const bool grind_exits = dingosdk::grind_exit::start(r.base);
record("{\"event\":\"grind_exit_initialized\",\"active\":" + std::string(grind_exits ? "true" : "false") + "}");
const bool launch_hooks = dingosdk::launches::start(r.base);
record("{\"event\":\"launches_initialized\",\"active\":" + std::string(launch_hooks ? "true" : "false") + "}");
const bool trick_rewrites = dingosdk::trick_rewrite::start(r.base);
record("{\"event\":\"trick_rewrite_initialized\",\"active\":" + std::string(trick_rewrites ? "true" : "false") + "}");
const bool noclip_velocity = dingosdk::start_client_noclip_velocity(r.base);