72 Commits
Author SHA1 Message Date
AyeZeeBB 721ed9e64d 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).
2026-10-21 21:41:04 -05:00
zeex64 98b9a3e839 Merge pull request #330 from andrewnakas/physics-210
Bug fix: ReSkate Trainer landings stutter with Gravity off 1, Grind lock-on 0 still locks on
2026-10-21 18:31:14 -05:00
AyeZeeBB f352179785 Merge main into plugins: the trainer (PR 300), object unlocks (290), server browser sort (302) and export bitrate (322)
Resolved where main's trainer meets the plugin branch:
- Board Break, the drone, Road Rash, Hall of Meat and Grind Exits are plugins here, so their
  built-in code stays deleted: the trainer no longer hands Board Break's wear values back (the
  plugin does not tune physics), its QUICK SETTINGS list no longer names Grind Exits or Board
  Break, and the drone's debug action and menu are not brought back.
- The trainer's pump power, gravity, revert boost and transition help run beside the plugins'
  pushes and velocities on each physics step; both sides' new declarations are kept.
- The game's own pad reads go through game_pad_read (the gamepad filter, Dark Pop's D-pad hiding,
  the grind sticks) and then the plugin branch's menu and hidden-button handling.
- The trainer's forced grind settings are noted as the stance like any other value.
2026-10-21 18:26:55 -05:00
andrewnakasandClaude Opus 5.5 df29f533fd Trainer 0.8.6: Animation timing 1 by default
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 16:52:37 -06:00
andrewnakasandClaude Opus 5.5 382dd4b010 Advanced gravity: Animation timing defaults to 1, tooltips in paragraphs
Players found the flat ground stutter goes away with Animation timing at 1, so
that is the default now: moving Gravity off 1 gives normal-gravity timing at
once, and the Advanced gravity fold is there to change it. Saved under a new
key (gravity_animation_timing), since 0.8.5 saved its default 0. The gravity
tooltips break into paragraphs.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 16:52:37 -06:00
andrewnakasandClaude Opus 5.5 4f8810f749 Trainer 0.8.5: Advanced gravity (animation timing, landing gravity)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 14:24:44 -06:00
andrewnakasandClaude Opus 5.5 0f5b81135d Advanced gravity: animation timing and landing gravity
Players still saw landings stutter on flat ground tricks with Gravity at
x1.31: the game fits a trick into the time to land but cannot hurry a catch
past its own speed, so in a shorter flight the catch is still playing when the
wheels touch. A fold under Gravity adds two levers:

- Animation timing (0 .. 1): the skater's air animations play faster by as much
  as the flight is shorter than at the game's gravity (rate hook 0x10dd2f0), so
  tricks and landings keep their x1 timing; 0 is the game's own, between part
  of the way. Back to the game's rate on landing or when the countdown stops.
- Landing gravity of its own: the gravity the game plans landings with (the
  landing searches), the same as Gravity unless set.

