Compare commits

...
Author SHA1 Message Date
Yonokid 267d0c2f3e Merge branch 'main' into fix/dan-select-parent 2026-10-05 13:46:15 +02:00
Yonokid fafd8d2778 Merge pull request 'Add yellow_box_bottom to skin_config (dan select box bottom edge)' (#41) from GanYiZhong/YataiDONNijiiro:fix/yellow-box-bottom into main
Reviewed-on: #41
2026-10-05 13:46:08 +02:00
Yonokid b87ef7a172 Merge branch 'main' into fix/yellow-box-bottom 2026-10-05 13:45:56 +02:00
Yonokid 941afd274c Update checksums.sha256 2026-10-04 16:03:25 -04:00
TaikoZhongandClaude Opus 5.5 3be0239090 skin_config: add yellow_box_bottom for the dan select box
The engine now reads the yellow box's bottom edge from skin_config
yellow_box_bottom instead of the yellow_box_bottom_right texture's y.
Without the key the bottom row was placed by the fallback and the box
looked cut off under the song scrolls. 974 is the value the texture
entry used.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 01:36:27 +08:00
GanYiZhongandClaude Opus 5.5 525a9f36ff dan select: extend the parent's DanSelect instead of replacing it
The dan boxes moved to PyTaikoGreen's Scripts/dan_select/dan_select.lua, which
this skin's dan_select.lua shadowed, so no dan box was drawn. Load the parent's
script first and add only the clip-sampled cursor/arrows on top of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 01:35:05 +08:00
Yonokid 2f41fe2bbd track ttf with LFS 2026-10-04 01:14:24 -04:00
Yonokid 8a75d48555 fix background animations 2026-10-01 16:48:11 -04:00
Yonokid cc3e9308f5 Update checksums.sha256 2026-10-01 14:51:49 -04:00
Yonokid 5b0412389e remove some extra loading 2026-10-01 14:47:49 -04:00
Yonokid 506c761c3a Update checksums.sha256 2026-10-01 14:15:56 -04:00
Yonokid f37375e18a remove blank graphics 2026-10-01 14:07:37 -04:00
Yonokid fb7c1ba611 removed debug code 2026-10-01 11:28:23 -04:00
Yonokid fd383c7b8b separate the song select lua 2026-10-01 01:08:03 -04:00
Yonokid 8f4b6835c4 Update checksums.sha256 2026-09-30 15:55:46 -04:00
Yonokid ec3fa91b0d Merge pull request 'Background: the collab backgrounds PyTaikoGreen added after background.lua was forked' (#40) from GanYiZhong/YataiDONNijiiro:fix/collab-backgrounds into main
Reviewed-on: #40
2026-09-30 21:54:58 +02:00
Yonokid 814f21047b Merge branch 'main' into fix/collab-backgrounds 2026-09-30 21:54:46 +02:00
Yonokid 89618b4c02 Merge pull request 'Animations: follow the engine's merged move animations' (#39) from GanYiZhong/YataiDONNijiiro:fix/merged-move-animations into main
Reviewed-on: #39
2026-09-30 21:54:18 +02:00
Yonokid 3ea0910bd5 Merge branch 'main' into fix/collab-backgrounds 2026-09-30 21:53:56 +02:00
Yonokid c3d9c9f1b4 Merge branch 'main' into fix/merged-move-animations 2026-09-30 21:53:40 +02:00
Yonokid a340d03a93 change scos 2026-09-30 15:50:57 -04:00
Yonokid 5b46d889d8 major cleanup 2026-09-30 15:29:22 -04:00
Yonokid 366ece5ebe move the attract sequence back to pytaikogreen 2026-09-30 14:35:21 -04:00
Yonokid 06eb0778e4 Update checksums.sha256 2026-09-30 14:25:21 -04:00
Yonokid f45fe56a67 update title video 2026-09-30 11:50:02 -04:00
Yonokid 401d7cf12f Update checksums.sha256 2026-09-29 15:33:43 -04:00
TaikoZhongandClaude Opus 5.5 9999570d4c Background: the 27 collab backgrounds PyTaikoGreen added after this file was forked
background.lua was forked from PyTaikoGreen on 2026-09-02; PyTaikoGreen then
added DQ10 (09-07) and 26 more (09-09, "Add all missing collab
backgrounds"), so a chart with SCENEPRESET:MIKU / TOHO / YOKAI / ... fell
back to the standard background here. They now use PyTaikoGreen's modules.

bg_collabs/gumi.lua: PyTaikoGreen's, with GumiDonBG filling in the fields
PyTaikoGreen's DonBG6 sets (this skin has its own donbg/6), which its
draw_textures uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 01:30:39 +08:00
TaikoZhongandClaude Opus 5.5 a887052197 Animations: follow the engine's merged move animations (cf785cf)
The engine now reads one move per effect where it used to add several:
kusudama 11 (= old 11 + 12) and 13 (= old 13 + 18), diff sort bounce 22
(= old 22-25), score counter 38 (y before the fan-out, from the old start
y and 39) and 39 (fan-out = old 40); the single-point "waypoint" key is
now a "waypoints" list. Same motion as before, at this skin's values.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 00:41:16 +08:00
Yonokid d121d5ed34 Merge pull request 'Ending: place the 2P banner on the 2P lane (game_p2_y)' (#38) from GanYiZhong/YataiDONNijiiro:fix/2p-ending-lane-y into main
Reviewed-on: #38
2026-09-29 16:49:50 +02:00
TaikoZhongandClaude Opus 5.5 4c50c7f2cb Ending: place the 2P banner on the 2P lane (game_p2_y)
game_2p_offset is the distance between the two background bands (536), not between the lanes,
so in two-player games the 2P clear / full combo / fail banner was drawn below the screen.
The 2P lane is at game_p2_y, the 1P lane at 184 (both x screen scale).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 05:39:26 +08:00
Yonokid 35b6152aae Update checksums.sha256 2026-09-24 18:31:24 -04:00
Yonokid 3af3f30ce1 Match PyTaikoGreen gitattributes (add * -text) 2026-09-24 17:44:31 -04:00
Yonokid 828c9eb296 fix crashes 2026-09-24 14:50:23 -04:00
YonokidandClaude Sonnet 5 463194ccde Move fonts to dedicated Fonts folder
Keeps font.ttf and per-language font_*.ttf out of Graphics so
texture/atlas tooling doesn't need to skip non-image files.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 12:15:58 -04:00
Yonokid 0b62466284 fix index bug 2026-09-22 10:46:42 -04:00
Yonokid c0ecb338ba remove get_id 2026-09-20 13:37:39 -04:00
Yonokid 047c3e9f3c remove sample animations 2026-09-19 18:27:30 -04:00
Yonokid 59c90c3ca1 move lots to lua 2026-09-19 13:45:48 -04:00
Yonokid 674b253bdd consolidate notes into one atlas 2026-09-18 13:17:33 -04:00
Yonokid 633f8b593a Merge pull request 'Result: the gold gauge cell follows the cleared state, not the cell count' (#37) from GanYiZhong/YataiDONNijiiro:result-gauge-clear into main
Reviewed-on: #37
2026-09-18 16:18:03 +02:00
Yonokid a5793af2ca Merge branch 'main' into result-gauge-clear 2026-09-18 16:17:52 +02:00
Yonokid 60c9178c86 Merge pull request 'i18n: Korean for every dictionary string' (#36) from GanYiZhong/YataiDONNijiiro:text-labels into main
Reviewed-on: #36
2026-09-18 16:17:43 +02:00
Yonokid 2994bdc94b Merge branch 'main' into text-labels 2026-09-18 16:17:31 +02:00
Yonokid 07092b1cac Merge pull request 'Lua: every user-visible string comes from skin_config (tex.skin_text)' (#35) from GanYiZhong/YataiDONNijiiro:lua-strings-to-config into main
Reviewed-on: #35
2026-09-18 16:17:00 +02:00
TaikoZhongandClaude Fable 5.1 ced2120784 result: the gold gauge cell follows the cleared state, not the cell count
The first gold cell was lit from the cell count (39 of 50 for oni) while the game clears on soul >= norma (8000); a failed run at 7800..7999 soul grew a gold cell. Draw the transition piece and the gold strip only when gauge_state >= 1, like the HUD gauge.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 12:19:06 +08:00
TaikoZhongandClaude Fable 5.1 c5aeff2158 entry: the dan board's strings are mode_dan, not entry_dan
The engine puts a Dan-i Dojo board on the entry screen whenever the skin
defines an entry_dan text; this skin lists the dojo inside song select
instead (75f5d27), so the strings moved into skin_config must not use that
key.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 01:46:19 +08:00
TaikoZhongandClaude Fable 5.1 26cab15ab5 Lua: every user-visible string comes from skin_config (tex.skin_text)
entry board titles/comments (entry_* / entry_*_comment_N), costume-menu guide words
(guide_select_label / guide_decide_label), the sort window (sort_window_* /
folder_sort_select / course_name_*), the dan HUD plate (dan_gauge_name /
dan_exam_text_gauge), the N曲 song limit (song_num_max) and the 演奏スキップON
badge (skip_badge_text) are read through the engine's tex.skin_text; the only
Japanese left in Lua are folder-name matchers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 01:45:48 +08:00
TaikoZhongandClaude Fable 5.1 113e246328 i18n: Korean for every dictionary string
Every skin_config text entry now carries ja / en / zh (Simplified) / ko.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 01:43:39 +08:00
Yonokid f0f6cac997 Merge pull request 'zh is Simplified Chinese: convert the zh strings, translate the last Japanese-only labels' (#34) from GanYiZhong/YataiDONNijiiro:zh-simplified into main
Reviewed-on: #34
2026-09-15 17:48:00 +02:00
Yonokid d18a5796c3 Merge branch 'main' into zh-simplified 2026-09-15 17:47:49 +02:00
Yonokid b74023c829 Merge pull request 'Loading transition: the game hint block follows the interface language' (#33) from GanYiZhong/YataiDONNijiiro:hint-i18n into main
Reviewed-on: #33
2026-09-15 17:47:24 +02:00
Yonokid e515e2e0f2 Merge branch 'main' into hint-i18n 2026-09-15 17:46:35 +02:00
Yonokid 45156e3bfc Merge pull request 'font.ttf 3.000: all five cabinet atlases (adds Simplified Chinese and Korean)' (#32) from GanYiZhong/YataiDONNijiiro:font-all-atlases into main
Reviewed-on: #32
2026-09-15 17:46:12 +02:00
Yonokid 43c57b1cfd Merge branch 'main' into font-all-atlases 2026-09-15 17:44:59 +02:00
Yonokid e83a388a4a Merge pull request 'Dan gauge: 1P red / 2P blue unfilled track' (#31) from GanYiZhong/YataiDONNijiiro:dan-gauge-player-colors into main
Reviewed-on: #31
2026-09-15 17:44:46 +02:00
Yonokid 9a8591edb8 Merge branch 'main' into dan-gauge-player-colors 2026-09-15 17:44:35 +02:00
Yonokid 9019695c30 Merge pull request 'Dan result: 未到達 plates per language and the "not recorded" banner' (#30) from GanYiZhong/YataiDONNijiiro:dan-result-nosave into main
Reviewed-on: #30
2026-09-15 17:44:28 +02:00
Yonokid 2a605b54aa Merge branch 'main' into dan-result-nosave 2026-09-15 17:44:17 +02:00
Yonokid 8279a57cbd Merge pull request 'Dan select: the cabinet's exam grid (soul gauge box + per-song segments)' (#29) from GanYiZhong/YataiDONNijiiro:dan-exam-grid into main
Reviewed-on: #29
2026-09-15 17:44:09 +02:00
Yonokid fc5705b024 Merge branch 'main' into dan-exam-grid 2026-09-15 17:43:15 +02:00
TaikoZhongandClaude Fable 5.1 a0a4a29027 fonts: Han from the language atlas first, kana / Latin from jp (--han-order)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 15:45:15 +08:00
TaikoZhongandClaude Fable 5.1 9a4e078d20 fonts: every family keeps the jp brush glyphs first, its own atlas is the first fallback
font_cn / font_tw / font_kr are now jp first (kana, Latin, digits and every
kanji the jp atlas has stay in the brush face); cn / tw / kr only supply
the characters jp lacks. build_font.py gains --han-order for a separate
ideograph priority.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 14:23:51 +08:00
TaikoZhongandClaude Fable 5.1 04a9920142 zh is Simplified Chinese: convert the zh strings, translate the last Japanese-only labels
- every zh string in skin_config.json and the Lua scripts converted Traditional ->
  Simplified (OpenCC TSPhrases + TSCharacters; 裏 kept for 裏魔王); the sort window
  uses the cabinet's own Simplified rows (根据难度选择 / ★的个数 / 排序)
- dan_exam_text_more/less/gauge/gauge_less gain en / zh / ko
- dan_info 魂ゲージ + %以上 and the N曲 song limit follow the interface language
  (cabinet wordlist: clear_theme_soul_gauge, sort_window_songs)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 06:31:22 +08:00
TaikoZhongandClaude Fable 5.1 dfa2ac78a3 One font per cabinet family: font_cn / font_tw / font_en / font_kr
font_zh.ttf becomes font_cn.ttf (cn, tw, jp, en, kr) and gains siblings built the
same way: font_tw (tw, jp, cn, en, kr), font_en (en, jp, tw, cn, kr), font_kr
(kr, jp, en, tw, cn). font.ttf (jp first) is unchanged and stays the fallback.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 06:16:49 +08:00
TaikoZhongandClaude Fable 5.1 57250065bb Loading transition: the game hint block follows the interface language
The 「ゲームのヒント」 block is a baked Japanese texture. For any other language the
three lines are drawn as text (skin_config transition_hint_title / _line1 / _line2,
en / zh / ko) at the rows measured off the texture, on the same fade; Japanese keeps
the texture. The title strings are the cabinet's own wordlist entries.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 06:15:35 +08:00
TaikoZhongandClaude Fable 5.1 346f8e7274 font_zh.ttf: Simplified Chinese glyph set first, tw/jp only for what it lacks
With the interface language set to Simplified Chinese the engine now loads
Graphics/font_zh.ttf, built with the cn atlas first (7 588 glyphs from cn,
11 966 from tw, 8 from jp) so shared characters take the Simplified face too,
as the cabinet does with its per-language atlas families.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 05:56:37 +08:00
TaikoZhongandClaude Fable 5.1 6a68be7c36 font.ttf 3.000: all five cabinet atlases (adds Simplified Chinese and Korean)
Rebuilt from the cabinet's five _64 glyph atlases (jp, tw, cn, kr, en) instead of
jp+tw only: 22 382 glyphs, +1 956 Simplified Chinese and +2 737 Hangul, so zh-CN
and ko text no longer falls back to '?'. Same face, metrics and baseline as 2.000.
tools/font/build_font.py + FONT.md document the cabinet's font selection and the build.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 05:37:03 +08:00
TaikoZhongandClaude Fable 5.1 d318cf5e9f Dan gauge: 1P red / 2P blue unfilled track
The dan gauge track was the same yellow for both sides. The cabinet colours
it per player like the normal gauge below the clear line: dark red for 1P,
dark teal-blue for 2P. Same body colours as gauge/1p_unfilled_normal and
gauge/2p_unfilled_normal; frame and alpha untouched.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 02:15:03 +08:00
TaikoZhongandClaude Fable 5.1 1c39077a72 Dan result: 未到達 plates per language and the "not recorded" banner
From the cabinet's result movie: the unreached plate (ja / en / ko / zh
frames, 400x128) placed over a song row's counters, and the 610x70 notice
plate at the top right for a skipped run, with the notice text per language
(dan_result_nosave) drawn by the engine (Yonokid/YataiDON#180).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-13 11:33:08 +08:00
TaikoZhongandClaude Fable 5.1 d4a7e65786 Dan select: the cabinet's exam grid (soul gauge box + per-song segments)
Turn on the engine's dan_exam_grid layout: the soul gauge in its own box on
the left, the other conditions stacked on the right, and per-song conditions
split into 1st / 2nd / 3rd segments with each song's own border. The art has
shipped with the skin since the board rework; only the option was missing.
The segment strips are re-cut on a window that keeps the 2nd / 3rd badges'
rim (163x34) and the strip anchor moves by the same 3 / 1 px.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-13 10:22:45 +08:00
Yonokid d6629d4a38 Merge pull request 'Result: fill the soul gauge cell by cell' (#27) from GanYiZhong/YataiDONNijiiro:result-gauge-cells into main
Reviewed-on: #27
2026-09-11 03:54:26 +02:00
Yonokid 8e8a6d0f28 Merge branch 'main' into result-gauge-cells 2026-09-11 03:54:19 +02:00
Yonokid 6e94262bdb Merge pull request 'Dan gauge: one 21 px cell per bar piece' (#26) from GanYiZhong/YataiDONNijiiro:dan-gauge-cells into main
Reviewed-on: #26
2026-09-11 03:54:08 +02:00
Yonokid db94fe4f2c Merge branch 'main' into dan-gauge-cells 2026-09-11 03:53:58 +02:00
Yonokid 1281737b79 Merge pull request 'Game HUD: song title on the cabinet line' (#25) from GanYiZhong/YataiDONNijiiro:result-rank-skip into main
Reviewed-on: #25
2026-09-11 03:53:51 +02:00
Yonokid f08a4082bc Merge branch 'main' into result-rank-skip 2026-09-11 03:53:40 +02:00
TaikoZhongandClaude Fable 5.1 fec174303a Result: fill the soul gauge cell by cell on the cabinet's 50-cell grid
The result gauge stepped in 87 engine units of 8.4 px, so the fill crept
across the 50-cell / 21 px groove instead of lighting one cell at a time.
Convert the fill target to cells (points * 50 / max, floored like the game
HUD), step one cell per 7 frames (kGageSpeed_), place the norma at cell
30 / 35 / 40, and give the fill pieces the HUD's one-cell-wide art on the
groove's grid.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 09:37:40 +08:00
TaikoZhongandClaude Fable 5.1 00cd9bb786 Dan gauge: one 21 px cell per bar piece, anchored on the cell grid
The dan gauge fill pieces were 12 px wide at x 726 while the border's cell
grid is 50 x 21 px from x 738; make the bar one cell wide at 738 so the
engine's per-cell stretch lands on the grid, and centre the 32 px gauge-up
glow on its cell (733).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 08:13:34 +08:00
TaikoZhongandClaude Fable 5.1 1066fa6383 Game HUD: song title on the cabinet's line
song_info y 58 -> 68: the cabinet's title field (y 0..98, 54 pt, border 6.5,
text vertically centred then inset by the border) puts the ink centre near
y 56; the engine anchors the text object's box, whose ink sits ~12 px above
its centre.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 08:13:26 +08:00
Yonokid 7f6e883a09 Update checksums.sha256 2026-09-10 14:35:16 -04:00
Yonokid 58259f949d Merge branch 'GanYiZhong-entry-guide-title' 2026-09-10 13:39:38 -04:00
Yonokid f63d0901ba Merge pull request 'Song select: the decided genre board stays up while its songs load' (#22) from GanYiZhong/YataiDONNijiiro:folder-open-leg into main
Reviewed-on: #22
2026-09-10 19:32:35 +02:00
Yonokid 1b06d309f5 Merge branch 'main' into folder-open-leg 2026-09-10 19:32:18 +02:00
Yonokid ecc50e6c60 Merge pull request 'Light effects: entry glow patch size, add-blended layers drawn additively' (#21) from GanYiZhong/YataiDONNijiiro:light-effects into main
Reviewed-on: #21
2026-09-10 19:32:08 +02:00
TaikoZhongandClaude Fable 5.1 bffb67099c Result: the shinuchi SCORE caption is plain white too
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 00:38:33 +08:00
TaikoZhongandClaude Fable 5.1 c7acbf8527 Song select: a furled board is drawn as crisp columns, not a squashed bitmap
Squashing the 960-wide board texture to a few px averaged the outline away and,
because the GPU picks the mip level from the larger axis, blurred every row too;
the cabinet scales a vector shape and stays sharp.  draw_board now builds a
furled board from columns: both rounded corners at 1:1 and the band / panel /
band between them scaled in proportion, each drawn from an 8 px flat slice of
itself and magnified.  Narrower than both corners it becomes a solid bar with
the outline columns on either side and the flat centre between them (squeezed
corners left two hollow strokes with nothing between).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 00:37:30 +08:00
TaikoZhongandClaude Fable 5.1 d4b47f79d9 Song select: the folder close leg plays the cabinet's return half
Closing a folder (もどる) had no wheel motion at all: the fly table only
covered the open leg (clip f27..150), fly_offset only ran for kind "open", and
the engine's 166 ms fade took the song boxes and the back board out right
after the press -- the cabinet keeps them solid until they fly out (f184..204)
and the board furls (f205..217).

- anim/wheel_decide now spans f27..255 (open leg + `return` leg, straight from
  the cabinet clip); fly_offset plays the return half on the close leg: song
  boxes fly out, wait off screen across the swap (f219) and the genre boxes
  fly back in f234..254.  f255 re-bases the clip, so the leg stops before it.
- The engine's box fade is ignored during the pre-swap half of the close leg
  (box_fade); the clip channels already drive the back board's title fade and
  furl.

Verified with captures: press -> boxes stay -> contents fade / boxes fly out ->
back board furls -> genre board unfurls -> contents return -> boxes fly in.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 18:35:47 +08:00
TaikoZhongandClaude Fable 5.1 7ce90d46b8 Song select: the decided genre board stays up while its songs load
Opening a folder on this engine differs from the cabinet in one way that
matters for the animation: the cabinet swaps the content 69 frames into the
decide leg, this engine swaps when its loader is done, which can be a couple
of seconds for a big folder.  The leg clock parked one frame short of the swap
(f113), i.e. with the decided board already furled away and the neighbours
flown out, so the screen sat empty for the whole load -- and before that the
engine re-grows the decided box's yellow frame, which made the board close
and reopen right after the press.

- The open leg now parks one frame short of the furl (f99): the decided board
  stays up, contents faded per the clip, as the loading state.  On the swap the
  clock resumes from the furl, so furl (f100..113) and the new board's unfurl
  (f114..) play back to back; a swap that lands before the park point just lets
  the clock run.
- The neighbours' fly-out (f86..99) plays before the swap as on the cabinet;
  it used to wait for the swap and then jump straight to the off-screen hold.
- The decided board is remembered at OPEN_BEGIN and drawn fully open for the
  whole leg, past the engine's closed re-grow and past the moment the engine
  takes the box off the wheel for the loader (draw_overlays bridges it from the
  still-live box handle until it has furled).
- The new content's song / back board is not drawn before the swap frame.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 07:26:09 +08:00
TaikoZhongandClaude Fable 5.1 037a9c5816 Result: the スコア / SCORE caption is plain white on the cabinet
The caption textures carried a heavy dark outline; the cabinet's board header
shows the caption in plain white.  Re-rendered with the skin font, white fill,
no outline, same size and position as before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 06:50:12 +08:00
TaikoZhongandClaude Fable 5.1 96f0f6f7aa Result: centre the スコア caption on the board's header band
The caption sat at y 281, which put its glyphs at 290..321 on a header band
that spans 284..314, so the bottom of the text spilled onto the body of the
board.  At y 274 the glyphs sit at 283..314, centred on the band.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 06:21:18 +08:00
TaikoZhongandClaude Fable 5.1 462e4602c6 Fever backdrops: export the steady state, not the transition's parked copies
The fever movies' root timeline is a state machine: frame 0 (`init`) parks the
fly-in copies of the transition -- a second sky plate, the wave scrollers, the
boats -- at alpha 0, and the steady state is the `fever` label, where only
fever_mc remains.  The export took the root's frame-0 children and forced the
parked ones visible, so the third backdrop drew its sky and its big waves twice
(one row over the other) and the boats and Mt Fuji ended up behind an extra wave
layer.  movie_export now takes the root's children at the `fever` label and only
the ones shown there; all three fever backdrops re-exported.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 06:10:36 +08:00
TaikoZhongandClaude Fable 5.1 11417f080f Fever backdrop 3: stop painting the movie's mask plate
bg_fever_a_03 places a full-stage plate at fever_mc depth 4 with a clip depth:
it is a mask that only clips the layer above it and is never painted, but the
export drew it as an ordinary leaf, which put a flat green sheet over the sky.
movie_export now skips placements that carry a clip depth; re-exported, the
plate and its texture are the only change.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 03:34:02 +08:00
TaikoZhongandClaude Fable 5.1 0985512f91 Entry: bake the warm glows as two non-overlapping patches
The four pre-composited patches overlapped (2 and 3 by 31 px, and after the
size fix 0 and 2 as well), and where they overlapped the later patch replaced
the earlier one's glow instead of adding to it, which showed as a vertical dark
band between the lamps.  The glows are now summed onto the backdrop once and
cut into two boxes that do not touch: the left lamp, and the three right-hand
lamps together.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 03:30:55 +08:00
TaikoZhong 3a815102a1 Update checksums.sha256 for the changed textures and scripts 2026-09-10 03:30:03 +08:00
TaikoZhongandClaude Fable 5.1 5ee758f90f Replay the cabinet's add-blended light effects as additive
The exported clips and backdrop movies were drawn source-over everywhere, but the
cabinet places a number of glow layers with its add blend mode: the lantern glows
of the lower backdrops (bg_nomal_a_01..05), the crown's radial burst, the score
rank plate's effect copy, and the full-combo / donderful letter glows.  Drawn
source-over, those textures show up as dark or grey patches.

- movie_export / clip_export record the placement's blend mode (`blend = 8` on a
  backdrop leaf, an 8th row value on a clip leaf; the root placement's mode is
  folded into its group), and bg_anim / clip_player / ending draw such leaves
  with blend = "additive".  Data re-exported; only the blend field changed.
- result_crown: the burst copies draw additively; the crown_loop shine sweep is a
  plain white polygon on the cabinet, so gleam frames 0..2 are white now instead
  of the atlas colour they were exported with.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 01:49:19 +08:00
TaikoZhongandClaude Fable 5.1 e1b6f78cb9 Entry: give the four warm-glow patches one common size
The engine sizes every frame of a folder texture like frame 0 (source rect and
default x2/y2), so the 177x311 and 233x233 patches were being stretched to
216x311 and their edges showed as boxes around the lamps.  Each patch is now
padded to 233x311 with the untouched backdrop around it; the patch is bg + glow,
so the extra backdrop is invisible at any fade.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 01:49:17 +08:00
293 changed files with 8189 additions and 10347 deletions

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
* -text
*.png filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.ttf. filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
@@ -15,10 +15,6 @@
"x": 0,
"y": 0
},
"s11": {
"x": 0,
"y": 0
},
"s13": {
"x": 0,
"y": 0
Binary file not shown.
Binary file not shown.
-10
View File
@@ -1,10 +0,0 @@
{
"page1": {
"x": 0,
"y": 0
},
"page2": {
"x": 0,
"y": 0
}
}
Binary file not shown.
@@ -128,5 +128,25 @@
"rank_plate": {
"x": 64,
"y": 57
},
"unreached_ja": {
"x": 1252,
"y": 171
},
"unreached_en": {
"x": 1252,
"y": 171
},
"unreached_ko": {
"x": 1252,
"y": 171
},
"unreached_zh": {
"x": 1252,
"y": 171
},
"nosave": {
"x": 1344,
"y": 22
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+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."
}
]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+24 -8
View File
@@ -12,16 +12,32 @@
"y2": 1080
},
"glow": [
{ "x": 1704, "y": 234 },
{ "x": 0, "y": 186 },
{ "x": 1533, "y": 297 },
{ "x": 1331, "y": 329 }
{
"x": 0,
"y": 186
},
{
"x": 1331,
"y": 234
}
],
"twinkle": [
{ "x": 1186, "y": -142 },
{ "x": 576, "y": 16 },
{ "x": 206, "y": -108 },
{ "x": 928, "y": 104 }
{
"x": 1186,
"y": -142
},
{
"x": 576,
"y": 16
},
{
"x": 206,
"y": -108
},
{
"x": 928,
"y": 104
}
],
"tower": {},
"shops_center": {},
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-10
View File
@@ -1,10 +0,0 @@
{
"player_entry_en": {
"x": 0,
"y": 0
},
"player_entry_ja": {
"x": 0,
"y": 0
}
}
BIN
View File
Binary file not shown.
+47 -76
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",
@@ -460,23 +438,12 @@
},
{
"id": 24,
"type": "sample",
"table": "gogo_fire",
"track": "#37@1",
"field": "sx",
"range": [
10,
42
],
"comment": "R54 sample: gogo fire scale - lane_hit gogo MC #37@1 sx: 0.4 -> pop 3.6 (f10..14) -> ease 1.325 (f30) -> breathe -> settle 1.3988 (f42). The old texture_resize flattened the pop-then-ease into one linear ramp (r53 flag)",
"fallback": {
"type": "texture_resize",
"duration": 266.72,
"initial_size": 3.474,
"final_size": 1.351,
"comment": "gogotime fire resize (arcade lane_hit MC38 - pops to 3.474 then eases to the steady 1.351 over 16 frames)",
"delay": 66.68
}
"type": "texture_resize",
"duration": 266.72,
"initial_size": 3.474,
"final_size": 1.351,
"comment": "gogotime fire resize (arcade lane_hit MC38 - pops to 3.474 then eases to the steady 1.351 over 16 frames)",
"delay": 66.68
},
{
"id": 25,
@@ -659,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,
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4 -4
View File
@@ -70,19 +70,19 @@
]
},
"1p_bar": {
"x": 726,
"x": 738,
"y": 248
},
"2p_bar": {
"x": 726,
"x": 738,
"y": 248
},
"1p_bar_fade": {
"x": 716,
"x": 733,
"y": 241
},
"2p_bar_fade": {
"x": 716,
"x": 733,
"y": 241
},
"tamashii": {
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+113 -30
View File
@@ -1,30 +1,113 @@
{
"0": {
"y": 0
},
"1": {},
"2": {},
"3": {},
"4": {},
"5": {},
"6": {},
"7": {},
"8": {},
"9": {
"frame_order": [
0,
0
]
},
"10": {
"frame_order": [
0,
0
]
},
"moji": {},
"moji_drumroll_mid": {},
"moji_drumroll_mid_big": {},
"drumroll_tail": {},
"drumroll_big_tail": {}
}
{
"0": {
"file": "notes_atlas.png",
"crop": [
[0, 0, 12, 200],
[12, 0, 12, 200]
]
},
"1": {
"file": "notes_atlas.png",
"crop": [
[0, 200, 192, 192],
[192, 200, 192, 192],
[384, 200, 192, 192]
]
},
"2": {
"file": "notes_atlas.png",
"crop": [
[0, 392, 192, 192],
[192, 392, 192, 192],
[384, 392, 192, 192]
]
},
"3": {
"file": "notes_atlas.png",
"crop": [
[0, 584, 192, 192],
[192, 584, 192, 192]
]
},
"4": {
"file": "notes_atlas.png",
"crop": [
[0, 776, 192, 192],
[192, 776, 192, 192]
]
},
"5": {
"file": "notes_atlas.png",
"crop": [
[0, 968, 192, 192],
[192, 968, 192, 192],
[384, 968, 192, 192]
]
},
"6": {
"file": "notes_atlas.png",
"crop": [
[0, 1160, 192, 192],
[192, 1160, 192, 192]
]
},
"7": {
"file": "notes_atlas.png",
"crop": [
[0, 1352, 192, 192],
[192, 1352, 192, 192],
[384, 1352, 192, 192]
]
},
"8": {
"file": "notes_atlas.png",
"crop": [
[0, 1544, 72, 192],
[72, 1544, 72, 192]
]
},
"9": {
"file": "notes_atlas.png",
"crop": [
[0, 1736, 192, 192],
[0, 1736, 192, 192]
]
},
"10": {
"file": "notes_atlas.png",
"crop": [
[0, 1928, 192, 192],
[0, 1928, 192, 192]
]
},
"moji": {
"crop": [
[0, 0, 256, 48],
[0, 48, 256, 48],
[0, 96, 256, 48],
[0, 144, 256, 48],
[0, 192, 256, 48],
[0, 240, 256, 48],
[0, 288, 256, 48],
[0, 336, 256, 48],
[0, 384, 256, 48],
[0, 432, 256, 48],
[0, 480, 256, 48],
[0, 528, 256, 48]
]
},
"moji_drumroll_mid": {},
"moji_drumroll_mid_big": {},
"drumroll_tail": {
"file": "notes_atlas.png",
"crop": [
[0, 2120, 80, 192]
]
},
"drumroll_big_tail": {
"file": "notes_atlas.png",
"crop": [
[0, 2312, 120, 192]
]
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loaded 100 of 293 files, more files were not shown because too many files have changed in this diff. Show more