Compare commits

..
Author SHA1 Message Date
TaikoZhongandClaude Opus 5.5 dc4fc59741 entry: pin the entry animations the Don placement is built on
Nijiiro had no Graphics/entry/animation.json of its own and took the
parent's. The parent changed its entry animations (drum bounce -245 ->
-340, cloud puff 0.75-1.0 -> 0.1-1.2, cloud loop, timings, mode-select
fade 160 -> 443 ms), but player.lua lands Don on DON_CY with a fixed
BOUNCE_END = -367.5 (the old -245 x 1.5), so after picking a side Don
now stopped ~140 px too high and the cloud was sized differently.

This adds the parent's previous entry animation.json unchanged, so
Nijiiro's entry looks as it did before the parent's change. Nijiiro's
own entry scripts and the engine's entry ids (9-11) are all in it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:48:00 +08:00
TaikoZhongandClaude Opus 5.5 d87aef0177 Update checksums.sha256
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 10:34:18 +08:00
GanYiZhong 605a651a25 Merge pull request 'dan select: add the dan transition animations (19-23)' (#45) from GanYiZhong/YataiDONNijiiro:dan-transition-anims into main 2026-10-12 04:31:32 +02:00
TaikoZhongandClaude Opus 5.5 b9fee6e113 dan select: add the dan transition animations (19-23)
The engine's dan transition (shown when leaving dan select) uses dan_select
animations 19-23. This skin has its own dan_select/animation.json without
them, so leaving dan select crashed: the transition textures come from
PyTaikoGreen, but the animations did not. Added from PyTaikoGreen with the
distances scaled x1.5 for 1920x1080 (22 is degrees and stays as is).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 10:25:39 +08:00
Yonokid 88df3fde7f state is now controlled by lua 2026-10-11 13:24:55 -04:00
Yonokid 9cfd0d9a76 minor optimization 2026-10-10 14:52:41 -04:00
Yonokid 6976222461 add timing offset option 2026-10-10 10:43:50 -04:00
Yonokid f604f65435 minor fixes 2026-10-09 16:14:31 -04:00
Yonokid 200cdc58ed add missing animation 2026-10-09 15:53:51 -04:00
Yonokid c531160071 fix result rank issue 2026-10-08 11:46:56 -04:00
Yonokid 2eccdaecd6 add gogo time lane effect 2026-10-07 16:29:57 -04:00
Yonokid e35c5ab854 minor fixes 2026-10-07 14:06:42 -04:00
Yonokid 30590cd9b4 add donbg tinting 2026-10-07 13:46:09 -04:00
Yonokid dcdff8924c Merge pull request 'dan select: extend the parent's DanSelect instead of replacing it' (#42) from GanYiZhong/YataiDONNijiiro:fix/dan-select-parent into main
Reviewed-on: Yonokid/YataiDONNijiiro#42
2026-10-05 13:48:43 +02:00
15 changed files with 356 additions and 32 deletions

No files matched your search

+57
View File
@@ -164,5 +164,62 @@
}
],
"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."
},
{
"id": 19,
"type": "move",
"duration": 450,
"total_distance": 1920,
"ease_in": "quadratic",
"comment": "dan transition slide in (PyTaikoGreen x1.5)"
},
{
"id": 20,
"type": "move",
"duration": 383,
"delay": 517,
"total_distance": -705,
"waypoints": [
{
"at": 200,
"value": -768,
"ease_in": "quadratic"
},
{
"at": 283,
"value": -689
}
],
"comment": "dan transition don rises from the bottom, overshoots and settles (PyTaikoGreen x1.5)"
},
{
"id": 21,
"type": "fade",
"duration": 400,
"delay": 483,
"initial_opacity": 0.0,
"final_opacity": 1.0,
"ease_out": "quadratic",
"comment": "dan transition emblem fade in"
},
{
"id": 22,
"type": "move",
"duration": 500,
"delay": 983,
"start_position": 0,
"total_distance": 90,
"ease_in": "quadratic",
"comment": "dan transition emblem spin (degrees, not scaled)"
},
{
"id": 23,
"type": "fade",
"duration": 483,
"delay": 1000,
"initial_opacity": 0.13,
"final_opacity": 1.0,
"ease_out": "quadratic",
"comment": "dan transition white flash; its end is the end of the transition"
}
]
+148
View File
@@ -0,0 +1,148 @@
[
{
"id": 0,
"type": "fade",
"duration": 100,
"initial_opacity": 0.0,
"final_opacity": 1.0,
"delay": 20,
"lock_input": true,
"comment": "fade in the side select box"
},
{
"id": 1,
"type": "fade",
"duration": 500,
"initial_opacity": 0.5,
"final_opacity": 0.4,
"reverse_delay": 0,
"loop": true,
"comment": "background lights flicker"
},
{
"id": 2,
"type": "move",
"duration": 550,
"total_distance": -245,
"ease_in": "quadratic",
"lock_input": true,
"waypoints": [
{ "at": 350, "value": -295, "ease_out": "quadratic" }
],
"comment": "move donchan's drum up/down a little (merged from old ids 2+3)"
},
{
"id": 4,
"type": "move",
"duration": 350,
"total_distance": -170,
"delay": {
"reference_id": 2,
"property": "duration"
},
"ease_out": "quadratic",
"lock_input": true,
"comment": "move donchan's drum to the left/right"
},
{
"id": 5,
"type": "texture_resize",
"duration": 350,
"initial_size": 0.75,
"final_size": 1.0,
"comment": "initial cloud resize, larger than loop"
},
{
"id": 6,
"type": "texture_resize",
"duration": 200,
"initial_size": 1.0,
"final_size": 1.2,
"reverse_delay": 200,
"loop": true,
"delay": {
"reference_id": 5,
"property": "duration"
},
"comment": "loop resize donchan cloud back and forth"
},
{
"id": 7,
"type": "texture_change",
"duration": 333,
"delay": {
"init_val": {
"reference_id": 4,
"property": "duration"
},
"reference_id": 4,
"property": "delay"
},
"textures": [
[0, 83.35, 0],
[83.35, 166.7, 1],
[166.7, 250, 2],
[250, 333, 3]
],
"comment": "cloud keyframes"
},
{
"id": 8,
"type": "fade",
"duration": 83.35,
"delay": {
"init_val": {
"reference_id": 7,
"property": "delay"
},
"reference_id": 7,
"property": "duration"
},
"comment": "fade out the cloud"
},
{
"id": 9,
"type": "fade",
"duration": 160,
"lock_input": true,
"comment": "fade out the mode select boxes"
},
{
"id": 10,
"type": "move",
"duration": 166.67,
"total_distance": 50,
"comment": "box movement"
},
{
"id": 11,
"type": "move",
"duration": 133.34,
"total_distance": 54,
"delay": 200,
"comment": "box opening"
},
{
"id": 12,
"type": "fade",
"duration": 200,
"initial_opacity": 0.0,
"final_opacity": 1.0,
"comment": "nameplate fade in"
},
{
"id": 13,
"type": "fade",
"duration": 1000,
"loop": true,
"comment": "costume menu blue arrow fade"
},
{
"id": 14,
"type": "move",
"duration": 1000,
"total_distance": 25,
"loop": true,
"comment": "costume menu blue arrow move"
}
]
+18 -1
View File
@@ -1186,5 +1186,22 @@
],
"loop": true,
"comment": "r57: result-gauge tamashii fire cels (replaces the id-20 kusudama-FADE collision; body = id 25, the real 8-cel 400 ms fire cycle)"
}
},
{
"id": 76,
"type": "texture_resize",
"duration": 133.36,
"initial_size": 0.0,
"final_size": 1.0,
"comment": "gogotime lane effect expands from center over 8 frames (16.67ms each)"
},
{
"id": 77,
"type": "fade",
"duration": 283.3,
"initial_opacity": 1.0,
"final_opacity": 0.0,
"delay": 0,
"comment": "judgment fade 3"
}
]
Binary file not shown.
+7 -1
View File
@@ -260,5 +260,11 @@
440
]
]
},
"lane_effect": {
"x": 496,
"y": 12,
"x2": 1424,
"y2": 195
}
}
}
+7
View File
@@ -156,6 +156,13 @@ function Background.new(player_num, bpm, scene_preset)
return self
end
-- a miss streak darkens the donbg band (each player's own band in 2P)
function Background:handle_miss_streak(player_num, on)
if self.collab then return end
local d = self.is_2p and (player_num == 2 and self.donbg_2 or self.donbg_1) or self.donbg
if d then d:set_dark(on) end
end
function Background:update(current_ms, bpm)
self.bpm = bpm
self.enso_skip:update(current_ms)
+1 -1
View File
@@ -5,7 +5,7 @@ local DonBG4 = require("background/bg_objects/donbg/4")
local DonBG5 = require("background/bg_objects/donbg/5")
local DonBG6 = require("background/bg_objects/donbg/6")
DonBG = {}
local DonBG = {}
function DonBG.create(player_num, path, index)
index = index or math.random(1, 6)
+1 -1
View File
@@ -3,7 +3,7 @@
-- base contract.
local DonBGBase = require("background/bg_objects/donbg/base")
DonBG4 = setmetatable({}, { __index = DonBGBase })
local DonBG4 = setmetatable({}, { __index = DonBGBase })
DonBG4.__index = DonBG4
function DonBG4.new(index, player_num, path)
+7 -3
View File
@@ -2,7 +2,7 @@
-- adds the cabinet's three sakura-petal drifters (between the two scrolling layers).
local DonBGBase = require("background/bg_objects/donbg/base")
DonBG6 = setmetatable({}, { __index = DonBGBase })
local DonBG6 = setmetatable({}, { __index = DonBGBase })
DonBG6.__index = DonBG6
local PETAL_W, PETAL_H = 391, 208
@@ -56,9 +56,9 @@ end
-- Same shape as DonBGBase:draw(), with the drifters slotted in at their real
-- display-list depth: after the depth-0 backdrop, before the depth-4 motif row.
function DonBG6:draw(y)
function DonBG6:draw_band(y)
y = y or 0
if not self.use_layers then return DonBGBase.draw(self, y) end
if not self.use_layers then return DonBGBase.draw_band(self, y) end
local normal = self.states.normal or {}
local fever = self.states.fever
@@ -87,4 +87,8 @@ function DonBG6:draw(y)
end
end
function DonBG6:draw(y)
self:draw_dark(DonBG6.draw_band, y or 0)
end
return DonBG6
+44 -2
View File
@@ -8,7 +8,7 @@ if not ok or type(DATA) ~= "table" then DATA = {} end
local ok_anim, DonBGAnim = pcall(require, "background/bg_objects/donbg/anim_player")
if not ok_anim or type(DonBGAnim) ~= "table" then DonBGAnim = nil end
DonBGBase = {}
local DonBGBase = {}
DonBGBase.__index = DonBGBase
function DonBGBase.new(index, player_num, path)
@@ -77,6 +77,27 @@ end
local EXIT_MS = 29000 / 60
-- miss streak: the band is multiplied towards black (colour of draw_texture), eased in/out
local DARK_MIN, DARK_FADE_MS = 0.65, 300
function DonBGBase:set_dark(on)
self.dark_target = on and 1 or 0
end
function DonBGBase:update_dark(current_time_ms)
local dt = current_time_ms - (self.dark_last_ms or current_time_ms)
self.dark_last_ms = current_time_ms
local d, target = self.dark or 0, self.dark_target or 0
local step = dt / DARK_FADE_MS
self.dark = d + math.max(-step, math.min(step, target - d))
end
function DonBGBase:dark_color()
if not self.dark or self.dark <= 0 then return nil end
local v = math.floor(255 * (1 - (1 - DARK_MIN) * self.dark))
return { v, v, v, 255 }
end
function DonBGBase:set_clear(is_clear)
if is_clear and not self.is_clear then
self.is_clear = true
@@ -98,6 +119,7 @@ function DonBGBase:set_clear(is_clear)
end
function DonBGBase:update(current_time_ms)
self:update_dark(current_time_ms)
-- same wall-clock accumulator bg_fever uses; guard drops the load-time gap
if self.last_ms then
local dt = current_time_ms - self.last_ms
@@ -159,7 +181,7 @@ function DonBGBase:draw_textures(fade, y, frame)
end
end
function DonBGBase:draw(y)
function DonBGBase:draw_band(y)
y = y or 0
-- collab path = parent contract; default pack = DATA-driven layer lists
@@ -191,6 +213,26 @@ function DonBGBase:draw(y)
end
end
-- Draws the band through `inner`, multiplying every texture it draws by the miss-streak
-- darkness. Subclasses draw with their own tex.draw_texture calls, so wrap that once here.
function DonBGBase:draw_dark(inner, y)
local c = self:dark_color()
if not c then return inner(self, y) end
local orig = tex.draw_texture
tex.draw_texture = function(id, p)
p = p or {}
p.color = c
return orig(id, p)
end
local ok, err = pcall(inner, self, y)
tex.draw_texture = orig
if not ok then error(err, 0) end
end
function DonBGBase:draw(y)
self:draw_dark(DonBGBase.draw_band, y or 0)
end
function DonBGBase:destroy()
tex.unload_folder(self.path, string.format("donbg/%s", self.name))
if self.anim then tex.unload_folder(self.path, self.anim.subset) end
+9 -3
View File
@@ -35,13 +35,13 @@ function EntryPlayer.new(side)
return self
end
function EntryPlayer:start_animations()
-- hold_cloud: login still loading; the cloud keeps puffing/looping until finish_cloud()
function EntryPlayer:start_animations(hold_cloud)
self.drum_move_1:start()
self.drum_move_3:start()
self.cloud_resize:start()
self.cloud_resize_loop:start()
self.cloud_texture_change:start()
self.cloud_fade:start()
if not hold_cloud then self:finish_cloud() end
self.nameplate_fadein:start()
end
@@ -177,3 +177,9 @@ end
function EntryPlayer:get_nameplate_fade()
return self.nameplate_fadein.attribute
end
-- let the cloud shrink away: texture change + fade out
function EntryPlayer:finish_cloud()
self.cloud_texture_change:start()
self.cloud_fade:start()
end
+10 -4
View File
@@ -7,11 +7,13 @@ function AllNetIcon.new(online)
local self = setmetatable({}, AllNetIcon)
self.online = online
self.indicator = tex.get_texture("global/overlay/allnet_indicator")
self.params = { frame = online and 2 or 0, x = 0, y = 0 } -- reused every draw, no per-frame table garbage
return self
end
function AllNetIcon:update(current_ms, online)
self.online = online
self.params.frame = online and 2 or 0
end
local SONG_MAX_CX, SONG_MAX_CY = 1814, 122
@@ -36,20 +38,24 @@ function AllNetIcon:draw_song_max()
y = math.floor(SONG_MAX_CY - t.height / 2 + 0.5), fade = fade })
end
function AllNetIcon:draw_icon(x, y)
local p = self.params
p.x, p.y = x, y
tex.draw_texture(self.indicator, p)
end
function AllNetIcon:draw(x, y)
local screen = tex.current_screen and tex.current_screen() or ""
if screen == "GAME" or screen == "GAME_DAN" then
if screen == "GAME" and not (tex.in_transition and tex.in_transition()) then
self:draw_song_max()
end
local frame = self.online and 2 or 0
tex.draw_texture(self.indicator, { frame = frame, x = x, y = y })
self:draw_icon(x, y)
if _G.g_active_enso_skip then _G.g_active_enso_skip:draw() end
return
end
if screen == "LOADING" then
return
end
local frame = self.online and 2 or 0
tex.draw_texture(self.indicator, { frame = frame, x = x, y = y })
self:draw_icon(x, y)
end
+17 -1
View File
@@ -91,9 +91,25 @@ function SongTransition:skip_armed()
return self.skip_on
end
-- timeline the engine reads (rainbow rise for the title, title fades, done)
local RISE_MS, RISE_DIST = 266.0, 1224 -- 816 at 720p, scaled to 1080p
function SongTransition:state()
local t = self.t or 0
local rise = RISE_DIST * clamp(t / RISE_MS, 0, 1) ^ 3
if self.is_second then
return { rainbow_up = rise, fade_out = clamp(1.0 - t / FADE_OUT_MS, 0, 1),
finished = t >= FADE_OUT_MS }
end
return { rainbow_up = rise, fade = clamp((t - FADE_DELAY) / FADE_MS, 0, 1),
finished = t >= SCENE_MS }
end
function SongTransition:start() self.t0 = nil end
function SongTransition:update(current_ms, rainbow_up, song_info_fade)
if not self.t0 then self.t0 = current_ms end
local t = clamp(current_ms - self.t0, 0, SCENE_MS)
self.t = current_ms - self.t0
local t = clamp(self.t, 0, SCENE_MS)
if self.is_second then
self.f = F_OUT + (F_END - F_OUT) * (t / SCENE_MS)
self.info = clamp(1.0 - t / FADE_OUT_MS, 0, 1)
+12 -1
View File
@@ -101,6 +101,10 @@ function ResultPlayer.new(player_num, is_2p, has_2p,
local self = setmetatable({}, ResultPlayer)
self.player_num = player_num
local timing = tex.timing_offset(player_num)
if timing then
self.timing_text = text.create_raw_text(timing, 20 * tex.get_screen_scale(), {255, 255, 255, 255}, {0, 0, 0, 255}, false, 3.0)
end
self.is_2p = is_2p
self.has_2p = has_2p
self.gauge_length = gauge_length
@@ -326,7 +330,7 @@ function ResultPlayer:update(current_ms, fade_in_finished,
self.rank_obj = ClipPlayer.new("game/ending_anim/" .. clip, "game", clip .. "_anim", pos[1], pos[2])
if self.rank_obj then
self.rank_obj.hold_last = true
if rank < 7 then self.rank_obj.shape_map = { [RANK_SHAPES[1]] = RANK_SHAPES[rank] } end
if rank < 7 then self.rank_obj.shape_map = { [74] = RANK_SHAPES[rank], [76] = RANK_SHAPES[rank] } end -- clip uses plate 74 then 76
self.rank_obj:start(current_ms)
-- se_result `scorerank_NN_<seat>`: one sample for every rank, seat like the crown
audio.play_sound("scorerank" .. (self.has_2p and (self.is_2p and "_r" or "_l") or "_c"), "sound")
@@ -388,6 +392,13 @@ function ResultPlayer:draw()
-- board frame (opaque white body), then the red/blue donback panel on top of it, then the difficulty tab
if self.t_board then tex.draw_texture(self.t_board, { frame = p_idx, index = p_idx }) end
if self.t_donback then tex.draw_texture(self.t_donback, { frame = p_idx, index = p_idx }) end
if self.timing_text then
local info = tex.get_texture_info("bottom", "chara_0")
if info and info.x[p_idx + 1] then
local pad = 6 * tex.get_screen_scale()
self.timing_text:draw({ x = info.x[p_idx + 1] + pad, y = info.y[p_idx + 1] + pad })
end
end
if self.t_difficulty then tex.draw_texture(self.t_difficulty, { frame = self.selected_difficulty, index = p_idx }) end
-- option icons
+15 -14
View File
@@ -1544,7 +1544,7 @@ e12731b19850741bfafffb4771670733f962dcb1c6ee762d65c15dd729cb16f2 *./Graphics/dan
ef0b4b6c457c5ee174f9b9ccca8be313b799038be09113bc521c01d21126afbf *./Graphics/dan_result/tamashii/tamashii_dark.png
1b80a57d99a7c80afc2271f261471059d39341301f3b4d97b208d86ecc5dce84 *./Graphics/dan_result/tamashii/tamashii_lit.png
0ee53c28d2c1e104d3f3b7b8e91486147540b905d3ddbb10f7f2a1a068ec7a91 *./Graphics/dan_result/tamashii/texture.json
c0fd3e158b424374bff1bc536741efa88403c874069c741d09c3001e2d31baaf *./Graphics/dan_select/animation.json
10065ee0763749eb7e0e0027572d0dc578b0055d4ad633f67614ff7fb4b10780 *./Graphics/dan_select/animation.json
3b3d8b12304ec62c9273e2b51074b44a6b45463a1c57e4b877767aed0345b6f0 *./Graphics/dan_select/box/arrow_l.png
895a8cd5d2de9ff8f1d8c272324d1a951a2d2ce88ceb8942cefc43aaf7508aaa *./Graphics/dan_select/box/arrow_r.png
af2bc41a290a137882377f644143db0ffeb88e09c07c7e64a7c984939feacb57 *./Graphics/dan_select/box/cursor.png
@@ -1734,7 +1734,7 @@ b02d79e8a3f531275ffdd90a555da0204e23b272bd4799cb7221b9502fcbc374 *./Graphics/ent
1b342d50858d37adac0a1265aee406e459b8547252c0763d435515eeed68153b *./Graphics/entry/side_select/credit_flash.png
bcd1d360b4e9bf51abdf9d4850f9ce372a8a7dd9cf5fe4a6867be41404e8b873 *./Graphics/entry/side_select/credit_pill.png
56ee3ae83bfdb2feb5f5f6204311b9523f2c1d01a17433ebc96bf8e9abd432ec *./Graphics/entry/side_select/texture.json
3599b0be0c1ccd143aa1176abff059c21f7d98b633cb3f3907044dda245312bb *./Graphics/game/animation.json
9aba5a10427b9b6909725d076e4ca2582392e6cc68509798be9b949c3a3389b0 *./Graphics/game/animation.json
dd670a393e337c750fc3e04607a8f8ea2498075a91cd1c00d7c9915cf9a301e3 *./Graphics/game/balloon/bubble.png
1b0efdf1daa0df76d5ec06873459432f0b0e76c84bc895ca6ea7afd976045aaf *./Graphics/game/balloon/counter.png
1c978f85589a545109200c5a5e8cb4c8765137d942d909e22253473843f9f0d0 *./Graphics/game/balloon/pop.png
@@ -2300,7 +2300,8 @@ f1f354444c95251b136b0feac381dacddcc33bd0f324a912178bfcb0cd2b9846 *./Graphics/gam
a6dea25ec50ac8784fe096c717f91d24807a8a22b16082541e9b915a9b31bc7d *./Graphics/game/gauge/texture.json
b3f3073a122e5b731f262489db6adbf7d9ffaefab5afefd370e8bd18cc510cc4 *./Graphics/game/gogo_time/explosion.png
eca6c501cbfd81c7b33b46ab81db554626ff2be54c1dd183e3493276dcaaccbf *./Graphics/game/gogo_time/fire.png
d830e11612e17785c477ab304d3afde985428078173601bbb3f2c19f6e5fb4cb *./Graphics/game/gogo_time/texture.json
797528e413b3427959312db5d8537fdce6331ba43a5b49903da0670211ebf2fa *./Graphics/game/gogo_time/lane_effect.png
e3fb796cacd9ad7bf0769e8f6d19f55c9c61742b8a59a854fb45acdd406efc5e *./Graphics/game/gogo_time/texture.json
3fc1ee33edfb7e99a61dae79d2abd0e018dbc1719a80c6834dcf697998b81c1e *./Graphics/game/hit_effect/hit_effect_good_big.png
ffc4d9da64b8075ba6534644b97a8bb7cf3bac1a42d1703549bb236f60592956 *./Graphics/game/hit_effect/hit_effect_good.png
a18283a2e7328057ea7ab728ad78645c48154b5b9452dc5713d372f30d0e64a8 *./Graphics/game/hit_effect/hit_effect_ok_big.png
@@ -2589,7 +2590,7 @@ d21dc53600bab83b80352bad38cd598d216c6e1279a4d54a0a085ad82ad1430d *./Graphics/res
684c22481d2a0e4bb2d6dd67b5df87650e081edfeadffcc70c377c393334c06d *./Graphics/result/score/score_shinuchi_en.png
1c160a1a14016ea3a5f761b040db433420476363224011d615613af660e7d0e1 *./Graphics/result/score/score_shinuchi_ja.png
89c4d6afafb8010ec4da0b9f72f10f677ec8c87677fcb3d2c9edde923a5b5f9f *./Graphics/result/score/texture.json
95f69fb8de9d61a26ba20c2f4d32a5382e193fb006d6e1c0e8bbd8935d045223 *./Graphics/skin_config.json
a3283a68c842ac605adda06316eb56353602a51f3a53284f679b3f092aeae159 *./Graphics/skin_config.json
8503b52e0cde037db5904d1ce59820442494f5d35de63326a3d9fa6a3b52372c *./Graphics/song_select/animation.json
27e427b29774e04dc739b1c58a7205565de88cea6370876b623f8e13a7106b5c *./Graphics/song_select/box/back_graphic.png
b74432db46ec6d7ec080fbee6df6029c1451e243d30813fcf597a21704de4e74 *./Graphics/song_select/box/background/0.png
@@ -3048,7 +3049,7 @@ eb2bb15e87cc83d66b320e0e4cbcbd2d5385881f36eca27fe73740439055ef6c *./Scripts/anim
5789c13c7958010f2878f9a0b119a50af4f362e754dc06ca3683ce742d507d25 *./Scripts/anim/title_idle.lua
34df97052c186c9588ff6a3c339501318c5e30ab9eecb97d1271c400ab9cfba1 *./Scripts/anim/title_idle_map.lua
66797bb60d6bacde5d882136a7dee9cda2f3e02282dd2ebaf2ee37346db14f70 *./Scripts/anim/wheel_decide.lua
0889745dffb3fdb2ae935131931ef080866e83570602a8ed2443c3b7d5978afd *./Scripts/background/background.lua
3194426ec2500eab927de71efc0a522c1dcf39feca7da6ec904f62944b775dae *./Scripts/background/background.lua
821c460fc965b16015ec49a71b1983804207121c6321ba34b6a67848fccd0a65 *./Scripts/background/bg_collabs/a3.lua
e5a938d840b8e28078d480ef0b0bd8533cefa6364b8ba75ea06523977493ad97 *./Scripts/background/bg_collabs/animal.lua
fb11c421ef506db47385896e2479d5de7640f4494a5815e12af29eff0682fe29 *./Scripts/background/bg_collabs/buttoburst.lua
@@ -3103,12 +3104,12 @@ fee3772a7144a4708038a0dfc1aa851a3daf4840f5a9d4ba69e8583a987100fd *./Scripts/back
1ce550bce8d8d814b48847e564acb0bfae5062ecd6fa97ddc39914e8692f9569 *./Scripts/background/bg_objects/donbg/1.lua
1ce550bce8d8d814b48847e564acb0bfae5062ecd6fa97ddc39914e8692f9569 *./Scripts/background/bg_objects/donbg/2.lua
1ce550bce8d8d814b48847e564acb0bfae5062ecd6fa97ddc39914e8692f9569 *./Scripts/background/bg_objects/donbg/3.lua
904660fbb0903a405a4022d7db3635164651a23ce5677fba0dcac5cea7eaa5d4 *./Scripts/background/bg_objects/donbg/4.lua
2071e1cac894a8308b84ad9cf73bf5fc4cbd7828f9c6dfe5b5155c058f74149c *./Scripts/background/bg_objects/donbg/4.lua
1ce550bce8d8d814b48847e564acb0bfae5062ecd6fa97ddc39914e8692f9569 *./Scripts/background/bg_objects/donbg/5.lua
32428fe2b07e05a825f714db97f1bf2ac1714dcf9a6b01001221b48c33ca6040 *./Scripts/background/bg_objects/donbg/6.lua
9dff062857ae73b032877d05e6e8fa2ca23b72bc18c02ee953076c04d6c9fe9f *./Scripts/background/bg_objects/donbg/6.lua
e10c1e1c31774833a748fd646554dd35c2953b9e1a488d356443e56d25b80a10 *./Scripts/background/bg_objects/donbg/anim_player.lua
a4a2fcec4d0149258a4348d64af047a9cb1c90f1f95424a9d2d87f6973baa5d9 *./Scripts/background/bg_objects/donbg/base.lua
63bd3b3d984c5c970fbe1a3b45aadb0eee6e1409a790889a3585b7e8fda44f4a *./Scripts/background/bg_objects/donbg.lua
cbec23f8368aa66fb4ba1214364c36eb1259b987007d597c68de7da02f58ad08 *./Scripts/background/bg_objects/donbg/base.lua
e29c62684cfe42c7cec0806638e426db8a91ec123e4fa8de2c142e0cdd544fca *./Scripts/background/bg_objects/donbg.lua
e74edba93a21b25327fd34f8cbb83181db74d4ebb7d18c16603fb3f24fe91e25 *./Scripts/background/bg_objects/ending.lua
2758cbad0f4279d2a82ad3fcbc8bc271671675c74e35957c81624d4c62760b2c *./Scripts/background/bg_objects/enso_skip.lua
997f33164cd87de37d415498346704f8af70c5150eafcd3902805b166fd21b9d *./Scripts/background/bg_objects/fever_anim.lua
@@ -3122,11 +3123,11 @@ f204455c907d3e0e7affb89db3649a709a27d528d84cc58d51a7d8cfaa1d3deb *./Scripts/back
4e17bf53815d1e586fdba5f3501d6f2d9935ad5604da871d2e7e89c87499aedd *./Scripts/background/dancer_data/dancer_3.lua
6e2b3c136611c688cdfbe44b0bbcb9d25c2ab647903246b07f2aef9baa6bab0b *./Scripts/background/dancer_data/dancer_4.lua
3a4f1f45bb54c4303dc97afcc6f67df831d6d6011a2264baed3d933c789d210e *./Scripts/background/dancer_data/dancer_5.lua
d1da72658ffef36b6e9245043adfc51e7824d771b403b878a589c54f296f7e91 *./Scripts/dan_select/dan_select.lua
e8f58cd79a9a2fea5730eb30ecf69a1e3dedf654840a4ffa9428e8418d34f777 *./Scripts/dan_select/dan_select.lua
020f929896e3f58c27bf54881afbbf1597ebd14951b5476f9a97a29fa670e2fc *./Scripts/entry/box.lua
0a941cea73b6a81f2c92219be139a43f5902067ce468ffd189520395b4739c91 *./Scripts/entry/costume_menu.lua
83fc6c160c85a68a75d146f455cb4e18fc962c23a0020d28ac6943a1843db504 *./Scripts/entry/entry.lua
261b2a42b2d9b78326c7a9599852173a29954ac8f451a5fa9def9c18383cf08a *./Scripts/entry/player.lua
76b76c8b965b00a505cd8a48771ec76141a2736c2396c58a990f2cab65a0b86b *./Scripts/entry/player.lua
8a993e86d3d6e653d47bc6d9bae67e0648ad27ae89293959c26de04869ef0219 *./Scripts/game/clip_player.lua
13f6d670d95b75abcbbddeddcb442ab32e6c32afeefc8ebf1b8bc703b57a9827 *./Scripts/game/combo_announce.lua
5749994b631898c91e246110bb4b5e67aa3fdc395c4d59b49c4ee72a44e0043d *./Scripts/game/ending_anim/ending_clear.lua
@@ -3139,14 +3140,14 @@ f4de8faceba1417bbdf0c408275f36b91022c93539178bd2d59018623bac759b *./Scripts/game
6c885099876d77ea14d4588edb3de5105ecef7f8b83e2787a3bdb25918e5b920 *./Scripts/game/ending_anim/rank_result_kiwami.lua
02a2a424b68fce7b172807ce60df5c2b41121cb65f2edcc5a1e43b77702a4008 *./Scripts/game/ending_anim/rank_result.lua
53ac15fdeee0ffc98670e128ff3cddc0ba66e0e8cbd91ab440628b0fd7d804ff *./Scripts/game_over/game_over.lua
09b35b2ebdb82a2912f198b8d3c0ae55e7366550912c0d608ca86be38262f64f *./Scripts/global/allnet_indicator.lua
6e4a0e75474a06dc9181e4c1c6de9a7cb9f5019e155d7275ce84b39712f36aeb *./Scripts/global/allnet_indicator.lua
a24e5eb9ac289325facb2fe023b16a343ef1ecf7e57cbb988bb81e2514665cf3 *./Scripts/global/coin_overlay.lua
b8828910262c4b19f53589abdcf1f77faa0eb2d326eb524c6b46399548c260ae *./Scripts/global/entry_overlay.lua
5c9562b2bf9a3502b8a2e9b61cec4a187e45819a19f5e882e7548fe14d223032 *./Scripts/global/indicator.lua
8c51e468799275c017323400b092b77408db34213465813abbbad1bb446e004b *./Scripts/global/nameplate.lua
34645d4c05dcb582ddaad6e3d2e1075c476471c81e0ce68e33f7b0bbfa3c0f2b *./Scripts/global/result_transition.lua
97bc832add42c186d57dec5bc774b9c42424051124c6e754b0a32bcf711fff21 *./Scripts/global/timer.lua
a76dc303c9054e422e5939c20195ea2f9f2a6f1673ff52467c6a9da59f477f4a *./Scripts/global/transition.lua
ca051ca99199e3529c85f3c5ce81d11bd763be295fed1d0bb39e33d8f5f2a3a7 *./Scripts/global/transition.lua
cba4e6940f37bb2fdd124acb9242e3147397660471a62d547d0a30ad06598a0c *./Scripts/result/bottom_characters.lua
bc1567d77db047e2473a4279bacf902d857312b6d5b005c20563ae098bc45c8c *./Scripts/result/dan_result_draw.lua
5100bbdacb2464227ad50262c5c9daf56ca4ca17dc0aa121fd64bc72946dab8a *./Scripts/result/high_score_indicator.lua
@@ -3155,7 +3156,7 @@ be8afab142d2a20bd98b0ac22b2d5db474d0a80a5a921c0415fe482c672ee498 *./Scripts/resu
d0e71023f6442b34b35e8fa92f34b29960f259c0255bf97ad468467b615808d3 *./Scripts/result/result_crown.lua
31979bee96d855ac40b979274f2cabeb657ae128af3883a32f33a596d3c6879c *./Scripts/result/result_crown_message.lua
d0d1da1f222097a92adb64e9fc1fc41caf66e41c7ed39499f00361298c542648 *./Scripts/result/result_fade_in.lua
2d1469130bde2c0e59c0548bde6c10ae9afac11d49d661968189160ced0ab498 *./Scripts/result/result_player.lua
583fba3d3ef92a3bfc4b2d65eb46b9a5570da1394109d352a7aa64abaeaee887 *./Scripts/result/result_player.lua
6290618e48db87ceea755e91d02af8bbbb233392181bac4b3984a2b52924fbb5 *./Scripts/song_select/dan_transition.lua
eeec060b381c4d06071870f40972ee1c91d2255a6a94fd1b42b3f072c112c5a4 *./Scripts/song_select/diff_sort.lua
49d6b0e063c3afbeb304a1f60d228c2bf7229d4604f08f50ba1382049259592e *./Scripts/song_select/file_navigator/box_back.lua