Options gravity_timing, gravity_landing_own, gravity_landing; presets carry
them; they let go with Gravity under a host's physics or with boosts off.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 14:24:43 -06:00
andrewnakasandClaude Opus 5.5 58d064e2d7 Trainer 0.8.4: landings at other gravities, Grind lock-on 0
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 11:51:46 -06:00
andrewnakasandClaude Opus 5.5 76a2332771 Sticky Grinds: the dial reaches the air reach too, so 0 is no lock-on
The Grind lock-on dial drove only the ground lock-on values; the reach from the
air (physicsgrindsair.maxdist*, physicstrajectory.scoregrind) stayed stock, so
at 0 the board was still pulled onto rails in flight (over a gap, over water).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 11:51:39 -06:00
AyeZeeBB b12b904c65 Plugins: joints, physics tuning, velocity, game settings and pose offsets
- reskate.skater.joint and reskate.session.joint: where any joint of your skater or another player's is.
- reskate.physics.tuning, find and tune: the trainer's tuning values, a plugin's set over the player's own and never saved.
- reskate.skater.set_velocity: the board's velocity set or added to at the next on-board physics step, in the air too.
- reskate.settings.set and the settings.write permission: a game setting held while the plugin keeps it, then put back; gameplay settings stay locked in multiplayer.
- reskate.skater.pose: joints turned and scaled on top of the animation, in the pose drawn and sent.
- The mesh tests build anim_core, which the session's joint publishing now uses.
2026-10-20 15:46:54 -05:00
waguandClaude Opus 5.5 cd36529865 Merge plugins into server-lua-api
The new services and throwdown kit API files use add_functions and the shared
helpers; add_functions opens a read-only parent for reskate.throwdowns.flag.
throwdowns.release_flag stays removed, as plugins has it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 12:13:19 -04:00
waguandClaude Opus 5.5 67e8e439f7 Server: lock ollies for a player
A lock tool like noclip and boosts. The player's game enforces it: the roster
carries guest_ollies (protocol 53), and the jump hook gives a locked ollie no
upward speed. Plugins get player.permissions.ollies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 09:53:31 -04:00
andrewnakasandClaude Opus 5.5 6634d7dbae Trainer 0.8.3 on ReSkate 2.1.1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-20 00:27:25 -06:00
AyeZeeBB 8444553402 Throwdowns: the throwdown kit, so a mode is a plugin and the SDK knows no particular mode
Plugins register modes (card, replaces, order, flag, players) and publish documents through
reskate.throwdowns.ui: the setup page, the waiting card, HUD slots themed on the game's HUD_<theme>_*
widgets, the match panel, flags and match restrictions. SmokeyDawg58's native plumbing
(throwdown_menu.cpp and its .inl files) renders them and posts throwdown_ui events back. kit::flag
is the one native flag registration. General services added for it: reskate.files, reskate.ui.dialog,
reskate.skater push/hold/bone_cam, reskate.camera.pad_flight, reskate.physics competition,
reskate.session.world, reskate.tricks feed/gesture, and world entities.

His ten modes are now Lua in his plugin: the rules, referee and wire (td/rules, referee, wire), and
every page and HUD document (td/ui*.lua). Extension/Modes and reskate.modes are gone, along with
every race and 1-UP branch in the SDK. The plugin test drives each mode through kit events.

A native setup page is never written to while it closes into flag placement: its rows are not
republished, the stock page is put back once the exit is over, and the stock Players slider is left
alone while a plugin flag is out. This fixes the crashes on the Deathrace button and on 1-UP's
Confirm.
2026-10-20 01:04:54 -05:00
andrewnakasandClaude Opus 5.5 c2d86f2ffa Trainer 0.8.2: Underflip speed, Underflip part only, a speed for each underflip
- Underflip speed: the game holds the underflip's two playback rate controllers
  (cdbchooser_onboard_underflips_(pbrate) 1-1.2, ..._toair(pbrate) 0.6-1.2) to a band it
  copies into each controller as it is made; the trainer scales that band, and the state
  copy that starts the underflip, so the slider sets the whole underflip.
- Underflip part only: the band spans the flip's speed and Underflip speed from the start;
  where the board turns back the trainer scales the rate the game computes for its rate
  controllers every tick (0x10dd2f0, called by their update 0x10de730) until the landing.
- A speed for each underflip at the bottom of Advanced trick speed (kickflip, heelflip, pop
  shuvit, FS pop shuvit and the four impossible underflips), times Underflip speed, and the
  Late flip slider beside them.
- Late flip speed in the TRICKS card; dial sliders reach 0; Underflip speed named on the
  MODIFIED line and shared by a session's host (session extras version 2).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 23:20:59 -06:00
AyeZeeBB db52508bdb Plugins: Hall of Meat and grind exits are plugin mods now; their C++ is gone
Hall of Meat (contrib/plugins/hall-of-meat) and grind exit triggers
(contrib/plugins/grind-exits) are Lua plugins: the bail model, its Meat card,
each map's best, the trigger rules, settings, console commands and menu panels
are theirs, with their own checks that dingosdk_plugin_tests runs.

