Animations: follow the engine's merged move animations #39

Merged
Yonokid merged 2 commits from GanYiZhong/YataiDONNijiiro:fix/merged-move-animations into main 2026-09-30 21:54:19 +02:00
3 changed files with 81 additions and 114 deletions

No files matched your search

+13 -5
View File
@@ -114,9 +114,13 @@
"type": "move", "type": "move",
"duration": 333.33, "duration": 333.33,
"total_distance": 548, "total_distance": 548,
"comment": "ROUND 17: copied verbatim from song_select/animation.json so the 演奏オプション panel the 段位道場 confirmation dialog's option chip opens runs identically on DAN_SELECT. ModifierSelector's constructor reads 28/29/30/31/32 (+39 optional) and get_animation THROWS on a missing id; a child animation.json replaces the parent's rather than merging, so DAN_SELECT had none of them. option/neiro panel slide IN. Arcade song_select_main_diff_option MC65 'board_left' label 'in' = 20 frames @60fps (333.33 ms), PIECEWISE LINEAR through an OVERSHOOT: y 650 -> -75 over frames 0..14, then -75 -> 0 over frames 14..19. Engine space: json y 1080, resting top 532 => total_distance 548, waypoint 548+75 = 623 at 14/19 = 0.7368. (MC64 'board_right' reaches -75 one frame later, at 15/19; not portable, the two boards share one animation id here.)", "waypoints": [
"waypoint": 623, {
"waypoint_at": 0.7368 "at": 245.6,
"value": 623
}
],
"comment": "ROUND 17: copied verbatim from song_select/animation.json so the 演奏オプション panel the 段位道場 confirmation dialog's option chip opens runs identically on DAN_SELECT. ModifierSelector's constructor reads 28/29/30/31/32 (+39 optional) and get_animation THROWS on a missing id; a child animation.json replaces the parent's rather than merging, so DAN_SELECT had none of them. option/neiro panel slide IN. Arcade song_select_main_diff_option MC65 'board_left' label 'in' = 20 frames @60fps (333.33 ms), PIECEWISE LINEAR through an OVERSHOOT: y 650 -> -75 over frames 0..14, then -75 -> 0 over frames 14..19. Engine space: json y 1080, resting top 532 => total_distance 548, waypoint 548+75 = 623 at 14/19 = 0.7368. (MC64 'board_right' reaches -75 one frame later, at 15/19; not portable, the two boards share one animation id here.)"
}, },
{ {
"id": 29, "id": 29,
@@ -153,8 +157,12 @@
"type": "move", "type": "move",
"duration": 333.33, "duration": 333.33,
"total_distance": 548, "total_distance": 548,
"waypoint": -75, "waypoints": [
"waypoint_at": 0.2105, {
"at": 70.17,
"value": -75
}
],
"comment": "ROUND 17: copied verbatim from song_select/animation.json so the 演奏オプション panel the 段位道場 confirmation dialog's option chip opens runs identically on DAN_SELECT. ModifierSelector's constructor reads 28/29/30/31/32 (+39 optional) and get_animation THROWS on a missing id; a child animation.json replaces the parent's rather than merging, so DAN_SELECT had none of them. option/neiro panel slide OUT (ModifierSelector/NeiroSelector pick this up on confirm when it exists; without it they replay id 28). Arcade MC65 label 'out' = frames 25..44: y 0 -> -75 over 4 frames, then -75 -> 650 over 15. Engine space the drawn y is `attribute + song_select_offset.x` (= -548 in this skin), so attribute runs 0 -> -75 at 4/19 = 0.2105 -> 548." "comment": "ROUND 17: copied verbatim from song_select/animation.json so the 演奏オプション panel the 段位道場 confirmation dialog's option chip opens runs identically on DAN_SELECT. ModifierSelector's constructor reads 28/29/30/31/32 (+39 optional) and get_animation THROWS on a missing id; a child animation.json replaces the parent's rather than merging, so DAN_SELECT had none of them. option/neiro panel slide OUT (ModifierSelector/NeiroSelector pick this up on confirm when it exists; without it they replay id 28). Arcade MC65 label 'out' = frames 25..44: y 0 -> -75 over 4 frames, then -75 -> 650 over 15. Engine space the drawn y is `attribute + song_select_offset.x` (= -548 in this skin), so attribute runs 0 -> -75 at 4/19 = 0.2105 -> 548."
} }
] ]
+39 -57
View File
@@ -92,38 +92,36 @@
{ {
"id": 11, "id": 11,
"type": "move", "type": "move",
"duration": 250, "duration": 333.33,
"total_distance": 1080, "total_distance": 930,
"ease_out": "quadratic",
"comment": "kusudama move down"
},
{
"id": 12,
"type": "move",
"duration": 83.33,
"total_distance": 150,
"delay": {
"reference_id": 11,
"property": "duration"
},
"ease_in": "quadratic", "ease_in": "quadratic",
"comment": "kusudama move up" "waypoints": [
{
"at": 250,
"value": 1080,
"ease_out": "quadratic"
}
],
"comment": "kusudama move down/up (merged from old ids 11+12; engine cf785cf)"
}, },
{ {
"id": 13, "id": 13,
"type": "move", "type": "move",
"duration": 116.67, "duration": 233.34,
"total_distance": 420, "total_distance": -360,
"ease_out": "quadratic", "ease_out": "quadratic",
"waypoints": [
{
"at": 116.67,
"value": -420,
"ease_out": "quadratic"
}
],
"delay": { "delay": {
"init_val": {
"reference_id": 11, "reference_id": 11,
"property": "duration" "property": "duration"
}, },
"reference_id": 12, "comment": "kusudama renda move up/down (merged from old ids 13+18)"
"property": "duration"
},
"comment": "kusudama renda move up"
}, },
{ {
"id": 14, "id": 14,
@@ -132,13 +130,9 @@
"initial_opacity": 0.0, "initial_opacity": 0.0,
"final_opacity": 1.0, "final_opacity": 1.0,
"delay": { "delay": {
"init_val": {
"reference_id": 11, "reference_id": 11,
"property": "duration" "property": "duration"
}, },
"reference_id": 12,
"property": "duration"
},
"comment": "kusudama renda fade in" "comment": "kusudama renda fade in"
}, },
{ {
@@ -165,22 +159,6 @@
"loop": true, "loop": true,
"comment": "renda breathing" "comment": "renda breathing"
}, },
{
"id": 18,
"type": "move",
"duration": 116.67,
"total_distance": 60,
"delay": {
"init_val": {
"reference_id": 13,
"property": "duration"
},
"reference_id": 13,
"property": "delay"
},
"ease_out": "quadratic",
"comment": "kusudama renda move down"
},
{ {
"id": 19, "id": 19,
"type": "texture_change", "type": "texture_change",
@@ -648,29 +626,33 @@
{ {
"id": 38, "id": 38,
"type": "move", "type": "move",
"duration": 66, "duration": 345.36,
"delay": 80, "start_position": 222,
"total_distance": 0, "total_distance": -6,
"start_position": 255, "waypoints": [
"comment": "score counter move animation 2" {
"at": 146,
"value": 0
},
{
"at": 146,
"value": -3
},
{
"at": 279.36,
"value": -3
}
],
"comment": "score counter move (y, pre-fan): hold 222, snap to 219, hold, ->216 (old ids 38/39 + start y)"
}, },
{ {
"id": 39, "id": 39,
"type": "move", "type": "move",
"duration": 66,
"delay": 279.36,
"total_distance": -3,
"start_position": 219,
"comment": "score counter move animation 3"
},
{
"id": 40,
"type": "move",
"duration": 80, "duration": 80,
"delay": 366.74, "delay": 366.74,
"total_distance": 15, "total_distance": 15,
"start_position": 222, "start_position": 222,
"comment": "score counter move animation 4" "comment": "score counter move (y, fan-out): digits cascade once y_pre finished (old id 40)"
}, },
{ {
"id": 41, "id": 41,
+29 -52
View File
@@ -249,58 +249,27 @@
{ {
"id": 22, "id": 22,
"type": "move", "type": "move",
"total_distance": 45, "total_distance": 0,
"duration": 116.67, "duration": 400,
"ease_out": "quadratic",
"comment": "diff sort confirmation bounce up"
},
{
"id": 23,
"type": "move",
"total_distance": 45,
"duration": 116.67,
"delay": {
"reference_id": 22,
"property": "duration"
},
"ease_in": "quadratic", "ease_in": "quadratic",
"comment": "diff sort confirmation bounce down" "waypoints": [
{
"at": 116.67,
"value": -45,
"ease_out": "quadratic"
}, },
{ {
"id": 24, "at": 233.34,
"type": "move", "value": 0,
"total_distance": 15, "ease_in": "quadratic"
"duration": 83.33,
"delay": {
"init_val": {
"reference_id": 22,
"property": "duration"
},
"reference_id": 23,
"property": "duration"
},
"ease_out": "quadratic",
"comment": "diff sort confirmation bounce up 2"
}, },
{ {
"id": 25, "at": 316.67,
"type": "move", "value": -15,
"total_distance": 15, "ease_out": "quadratic"
"duration": 83.33, }
"delay": { ],
"init_val": { "comment": "diff sort confirmation double bounce (merged from old ids 22+23+24+25)"
"init_val": {
"reference_id": 22,
"property": "duration"
},
"reference_id": 23,
"property": "duration"
},
"reference_id": 24,
"property": "duration"
},
"ease_in": "quadratic",
"comment": "diff sort confirmation bounce down 2"
}, },
{ {
"id": 26, "id": 26,
@@ -321,9 +290,13 @@
"type": "move", "type": "move",
"duration": 333.33, "duration": 333.33,
"total_distance": 548, "total_distance": 548,
"comment": "option/neiro panel slide IN. Arcade song_select_main_diff_option MC65 'board_left' label 'in' = 20 frames @60fps (333.33 ms), PIECEWISE LINEAR through an OVERSHOOT: y 650 -> -75 over frames 0..14, then -75 -> 0 over frames 14..19. Engine space: json y 1080, resting top 532 => total_distance 548, waypoint 548+75 = 623 at 14/19 = 0.7368. (MC64 'board_right' reaches -75 one frame later, at 15/19; not portable, the two boards share one animation id here.)", "waypoints": [
"waypoint": 623, {
"waypoint_at": 0.7368 "at": 245.6,
"value": 623
}
],
"comment": "option/neiro panel slide IN. Arcade song_select_main_diff_option MC65 'board_left' label 'in' = 20 frames @60fps (333.33 ms), PIECEWISE LINEAR through an OVERSHOOT: y 650 -> -75 over frames 0..14, then -75 -> 0 over frames 14..19. Engine space: json y 1080, resting top 532 => total_distance 548, waypoint 548+75 = 623 at 14/19 = 0.7368. (MC64 'board_right' reaches -75 one frame later, at 15/19; not portable, the two boards share one animation id here.)"
}, },
{ {
"id": 29, "id": 29,
@@ -413,8 +386,12 @@
"type": "move", "type": "move",
"duration": 333.33, "duration": 333.33,
"total_distance": 548, "total_distance": 548,
"waypoint": -75, "waypoints": [
"waypoint_at": 0.2105, {
"at": 70.17,
"value": -75
}
],
"comment": "option/neiro panel slide OUT (ModifierSelector/NeiroSelector pick this up on confirm when it exists; without it they replay id 28). Arcade MC65 label 'out' = frames 25..44: y 0 -> -75 over 4 frames, then -75 -> 650 over 15. Engine space the drawn y is `attribute + song_select_offset.x` (= -548 in this skin), so attribute runs 0 -> -75 at 4/19 = 0.2105 -> 548." "comment": "option/neiro panel slide OUT (ModifierSelector/NeiroSelector pick this up on confirm when it exists; without it they replay id 28). Arcade MC65 label 'out' = frames 25..44: y 0 -> -75 over 4 frames, then -75 -> 650 over 15. Engine space the drawn y is `attribute + song_select_offset.x` (= -548 in this skin), so attribute runs 0 -> -75 at 4/19 = 0.2105 -> 548."
} }
] ]