Files
ReSkate/Extension/UI/NativeMenu/throwdown_menu.h
T
AyeZeeBB 7dabd99a40 Crashes: the Trainer no longer writes into freed memory, throwdown models go before a level unload, and a gone texture draws nothing instead of crashing
From the first 6k Sentry reports of 55a7342 (2026-10-24), whose top sites were all new since 2.1.1:

- Trainer: scale_underflip_bands wrote the underflip rate bands' MinScale and MaxScale every tick on
  every copy it had ever found, checking only that the address was readable. A level's copies go back
  to the game's heap with it, so 1.0 and 0.6 landed in the upper half of whatever the game made there
  next (Skate.exe+0x157f930, +0x12a1549, +0x10084de, +0x11ef49e, +0x3db81ea, +0x12c21ca: about a
  third of the crashes, every dump with a pointer whose high dword is one of those floats). A copy is
  now written only while it still is that band and holds the game's band or the last one written;
  any other is forgotten.
- Throwdowns: models the page released were destroyed 3 s later by the menu tick, which does not run
  while a level loads, so the game's own flush of the unloaded level's types destroyed them after
  their assets were freed (Skate.exe+0x3dc5eaa, 18%). Before a level unload they are destroyed at
  once, as the native menu's own are.
- Textures: the guard's "default for the id" is the entry itself, so for a dead entry resolve gave a
  null texture, and the texture view cache asked it for its key (Skate.exe+0x3e6ddc1, 17%, every
  report with TheVlixOne-Nike_Pack). A stub at the cache insert hands back the empty view the cache
  already built when the texture is null; the guard is on only when that patch applies.
- Physics: the wake guard widens every pass because ReSkate raises the owner pool to 160000; its log
  line now says so once instead of claiming a prevented crash thousands of times a session.

Built; not yet checked in the game.
2026-10-24 17:19:32 -05:00

17 lines
835 B
C++

#pragma once
#include <cstdint>
namespace dingosdk::multiplayer {
void tick_native_throwdown_menu(std::uintptr_t base, bool loading, bool in_menu) noexcept;
bool release_native_throwdown_menu(std::uintptr_t base, bool before_unload) noexcept;
bool native_throwdown_setup_open() noexcept;
bool native_throwdown_hud_ready() noexcept;
bool native_throwdown_match_panel_open() noexcept;
bool native_throwdown_gameplay_input_allowed() noexcept;
bool native_throwdown_match_active() noexcept;
// Prepare an owned request at native page publication or its client/UI tick.
// Presentation is independent of the native flow's camera/input confirmation.
void prepare_native_throwdown_match_panel() noexcept;
void observe_native_custom_join_details(std::uintptr_t vm) noexcept;
void observe_native_flag_interaction(std::uintptr_t vm) noexcept;
}