What has to run in the game stays in core as plugin services:
- every physics step of the skater (skater_physics, the physics_step event,
  permission events.physics);
- the skater's x-ray (xray, xray_render, xray_skeleton; reskate.skater.xray and
  the draw handler's d:skeleton);
- skate.'s bottom left HUD corner (hud_corner; reskate.hud.corner);
- the game's slow motion, never in a session (game_speed; reskate.time.slow and
  speed, permission game.speed);
- the side of the next pop out of a grind and pad controls kept from the game
  (grind_exit; reskate.skater.grind_exit, the grind_exit event, reskate.input.hide);
- skate.'s own pictures by name (game_images; d:game_image), d:gradient and a
  font for drawn text.

Removed: Extension/HallOfMeat, grind_exit_control and its commands, the HALL OF
MEAT and GRIND EXITS add-on pages, home tile, hub and native menu rows, their
menu models, and the hallofmeat and grindexit built-in commands.
2026-10-19 16:51:28 -05:00
andrewnakasandClaude Opus 5.5 f9c6dbdda2 Trainer 0.8.1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011m6eM3ps6bttTbZqo9Gz6Y
2026-10-18 20:51:36 -06:00
andrewnakasandClaude Opus 5.5 e01d8c2307 Dials go to 0 (Grind lock-on at 0 = no lock-on)
A preset's dial refused 0 in its box and in `trainer dial` (it works on a log scale). A factor of
0 now sets every value the dial moves to 0; a value that moves the other way stays stock instead
of going to infinity.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011m6eM3ps6bttTbZqo9Gz6Y
2026-10-18 20:11:44 -06:00
andrewnakasandClaude Opus 5.5 7dc0b6cce3 Gravity: landings on time; the landing countdown follows the trainer's gravity
The game plans each flight's landing with its own gravity and the air pose reaches for the ground
as that countdown runs out. Above x1 the skater came down early, the body sank into the ground
before the wheels touched and the landing came late (x3: a flat ollie bailed). The countdown is
now set to this flight's time down to the planned height at the trainer's gravity.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011m6eM3ps6bttTbZqo9Gz6Y
2026-10-18 16:56:59 -06:00
andrewnakasandClaude Opus 5.5 14cc8b17b1 Boosts start at 0 (off), so RESET EVERYTHING reads STOCK
The forward, up and off-board up boost speeds defaulted to +20, which counted as not
stock. They now default to 0: the boost adds nothing until a speed is set, and resets
(RESET EVERYTHING, the console resets, restore_debug) put them back to 0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 11:29:09 -06:00
andrewnakasandClaude Opus 5.5 5f0b2de4af Cheats: boosts past the sliders; cheats and addons in QUICK SETTINGS and on the MODIFIED line
Forward, up and off-board up boosts take a typed value up to 10000 (sliders still end
at 300 / 25), Revert Boost strength up to x100. Noclip, No Bail, Dark Pop, a boost
that is not +20, Revert Boost, grind exit triggers and Board Break are listed at the
top of QUICK SETTINGS with their values (Go to, Reset), make the SANDBOX line say
MODIFIED, and RESET EVERYTHING turns them back.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 10:42:29 -06:00
andrewnakasandClaude Opus 5.5 6c5689dedb Trainer changelog: typed values, slide or step, help on every value (0.8.0)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 03:04:00 -06:00
andrewnakasandClaude Opus 5.5 038f42a8b6 Sandbox: type any number, slide or step in the full screen menu, help on every value
- Full screen sliders (stepper): a click still steps, press and move slides the
  value; a number box beside each (the controller's focus skips it). A typed
  value past a slider's end stays there, and stepping does not snap it back.
- No slider end is a limit for a typed number: game speed, return delay, the
  full screen value rows (their bar now spans 0 to 4x the game's own), and the
  trainer's own limits behind the commands (gravity 0.001 to 1000, flip speed to
  1000, pump power and bending boost to 1e6, transition and grind numbers, the
  bending rules).
- Help: the 74 named rows that had none now explain themselves; every slider's
  explanation shows on hover and in the full screen bottom bar; unnamed rows
  say what they are.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 02:56:06 -06:00
andrewnakasandClaude Opus 5.5 c99b454749 Trainer docs: the SANDBOX page and Skater > Cheats, 0.8.0 changelog
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 00:19:34 -06:00
andrewnakasandClaude Opus 5.5 0bcb0ba2ac Merge ReSkate v2.1.0 into the trainer, in its new menu layout
The trainer keeps upstream's page and naming (SANDBOX; noclip, No Bail and
the boosts on Skater > Cheats; the full screen controller menu) with its own
TUNE sections, presets card and search inside. The MOVEMENT tab is gone:
`trainer open movement` opens Skater > Cheats, where the Revert Boost rows
now sit. Upstream's Hardcore preset sits beside Realistic; saving
trainer.json and reading the map file stay off the client thread.

