step budgets come from the binary, and a step-down follows the ground

- the step-up and step-down budgets are the client's own verified numbers, and the step regime is chosen by the blocking edge
- walking off a kerb follows the surface down instead of diving past the edge; steep ground supports you only while you are descending onto it
- a ride on a moving platform survives the ground snap, and a vertical wall no longer depends on a float's sign
- trainer and craft rows sort with the real client's own comparators, one per window — Beast Training lists a skill's ranks in ascending order again

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-08-08 17:13:02 +07:00
co-authored by Claude Fable 5
parent cf44e38574
commit 76e787d704
19 changed files with 1933 additions and 619 deletions
@@ -118,8 +118,8 @@ fn service(
skill_req,
ability_reqs,
is_trade_skill: false,
skill_line,
skill_line_name: line_name.into(),
group_key: skill_line,
group_name: line_name.into(),
}
}
@@ -130,7 +130,7 @@ fn service(
fn menu() -> TrainerState {
TrainerState {
greeting: "Well met. Let me show you the way of the warrior.".into(),
is_tradeskill: false,
trainer_type: 0,
groups: Vec::new(),
services: vec![
service(
@@ -443,7 +443,7 @@ fn filter_rows_toggle_through_the_dropdown_kit() {
fn long_menu() -> TrainerState {
TrainerState {
greeting: "Much to learn.".into(),
is_tradeskill: false,
trainer_type: 0,
groups: Vec::new(),
services: (1..=15)
.map(|i| {