mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-28 07:56:51 +01:00
skater.pose changes the skater relative to the game's animation. Some of those changes were applied twice every third frame, so a posed skater shook in a three-frame rhythm, and their board with them. The more a plugin changed, the worse it got: an avatar with the hips scaled and offsets on most of the body needed workarounds in its plugin to hold still. Now every pose is applied exactly once, and a plugin can give skater.pose the values it means. Why: ReSkate draws a pose by writing it into the game's bone buffer just before the render, and the game evaluates the next frame from that same buffer without overwriting all of it. Two of three frames it resets the buffer itself; in the third the pose drawn was still there and the next pose went on top of it. Now the game's own values go back as soon as the renderer has its copy, so the game, the body physics and the next animation update only ever see the game's pose. This replaces own_scale, the earlier fix for the same cause (the Filmer's forearm at 0.001 shrinking to nothing). It covered only scale, and put it back after the game had already run on the posed values, so rotations and offsets still doubled. The new way covers every part of every joint, for pose, carry and reach, with nothing to track per joint and nothing to clean up after a pose ends. Checked in the game: the avatar with the hips at 0.667 and offsets on 48 joints holds still with only skater.pose (shoulder distance 0.117 m every frame, where it was 0.117 0.117 0.067 ...). The Filmer 1.0.0's camcorder preview looks and measures as on main, and the skater is back to normal after it. Details: the renderer copies the bones in submit_render_pose (0x4c7e7a0), which the render pose caller (0x2c20d99) calls right after render_pose with the same render data; found with a guard page on the bone buffer that logged every access with its call stack. native_skater hooks it and, for the render data the pose override just wrote, calls the new set_pose_override_drawn_listener. skater_animation keeps what on_render wrote over and puts it back in on_drawn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>