Board Break's wear and the trainer no longer undo each other: wear writes
four tuning values itself, and every trainer write used to put them back to
the trainer's copy (and a level loaded on a worn board took them as stock).
board_break::handling_value() tells the trainer what wear wants; values the
player has not changed are handed back to it, their stock is the game's own.

Tests: Hardcore's check follows the sections (topic, not the old lists);
the session test pokes a flip speed past the trainer's own limit (100).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 00:13:49 -06:00
zeex64 5a4c8a980c Merge pull request #185 from miflow13/trainer-hardcore-preset
Trainer: Hardcore preset, beside Realistic
2026-10-17 12:53:24 -05:00
AyeZeeBB 4c07f2493b Menu: a full screen layout for controllers beside the window, and the pages regrouped
The ReSkate menu now has two styles, switched with View / F11 or the buttons in its top bar
and saved with the profile (`ui fullscreen`):
- Window: the mouse menu as before, with a side rail of pages in groups.
- Full screen: made for a controller, in the pause menu's look. Pages across the top (LB / RB),
  each page's sections as the ONLINE page's tabs (LT / RT), button prompts at the bottom, the
  pause menu's sounds, and the pause menu's own Multiplayer pages as ONLINE.

The pages are regrouped: HOME (quick switches and a tile for each page), MAP, BUILD, SKATER
(freecam, first person, cheats), SANDBOX (once Trainer), ADDONS (drone, Board Break, Road
Rash, Hall of Meat, grind exits, music), ONLINE, PROGRESS, MODS, SETTINGS, DEVELOPER.

Full screen, every shared control is drawn for a pad: switches and option rows changed with
left / right one step a press, sliders as steppers that repeat when held, rows of buttons,
and pages that scroll with the right stick. Search boxes and typed values stay in the window.
A pad press takes the menu's focus back and hides the pointer until the mouse moves.

Also: map pictures in the map picker (official loading screens, a mod's icon) with a search
box in the window, Splash and Tutorial Island left out of it; number boxes beside the
window's sliders; the binds in groups, with an action bind to open the menu (`menu`); a menu
size for each style (`ui scalefull`); the time of day stepping from the one last asked for.
2026-10-16 23:37:33 -05:00
AyeZeeBB 719cba1166 Freezes and crashes: the game's threads no longer wait on ReSkate's slow work
Players reported the game hanging for about a second while skating. A
profile showed the memory line in the log walking every heap
(HeapSummary) on the client thread, 0.5 to 2 s every two minutes. An
audit of everything that runs on the game's update and render threads
found more of the same, and Sentry's top crashes had causes of ours.

Freezes:
- Memory log line: no heap walk or thread snapshot; the GPU part and the
  write happen on a thread of their own.
- Profile database: synchronous=NORMAL in WAL mode. A save is still kept
  when the game crashes; every play event no longer waits for the disk
  inside the game's hooks.
- ReSkate's own preferences and values (menu clicks, session sliders,
  Discord) are saved by a background writer in order; reads see a value
  until it is saved.
