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 85 additions and 118 deletions
Showing only changes of commit 68ab2a311e - Show all commits

No files matched your search

+13 -5
View File
@@ -114,9 +114,13 @@
"type": "move",
"duration": 333.33,
"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.)",
"waypoint": 623,
"waypoint_at": 0.7368
"waypoints": [
{
"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,
@@ -153,8 +157,12 @@
"type": "move",
"duration": 333.33,
"total_distance": 548,
"waypoint": -75,
"waypoint_at": 0.2105,
"waypoints": [
{
"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."
}
]
+41 -59
View File
@@ -92,38 +92,36 @@
{
"id": 11,
"type": "move",
"duration": 250,
"total_distance": 1080,
"ease_out": "quadratic",
"comment": "kusudama move down"
},
{
"id": 12,
"type": "move",
"duration": 83.33,
"total_distance": 150,
"delay": {
"reference_id": 11,
"property": "duration"
},
"duration": 333.33,
"total_distance": 930,
"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,
"type": "move",
"duration": 116.67,
"total_distance": 420,
"duration": 233.34,
"total_distance": -360,
"ease_out": "quadratic",
"waypoints": [
{
"at": 116.67,
"value": -420,
"ease_out": "quadratic"
}
],
"delay": {
"init_val": {
"reference_id": 11,
"property": "duration"
},
"reference_id": 12,
"reference_id": 11,
"property": "duration"
},
"comment": "kusudama renda move up"
"comment": "kusudama renda move up/down (merged from old ids 13+18)"
},
{
"id": 14,
@@ -132,11 +130,7 @@
"initial_opacity": 0.0,
"final_opacity": 1.0,
"delay": {
"init_val": {
"reference_id": 11,
"property": "duration"
},
"reference_id": 12,
"reference_id": 11,
"property": "duration"
},
"comment": "kusudama renda fade in"
@@ -165,22 +159,6 @@
"loop": true,
"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,
"type": "texture_change",
@@ -648,29 +626,33 @@
{
"id": 38,
"type": "move",
"duration": 66,
"delay": 80,
"total_distance": 0,
"start_position": 255,
"comment": "score counter move animation 2"
"duration": 345.36,
"start_position": 222,
"total_distance": -6,
"waypoints": [
{
"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,
"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,
"delay": 366.74,
"total_distance": 15,
"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,
+31 -54
View File
@@ -249,58 +249,27 @@
{
"id": 22,
"type": "move",
"total_distance": 45,
"duration": 116.67,
"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"
},
"total_distance": 0,
"duration": 400,
"ease_in": "quadratic",
"comment": "diff sort confirmation bounce down"
},
{
"id": 24,
"type": "move",
"total_distance": 15,
"duration": 83.33,
"delay": {
"init_val": {
"reference_id": 22,
"property": "duration"
"waypoints": [
{
"at": 116.67,
"value": -45,
"ease_out": "quadratic"
},
"reference_id": 23,
"property": "duration"
},
"ease_out": "quadratic",
"comment": "diff sort confirmation bounce up 2"
},
{
"id": 25,
"type": "move",
"total_distance": 15,
"duration": 83.33,
"delay": {
"init_val": {
"init_val": {
"reference_id": 22,
"property": "duration"
},
"reference_id": 23,
"property": "duration"
{
"at": 233.34,
"value": 0,
"ease_in": "quadratic"
},
"reference_id": 24,
"property": "duration"
},
"ease_in": "quadratic",
"comment": "diff sort confirmation bounce down 2"
{
"at": 316.67,
"value": -15,
"ease_out": "quadratic"
}
],
"comment": "diff sort confirmation double bounce (merged from old ids 22+23+24+25)"
},
{
"id": 26,
@@ -321,9 +290,13 @@
"type": "move",
"duration": 333.33,
"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.)",
"waypoint": 623,
"waypoint_at": 0.7368
"waypoints": [
{
"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,
@@ -413,8 +386,12 @@
"type": "move",
"duration": 333.33,
"total_distance": 548,
"waypoint": -75,
"waypoint_at": 0.2105,
"waypoints": [
{
"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."
}
]