AGENTS.md gives agents the build and test commands and the project's rules: one game build for good, addresses only in Engine/Game/Build/20260929 with byte checks, hooks through Engine/Core/Hooks, general SDK APIs with modes as plugins, sandboxed plugin permissions, nothing that unlocks paid items, no EA code in the repository. CLAUDE.md imports it. README's "Supporting a new game build" is now "The supported game build": ReSkate stays on 20260929. STRUCTURE.md and README no longer point at contrib/plugins, which is kept out of the repository.
14 KiB
ReSkate structure
How the repository is laid out, what each part builds into, and where a feature's code lives. For building and using ReSkate, see README.md.
What gets built
| Binary | Source | What it is |
|---|---|---|
ReSkateLauncher.exe |
Launcher/ |
the launcher: updates, Steam sign-in and game download, mods and profiles, starts the game, crash reporting |
ReSkate.dll |
Runtime/ + Extension/ + Engine/ (+ SpotifyHelper/) |
the runtime the launcher loads into Skate.exe |
ReSkateServer.exe / ReSkateServer |
Server/ |
the headless dedicated server (Windows and native Linux) |
ReSkateEmotePacker.exe |
EmotePacker/ |
packs assets/emotes into the chat emote pack |
dingosdk_builtin_packer |
BuiltinPacker/ |
packs assets/builtin into the built-in packs |
dingosdk_*_tests |
each module's Test/ |
regression tests, run with CTest |
Internally the project is still called DingoSDK (CMake options, target names).
Layering
Launcher/ ──launches──▶ Skate.exe ◀──injected── ReSkate.dll
│
Runtime/ entry point, startup, per-frame tick, exports
│
Extension/ ReSkate's features and UI
│
Engine/Game/ native ABI, data models, per-build addresses
Engine/Vfs/ mods, merging, content cache
Engine/Resource/ Frostbite formats
Engine/Core/ logging, console, hooks, crash reports
│
External/ third-party libraries
Server/ (ReSkateServer) reuses Engine/Core and the multiplayer protocol, not the game.
Feature code never holds game addresses: everything tied to one Skate.exe build lives in
Engine/Game/Build/<build>/ (see Engine/Game).
Top level
ReSkate/
├── CMakeLists.txt, CMakePresets.json build entry; presets vs2022-x64, linux-x64, release, linux-release
├── cmake/ the build, split by area
├── Engine/ engine-level code shared by the DLL, launcher and server
├── Extension/ ReSkate's features (in ReSkate.dll)
├── Runtime/ ReSkate.dll entry point and lifecycle
├── Launcher/ ReSkateLauncher.exe
├── Server/ ReSkateServer (dedicated server)
├── SpotifyHelper/ Rust static library: the game as a Spotify Connect device
├── EmotePacker/ emote pack tool
├── BuiltinPacker/ built-in pack tool
├── External/ vendored third-party code, pinned and hashed
├── assets/ files embedded into the binaries
├── config/defaults/ default profile/settings JSON embedded into ReSkate.dll
├── contrib/ server hosting files, design notes, release script
├── README.md, MACOS-SETUP.md, MUSIC-SETUP.md, LICENSE
└── .clangd, .gitattributes, .gitignore
cmake/
| File | Covers |
|---|---|
ProjectOptions.cmake |
DINGOSDK_* options, version stamping (reskate_version.h, version.rc) |
Dependencies.cmake |
the External/ libraries as static targets |
Core.cmake |
Engine/ libraries: hooks, console core, launcher support, supported build |
Features.cmake |
Extension/ feature libraries |
UI.cmake |
the ImGui overlay and PlayStation controller input |
Runtime.cmake |
ReSkate.dll (dingosdk_runtime), including the cargo build of SpotifyHelper/ |
Apps.cmake |
launcher, server, packer tools, and most test executables |
CrashReport.cmake |
Sentry crash report client/upload, wired into the DLL, launcher and server |
ProfileData.cmake, CustomScriptData.cmake |
embed config/defaults/ and the custom Lua entry |
templates/ |
generated headers: version, version.rc, crash/update config, profile defaults |
Engine/
Loosely follows Frostbite's own layout.
Engine/Core/
| Folder | Contents |
|---|---|
Console/ |
command registry and console core |
Debug/ |
crash reports: minidumps, report envelope, trace, upload |
Hooks/ |
Detours hook helpers |
Json/ |
JSON helpers over RapidJSON |
Log/ |
spdlog-based logger, log paths, crash/event logging |
Platform/ |
process injection, PE helpers, memory and path utilities |
Profiling/ |
profiler and sampler |
Storage/ |
SQLite save database |
Text/ |
chat word filter |
Engine/Resource/
Frostbite data formats: binary bundles, TOC, CAS codec (Oodle/zstd/LZ4), EBX documents (read, write, merge, fixup repair), mesh sets, skeletons, textures, material grids, shader lookup.
Engine/Vfs/
The virtual file system and modding pipeline:
initfs,game_archives,game_bundles,game_textures,native_db— reading the game's data.mod_list,mod_catalog,mod_item_sources,mod_conflicts,mod_scoring— theMods/folder andmods.json.mod_merge*— merging mods into the game's data (overrides, combine, grid, textures, loading screens, CAS store, scan cache, build stamp).content_cache*,content_catalogs— the merged-content cache and its install.thunderstore_package,https_download— Thunderstore packages.mod_music,item_thumbnails,world_layer_scan,builtin_packs.
Engine/Scripting/
Custom Lua script support (currently switched off for users).
Engine/Game/
The game's native ABI and plain data models, no hooks:
| Folder | Contents |
|---|---|
Abi/ |
native strings, data layouts, transforms, callback queue |
Build/ |
supported_build.h (hashes, Steam depot/manifest pins), fingerprint.h, image_identity, addresses.h |
Build/20260929/ |
one header per area with every address, fingerprint and patch for this Skate.exe build, as addr::<area>::<name> |
Input/ |
controller bindings, PlayStation reports, voice input |
Multiplayer/ |
session model and limits, tick/voice/distance settings, role commands, chat rate |
Profile/ |
progression, player card, object persistence models |
Rendering/ |
draw packets, graphics controls |
Settings/ |
named settings, simulation time, multiplayer settings lock |
Skater/ |
first person, velocity boost, skater body |
UI/ |
game view, menu entries and scale, loading screen selection |
World/ |
world model, layers, parks (rotation, randomization, editor), travel, custom level manifest |
Extension/
ReSkate's features. Each folder is one area; most have a console_commands.cpp for its console
commands and a Test/ folder.
| Folder | Feature |
|---|---|
Boot/ |
offline boot, offline Steam, blocking EA app/services, user-data redirect, startup interventions, Discord presence, fatal dumps |
Assets/ |
live mods (apply without restart), loose files, mod layers, multiplayer map download, map icons |
Console/ |
built-in console commands, perf commands, memory ledger |
Customization/ |
cosmetics catalog, item browser, local customization, player card |
Multiplayer/ |
Steam lobbies, sessions, parties, voice and text chat (see below) |
Music/ |
local music, playlists and artwork, external players: Spotify, YouTube Music, Plex |
News/ |
launcher/game news feed |
Objects/ |
object placement and the Park Editor (ParkEditor/), park object sets, park mods |
Plugins/ |
the Luau plugin host and its reskate.* API (see below) |
Profile/ |
offline profile storage: skater, progress, missions, objects, preferences |
Progression/ |
challenges, entitlements, neighborhood unlocks, fast travel unlock, rip score, board wear |
Rendering/ |
graphics controls and labels, display startup, replay export |
ReplayKeyframes/ |
replay keyframe curves and settings |
Scripting/ |
Lua startup, custom script loader, native blocking |
Settings/ |
gameplay/native/user settings, input bindings, engine tweaks, replay drafts |
Skater/ |
first person, noclip, free flight, physics tuning, no-bail, AI skaters, x-ray, breakable deck, launches and pad hiding for plugins, trick watch |
Throwdowns/ |
native throwdowns, custom (plugin) modes, relay and wire format |
Trainer/ |
trick trainer: waypoints, jumps, landings, presets |
Travel/ |
location travel |
UI/ |
the in-game UI (see below) |
World/ |
level loading, loading screens, time/atmosphere, population, park rotation, world layers, engine guards |
AnimationStudio/ |
animation core |
Extension/Multiplayer/
| Folder | Contents |
|---|---|
Net/ |
protocol, wire/delta/pose/sound codecs |
Steam/ |
lobbies, server browser, transport and lanes, friend join, social |
Session/ |
session state, send/receive, parties, commands, rooms, passwords |
Remote/ |
remote skaters: native skater spawn, cosmetics, poses, audio, VFX, collision |
Hud/ |
nametags, indicators, player UI |
Voice/ |
voice capture and playback |
Extension/UI/
| Folder | Contents |
|---|---|
Overlay/ |
the ImGui overlay: the ReSkate menu (Insert) and its pages, console, chat and emotes, Park Editor panels, plugin pages, perf overlay, theme |
NativeMenu/ |
pages built into the game's own menu (hub, multiplayer, throwdowns) |
Startup/ |
startup window/splash |
Extension/Plugins/
The Luau plugin host. A plugin is a folder in Mods/ with a reskate-plugin.json.
plugin_discovery,plugin_manifest— find and read plugins.plugin_vm,plugin_runtime,plugin_host— the sandboxed Luau VM and plugin lifecycle.plugin_api*.cpp— thereskate.*API (game, world, UI, more);plugin_game*,plugin_camera,plugin_joystick.plugin_ui,plugin_sound,plugin_wave,plugin_http,plugin_session_feed,plugin_wire— pages, audio, HTTP, multiplayer messages.plugin_commands— thepluginconsole command.
Runtime/
ReSkate.dll's lifecycle: exports.cpp (DLL exports), bootstrap, runtime_init, runtime_state,
client_context, client_tick (per-frame), frame_timing, level_requests, request_scheduler,
menu_entry_hook, overlay_callbacks, console_bridge.
Launcher/
| Files | Contents |
|---|---|
main.cpp, launch |
entry point and starting/injecting the game |
updater |
ReSkate self-update from GitHub releases |
depot_output, game_settings |
supported game build download/verification and game settings |
mod_manager, mod_profiles, thunderstore |
mods, profiles (r2modman-compatible codes and .r2z), Thunderstore |
gui*.cpp |
the window: home, mods (browse, profiles), settings, sign-in, changelog, legal, gamepad |
crash_reporter |
crash reporting host |
Test/ |
launcher tests |
Server/
| Files | Contents |
|---|---|
main.cpp, server_engine, server_host, steam_server |
the server loop and Steam game server |
server_config |
ReSkateServer.json |
server_commands, server_votes, server_party, server_parks, server_map_update |
admin commands, votes, parties, parks, map updates |
roles.h, global_bans, server_words |
roles/permissions, bans, word filter |
board_check.h, speed_check.h |
anti-cheat checks |
server_plugins |
server-side plugins |
server_update, server_release |
self-update |
GUI/ |
optional server window |
README.txt, README-linux.md, README-roles.txt, ROLES.md |
server docs |
Test/ |
server tests and fixtures |
SpotifyHelper/
Rust crate (reskate-spotify, librespot-based) built by cargo from cmake/Runtime.cmake as a static
library linked into ReSkate.dll. It makes the game a Spotify Connect device. Not built in Debug.
External/
Vendored libraries, versions and hashes in External/manifest.json and External/README.md:
Dear ImGui, Microsoft Detours, Luau, RapidJSON, spdlog, SQLite, LZ4, Zstandard, miniz, bcdec,
Valve's Steam networking headers, and fonts (Montserrat, Permanent Marker).
assets/ and config/
assets/launcher/— launcher background and icons.assets/emotes/— chat emotes (emotes.json,emotes.png).assets/builtin/— built-in packs (throwdown_menu.zip).assets/models/fpv/— FPV drone model.assets/*.jpg|png— splash, music artwork.config/defaults/— defaultprofile.json,progress.json,settings.json,options.json,challenges.json,location-travel.json,object-dropper.json,news.json,manifest.json.
contrib/
| Path | Contents |
|---|---|
pterodactyl/ |
Pterodactyl egg for hosting the server |
reskate-server.service, setup-linux-server-libs.sh |
Linux server setup |
package_release_zip.py |
packs release zips |
*.md |
design notes for individual features |
Test/ |
tests for contrib scripts |
Plugin mods (the ports of former built-in features, the test plugins, Fit Check, Animator Studio) are not
in the repository. Maintainers keep them in contrib/plugins/, which is ignored, and
dingosdk_plugin_tests runs the test plugins from there when they are present.
A plugin mod's folder looks like:
<plugin>/
├── reskate-plugin.json plugin manifest
├── manifest.json Thunderstore manifest
├── plugin/main.lua entry point (+ other modules, tests.lua)
└── images/, sounds/, data/ optional assets
Tests
Tests live in a Test/ folder beside the code they cover (about 115 files) and build as
dingosdk_*_tests executables. Turn groups on with DINGOSDK_BUILD_MULTIPLAYER_TESTS,
DINGOSDK_BUILD_LAUNCHER_TESTS, DINGOSDK_BUILD_PARK_EDITOR_TESTS, DINGOSDK_BUILD_CRASH_REPORT_TESTS
and DINGOSDK_BUILD_PLUGIN_TESTS, then run ctest --test-dir build/vs2022-x64 -C Release.