- Input: the foreground window and the keyboard are sampled on a thread
  of their own (GetAncestor and GetAsyncKeyState stalled the client tick
  40-50 ms when another program held Windows' lock); flight input uses
  the sample; ClipCursor at most twice a second while a menu has the
  pointer.
- Hooks installed while the game runs go in one transaction per place
  (HookBatch): throwdowns, remote players, the party, Hall of Meat.
- Off the update thread: the host's map package lookup (one table read in
  the background, not the Mods folder per offer), the trainer's map file
  and settings save, Board Break's settings save, mod music playlists and
  their covers, the Spotify station covers.
- Off the render thread: the Modding page's and the deck card's Mods
  folder reads. The overlay's three startup waits share five seconds.
- Less work per frame: Steam names reused while one a frame is asked
  again, 2 friends a tick, steam_api64.dll checked once per process,
  cosmetic names read in place rather than a system call per character,
  an outfit load no longer copies the inventory per slot, the throwdown
  type scan runs at background priority over resident memory, the Board
  Break deck label is kept a minute.

Crashes:
- Render-resource pool: the metadata fields are written to the state
  owner only. The other renderer is 0x2daa00 bytes, and +0x11aae28 is far
  past its end (store_field crash; heap corruption in every release).
- Other players' skateboard effects: a stale skateboard component is no
  longer followed, and the joint lookup is walked with a bound first (an
  endless loop in reused memory ended in GameStall).
- Launcher: Oodle decodes into the buffer it asks for with corrupt data
  possible, and its assertions no longer stop the process (heap corruption
  in the store-copy scan; a breakpoint in oo2core).

Timings (Send performance timings):
- A frame of half a second or more in a level is sent as game.freeze:
  where the time went (ReSkate's tick, the game's frame, or outside it),
  whether the renderer kept presenting, and ReSkate's busiest zones.
- Closing the game sends the level session it was in.

Music after a connection drop:
- Spotify device: an account Spotify could not be reached with is kept and
  tried again (3 s doubling to a minute); a session that drops is taken
  up again. Only an account Spotify refuses is asked for anew.
- YouTube playlist pictures that could not be fetched are tried again,
  from 30 s to 10 minutes apart.
