Compare commits

...
Author SHA1 Message Date
Yonokid 63fc881fd4 Merge branch 'main' into result-2p-colors 2026-09-09 17:13:27 +02:00
Yonokid 9a22f8f1c9 Merge pull request 'Roll effect: fly over the lower backdrop along the original paths' (#12) from GanYiZhong/YataiDONNijiiro:renda-lower-bg into main
Reviewed-on: Yonokid/YataiDONNijiiro#12
2026-09-09 17:13:14 +02:00
Yonokid eb10ba2c5f Merge branch 'main' into renda-lower-bg 2026-09-09 17:12:09 +02:00
Yonokid 9b08a5d4df Merge pull request 'Soul-max crowd: replay the per-group movie instead of a flat overlay' (#10) from GanYiZhong/YataiDONNijiiro:fever-crowd-anim into main
Reviewed-on: Yonokid/YataiDONNijiiro#10
2026-09-09 17:10:35 +02:00
Yonokid 69c091d8c6 Merge branch 'main' into fever-crowd-anim 2026-09-09 17:09:06 +02:00
Yonokid 254c528928 Merge pull request 'dan doors: tear down outside SONG_SELECT / DAN_SELECT' (#9) from GanYiZhong/YataiDONNijiiro:dan-doors-teardown into main
Reviewed-on: Yonokid/YataiDONNijiiro#9
2026-09-09 17:08:54 +02:00
Yonokid 87b52c9ffc Merge branch 'main' into dan-doors-teardown 2026-09-09 17:08:05 +02:00
Yonokid 839851882f Merge branch 'GanYiZhong-hud-nijiiro-modifiers' 2026-09-09 11:07:43 -04:00
Yonokid 16503ae066 Merge pull request 'entry: centre the credit-row text, white outline on the 1P/2P labels' (#7) from GanYiZhong/YataiDONNijiiro:entry-credit-text into main
Reviewed-on: Yonokid/YataiDONNijiiro#7
2026-09-09 17:06:08 +02:00
Yonokid 2af98a9a81 Merge pull request 'song select: drop the placeholder NEIRO frame under the return button' (#6) from GanYiZhong/YataiDONNijiiro:diffselect-no-neiro-frame into main
Reviewed-on: Yonokid/YataiDONNijiiro#6
2026-09-09 17:05:55 +02:00
TaikoZhongandClaude Fable 5.1 41c27b11f4 Soul-max crowd: step at the song's beat like the original
The original re-times this movie to the song (the same frame sync the dancers
use): the 40-frame bob is one beat, so 60 fps only at 90 BPM.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 15:12:14 +08:00
TaikoZhongandClaude Fable 5.1 4196e7e0f5 Soul-max crowd: step at 60 Hz
Checked against the original: the crowd bobs at half the speed the 120 Hz
step gave it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 13:37:18 +08:00
TaikoZhongandClaude Fable 5.1 f75abf6107 Result: 2P backdrop is red on the left and cyan on the right
The double-play result plate was baked from the wrong atlas layer, so it came
out orange / teal with the header band burnt in. Rebuilt from the original's
two sky halves (the left one placed mirrored) and the header band is now drawn
by the layer code, the same way the 1P backdrop draws it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 12:01:49 +08:00
TaikoZhongandClaude Fable 5.1 166174865d Roll effect: 60 Hz and a pool of ten
Checked against the original: the pieces cross at half the speed the 120 Hz
step gave them, and only about ten are ever live -- the oldest is replaced as
soon as an eleventh starts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 11:35:53 +08:00
TaikoZhongandClaude Fable 5.1 d9869cfde0 Roll effect: fly over the lower backdrop along the original paths
The birds / shuriken / arrows spawned in the top-left corner and swept across
the top band. The original spawns them over the lower backdrop (x 6..1100,
y 540..1020), behind the dancers, and each movie has its own path: birds and
arrows rise to the right, shuriken fly level and spin. Replayed at 120 Hz for
120 frames, same 25-slot pool as before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 11:26:55 +08:00
TaikoZhongandClaude Fable 5.1 d56bdad922 Soul-max crowd: step at 120 Hz and paint it over the band
The original advances the movie at 120 Hz, so the bob ran at half speed, and it
paints the crowd after the bottom band, not under it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 11:05:07 +08:00
TaikoZhongandClaude Fable 5.1 6e583787a0 Soul-max crowd: draw from the two crowds the original actually uses
The original's random pool only holds fever_effect1 and fever_effect2;
fever_effect0 is a single figure parked off-screen, so picking it showed an
empty crowd at 魂 max. Drop it and pick from the two real crowds.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 10:55:21 +08:00
TaikoZhongandClaude Fable 5.1 1b74eb9c99 Soul-max crowd: replay the per-group movie instead of a flat overlay
The 魂 max crowd was two flattened PNGs, so every figure sat at one fixed
position, the turtle/shiba groups lost their depth order, and nothing moved.
The crowd is now data-driven: one texture per crowd group
(background/fevera_N) plus a per-frame display list
(bg_data/fever_anim/f_N.lua) covering the rise, the loop and the fall, replayed
by bg_objects/fever_anim.lua at 60 fps. Every group bobs and squashes on its
own phase and layers exactly as authored; the base of the crowd lands on the
band. Three crowds are shipped; the old flat overlays stay as a fallback for
skins without the data.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 09:48:44 +08:00
TaikoZhongandClaude Fable 5.1 972bea88be dan doors: tear the rig down when the screen is not SONG_SELECT/DAN_SELECT
Backing out of DAN_SELECT straight to TITLE skipped the song-select teardown,
so the shut doors stayed painted over the title screen.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 08:48:57 +08:00
TaikoZhongandClaude Fable 5.1 eff95cd28e song select: per-value speed badges in the option panel
The はやさ row showed the same badge for every value; use the cabinet's
one-badge-per-speed set (x1.1 .. x1.9, x2, x2.5, x3, x3.5, x4).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 08:30:29 +08:00
TaikoZhongandClaude Fable 5.1 ae9fba1206 game HUD: cabinet option badges on the 3x2 slot grid
The in-game modifier badges were inherited from the base skin (2x2, three
coarse speed tiers). Ship the cabinet badge art (one per speed x1.1..x4,
doron, abekobe, kimagure, detarame) and declare the cabinet slot grid
(3 columns x 2 rows, 44 px pitch, first slot at 170,77) as mod_badge_grid.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 07:34:58 +08:00
TaikoZhongandClaude Fable 5.1 a90ca40ea9 entry: centre the credit-row text and give the 1P/2P labels their white outline
The 1人プレイ / 2人プレイ labels and the 太鼓をたたいてスタート! prompt sat about
10 px above the middle of their yellow pills; the labels also lacked the
cabinet's white outline (they were drawn black on black).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 06:25:28 +08:00
76 changed files with 828 additions and 113 deletions

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

+66
View File
@@ -0,0 +1,66 @@
{
"s1": {
"x": 0,
"y": 0
},
"s3": {
"x": 0,
"y": 0
},
"s5": {
"x": 0,
"y": 0
},
"s7": {
"x": 0,
"y": 0
},
"s9": {
"x": 0,
"y": 0
},
"s11": {
"x": 0,
"y": 0
},
"s13": {
"x": 0,
"y": 0
},
"s15": {
"x": 0,
"y": 0
},
"s17": {
"x": 0,
"y": 0
},
"s19": {
"x": 0,
"y": 0
},
"s21": {
"x": 0,
"y": 0
},
"s23": {
"x": 0,
"y": 0
},
"s25": {
"x": 0,
"y": 0
},
"s28": {
"x": 0,
"y": 0
},
"s31": {
"x": 0,
"y": 0
},
"s34": {
"x": 0,
"y": 0
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

+50
View File
@@ -0,0 +1,50 @@
{
"s1": {
"x": 0,
"y": 0
},
"s3": {
"x": 0,
"y": 0
},
"s5": {
"x": 0,
"y": 0
},
"s7": {
"x": 0,
"y": 0
},
"s10": {
"x": 0,
"y": 0
},
"s12": {
"x": 0,
"y": 0
},
"s15": {
"x": 0,
"y": 0
},
"s17": {
"x": 0,
"y": 0
},
"s20": {
"x": 0,
"y": 0
},
"s22": {
"x": 0,
"y": 0
},
"s25": {
"x": 0,
"y": 0
},
"s27": {
"x": 0,
"y": 0
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+72
View File
@@ -191,5 +191,77 @@
"mod_shinuchi": {
"x": 0,
"y": 0
},
"mod_doron": {
"x": 0,
"y": 0
},
"mod_abekobe": {
"x": 0,
"y": 0
},
"mod_detarame": {
"x": 0,
"y": 0
},
"mod_kimagure": {
"x": 0,
"y": 0
},
"mod_speed_x1_1": {
"x": 0,
"y": 0
},
"mod_speed_x1_2": {
"x": 0,
"y": 0
},
"mod_speed_x1_3": {
"x": 0,
"y": 0
},
"mod_speed_x1_4": {
"x": 0,
"y": 0
},
"mod_speed_x1_5": {
"x": 0,
"y": 0
},
"mod_speed_x1_6": {
"x": 0,
"y": 0
},
"mod_speed_x1_7": {
"x": 0,
"y": 0
},
"mod_speed_x1_8": {
"x": 0,
"y": 0
},
"mod_speed_x1_9": {
"x": 0,
"y": 0
},
"mod_speed_x2": {
"x": 0,
"y": 0
},
"mod_speed_x2_5": {
"x": 0,
"y": 0
},
"mod_speed_x3": {
"x": 0,
"y": 0
},
"mod_speed_x3_5": {
"x": 0,
"y": 0
},
"mod_speed_x4": {
"x": 0,
"y": 0
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 KiB

After

Width:  |  Height:  |  Size: 392 KiB

+7
View File
@@ -544,6 +544,13 @@
},
"gauge_cells": {
"x": 50
},
"mod_badge_grid": {
"x": 170,
"y": 77,
"width": 44,
"height": 44,
"font_size": 3
},
"gauge_hit_effect_note": {
"x": 1738,
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+57 -1
View File
@@ -66,5 +66,61 @@
"mod_detarame": {
"x": 165,
"y": 1174
},
"mod_speed_x1_1": {
"x": 165,
"y": 1174
},
"mod_speed_x1_2": {
"x": 165,
"y": 1174
},
"mod_speed_x1_3": {
"x": 165,
"y": 1174
},
"mod_speed_x1_4": {
"x": 165,
"y": 1174
},
"mod_speed_x1_5": {
"x": 165,
"y": 1174
},
"mod_speed_x1_6": {
"x": 165,
"y": 1174
},
"mod_speed_x1_7": {
"x": 165,
"y": 1174
},
"mod_speed_x1_8": {
"x": 165,
"y": 1174
},
"mod_speed_x1_9": {
"x": 165,
"y": 1174
},
"mod_speed_x2": {
"x": 165,
"y": 1174
},
"mod_speed_x2_5": {
"x": 165,
"y": 1174
},
"mod_speed_x3": {
"x": 165,
"y": 1174
},
"mod_speed_x3_5": {
"x": 165,
"y": 1174
},
"mod_speed_x4": {
"x": 165,
"y": 1174
}
}
}
+3 -2
View File
@@ -112,7 +112,7 @@ function Background.new(player_num, bpm, scene_preset)
self.donbg = DonBG.create(player_num, "background")
self.bg_normal = BGNormal.create(math.random(0, 4), "background")
self.bg_fever = BGFever.create(math.random(0, 3), "background")
self.fever = Fever.create(math.random(0, 3), bpm, "background")
self.fever = Fever.create(math.random(0, Fever.variant_count("background") - 1), bpm, "background")
self.dancer = Dancer.create(math.random(0, 20), bpm, "background", max_dancers)
self.footer = Footer.new("background", math.random(0, 2))
end
@@ -379,8 +379,9 @@ function Background:draw_back()
-- band does not clip them.
-- ROUND 52: gate on the object's own visibility (covers the exit
-- ramp), not the raw is_rainbow flag.
if self.fever:is_visible() then self.fever:draw() end
-- The original paints the band (bg_dai) first and the crowd over it.
self.footer:draw()
if self.fever:is_visible() then self.fever:draw() end
end
self.chibi:draw()
end
@@ -0,0 +1,153 @@
-- GENERATED by scratchpad/lyric/fever_export.py from enso/fever/fever_effect1.nulm -- do not hand-edit.
-- 1920x540 stage placed at screen y 540. frames[f+1] = {{shape, tx, ty, sx, sy, rot_deg, alpha}, ...}
-- shapes[shape] = {w, h, ox, oy}: png size and where the shape origin sits inside it.
return {
nframes = 126,
labels = {wait = 0, normal_fever = 5, fever = 45, fever_normal = 85},
shapes = {
[1] = {148, 152, 198, 114},
[3] = {148, 152, -25, 117},
[5] = {206, 175, 4, 129},
[7] = {206, 175, 227, 127},
[9] = {800, 760, 0, 764},
[11] = {800, 760, 804, 764},
[13] = {800, 760, 0, 764},
[15] = {800, 760, 804, 764},
[17] = {148, 152, 198, 114},
[19] = {148, 152, -25, 117},
[21] = {206, 175, 4, 129},
[23] = {206, 175, 227, 126},
[25] = {148, 152, 198, 114},
[28] = {148, 152, -25, 117},
[31] = {206, 175, 4, 129},
[34] = {206, 175, 227, 127},
},
frames = {
{{1,153.85,734.6,1,1,0,0},{3,1795,754.6,1,1,0,0},{5,1248.2,743.1,1,1,0,0},{7,650.25,743.1,1,1,0,0},{9,-124,1210,1,1,0,0},{11,2020,1211,1,1,0,0}},
{{1,153.85,734.6,1,1,0,0},{3,1795,754.6,1,1,0,0},{5,1248.2,743.1,1,1,0,0},{7,650.25,743.1,1,1,0,0},{9,-124,1210,1,1,0,0},{11,2020,1211,1,1,0,0}},
{{1,153.85,734.6,1,1,0,0},{3,1795,754.6,1,1,0,0},{5,1248.2,743.1,1,1,0,0},{7,650.25,743.1,1,1,0,0},{9,-124,1210,1,1,0,0},{11,2020,1211,1,1,0,0}},
{{1,153.85,734.6,1,1,0,0},{3,1795,754.6,1,1,0,0},{5,1248.2,743.1,1,1,0,0},{7,650.25,743.1,1,1,0,0},{9,-124,1210,1,1,0,0},{11,2020,1211,1,1,0,0}},
{{1,153.85,734.6,1,1,0,0},{3,1795,754.6,1,1,0,0},{5,1248.2,743.1,1,1,0,0},{7,650.25,743.1,1,1,0,0},{9,-124,1210,1,1,0,0},{11,2020,1211,1,1,0,0}},
{{1,153.85,756.6,1,1,0,1},{3,1795,756,1,1,0,1},{5,1248.2,745,1,1,0,1},{7,650.25,745,1,1,0,1},{13,-124,1210,1,1,0,1},{15,2020,1211,1,1,0,1}},
{{1,153.85,704.5,1,1,0,1},{3,1795,703.95,1,1,0,1},{5,1248.2,690.7,1,1,0,1},{7,650.25,690.7,1,1,0,1},{13,-124,1168.6,1,1,0,1},{15,2020,1169.6,1,1,0,1}},
{{1,153.85,655.2,1,1,0,1},{3,1795,654.7,1,1,0,1},{5,1248.2,639.3,1,1,0,1},{7,650.25,639.3,1,1,0,1},{13,-124,1129.4,1,1,0,1},{15,2020,1130.4,1,1,0,1}},
{{1,153.85,608.7,1,1,0,1},{3,1795,608.3,1,1,0,1},{5,1248.2,590.85,1,1,0,1},{7,650.25,590.85,1,1,0,1},{13,-124,1092.5,1,1,0,1},{15,2020,1093.5,1,1,0,1}},
{{1,153.85,565.05,1,1,0,1},{3,1795,564.7,1,1,0,1},{5,1248.2,545.35,1,1,0,1},{7,650.25,545.35,1,1,0,1},{13,-124,1057.8,1,1,0,1},{15,2020,1058.8,1,1,0,1}},
{{1,153.85,524.2,1,1,0,1},{3,1795,523.9,1,1,0,1},{5,1248.2,502.75,1,1,0,1},{7,650.25,502.75,1,1,0,1},{13,-124,1025.3,1,1,0,1},{15,2020,1026.3,1,1,0,1}},
{{1,153.85,486.2,1,1,0,1},{3,1795,485.9,1,1,0,1},{5,1248.2,463.1,1,1,0,1},{7,650.25,463.1,1,1,0,1},{13,-124,995.15,1,1,0,1},{15,2020,996.15,1,1,0,1}},
{{1,153.85,450.95,1,1,0,1},{3,1795,450.75,1,1,0,1},{5,1248.2,426.4,1,1,0,1},{7,650.25,426.4,1,1,0,1},{13,-124,967.15,1,1,0,1},{15,2020,968.15,1,1,0,1}},
{{1,153.85,418.55,1,1,0,1},{3,1795,418.35,1,1,0,1},{5,1248.2,392.65,1,1,0,1},{7,650.25,392.65,1,1,0,1},{13,-124,941.4,1,1,0,1},{15,2020,942.4,1,1,0,1}},
{{1,153.85,389,1,1,0,1},{3,1795,388.85,1,1,0,1},{5,1248.2,361.8,1,1,0,1},{7,650.25,361.8,1,1,0,1},{13,-124,917.9,1,1,0,1},{15,2020,918.9,1,1,0,1}},
{{1,153.85,362.25,1,1,0,1},{3,1795,362.1,1,1,0,1},{5,1248.2,333.9,1,1,0,1},{7,650.25,333.9,1,1,0,1},{13,-124,896.65,1,1,0,1},{15,2020,897.65,1,1,0,1}},
{{1,153.85,338.3,1,1,0,1},{3,1795,338.2,1,1,0,1},{5,1248.2,308.95,1,1,0,1},{7,650.25,308.95,1,1,0,1},{13,-124,877.6,1,1,0,1},{15,2020,878.6,1,1,0,1}},
{{1,153.85,317.15,1,1,0,1},{3,1795,317.1,1,1,0,1},{5,1248.2,286.95,1,1,0,1},{7,650.25,286.95,1,1,0,1},{13,-124,860.85,1,1,0,1},{15,2020,861.85,1,1,0,1}},
{{1,153.85,298.85,1,1,0,1},{3,1795,298.8,1,1,0,1},{5,1248.2,267.85,1,1,0,1},{7,650.25,267.85,1,1,0,1},{13,-124,846.3,1,1,0,1},{15,2020,847.3,1,1,0,1}},
{{1,153.85,283.35,1,1,0,1},{3,1795,283.3,1,1,0,1},{5,1248.2,251.7,1,1,0,1},{7,650.25,251.7,1,1,0,1},{13,-124,834,1,1,0,1},{15,2020,835,1,1,0,1}},
{{1,153.85,270.7,1,1,0,1},{3,1795,270.65,1,1,0,1},{5,1248.2,238.5,1,1,0,1},{7,650.25,238.5,1,1,0,1},{13,-124,823.9,1,1,0,1},{15,2020,824.9,1,1,0,1}},
{{1,153.85,260.85,1,1,0,1},{3,1795,260.8,1,1,0,1},{5,1248.2,228.2,1,1,0,1},{7,650.25,228.2,1,1,0,1},{13,-124,816.05,1,1,0,1},{15,2020,817.05,1,1,0,1}},
{{1,153.85,253.8,1,1,0,1},{3,1795,253.8,1,1,0,1},{5,1248.2,220.85,1,1,0,1},{7,650.25,220.85,1,1,0,1},{13,-124,810.5,1,1,0,1},{15,2020,811.5,1,1,0,1}},
{{1,153.85,249.55,1,1,0,1},{3,1795,249.55,1,1,0,1},{5,1248.2,216.45,1,1,0,1},{7,650.25,216.45,1,1,0,1},{13,-124,807.1,1,1,0,1},{15,2020,808.1,1,1,0,1}},
{{17,153.85,248.15,1,1,0,1},{19,1795,248.15,1,1,0,1},{21,1248.2,215,1,1,0,1},{23,650.25,215,1,1,0,1},{13,-124,806,1,1,0,1},{15,2020,807,1,1,0,1}},
{{17,153.85,248.55,1,1,0,1},{19,1795,248.55,1,1,0,1},{21,1248.2,219.2,1,1,0,1},{23,650.25,219.2,1,1,0,1},{13,-124,806.15,1,1,0,1},{15,2020,807.15,1,1,0,1}},
{{17,153.85,249.65,1,1,0,1},{19,1795,249.65,1,1,0,1},{21,1248.2,223.4,1,1,0,1},{23,650.25,223.4,1,1,0,1},{13,-124,806.55,1,1,0,1},{15,2020,807.55,1,1,0,1}},
{{17,153.85,251.55,1,1,0,1},{19,1795,251.55,1,1,0,1},{21,1248.2,227.6,1,1,0,1},{23,650.25,227.6,1,1,0,1},{13,-124,807.25,1,1,0,1},{15,2020,808.25,1,1,0,1}},
{{17,153.85,254.15,1,1,0,1},{19,1795,254.15,1,1,0,1},{21,1248.2,231.8,1,1,0,1},{23,650.25,231.8,1,1,0,1},{13,-124,808.2,1,1,0,1},{15,2020,809.2,1,1,0,1}},
{{17,153.85,257.55,1,1,0,1},{19,1795,257.55,1,1,0,1},{21,1248.2,236,1,1,0,1},{23,650.25,236,1,1,0,1},{13,-124,809.45,1,1,0,1},{15,2020,810.45,1,1,0,1}},
{{17,153.85,261.7,1,1,0,1},{19,1795,261.7,1,1,0,1},{21,1248.2,240.2,1,1,0,1},{23,650.25,240.2,1,1,0,1},{13,-124,810.95,1,1,0,1},{15,2020,811.95,1,1,0,1}},
{{17,153.85,266.6,1,1,0,1},{19,1795,266.6,1,1,0,1},{21,1248.2,244.4,1,1,0,1},{23,650.25,244.4,1,1,0,1},{13,-124,812.75,1,1,0,1},{15,2020,813.75,1,1,0,1}},
{{17,153.85,272.2,1,1,0,1},{19,1795,272.2,1,1,0,1},{21,1248.2,248.6,1,1,0,1},{23,650.25,248.6,1,1,0,1},{13,-124,814.8,1,1,0,1},{15,2020,815.8,1,1,0,1}},
{{17,153.85,278.6,1,1,0,1},{19,1795,278.6,1,1,0,1},{21,1248.2,252.8,1,1,0,1},{23,650.25,252.8,1,1,0,1},{13,-124,817.15,1,1,0,1},{15,2020,818.15,1,1,0,1}},
{{17,153.85,285.75,1,1,0,1},{19,1795,285.75,1,1,0,1},{21,1248.2,257,1,1,0,1},{23,650.25,257,1,1,0,1},{13,-124,819.75,1,1,0,1},{15,2020,820.75,1,1,0,1}},
{{17,153.85,293.65,1,1,0,1},{19,1795,293.65,1,1,0,1},{21,1248.2,261.2,1,1,0,1},{23,650.25,261.2,1,1,0,1},{13,-124,822.65,1,1,0,1},{15,2020,823.65,1,1,0,1}},
{{17,153.85,302.3,1,1,0,1},{19,1795,302.3,1,1,0,1},{21,1248.2,265.4,1,1,0,1},{23,650.25,265.4,1,1,0,1},{13,-124,825.8,1,1,0,1},{15,2020,826.8,1,1,0,1}},
{{17,153.85,311.7,1,1,0,1},{19,1795,311.7,1,1,0,1},{21,1248.2,269.6,1,1,0,1},{23,650.25,269.6,1,1,0,1},{13,-124,829.25,1,1,0,1},{15,2020,830.25,1,1,0,1}},
{{17,153.85,321.85,1,1,0,1},{19,1795,321.85,1,1,0,1},{21,1248.2,273.8,1,1,0,1},{23,650.25,273.8,1,1,0,1},{13,-124,832.95,1,1,0,1},{15,2020,833.95,1,1,0,1}},
{{17,153.85,332.8,1,1,0,1},{19,1795,332.8,1,1,0,1},{21,1248.2,278,1,1,0,1},{23,650.25,278,1,1,0,1},{13,-124,836.95,1,1,0,1},{15,2020,837.95,1,1,0,1}},
{{17,153.85,344.45,1,1,0,1},{19,1795,344.45,1,1,0,1},{21,1248.2,282.2,1,1,0,1},{23,650.25,282.2,1,1,0,1},{13,-124,841.2,1,1,0,1},{15,2020,842.2,1,1,0,1}},
{{17,153.85,356.85,1,1,0,1},{19,1795,356.85,1,1,0,1},{21,1248.2,286.4,1,1,0,1},{23,650.25,286.4,1,1,0,1},{13,-124,845.75,1,1,0,1},{15,2020,846.75,1,1,0,1}},
{{17,153.85,370,1,1,0,1},{19,1795,370,1,1,0,1},{21,1248.2,290.6,1,1,0,1},{23,650.25,290.6,1,1,0,1},{13,-124,850.55,1,1,0,1},{15,2020,851.55,1,1,0,1}},
{{17,153.85,383.95,1,1,0,1},{19,1795,383.95,1,1,0,1},{21,1248.2,294.8,1,1,0,1},{23,650.25,294.8,1,1,0,1},{13,-124,855.65,1,1,0,1},{15,2020,856.65,1,1,0,1}},
{{1,153.85,398.6,1,1,0,1},{3,1795,398.6,1,1,0,1},{5,1248.2,299,1,1,0,1},{7,650.25,299,1,1,0,1},{9,-124,861,1,1,0,1},{11,2020,862,1,1,0,1}},
{{25,150,455,1,1,0,1},{28,1795,450,1,1,0,1},{31,1248,413,1,1,0,1},{7,650,373,1,1,0,1},{13,-124,861,1,1,0,1},{15,2020,862,1,1,0,1}},
{{25,150,440.5,1,0.995,0,1},{28,1795,435.9,1,0.995,0,1},{31,1248,398.1,1,1,0,1},{7,650,360.45,1,1,0,1},{13,-124,851.8,1,1,0,1},{15,2020,852.8,1,1,0,1}},
{{25,150,426.6,1,0.989,0,1},{28,1795,422.35,1,0.989,0,1},{31,1248,383.8,1,1,0,1},{7,650,348.4,1,1,0,1},{13,-124,843.05,1,1,0,1},{15,2020,844.05,1,1,0,1}},
{{25,150,413.25,1,0.984,0,1},{28,1795,409.4,1,0.984,0,1},{31,1248,370.15,1,1,0,1},{7,650,336.9,1,1,0,1},{13,-124,834.8,1,1,0,1},{15,2020,835.8,1,1,0,1}},
{{25,150,400.55,1,0.979,0,1},{28,1795,397,1,0.979,0,1},{31,1248,357.05,1,1,0,1},{7,650,325.9,1,1,0,1},{13,-124,827.1,1,1,0,1},{15,2020,828.1,1,1,0,1}},
{{25,150,388.4,1,0.974,0,1},{28,1795,385.2,1,0.974,0,1},{31,1248,344.6,1,1,0,1},{7,650,315.4,1,1,0,1},{13,-124,819.85,1,1,0,1},{15,2020,820.85,1,1,0,1}},
{{1,150,376.85,1,0.968,0,1},{3,1795,373.95,1,0.968,0,1},{5,1248,332.75,1,1,0,1},{23,650,305.4,1,1,0,1},{13,-124,813.15,1,1,0,1},{15,2020,814.15,1,1,0,1}},
{{1,150,365.9,1,0.968,0,1},{3,1795,363.3,1,0.968,0,1},{5,1248,321.5,1,1,0,1},{23,650,295.95,1,1,0,1},{13,-124,806.9,1,1,0,1},{15,2020,807.9,1,1,0,1}},
{{1,150,355.55,1,0.968,0,1},{3,1795,353.25,1,0.968,0,1},{5,1248,310.85,1,1,0,1},{23,650,287,1,1,0,1},{13,-124,801.15,1,1,0,1},{15,2020,802.15,1,1,0,1}},
{{1,150,345.75,1,0.968,0,1},{3,1795,343.75,1,0.968,0,1},{5,1248,300.8,1,1,0,1},{23,650,278.55,1,1,0,1},{13,-124,795.95,1,1,0,1},{15,2020,796.95,1,1,0,1}},
{{1,150,336.6,1,0.968,0,1},{3,1795,334.8,1,0.968,0,1},{5,1248,291.4,1,1,0,1},{23,650,270.6,1,1,0,1},{13,-124,791.2,1,1,0,1},{15,2020,792.2,1,1,0,1}},
{{1,150,328,1,0.968,0,1},{3,1795,326.45,1,0.968,0,1},{5,1248,282.6,1,1,0,1},{23,650,263.2,1,1,0,1},{13,-124,786.95,1,1,0,1},{15,2020,787.95,1,1,0,1}},
{{1,150,320,1,0.968,0,1},{3,1795,318.65,1,0.968,0,1},{5,1248,274.4,1,1,0,1},{23,650,256.25,1,1,0,1},{13,-124,783.2,1,1,0,1},{15,2020,784.2,1,1,0,1}},
{{1,150,312.6,1,0.968,0,1},{3,1795,311.45,1,0.968,0,1},{5,1248,266.75,1,1,0,1},{23,650,249.85,1,1,0,1},{13,-124,780,1,1,0,1},{15,2020,781,1,1,0,1}},
{{1,150,305.8,1,0.968,0,1},{3,1795,304.85,1,0.968,0,1},{5,1248,259.8,1,1,0,1},{23,650,244,1,1,0,1},{13,-124,777.25,1,1,0,1},{15,2020,778.25,1,1,0,1}},
{{1,150,299.6,1,0.968,0,1},{3,1795,298.8,1,0.968,0,1},{5,1248,253.4,1,1,0,1},{23,650,238.6,1,1,0,1},{13,-124,775,1,1,0,1},{15,2020,776,1,1,0,1}},
{{1,150,293.95,1,0.968,0,1},{3,1795,293.35,1,0.968,0,1},{5,1248,247.6,1,1,0,1},{23,650,233.75,1,1,0,1},{13,-124,773.25,1,1,0,1},{15,2020,774.25,1,1,0,1}},
{{1,150,288.95,1,0.968,0,1},{3,1795,288.45,1,0.968,0,1},{5,1248,242.45,1,1,0,1},{23,650,229.4,1,1,0,1},{13,-124,772,1,1,0,1},{15,2020,773,1,1,0,1}},
{{1,150,284.5,1,0.968,0,1},{3,1795,284.1,1,0.968,0,1},{5,1248,237.9,1,1,0,1},{23,650,225.55,1,1,0,1},{13,-124,771.25,1,1,0,1},{15,2020,772.25,1,1,0,1}},
{{1,150,280.65,1,0.968,0,1},{3,1795,280.35,1,0.968,0,1},{5,1248,233.95,1,1,0,1},{23,650,222.2,1,1,0,1},{13,-124,771,1,1,0,1},{15,2020,772,1,1,0,1}},
{{1,150,277.4,1,0.968,0,1},{3,1795,277.2,1,0.968,0,1},{5,1248,230.6,1,1,0,1},{23,650,219.4,1,1,0,1},{13,-124,771.4,1,1,0,1},{15,2020,772.4,1,1,0,1}},
{{1,150,274.75,1,0.968,0,1},{3,1795,274.6,1,0.968,0,1},{5,1248,227.85,1,1,0,1},{23,650,217.1,1,1,0,1},{13,-124,772.5,1,1,0,1},{15,2020,773.5,1,1,0,1}},
{{1,150,272.65,1,0.968,0,1},{3,1795,272.6,1,0.968,0,1},{5,1248,225.75,1,1,0,1},{23,650,215.3,1,1,0,1},{13,-124,774.45,1,1,0,1},{15,2020,775.45,1,1,0,1}},
{{1,150,271.2,1,0.968,0,1},{3,1795,271.15,1,0.968,0,1},{5,1248,224.2,1,1,0,1},{23,650,214,1,1,0,1},{13,-124,777.1,1,1,0,1},{15,2020,778.1,1,1,0,1}},
{{1,150,270.3,1,0.968,0,1},{3,1795,270.3,1,0.968,0,1},{5,1248,223.3,1,1,0,1},{23,650,213.25,1,1,0,1},{13,-124,780.5,1,1,0,1},{15,2020,781.5,1,1,0,1}},
{{25,150,270,1,0.968,0,1},{28,1795,270,1,0.968,0,1},{31,1248,223,1,1,0,1},{23,650,213,1,1,0,1},{13,-124,784.7,1,1,0,1},{15,2020,785.7,1,1,0,1}},
{{25,150,270.95,1,0.968,0,1},{28,1795,270.9,1,0.968,0,1},{31,1248,224.05,1,1,0,1},{23,650,213.85,1,1,0,1},{13,-124,789.65,1,1,0,1},{15,2020,790.65,1,1,0,1}},
{{25,150,273.75,1,0.968,0,1},{28,1795,273.65,1,0.968,0,1},{31,1248,227.3,1,1,0,1},{23,650,216.45,1,1,0,1},{13,-124,795.35,1,1,0,1},{15,2020,796.35,1,1,0,1}},
{{25,150,278.5,1,0.968,0,1},{28,1795,278.25,1,0.968,0,1},{31,1248,232.65,1,1,0,1},{23,650,220.8,1,1,0,1},{9,-124,801.85,1,1,0,1},{11,2020,802.85,1,1,0,1}},
{{25,150,285.1,1,0.968,0,1},{28,1795,284.7,1,0.968,0,1},{31,1248,240.15,1,1,0,1},{23,650,226.9,1,1,0,1},{9,-124,809.05,1,1,0,1},{11,2020,810.05,1,1,0,1}},
{{25,150,293.6,1,0.968,0,1},{28,1795,292.95,1,0.968,0,1},{31,1248,249.8,1,1,0,1},{23,650,234.7,1,1,0,1},{9,-124,817.05,1,1,0,1},{11,2020,818.05,1,1,0,1}},
{{17,150,304,1,0.968,0,1},{19,1795,303.05,1,0.968,0,1},{21,1248,261.55,1,1,0,1},{34,650,244.2,1,1,0,1},{9,-124,825.8,1,1,0,1},{11,2020,826.8,1,1,0,1}},
{{17,150,316.25,1,0.968,0,1},{19,1795,315,1,0.968,0,1},{21,1248,275.5,1,1,0,1},{34,650,255.5,1,1,0,1},{9,-124,835.35,1,1,0,1},{11,2020,836.35,1,1,0,1}},
{{17,150,330.4,1,0.968,0,1},{19,1795,328.75,1,0.968,0,1},{21,1248,291.55,1,1,0,1},{34,650,268.5,1,1,0,1},{9,-124,845.6,1,1,0,1},{11,2020,846.6,1,1,0,1}},
{{17,150,346.45,1,0.968,0,1},{19,1795,344.4,1,0.968,0,1},{21,1248,309.8,1,1,0,1},{34,650,283.25,1,1,0,1},{9,-124,856.65,1,1,0,1},{11,2020,857.65,1,1,0,1}},
{{17,150,364.4,1,0.968,0,1},{19,1795,361.85,1,0.968,0,1},{21,1248,330.15,1,1,0,1},{34,650,299.75,1,1,0,1},{9,-124,868.45,1,1,0,1},{11,2020,869.45,1,1,0,1}},
{{17,150,384.2,1,0.968,0,1},{19,1795,381.1,1,0.968,0,1},{21,1248,352.65,1,1,0,1},{34,650,317.95,1,1,0,1},{9,-124,881,1,1,0,1},{11,2020,882,1,1,0,1}},
{{17,150,405.9,1,0.968,0,1},{19,1795,402.25,1,0.968,0,1},{21,1248,377.3,1,1,0,1},{34,650,337.9,1,1,0,1},{9,-124,876,1,1,0,1},{11,2020,877,1,1,0,1}},
{{17,150,429.5,1,0.968,0,1},{19,1795,425.2,1,0.968,0,1},{21,1248,404.05,1,1,0,1},{34,650,359.6,1,1,0,1},{9,-124,871,1,1,0,1},{11,2020,872,1,1,0,1}},
{{17,150,455,1,0.968,0,1},{19,1795,450,1,0.968,0,1},{31,1248,433,1,1,0,1},{34,650,383,1,1,0,1},{13,-124,866,1,1,0,1},{15,2020,867,1,1,0,1}},
{{25,153.85,404.6,1,0.868,0,1},{28,1795,404.6,1,0.868,0,1},{5,1248.2,343,1,1,0,1},{7,650.25,343,1,1,0,1},{9,-124,836,1,1,0,1},{11,2020,837,1,1,0,1}},
{{25,153.85,381.35,1,0.882,0,1},{28,1795,381.35,1,0.882,0,1},{5,1248.2,327.2,1,1,0,1},{7,650.25,327.2,1,1,0,1},{9,-124,829,1,1,0,1},{11,2020,830,1,1,0,1}},
{{25,153.85,358.05,1,0.895,0,1},{28,1795,358.05,1,0.895,0,1},{5,1248.2,311.4,1,1,0,1},{7,650.25,311.4,1,1,0,1},{9,-124,822,1,1,0,1},{11,2020,823,1,1,0,1}},
{{25,153.85,334.85,1,0.908,0,1},{28,1795,334.85,1,0.908,0,1},{5,1248.2,295.6,1,1,0,1},{7,650.25,295.6,1,1,0,1},{9,-124,815,1,1,0,1},{11,2020,816,1,1,0,1}},
{{25,153.85,311.6,1,0.921,0,1},{28,1795,311.6,1,0.921,0,1},{5,1248.2,279.8,1,1,0,1},{7,650.25,279.8,1,1,0,1},{9,-124,808,1,1,0,1},{11,2020,809,1,1,0,1}},
{{25,153.85,288.35,1,0.934,0,1},{28,1795,288.35,1,0.934,0,1},{5,1248.2,264,1,1,0,1},{7,650.25,264,1,1,0,1},{9,-124,801,1,1,0,1},{11,2020,802,1,1,0,1}},
{{25,153.85,265.15,1,0.947,0,1},{28,1795,265.15,1,0.947,0,1},{5,1248.2,248.2,1,1,0,1},{7,650.25,248.2,1,1,0,1},{9,-124,794,1,1,0,1},{11,2020,795,1,1,0,1}},
{{25,153.85,241.85,1,0.961,0,1},{28,1795,241.85,1,0.961,0,1},{5,1248.2,232.4,1,1,0,1},{7,650.25,232.4,1,1,0,1},{9,-124,787,1,1,0,1},{11,2020,788,1,1,0,1}},
{{25,153.85,218.65,1,0.974,0,1},{28,1795,218.65,1,0.974,0,1},{5,1248.2,216.6,1,1,0,1},{7,650.25,216.6,1,1,0,1},{9,-124,780,1,1,0,1},{11,2020,781,1,1,0,1}},
{{25,153.85,195.35,1,0.987,0,1},{28,1795,195.35,1,0.987,0,1},{5,1248.2,200.8,1,1,0,1},{7,650.25,200.8,1,1,0,1},{9,-124,773,1,1,0,1},{11,2020,774,1,1,0,1}},
{{17,153.85,248.15,1,1,0,1},{19,1795,248.15,1,1,0,1},{21,1248.2,185,1,1,0,1},{23,650.25,185,1,1,0,1},{13,-124,766,1,1,0,1},{15,2020,767,1,1,0,1}},
{{17,153.85,248.7,1,1,0,1},{19,1795,248.7,1,1,0,1},{21,1248.2,185.6,1,1,0,1},{23,650.25,185.6,1,1,0,1},{13,-124,766.55,1,1,0,1},{15,2020,767.55,1,1,0,1}},
{{17,153.85,250.3,1,1,0,1},{19,1795,250.3,1,1,0,1},{21,1248.2,187.4,1,1,0,1},{23,650.25,187.4,1,1,0,1},{13,-124,768.15,1,1,0,1},{15,2020,769.15,1,1,0,1}},
{{17,153.85,253,1,1,0,1},{19,1795,253,1,1,0,1},{21,1248.2,190.4,1,1,0,1},{23,650.25,190.4,1,1,0,1},{13,-124,770.8,1,1,0,1},{15,2020,771.8,1,1,0,1}},
{{17,153.85,256.8,1,1,0,1},{19,1795,256.8,1,1,0,1},{21,1248.2,194.55,1,1,0,1},{23,650.25,194.55,1,1,0,1},{13,-124,774.55,1,1,0,1},{15,2020,775.55,1,1,0,1}},
{{17,153.85,261.65,1,1,0,1},{19,1795,261.65,1,1,0,1},{21,1248.2,199.95,1,1,0,1},{23,650.25,199.95,1,1,0,1},{13,-124,779.35,1,1,0,1},{15,2020,780.35,1,1,0,1}},
{{17,153.85,267.6,1,1,0,1},{19,1795,267.6,1,1,0,1},{21,1248.2,206.5,1,1,0,1},{23,650.25,206.5,1,1,0,1},{13,-124,785.2,1,1,0,1},{15,2020,786.2,1,1,0,1}},
{{17,153.85,274.65,1,1,0,1},{19,1795,274.65,1,1,0,1},{21,1248.2,214.3,1,1,0,1},{23,650.25,214.3,1,1,0,1},{13,-124,792.15,1,1,0,1},{15,2020,793.15,1,1,0,1}},
{{17,153.85,282.75,1,1,0,1},{19,1795,282.75,1,1,0,1},{21,1248.2,223.25,1,1,0,1},{23,650.25,223.25,1,1,0,1},{13,-124,800.15,1,1,0,1},{15,2020,801.15,1,1,0,1}},
{{17,153.85,291.95,1,1,0,1},{19,1795,291.95,1,1,0,1},{21,1248.2,233.4,1,1,0,1},{23,650.25,233.4,1,1,0,1},{13,-124,809.2,1,1,0,1},{15,2020,810.2,1,1,0,1}},
{{17,153.85,302.2,1,1,0,1},{19,1795,302.2,1,1,0,1},{21,1248.2,244.8,1,1,0,1},{23,650.25,244.8,1,1,0,1},{13,-124,819.35,1,1,0,1},{15,2020,820.35,1,1,0,1}},
{{17,153.85,313.55,1,1,0,1},{19,1795,313.55,1,1,0,1},{21,1248.2,257.35,1,1,0,1},{23,650.25,257.35,1,1,0,1},{13,-124,830.55,1,1,0,1},{15,2020,831.55,1,1,0,1}},
{{17,153.85,326,1,1,0,1},{19,1795,326,1,1,0,1},{21,1248.2,271.1,1,1,0,1},{23,650.25,271.1,1,1,0,1},{13,-124,842.8,1,1,0,1},{15,2020,843.8,1,1,0,1}},
{{17,153.85,339.5,1,1,0,1},{19,1795,339.5,1,1,0,1},{21,1248.2,286.05,1,1,0,1},{23,650.25,286.05,1,1,0,1},{13,-124,856.15,1,1,0,1},{15,2020,857.15,1,1,0,1}},
{{17,153.85,354.1,1,1,0,1},{19,1795,354.1,1,1,0,1},{21,1248.2,302.15,1,1,0,1},{23,650.25,302.15,1,1,0,1},{13,-124,870.55,1,1,0,1},{15,2020,871.55,1,1,0,1}},
{{17,153.85,369.75,1,1,0,1},{19,1795,369.75,1,1,0,1},{21,1248.2,319.5,1,1,0,1},{23,650.25,319.5,1,1,0,1},{13,-124,886,1,1,0,1},{15,2020,887,1,1,0,1}},
{{17,153.85,386.5,1,1,0,1},{19,1795,386.5,1,1,0,1},{21,1248.2,338.05,1,1,0,1},{23,650.25,338.05,1,1,0,1},{13,-124,902.55,1,1,0,1},{15,2020,903.55,1,1,0,1}},
{{17,153.85,404.35,1,1,0,1},{19,1795,404.35,1,1,0,1},{21,1248.2,357.75,1,1,0,1},{23,650.25,357.75,1,1,0,1},{13,-124,920.15,1,1,0,1},{15,2020,921.15,1,1,0,1}},
{{17,153.85,423.25,1,1,0,1},{19,1795,423.25,1,1,0,1},{21,1248.2,378.7,1,1,0,1},{23,650.25,378.7,1,1,0,1},{13,-124,938.8,1,1,0,1},{15,2020,939.8,1,1,0,1}},
{{17,153.85,443.25,1,1,0,1},{19,1795,443.25,1,1,0,1},{21,1248.2,400.8,1,1,0,1},{23,650.25,400.8,1,1,0,1},{13,-124,958.55,1,1,0,1},{15,2020,959.55,1,1,0,1}},
{{17,153.85,464.35,1,1,0,1},{19,1795,464.35,1,1,0,1},{21,1248.2,424.1,1,1,0,1},{23,650.25,424.1,1,1,0,1},{13,-124,979.35,1,1,0,1},{15,2020,980.35,1,1,0,1}},
{{17,153.85,486.5,1,1,0,1},{19,1795,486.5,1,1,0,1},{21,1248.2,448.6,1,1,0,1},{23,650.25,448.6,1,1,0,1},{13,-124,1001.2,1,1,0,1},{15,2020,1002.2,1,1,0,1}},
{{17,153.85,509.75,1,1,0,1},{19,1795,509.75,1,1,0,1},{21,1248.2,474.35,1,1,0,1},{23,650.25,474.35,1,1,0,1},{13,-124,1024.2,1,1,0,1},{15,2020,1025.2,1,1,0,1}},
{{17,153.85,534.05,1,1,0,1},{19,1795,534.05,1,1,0,1},{21,1248.2,501.2,1,1,0,1},{23,650.25,501.2,1,1,0,1},{13,-124,1048.2,1,1,0,1},{15,2020,1049.2,1,1,0,1}},
{{17,153.85,559.5,1,1,0,1},{19,1795,559.5,1,1,0,1},{21,1248.2,529.3,1,1,0,1},{23,650.25,529.3,1,1,0,1},{13,-124,1073.2,1,1,0,1},{15,2020,1074.2,1,1,0,1}},
{{17,153.85,585.95,1,1,0,1},{19,1795,585.95,1,1,0,1},{21,1248.2,558.6,1,1,0,1},{23,650.25,558.6,1,1,0,1},{13,-124,1099.3,1,1,0,1},{15,2020,1100.3,1,1,0,1}},
{{17,153.85,613.55,1,1,0,1},{19,1795,613.55,1,1,0,1},{21,1248.2,589.1,1,1,0,1},{23,650.25,589.1,1,1,0,1},{13,-124,1126.6,1,1,0,1},{15,2020,1127.6,1,1,0,1}},
{{17,153.85,642.15,1,1,0,1},{19,1795,642.15,1,1,0,1},{21,1248.2,620.75,1,1,0,1},{23,650.25,620.75,1,1,0,1},{13,-124,1154.8,1,1,0,1},{15,2020,1155.8,1,1,0,1}},
{{17,153.85,671.9,1,1,0,1},{19,1795,671.9,1,1,0,1},{21,1248.2,653.65,1,1,0,1},{23,650.25,653.65,1,1,0,1},{13,-124,1184.2,1,1,0,1},{15,2020,1185.2,1,1,0,1}},
{{17,153.85,702.7,1,1,0,1},{19,1795,702.7,1,1,0,1},{21,1248.2,687.75,1,1,0,1},{23,650.25,687.75,1,1,0,1},{13,-124,1214.6,1,1,0,1},{15,2020,1215.6,1,1,0,1}},
{{1,153.85,734.6,1,1,0,1},{3,1795,734.6,1,1,0,1},{5,1248.2,723,1,1,0,1},{7,650.25,723,1,1,0,1},{9,-124,1246,1,1,0,1},{11,2020,1247,1,1,0,1}},
},
}
@@ -0,0 +1,148 @@
-- GENERATED by scratchpad/lyric/fever_export.py from enso/fever/fever_effect2.nulm -- do not hand-edit.
-- 1920x540 stage placed at screen y 540. frames[f+1] = {{shape, tx, ty, sx, sy, rot_deg, alpha}, ...}
-- shapes[shape] = {w, h, ox, oy}: png size and where the shape origin sits inside it.
return {
nframes = 125,
labels = {wait = 0, normal_fever = 5, fever = 44, fever_normal = 84},
shapes = {
[1] = {880, 500, 440, 250},
[3] = {880, 500, 440, 250},
[5] = {880, 500, 440, 250},
[7] = {880, 500, 440, 250},
[10] = {200, 160, 100, 80},
[12] = {200, 160, 100, 80},
[15] = {880, 500, 400, 250},
[17] = {880, 500, 400, 230},
[20] = {200, 160, 100, 80},
[22] = {200, 160, 100, 80},
[25] = {200, 160, 100, 80},
[27] = {200, 160, 100, 80},
},
frames = {
{{1,288.05,1076,1,1,0,1},{3,1612.2,1078.2,1,1,0,1},{10,465,1050,1,1,0,1},{15,272.05,1084,1,1,0,1},{17,1614.2,1066.2,1,1,0,1},{20,750,1063,1,1,0,1},{25,1230,1040,1,1,0,1}},
{{1,288.05,1076,1,1,0,1},{3,1612.2,1078.2,1,1,0,1},{10,465,1050,1,1,0,1},{15,272.05,1084,1,1,0,1},{17,1614.2,1066.2,1,1,0,1},{20,750,1063,1,1,0,1},{25,1230,1040,1,1,0,1}},
{{1,288.05,1076,1,1,0,1},{3,1612.2,1078.2,1,1,0,1},{10,465,1050,1,1,0,1},{15,272.05,1084,1,1,0,1},{17,1614.2,1066.2,1,1,0,1},{20,750,1063,1,1,0,1},{25,1230,1040,1,1,0,1}},
{{1,288.05,1076,1,1,0,1},{3,1612.2,1078.2,1,1,0,1},{10,465,1050,1,1,0,1},{15,272.05,1084,1,1,0,1},{17,1614.2,1066.2,1,1,0,1},{20,750,1063,1,1,0,1},{25,1230,1040,1,1,0,1}},
{{1,288.05,1076,1,1,0,1},{3,1612.2,1078.2,1,1,0,1},{10,465,1050,1,1,0,1},{15,272.05,1084,1,1,0,1},{17,1614.2,1066.2,1,1,0,1},{20,750,1063,1,1,0,1},{25,1230,1040,1,1,0,1}},
{{1,288.05,1076,1,1,0,1},{3,1612.2,1078.2,1,1,0,1},{10,465,1050,1,1,0,1},{15,272.05,1084,1,1,0,1},{17,1614.2,1066.2,1,1,0,1},{20,750,1063,1,1,0,1},{25,1230,1040,1,1,0,1}},
{{1,288.05,1005.8,1,1,0,1},{3,1612.2,1008,1,1,0,1},{12,465,979.8,1,1,0,1},{15,272.05,1014.8,1,1,0,1},{17,1614.2,997.05,1,1,0,1},{20,750,992.8,1,1,0,1},{25,1230,969.8,1,1,0,1}},
{{1,288.05,939.35,1,1,0,1},{3,1612.2,941.55,1,1,0,1},{12,465,913.35,1,1,0,1},{15,272.05,949.35,1,1,0,1},{17,1614.2,931.55,1,1,0,1},{20,750,926.35,1,1,0,1},{25,1230,903.35,1,1,0,1}},
{{1,288.05,876.75,1,1,0,1},{3,1612.2,878.95,1,1,0,1},{12,465,850.75,1,1,0,1},{15,272.05,887.65,1,1,0,1},{17,1614.2,869.85,1,1,0,1},{20,750,863.75,1,1,0,1},{25,1230,840.75,1,1,0,1}},
{{1,288.05,817.95,1,1,0,1},{3,1612.2,820.15,1,1,0,1},{12,465,791.95,1,1,0,1},{15,272.05,829.7,1,1,0,1},{17,1614.2,811.9,1,1,0,1},{20,750,804.95,1,1,0,1},{25,1230,781.95,1,1,0,1}},
{{1,288.05,762.9,1,1,0,1},{3,1612.2,765.1,1,1,0,1},{12,465,736.9,1,1,0,1},{15,272.05,775.5,1,1,0,1},{17,1614.2,757.7,1,1,0,1},{20,750,749.9,1,1,0,1},{25,1230,726.9,1,1,0,1}},
{{1,288.05,711.7,1,1,0,1},{3,1612.2,713.9,1,1,0,1},{12,465,685.7,1,1,0,1},{15,272.05,725,1,1,0,1},{17,1614.2,707.2,1,1,0,1},{20,750,698.7,1,1,0,1},{25,1230,675.7,1,1,0,1}},
{{1,288.05,664.25,1,1,0,1},{3,1612.2,666.45,1,1,0,1},{10,465,638.25,1,1,0,1},{15,272.05,678.25,1,1,0,1},{17,1614.2,660.45,1,1,0,1},{20,750,651.25,1,1,0,1},{25,1230,628.25,1,1,0,1}},
{{1,288.05,620.6,1,1,0,1},{3,1612.2,622.8,1,1,0,1},{10,465,594.6,1,1,0,1},{15,272.05,635.25,1,1,0,1},{17,1614.2,617.45,1,1,0,1},{20,750,607.6,1,1,0,1},{25,1230,584.6,1,1,0,1}},
{{1,288.05,580.75,1,1,0,1},{3,1612.2,582.95,1,1,0,1},{10,465,554.75,1,1,0,1},{15,272.05,596,1,1,0,1},{17,1614.2,578.2,1,1,0,1},{20,750,567.75,1,1,0,1},{25,1230,544.75,1,1,0,1}},
{{1,288.05,544.7,1,1,0,1},{3,1612.2,546.9,1,1,0,1},{10,465,518.7,1,1,0,1},{15,272.05,560.45,1,1,0,1},{17,1614.2,542.65,1,1,0,1},{20,750,531.7,1,1,0,1},{25,1230,508.7,1,1,0,1}},
{{1,288.05,512.45,1,1,0,1},{3,1612.2,514.65,1,1,0,1},{10,465,486.45,1,1,0,1},{15,272.05,528.65,1,1,0,1},{17,1614.2,510.85,1,1,0,1},{20,750,499.45,1,1,0,1},{25,1230,476.45,1,1,0,1}},
{{1,288.05,484,1,1,0,1},{3,1612.2,486.2,1,1,0,1},{10,465,458,1,1,0,1},{15,272.05,500.65,1,1,0,1},{17,1614.2,482.85,1,1,0,1},{20,750,471,1,1,0,1},{25,1230,448,1,1,0,1}},
{{1,288.05,459.3,1,1,0,1},{3,1612.2,461.5,1,1,0,1},{12,465,433.3,1,1,0,1},{15,272.05,476.3,1,1,0,1},{17,1614.2,458.5,1,1,0,1},{20,750,446.3,1,1,0,1},{25,1230,423.3,1,1,0,1}},
{{1,288.05,438.45,1,1,0,1},{3,1612.2,440.65,1,1,0,1},{12,465,412.45,1,1,0,1},{15,272.05,455.75,1,1,0,1},{17,1614.2,437.95,1,1,0,1},{20,750,425.45,1,1,0,1},{25,1230,402.45,1,1,0,1}},
{{1,288.05,421.35,1,1,0,1},{3,1612.2,423.55,1,1,0,1},{12,465,395.35,1,1,0,1},{15,272.05,438.9,1,1,0,1},{17,1614.2,421.1,1,1,0,1},{20,750,408.35,1,1,0,1},{25,1230,385.35,1,1,0,1}},
{{1,288.05,408.1,1,1,0,1},{3,1612.2,410.3,1,1,0,1},{12,465,382.1,1,1,0,1},{15,272.05,425.85,1,1,0,1},{17,1614.2,408.05,1,1,0,1},{20,750,395.1,1,1,0,1},{25,1230,372.1,1,1,0,1}},
{{1,288.05,398.6,1,1,0,1},{3,1612.2,400.8,1,1,0,1},{12,465,372.6,1,1,0,1},{15,272.05,416.5,1,1,0,1},{17,1614.2,398.7,1,1,0,1},{20,750,385.6,1,1,0,1},{25,1230,362.6,1,1,0,1}},
{{1,288.05,392.9,1,1,0,1},{3,1612.2,395.1,1,1,0,1},{12,465,366.9,1,1,0,1},{15,272.05,410.85,1,1,0,1},{17,1614.2,393.05,1,1,0,1},{20,750,379.9,1,1,0,1},{25,1230,356.9,1,1,0,1}},
{{1,288.05,391,1,1,0,1},{3,1612.2,393.2,1,1,0,1},{10,465,365,1,1,0,1},{15,272.05,409,1,1,0,1},{17,1614.2,391.2,1,1,0,1},{20,750,378,1,1,0,1},{25,1230,355,1,1,0,1}},
{{1,288.05,391.2,1,1,0,1},{3,1612.2,393.4,1,1,0,1},{10,465,365.2,1,1,0,1},{15,272.05,409.2,1,1,0,1},{17,1614.2,391.4,1,1,0,1},{20,750,378.2,1,1,0,1},{25,1230,355.2,1,1,0,1}},
{{1,288.05,391.85,1,1,0,1},{3,1612.2,394.05,1,1,0,1},{10,465,365.85,1,1,0,1},{15,272.05,409.7,1,1,0,1},{17,1614.2,391.9,1,1,0,1},{20,750,378.85,1,1,0,1},{25,1230,355.85,1,1,0,1}},
{{1,288.05,392.85,1,1,0,1},{3,1612.2,395.05,1,1,0,1},{10,465,366.85,1,1,0,1},{15,272.05,410.6,1,1,0,1},{17,1614.2,392.8,1,1,0,1},{20,750,379.85,1,1,0,1},{25,1230,356.85,1,1,0,1}},
{{5,288.05,394.3,1,1,0,1},{7,1612.2,396.5,1,1,0,1},{10,465,368.3,1,1,0,1},{15,272.05,411.9,1,1,0,1},{17,1614.2,394.1,1,1,0,1},{22,750,381.3,1,1,0,1},{27,1230,358.3,1,1,0,1}},
{{5,288.05,396.2,1,1,0,1},{7,1612.2,398.4,1,1,0,1},{10,465,370.2,1,1,0,1},{15,272.05,413.5,1,1,0,1},{17,1614.2,395.7,1,1,0,1},{22,750,383.2,1,1,0,1},{27,1230,360.2,1,1,0,1}},
{{5,288.05,398.5,1,1,0,1},{7,1612.2,400.7,1,1,0,1},{10,465,372.5,1,1,0,1},{15,272.05,415.5,1,1,0,1},{17,1614.2,397.7,1,1,0,1},{22,750,385.5,1,1,0,1},{27,1230,362.5,1,1,0,1}},
{{5,288.05,401.2,1,1,0,1},{7,1612.2,403.4,1,1,0,1},{10,465,375.2,1,1,0,1},{15,272.05,417.8,1,1,0,1},{17,1614.2,400,1,1,0,1},{22,750,388.2,1,1,0,1},{27,1230,365.2,1,1,0,1}},
{{5,288.05,404.3,1,1,0,1},{7,1612.2,406.5,1,1,0,1},{10,465,378.3,1,1,0,1},{15,272.05,420.5,1,1,0,1},{17,1614.2,402.7,1,1,0,1},{22,750,391.3,1,1,0,1},{27,1230,368.3,1,1,0,1}},
{{5,288.05,407.85,1,1,0,1},{7,1612.2,410.05,1,1,0,1},{10,465,381.85,1,1,0,1},{15,272.05,423.6,1,1,0,1},{17,1614.2,405.8,1,1,0,1},{22,750,394.85,1,1,0,1},{27,1230,371.85,1,1,0,1}},
{{5,288.05,411.8,1,1,0,1},{7,1612.2,414,1,1,0,1},{10,465,385.8,1,1,0,1},{15,272.05,427,1,1,0,1},{17,1614.2,409.2,1,1,0,1},{22,750,398.8,1,1,0,1},{27,1230,375.8,1,1,0,1}},
{{5,288.05,416.15,1,1,0,1},{7,1612.2,418.35,1,1,0,1},{10,465,390.15,1,1,0,1},{15,272.05,430.8,1,1,0,1},{17,1614.2,413,1,1,0,1},{22,750,403.15,1,1,0,1},{27,1230,380.15,1,1,0,1}},
{{5,288.05,420.9,1,1,0,1},{7,1612.2,423.1,1,1,0,1},{10,465,394.9,1,1,0,1},{15,272.05,434.95,1,1,0,1},{17,1614.2,417.15,1,1,0,1},{22,750,407.9,1,1,0,1},{27,1230,384.9,1,1,0,1}},
{{5,288.05,426.1,1,1,0,1},{7,1612.2,428.3,1,1,0,1},{10,465,400.1,1,1,0,1},{15,272.05,439.45,1,1,0,1},{17,1614.2,421.65,1,1,0,1},{22,750,413.1,1,1,0,1},{27,1230,390.1,1,1,0,1}},
{{5,288.05,431.7,1,1,0,1},{7,1612.2,433.9,1,1,0,1},{10,465,405.7,1,1,0,1},{15,272.05,444.3,1,1,0,1},{17,1614.2,426.5,1,1,0,1},{22,750,418.7,1,1,0,1},{27,1230,395.7,1,1,0,1}},
{{1,288.05,437.75,1,1,0,1},{3,1612.2,439.95,1,1,0,1},{10,465,411.75,1,1,0,1},{15,272.05,449.5,1,1,0,1},{17,1614.2,431.7,1,1,0,1},{22,750,424.75,1,1,0,1},{27,1230,401.75,1,1,0,1}},
{{1,288.05,444.2,1,1,0,1},{3,1612.2,446.4,1,1,0,1},{10,465,418.2,1,1,0,1},{15,272.05,455.1,1,1,0,1},{17,1614.2,437.3,1,1,0,1},{20,750,431.2,1,1,0,1},{25,1230,408.2,1,1,0,1}},
{{1,288.05,451.05,1,1,0,1},{3,1612.2,453.25,1,1,0,1},{10,465,425.05,1,1,0,1},{15,272.05,461.05,1,1,0,1},{17,1614.2,443.25,1,1,0,1},{20,750,438.05,1,1,0,1},{25,1230,415.05,1,1,0,1}},
{{1,288.05,458.3,1,1,0,1},{3,1612.2,460.5,1,1,0,1},{10,465,432.3,1,1,0,1},{15,272.05,467.35,1,1,0,1},{17,1614.2,449.55,1,1,0,1},{20,750,445.3,1,1,0,1},{25,1230,422.3,1,1,0,1}},
{{1,288.05,466,1,1,0,1},{3,1612.2,468.2,1,1,0,1},{10,465,440,1,1,0,1},{15,272.05,474,1,1,0,1},{17,1614.2,456.2,1,1,0,1},{20,750,453,1,1,0,1},{25,1230,430,1,1,0,1}},
{{1,288.05,466,1,1,0,1},{3,1612.2,468.2,1,1,0,1},{10,465,440,1,1,0,1},{15,272.05,474,1,1,0,1},{17,1614.2,456.2,1,1,0,1},{20,750,453,1,1,0,1},{25,1230,430,1,1,0,1}},
{{1,288.05,457.8,1,1,0,1},{3,1612.2,460,1,1,0,1},{10,465,433.35,1,1,0,1},{15,272.05,469.9,1,1,0,1},{17,1614.2,452.1,1,1,0,1},{20,750,443.45,1,1,0,1},{25,1230,419.95,1,1,0,1}},
{{1,288.05,450.05,1,1,0,1},{3,1612.2,452.25,1,1,0,1},{12,465,427.05,1,1,0,1},{15,272.05,466,1,1,0,1},{17,1614.2,448.2,1,1,0,1},{20,750,434.45,1,1,0,1},{25,1230,410.45,1,1,0,1}},
{{1,288.05,442.75,1,1,0,1},{3,1612.2,444.95,1,1,0,1},{12,465,421.1,1,1,0,1},{15,272.05,462.35,1,1,0,1},{17,1614.2,444.55,1,1,0,1},{20,750,425.95,1,1,0,1},{25,1230,401.5,1,1,0,1}},
{{1,288.05,435.85,1,1,0,1},{3,1612.2,438.05,1,1,0,1},{12,465,415.5,1,1,0,1},{15,272.05,458.95,1,1,0,1},{17,1614.2,441.15,1,1,0,1},{20,750,417.95,1,1,0,1},{25,1230,393.1,1,1,0,1}},
{{1,288.05,429.45,1,1,0,1},{3,1612.2,431.65,1,1,0,1},{12,465,410.3,1,1,0,1},{15,272.05,455.7,1,1,0,1},{17,1614.2,437.9,1,1,0,1},{20,750,410.5,1,1,0,1},{25,1230,385.2,1,1,0,1}},
{{1,288.05,423.45,1,1,0,1},{3,1612.2,425.65,1,1,0,1},{12,465,405.45,1,1,0,1},{15,272.05,452.75,1,1,0,1},{17,1614.2,434.95,1,1,0,1},{20,750,403.55,1,1,0,1},{25,1230,377.9,1,1,0,1}},
{{1,288.05,417.9,1,1,0,1},{3,1612.2,420.1,1,1,0,1},{12,465,400.95,1,1,0,1},{15,272.05,449.95,1,1,0,1},{17,1614.2,432.15,1,1,0,1},{20,750,397.1,1,1,0,1},{25,1230,371.1,1,1,0,1}},
{{1,288.05,412.8,1,1,0,1},{3,1612.2,415,1,1,0,1},{10,465,396.8,1,1,0,1},{15,272.05,447.4,1,1,0,1},{17,1614.2,429.6,1,1,0,1},{20,750,391.15,1,1,0,1},{25,1230,364.85,1,1,0,1}},
{{1,288.05,408.15,1,1,0,1},{3,1612.2,410.35,1,1,0,1},{10,465,393,1,1,0,1},{15,272.05,445.1,1,1,0,1},{17,1614.2,427.3,1,1,0,1},{20,750,385.75,1,1,0,1},{25,1230,359.15,1,1,0,1}},
{{1,288.05,403.95,1,1,0,1},{3,1612.2,406.15,1,1,0,1},{10,465,389.6,1,1,0,1},{15,272.05,442.95,1,1,0,1},{17,1614.2,425.15,1,1,0,1},{20,750,380.85,1,1,0,1},{25,1230,354,1,1,0,1}},
{{1,288.05,400.2,1,1,0,1},{3,1612.2,402.4,1,1,0,1},{10,465,386.5,1,1,0,1},{15,272.05,441.1,1,1,0,1},{17,1614.2,423.3,1,1,0,1},{20,750,376.5,1,1,0,1},{25,1230,349.35,1,1,0,1}},
{{1,288.05,396.85,1,1,0,1},{3,1612.2,399.05,1,1,0,1},{10,465,383.8,1,1,0,1},{15,272.05,439.45,1,1,0,1},{17,1614.2,421.65,1,1,0,1},{20,750,372.6,1,1,0,1},{25,1230,345.3,1,1,0,1}},
{{1,288.05,394,1,1,0,1},{3,1612.2,396.2,1,1,0,1},{10,465,381.5,1,1,0,1},{15,272.05,438,1,1,0,1},{17,1614.2,420.2,1,1,0,1},{20,750,369.3,1,1,0,1},{25,1230,341.75,1,1,0,1}},
{{1,288.05,391.55,1,1,0,1},{3,1612.2,393.75,1,1,0,1},{12,465,379.5,1,1,0,1},{15,272.05,436.75,1,1,0,1},{17,1614.2,418.95,1,1,0,1},{20,750,366.45,1,1,0,1},{25,1230,338.8,1,1,0,1}},
{{1,288.05,389.55,1,1,0,1},{3,1612.2,391.75,1,1,0,1},{12,465,377.9,1,1,0,1},{15,272.05,435.75,1,1,0,1},{17,1614.2,417.95,1,1,0,1},{20,750,364.1,1,1,0,1},{25,1230,336.35,1,1,0,1}},
{{1,288.05,388,1,1,0,1},{3,1612.2,390.2,1,1,0,1},{12,465,376.6,1,1,0,1},{15,272.05,435,1,1,0,1},{17,1614.2,417.2,1,1,0,1},{20,750,362.3,1,1,0,1},{25,1230,334.45,1,1,0,1}},
{{1,288.05,386.9,1,1,0,1},{3,1612.2,389.1,1,1,0,1},{12,465,375.7,1,1,0,1},{15,272.05,434.45,1,1,0,1},{17,1614.2,416.65,1,1,0,1},{20,750,361.05,1,1,0,1},{25,1230,333.1,1,1,0,1}},
{{1,288.05,386.2,1,1,0,1},{3,1612.2,388.4,1,1,0,1},{12,465,375.2,1,1,0,1},{15,272.05,434.1,1,1,0,1},{17,1614.2,416.3,1,1,0,1},{20,750,360.25,1,1,0,1},{25,1230,332.25,1,1,0,1}},
{{1,288.05,386,1,1,0,1},{3,1612.2,388.2,1,1,0,1},{12,465,375,1,1,0,1},{15,272.05,434,1,1,0,1},{17,1614.2,416.2,1,1,0,1},{20,750,360,1,1,0,1},{25,1230,332,1,1,0,1}},
{{1,288.05,386.35,1,1,0,1},{3,1612.2,388.55,1,1,0,1},{10,465,375.35,1,1,0,1},{15,272.05,434.2,1,1,0,1},{17,1614.2,416.4,1,1,0,1},{20,750,360.35,1,1,0,1},{25,1230,332.45,1,1,0,1}},
{{1,288.05,387.4,1,1,0,1},{3,1612.2,389.6,1,1,0,1},{10,465,376.3,1,1,0,1},{15,272.05,434.85,1,1,0,1},{17,1614.2,417.05,1,1,0,1},{20,750,361.45,1,1,0,1},{25,1230,333.75,1,1,0,1}},
{{1,288.05,389.1,1,1,0,1},{3,1612.2,391.3,1,1,0,1},{10,465,377.95,1,1,0,1},{15,272.05,435.85,1,1,0,1},{17,1614.2,418.05,1,1,0,1},{20,750,363.2,1,1,0,1},{25,1230,335.95,1,1,0,1}},
{{1,288.05,391.55,1,1,0,1},{3,1612.2,393.75,1,1,0,1},{10,465,380.25,1,1,0,1},{15,272.05,437.3,1,1,0,1},{17,1614.2,419.5,1,1,0,1},{20,750,365.7,1,1,0,1},{25,1230,339.05,1,1,0,1}},
{{5,288.05,394.65,1,1,0,1},{7,1612.2,396.85,1,1,0,1},{10,465,383.2,1,1,0,1},{15,272.05,439.2,1,1,0,1},{17,1614.2,421.4,1,1,0,1},{22,750,368.9,1,1,0,1},{27,1230,343,1,1,0,1}},
{{5,288.05,398.45,1,1,0,1},{7,1612.2,400.65,1,1,0,1},{10,465,386.85,1,1,0,1},{15,272.05,441.45,1,1,0,1},{17,1614.2,423.65,1,1,0,1},{22,750,372.85,1,1,0,1},{27,1230,347.8,1,1,0,1}},
{{5,288.05,402.95,1,1,0,1},{7,1612.2,405.15,1,1,0,1},{10,465,391.1,1,1,0,1},{15,272.05,444.15,1,1,0,1},{17,1614.2,426.35,1,1,0,1},{22,750,377.45,1,1,0,1},{27,1230,353.55,1,1,0,1}},
{{5,288.05,408.15,1,1,0,1},{7,1612.2,410.35,1,1,0,1},{10,465,396.05,1,1,0,1},{15,272.05,447.3,1,1,0,1},{17,1614.2,429.5,1,1,0,1},{22,750,382.8,1,1,0,1},{27,1230,360.1,1,1,0,1}},
{{5,288.05,414.05,1,1,0,1},{7,1612.2,416.25,1,1,0,1},{10,465,401.65,1,1,0,1},{15,272.05,450.8,1,1,0,1},{17,1614.2,433,1,1,0,1},{22,750,388.85,1,1,0,1},{27,1230,367.6,1,1,0,1}},
{{5,288.05,420.6,1,1,0,1},{7,1612.2,422.8,1,1,0,1},{10,465,407.85,1,1,0,1},{15,272.05,454.75,1,1,0,1},{17,1614.2,436.95,1,1,0,1},{22,750,395.65,1,1,0,1},{27,1230,375.95,1,1,0,1}},
{{5,288.05,427.85,1,1,0,1},{7,1612.2,430.05,1,1,0,1},{10,465,414.8,1,1,0,1},{15,272.05,459.1,1,1,0,1},{17,1614.2,441.3,1,1,0,1},{22,750,403.1,1,1,0,1},{27,1230,385.15,1,1,0,1}},
{{5,288.05,435.85,1,1,0,1},{7,1612.2,438.05,1,1,0,1},{10,465,422.35,1,1,0,1},{15,272.05,463.9,1,1,0,1},{17,1614.2,446.1,1,1,0,1},{22,750,411.3,1,1,0,1},{27,1230,395.3,1,1,0,1}},
{{5,288.05,444.5,1,1,0,1},{7,1612.2,446.7,1,1,0,1},{10,465,430.55,1,1,0,1},{15,272.05,469.1,1,1,0,1},{17,1614.2,451.3,1,1,0,1},{22,750,420.25,1,1,0,1},{27,1230,406.25,1,1,0,1}},
{{5,288.05,453.8,1,1,0,1},{7,1612.2,456,1,1,0,1},{10,465,439.45,1,1,0,1},{15,272.05,474.7,1,1,0,1},{17,1614.2,456.9,1,1,0,1},{22,750,429.85,1,1,0,1},{27,1230,418.15,1,1,0,1}},
{{5,288.05,463.85,1,1,0,1},{7,1612.2,466.05,1,1,0,1},{10,465,448.95,1,1,0,1},{15,272.05,480.7,1,1,0,1},{17,1614.2,462.9,1,1,0,1},{22,750,440.2,1,1,0,1},{27,1230,430.9,1,1,0,1}},
{{1,288.05,474.6,1,1,0,1},{3,1612.2,476.8,1,1,0,1},{10,465,459.15,1,1,0,1},{15,272.05,487.15,1,1,0,1},{17,1614.2,469.35,1,1,0,1},{22,750,451.25,1,1,0,1},{27,1230,444.5,1,1,0,1}},
{{1,288.05,486,1,1,0,1},{3,1612.2,488.2,1,1,0,1},{10,465,470,1,1,0,1},{15,272.05,494,1,1,0,1},{17,1614.2,476.2,1,1,0,1},{20,750,463,1,1,0,1},{25,1230,459,1,1,0,1}},
{{1,288.05,481,1,1,0,1},{3,1612.2,483.2,1,1,0,1},{10,465,460,1,1,0,1},{15,272.05,489,1,1,0,1},{17,1614.2,471.2,1,1,0,1},{20,750,459.65,1,1,0,1},{25,1230,451.35,1,1,0,1}},
{{1,288.05,476,1,1,0,1},{3,1612.2,478.2,1,1,0,1},{10,465,450,1,1,0,1},{15,272.05,484,1,1,0,1},{17,1614.2,466.2,1,1,0,1},{20,750,456.35,1,1,0,1},{25,1230,443.65,1,1,0,1}},
{{1,288.05,471,1,1,0,1},{3,1612.2,473.2,1,1,0,1},{10,465,440,1,1,0,1},{15,272.05,479,1,1,0,1},{17,1614.2,461.2,1,1,0,1},{20,750,453,1,1,0,1},{25,1230,436,1,1,0,1}},
{{1,288.05,471,1,1,0,1},{3,1612.2,473.2,1,1,0,1},{10,465,440,1,1,0,1},{15,272.05,479,1,1,0,1},{17,1614.2,461.2,1,1,0,1},{20,750,453,1,1,0,1},{25,1230,436,1,1,0,1}},
{{1,288.05,466.3,1,1,0,1},{3,1612.2,468.5,1,1,0,1},{10,465,435.65,1,1,0,1},{15,272.05,474.3,1,1,0,1},{17,1614.2,456.5,1,1,0,1},{20,750,448.15,1,1,0,1},{25,1230,430.65,1,1,0,1}},
{{1,288.05,461.65,1,1,0,1},{3,1612.2,463.85,1,1,0,1},{12,465,431.25,1,1,0,1},{15,272.05,469.65,1,1,0,1},{17,1614.2,451.85,1,1,0,1},{20,750,443.25,1,1,0,1},{25,1230,425.25,1,1,0,1}},
{{1,288.05,456.95,1,1,0,1},{3,1612.2,459.15,1,1,0,1},{12,465,426.9,1,1,0,1},{15,272.05,464.95,1,1,0,1},{17,1614.2,447.15,1,1,0,1},{20,750,438.4,1,1,0,1},{25,1230,419.9,1,1,0,1}},
{{1,288.05,452.25,1,1,0,1},{3,1612.2,454.45,1,1,0,1},{12,465,422.5,1,1,0,1},{15,272.05,460.25,1,1,0,1},{17,1614.2,442.45,1,1,0,1},{20,750,433.5,1,1,0,1},{25,1230,414.5,1,1,0,1}},
{{1,288.05,447.55,1,1,0,1},{3,1612.2,449.75,1,1,0,1},{12,465,418.15,1,1,0,1},{15,272.05,455.55,1,1,0,1},{17,1614.2,437.75,1,1,0,1},{20,750,428.6,1,1,0,1},{25,1230,409.1,1,1,0,1}},
{{1,288.05,442.9,1,1,0,1},{3,1612.2,445.1,1,1,0,1},{12,465,413.75,1,1,0,1},{15,272.05,450.9,1,1,0,1},{17,1614.2,433.1,1,1,0,1},{20,750,423.75,1,1,0,1},{25,1230,403.75,1,1,0,1}},
{{1,288.05,438.2,1,1,0,1},{3,1612.2,440.4,1,1,0,1},{12,465,409.35,1,1,0,1},{15,272.05,446.2,1,1,0,1},{17,1614.2,428.4,1,1,0,1},{20,750,418.9,1,1,0,1},{25,1230,398.4,1,1,0,1}},
{{1,288.05,433.5,1,1,0,1},{3,1612.2,435.7,1,1,0,1},{10,465,405,1,1,0,1},{15,272.05,441.5,1,1,0,1},{17,1614.2,423.7,1,1,0,1},{20,750,414,1,1,0,1},{25,1230,393,1,1,0,1}},
{{1,288.05,428.8,1,1,0,1},{3,1612.2,431,1,1,0,1},{10,465,400.65,1,1,0,1},{15,272.05,436.8,1,1,0,1},{17,1614.2,419,1,1,0,1},{20,750,409.15,1,1,0,1},{25,1230,387.65,1,1,0,1}},
{{1,288.05,424.15,1,1,0,1},{3,1612.2,426.35,1,1,0,1},{10,465,396.25,1,1,0,1},{15,272.05,432.15,1,1,0,1},{17,1614.2,414.35,1,1,0,1},{20,750,404.25,1,1,0,1},{25,1230,382.25,1,1,0,1}},
{{1,288.05,419.45,1,1,0,1},{3,1612.2,421.65,1,1,0,1},{10,465,391.9,1,1,0,1},{15,272.05,427.45,1,1,0,1},{17,1614.2,409.65,1,1,0,1},{20,750,399.4,1,1,0,1},{25,1230,376.9,1,1,0,1}},
{{1,288.05,414.75,1,1,0,1},{3,1612.2,416.95,1,1,0,1},{10,465,387.5,1,1,0,1},{15,272.05,422.75,1,1,0,1},{17,1614.2,404.95,1,1,0,1},{20,750,394.5,1,1,0,1},{25,1230,371.5,1,1,0,1}},
{{1,288.05,410.05,1,1,0,1},{3,1612.2,412.25,1,1,0,1},{10,465,383.15,1,1,0,1},{15,272.05,418.05,1,1,0,1},{17,1614.2,400.25,1,1,0,1},{20,750,389.65,1,1,0,1},{25,1230,366.15,1,1,0,1}},
{{1,288.05,405.4,1,1,0,1},{3,1612.2,407.6,1,1,0,1},{12,465,378.75,1,1,0,1},{15,272.05,413.4,1,1,0,1},{17,1614.2,395.6,1,1,0,1},{20,750,384.75,1,1,0,1},{25,1230,360.75,1,1,0,1}},
{{1,288.05,400.7,1,1,0,1},{3,1612.2,402.9,1,1,0,1},{12,465,374.4,1,1,0,1},{15,272.05,408.7,1,1,0,1},{17,1614.2,390.9,1,1,0,1},{20,750,379.9,1,1,0,1},{25,1230,355.4,1,1,0,1}},
{{1,288.05,396,1,1,0,1},{3,1612.2,398.2,1,1,0,1},{12,465,370,1,1,0,1},{15,272.05,404,1,1,0,1},{17,1614.2,386.2,1,1,0,1},{20,750,375,1,1,0,1},{25,1230,350,1,1,0,1}},
{{1,288.05,424.35,1,1,0,1},{3,1612.2,426.55,1,1,0,1},{12,465,398.35,1,1,0,1},{15,272.05,432.35,1,1,0,1},{17,1614.2,414.55,1,1,0,1},{20,750,403.65,1,1,0,1},{25,1230,378.75,1,1,0,1}},
{{1,288.05,452.65,1,1,0,1},{3,1612.2,454.85,1,1,0,1},{12,465,426.65,1,1,0,1},{15,272.05,460.65,1,1,0,1},{17,1614.2,442.85,1,1,0,1},{20,750,432.35,1,1,0,1},{25,1230,407.5,1,1,0,1}},
{{1,288.05,481,1,1,0,1},{3,1612.2,483.2,1,1,0,1},{12,465,455,1,1,0,1},{15,272.05,489,1,1,0,1},{17,1614.2,471.2,1,1,0,1},{20,750,461,1,1,0,1},{25,1230,436.25,1,1,0,1}},
{{1,288.05,509.35,1,1,0,1},{3,1612.2,511.55,1,1,0,1},{10,465,483.35,1,1,0,1},{15,272.05,517.35,1,1,0,1},{17,1614.2,499.55,1,1,0,1},{20,750,489.65,1,1,0,1},{25,1230,465,1,1,0,1}},
{{1,288.05,537.65,1,1,0,1},{3,1612.2,539.85,1,1,0,1},{10,465,511.65,1,1,0,1},{15,272.05,545.65,1,1,0,1},{17,1614.2,527.85,1,1,0,1},{20,750,518.35,1,1,0,1},{25,1230,493.75,1,1,0,1}},
{{1,288.05,566,1,1,0,1},{3,1612.2,568.2,1,1,0,1},{10,465,540,1,1,0,1},{15,272.05,574,1,1,0,1},{17,1614.2,556.2,1,1,0,1},{20,750,547,1,1,0,1},{25,1230,522.5,1,1,0,1}},
{{1,288.05,594.35,1,1,0,1},{3,1612.2,596.55,1,1,0,1},{10,465,568.35,1,1,0,1},{15,272.05,602.35,1,1,0,1},{17,1614.2,584.55,1,1,0,1},{20,750,575.65,1,1,0,1},{25,1230,551.25,1,1,0,1}},
{{5,288.05,622.65,1,1,0,1},{7,1612.2,624.85,1,1,0,1},{10,465,596.65,1,1,0,1},{15,272.05,630.65,1,1,0,1},{17,1614.2,612.85,1,1,0,1},{22,750,604.35,1,1,0,1},{27,1230,580,1,1,0,1}},
{{5,288.05,651,1,1,0,1},{7,1612.2,653.2,1,1,0,1},{10,465,625,1,1,0,1},{15,272.05,659,1,1,0,1},{17,1614.2,641.2,1,1,0,1},{22,750,633,1,1,0,1},{27,1230,608.75,1,1,0,1}},
{{5,288.05,679.35,1,1,0,1},{7,1612.2,681.55,1,1,0,1},{10,465,653.35,1,1,0,1},{15,272.05,687.35,1,1,0,1},{17,1614.2,669.55,1,1,0,1},{22,750,661.65,1,1,0,1},{27,1230,637.5,1,1,0,1}},
{{5,288.05,707.65,1,1,0,1},{7,1612.2,709.85,1,1,0,1},{10,465,681.65,1,1,0,1},{15,272.05,715.65,1,1,0,1},{17,1614.2,697.85,1,1,0,1},{22,750,690.35,1,1,0,1},{27,1230,666.25,1,1,0,1}},
{{5,288.05,736,1,1,0,1},{7,1612.2,738.2,1,1,0,1},{10,465,710,1,1,0,1},{15,272.05,744,1,1,0,1},{17,1614.2,726.2,1,1,0,1},{22,750,719,1,1,0,1},{27,1230,695,1,1,0,1}},
{{5,288.05,764.35,1,1,0,1},{7,1612.2,766.55,1,1,0,1},{10,465,738.35,1,1,0,1},{15,272.05,772.35,1,1,0,1},{17,1614.2,754.55,1,1,0,1},{22,750,747.65,1,1,0,1},{27,1230,723.75,1,1,0,1}},
{{5,288.05,792.65,1,1,0,1},{7,1612.2,794.85,1,1,0,1},{10,465,766.65,1,1,0,1},{15,272.05,800.65,1,1,0,1},{17,1614.2,782.85,1,1,0,1},{22,750,776.35,1,1,0,1},{27,1230,752.5,1,1,0,1}},
{{5,288.05,821,1,1,0,1},{7,1612.2,823.2,1,1,0,1},{10,465,795,1,1,0,1},{15,272.05,829,1,1,0,1},{17,1614.2,811.2,1,1,0,1},{22,750,805,1,1,0,1},{27,1230,781.25,1,1,0,1}},
{{5,288.05,849.35,1,1,0,1},{7,1612.2,851.55,1,1,0,1},{10,465,823.35,1,1,0,1},{15,272.05,857.35,1,1,0,1},{17,1614.2,839.55,1,1,0,1},{22,750,833.65,1,1,0,1},{27,1230,810,1,1,0,1}},
{{5,288.05,877.65,1,1,0,1},{7,1612.2,879.85,1,1,0,1},{10,465,851.65,1,1,0,1},{15,272.05,885.65,1,1,0,1},{17,1614.2,867.85,1,1,0,1},{22,750,862.35,1,1,0,1},{27,1230,838.75,1,1,0,1}},
{{5,288.05,906,1,1,0,1},{7,1612.2,908.2,1,1,0,1},{10,465,880,1,1,0,1},{15,272.05,914,1,1,0,1},{17,1614.2,896.2,1,1,0,1},{22,750,891,1,1,0,1},{27,1230,867.5,1,1,0,1}},
{{1,288.05,934.35,1,1,0,1},{3,1612.2,936.55,1,1,0,1},{10,465,908.35,1,1,0,1},{15,272.05,942.35,1,1,0,1},{17,1614.2,924.55,1,1,0,1},{22,750,919.65,1,1,0,1},{27,1230,896.25,1,1,0,1}},
{{1,288.05,962.65,1,1,0,1},{3,1612.2,964.85,1,1,0,1},{10,465,936.65,1,1,0,1},{15,272.05,970.65,1,1,0,1},{17,1614.2,952.85,1,1,0,1},{20,750,948.35,1,1,0,1},{25,1230,925,1,1,0,1}},
{{1,288.05,991,1,1,0,1},{3,1612.2,993.2,1,1,0,1},{10,465,965,1,1,0,1},{15,272.05,999,1,1,0,1},{17,1614.2,981.2,1,1,0,1},{20,750,977,1,1,0,1},{25,1230,953.75,1,1,0,1}},
{{1,288.05,1019.3,1,1,0,1},{3,1612.2,1021.5,1,1,0,1},{10,465,993.35,1,1,0,1},{15,272.05,1027.3,1,1,0,1},{17,1614.2,1009.5,1,1,0,1},{20,750,1005.7,1,1,0,1},{25,1230,982.5,1,1,0,1}},
{{1,288.05,1047.7,1,1,0,1},{3,1612.2,1049.8,1,1,0,1},{10,465,1021.7,1,1,0,1},{15,272.05,1055.7,1,1,0,1},{17,1614.2,1037.8,1,1,0,1},{20,750,1034.3,1,1,0,1},{25,1230,1011.2,1,1,0,1}},
{{1,288.05,1076,1,1,0,1},{3,1612.2,1078.2,1,1,0,1},{10,465,1050,1,1,0,1},{15,272.05,1084,1,1,0,1},{17,1614.2,1066.2,1,1,0,1},{20,750,1063,1,1,0,1},{25,1230,1040,1,1,0,1}},
},
}
+27 -1
View File
@@ -141,16 +141,42 @@ function Fever3:draw()
tex.draw_texture(self._id_overlay, {y = y, fade = a})
end
local FeverAnim = require("background/bg_objects/fever_anim")
local Fever = {}
Fever.Base = BaseFever
Fever.Anim = FeverAnim
Fever.Fever0 = Fever0
Fever.Fever1 = Fever1
Fever.Fever2 = Fever2
Fever.Fever3 = Fever3
-- The cabinet's random pool holds two crowds, fever_effect1 and fever_effect2
-- (fever_effect0 exists but is never drawn from: a single figure parked off-screen).
-- When their exported movie data is present that pool is the whole choice;
-- otherwise the four flat overlays.
local ANIM_POOL = { 1, 2 }
local function anim_ready(path)
if (path or "background") ~= "background" then return false end
for _, n in ipairs(ANIM_POOL) do
if not FeverAnim.available(n) then return false end
end
return true
end
function Fever.variant_count(path)
if anim_ready(path) then return #ANIM_POOL end
return 4
end
function Fever.create(index, bpm, path)
if anim_ready(path) then
local crowd = FeverAnim.new(ANIM_POOL[(index % #ANIM_POOL) + 1], bpm, path)
if crowd then return crowd end
end
local map = {Fever0, Fever1, Fever2, Fever3}
return map[index + 1].new(index, bpm, path)
return map[(index % 4) + 1].new(index % 4, bpm, path)
end
return Fever
@@ -0,0 +1,137 @@
-- 魂-max crowd, replayed from the cabinet's own movie data.
--
-- Data: Scripts/background/bg_data/fever_anim/f_<n>.lua (generated by
-- scratchpad/lyric/fever_export.py from enso/fever/fever_effect<n>.nulm): for every
-- authored root frame, the world transform of every crowd group in display order.
-- Textures: Graphics/background/fevera_<n>/s<shape>.png, one per group.
--
-- The cabinet drives the movie with two labels only -- `normal_fever` when the
-- gauge reaches 魂 max, `fever_normal` when it drops below -- so the state machine is
-- wait -> (start) enter [normal_fever, fever) -> loop [fever, fever_normal)
-- -> (stop) exit [fever_normal, nframes) -> wait
-- stepped at the song's beat rate (40 frames per beat). Every crowd group is its own sprite (bob + squash),
-- and their depth order comes from the data, so the turtle/shiba groups sit exactly
-- where and how the cabinet layers them.
local FeverAnim = {}
FeverAnim.__index = FeverAnim
-- The original re-times this movie to the song (EnsoGraphicBase::FrameSync, shared
-- with the dancers): the 40-frame bob is one beat, i.e. 60 fps at 90 BPM.
local BEAT_FRAMES = 40
local function frame_ms(bpm)
if not bpm or bpm <= 0 then return 1000.0 / 60.0 end
return (60000.0 / bpm) / BEAT_FRAMES
end
local STAGE_Y = 540 -- the 1920x540 crowd stage covers the lower half of the screen
function FeverAnim.available(index)
local ok, data = pcall(require, "background/bg_data/fever_anim/f_" .. index)
return ok and type(data) == "table"
end
function FeverAnim.new(index, bpm, path)
local ok, data = pcall(require, "background/bg_data/fever_anim/f_" .. index)
if not ok or type(data) ~= "table" then return nil end
local self = setmetatable({}, FeverAnim)
self.name = "fevera_" .. index
self.path = path or "background"
tex.load_folder(self.path, self.name)
self.data = data
self.enter_f = data.labels.normal_fever or 0
self.loop_f = data.labels.fever or self.enter_f
self.exit_f = data.labels.fever_normal or data.nframes
self.ids = {}
self.state = "wait"
self.cursor = 0
self.last_ms = nil
return self
end
function FeverAnim:id_of(shape)
local id = self.ids[shape]
if id == nil then
id = tex.get_id(self.name, "s" .. shape) or false
self.ids[shape] = id
end
return id or nil
end
-- rising edge: GotoAndPlay("normal_fever") -- also restarts a crowd that was leaving
function FeverAnim:start()
if self.state == "enter" or self.state == "loop" then return end
self.state = "enter"
self.cursor = self.enter_f
end
-- falling edge: GotoAndPlay("fever_normal")
function FeverAnim:stop()
if self.state == "wait" or self.state == "exit" then return end
self.state = "exit"
self.cursor = self.exit_f
end
function FeverAnim:is_visible()
return self.state ~= "wait"
end
function FeverAnim:alpha()
return self.state ~= "wait" and 1.0 or 0.0
end
function FeverAnim:update(current_ms, bpm)
local last = self.last_ms
self.last_ms = current_ms
if self.state == "wait" or not last then return end
local dt = current_ms - last
if dt <= 0 then return end
if dt > 500 then dt = 500 end
self.cursor = self.cursor + dt / frame_ms(bpm)
if self.state == "enter" and self.cursor >= self.loop_f then
self.state = "loop"
end
if self.state == "loop" then
local span = self.exit_f - self.loop_f
if span > 0 then
self.cursor = self.loop_f + (self.cursor - self.loop_f) % span
else
self.cursor = self.loop_f
end
elseif self.state == "exit" and self.cursor >= self.data.nframes then
self.state = "wait"
end
end
function FeverAnim:draw()
if self.state == "wait" then return end
local f = math.floor(self.cursor)
if f < 0 then f = 0 elseif f >= self.data.nframes then f = self.data.nframes - 1 end
local rows = self.data.frames[f + 1]
if not rows then return end
local shapes = self.data.shapes
for i = 1, #rows do
local r = rows[i]
local a = r[7]
if a > 0.002 then
local s = shapes[r[1]]
local id = s and self:id_of(r[1])
if id then
local sx, sy = r[4], r[5]
tex.draw_texture(id, {
x = r[2],
y = r[3] + STAGE_Y,
x2 = s[1] * (sx - 1),
y2 = s[2] * (sy - 1),
origin = { s[3] * sx, s[4] * sy },
rotation = r[6],
fade = a,
})
end
end
end
end
function FeverAnim:destroy()
tex.unload_folder(self.path, self.name)
end
return FeverAnim
+55 -101
View File
@@ -1,122 +1,74 @@
-- YataiDON-HSS override of PyTaikoGreen/background/bg_objects/renda.lua: Renda1 origin from x2[1]/y2[1]; frame from frame_count
-- The three roll effects, replayed the way the original places them: a piece is
-- spawned somewhere over the LOWER backdrop (x 6..1100, y 540..1020 -- the region
-- the original's spawn box covers below the lane) and flies for 120 frames at
-- 60 Hz along its movie's own path:
-- renda_0 birds (chidori) +17.3 px/frame right, -10.9 px/frame up
-- renda_1 shuriken (shuriken) +17.3 px/frame right, level, spinning -6 deg/frame
-- renda_2 arrow (hamaya) +13.1 px/frame right, -13.8 px/frame up
-- They are drawn before the dancers (see background.lua), as the original does.
local FRAME_MS = 1000.0 / 60.0
local LIFE = 120
local SPAWN_X0, SPAWN_X1 = 6, 1100
local SPAWN_Y0, SPAWN_Y1 = 540, 1020
local BaseRenda = {}
BaseRenda.__index = BaseRenda
function BaseRenda.new(index)
function BaseRenda.new(index, vx, vy, spin)
local self = setmetatable({}, BaseRenda)
self.name = "renda_" .. index
local screen_width = tex.get_screen_width()
local screen_scale = tex.get_screen_scale()
self.hori_move = anim.move(1500 * screen_scale, {total_distance = screen_width})
self.hori_move:start()
self.vx, self.vy, self.spin = vx, vy, spin or 0
self.x0 = math.random(SPAWN_X0, SPAWN_X1)
self.y0 = math.random(SPAWN_Y0, SPAWN_Y1)
self.frames = 0
self.last_ms = nil
local info = tex.get_texture_info("renda", self.name)
self.frame = math.random(0, ((info and info.frame_count) or 1) - 1)
self.w = (info and info.x2 and info.x2[1]) or 0
self.h = (info and info.y2 and info.y2[1]) or 0
self._id = tex.get_id("renda", self.name) -- nil = missing (ROUND 60: id 0 is valid)
return self
end
function BaseRenda:update(current_time_ms)
self.hori_move:update(current_time_ms)
if self.last_ms then
local dt = current_time_ms - self.last_ms
if dt > 0 and dt < 500 then self.frames = self.frames + dt / FRAME_MS end
end
self.last_ms = current_time_ms
end
function BaseRenda:finished()
return self.frames >= LIFE
end
function BaseRenda:draw(y_offset)
if not self._id or self:finished() then return end
local f = self.frames
local cx = self.x0 + self.vx * f
local cy = self.y0 + self.vy * f + (y_offset or 0)
if self.spin ~= 0 then
tex.draw_texture(self._id, {
frame = self.frame, x = cx, y = cy,
origin = { self.w * 0.5, self.h * 0.5 }, rotation = self.spin * f,
})
else
tex.draw_texture(self._id, { frame = self.frame, x = cx - self.w * 0.5, y = cy - self.h * 0.5 })
end
end
local Renda0 = setmetatable({}, {__index = BaseRenda})
Renda0.__index = Renda0
function Renda0.new(index)
local self = setmetatable({}, Renda0)
local base = BaseRenda.new(index)
for k, v in pairs(base) do self[k] = v end
local screen_scale = tex.get_screen_scale()
local screen_height = tex.get_screen_height()
self.vert_move = anim.move(1500 * screen_scale, {total_distance = screen_height + (80 * screen_scale)})
self.vert_move:start()
local tex_info = tex.get_texture_info("renda", self.name)
local num_frames = (tex_info and tex_info.frame_count) or 1
self.frame = math.random(0, num_frames - 1)
self.x = math.random(0, math.floor(500 * screen_scale))
self.y = math.random(0, math.floor(20 * screen_scale))
self._id = tex.get_id("renda", self.name) -- nil = missing (ROUND 60: id 0 is valid)
return self
end
function Renda0:update(current_time_ms)
BaseRenda.update(self, current_time_ms)
self.vert_move:update(current_time_ms)
end
function Renda0:draw(y_offset)
-- ROUND 60 (r60-collab-fix-all): fail soft when the collab ships no renda art
if not self._id then return end
tex.draw_texture(self._id, {
frame = self.frame,
x = self.hori_move.attribute + self.x,
y = -self.vert_move.attribute + self.y + (y_offset or 0)
})
end
function Renda0.new(index) return setmetatable(BaseRenda.new(index, 17.3, -10.9), Renda0) end
local Renda1 = setmetatable({}, {__index = BaseRenda})
Renda1.__index = Renda1
function Renda1.new(index)
local self = setmetatable({}, Renda1)
local base = BaseRenda.new(index)
for k, v in pairs(base) do self[k] = v end
local screen_scale = tex.get_screen_scale()
local screen_height = tex.get_screen_height()
local tex_info = tex.get_texture_info("renda", self.name)
self.frame = math.random(0, ((tex_info and tex_info.frame_count) or 6) - 1)
self.y = math.random(0, math.floor(200 * screen_scale))
self.rotate = anim.move(800 * screen_scale, {total_distance = math.floor(screen_height / 2), loop = true})
self.rotate:start()
self.origin = {(tex_info and tex_info.x2[1] or 0) / 2, (tex_info and tex_info.y2[1] or 0) / 2}
self._id = tex.get_id("renda", self.name) -- nil = missing (ROUND 60: id 0 is valid)
return self
end
function Renda1:update(current_time_ms)
BaseRenda.update(self, current_time_ms)
self.rotate:update(current_time_ms)
end
function Renda1:draw(y_offset)
-- ROUND 60 (r60-collab-fix-all): fail soft when the collab ships no renda art
if not self._id then return end
tex.draw_texture(self._id, {
frame = self.frame,
x = self.hori_move.attribute + self.origin[1],
y = self.y + self.origin[2] + (y_offset or 0),
origin = self.origin,
rotation = self.rotate.attribute
})
end
function Renda1.new(index) return setmetatable(BaseRenda.new(index, 17.3, 0, -6), Renda1) end
local Renda2 = setmetatable({}, {__index = BaseRenda})
Renda2.__index = Renda2
function Renda2.new(index)
local self = setmetatable({}, Renda2)
local base = BaseRenda.new(index)
for k, v in pairs(base) do self[k] = v end
local screen_scale = tex.get_screen_scale()
local screen_height = tex.get_screen_height()
self.vert_move = anim.move(1500, {total_distance = screen_height + (80 * screen_scale)})
self.vert_move:start()
self.x = math.random(0, math.floor(500 * screen_scale))
self.y = math.random(0, math.floor(20 * screen_scale))
self._id = tex.get_id("renda", self.name) -- nil = missing (ROUND 60: id 0 is valid)
return self
end
function Renda2:update(current_time_ms)
BaseRenda.update(self, current_time_ms)
self.vert_move:update(current_time_ms)
end
function Renda2:draw(y_offset)
-- ROUND 60 (r60-collab-fix-all): fail soft when the collab ships no renda art
if not self._id then return end
tex.draw_texture(self._id, {
x = self.hori_move.attribute + self.x,
y = -self.vert_move.attribute + self.y + (y_offset or 0)
})
end
function Renda2.new(index) return setmetatable(BaseRenda.new(index, 13.1, -13.8), Renda2) end
-- ROUND 52 (r52-lua-divergence-fixes): the cabinet's renda effect is a FIXED
-- round-robin pool, not an unbounded per-hit spawner. the reference build
@@ -136,7 +88,9 @@ end
-- is still per-hit -- there is no per-frame "roll active" Lua signal -- so a
-- slow roll spawns fewer than the cabinet's one-per-frame; the cap and the
-- steady-state density now match.)
local POOL_SIZE = 25
-- Observed on the original: about ten pieces are ever live at once -- the oldest
-- is dropped as soon as an eleventh starts, before it leaves the screen.
local POOL_SIZE = 10
local RendaController = {}
RendaController.__index = RendaController
@@ -174,7 +128,7 @@ function RendaController:update(current_time_ms)
local r = self.rendas[slot]
if r then
r:update(current_time_ms)
if r.hori_move.is_finished then
if r:finished() then
self.rendas[slot] = nil
end
end
+5 -3
View File
@@ -34,8 +34,9 @@ function Entry.new()
-- (`scratchpad/r15ae/z_1player_en.png`). Deliberate deviation, documented here: the
-- fill colour is unchanged, so the label still reads exactly as the cabinet's black
-- text, and it is legible in every language this skin ships.
text.create_text("entry_credit_1p", { 0, 0, 0, 255 }, { 0, 0, 0, 255 }, false, 0, 0),
text.create_text("entry_credit_2p", { 0, 0, 0, 255 }, { 0, 0, 0, 255 }, false, 0, 0),
-- black ink with the cabinet's WHITE outline (same 7 stage-px border as the message)
text.create_text("entry_credit_1p", { 0, 0, 0, 255 }, { 255, 255, 255, 255 }, false, 7.0 / tex.get_screen_scale(), 0),
text.create_text("entry_credit_2p", { 0, 0, 0, 255 }, { 255, 255, 255, 255 }, false, 7.0 / tex.get_screen_scale(), 0),
}
-- the message is ONE string drawn in two colourways: the arcade stacks a black-tinted
-- outline copy (ET3 via cmul (0,0,0)) under a white fill copy (ET5), and its blink
@@ -230,7 +231,8 @@ local ROW_CY = { 432 + 72, 432 + 248 } -- 504 / 680
-- CENTRE is box.top + box.h/2 + border -- independent of which font raster is used:
local LABEL_INK_X = CREDIT_CX - 443 -- box.left(-450) + border(7), left-aligned
local MSG_INK_X = CREDIT_CX + 190 -- box.left(-137) + border(7) + box.w/2(320)
local TEXT_INK_DY = -9.5 -- box.top(-64.5) + box.h/2(48) + border(7)
local TEXT_INK_DY = 0.5 -- box.top(-64.5) + box.h/2(48) + border(7), +10: measured
-- against the cabinet the ink sat ~10 px above the pill centre
local PAD5 = 9 -- OutlinedText pad for thickness 5: (int)(5*1.5)+2
-- ROUND 15: the two player labels are now built with thickness 0 (see `text_credit_p` above),
-- so their texture pad is (int)(0*1.5)+2 = 2, not 9. Using PAD5 here would shift the ink 7 px
+6 -2
View File
@@ -61,8 +61,11 @@ function ResultBgLayers.new(player_num)
if self.two_player then
-- The arcade 2P backdrop (main_mc "2p" -> bg_2p, MC 10) is two static sky halves with no
-- clouds and no Fuji, so it stays a single baked plate.
self.t_bg = tex.load_texture("result/background/background_2p")
-- clouds and no Fuji, so it stays a single baked plate: the red half (shape 3, placed
-- mirrored) on the left and the cyan half (shape 1) on the right. The header band is
-- the same one the 1P layers draw, so it is drawn here too instead of being baked in.
self.t_bg = tex.load_texture("result/background/background_2p")
self.t_header = tex.load_texture("result/background/bg_header")
return self
end
@@ -172,6 +175,7 @@ function ResultBgLayers:draw(fade, clear)
if self.two_player then
if self.t_bg then tex.draw_texture(self.t_bg, { fade = fade }) end
if self.t_header then tex.draw_texture(self.t_header, { fade = fade }) end
return
end
+19
View File
@@ -359,7 +359,25 @@ end
-- ── half 1: SONG_SELECT (close + stamp) ─────────────────────────────────────
-- Returns true when it drew anything.
-- The rig only belongs to SONG_SELECT (close leg) and DAN_SELECT (open leg).
-- Teardown used to rely on SongSelect:draw_top calling set_progress(-1), which never
-- happens when the player backs out of DAN_SELECT straight to TITLE (Esc): the last
-- engine_u stayed put and the global Indicator fallback kept painting the shut doors
-- over the title screen. Drop every bit of state as soon as we are anywhere else.
local function off_screen()
local scr = tex.current_screen and tex.current_screen() or nil
if scr == nil or scr == "SONG_SELECT" or scr == "DAN_SELECT" then return false end
M.engine_u = nil
M.armed = false
M.armed_open = false
M.open_t0 = nil
M.t0 = nil
M.open_held = false
return true
end
function M.draw()
if off_screen() then return false end
local u = M.progress()
if not u then return false end
@@ -476,6 +494,7 @@ local INTRO_FROM = 5 -- clip label `in`
local REVEAL_F = OPEN_FROM -- 182
function M.draw_open()
if off_screen() then __hss_dan_intro = nil; return false end
local req = __hss_dan_intro
if req ~= nil then
__hss_dan_intro = nil
+23 -3
View File
@@ -484,6 +484,16 @@ function SongSelect:_opt_ids()
speed = get_any("modifier", "mod_baisaku"),
sanbai = get_any("modifier", "mod_sanbai"),
yonbai = get_any("modifier", "mod_yonbai"),
-- one badge per speed value, like the cabinet (x1.1 .. x1.9, x2, x2.5, x3, x3.5, x4)
speed_by_value = {
[11] = get_any("modifier", "mod_speed_x1_1"), [12] = get_any("modifier", "mod_speed_x1_2"),
[13] = get_any("modifier", "mod_speed_x1_3"), [14] = get_any("modifier", "mod_speed_x1_4"),
[15] = get_any("modifier", "mod_speed_x1_5"), [16] = get_any("modifier", "mod_speed_x1_6"),
[17] = get_any("modifier", "mod_speed_x1_7"), [18] = get_any("modifier", "mod_speed_x1_8"),
[19] = get_any("modifier", "mod_speed_x1_9"), [20] = get_any("modifier", "mod_speed_x2"),
[25] = get_any("modifier", "mod_speed_x2_5"), [30] = get_any("modifier", "mod_speed_x3"),
[35] = get_any("modifier", "mod_speed_x3_5"), [40] = get_any("modifier", "mod_speed_x4"),
},
display = get_any("modifier", "mod_doron"),
inverse = get_any("modifier", "mod_abekobe"),
kimagure = get_any("modifier", "mod_kimagure"),
@@ -589,9 +599,19 @@ function SongSelect:draw_option_board(player, offset, rows, cursor, change)
local icon
local st = row.state or 0
if row.name == "speed" then
if st >= 40 then icon = ids.icon.yonbai
elseif st >= 30 then icon = ids.icon.sanbai
elseif st > 10 then icon = ids.icon.speed end
if st > 10 then
-- exact badge for the value; nearest lower step for anything in between
local best
for v, id in pairs(ids.icon.speed_by_value or {}) do
if id and v <= st and (not best or v > best) then best = v end
end
icon = best and ids.icon.speed_by_value[best] or nil
end
if not icon then
if st >= 40 then icon = ids.icon.yonbai
elseif st >= 30 then icon = ids.icon.sanbai
elseif st > 10 then icon = ids.icon.speed end
end
elseif row.name == "random" then
if st == 2 then icon = ids.icon.detarame
elseif st == 1 then icon = ids.icon.kimagure end