mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-28 18:26:57 +01:00
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>
This commit is contained in:
1 parent
4f8810f749
commit
382dd4b010
3 files changed
+26
-20
No files matched your search
@@ -192,7 +192,7 @@ struct State {
|
||||
// Advanced gravity: the gravity the game plans landings with (own off: the same as gravity), and how far the air
|
||||
// animations keep the timing they have at the game's gravity (0 the game's, 1 all the way).
|
||||
bool gravity_landing_own{};
|
||||
float gravity_landing{1}, gravity_timing{};
|
||||
float gravity_landing{1}, gravity_timing{1};
|
||||
float grind_side{1}; // the sideways part of a pop out of a grind or slide
|
||||
float grind_push{}; // Skate 3's pop: this many m/s sideways at full stick, the way the stick points (0: none)
|
||||
// Skate 3's turn on a grind: the left stick alone turns the board, up to this many degrees either way (0: off, the
|
||||
@@ -428,7 +428,8 @@ void load_store() {
|
||||
s.gravity = std::clamp(o.value("gravity", 1.0f), gravity_low, gravity_high);
|
||||
s.gravity_landing_own = o.value("gravity_landing_own", false);
|
||||
s.gravity_landing = std::clamp(o.value("gravity_landing", 1.0f), gravity_low, gravity_high);
|
||||
s.gravity_timing = std::clamp(o.value("gravity_timing", 0.0f), 0.0f, 1.0f);
|
||||
// (0.8.5 saved its default 0 as "gravity_timing"; the default is 1 since 0.8.6, under a new key.)
|
||||
s.gravity_timing = std::clamp(o.value("gravity_animation_timing", 1.0f), 0.0f, 1.0f);
|
||||
s.grind_side = std::clamp(o.value("grind_side", 1.0f), 0.0f, 1.0e6f);
|
||||
s.grind_push = std::clamp(o.value("grind_push", 0.0f), -1.0e6f, 1.0e6f);
|
||||
// (grind_lean, grind_turn and grind_tip were levers of earlier builds that did nothing: read past.)
|
||||
@@ -532,7 +533,7 @@ void save_store() {
|
||||
options["gravity"] = s.gravity;
|
||||
options["gravity_landing_own"] = s.gravity_landing_own;
|
||||
options["gravity_landing"] = s.gravity_landing;
|
||||
options["gravity_timing"] = s.gravity_timing;
|
||||
options["gravity_animation_timing"] = s.gravity_timing;
|
||||
options["grind_side"] = s.grind_side;
|
||||
options["grind_push"] = s.grind_push;
|
||||
options["grind_range"] = s.grind_range;
|
||||
@@ -1203,7 +1204,7 @@ const std::vector<Setup> &setups() {
|
||||
toggle("trick.underflip_split", topic_pop, &s.underflip_split);
|
||||
toggle("trick.gravity_landing_own", topic_pop, &s.gravity_landing_own);
|
||||
real("trick.gravity_landing", topic_pop, &s.gravity_landing, 1.0f, gravity_low, gravity_high);
|
||||
real("trick.gravity_timing", topic_pop, &s.gravity_timing, 0.0f, 0.0f, 1.0f);
|
||||
real("trick.gravity_timing", topic_pop, &s.gravity_timing, 1.0f, 0.0f, 1.0f);
|
||||
for (std::size_t i = 0; i < flip_tricks.size(); ++i) {
|
||||
real("trick." + std::string(flip_tricks[i].key), topic_pop, &s.flip_trick[i], 1.0f, flip_low, flip_high);
|
||||
all->back().title = std::string(flip_tricks[i].label) + (i >= first_underflip_slot ? ": underflip speed" : ": flip speed");
|
||||
|
||||
@@ -124,7 +124,7 @@ struct View {
|
||||
bool gravity_live{true}; // false: this game build's gravity is not where the trainer knows it
|
||||
bool gravity_landing_own{}; // landings are planned with gravity_landing, not with gravity
|
||||
float gravity_landing{1}; // x the game's own gravity, for the game's landing plans
|
||||
float gravity_timing{}; // 0: the game's animation timing in the air; 1: the timing at the game's own gravity
|
||||
float gravity_timing{1}; // 0: the game's animation timing in the air; 1 (default): the timing at the game's own gravity
|
||||
float grind_side{1}; // the sideways part of a pop out of a grind
|
||||
float grind_push{}; // Skate 3's pop: m/s sideways at full stick (0: none)
|
||||
float grind_range{}; // Skate 3's turn: the left stick turns the board on a grind up to this many degrees (0: off)
|
||||
|
||||
@@ -62,7 +62,7 @@ struct Page {
|
||||
std::uint64_t share_serial{}; // the last `preset export` put on the clipboard
|
||||
bool share_seen{};
|
||||
bool show_page{}, show_cheats{};
|
||||
float gravity_edit{1}, gravity_landing_edit{1}, gravity_timing_edit{};
|
||||
float gravity_edit{1}, gravity_landing_edit{1}, gravity_timing_edit{1};
|
||||
bool gravity_editing{}, gravity_landing_editing{}, gravity_timing_editing{};
|
||||
// QUICK SETTINGS: what is changed (kind 0 a section's line, 1 a dial, 2 one of the trainer's settings, 3 a value).
|
||||
struct QuickItem {
|
||||
@@ -1249,21 +1249,24 @@ void trick_heights(SkateMenu &menu, const CallbacksV3 &callbacks, Page &p, const
|
||||
return true;
|
||||
};
|
||||
const bool gravity_shown = slider("Gravity", "gravity", view.gravity, p.gravity_edit, p.gravity_editing,
|
||||
"Gravity in the air, on the board and on foot. 1 is the game's own. At 0.5 the same pop goes twice as high and hangs twice as long; at 2 you "
|
||||
"drop twice as fast. It acts in the air only: rolling down a hill, grinds and a bailed skater are the game's own. The game aims an air off a "
|
||||
"ramp back at the ramp with its own gravity, so with another gravity a vert air can come down somewhere else. It takes hold at once.",
|
||||
"Gravity in the air, on the board and on foot. 1 is the game's own.\n\n"
|
||||
"At 0.5 the same pop goes twice as high and hangs twice as long; at 2 you drop twice as fast.\n\n"
|
||||
"It acts in the air only: rolling down a hill, grinds and a bailed skater are the game's own. The game aims an air off a "
|
||||
"ramp back at the ramp with its own gravity, so with another gravity a vert air can come down somewhere else.\n\n"
|
||||
"It takes hold at once. Advanced gravity below times the tricks and landings for it.",
|
||||
3.0f);
|
||||
if (gravity_shown && view.gravity != 1.0f && !view.gravity_live)
|
||||
ImGui::TextDisabled("On foot this game build keeps its own gravity: the setting acts on the board only.");
|
||||
if (gravity_shown && ImGui::TreeNodeEx("Advanced gravity", ImGuiTreeNodeFlags_SpanAvailWidth |
|
||||
(view.gravity_landing_own || view.gravity_timing > 0 ? ImGuiTreeNodeFlags_DefaultOpen : 0))) {
|
||||
(view.gravity_landing_own || view.gravity_timing != 1.0f ? ImGuiTreeNodeFlags_DefaultOpen : 0))) {
|
||||
// Animation timing: 0 .. 1, not a multiplier.
|
||||
field(menu, view.gravity_timing > 0 ? "Animation timing *" : "Animation timing",
|
||||
"How the skater's tricks and landings are timed in the air when Gravity is not 1. 0 is the game's own: it fits a trick into "
|
||||
"the time to land, but cannot hurry a catch, so with more gravity a catch can still be playing when the wheels touch and "
|
||||
"the landing stutters. 1 plays the skater's animations faster by just as much as the flight is shorter (slower when it is "
|
||||
"longer), so tricks, catches and landings look as they do at the game's own gravity; flips turn faster with it. In "
|
||||
"between, part of the way.");
|
||||
field(menu, view.gravity_timing != 1.0f ? "Animation timing *" : "Animation timing",
|
||||
"How the skater's tricks and landings are timed in the air when Gravity is not 1.\n\n"
|
||||
"1 (the default): the skater's animations play faster by just as much as the flight is shorter (slower when it is "
|
||||
"longer), so tricks, catches and landings look as they do at the game's own gravity. Flips turn faster with it.\n\n"
|
||||
"0: the game's own timing. It fits a trick into the time to land but cannot hurry a catch, so with more gravity a "
|
||||
"catch can still be playing when the wheels touch and the landing stutters.\n\n"
|
||||
"In between: part of the way.");
|
||||
ImGui::PushID("gravity_timing");
|
||||
float timing = p.gravity_timing_editing ? p.gravity_timing_edit : view.gravity_timing;
|
||||
const bool moved = console_style() ? slider_float("##timing", &timing, 0.0f, 1.0f, "%.2f", ImGuiSliderFlags_AlwaysClamp)
|
||||
@@ -1281,12 +1284,14 @@ void trick_heights(SkateMenu &menu, const CallbacksV3 &callbacks, Page &p, const
|
||||
trainer_command(menu, callbacks, std::format("option gravity_landing_own {}", own ? 1 : 0));
|
||||
if (ImGui::IsItemHovered())
|
||||
wrapped_tooltip("%s", "The game plans every landing (where you come down, when, and the time its animations count down to) "
|
||||
"with a gravity. Off: with Gravity, so the plan matches the flight. On: with Landing gravity below; a "
|
||||
"plan with less gravity than the flight lands late (the board goes into the ground first), with more "
|
||||
"it reaches for the ground early.");
|
||||
"with a gravity.\n\n"
|
||||
"Off: with Gravity, so the plan matches the flight.\n\n"
|
||||
"On: with Landing gravity below. A plan with less gravity than the flight lands late (the board goes "
|
||||
"into the ground first); with more it reaches for the ground early.");
|
||||
if (own)
|
||||
slider("Landing gravity", "gravity_landing", view.gravity_landing, p.gravity_landing_edit, p.gravity_landing_editing,
|
||||
"The gravity the game plans landings with, as a multiple of its own. Set it to Gravity for landings that match the flight.",
|
||||
"The gravity the game plans landings with, as a multiple of its own.\n\n"
|
||||
"Set it to Gravity for landings that match the flight.",
|
||||
3.0f, false, true);
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user