2026-10-15 18:10:53 -05:00
andrewnakasandClaude Opus 5.5 a903b4f98c Trainer 0.7.1: bailing no longer opens the trainer
The trainer's own controller combo for its menu (LB + RB + click the right stick) is also
how you bail. Removed, as standard ReSkate has none: the menu opens with Insert.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 14:29:38 -06:00
andrewnakasandClaude Opus 5.5 7234243462 Trainer 0.7.0: wallies, on-foot moves, late flips, Dark Pop 3.1, built on ReSkate 2.0.9
Merges ReSkate v2.0.9.
- Wallies (the game's own switch) with their measured numbers; double / triple jump, jump
  on release and wipeout bounce on foot; foot flip / spin speeds; no speed limit on foot.
- Flip speed and the per-trick Late flip speed now change late flips; Late flip start /
  buffer rows.
- The trainer never changes the game's own settings (GAME SETTINGS rows only show them).
- Dark Pop 3.1 (Sivaes/darkpop, GPL-3.0), saved on and off like No Bail; Revert Boost 2.0.
- The search for the game's values walks memory once and shows in the panel.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 14:13:26 -06:00
Belcross 837bea4c40 Grind exit triggers: pick the grind exit side with LT / RT
LT / RT pressed during a grind pick the side the skater pops out to,
independently of the trick and the body's rotation (both come from the
left stick in skate.'s own controls). Only the sideways part of the
grind pop's launch is replaced, with the game's own sideways speed; the
trick, spin, pop height and along-rail speed are untouched.

- Input Mode: Toe / Heel (character relative, needs the stance) or
  Left / Right of the direction of travel.
- Grab guard: a trigger used to pick the side is hidden from the game
  until released, so it never starts a grab.
- Lean guard: while a claimed trigger is held in a grind, the left
  stick's left/right reaches the game at the pop, so the game's lean
  exit cannot drag the board into the rail.
- Off by default; switches in Mod Options > Player, the ReSkate skater
  page, the tools menu and the console (grindexit ...). Kept between
  sessions.
- Listener slots on existing hooks only: No Bail's physics step, the
  trainer's set_trajectory detour, and the overlay's XInput capture.
  No new detours. Build-locked to 20260929 through the trainer's byte
  check.

Measured on build 25414733: 48 vanilla grind pops, 144 trigger-set
pops. See Extension/Skater/GRIND_EXITS.md.
2026-10-12 19:33:50 +01:00
Claude f0a6cf7b4a Trainer: your presets no longer hide a built-in one
Apply and remove look at the player's own presets before the built-in
ones, and loading took saved names as they were. A preset saved under a
name a built-in preset took later (Hardcore now, any new one later) hid
it: the built-in's button and `trainer preset apply` applied the
player's preset instead, and the menu showed the name twice.

When the trainer loads, such a preset is renamed to "<name> (yours)",
numbered when that is taken; the applied list and the maps that apply
it follow, and the log says so. Saving and loading now share one rule
for which names are reserved (reserved_preset_name) and one length
limit (max_preset_name). The rule and the rename live in
trainer_presets.cpp, where the trainer_presets test covers them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BoGm9ocG379TYfL2WC7yks
2026-10-12 11:37:54 +00:00
Claude d810b0a907 Trainer: take the wipeout force limits back out of Hardcore
This reverts d92b831. It dropped the comma after the Hardcore entry in
builtin_presets(), so trainer_presets.cpp, and with it ReSkate.dll, no
longer compiled.

The two rules it added, "wipeout.on forcelimits" and
"wipeout.runoutwipeoutforcelimits", were left out of Hardcore on
purpose: no field of the trainer's wipeout class has those names, and
whether they reach any physics tuning value has not been checked in
game. With them in, the trainer_presets test fails on the second one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BoGm9ocG379TYfL2WC7yks
2026-10-12 11:37:53 +00:00
andrewnakasandClaude Opus 5.5 606ba5ab68 Trainer 0.6.0: gravity, presets and quick settings, built on ReSkate 2.0.7
- Gravity slider (POP AND TRICKS): gravity in the air on the board and on foot.
- TUNE's first section is PRESETS AND QUICK SETTINGS: every kind of preset in one card, and
  everything that is changed in one list (change in place, Hide, Go to, Reset).
- trainer setup <key> <value>.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wk6Y7hSKoBANMm9ZHbStLg
2026-10-12 02:32:02 -06:00
andrewnakasandClaude Opus 5.5 f027d319be Trainer 0.5.0: built on ReSkate 2.0.6
TUNE as one page of folding sections, presets above the tabs, Skate 3 grind and
transition feel, Dark Pop, manual pop height, slow flips pop higher, per-trick
speeds, and a release audit of stock / resets / presets. See Extension/Trainer/CHANGELOG.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wk6Y7hSKoBANMm9ZHbStLg
2026-10-11 18:49:24 -06:00
mikaandCopilot Autofix powered by AI d92b831cdd Add new wipeout force limits to trainer presets
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-11 12:24:53 -04:00
miflow13 2399941419 Trainer: Hardcore preset, beside Realistic
Realistic with the game's help turned down, for players used to skating
games without it (Session, Skater XL). Everything Realistic changes goes
at least as far; on top of that, grinds only lock on from close and lined
up (lock-on distance x0.5, landing angle x0.6), grinds and powerslides
lose speed (friction x1.3, x1.5), body flips and spins are slower, and
bails come sooner (bail limits x0.7, bad landings bail). Grinds still
take a fast drop onto a rail. The amounts are a starting point and have
not been measured in game.

A new trainer_presets test checks that Hardcore never goes easier than
Realistic, that it shows on the REALISTIC list, and that their rules for
the game's data-defined classes name fields those classes have: a
misspelt pattern matches nothing and is skipped without a word in game.
2026-10-11 09:25:37 -04:00
Zachary Gladfelter 230b4ba6e4 Trainer: teleport to the pause-map waypoint, onto the surface there
PRACTICE > TELEPORT now shows the waypoint the player placed on the
game's pause map, with a "Go to map waypoint" button. The console gets
`trainer waypoint [info]` and `trainer ground <x> <z>`.

Reading the waypoint (trainer_waypoint.cpp)
- It is a point of interest in the map's registry, the one ReSkate's
  party markers register into (addr::native_party::map_manager), with
  kind DingoMapPOIType_Waypoint (3) and its world matrix at @0.
- The registry is walked only while the TELEPORT card is drawn (the
  page notes it, like the class list) or the command runs, every
  250 ms at most. A player who never opens the card pays nothing.
- A registry the map has filled without a waypoint means it was
  removed; an empty or unreadable one keeps the last waypoint seen. A
  new level forgets it.

Landing on the surface (trainer_landing.h)
- The waypoint's height is not the ground: teleporting to it dropped
  the skater through the map. local_ground_height() casts the park
  editor's downward ray (editor::cast_surface) through the client
  physics world and takes the topmost hit.
- The first ray starts at 1500 or 500 above the hint. A custom map
  can sit higher than that (a waypoint at Y 12 over ground at Y 1939
  was seen in game), so a miss is cast again from 20000.
- If collision there is still streaming in, the teleport goes to the
  hint's height and a 12 s watch puts the skater on the surface when
  it arrives (at most 6 corrections; the teleport is re-sent up to 3
  times if it never arrives).
- Teleports still go through go_to(), so they follow the host's
  noclip / teleport permission in a session.

The decisions (ray spans, the watch, remember/forget) have no game in
them and are tested by trainer_landing (DINGOSDK_BUILD_TRAINER_TESTS).
README and CHANGELOG updated.
2026-10-07 05:08:31 -04:00
andrewnakasandClaude Opus 5.5 5d59eaa1b1 Trainer 0.4.3: built on ReSkate 1.1.4
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 02:56:18 -06:00
andrewnakas d1107b7c5b Merge commit 'v1.1.4^{commit}' into trainer-next 2026-10-07 02:51:54 -06:00
andrewnakasandClaude Opus 5.5 b98f84d393 Trainer 0.4.2: changelog lists the catch point, the multiplayer banner and the push speed fix
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 02:40:21 -06:00
andrewnakasandClaude Opus 5.5 aa20cc0825 Trainer 0.4.2: Play like and your presets at the bottom of MAP & HUD; pump power calibrated
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 02:31:48 -06:00
andrewnakasandClaude Opus 5.5 614f07e819 Trainer 0.4.2: flip trick speed through the game's flip state with a speed for each trick, pump power, slow flips stay slow by themselves; the slow-flip switch, the camera tab and two dead dials are gone; far fewer memory searches
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 02:07:04 -06:00
andrewnakas 6fcd427bf6 Trainer 0.4.2: flip trick speed scales only the stick-speed curve (the pop keeps its height); the slow-flip switch says when a session keeps it off 2026-10-06 19:50:09 -06:00
andrewnakas 097d306a15 Trainer 0.4.2: the board bending boost no longer pays ordinary 180s (the off-the-travel rule is off as shipped and capped) 2026-10-06 15:52:25 -06:00
andrewnakas 0c2bd6cccd Trainer 0.4.1: changelog and README for the slow-flip switch and the help tips 2026-10-06 14:51:11 -06:00
andrewnakas 4d6969cbba Trainer: let slow flips stay slow (the finish-before-landing rule can be switched off), help on every control, wrapped tooltips 2026-10-06 14:46:35 -06:00
xThrasherrr 2d3430cbd4 Write paths as UTF-8 in the remaining messages
Each built its text with path::string(), which throws for a character outside the ANSI code page, so the real error or message was replaced by a code-page error.
2026-10-06 13:23:26 -06:00
andrewnakasandClaude Opus 5.5 c3c52168e5 Trainer 0.4.0: the trick line list is called Tricklining; docs
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 13:08:10 -06:00
andrewnakasandClaude Opus 5.5 5df4c1cba0 Trainer: board bending boost with explainers; Skate 3 presets also set the older grind and pumping values
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:30:41 -06:00