mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-17 19:47:08 +02:00
The game plays the replay camera's framing keys as cubic Hermite segments whose speed changes at every key (the acceleration jumps there, and it brakes where a channel slows or turns back), so a free-camera shot surges and settles around each key. keysmooth on rewrites each segment as the game builds it, so that the game's own player plays the natural cubic spline through every key: speed and acceleration carry on through the keys, and every key is still met exactly, at its time. - keysmooth on|off (off by default), keysmooth amount 0..1 (1 by default; 0 is the game's curve) and keysmooth status; kept in %LOCALAPPDATA%\ReSkate\KeySmooth.settings. Only the free camera (Behaviour 1) is smoothed; the other camera modes keep the game's curve. - A switch in Mod Options > Visuals and in the overlay's Skater > Freecam. - The curve apart from the game, with tests (DINGOSDK_BUILD_REPLAY_KEYFRAMES_TESTS); the hooked functions are fingerprinted, and a build that differs gets no hook. - contrib/keyframe-smoothing.md: what it does, how, and what was seen in game. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
2.2 KiB
C++
43 lines
2.2 KiB
C++
#pragma once
|
|
#include "Engine/Core/Console/command_registry.h"
|
|
#include "Extension/UI/Overlay/overlay.h"
|
|
|
|
namespace dingosdk::console {
|
|
using Model = overlay::Model;
|
|
using Commands = Registry<Model>;
|
|
using Entry = Commands::Entry;
|
|
using Argument = Commands::Argument;
|
|
const Commands &game_commands();
|
|
Argument argument(std::string name, Type type = Type::text, bool optional = false);
|
|
Entry action(std::string name, std::string description, Group group, std::vector<Argument> arguments = {});
|
|
Entry variable(std::string name, std::string description, Group group, Argument argument);
|
|
State boolean_state(bool available, bool value, std::string reason = {}, std::string detail = {});
|
|
void register_movement_commands(Commands &);
|
|
void register_ai_commands(Commands &);
|
|
void register_settings_commands(Commands &);
|
|
void register_world_commands(Commands &);
|
|
void register_graphics_commands(Commands &);
|
|
void register_progression_commands(Commands &);
|
|
void register_object_commands(Commands &);
|
|
void register_park_editor_commands(Commands &);
|
|
void register_multiplayer_commands(Commands &);
|
|
void register_perf_commands(Commands &);
|
|
// perf_commands.cpp: starts `perf memory`'s trace with the game when RESKATE_MEMORY_TRACE asks for it.
|
|
void start_memory_trace_from_environment() noexcept;
|
|
void register_item_commands(Commands &);
|
|
void register_trainer_commands(Commands &);
|
|
void register_hall_of_meat_commands(Commands &);
|
|
void register_road_rash_commands(Commands &);
|
|
void register_board_break_commands(Commands &);
|
|
void register_grind_exit_commands(Commands &);
|
|
void register_replay_keyframes_commands(Commands &);
|
|
// Runtime adapters. Invoked only by the verified game-thread dispatcher.
|
|
void request_debug(overlay::DebugAction, bool enabled = false, float value = 0);
|
|
void request_feature(overlay::OfflineFeatureGroup, bool enabled);
|
|
void request_engine_variable(std::string_view name, bool restore, bool value);
|
|
std::string request_named_setting(std::string_view name, std::string_view value, bool restore);
|
|
std::string request_reset_named_settings();
|
|
void request_level(const std::string &level, const std::string &start, const std::string &sublevel,
|
|
const std::string &substart);
|
|
} // namespace dingosdk::console
|