commit 44f853c9f237f039f7e511d4a2d7aebda64a4bb8 Author: 霧雨バニラ <118162831+kirisamevanilla@users.noreply.github.com> Date: Sun Mar 1 03:14:40 2026 +0800 chore: upload project diff --git a/.env b/.env new file mode 100644 index 0000000..aa53336 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ + # Scrubbed by Glitch 2023-01-24T15:04:26+0000 + # Scrubbed by Glitch 2023-01-24T15:31:11+0000 + # Scrubbed by Glitch 2023-01-24T15:37:36+0000 + # Scrubbed by Glitch 2024-03-18T14:27:22+0000 diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000..29ace58 --- /dev/null +++ b/.gitconfig @@ -0,0 +1,3 @@ +[user] + email = you@example.com + name = Your Name diff --git a/.glitch-assets b/.glitch-assets new file mode 100644 index 0000000..54c104c --- /dev/null +++ b/.glitch-assets @@ -0,0 +1,690 @@ +{"name":"drag-in-files.svg","date":"2016-10-22T16:17:49.954Z","url":"https://cdn.hyperdev.com/drag-in-files.svg","type":"image/svg","size":7646,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/drag-in-files.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(102, 153, 205)","uuid":"adSBq97hhhpFNUna"} +{"name":"click-me.svg","date":"2016-10-23T16:17:49.954Z","url":"https://cdn.hyperdev.com/click-me.svg","type":"image/svg","size":7116,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/click-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(243, 185, 186)","uuid":"adSBq97hhhpFNUnb"} +{"name":"paste-me.svg","date":"2016-10-24T16:17:49.954Z","url":"https://cdn.hyperdev.com/paste-me.svg","type":"image/svg","size":7242,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/paste-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(42, 179, 185)","uuid":"adSBq97hhhpFNUnc"} +{"uuid":"adSBq97hhhpFNUna","deleted":true} +{"uuid":"adSBq97hhhpFNUnb","deleted":true} +{"uuid":"adSBq97hhhpFNUnc","deleted":true} +{"name":"Logo_Color.svg","date":"2020-10-15T17:02:08.576Z","url":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2FLogo_Color.svg","type":"image/svg+xml","size":25537,"imageWidth":19,"imageHeight":14,"thumbnail":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2FLogo_Color.svg","thumbnailWidth":19,"thumbnailHeight":14,"uuid":"XPQ2UUJettC9yQ6L"} +{"name":"HKGrotesk-Medium.otf","date":"2020-10-15T17:19:39.944Z","url":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2FHKGrotesk-Medium.otf","type":"","size":69888,"thumbnail":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2Fthumbnails%2FHKGrotesk-Medium.otf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"mSnvx5eJut7fimxB"} +{"name":"HKGrotesk-Regular.otf","date":"2020-10-15T17:19:40.076Z","url":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2FHKGrotesk-Regular.otf","type":"","size":67768,"thumbnail":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2Fthumbnails%2FHKGrotesk-Regular.otf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"VY2dLeOvcf8ffuEw"} +{"name":"HKGrotesk-SemiBold.otf","date":"2020-10-15T17:20:42.442Z","url":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2FHKGrotesk-SemiBold.otf","type":"","size":69948,"thumbnail":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2Fthumbnails%2FHKGrotesk-SemiBold.otf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"yEDZsSX7I7P2NlF1"} +{"name":"HKGrotesk-Bold.otf","date":"2020-10-15T17:21:24.249Z","url":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2FHKGrotesk-Bold.otf","type":"","size":68144,"thumbnail":"https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2Fthumbnails%2FHKGrotesk-Bold.otf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"aHiG7zYivg7tnSDH"} +{"uuid":"mSnvx5eJut7fimxB","deleted":true} +{"uuid":"VY2dLeOvcf8ffuEw","deleted":true} +{"uuid":"yEDZsSX7I7P2NlF1","deleted":true} +{"uuid":"aHiG7zYivg7tnSDH","deleted":true} +{"name":"a9975ea6-8949-4bab-addb-8a95021dc2da.png","date":"2021-04-19T19:40:16.078Z","url":"https://cdn.glitch.com/98edd890-17a0-4104-8780-fd24dfedd4c0%2Fa9975ea6-8949-4bab-addb-8a95021dc2da.png","type":"image/png","size":22750,"imageWidth":300,"imageHeight":300,"thumbnail":"https://cdn.glitch.com/98edd890-17a0-4104-8780-fd24dfedd4c0%2Fa9975ea6-8949-4bab-addb-8a95021dc2da.png","thumbnailWidth":300,"thumbnailHeight":300,"uuid":"sTUPbGmYilBYJY7C"} +{"uuid":"sTUPbGmYilBYJY7C","deleted":true} +{"uuid":"XPQ2UUJettC9yQ6L","deleted":true} +{"name":"neiro_1_don.ogg","date":"2023-01-10T23:04:57.735Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/neiro_1_don.ogg","type":"audio/ogg","size":5092,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fneiro_1_don.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"V0EQb0Noo432uRRp"} +{"name":"neiro_1_ka.ogg","date":"2023-01-10T23:05:40.380Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/neiro_1_ka.ogg","type":"audio/ogg","size":4696,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fneiro_1_ka.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Sj5qXZ5XBhKIA44M"} +{"uuid":"V0EQb0Noo432uRRp","deleted":true} +{"name":"neiro_1_don.ogg","date":"2023-01-10T23:28:07.700Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/neiro_1_don.ogg","type":"audio/ogg","size":5092,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fneiro_1_don.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"gfsQRDHA6Su0iAod"} +{"uuid":"Sj5qXZ5XBhKIA44M","deleted":true} +{"uuid":"gfsQRDHA6Su0iAod","deleted":true} +{"name":"badge_auto.png","date":"2023-01-24T14:04:22.829Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/badge_auto.png","type":"image/png","size":248,"imageWidth":34,"imageHeight":34,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/badge_auto.png","thumbnailWidth":34,"thumbnailHeight":34,"uuid":"KwTIOpKfssqNM2ax"} +{"uuid":"KwTIOpKfssqNM2ax","deleted":true} +{"name":"TnT.ttf","date":"2023-01-24T14:10:05.086Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/TnT.ttf","type":"font/ttf","size":4718572,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2FTnT.ttf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"IPQVZ9sbvSOEbq43"} +{"name":"Kozuka.otf","date":"2023-01-24T14:18:32.566Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/Kozuka.otf","type":"application/vnd.oasis.opendocument.formula-template","size":20528,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2FKozuka.otf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ypgvmCwIObatEq5A"} +{"name":"bgm_result.mp3","date":"2023-01-24T14:18:44.600Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bgm_result.mp3","type":"audio/mpeg","size":120017,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbgm_result.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"kTHWsvxBUppYG8U0"} +{"name":"bgm_setsume.mp3","date":"2023-01-24T14:18:45.227Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bgm_setsume.mp3","type":"audio/mpeg","size":120017,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbgm_setsume.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"xGXxwWXFrAKZFqyq"} +{"name":"bgm_settings.mp3","date":"2023-01-24T14:18:45.927Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bgm_settings.mp3","type":"audio/mpeg","size":120017,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbgm_settings.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ccpVDsFteWjRmAWq"} +{"name":"bgm_songsel.mp3","date":"2023-01-24T14:18:46.966Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bgm_songsel.mp3","type":"audio/mpeg","size":120017,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbgm_songsel.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"t3VHpj2YQPY9TBjX"} +{"name":"neiro_1_don.ogg","date":"2023-01-24T14:18:47.560Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/neiro_1_don.ogg","type":"audio/ogg","size":5890,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fneiro_1_don.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"FBywz26QlZ1BSVuP"} +{"name":"neiro_1_ka.ogg","date":"2023-01-24T14:18:48.017Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/neiro_1_ka.ogg","type":"audio/ogg","size":4865,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fneiro_1_ka.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ygUZ5UDTzj50wdOR"} +{"name":"se_balloon.ogg","date":"2023-01-24T14:18:48.523Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_balloon.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_balloon.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"epDwyQzFLMzbGXCC"} +{"name":"se_calibration.ogg","date":"2023-01-24T14:18:48.996Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_calibration.ogg","type":"audio/ogg","size":4679,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_calibration.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"gk4QNjG0iVKcOCI5"} +{"name":"se_cancel.ogg","date":"2023-01-24T14:18:49.466Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_cancel.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_cancel.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"AspO13ChrDA9xd2d"} +{"name":"se_don.ogg","date":"2023-01-24T14:18:49.911Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_don.ogg","type":"audio/ogg","size":5890,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_don.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"WxQKMIXI8CIUdQ7u"} +{"name":"se_gameclear.ogg","date":"2023-01-24T14:18:50.332Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_gameclear.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_gameclear.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"B4yoRHOyCWbPfLXg"} +{"name":"se_gamefail.ogg","date":"2023-01-24T14:18:51.048Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_gamefail.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_gamefail.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Y8cpTDIFJdXq0deH"} +{"name":"se_gamefullcombo.ogg","date":"2023-01-24T14:18:51.557Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_gamefullcombo.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_gamefullcombo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"SOT65cPidkXXLJpF"} +{"name":"se_jump.ogg","date":"2023-01-24T14:18:51.989Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_jump.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_jump.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"QlQbfKXCz3DmA29J"} +{"name":"se_ka.ogg","date":"2023-01-24T14:18:52.456Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_ka.ogg","type":"audio/ogg","size":4865,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_ka.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"qknOv4EDbX169L7D"} +{"name":"se_pause.ogg","date":"2023-01-24T14:18:52.969Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_pause.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_pause.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"BiJhm6rI0NDdt5UV"} +{"name":"se_results_countup.ogg","date":"2023-01-24T14:18:53.478Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_results_countup.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_results_countup.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"BDxNVcfR2rntHgWy"} +{"name":"se_results_crown.ogg","date":"2023-01-24T14:18:53.976Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/se_results_crown.ogg","type":"audio/ogg","size":4064,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fse_results_crown.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"twQaYkuVgMW8HPPz"} +{"name":"v_combo_50.ogg","date":"2023-01-24T14:18:54.483Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_50.ogg","type":"audio/ogg","size":8702,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_50.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ylDHwXThWfFCl7W2"} +{"name":"v_combo_100.ogg","date":"2023-01-24T14:18:54.964Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_100.ogg","type":"audio/ogg","size":8534,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"5VDfPFk8WJs5lQHS"} +{"name":"v_combo_200.ogg","date":"2023-01-24T14:18:55.462Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_200.ogg","type":"audio/ogg","size":8972,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ZjxIEfBdb7l02jIM"} +{"name":"v_combo_300.ogg","date":"2023-01-24T14:18:55.989Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_300.ogg","type":"audio/ogg","size":10055,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"zc8adLJKFufv8LEp"} +{"name":"v_combo_400.ogg","date":"2023-01-24T14:18:56.495Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_400.ogg","type":"audio/ogg","size":9290,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ehVh7Vc4NRCuhuAF"} +{"name":"v_combo_500.ogg","date":"2023-01-24T14:18:56.952Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_500.ogg","type":"audio/ogg","size":8946,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"qNgGVFpKkC4MwWk2"} +{"name":"v_combo_600.ogg","date":"2023-01-24T14:18:57.443Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_600.ogg","type":"audio/ogg","size":9219,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"L4ScpHnPgf4uorVz"} +{"name":"v_combo_700.ogg","date":"2023-01-24T14:18:57.953Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_700.ogg","type":"audio/ogg","size":9483,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"0JmG3DnDZvvogIJS"} +{"name":"v_combo_800.ogg","date":"2023-01-24T14:18:58.457Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_800.ogg","type":"audio/ogg","size":9524,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"AEirfTuyTx1enOG6"} +{"name":"v_combo_900.ogg","date":"2023-01-24T14:18:58.942Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_900.ogg","type":"audio/ogg","size":9615,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"KYEaFEf5d3glVIGd"} +{"name":"v_combo_1000.ogg","date":"2023-01-24T14:18:59.408Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1000.ogg","type":"audio/ogg","size":8269,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"HD3DUYic2diIgA3q"} +{"name":"v_combo_1100.ogg","date":"2023-01-24T14:18:59.903Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1100.ogg","type":"audio/ogg","size":9994,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"3tYji151bagcwcn3"} +{"name":"v_combo_1200.ogg","date":"2023-01-24T14:19:00.384Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1200.ogg","type":"audio/ogg","size":10596,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"IdCA8Birt9ZgFWZr"} +{"name":"v_combo_1300.ogg","date":"2023-01-24T14:19:00.942Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1300.ogg","type":"audio/ogg","size":11544,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"dL4Ff4DN38MnWlQo"} +{"name":"v_combo_1400.ogg","date":"2023-01-24T14:19:01.439Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1400.ogg","type":"audio/ogg","size":10987,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ppGArRBUiz8Aoxb0"} +{"name":"v_combo_1500.ogg","date":"2023-01-24T14:19:02.058Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1500.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"3pOHZhWdCXqnMnp7"} +{"name":"v_combo_1600.ogg","date":"2023-01-24T14:19:02.533Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1600.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"OMj3qnXFZlYhKulu"} +{"name":"v_combo_1700.ogg","date":"2023-01-24T14:19:02.976Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1700.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"rC5X5TuakvgJMMK5"} +{"name":"v_combo_1800.ogg","date":"2023-01-24T14:19:03.674Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1800.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"tTrYpPZOHfnmvGez"} +{"name":"v_combo_1900.ogg","date":"2023-01-24T14:19:04.183Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_1900.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_1900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"XKeOzNQ7Yiz6hr4i"} +{"name":"v_combo_2000.ogg","date":"2023-01-24T14:19:04.640Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2000.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"xnhCvhRD1p9Zo8RV"} +{"name":"v_combo_2100.ogg","date":"2023-01-24T14:19:05.143Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2100.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"MYAeWxJ9YVCWmqvI"} +{"name":"v_combo_2200.ogg","date":"2023-01-24T14:19:05.612Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2200.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"AE3E7CaLxWgz5AGe"} +{"name":"v_combo_2300.ogg","date":"2023-01-24T14:19:06.051Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2300.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"wv8tZCmmZv2GoRQU"} +{"name":"v_combo_2400.ogg","date":"2023-01-24T14:19:06.497Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2400.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"W15s4Gr8PJaiS6f0"} +{"name":"v_combo_2500.ogg","date":"2023-01-24T14:19:06.985Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2500.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"UKuYMskhbiK9NUTd"} +{"name":"v_combo_2600.ogg","date":"2023-01-24T14:19:07.430Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2600.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"19N7KLv3LdWZsBt7"} +{"name":"v_combo_2700.ogg","date":"2023-01-24T14:19:07.862Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2700.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"5TBSBb0nKdKYRxPJ"} +{"name":"v_combo_2800.ogg","date":"2023-01-24T14:19:08.326Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2800.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"3FOIl24YsRyWd8eg"} +{"name":"v_combo_2900.ogg","date":"2023-01-24T14:19:08.915Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_2900.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_2900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"D4ROmVcilFKM7r8J"} +{"name":"v_combo_3000.ogg","date":"2023-01-24T14:19:09.379Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3000.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"04IByfAWHJ8uqnSg"} +{"name":"v_combo_3100.ogg","date":"2023-01-24T14:19:09.805Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3100.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"DNuGZ2ZQ7oFUae0Z"} +{"name":"v_combo_3200.ogg","date":"2023-01-24T14:19:10.415Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3200.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"mEeiPq2LzEoGubDK"} +{"name":"v_combo_3300.ogg","date":"2023-01-24T14:19:10.880Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3300.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"gidugFIszw62B3C7"} +{"name":"v_combo_3400.ogg","date":"2023-01-24T14:19:11.337Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3400.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"BvSfIhmv2fB3afQG"} +{"name":"v_combo_3500.ogg","date":"2023-01-24T14:19:11.804Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3500.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"vh2yNkuXM8oi2ubw"} +{"name":"v_combo_3600.ogg","date":"2023-01-24T14:19:12.281Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3600.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"UObwyTQ5Vl6nTkUh"} +{"name":"v_combo_3700.ogg","date":"2023-01-24T14:19:12.847Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3700.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"PT3dANaqTegxVNu2"} +{"name":"v_combo_3800.ogg","date":"2023-01-24T14:19:13.413Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3800.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Y0E9MA4ksrOiGmjz"} +{"name":"v_combo_3900.ogg","date":"2023-01-24T14:19:13.881Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_3900.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_3900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ExVCRDL5ijRDDn6d"} +{"name":"v_combo_4000.ogg","date":"2023-01-24T14:19:14.361Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4000.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"hXHXBoyuOd0lCETz"} +{"name":"v_combo_4100.ogg","date":"2023-01-24T14:19:14.828Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4100.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"47TanIo6liofoVjy"} +{"name":"v_combo_4200.ogg","date":"2023-01-24T14:19:15.288Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4200.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"YpZdJwzRfPWeUnRm"} +{"name":"v_combo_4300.ogg","date":"2023-01-24T14:19:15.810Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4300.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"x4sWa38MqrmsmK5g"} +{"name":"v_combo_4400.ogg","date":"2023-01-24T14:19:16.295Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4400.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"lj3ngJgj016qPeCF"} +{"name":"v_combo_4500.ogg","date":"2023-01-24T14:19:16.790Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4500.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"jPG8N2bPQcTeLjuC"} +{"name":"v_combo_4600.ogg","date":"2023-01-24T14:19:17.226Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4600.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"07RavjcUghvtdJqo"} +{"name":"v_combo_4700.ogg","date":"2023-01-24T14:19:17.678Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4700.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"PYxBGB4tkwsKzQ8k"} +{"name":"v_combo_4800.ogg","date":"2023-01-24T14:19:18.158Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4800.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"BYw9dFDuVYqtbW7l"} +{"name":"v_combo_4900.ogg","date":"2023-01-24T14:19:18.599Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_4900.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_4900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"F4KQW3VX5jx1NwqA"} +{"name":"v_combo_5000.ogg","date":"2023-01-24T14:19:19.106Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_combo_5000.ogg","type":"audio/ogg","size":7848,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_combo_5000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"VSQNphlEtW5gb1bJ"} +{"name":"v_diffsel.ogg","date":"2023-01-24T14:19:19.720Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_diffsel.ogg","type":"audio/ogg","size":12007,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_diffsel.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"HsgcNylQrInnxFZo"} +{"name":"v_fullcombo.ogg","date":"2023-01-24T14:19:20.235Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_fullcombo.ogg","type":"audio/ogg","size":7952,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_fullcombo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"fgtWpO0uZX6R7MTW"} +{"name":"v_renda.ogg","date":"2023-01-24T14:19:20.667Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_renda.ogg","type":"audio/ogg","size":7784,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_renda.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Rbp39SqR2ufseQBz"} +{"name":"v_results_fullcombo.ogg","date":"2023-01-24T14:19:21.159Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_results_fullcombo.ogg","type":"audio/ogg","size":10394,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_results_fullcombo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"P99Ex29I4lW8tAVX"} +{"name":"v_results_fullcombo2.ogg","date":"2023-01-24T14:19:21.655Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_results_fullcombo2.ogg","type":"audio/ogg","size":10394,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_results_fullcombo2.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"2sjTviVLzjCU1k8B"} +{"name":"v_results.ogg","date":"2023-01-24T14:19:22.155Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_results.ogg","type":"audio/ogg","size":10132,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_results.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"O86CrqZl5fJ9ih4S"} +{"name":"v_sanka.ogg","date":"2023-01-24T14:19:22.613Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_sanka.ogg","type":"audio/ogg","size":9181,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_sanka.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"MHF0ftNFjqm2vjrj"} +{"name":"v_songsel.ogg","date":"2023-01-24T14:19:23.077Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_songsel.ogg","type":"audio/ogg","size":9868,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_songsel.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"iUGvHitFpx2zt5xE"} +{"name":"v_start.ogg","date":"2023-01-24T14:19:23.522Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_start.ogg","type":"audio/ogg","size":10334,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_start.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"zGpUIEV0EqL1vhIN"} +{"name":"v_title.ogg","date":"2023-01-24T14:19:23.970Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/v_title.ogg","type":"audio/ogg","size":9695,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fv_title.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"QgvL348vX9j4SGzp"} +{"name":"dancing-don.gif","date":"2023-01-24T14:19:34.025Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/dancing-don.gif","type":"image/gif","size":993,"imageWidth":120,"imageHeight":115,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/dancing-don.gif","thumbnailWidth":120,"thumbnailHeight":115,"uuid":"rYaI4BEIu6Wb7EGV"} +{"name":"badge_auto.png","date":"2023-01-24T14:19:34.489Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/badge_auto.png","type":"image/png","size":248,"imageWidth":34,"imageHeight":34,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/badge_auto.png","thumbnailWidth":34,"thumbnailHeight":34,"uuid":"GkNvB9H6sc6EfT4q"} +{"name":"balloon.png","date":"2023-01-24T14:19:34.982Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/balloon.png","type":"image/png","size":2228,"imageWidth":115,"imageHeight":61,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/balloon.png","thumbnailWidth":115,"thumbnailHeight":61,"uuid":"RNYQfAXKHUAIHPL7"} +{"name":"bg_don_1a.png","date":"2023-01-24T14:19:35.681Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_1a.png","type":"image/png","size":226,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_1a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"34fAfKQFOvx02WtI"} +{"name":"bg_don_1b.png","date":"2023-01-24T14:19:36.148Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_1b.png","type":"image/png","size":437,"imageWidth":82,"imageHeight":295,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_1b.png","thumbnailWidth":82,"thumbnailHeight":295,"uuid":"tuYK1XfDh4q1GxQL"} +{"name":"bg_don_2a.png","date":"2023-01-24T14:19:36.579Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_2a.png","type":"image/png","size":1758,"imageWidth":41,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_2a.png","thumbnailWidth":41,"thumbnailHeight":276,"uuid":"0pPe1wMh4fna2QCa"} +{"name":"bg_don_2b.png","date":"2023-01-24T14:19:37.321Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_2b.png","type":"image/png","size":260,"imageWidth":494,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_2b.png","thumbnailWidth":330,"thumbnailHeight":214,"uuid":"BKebRsMxfHhRaNbH"} +{"name":"bg_don_3a.png","date":"2023-01-24T14:19:37.982Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_3a.png","type":"image/png","size":245,"imageWidth":492,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_3a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"Xr5ddAFFEkRBcof8"} +{"name":"bg_don_3b.png","date":"2023-01-24T14:19:38.638Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_3b.png","type":"image/png","size":289,"imageWidth":492,"imageHeight":380,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_3b.png","thumbnailWidth":330,"thumbnailHeight":255,"uuid":"tgmOJnIhjdQvzwSA"} +{"name":"bg_don_4a.png","date":"2023-01-24T14:19:39.589Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_4a.png","type":"image/png","size":19367,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_4a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"dDABNypEwqcFfFvh"} +{"name":"bg_don_4b.png","date":"2023-01-24T14:19:40.350Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_4b.png","type":"image/png","size":21436,"imageWidth":489,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_4b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"BGmLHNfN9sYgsAVy"} +{"name":"bg_don_5a.png","date":"2023-01-24T14:19:41.124Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_5a.png","type":"image/png","size":26175,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_5a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"C1C7SnET3OnQquit"} +{"name":"bg_don_5b.png","date":"2023-01-24T14:19:41.955Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_5b.png","type":"image/png","size":8942,"imageWidth":490,"imageHeight":310,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_5b.png","thumbnailWidth":330,"thumbnailHeight":209,"uuid":"uAA4sWKYlR6yWIA0"} +{"name":"bg_don_6a.png","date":"2023-01-24T14:19:42.838Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_6a.png","type":"image/png","size":27239,"imageWidth":491,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_6a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"5FF1Y2pg3UUJb10M"} +{"name":"bg_don_6b.png","date":"2023-01-24T14:19:43.679Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don_6b.png","type":"image/png","size":38593,"imageWidth":491,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don_6b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"af4wZaLUsOyIItQW"} +{"name":"bg_don2_1a.png","date":"2023-01-24T14:19:44.420Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_1a.png","type":"image/png","size":226,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_1a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"L21dLj9k6e3iL3ov"} +{"name":"bg_don2_1b.png","date":"2023-01-24T14:19:44.886Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_1b.png","type":"image/png","size":437,"imageWidth":82,"imageHeight":295,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_1b.png","thumbnailWidth":82,"thumbnailHeight":295,"uuid":"vIrREOV18n4tgB4H"} +{"name":"bg_don2_2a.png","date":"2023-01-24T14:19:45.305Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_2a.png","type":"image/png","size":2571,"imageWidth":41,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_2a.png","thumbnailWidth":41,"thumbnailHeight":276,"uuid":"Rymq8EyQzYJ1EOX4"} +{"name":"bg_don2_2b.png","date":"2023-01-24T14:19:45.964Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_2b.png","type":"image/png","size":260,"imageWidth":494,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_2b.png","thumbnailWidth":330,"thumbnailHeight":214,"uuid":"6Qg2TSCZLEXo4HSn"} +{"name":"bg_don2_3a.png","date":"2023-01-24T14:19:46.612Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_3a.png","type":"image/png","size":245,"imageWidth":492,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_3a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"4pcCi0uu34DITskl"} +{"name":"bg_don2_3b.png","date":"2023-01-24T14:19:47.278Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_3b.png","type":"image/png","size":289,"imageWidth":492,"imageHeight":380,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_3b.png","thumbnailWidth":330,"thumbnailHeight":255,"uuid":"aZILJX4271erhLEs"} +{"name":"bg_don2_4a.png","date":"2023-01-24T14:19:48.105Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_4a.png","type":"image/png","size":18528,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_4a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"Nb83Q6KZtKGuTPru"} +{"name":"bg_don2_4b.png","date":"2023-01-24T14:19:48.927Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_4b.png","type":"image/png","size":21280,"imageWidth":489,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_4b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"jFCy7PBw7jdusQBk"} +{"name":"bg_don2_5a.png","date":"2023-01-24T14:19:49.663Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_5a.png","type":"image/png","size":25846,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_5a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"Q6wpEn2i2UNdUiIH"} +{"name":"bg_don2_5b.png","date":"2023-01-24T14:19:50.476Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_5b.png","type":"image/png","size":8964,"imageWidth":490,"imageHeight":310,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_5b.png","thumbnailWidth":330,"thumbnailHeight":209,"uuid":"jcYcr8nVWF2htYj7"} +{"name":"bg_don2_6a.png","date":"2023-01-24T14:19:51.213Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_6a.png","type":"image/png","size":27359,"imageWidth":491,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_6a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"x43z9tPafcjanhgE"} +{"name":"bg_don2_6b.png","date":"2023-01-24T14:19:52.018Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_don2_6b.png","type":"image/png","size":38618,"imageWidth":491,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_don2_6b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"EtE3g7OjEjlakQ6M"} +{"name":"bg_genre_0.png","date":"2023-01-24T14:19:53.011Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_0.png","type":"image/png","size":194539,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_0.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"8e4Vb9Avcy7rgrlR"} +{"name":"bg_genre_1.png","date":"2023-01-24T14:19:53.884Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_1.png","type":"image/png","size":134187,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_1.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"nCXo0WAYkblWDMya"} +{"name":"bg_genre_2.png","date":"2023-01-24T14:19:54.716Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_2.png","type":"image/png","size":196164,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_2.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"ciguwYsWpBR7goGm"} +{"name":"bg_genre_3.png","date":"2023-01-24T14:19:55.452Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_3.png","type":"image/png","size":193899,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_3.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"DSSoWLv8TB4y4Q8d"} +{"name":"bg_genre_4.png","date":"2023-01-24T14:19:56.352Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_4.png","type":"image/png","size":193328,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_4.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"98Nb0kiCvxEft6YN"} +{"name":"bg_genre_5.png","date":"2023-01-24T14:19:57.190Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_5.png","type":"image/png","size":196803,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_5.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"oInweInFHCiw1n8i"} +{"name":"bg_genre_6.png","date":"2023-01-24T14:19:57.968Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_6.png","type":"image/png","size":133960,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_6.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"aReEu35AYwa7MOcf"} +{"name":"bg_genre_def.png","date":"2023-01-24T14:19:58.631Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_genre_def.png","type":"image/png","size":16418,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_genre_def.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"AOc4cKfcb1yDCXsF"} +{"name":"bg_pause.png","date":"2023-01-24T14:19:59.189Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_pause.png","type":"image/png","size":1359,"imageWidth":104,"imageHeight":180,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_pause.png","thumbnailWidth":104,"thumbnailHeight":180,"uuid":"xMURB8AA9Wp0IsFg"} +{"name":"bg_score_p1.png","date":"2023-01-24T14:19:59.688Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_score_p1.png","type":"image/png","size":2900,"imageWidth":256,"imageHeight":108,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_score_p1.png","thumbnailWidth":256,"thumbnailHeight":108,"uuid":"lnobOZ23aAl21oBh"} +{"name":"bg_score_p2.png","date":"2023-01-24T14:20:00.208Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_score_p2.png","type":"image/png","size":3117,"imageWidth":256,"imageHeight":108,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_score_p2.png","thumbnailWidth":256,"thumbnailHeight":108,"uuid":"6lEQJC7JkCKpMhp3"} +{"name":"bg_search.png","date":"2023-01-24T14:20:00.714Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_search.png","type":"image/png","size":598,"imageWidth":44,"imageHeight":45,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_search.png","thumbnailWidth":44,"thumbnailHeight":45,"uuid":"x0WBpR1HwwKw0XhR"} +{"name":"bg_settings.png","date":"2023-01-24T14:20:01.604Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_settings.png","type":"image/png","size":24565,"imageWidth":512,"imageHeight":435,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_settings.png","thumbnailWidth":330,"thumbnailHeight":281,"uuid":"G5neeoQIKf3n51AX"} +{"name":"bg_song_1a.png","date":"2023-01-24T14:20:02.323Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_1a.png","type":"image/png","size":11225,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_1a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"WXg85hz481jzpARe"} +{"name":"bg_song_1b.png","date":"2023-01-24T14:20:03.013Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_1b.png","type":"image/png","size":1103,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_1b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"E7uAIbQ2UFmttxBn"} +{"name":"bg_song_2a.png","date":"2023-01-24T14:20:03.818Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_2a.png","type":"image/png","size":19266,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_2a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"yQmPJqt43K2MD8Oz"} +{"name":"bg_song_2b.png","date":"2023-01-24T14:20:04.498Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_2b.png","type":"image/png","size":1103,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_2b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"eIO1whSOW7R3foyC"} +{"name":"bg_song_3a.png","date":"2023-01-24T14:20:05.234Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_3a.png","type":"image/png","size":20708,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_3a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"2LVrf2AL4kp1paBy"} +{"name":"bg_song_3b.png","date":"2023-01-24T14:20:05.912Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_3b.png","type":"image/png","size":1103,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_3b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"6LchsODDloj9FxPu"} +{"name":"bg_song_4a.png","date":"2023-01-24T14:20:06.607Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_4a.png","type":"image/png","size":20505,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_4a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"GhekflazY5wJn0EF"} +{"name":"bg_song_4b.png","date":"2023-01-24T14:20:07.305Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_4b.png","type":"image/png","size":1103,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_4b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"EdIhs6uIGRDYjc99"} +{"name":"bg_song_5a.png","date":"2023-01-24T14:20:07.983Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_5a.png","type":"image/png","size":27544,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_5a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"sllLEMlfwsMs8rUm"} +{"name":"bg_song_5b.png","date":"2023-01-24T14:20:08.649Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_song_5b.png","type":"image/png","size":1103,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_song_5b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"fv2tlSTRAZJlNNCY"} +{"name":"bg_stage_1.png","date":"2023-01-24T14:20:09.145Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_stage_1.png","type":"image/png","size":1264,"imageWidth":66,"imageHeight":44,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_stage_1.png","thumbnailWidth":66,"thumbnailHeight":44,"uuid":"EiZopBqbEEIIsZA0"} +{"name":"bg_stage_2.png","date":"2023-01-24T14:20:09.648Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_stage_2.png","type":"image/png","size":248,"imageWidth":254,"imageHeight":44,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_stage_2.png","thumbnailWidth":254,"thumbnailHeight":44,"uuid":"xczNLSyLHlAhyOnJ"} +{"name":"bg_stage_3.png","date":"2023-01-24T14:20:10.301Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg_stage_3.png","type":"image/png","size":407,"imageWidth":458,"imageHeight":44,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fbg_stage_3.png","thumbnailWidth":330,"thumbnailHeight":32,"uuid":"I7Cn2Im0bEgmUL5N"} +{"name":"bg-pattern-1.png","date":"2023-01-24T14:20:10.783Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg-pattern-1.png","type":"image/png","size":2886,"imageWidth":200,"imageHeight":200,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/bg-pattern-1.png","thumbnailWidth":200,"thumbnailHeight":200,"uuid":"bZY2KJ4OJyQlvzKj"} +{"name":"crown.png","date":"2023-01-24T14:20:11.280Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/crown.png","type":"image/png","size":584,"imageWidth":37,"imageHeight":194,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/crown.png","thumbnailWidth":37,"thumbnailHeight":194,"uuid":"sPHHVEwlBxhD4kmX"} +{"name":"difficulty.png","date":"2023-01-24T14:20:12.059Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/difficulty.png","type":"image/png","size":45489,"imageWidth":168,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdifficulty.png","thumbnailWidth":77,"thumbnailHeight":330,"uuid":"wSIo7nNphHir2ywZ"} +{"name":"don_anim_10combo_a.png","date":"2023-01-24T14:20:12.771Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_10combo_a.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_10combo_a.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"7AsbaY7W5OjMKDeM"} +{"name":"don_anim_10combo_b1.png","date":"2023-01-24T14:20:13.522Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_10combo_b1.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_10combo_b1.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"mnwoHCv2FtYzwMLV"} +{"name":"don_anim_10combo_b2.png","date":"2023-01-24T14:20:14.260Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_10combo_b2.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_10combo_b2.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"smJUHNYAINHLAEMi"} +{"name":"don_anim_clear_a.png","date":"2023-01-24T14:20:14.947Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_clear_a.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_clear_a.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"RxJM1YUyddEufyMn"} +{"name":"don_anim_clear_b1.png","date":"2023-01-24T14:20:15.665Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_clear_b1.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_clear_b1.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"TPufx7k7vj2QpHXa"} +{"name":"don_anim_clear_b2.png","date":"2023-01-24T14:20:16.401Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_clear_b2.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_clear_b2.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"N93j3K3FAmteBLb8"} +{"name":"don_anim_gogo_a.png","date":"2023-01-24T14:20:17.241Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_gogo_a.png","type":"image/png","size":585,"imageWidth":2170,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_gogo_a.png","thumbnailWidth":330,"thumbnailHeight":283,"uuid":"lfbAxkM7pE92NiSl"} +{"name":"don_anim_gogo_b1.png","date":"2023-01-24T14:20:17.980Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_gogo_b1.png","type":"image/png","size":585,"imageWidth":2170,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_gogo_b1.png","thumbnailWidth":330,"thumbnailHeight":283,"uuid":"tqaroQscXdncNytR"} +{"name":"don_anim_gogo_b2.png","date":"2023-01-24T14:20:18.709Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_gogo_b2.png","type":"image/png","size":585,"imageWidth":2170,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_gogo_b2.png","thumbnailWidth":330,"thumbnailHeight":283,"uuid":"eSdfJu5WFka5NriX"} +{"name":"don_anim_gogostart_a.png","date":"2023-01-24T14:20:19.432Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_gogostart_a.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_gogostart_a.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"gj3n82xvBIaVQ6aJ"} +{"name":"don_anim_gogostart_b1.png","date":"2023-01-24T14:20:20.173Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_gogostart_b1.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_gogostart_b1.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"K4l4bJFM1B2raFJI"} +{"name":"don_anim_gogostart_b2.png","date":"2023-01-24T14:20:21.032Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_gogostart_b2.png","type":"image/png","size":340,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_gogostart_b2.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"A1yjAFmTex2vtPRn"} +{"name":"don_anim_normal_a.png","date":"2023-01-24T14:20:21.752Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_normal_a.png","type":"image/png","size":259,"imageWidth":722,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_normal_a.png","thumbnailWidth":129,"thumbnailHeight":330,"uuid":"v9Fuhu33QwfXNi2r"} +{"name":"don_anim_normal_b1.png","date":"2023-01-24T14:20:22.400Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_normal_b1.png","type":"image/png","size":259,"imageWidth":722,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_normal_b1.png","thumbnailWidth":129,"thumbnailHeight":330,"uuid":"0Pea5UEJbUTMsmW1"} +{"name":"don_anim_normal_b2.png","date":"2023-01-24T14:20:23.149Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/don_anim_normal_b2.png","type":"image/png","size":259,"imageWidth":722,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fdon_anim_normal_b2.png","thumbnailWidth":129,"thumbnailHeight":330,"uuid":"JQB0buJlbURvP5ZJ"} +{"name":"favicon.png","date":"2023-01-24T14:20:23.666Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/favicon.png","type":"image/png","size":1879,"imageWidth":32,"imageHeight":32,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/favicon.png","thumbnailWidth":32,"thumbnailHeight":32,"uuid":"lHEvID0AealkrqUw"} +{"name":"fire_anim.png","date":"2023-01-24T14:20:24.388Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/fire_anim.png","type":"image/png","size":1014,"imageWidth":2520,"imageHeight":370,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Ffire_anim.png","thumbnailWidth":330,"thumbnailHeight":49,"uuid":"hnBrxlOWimOZm154"} +{"name":"fireworks_anim.png","date":"2023-01-24T14:20:25.147Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/fireworks_anim.png","type":"image/png","size":3395,"imageWidth":1840,"imageHeight":1840,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Ffireworks_anim.png","thumbnailWidth":330,"thumbnailHeight":330,"uuid":"bMsL2zoshVhyTDuX"} +{"name":"mimizu.png","date":"2023-01-24T14:20:25.651Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/mimizu.png","type":"image/png","size":607,"imageWidth":136,"imageHeight":315,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/mimizu.png","thumbnailWidth":136,"thumbnailHeight":315,"uuid":"28rzEHiZZorDUPcM"} +{"name":"miss.png","date":"2023-01-24T14:20:26.130Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/miss.png","type":"image/png","size":714,"imageWidth":201,"imageHeight":201,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/miss.png","thumbnailWidth":201,"thumbnailHeight":201,"uuid":"tDTNM0bAktsnlIkj"} +{"name":"notes_drumroll.png","date":"2023-01-24T14:20:26.923Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/notes_drumroll.png","type":"image/png","size":12530,"imageWidth":172,"imageHeight":688,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fnotes_drumroll.png","thumbnailWidth":83,"thumbnailHeight":330,"uuid":"zCCfw5sZbK8lrit8"} +{"name":"notes_explosion.png","date":"2023-01-24T14:20:28.031Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/notes_explosion.png","type":"image/png","size":352326,"imageWidth":888,"imageHeight":1110,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fnotes_explosion.png","thumbnailWidth":264,"thumbnailHeight":330,"uuid":"yxVdePZpzxdowCwQ"} +{"name":"notes_hit.png","date":"2023-01-24T14:20:28.726Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/notes_hit.png","type":"image/png","size":26900,"imageWidth":128,"imageHeight":512,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fnotes_hit.png","thumbnailWidth":83,"thumbnailHeight":330,"uuid":"Hizh0jGS1wfLhiYi"} +{"name":"notes.png","date":"2023-01-24T14:20:30.820Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/notes.png","type":"image/png","size":22010,"imageWidth":172,"imageHeight":688,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fnotes.png","thumbnailWidth":83,"thumbnailHeight":330,"uuid":"JZjbL0AHOCAENUDu"} +{"name":"results_flowers.png","date":"2023-01-24T14:20:31.524Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/results_flowers.png","type":"image/png","size":331,"imageWidth":483,"imageHeight":477,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fresults_flowers.png","thumbnailWidth":330,"thumbnailHeight":326,"uuid":"g9fhOlQVgxl7U7as"} +{"name":"results_mikoshi.png","date":"2023-01-24T14:20:32.204Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/results_mikoshi.png","type":"image/png","size":331,"imageWidth":553,"imageHeight":416,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fresults_mikoshi.png","thumbnailWidth":330,"thumbnailHeight":249,"uuid":"e8w0vcNoFwDg1K2F"} +{"name":"results_tetsuohana.png","date":"2023-01-24T14:20:32.871Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/results_tetsuohana.png","type":"image/png","size":831,"imageWidth":584,"imageHeight":1275,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fresults_tetsuohana.png","thumbnailWidth":152,"thumbnailHeight":330,"uuid":"rtMOzoz1MB2x6m5P"} +{"name":"results_tetsuohana2.png","date":"2023-01-24T14:20:33.751Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/results_tetsuohana2.png","type":"image/png","size":205571,"imageWidth":584,"imageHeight":1275,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fresults_tetsuohana2.png","thumbnailWidth":152,"thumbnailHeight":330,"uuid":"sdRLygut3UVn8D8v"} +{"name":"settings_gamepad.png","date":"2023-01-24T14:20:34.413Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/settings_gamepad.png","type":"image/png","size":490,"imageWidth":550,"imageHeight":713,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Fsettings_gamepad.png","thumbnailWidth":255,"thumbnailHeight":330,"uuid":"dC8GAQg4C2wcDA9G"} +{"name":"taiko.png","date":"2023-01-24T14:20:35.054Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/taiko.png","type":"image/png","size":216,"imageWidth":138,"imageHeight":810,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Ftaiko.png","thumbnailWidth":57,"thumbnailHeight":330,"uuid":"4IKnbuB5z0dNSZ6X"} +{"name":"title-screen.png","date":"2023-01-24T14:20:35.716Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/title-screen.png","type":"image/png","size":2109,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Ftitle-screen.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"KXc5yhn876TOmAIV"} +{"name":"touch_drum.png","date":"2023-01-24T14:20:36.551Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/touch_drum.png","type":"image/png","size":11553,"imageWidth":842,"imageHeight":436,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2Ftouch_drum.png","thumbnailWidth":330,"thumbnailHeight":171,"uuid":"A0bVAfYglhnX4JjX"} +{"name":"touch_fullscreen.png","date":"2023-01-24T14:20:37.060Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/touch_fullscreen.png","type":"image/png","size":213,"imageWidth":75,"imageHeight":75,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/touch_fullscreen.png","thumbnailWidth":75,"thumbnailHeight":75,"uuid":"LzhpZEAyzAPvXNqS"} +{"name":"touch_pause.png","date":"2023-01-24T14:20:37.535Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/touch_pause.png","type":"image/png","size":204,"imageWidth":75,"imageHeight":75,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/touch_pause.png","thumbnailWidth":75,"thumbnailHeight":75,"uuid":"VwYg5nGoN9rwKvri"} +{"uuid":"VwYg5nGoN9rwKvri","deleted":true} +{"name":"touch_pause.png","date":"2023-01-24T14:31:54.967Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/touch_pause.png","type":"image/png","size":204,"imageWidth":75,"imageHeight":75,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/touch_pause.png","thumbnailWidth":75,"thumbnailHeight":75,"uuid":"Z9z7QNKMIA9oAqMQ"} +{"name":"AIAIAI.ogg","date":"2023-01-24T14:35:11.763Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/AIAIAI.ogg","type":"audio/ogg","size":2165674,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2FAIAIAI.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"mRvWBVc6NqmPTioj"} +{"uuid":"mRvWBVc6NqmPTioj","deleted":true} +{"name":"1.ogg","date":"2023-01-24T14:35:11.763Z","url":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/1.ogg","type":"audio/ogg","size":2165674,"thumbnail":"https://cdn.glitch.global/a3e2c166-1d1e-4733-adf4-582e6dc2f601/thumbnails%2FAIAIAI.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"mRvWBVc6NqmPTioj"} +{"name":"3bf3f1c0-28b0-4863-832f-fddb468c8332.image.png","date":"2023-01-24T18:56:09.947Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/3bf3f1c0-28b0-4863-832f-fddb468c8332.image.png","type":"image/png","size":179995,"imageWidth":992,"imageHeight":480,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2F3bf3f1c0-28b0-4863-832f-fddb468c8332.image.png","thumbnailWidth":330,"thumbnailHeight":160,"uuid":"XoQbHoADUmCQCu33"} +{"name":"ede0f829-a14e-4f2a-9063-d2163141071e.image.png","date":"2023-01-24T18:56:10.617Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/ede0f829-a14e-4f2a-9063-d2163141071e.image.png","type":"image/png","size":179995,"imageWidth":992,"imageHeight":480,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fede0f829-a14e-4f2a-9063-d2163141071e.image.png","thumbnailWidth":330,"thumbnailHeight":160,"uuid":"YxuzWqEGWj4DKmeq"} +{"name":"a0c5d2d5-0e8f-45d7-9313-60f4817770dc.image.png","date":"2023-01-24T18:56:11.430Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/a0c5d2d5-0e8f-45d7-9313-60f4817770dc.image.png","type":"image/png","size":179995,"imageWidth":992,"imageHeight":480,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fa0c5d2d5-0e8f-45d7-9313-60f4817770dc.image.png","thumbnailWidth":330,"thumbnailHeight":160,"uuid":"kdBU0jpfO99MNhHh"} +{"name":"5f6fb847-d1e4-4937-a6bd-7c0c1a0a5446.image.png","date":"2023-01-24T18:56:12.917Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/5f6fb847-d1e4-4937-a6bd-7c0c1a0a5446.image.png","type":"image/png","size":179995,"imageWidth":992,"imageHeight":480,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2F5f6fb847-d1e4-4937-a6bd-7c0c1a0a5446.image.png","thumbnailWidth":330,"thumbnailHeight":160,"uuid":"xOUTPuUG2puEBduY"} +{"name":"ca0f63ff-af14-4977-b4b5-cba2fd45b90f.image.png","date":"2023-01-24T18:56:13.464Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/ca0f63ff-af14-4977-b4b5-cba2fd45b90f.image.png","type":"image/png","size":179995,"imageWidth":992,"imageHeight":480,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fca0f63ff-af14-4977-b4b5-cba2fd45b90f.image.png","thumbnailWidth":330,"thumbnailHeight":160,"uuid":"uD8NPPgi7SoVG60E"} +{"name":"0bcea4aa-e9ca-4f0a-a963-410e0ba617e3.image.png","date":"2023-01-24T18:56:15.190Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/0bcea4aa-e9ca-4f0a-a963-410e0ba617e3.image.png","type":"image/png","size":179995,"imageWidth":992,"imageHeight":480,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2F0bcea4aa-e9ca-4f0a-a963-410e0ba617e3.image.png","thumbnailWidth":330,"thumbnailHeight":160,"uuid":"3YFbqMSuX7T3G8LY"} +{"uuid":"tDTNM0bAktsnlIkj","deleted":true} +{"name":"miss.png","date":"2023-01-24T18:59:01.454Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/miss.png","type":"image/png","size":8391,"imageWidth":201,"imageHeight":201,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/miss.png","thumbnailWidth":201,"thumbnailHeight":201,"uuid":"Hk5GN5QxMtDf3bfr"} +{"uuid":"x0WBpR1HwwKw0XhR","deleted":true} +{"name":"bg_search.png","date":"2023-01-24T18:59:01.970Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_search.png","type":"image/png","size":1050,"imageWidth":44,"imageHeight":45,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_search.png","thumbnailWidth":44,"thumbnailHeight":45,"uuid":"Z4SLJGfnXPiAGPBf"} +{"uuid":"sPHHVEwlBxhD4kmX","deleted":true} +{"name":"crown.png","date":"2023-01-24T18:59:02.700Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/crown.png","type":"image/png","size":11535,"imageWidth":37,"imageHeight":194,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/crown.png","thumbnailWidth":37,"thumbnailHeight":194,"uuid":"11WFHiL05OgXUiL7"} +{"name":"title-screen.jpg","date":"2023-01-24T18:59:04.707Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/title-screen.jpg","type":"image/jpeg","size":637747,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftitle-screen.jpg","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"1NwwkFHZg3aXsrJY"} +{"uuid":"IPQVZ9sbvSOEbq43","deleted":true} +{"name":"TnT.ttf","date":"2023-01-24T18:59:05.726Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/TnT.ttf","type":"font/ttf","size":4718572,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FTnT.ttf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"TJE7G7yp2idZ414k"} +{"uuid":"VSQNphlEtW5gb1bJ","deleted":true} +{"name":"v_combo_5000.ogg","date":"2023-01-24T18:59:06.314Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_5000.ogg","type":"audio/ogg","size":29351,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_5000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"nY19zKcsi0rzm8A7"} +{"uuid":"F4KQW3VX5jx1NwqA","deleted":true} +{"name":"v_combo_4900.ogg","date":"2023-01-24T18:59:06.875Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4900.ogg","type":"audio/ogg","size":17697,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"lrDhNlQuZLM8yTKO"} +{"uuid":"BYw9dFDuVYqtbW7l","deleted":true} +{"name":"v_combo_4800.ogg","date":"2023-01-24T18:59:08.337Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4800.ogg","type":"audio/ogg","size":16828,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"PvxbqJls21Al9q9D"} +{"uuid":"PYxBGB4tkwsKzQ8k","deleted":true} +{"name":"v_combo_4700.ogg","date":"2023-01-24T18:59:08.891Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4700.ogg","type":"audio/ogg","size":16766,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"vuYtvaxzIjCcUFc4"} +{"uuid":"07RavjcUghvtdJqo","deleted":true} +{"name":"v_combo_4600.ogg","date":"2023-01-24T18:59:09.415Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4600.ogg","type":"audio/ogg","size":16341,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"vn67X7px8I7upF5V"} +{"uuid":"jPG8N2bPQcTeLjuC","deleted":true} +{"name":"v_combo_4500.ogg","date":"2023-01-24T18:59:09.951Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4500.ogg","type":"audio/ogg","size":15505,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"7nk70FjsKFPKFyzK"} +{"uuid":"lj3ngJgj016qPeCF","deleted":true} +{"name":"v_combo_4400.ogg","date":"2023-01-24T18:59:10.862Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4400.ogg","type":"audio/ogg","size":17495,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"iK8xOxhXMwyAzLML"} +{"uuid":"x4sWa38MqrmsmK5g","deleted":true} +{"name":"v_combo_4300.ogg","date":"2023-01-24T18:59:11.388Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4300.ogg","type":"audio/ogg","size":17091,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"lz9MTfXYV1YFiEYG"} +{"uuid":"YpZdJwzRfPWeUnRm","deleted":true} +{"name":"v_combo_4200.ogg","date":"2023-01-24T18:59:11.918Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4200.ogg","type":"audio/ogg","size":17077,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"tPX2NhXybLu9LouB"} +{"uuid":"47TanIo6liofoVjy","deleted":true} +{"name":"v_combo_4100.ogg","date":"2023-01-24T18:59:12.400Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4100.ogg","type":"audio/ogg","size":14009,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"SrBLoon3xQ9mMKrG"} +{"uuid":"hXHXBoyuOd0lCETz","deleted":true} +{"name":"v_combo_4000.ogg","date":"2023-01-24T18:59:12.925Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_4000.ogg","type":"audio/ogg","size":22173,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_4000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"TJz1ZjTbscXHB5S2"} +{"uuid":"ExVCRDL5ijRDDn6d","deleted":true} +{"name":"v_combo_3900.ogg","date":"2023-01-24T18:59:13.579Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3900.ogg","type":"audio/ogg","size":18696,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ofFONxOstanCy8uE"} +{"uuid":"Y0E9MA4ksrOiGmjz","deleted":true} +{"name":"v_combo_3800.ogg","date":"2023-01-24T18:59:15.331Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3800.ogg","type":"audio/ogg","size":16155,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"2tct2DaeYNHWtT7L"} +{"uuid":"PT3dANaqTegxVNu2","deleted":true} +{"name":"v_combo_3700.ogg","date":"2023-01-24T18:59:16.011Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3700.ogg","type":"audio/ogg","size":16500,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"VatCWGd1nysC8d99"} +{"uuid":"UObwyTQ5Vl6nTkUh","deleted":true} +{"name":"v_combo_3600.ogg","date":"2023-01-24T18:59:16.863Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3600.ogg","type":"audio/ogg","size":15308,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"AGyMSbeYmRv4P3NM"} +{"uuid":"vh2yNkuXM8oi2ubw","deleted":true} +{"name":"v_combo_3500.ogg","date":"2023-01-24T18:59:17.451Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3500.ogg","type":"audio/ogg","size":16237,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"M6GuR41jStsLQ4Hx"} +{"uuid":"BvSfIhmv2fB3afQG","deleted":true} +{"name":"v_combo_3400.ogg","date":"2023-01-24T18:59:18.491Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3400.ogg","type":"audio/ogg","size":16443,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"C0I56kS2SsR47BKe"} +{"uuid":"gidugFIszw62B3C7","deleted":true} +{"name":"v_combo_3300.ogg","date":"2023-01-24T18:59:19.165Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3300.ogg","type":"audio/ogg","size":17666,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"FwvL1A63spmDzMc4"} +{"uuid":"mEeiPq2LzEoGubDK","deleted":true} +{"name":"v_combo_3200.ogg","date":"2023-01-24T18:59:21.274Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3200.ogg","type":"audio/ogg","size":16286,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"h3KP0So6HsMhgbpX"} +{"uuid":"DNuGZ2ZQ7oFUae0Z","deleted":true} +{"name":"v_combo_3100.ogg","date":"2023-01-24T18:59:37.856Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3100.ogg","type":"audio/ogg","size":14239,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"SkfQyk1W6Y7yvvS5"} +{"uuid":"04IByfAWHJ8uqnSg","deleted":true} +{"name":"v_combo_3000.ogg","date":"2023-01-24T18:59:46.193Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_3000.ogg","type":"audio/ogg","size":21456,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_3000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Jc4TnCN9cU1AZl8t"} +{"uuid":"D4ROmVcilFKM7r8J","deleted":true} +{"name":"v_combo_2900.ogg","date":"2023-01-24T18:59:50.023Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2900.ogg","type":"audio/ogg","size":15298,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"G8lkwNah1gLtoTmG"} +{"uuid":"3FOIl24YsRyWd8eg","deleted":true} +{"name":"v_combo_2800.ogg","date":"2023-01-24T18:59:53.409Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2800.ogg","type":"audio/ogg","size":15551,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"O64BgVd5fKGKJkQh"} +{"uuid":"5TBSBb0nKdKYRxPJ","deleted":true} +{"name":"v_combo_2700.ogg","date":"2023-01-24T18:59:57.623Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2700.ogg","type":"audio/ogg","size":15717,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"qiIQuSjPl0PbzWE6"} +{"uuid":"19N7KLv3LdWZsBt7","deleted":true} +{"name":"v_combo_2600.ogg","date":"2023-01-24T18:59:59.831Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2600.ogg","type":"audio/ogg","size":15675,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ZEfxd85CTYkBkEp8"} +{"uuid":"UKuYMskhbiK9NUTd","deleted":true} +{"name":"v_combo_2500.ogg","date":"2023-01-24T19:00:02.793Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2500.ogg","type":"audio/ogg","size":14666,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"PTHEz2xtUUHecrgc"} +{"uuid":"W15s4Gr8PJaiS6f0","deleted":true} +{"name":"v_combo_2400.ogg","date":"2023-01-24T19:00:05.189Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2400.ogg","type":"audio/ogg","size":16289,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"lFr7avF9OH0pyzrp"} +{"uuid":"wv8tZCmmZv2GoRQU","deleted":true} +{"name":"v_combo_2300.ogg","date":"2023-01-24T19:00:07.184Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2300.ogg","type":"audio/ogg","size":15264,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"2f9PSimMovElYwCE"} +{"uuid":"AE3E7CaLxWgz5AGe","deleted":true} +{"name":"v_combo_2200.ogg","date":"2023-01-24T19:00:08.820Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2200.ogg","type":"audio/ogg","size":14401,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"q1AbbhMPCwiOqAb0"} +{"uuid":"MYAeWxJ9YVCWmqvI","deleted":true} +{"name":"v_combo_2100.ogg","date":"2023-01-24T19:00:11.614Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2100.ogg","type":"audio/ogg","size":13263,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"zTaD44zbqmu8qFnj"} +{"uuid":"xnhCvhRD1p9Zo8RV","deleted":true} +{"name":"v_combo_2000.ogg","date":"2023-01-24T19:00:13.413Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_2000.ogg","type":"audio/ogg","size":23718,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_2000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"yn6ClawiE7Uqx9dq"} +{"uuid":"XKeOzNQ7Yiz6hr4i","deleted":true} +{"name":"v_combo_1900.ogg","date":"2023-01-24T19:00:14.947Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1900.ogg","type":"audio/ogg","size":14096,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"2LMvdD1tBECTj4Vm"} +{"uuid":"tTrYpPZOHfnmvGez","deleted":true} +{"name":"v_combo_1800.ogg","date":"2023-01-24T19:00:16.996Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1800.ogg","type":"audio/ogg","size":14091,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"wr8RfSQImVt5uYry"} +{"uuid":"rC5X5TuakvgJMMK5","deleted":true} +{"name":"v_combo_1700.ogg","date":"2023-01-24T19:00:18.797Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1700.ogg","type":"audio/ogg","size":14410,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"vWgI79AooJKe5V8j"} +{"uuid":"OMj3qnXFZlYhKulu","deleted":true} +{"name":"v_combo_1600.ogg","date":"2023-01-24T19:00:20.694Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1600.ogg","type":"audio/ogg","size":13380,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"PoBr0VtVs8eMNFrP"} +{"uuid":"3pOHZhWdCXqnMnp7","deleted":true} +{"name":"v_combo_1500.ogg","date":"2023-01-24T19:00:22.660Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1500.ogg","type":"audio/ogg","size":14158,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"fD3ttVfdMrLoCkcz"} +{"uuid":"ppGArRBUiz8Aoxb0","deleted":true} +{"name":"v_combo_1400.ogg","date":"2023-01-24T19:00:25.198Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1400.ogg","type":"audio/ogg","size":14309,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"deekWFAcXTRwMeCs"} +{"uuid":"dL4Ff4DN38MnWlQo","deleted":true} +{"name":"v_combo_1300.ogg","date":"2023-01-24T19:00:27.316Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1300.ogg","type":"audio/ogg","size":14707,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"o2QdqfmuCuWqk64i"} +{"uuid":"IdCA8Birt9ZgFWZr","deleted":true} +{"name":"v_combo_1200.ogg","date":"2023-01-24T19:00:29.147Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1200.ogg","type":"audio/ogg","size":14889,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"gxD6LZUZnrkW8NHr"} +{"uuid":"3tYji151bagcwcn3","deleted":true} +{"name":"v_combo_1100.ogg","date":"2023-01-24T19:00:31.498Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1100.ogg","type":"audio/ogg","size":13412,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"omshB8ac8oGbPkR4"} +{"uuid":"HD3DUYic2diIgA3q","deleted":true} +{"name":"v_combo_1000.ogg","date":"2023-01-24T19:00:32.984Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_1000.ogg","type":"audio/ogg","size":19829,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_1000.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"IUhTVbtOSLO4Q6PP"} +{"uuid":"KYEaFEf5d3glVIGd","deleted":true} +{"name":"v_combo_900.ogg","date":"2023-01-24T19:00:34.468Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_900.ogg","type":"audio/ogg","size":15752,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_900.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"x7mjNDFmx2tmTCqo"} +{"uuid":"AEirfTuyTx1enOG6","deleted":true} +{"name":"v_combo_800.ogg","date":"2023-01-24T19:00:35.989Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_800.ogg","type":"audio/ogg","size":15360,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_800.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"AIBCmw2asWSVZyhl"} +{"uuid":"0JmG3DnDZvvogIJS","deleted":true} +{"name":"v_combo_700.ogg","date":"2023-01-24T19:00:37.508Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_700.ogg","type":"audio/ogg","size":14855,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_700.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"7T7AWrqKKJVpuWjE"} +{"uuid":"L4ScpHnPgf4uorVz","deleted":true} +{"name":"v_combo_600.ogg","date":"2023-01-24T19:00:39.543Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_600.ogg","type":"audio/ogg","size":14333,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_600.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"sXMJJftw1ob0qYje"} +{"uuid":"qNgGVFpKkC4MwWk2","deleted":true} +{"name":"v_combo_500.ogg","date":"2023-01-24T19:00:41.050Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_500.ogg","type":"audio/ogg","size":15179,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_500.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"NG3DOTvvSzKpKxGl"} +{"uuid":"ehVh7Vc4NRCuhuAF","deleted":true} +{"name":"v_combo_400.ogg","date":"2023-01-24T19:00:42.879Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_400.ogg","type":"audio/ogg","size":14717,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_400.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"wgBw8LQKE31pS2wo"} +{"uuid":"zc8adLJKFufv8LEp","deleted":true} +{"name":"v_combo_300.ogg","date":"2023-01-24T19:00:44.755Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_300.ogg","type":"audio/ogg","size":15927,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_300.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"hJMfmel6kES5nubq"} +{"uuid":"ZjxIEfBdb7l02jIM","deleted":true} +{"name":"v_combo_200.ogg","date":"2023-01-24T19:00:46.267Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_200.ogg","type":"audio/ogg","size":15012,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_200.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"JJ3Wb11UeQPmaBhJ"} +{"uuid":"5VDfPFk8WJs5lQHS","deleted":true} +{"name":"v_combo_100.ogg","date":"2023-01-24T19:00:48.174Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_100.ogg","type":"audio/ogg","size":11885,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_100.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"lvz0kXyYeZFSbbaz"} +{"uuid":"ylDHwXThWfFCl7W2","deleted":true} +{"name":"v_combo_50.ogg","date":"2023-01-24T19:00:49.849Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_combo_50.ogg","type":"audio/ogg","size":13698,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_combo_50.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"QkNXKuWN3ZCiFFgQ"} +{"uuid":"ccpVDsFteWjRmAWq","deleted":true} +{"name":"bgm_settings.mp3","date":"2023-01-24T19:00:51.610Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bgm_settings.mp3","type":"audio/mpeg","size":648881,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbgm_settings.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"AN4z9ygp71dAIHXy"} +{"uuid":"xGXxwWXFrAKZFqyq","deleted":true} +{"name":"bgm_setsume.mp3","date":"2023-01-24T19:00:53.859Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bgm_setsume.mp3","type":"audio/mpeg","size":377942,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbgm_setsume.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"UpcxhsD8mBKBXMoz"} +{"uuid":"kTHWsvxBUppYG8U0","deleted":true} +{"name":"bgm_result.mp3","date":"2023-01-24T19:00:55.473Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bgm_result.mp3","type":"audio/mpeg","size":641163,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbgm_result.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"xXWHDXT5EdV3KyyO"} +{"uuid":"2sjTviVLzjCU1k8B","deleted":true} +{"name":"v_results_fullcombo2.ogg","date":"2023-01-24T19:00:58.057Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_results_fullcombo2.ogg","type":"audio/ogg","size":19169,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_results_fullcombo2.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"xDHsxaMHzyBF2SmL"} +{"uuid":"P99Ex29I4lW8tAVX","deleted":true} +{"name":"v_results_fullcombo.ogg","date":"2023-01-24T19:00:59.605Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_results_fullcombo.ogg","type":"audio/ogg","size":18416,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_results_fullcombo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"V9lXKr3x4i1fJxni"} +{"uuid":"Rbp39SqR2ufseQBz","deleted":true} +{"name":"v_renda.ogg","date":"2023-01-24T19:01:01.341Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_renda.ogg","type":"audio/ogg","size":19529,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_renda.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"U0C5VTmCBhTMAilj"} +{"uuid":"fgtWpO0uZX6R7MTW","deleted":true} +{"name":"v_fullcombo.ogg","date":"2023-01-24T19:01:02.494Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_fullcombo.ogg","type":"audio/ogg","size":16616,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_fullcombo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"q46QFswCRhGkTSWq"} +{"uuid":"HsgcNylQrInnxFZo","deleted":true} +{"name":"v_diffsel.ogg","date":"2023-01-24T19:01:03.145Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_diffsel.ogg","type":"audio/ogg","size":22637,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_diffsel.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"JsR0pRnMRYubSPck"} +{"uuid":"twQaYkuVgMW8HPPz","deleted":true} +{"name":"se_results_crown.ogg","date":"2023-01-24T19:01:04.155Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_results_crown.ogg","type":"audio/ogg","size":10961,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_results_crown.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"NQ4T4logzurGiB0n"} +{"uuid":"BDxNVcfR2rntHgWy","deleted":true} +{"name":"se_results_countup.ogg","date":"2023-01-24T19:01:04.698Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_results_countup.ogg","type":"audio/ogg","size":3885,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_results_countup.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"eJ5SPR0vXXSS7QDm"} +{"uuid":"SOT65cPidkXXLJpF","deleted":true} +{"name":"se_gamefullcombo.ogg","date":"2023-01-24T19:01:05.470Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_gamefullcombo.ogg","type":"audio/ogg","size":60036,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_gamefullcombo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"MLPa7sdGDqBhRCX4"} +{"uuid":"Y8cpTDIFJdXq0deH","deleted":true} +{"name":"se_gamefail.ogg","date":"2023-01-24T19:01:06.184Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_gamefail.ogg","type":"audio/ogg","size":22502,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_gamefail.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"IJ6Ly4sEx2QY5Ozm"} +{"uuid":"t3VHpj2YQPY9TBjX","deleted":true} +{"name":"bgm_songsel.mp3","date":"2023-01-24T19:01:07.083Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bgm_songsel.mp3","type":"audio/mpeg","size":82769,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbgm_songsel.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"HseloN7LcT6IM9Ta"} +{"uuid":"QgvL348vX9j4SGzp","deleted":true} +{"name":"v_title.ogg","date":"2023-01-24T19:01:09.179Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_title.ogg","type":"audio/ogg","size":28630,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_title.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"me8UIvupoxiXSMb0"} +{"uuid":"zGpUIEV0EqL1vhIN","deleted":true} +{"name":"v_start.ogg","date":"2023-01-24T19:01:09.791Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_start.ogg","type":"audio/ogg","size":22266,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_start.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"wyRrqVc8ev6xoLEG"} +{"uuid":"iUGvHitFpx2zt5xE","deleted":true} +{"name":"v_songsel.ogg","date":"2023-01-24T19:01:10.431Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_songsel.ogg","type":"audio/ogg","size":19601,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_songsel.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Dv1wt51GN5KUJCFJ"} +{"uuid":"MHF0ftNFjqm2vjrj","deleted":true} +{"name":"v_sanka.ogg","date":"2023-01-24T19:01:10.918Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_sanka.ogg","type":"audio/ogg","size":16025,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_sanka.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"agnNrvaraRlFAlcj"} +{"uuid":"O86CrqZl5fJ9ih4S","deleted":true} +{"name":"v_results.ogg","date":"2023-01-24T19:01:11.448Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/v_results.ogg","type":"audio/ogg","size":26595,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fv_results.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"phxI8KxdSK29gPzs"} +{"uuid":"qknOv4EDbX169L7D","deleted":true} +{"name":"se_ka.ogg","date":"2023-01-24T19:01:12.016Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_ka.ogg","type":"audio/ogg","size":5581,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_ka.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"mPR0GzLVAfyAZ9Ny"} +{"uuid":"QlQbfKXCz3DmA29J","deleted":true} +{"name":"se_jump.ogg","date":"2023-01-24T19:01:12.735Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_jump.ogg","type":"audio/ogg","size":9732,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_jump.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"eNDypmokVPMov6x4"} +{"uuid":"B4yoRHOyCWbPfLXg","deleted":true} +{"name":"se_gameclear.ogg","date":"2023-01-24T19:01:13.362Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_gameclear.ogg","type":"audio/ogg","size":42228,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_gameclear.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"8mNqQMAuOl2xSSBR"} +{"uuid":"WxQKMIXI8CIUdQ7u","deleted":true} +{"name":"se_don.ogg","date":"2023-01-24T19:01:14.292Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_don.ogg","type":"audio/ogg","size":10660,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_don.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"rb6S5WlvYeWhikFP"} +{"uuid":"AspO13ChrDA9xd2d","deleted":true} +{"name":"se_cancel.ogg","date":"2023-01-24T19:01:15.284Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_cancel.ogg","type":"audio/ogg","size":7876,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_cancel.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"JvrNdgTuvXdvwChM"} +{"uuid":"epDwyQzFLMzbGXCC","deleted":true} +{"name":"se_balloon.ogg","date":"2023-01-24T19:01:15.985Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_balloon.ogg","type":"audio/ogg","size":7139,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_balloon.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Dm6jExLgovSALPvI"} +{"uuid":"ygUZ5UDTzj50wdOR","deleted":true} +{"name":"neiro_1_ka.ogg","date":"2023-01-24T19:01:16.763Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/neiro_1_ka.ogg","type":"audio/ogg","size":6814,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fneiro_1_ka.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"0DWtI4u1gWOqEa0t"} +{"uuid":"FBywz26QlZ1BSVuP","deleted":true} +{"name":"neiro_1_don.ogg","date":"2023-01-24T19:01:17.784Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/neiro_1_don.ogg","type":"audio/ogg","size":9691,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fneiro_1_don.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"aKYlUhCyvjmOuiSN"} +{"uuid":"BiJhm6rI0NDdt5UV","deleted":true} +{"name":"se_pause.ogg","date":"2023-01-24T19:01:18.289Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_pause.ogg","type":"audio/ogg","size":6621,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_pause.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"kEdL3eUVaCCo0OEW"} +{"uuid":"gk4QNjG0iVKcOCI5","deleted":true} +{"name":"se_calibration.ogg","date":"2023-01-24T19:01:20.179Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/se_calibration.ogg","type":"audio/ogg","size":4704,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fse_calibration.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"rA6ILsuGv42WVC8z"} +{"uuid":"v9Fuhu33QwfXNi2r","deleted":true} +{"name":"don_anim_normal_a.png","date":"2023-01-24T19:01:22.217Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_normal_a.png","type":"image/png","size":558127,"imageWidth":722,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_normal_a.png","thumbnailWidth":129,"thumbnailHeight":330,"uuid":"ISPKOn1Ewl1ub8wt"} +{"uuid":"gj3n82xvBIaVQ6aJ","deleted":true} +{"name":"don_anim_gogostart_a.png","date":"2023-01-24T19:01:23.995Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_gogostart_a.png","type":"image/png","size":852034,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_gogostart_a.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"eqyGRKv2hy8GWoXY"} +{"uuid":"lfbAxkM7pE92NiSl","deleted":true} +{"name":"don_anim_gogo_a.png","date":"2023-01-24T19:01:26.029Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_gogo_a.png","type":"image/png","size":1978020,"imageWidth":2170,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_gogo_a.png","thumbnailWidth":330,"thumbnailHeight":283,"uuid":"6WPSoCAFt43T38iE"} +{"uuid":"RxJM1YUyddEufyMn","deleted":true} +{"name":"don_anim_clear_a.png","date":"2023-01-24T19:01:28.187Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_clear_a.png","type":"image/png","size":1044030,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_clear_a.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"wHKRBN3JitbtPB3l"} +{"uuid":"7AsbaY7W5OjMKDeM","deleted":true} +{"name":"don_anim_10combo_a.png","date":"2023-01-24T19:01:30.947Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_10combo_a.png","type":"image/png","size":831897,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_10combo_a.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"hEETlzo4TipGYL9J"} +{"uuid":"JQB0buJlbURvP5ZJ","deleted":true} +{"name":"don_anim_normal_b2.png","date":"2023-01-24T19:01:32.725Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_normal_b2.png","type":"image/png","size":3900,"imageWidth":722,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_normal_b2.png","thumbnailWidth":129,"thumbnailHeight":330,"uuid":"BmZ9sqVu3ZwVNBXb"} +{"uuid":"0Pea5UEJbUTMsmW1","deleted":true} +{"name":"don_anim_normal_b1.png","date":"2023-01-24T19:01:34.365Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_normal_b1.png","type":"image/png","size":5906,"imageWidth":722,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_normal_b1.png","thumbnailWidth":129,"thumbnailHeight":330,"uuid":"efNiBIkOCQzhsY6y"} +{"uuid":"A1yjAFmTex2vtPRn","deleted":true} +{"name":"don_anim_gogostart_b2.png","date":"2023-01-24T19:01:36.047Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_gogostart_b2.png","type":"image/png","size":5205,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_gogostart_b2.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"VIuD4SSnOAaXtC8i"} +{"uuid":"K4l4bJFM1B2raFJI","deleted":true} +{"name":"don_anim_gogostart_b1.png","date":"2023-01-24T19:01:37.684Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_gogostart_b1.png","type":"image/png","size":10180,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_gogostart_b1.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"YOH2akDJGStyeHTz"} +{"uuid":"eSdfJu5WFka5NriX","deleted":true} +{"name":"don_anim_gogo_b2.png","date":"2023-01-24T19:01:39.919Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_gogo_b2.png","type":"image/png","size":12189,"imageWidth":2170,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_gogo_b2.png","thumbnailWidth":330,"thumbnailHeight":283,"uuid":"NxUXGBwRXq1nMeY8"} +{"uuid":"tqaroQscXdncNytR","deleted":true} +{"name":"don_anim_gogo_b1.png","date":"2023-01-24T19:01:41.691Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_gogo_b1.png","type":"image/png","size":23339,"imageWidth":2170,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_gogo_b1.png","thumbnailWidth":330,"thumbnailHeight":283,"uuid":"AMv1khZNw9v6rC19"} +{"uuid":"N93j3K3FAmteBLb8","deleted":true} +{"name":"don_anim_clear_b2.png","date":"2023-01-24T19:01:43.454Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_clear_b2.png","type":"image/png","size":7035,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_clear_b2.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"fWvms2SJzWhiZWZ7"} +{"uuid":"TPufx7k7vj2QpHXa","deleted":true} +{"name":"don_anim_clear_b1.png","date":"2023-01-24T19:01:45.290Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_clear_b1.png","type":"image/png","size":12614,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_clear_b1.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"EeKyRjiqd0ZgVtuN"} +{"uuid":"smJUHNYAINHLAEMi","deleted":true} +{"name":"don_anim_10combo_b2.png","date":"2023-01-24T19:01:47.067Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_10combo_b2.png","type":"image/png","size":5041,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_10combo_b2.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"ARZKDLutlBUB1le9"} +{"uuid":"mnwoHCv2FtYzwMLV","deleted":true} +{"name":"don_anim_10combo_b1.png","date":"2023-01-24T19:01:49.264Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/don_anim_10combo_b1.png","type":"image/png","size":8979,"imageWidth":1084,"imageHeight":1858,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdon_anim_10combo_b1.png","thumbnailWidth":193,"thumbnailHeight":330,"uuid":"l89OFPeEmFknRM2n"} +{"uuid":"lHEvID0AealkrqUw","deleted":true} +{"name":"favicon.png","date":"2023-01-24T19:01:51.508Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/favicon.png","type":"image/png","size":73772,"imageWidth":1024,"imageHeight":1024,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ffavicon.png","thumbnailWidth":330,"thumbnailHeight":330,"uuid":"o2cFndipDKFc9qI4"} +{"uuid":"dC8GAQg4C2wcDA9G","deleted":true} +{"name":"settings_gamepad.png","date":"2023-01-24T19:01:53.865Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/settings_gamepad.png","type":"image/png","size":36778,"imageWidth":550,"imageHeight":713,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fsettings_gamepad.png","thumbnailWidth":255,"thumbnailHeight":330,"uuid":"ytgb4vPaGuVUBF2j"} +{"name":"kameunagi.png","date":"2023-01-24T19:01:55.498Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/kameunagi.png","type":"image/png","size":27571,"imageWidth":234,"imageHeight":419,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fkameunagi.png","thumbnailWidth":185,"thumbnailHeight":330,"uuid":"ZSAYBNUKSIoEVlP6"} +{"uuid":"sdRLygut3UVn8D8v","deleted":true} +{"name":"results_tetsuohana2.png","date":"2023-01-24T19:01:57.062Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/results_tetsuohana2.png","type":"image/png","size":205571,"imageWidth":584,"imageHeight":1275,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fresults_tetsuohana2.png","thumbnailWidth":152,"thumbnailHeight":330,"uuid":"bttCKBPwpCr6tDYo"} +{"uuid":"GkNvB9H6sc6EfT4q","deleted":true} +{"name":"badge_auto.png","date":"2023-01-24T19:01:57.631Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/badge_auto.png","type":"image/png","size":3532,"imageWidth":86,"imageHeight":86,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/badge_auto.png","thumbnailWidth":86,"thumbnailHeight":86,"uuid":"KwIBSvdDEfwo7ysI"} +{"uuid":"yxVdePZpzxdowCwQ","deleted":true} +{"name":"notes_explosion.png","date":"2023-01-24T19:01:59.274Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/notes_explosion.png","type":"image/png","size":362675,"imageWidth":888,"imageHeight":1110,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fnotes_explosion.png","thumbnailWidth":264,"thumbnailHeight":330,"uuid":"HuubKSgQbKinzPTZ"} +{"uuid":"wSIo7nNphHir2ywZ","deleted":true} +{"name":"difficulty.png","date":"2023-01-24T19:02:01.033Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/difficulty.png","type":"image/png","size":48870,"imageWidth":168,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdifficulty.png","thumbnailWidth":77,"thumbnailHeight":330,"uuid":"bNF75oqCFYDad6Ap"} +{"uuid":"rtMOzoz1MB2x6m5P","deleted":true} +{"name":"results_tetsuohana.png","date":"2023-01-24T19:02:02.630Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/results_tetsuohana.png","type":"image/png","size":198722,"imageWidth":584,"imageHeight":1275,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fresults_tetsuohana.png","thumbnailWidth":152,"thumbnailHeight":330,"uuid":"NfisWdRJRLO6D52G"} +{"uuid":"e8w0vcNoFwDg1K2F","deleted":true} +{"name":"results_mikoshi.png","date":"2023-01-24T19:02:04.463Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/results_mikoshi.png","type":"image/png","size":94713,"imageWidth":553,"imageHeight":416,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fresults_mikoshi.png","thumbnailWidth":330,"thumbnailHeight":249,"uuid":"C15OU8DeQC3jNRQo"} +{"uuid":"g9fhOlQVgxl7U7as","deleted":true} +{"name":"results_flowers.png","date":"2023-01-24T19:02:08.153Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/results_flowers.png","type":"image/png","size":73921,"imageWidth":483,"imageHeight":477,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fresults_flowers.png","thumbnailWidth":330,"thumbnailHeight":326,"uuid":"viF83rlesK0a0DYB"} +{"uuid":"EtE3g7OjEjlakQ6M","deleted":true} +{"name":"bg_don2_6b.png","date":"2023-01-24T19:02:10.887Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_6b.png","type":"image/png","size":56528,"imageWidth":491,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_6b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"yQrM2XIn6pTyrm02"} +{"uuid":"x43z9tPafcjanhgE","deleted":true} +{"name":"bg_don2_6a.png","date":"2023-01-24T19:02:14.563Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_6a.png","type":"image/png","size":65730,"imageWidth":491,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_6a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"px6n4uialSTfupPk"} +{"uuid":"jcYcr8nVWF2htYj7","deleted":true} +{"name":"bg_don2_5b.png","date":"2023-01-24T19:02:18.796Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_5b.png","type":"image/png","size":29019,"imageWidth":490,"imageHeight":310,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_5b.png","thumbnailWidth":330,"thumbnailHeight":209,"uuid":"MCt6kxTNXe31urMp"} +{"uuid":"Q6wpEn2i2UNdUiIH","deleted":true} +{"name":"bg_don2_5a.png","date":"2023-01-24T19:02:20.832Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_5a.png","type":"image/png","size":39200,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_5a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"qH66WzzvEN1OqIBp"} +{"uuid":"jFCy7PBw7jdusQBk","deleted":true} +{"name":"bg_don2_4b.png","date":"2023-01-24T19:02:22.715Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_4b.png","type":"image/png","size":38250,"imageWidth":489,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_4b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"xyKa4YV8dh6XTC1g"} +{"uuid":"Nb83Q6KZtKGuTPru","deleted":true} +{"name":"bg_don2_4a.png","date":"2023-01-24T19:02:25.429Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_4a.png","type":"image/png","size":54412,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_4a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"UG3HlDliwXVDAgVS"} +{"uuid":"aZILJX4271erhLEs","deleted":true} +{"name":"bg_don2_3b.png","date":"2023-01-24T19:02:28.585Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_3b.png","type":"image/png","size":48727,"imageWidth":492,"imageHeight":380,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_3b.png","thumbnailWidth":330,"thumbnailHeight":255,"uuid":"g2uxFstaGC5hzU8d"} +{"uuid":"4pcCi0uu34DITskl","deleted":true} +{"name":"bg_don2_3a.png","date":"2023-01-24T19:02:32.508Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_3a.png","type":"image/png","size":33624,"imageWidth":492,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_3a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"uCbX6CvSvZ31cYgH"} +{"uuid":"6Qg2TSCZLEXo4HSn","deleted":true} +{"name":"bg_don2_2b.png","date":"2023-01-24T19:02:38.021Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_2b.png","type":"image/png","size":74565,"imageWidth":494,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_2b.png","thumbnailWidth":330,"thumbnailHeight":214,"uuid":"99TWQzOOp0hLG561"} +{"uuid":"Rymq8EyQzYJ1EOX4","deleted":true} +{"name":"bg_don2_2a.png","date":"2023-01-24T19:02:38.941Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_2a.png","type":"image/png","size":5836,"imageWidth":41,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_2a.png","thumbnailWidth":41,"thumbnailHeight":276,"uuid":"DfDLDys2cFxrUjOk"} +{"uuid":"vIrREOV18n4tgB4H","deleted":true} +{"name":"bg_don2_1b.png","date":"2023-01-24T19:02:45.735Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_1b.png","type":"image/png","size":6658,"imageWidth":82,"imageHeight":295,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_1b.png","thumbnailWidth":82,"thumbnailHeight":295,"uuid":"X0BhZ5cmhDvdJj3D"} +{"uuid":"af4wZaLUsOyIItQW","deleted":true} +{"name":"bg_don_6b.png","date":"2023-01-24T19:02:49.494Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_6b.png","type":"image/png","size":57015,"imageWidth":491,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_6b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"rkQGj7JRDuPCKJhI"} +{"uuid":"5FF1Y2pg3UUJb10M","deleted":true} +{"name":"bg_don_6a.png","date":"2023-01-24T19:02:51.788Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_6a.png","type":"image/png","size":69233,"imageWidth":491,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_6a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"qByhbTJoH1aHoDVM"} +{"uuid":"uAA4sWKYlR6yWIA0","deleted":true} +{"name":"bg_don_5b.png","date":"2023-01-24T19:02:53.519Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_5b.png","type":"image/png","size":28787,"imageWidth":490,"imageHeight":310,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_5b.png","thumbnailWidth":330,"thumbnailHeight":209,"uuid":"mor4yOBdUSy26b5Y"} +{"uuid":"C1C7SnET3OnQquit","deleted":true} +{"name":"bg_don_5a.png","date":"2023-01-24T19:02:55.433Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_5a.png","type":"image/png","size":33661,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_5a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"nOF4qZS8QoC1wzbS"} +{"uuid":"BGmLHNfN9sYgsAVy","deleted":true} +{"name":"bg_don_4b.png","date":"2023-01-24T19:02:59.564Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_4b.png","type":"image/png","size":37069,"imageWidth":489,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_4b.png","thumbnailWidth":330,"thumbnailHeight":216,"uuid":"FcbUQHiQOrRbSL5c"} +{"uuid":"dDABNypEwqcFfFvh","deleted":true} +{"name":"bg_don_4a.png","date":"2023-01-24T19:03:03.787Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_4a.png","type":"image/png","size":54710,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_4a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"wwgafeVwBu73vWOK"} +{"uuid":"tgmOJnIhjdQvzwSA","deleted":true} +{"name":"bg_don_3b.png","date":"2023-01-24T19:03:06.052Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_3b.png","type":"image/png","size":49344,"imageWidth":492,"imageHeight":380,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_3b.png","thumbnailWidth":330,"thumbnailHeight":255,"uuid":"riYDFwOeoqkGU54m"} +{"uuid":"Xr5ddAFFEkRBcof8","deleted":true} +{"name":"bg_don_3a.png","date":"2023-01-24T19:03:08.046Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_3a.png","type":"image/png","size":33278,"imageWidth":492,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_3a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"xag3qELYjOE7qlCp"} +{"uuid":"BKebRsMxfHhRaNbH","deleted":true} +{"name":"bg_don_2b.png","date":"2023-01-24T19:03:10.437Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_2b.png","type":"image/png","size":72600,"imageWidth":494,"imageHeight":320,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_2b.png","thumbnailWidth":330,"thumbnailHeight":214,"uuid":"MmYoArnvddsSbjj8"} +{"uuid":"0pPe1wMh4fna2QCa","deleted":true} +{"name":"bg_don_2a.png","date":"2023-01-24T19:03:11.203Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_2a.png","type":"image/png","size":4986,"imageWidth":41,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_2a.png","thumbnailWidth":41,"thumbnailHeight":276,"uuid":"gU1C9FZ5qQbfRzr0"} +{"uuid":"tuYK1XfDh4q1GxQL","deleted":true} +{"name":"bg_don_1b.png","date":"2023-01-24T19:03:12.116Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_1b.png","type":"image/png","size":5341,"imageWidth":82,"imageHeight":295,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_1b.png","thumbnailWidth":82,"thumbnailHeight":295,"uuid":"lJIWHfiMlzNllpMa"} +{"uuid":"34fAfKQFOvx02WtI","deleted":true} +{"name":"bg_don_1a.png","date":"2023-01-24T19:03:14.923Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don_1a.png","type":"image/png","size":78522,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don_1a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"CtN6FzIbFj2G38PS"} +{"uuid":"L21dLj9k6e3iL3ov","deleted":true} +{"name":"bg_don2_1a.png","date":"2023-01-24T19:03:16.594Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_don2_1a.png","type":"image/png","size":72698,"imageWidth":490,"imageHeight":276,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_don2_1a.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"tuoXuZ40E9uNyMZG"} +{"uuid":"I7Cn2Im0bEgmUL5N","deleted":true} +{"name":"bg_stage_3.png","date":"2023-01-24T19:03:18.452Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_stage_3.png","type":"image/png","size":8397,"imageWidth":458,"imageHeight":44,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_stage_3.png","thumbnailWidth":330,"thumbnailHeight":32,"uuid":"gGSNsbecGGUCBqa8"} +{"uuid":"xczNLSyLHlAhyOnJ","deleted":true} +{"name":"bg_stage_2.png","date":"2023-01-24T19:03:19.443Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_stage_2.png","type":"image/png","size":4607,"imageWidth":254,"imageHeight":44,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_stage_2.png","thumbnailWidth":254,"thumbnailHeight":44,"uuid":"6Tc7oDmHgH1XkF4o"} +{"uuid":"EiZopBqbEEIIsZA0","deleted":true} +{"name":"bg_stage_1.png","date":"2023-01-24T19:03:20.419Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_stage_1.png","type":"image/png","size":351,"imageWidth":66,"imageHeight":44,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_stage_1.png","thumbnailWidth":66,"thumbnailHeight":44,"uuid":"xuw0UV9yVzGGU19U"} +{"uuid":"fv2tlSTRAZJlNNCY","deleted":true} +{"name":"bg_song_5b.png","date":"2023-01-24T19:03:23.123Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_5b.png","type":"image/png","size":143848,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_5b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"pIlOoYyhVwPq50c8"} +{"uuid":"sllLEMlfwsMs8rUm","deleted":true} +{"name":"bg_song_5a.png","date":"2023-01-24T19:03:25.912Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_5a.png","type":"image/png","size":664932,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_5a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"fSbQHwniL0WVhcah"} +{"uuid":"EdIhs6uIGRDYjc99","deleted":true} +{"name":"bg_song_4b.png","date":"2023-01-24T19:03:27.833Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_4b.png","type":"image/png","size":17309,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_4b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"x02CkCDA4DabapQw"} +{"uuid":"GhekflazY5wJn0EF","deleted":true} +{"name":"bg_song_4a.png","date":"2023-01-24T19:03:29.754Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_4a.png","type":"image/png","size":515648,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_4a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"fb7H3fAVk7D21Li5"} +{"uuid":"6LchsODDloj9FxPu","deleted":true} +{"name":"bg_song_3b.png","date":"2023-01-24T19:03:32.048Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_3b.png","type":"image/png","size":200501,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_3b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"gWoCq7NpbRxpmSBA"} +{"uuid":"2LVrf2AL4kp1paBy","deleted":true} +{"name":"bg_song_3a.png","date":"2023-01-24T19:03:35.284Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_3a.png","type":"image/png","size":1120556,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_3a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"xsKSifSOoS8hX0B2"} +{"uuid":"eIO1whSOW7R3foyC","deleted":true} +{"name":"bg_song_2b.png","date":"2023-01-24T19:03:39.622Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_2b.png","type":"image/png","size":177030,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_2b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"mmJ9XVq2edSL9azd"} +{"uuid":"yQmPJqt43K2MD8Oz","deleted":true} +{"name":"bg_song_2a.png","date":"2023-01-24T19:03:42.138Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_2a.png","type":"image/png","size":925410,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_2a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"Iqg6ObpZ0CyXfCe6"} +{"uuid":"E7uAIbQ2UFmttxBn","deleted":true} +{"name":"bg_song_1b.png","date":"2023-01-24T19:03:43.941Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_1b.png","type":"image/png","size":139289,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_1b.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"Vow882eX1UmUGSfk"} +{"uuid":"WXg85hz481jzpARe","deleted":true} +{"name":"bg_song_1a.png","date":"2023-01-24T19:03:46.139Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_song_1a.png","type":"image/png","size":738901,"imageWidth":1920,"imageHeight":540,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_song_1a.png","thumbnailWidth":330,"thumbnailHeight":93,"uuid":"BIGpVmlDRS1SENsl"} +{"uuid":"28rzEHiZZorDUPcM","deleted":true} +{"name":"mimizu.png","date":"2023-01-24T19:03:46.915Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/mimizu.png","type":"image/png","size":10913,"imageWidth":136,"imageHeight":315,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/mimizu.png","thumbnailWidth":136,"thumbnailHeight":315,"uuid":"Y6yKzsgTWQif1161"} +{"uuid":"xMURB8AA9Wp0IsFg","deleted":true} +{"name":"bg_pause.png","date":"2023-01-24T19:03:48.260Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_pause.png","type":"image/png","size":3801,"imageWidth":104,"imageHeight":180,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_pause.png","thumbnailWidth":104,"thumbnailHeight":180,"uuid":"MswmwUXheJL8Tj38"} +{"uuid":"G5neeoQIKf3n51AX","deleted":true} +{"name":"bg_settings.png","date":"2023-01-24T19:03:50.395Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_settings.png","type":"image/png","size":51028,"imageWidth":512,"imageHeight":435,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_settings.png","thumbnailWidth":330,"thumbnailHeight":281,"uuid":"gvBgTrpRyg69mxMp"} +{"uuid":"ypgvmCwIObatEq5A","deleted":true} +{"name":"Kozuka.otf","date":"2023-01-24T19:03:52.737Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Kozuka.otf","type":"application/vnd.oasis.opendocument.formula-template","size":20528,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FKozuka.otf","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"IOhNoL0zrL3OCTix"} +{"uuid":"4IKnbuB5z0dNSZ6X","deleted":true} +{"name":"taiko.png","date":"2023-01-24T19:03:55.385Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/taiko.png","type":"image/png","size":13900,"imageWidth":138,"imageHeight":810,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftaiko.png","thumbnailWidth":57,"thumbnailHeight":330,"uuid":"VLd6Ovf788lV1yri"} +{"uuid":"JZjbL0AHOCAENUDu","deleted":true} +{"name":"notes.png","date":"2023-01-24T19:03:58.019Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/notes.png","type":"image/png","size":34073,"imageWidth":172,"imageHeight":688,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fnotes.png","thumbnailWidth":83,"thumbnailHeight":330,"uuid":"Cjc1wuxIMkNYe81u"} +{"uuid":"Hizh0jGS1wfLhiYi","deleted":true} +{"name":"notes_hit.png","date":"2023-01-24T19:04:00.204Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/notes_hit.png","type":"image/png","size":41498,"imageWidth":128,"imageHeight":512,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fnotes_hit.png","thumbnailWidth":83,"thumbnailHeight":330,"uuid":"oAlpkXS0W6FDv07u"} +{"uuid":"zCCfw5sZbK8lrit8","deleted":true} +{"name":"notes_drumroll.png","date":"2023-01-24T19:04:02.108Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/notes_drumroll.png","type":"image/png","size":25624,"imageWidth":172,"imageHeight":688,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fnotes_drumroll.png","thumbnailWidth":83,"thumbnailHeight":330,"uuid":"xwVEkVU9u3zhW4Zt"} +{"name":"drum.png","date":"2023-01-24T19:04:04.312Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/drum.png","type":"image/png","size":13900,"imageWidth":138,"imageHeight":810,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fdrum.png","thumbnailWidth":57,"thumbnailHeight":330,"uuid":"QgbslZ5fpIML55Hm"} +{"uuid":"Z9z7QNKMIA9oAqMQ","deleted":true} +{"name":"touch_pause.png","date":"2023-01-24T19:04:04.679Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/touch_pause.png","type":"image/png","size":659,"imageWidth":75,"imageHeight":75,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/touch_pause.png","thumbnailWidth":75,"thumbnailHeight":75,"uuid":"NfSFI5Uid7ejL1Ds"} +{"uuid":"LzhpZEAyzAPvXNqS","deleted":true} +{"name":"touch_fullscreen.png","date":"2023-01-24T19:04:05.660Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/touch_fullscreen.png","type":"image/png","size":667,"imageWidth":75,"imageHeight":75,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/touch_fullscreen.png","thumbnailWidth":75,"thumbnailHeight":75,"uuid":"tHW5lmJIXc6CTmk5"} +{"uuid":"A0bVAfYglhnX4JjX","deleted":true} +{"name":"touch_drum.png","date":"2023-01-24T19:04:07.414Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/touch_drum.png","type":"image/png","size":19937,"imageWidth":842,"imageHeight":436,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftouch_drum.png","thumbnailWidth":330,"thumbnailHeight":171,"uuid":"VyaGBiE2t00k76n3"} +{"uuid":"6lEQJC7JkCKpMhp3","deleted":true} +{"name":"bg_score_p2.png","date":"2023-01-24T19:04:08.365Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_score_p2.png","type":"image/png","size":11475,"imageWidth":256,"imageHeight":108,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_score_p2.png","thumbnailWidth":256,"thumbnailHeight":108,"uuid":"X51ejWXr1c5QXUKk"} +{"uuid":"lnobOZ23aAl21oBh","deleted":true} +{"name":"bg_score_p1.png","date":"2023-01-24T19:04:08.985Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_score_p1.png","type":"image/png","size":11713,"imageWidth":256,"imageHeight":108,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_score_p1.png","thumbnailWidth":256,"thumbnailHeight":108,"uuid":"bE6jQKwXrjWgwMwi"} +{"uuid":"AOc4cKfcb1yDCXsF","deleted":true} +{"name":"bg_genre_def.png","date":"2023-01-24T19:04:11.101Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_def.png","type":"image/png","size":135405,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_def.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"w27WnO7t0FDwftCr"} +{"name":"bg_genre_7.png","date":"2023-01-24T19:04:13.009Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_7.png","type":"image/png","size":135405,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_7.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"B4I7JA3jAKPl1RMl"} +{"uuid":"aReEu35AYwa7MOcf","deleted":true} +{"name":"bg_genre_6.png","date":"2023-01-24T19:04:14.480Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_6.png","type":"image/png","size":79573,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_6.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"Mg5UZtDf29PVjJUw"} +{"uuid":"oInweInFHCiw1n8i","deleted":true} +{"name":"bg_genre_5.png","date":"2023-01-24T19:04:16.700Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_5.png","type":"image/png","size":92806,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_5.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"LE5RSaKz7sQKcXuB"} +{"uuid":"98Nb0kiCvxEft6YN","deleted":true} +{"name":"bg_genre_4.png","date":"2023-01-24T19:04:18.993Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_4.png","type":"image/png","size":90609,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_4.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"BBqb4M0TrxAbQAPV"} +{"uuid":"DSSoWLv8TB4y4Q8d","deleted":true} +{"name":"bg_genre_3.png","date":"2023-01-24T19:04:21.156Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_3.png","type":"image/png","size":105719,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_3.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"ReKyF5sVLRwFKeFS"} +{"uuid":"ciguwYsWpBR7goGm","deleted":true} +{"name":"bg_genre_2.png","date":"2023-01-24T19:04:23.373Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_2.png","type":"image/png","size":84405,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_2.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"XwbCA5XrSe0lOlqO"} +{"uuid":"nCXo0WAYkblWDMya","deleted":true} +{"name":"bg_genre_1.png","date":"2023-01-24T19:04:25.569Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_1.png","type":"image/png","size":88084,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_1.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"FQs4Irb3IXfjaQOc"} +{"uuid":"8e4Vb9Avcy7rgrlR","deleted":true} +{"name":"bg_genre_0.png","date":"2023-01-24T19:04:27.629Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg_genre_0.png","type":"image/png","size":118999,"imageWidth":512,"imageHeight":720,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Fbg_genre_0.png","thumbnailWidth":235,"thumbnailHeight":330,"uuid":"Fbgn6lWkudmQ1OKX"} +{"uuid":"bMsL2zoshVhyTDuX","deleted":true} +{"name":"fireworks_anim.png","date":"2023-01-24T19:04:29.718Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/fireworks_anim.png","type":"image/png","size":1057821,"imageWidth":1840,"imageHeight":1840,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ffireworks_anim.png","thumbnailWidth":330,"thumbnailHeight":330,"uuid":"X2nXtsRcm29xO2ho"} +{"uuid":"hnBrxlOWimOZm154","deleted":true} +{"name":"fire_anim.png","date":"2023-01-24T19:04:31.456Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/fire_anim.png","type":"image/png","size":95905,"imageWidth":2520,"imageHeight":370,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ffire_anim.png","thumbnailWidth":330,"thumbnailHeight":49,"uuid":"Sy1E4CDCdWQnrDlj"} +{"uuid":"RNYQfAXKHUAIHPL7","deleted":true} +{"name":"balloon.png","date":"2023-01-24T19:04:32.046Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/balloon.png","type":"image/png","size":1691,"imageWidth":115,"imageHeight":61,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/balloon.png","thumbnailWidth":115,"thumbnailHeight":61,"uuid":"dmC3XChKv75BKyKH"} +{"uuid":"KXc5yhn876TOmAIV","deleted":true} +{"name":"title-screen.png","date":"2023-01-24T19:04:34.707Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/title-screen.png","type":"image/png","size":1088903,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftitle-screen.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"5CYUCkW0kuJ9gHxw"} +{"uuid":"rYaI4BEIu6Wb7EGV","deleted":true} +{"name":"dancing-don.gif","date":"2023-01-24T19:04:35.738Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/dancing-don.gif","type":"image/gif","size":5433,"imageWidth":120,"imageHeight":115,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/dancing-don.gif","thumbnailWidth":120,"thumbnailHeight":115,"uuid":"D2N2JPwG3szf7VGf"} +{"uuid":"bZY2KJ4OJyQlvzKj","deleted":true} +{"name":"bg-pattern-1.png","date":"2023-01-24T19:04:36.954Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg-pattern-1.png","type":"image/png","size":13634,"imageWidth":200,"imageHeight":200,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/bg-pattern-1.png","thumbnailWidth":200,"thumbnailHeight":200,"uuid":"h7ffulOZVQgWSeoT"} +{"uuid":"3YFbqMSuX7T3G8LY","deleted":true} +{"uuid":"uD8NPPgi7SoVG60E","deleted":true} +{"uuid":"xOUTPuUG2puEBduY","deleted":true} +{"uuid":"kdBU0jpfO99MNhHh","deleted":true} +{"uuid":"YxuzWqEGWj4DKmeq","deleted":true} +{"uuid":"XoQbHoADUmCQCu33","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T19:54:08.743Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"x9BCK0PYtvygiUGR"} +{"uuid":"x9BCK0PYtvygiUGR","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T19:55:18.635Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"PN2b8ImXl3KMcCqL"} +{"uuid":"PN2b8ImXl3KMcCqL","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T19:56:51.874Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"a17xvUO7ilTIAl9C"} +{"uuid":"a17xvUO7ilTIAl9C","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T20:37:43.479Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"U9RlI793hGPDUfST"} +{"uuid":"U9RlI793hGPDUfST","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.ogg","date":"2023-01-24T20:39:00.612Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","type":"audio/ogg","size":6106850,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"0PNeW3VGqbZ4CyCF"} +{"uuid":"0PNeW3VGqbZ4CyCF","deleted":true} +{"name":"2.ogg","date":"2023-01-24T20:39:00.612Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/2.ogg","type":"audio/ogg","size":6106850,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"0PNeW3VGqbZ4CyCF"} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T20:40:49.919Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"T4mR4ntzEypfhyXh"} +{"uuid":"T4mR4ntzEypfhyXh","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T20:42:32.449Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"LGztBf1AWLCyT0Ej"} +{"uuid":"LGztBf1AWLCyT0Ej","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T20:44:57.221Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"53TWGFyVH485znP4"} +{"uuid":"53TWGFyVH485znP4","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T20:46:04.750Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"lkfnTT4J8NlvKubd"} +{"uuid":"lkfnTT4J8NlvKubd","deleted":true} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.tja","date":"2023-01-24T20:47:57.642Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","type":"","size":5022,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.tja","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"3YWZiK68gCcbl2mQ"} +{"uuid":"3YWZiK68gCcbl2mQ","deleted":true} +{"uuid":"0PNeW3VGqbZ4CyCF","deleted":true} +{"name":"1.ogg","date":"2023-01-24T20:39:00.612Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/1.ogg","type":"audio/ogg","size":6106850,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"0PNeW3VGqbZ4CyCF"} +{"name":"PoPiPo.ogg","date":"2023-01-24T21:53:26.821Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/PoPiPo.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"I4ctO97ENbNCRefR"} +{"uuid":"I4ctO97ENbNCRefR","deleted":true} +{"name":"2.ogg","date":"2023-01-24T21:53:26.821Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/2.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"I4ctO97ENbNCRefR"} +{"uuid":"0PNeW3VGqbZ4CyCF","deleted":true} +{"name":"122.ogg","date":"2023-01-24T20:39:00.612Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/122.ogg","type":"audio/ogg","size":6106850,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"0PNeW3VGqbZ4CyCF"} +{"uuid":"I4ctO97ENbNCRefR","deleted":true} +{"name":"1.ogg","date":"2023-01-24T21:53:26.821Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/1.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"I4ctO97ENbNCRefR"} +{"uuid":"0PNeW3VGqbZ4CyCF","deleted":true} +{"name":"2.ogg","date":"2023-01-24T20:39:00.612Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/2.ogg","type":"audio/ogg","size":6106850,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"0PNeW3VGqbZ4CyCF"} +{"uuid":"I4ctO97ENbNCRefR","deleted":true} +{"uuid":"0PNeW3VGqbZ4CyCF","deleted":true} +{"name":"PoPiPo.ogg","date":"2023-01-24T22:01:36.395Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/PoPiPo.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"9t9dMBT88J9Sn83i"} +{"uuid":"9t9dMBT88J9Sn83i","deleted":true} +{"name":"2.ogg","date":"2023-01-24T22:01:36.395Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/2.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"9t9dMBT88J9Sn83i"} +{"name":"The Disappearance of Hatsune Miku -DEAD END-.ogg","date":"2023-01-24T22:02:03.603Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/The%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","type":"audio/ogg","size":6106850,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"fsOtR4Km8EqAHuMv"} +{"uuid":"fsOtR4Km8EqAHuMv","deleted":true} +{"name":"1.ogg","date":"2023-01-24T22:02:03.603Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/1.ogg","type":"audio/ogg","size":6106850,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FThe%20Disappearance%20of%20Hatsune%20Miku%20-DEAD%20END-.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"fsOtR4Km8EqAHuMv"} +{"uuid":"9t9dMBT88J9Sn83i","deleted":true} +{"name":"PoPiPo.ogg","date":"2023-01-24T22:16:08.596Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/PoPiPo.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"jRkr9zeTmsKFyW79"} +{"uuid":"jRkr9zeTmsKFyW79","deleted":true} +{"name":"2.ogg","date":"2023-01-24T22:16:08.596Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/2.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"jRkr9zeTmsKFyW79"} +{"uuid":"jRkr9zeTmsKFyW79","deleted":true} +{"name":"PoPiPo.ogg","date":"2023-01-24T22:22:40.438Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/PoPiPo.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"I1gQt6JaU4xpIQvm"} +{"uuid":"I1gQt6JaU4xpIQvm","deleted":true} +{"name":"2.ogg","date":"2023-01-24T22:22:40.438Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/2.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"I1gQt6JaU4xpIQvm"} +{"uuid":"mRvWBVc6NqmPTioj","deleted":true} +{"uuid":"I1gQt6JaU4xpIQvm","deleted":true} +{"name":"3.ogg","date":"2023-01-24T22:22:40.438Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/3.ogg","type":"audio/ogg","size":1596414,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FPoPiPo.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"I1gQt6JaU4xpIQvm"} +{"name":"Deep Sea Girl.ogg","date":"2023-01-24T22:53:01.244Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Deep%20Sea%20Girl.ogg","type":"audio/ogg","size":2723826,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FDeep%20Sea%20Girl.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"dWPOnnkUCVVekOSq"} +{"uuid":"dWPOnnkUCVVekOSq","deleted":true} +{"name":"4.ogg","date":"2023-01-24T22:53:01.244Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/4.ogg","type":"audio/ogg","size":2723826,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FDeep%20Sea%20Girl.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"dWPOnnkUCVVekOSq"} +{"name":"Last Goodbye.ogg","date":"2023-01-24T23:06:53.176Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Last%20Goodbye.ogg","type":"audio/ogg","size":2464501,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FLast%20Goodbye.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"mwF2SZefoLRLbCmJ"} +{"uuid":"mwF2SZefoLRLbCmJ","deleted":true} +{"name":"5.ogg","date":"2023-01-24T23:06:53.176Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/5.ogg","type":"audio/ogg","size":2464501,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FLast%20Goodbye.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"mwF2SZefoLRLbCmJ"} +{"name":"audio.mp3","date":"2023-01-24T23:49:05.772Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/audio.mp3","type":"audio/mpeg","size":1601270,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Faudio.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"yfVSYjW4z0EutCsi"} +{"uuid":"yfVSYjW4z0EutCsi","deleted":true} +{"name":"6.mp3","date":"2023-01-24T23:49:05.772Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/6.mp3","type":"audio/mpeg","size":1601270,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Faudio.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"yfVSYjW4z0EutCsi"} +{"uuid":"yfVSYjW4z0EutCsi","deleted":true} +{"name":"6.ogg","date":"2023-01-24T23:49:05.772Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/6.ogg","type":"audio/mpeg","size":1601270,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Faudio.mp3","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"yfVSYjW4z0EutCsi"} +{"name":"Super Smash Bros. Brawl Main Theme.ogg","date":"2023-01-25T01:19:38.196Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Super%20Smash%20Bros.%20Brawl%20Main%20Theme.ogg","type":"audio/ogg","size":5476032,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSuper%20Smash%20Bros.%20Brawl%20Main%20Theme.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"7ZK1K4YjvdbX1MTP"} +{"uuid":"7ZK1K4YjvdbX1MTP","deleted":true} +{"name":"6.ogg","date":"2023-01-25T01:19:38.196Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/6.ogg","type":"audio/ogg","size":5476032,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSuper%20Smash%20Bros.%20Brawl%20Main%20Theme.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"7ZK1K4YjvdbX1MTP"} +{"uuid":"yfVSYjW4z0EutCsi","deleted":true} +{"uuid":"7ZK1K4YjvdbX1MTP","deleted":true} +{"name":"Super Smash Bros. Brawl Main Theme.ogg","date":"2023-01-25T01:26:02.382Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Super%20Smash%20Bros.%20Brawl%20Main%20Theme.ogg","type":"audio/ogg","size":5476032,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSuper%20Smash%20Bros.%20Brawl%20Main%20Theme.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"NeLmGikEYtVSMCyP"} +{"uuid":"NeLmGikEYtVSMCyP","deleted":true} +{"name":"6.ogg","date":"2023-01-25T01:26:02.382Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/6.ogg","type":"audio/ogg","size":5476032,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSuper%20Smash%20Bros.%20Brawl%20Main%20Theme.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"NeLmGikEYtVSMCyP"} +{"uuid":"NeLmGikEYtVSMCyP","deleted":true} +{"name":"7.ogg","date":"2023-01-25T01:26:02.382Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/7.ogg","type":"audio/ogg","size":5476032,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSuper%20Smash%20Bros.%20Brawl%20Main%20Theme.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"NeLmGikEYtVSMCyP"} +{"uuid":"5CYUCkW0kuJ9gHxw","deleted":true} +{"name":"title-screen.png","date":"2023-01-25T01:59:57.774Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/title-screen.png","type":"image/png","size":1726404,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftitle-screen.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"nTKo9XtkPiLMwfk6"} +{"uuid":"1NwwkFHZg3aXsrJY","deleted":true} +{"name":"title-screen.jpg","date":"2023-01-25T02:01:42.704Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/title-screen.jpg","type":"image/jpeg","size":1726404,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftitle-screen.jpg","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"8zPYyxBU4SVoCIih"} +{"uuid":"8zPYyxBU4SVoCIih","deleted":true} +{"uuid":"nTKo9XtkPiLMwfk6","deleted":true} +{"name":"Safeimagekit-resized-img.png","date":"2023-01-25T02:08:27.951Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Safeimagekit-resized-img.png","type":"image/png","size":3141816,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSafeimagekit-resized-img.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"MChFxe4qbnb8Cqhc"} +{"uuid":"MChFxe4qbnb8Cqhc","deleted":true} +{"name":"title-screen.png","date":"2023-01-25T02:08:27.951Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/title-screen.png","type":"image/png","size":3141816,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSafeimagekit-resized-img.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"MChFxe4qbnb8Cqhc"} +{"name":"Cirno's Perfect Math Class.ogg","date":"2023-01-25T02:11:19.606Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Cirno's%20Perfect%20Math%20Class.ogg","type":"audio/ogg","size":15301784,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FCirno's%20Perfect%20Math%20Class.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"1AdioF3MxQ1AY8Z2"} +{"uuid":"1AdioF3MxQ1AY8Z2","deleted":true} +{"name":"8.ogg","date":"2023-01-25T02:11:19.606Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/8.ogg","type":"audio/ogg","size":15301784,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FCirno's%20Perfect%20Math%20Class.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"1AdioF3MxQ1AY8Z2"} +{"name":"Brinstar (Melee).ogg","date":"2023-01-25T02:48:16.106Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Brinstar%20(Melee).ogg","type":"audio/ogg","size":1342631,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FBrinstar%20(Melee).ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"iyQfws9DmRI6Tq2y"} +{"uuid":"iyQfws9DmRI6Tq2y","deleted":true} +{"name":"9.ogg","date":"2023-01-25T02:48:16.106Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/9.ogg","type":"audio/ogg","size":1342631,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FBrinstar%20(Melee).ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"iyQfws9DmRI6Tq2y"} +{"name":"INTERSTELLA 5555.ogg","date":"2023-01-25T03:09:13.149Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/INTERSTELLA%205555.ogg","type":"audio/ogg","size":29336019,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FINTERSTELLA%205555.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"E3QIGy6mmx2wsc3Y"} +{"uuid":"E3QIGy6mmx2wsc3Y","deleted":true} +{"name":"10.ogg","date":"2023-01-25T03:09:13.149Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/10.ogg","type":"audio/ogg","size":29336019,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FINTERSTELLA%205555.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"E3QIGy6mmx2wsc3Y"} +{"uuid":"E3QIGy6mmx2wsc3Y","deleted":true} +{"name":"FREEDOM D↓VE.ogg","date":"2023-01-25T04:08:34.251Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/FREEDOM%20D%E2%86%93VE.ogg","type":"audio/ogg","size":4212493,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FFREEDOM%20D%E2%86%93VE.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"sBSgKdsenBHBmgnL"} +{"uuid":"sBSgKdsenBHBmgnL","deleted":true} +{"name":"10.ogg","date":"2023-01-25T04:08:34.251Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/10.ogg","type":"audio/ogg","size":4212493,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FFREEDOM%20D%E2%86%93VE.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"sBSgKdsenBHBmgnL"} +{"name":"Good time.ogg","date":"2023-01-25T17:50:45.414Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Good%20time.ogg","type":"audio/ogg","size":2091498,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FGood%20time.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"djaw6t8x1Fbd9u09"} +{"uuid":"djaw6t8x1Fbd9u09","deleted":true} +{"name":"11.ogg","date":"2023-01-25T17:50:45.414Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/11.ogg","type":"audio/ogg","size":2091498,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FGood%20time.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"djaw6t8x1Fbd9u09"} +{"name":"Mottai Night Land.ogg","date":"2023-01-25T18:12:21.477Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Mottai%20Night%20Land.ogg","type":"audio/ogg","size":3751157,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FMottai%20Night%20Land.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"HyugLBxLA72Q8d8I"} +{"uuid":"HyugLBxLA72Q8d8I","deleted":true} +{"name":"13.ogg","date":"2023-01-25T18:12:21.477Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/13.ogg","type":"audio/ogg","size":3751157,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FMottai%20Night%20Land.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"HyugLBxLA72Q8d8I"} +{"name":"Nekozilla.ogg","date":"2023-01-25T18:12:59.119Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Nekozilla.ogg","type":"audio/ogg","size":2396590,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FNekozilla.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"KP5sTb5XAdn1rycY"} +{"uuid":"KP5sTb5XAdn1rycY","deleted":true} +{"name":"12.ogg","date":"2023-01-25T18:12:59.119Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/12.ogg","type":"audio/ogg","size":2396590,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FNekozilla.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"KP5sTb5XAdn1rycY"} +{"name":"Deja Vu.ogg","date":"2023-01-26T17:47:09.780Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Deja%20Vu.ogg","type":"audio/ogg","size":1872527,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FDeja%20Vu.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Fv2oxqGo2xVrvNL9"} +{"uuid":"Fv2oxqGo2xVrvNL9","deleted":true} +{"name":"14.ogg","date":"2023-01-26T17:47:09.780Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/14.ogg","type":"audio/ogg","size":1872527,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FDeja%20Vu.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Fv2oxqGo2xVrvNL9"} +{"name":"Sky High.ogg","date":"2023-01-26T19:22:15.750Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Sky%20High.ogg","type":"audio/ogg","size":571015,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSky%20High.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"dC1qpAdpXyQT7ORT"} +{"uuid":"dC1qpAdpXyQT7ORT","deleted":true} +{"name":"15.ogg","date":"2023-01-26T19:22:15.750Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/15.ogg","type":"audio/ogg","size":571015,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSky%20High.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"dC1qpAdpXyQT7ORT"} +{"name":"Brinstar (Melee).ogg","date":"2023-01-26T19:33:36.043Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/Brinstar%20(Melee).ogg","type":"audio/ogg","size":1342631,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FBrinstar%20(Melee).ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"VcXJYwTtgSMqIgIz"} +{"uuid":"VcXJYwTtgSMqIgIz","deleted":true} +{"name":"16.ogg","date":"2023-01-26T19:33:36.043Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/16.ogg","type":"audio/ogg","size":1342631,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FBrinstar%20(Melee).ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"VcXJYwTtgSMqIgIz"} +{"uuid":"MChFxe4qbnb8Cqhc","deleted":true} +{"name":"title-screen.jpg","date":"2023-01-31T17:48:14.742Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/title-screen.jpg","type":"image/jpeg","size":1726404,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftitle-screen.jpg","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"T8jn2gKCtilEi50P"} +{"uuid":"T8jn2gKCtilEi50P","deleted":true} +{"name":"title-screen.png","date":"2023-02-09T03:53:34.411Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/title-screen.png","type":"image/png","size":2418878,"imageWidth":1920,"imageHeight":1080,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2Ftitle-screen.png","thumbnailWidth":330,"thumbnailHeight":186,"uuid":"4hFGbbBgeWvAIaPu"} +{"name":"LECIEL GLISSANDO.ogg","date":"2023-02-09T04:26:53.091Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/LECIEL%20GLISSANDO.ogg","type":"audio/ogg","size":7984228,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FLECIEL%20GLISSANDO.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Yzi3KlzTgoHpj6Zs"} +{"uuid":"Yzi3KlzTgoHpj6Zs","deleted":true} +{"name":"18.ogg","date":"2023-02-09T04:26:53.091Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/18.ogg","type":"audio/ogg","size":7984228,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FLECIEL%20GLISSANDO.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"Yzi3KlzTgoHpj6Zs"} +{"name":"SAVE the World.ogg","date":"2023-02-13T18:25:49.345Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/SAVE%20the%20World.ogg","type":"audio/ogg","size":2158183,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSAVE%20the%20World.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"RXOcUtHvR1Zm4W1P"} +{"uuid":"RXOcUtHvR1Zm4W1P","deleted":true} +{"name":"19.ogg","date":"2023-02-13T18:25:49.345Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/19.ogg","type":"audio/ogg","size":2158183,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FSAVE%20the%20World.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"RXOcUtHvR1Zm4W1P"} +{"name":"U.N. Owen was Her.ogg","date":"2023-03-04T01:51:39.804Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/U.N.%20Owen%20was%20Her.ogg","type":"audio/ogg","size":2614035,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FU.N.%20Owen%20was%20Her.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"2GCmT8KHCbxVSgNn"} +{"uuid":"2GCmT8KHCbxVSgNn","deleted":true} +{"name":"20.ogg","date":"2023-03-04T01:51:39.804Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/20.ogg","type":"audio/ogg","size":2614035,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/thumbnails%2FU.N.%20Owen%20was%20Her.ogg","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"2GCmT8KHCbxVSgNn"} +{"name":"favicon.ico","date":"2023-09-01T01:30:04.985Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/favicon.ico","type":"image/vnd.microsoft.icon","size":15406,"imageWidth":48,"imageHeight":48,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/favicon.ico","thumbnailWidth":48,"thumbnailHeight":48,"uuid":"qd4f8c0Ksq9ytR8s"} +{"uuid":"qd4f8c0Ksq9ytR8s","deleted":true} +{"name":"favicon.ico","date":"2023-09-01T02:13:40.768Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/favicon.ico","type":"image/vnd.microsoft.icon","size":15406,"imageWidth":48,"imageHeight":48,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/favicon.ico","thumbnailWidth":48,"thumbnailHeight":48,"uuid":"GekSIMw1pWJEt6tA"} +{"uuid":"GekSIMw1pWJEt6tA","deleted":true} +{"name":"favicon.ico","date":"2023-09-01T03:03:13.253Z","url":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/favicon.ico","type":"image/vnd.microsoft.icon","size":15406,"imageWidth":48,"imageHeight":48,"thumbnail":"https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/favicon.ico","thumbnailWidth":48,"thumbnailHeight":48,"uuid":"ghfvhRCjUiYkJRdS"} diff --git a/Unity快速开始清单.md b/Unity快速开始清单.md new file mode 100644 index 0000000..841513f --- /dev/null +++ b/Unity快速开始清单.md @@ -0,0 +1,362 @@ +# Unity 迁移快速开始清单 + +## 📅 每日任务清单 + +### 第1天:环境搭建 +- [ ] 下载并安装Unity Hub +- [ ] 安装Unity 2022.3 LTS +- [ ] 安装Visual Studio Community +- [ ] 创建Unity账号 +- [ ] 激活个人版许可证 +- [ ] 创建测试项目"TaikoUnityTest" +- [ ] 熟悉Unity界面5分钟 + +### 第2-3天:基础学习 +- [ ] 观看"Unity入门"教程(1-2小时) +- [ ] 创建第一个GameObject +- [ ] 创建第一个C#脚本 +- [ ] 运行第一个程序 +- [ ] 学习Transform组件(Position, Rotation, Scale) +- [ ] 学习Sprite Renderer + +### 第4-5天:C#编程 +- [ ] 学习C#变量类型 +- [ ] 学习C#类和函数 +- [ ] 学习MonoBehaviour生命周期(Start, Update) +- [ ] 创建一个简单的移动脚本 +- [ ] 学习Input系统 +- [ ] 学习Debug.Log调试 + +### 第6-7天:简单Demo +- [ ] 创建音符Sprite +- [ ] 创建音符移动脚本 +- [ ] 创建判定线 +- [ ] 实现按键检测 +- [ ] 实现简单的分数系统 +- [ ] 添加背景音乐 + +--- + +## 🛠️ 开发阶段清单 + +### 第1周:项目搭建 +- [ ] 创建正式项目"TaikoUnity" +- [ ] 创建文件夹结构 +- [ ] 创建基础脚本框架 + - [ ] GameManager.cs + - [ ] NoteManager.cs + - [ ] ScoreManager.cs + - [ ] InputManager.cs + - [ ] UIManager.cs +- [ ] 创建数据类(GameData.cs) +- [ ] 测试脚本是否能正常编译 + +### 第2周:核心功能 +- [ ] 实现Note基类 +- [ ] 实现DonNote和KaNote +- [ ] 实现InputManager输入检测 +- [ ] 实现判定系统 +- [ ] 实现分数计算 +- [ ] 测试单个音符的打击 + +### 第3周:谱面系统 +- [ ] 创建TJAParser解析器 +- [ ] 测试解析单个.tja文件 +- [ ] 实现ChartLoader +- [ ] 实现音符自动生成 +- [ ] 测试完整歌曲流程 + +### 第4周:音频和UI +- [ ] 实现AudioManager +- [ ] 导入音频资源 +- [ ] 实现音乐同步 +- [ ] 创建UI界面 +- [ ] 实现分数显示 +- [ ] 实现连击显示 + +### 第5-6周:场景和流程 +- [ ] 创建主菜单场景 +- [ ] 创建选歌场景 +- [ ] 创建游戏场景 +- [ ] 实现场景切换 +- [ ] 实现游戏开始倒计时 +- [ ] 实现游戏结束和结果界面 + +### 第7-8周:优化和完善 +- [ ] 添加打击特效 +- [ ] 添加动画 +- [ ] 实现对象池优化 +- [ ] 添加设置界面 +- [ ] 添加音频延迟调整 +- [ ] 添加判定时间窗口调整 +- [ ] 全面测试 + +--- + +## 📋 功能实现优先级 + +### P0 - 必须实现(核心玩法) +1. ✅ 音符从右向左移动 +2. ✅ 按键判定(Don/Ka) +3. ✅ 分数计算 +4. ✅ 连击系统 +5. ✅ 音乐播放和同步 +6. ✅ 谱面加载 + +### P1 - 重要功能 +1. ⭐ 主菜单 +2. ⭐ 选歌界面 +3. ⭐ 结果界面 +4. ⭐ 大音符支持 +5. ⭐ 连打支持 +6. ⭐ 气球音符支持 + +### P2 - 增强体验 +1. 💡 打击特效 +2. 💡 音效 +3. 💡 背景动画 +4. 💡 难度选择 +5. 💡 暂停功能 +6. 💡 设置界面 + +### P3 - 高级功能 +1. 🚀 多人模式 +2. 🚀 自定义皮肤 +3. 🚀 成就系统 +4. 🚀 排行榜 +5. 🚀 回放系统 + +--- + +## 🎯 每周检查点 + +### 第1周检查 +- ✅ Unity环境已搭建 +- ✅ 能创建GameObject和脚本 +- ✅ 理解Start()和Update()的作用 +- ✅ 能让物体移动 + +### 第2周检查 +- ✅ 项目结构已创建 +- ✅ 核心脚本框架完成 +- ✅ 能编译运行无错误 + +### 第4周检查 +- ✅ 能打击单个音符 +- ✅ 判定系统工作正常 +- ✅ 分数能正确计算 + +### 第6周检查 +- ✅ 能加载.tja谱面 +- ✅ 音符能按谱面生成 +- ✅ 音乐能正常播放 +- ✅ 音乐和音符同步 + +### 第8周检查 +- ✅ 完整游戏流程跑通 +- ✅ UI界面完整 +- ✅ 能选歌并游玩 +- ✅ 能看到结果 + +### 第12周检查(最终) +- ✅ 所有核心功能完成 +- ✅ 优化完成,运行流畅 +- ✅ 测试通过 +- ✅ 能打包发布 + +--- + +## 🔧 调试清单 + +遇到问题时按此清单检查: + +### 脚本相关 +- [ ] 脚本是否附加到GameObject上? +- [ ] 脚本名称和类名是否一致? +- [ ] public变量是否在Inspector赋值? +- [ ] 是否有编译错误(查看Console)? +- [ ] 是否调用了Destroy但还在使用对象? + +### 音符不显示 +- [ ] Sprite是否正确赋值? +- [ ] Sprite Renderer是否启用? +- [ ] Position是否在镜头范围内? +- [ ] Sorting Layer是否正确? +- [ ] GameObject是否激活(Active)? + +### 音符不移动 +- [ ] Note脚本是否附加? +- [ ] Update()函数是否正确? +- [ ] speed值是否为0? +- [ ] Time.timeScale是否为0(暂停状态)? + +### 输入无响应 +- [ ] InputManager是否添加到场景中? +- [ ] 按键设置是否正确? +- [ ] 是否有音符在判定范围内? +- [ ] 音符Tag是否设置为"Note"? + +### 音乐不播放 +- [ ] AudioSource组件是否存在? +- [ ] AudioClip是否赋值? +- [ ] 音量是否为0? +- [ ] 是否调用了Play()? +- [ ] 音频文件是否正确导入? + +### 谱面解析失败 +- [ ] 文件路径是否正确? +- [ ] 文件是否在StreamingAssets文件夹? +- [ ] .tja文件格式是否正确? +- [ ] 是否有中文编码问题? + +--- + +## 📖 学习资源速查 + +### Unity官方 +- Unity Learn: https://learn.unity.com/ +- 脚本API: https://docs.unity3d.com/ScriptReference/ +- 手册: https://docs.unity3d.com/Manual/ + +### C#学习 +- Microsoft Learn: https://learn.microsoft.com/zh-cn/dotnet/csharp/ +- C# 基础教程: https://www.runoob.com/csharp/csharp-tutorial.html + +### 视频教程 +- Brackeys (YouTube): 基础到进阶 +- M_Studio (Bilibili): Unity中文教程 +- Sykoo (YouTube): 节奏游戏专题 + +### 社区求助 +- Unity官方论坛: https://forum.unity.com/ +- Stack Overflow: https://stackoverflow.com/questions/tagged/unity3d +- Unite China论坛: https://connect.unity.com/ +- Discord: Unity Game Dev Community + +--- + +## 💾 代码片段速查 + +### 创建GameObject +```csharp +GameObject obj = new GameObject("MyObject"); +GameObject obj = Instantiate(prefab); +GameObject obj = Instantiate(prefab, position, Quaternion.identity); +``` + +### 查找GameObject +```csharp +GameObject obj = GameObject.Find("ObjectName"); +GameObject obj = GameObject.FindGameObjectWithTag("Player"); +GameObject[] objs = GameObject.FindGameObjectsWithTag("Note"); +``` + +### 组件操作 +```csharp +// 获取组件 +SpriteRenderer sr = GetComponent(); +SpriteRenderer sr = gameObject.GetComponent(); + +// 添加组件 +AudioSource audio = gameObject.AddComponent(); + +// 启用/禁用组件 +sr.enabled = false; +``` + +### 移动对象 +```csharp +// 直接设置位置 +transform.position = new Vector3(x, y, z); + +// 相对移动 +transform.position += Vector3.left * speed * Time.deltaTime; +transform.Translate(Vector3.left * speed * Time.deltaTime); +``` + +### 输入检测 +```csharp +// 按键按下(一次) +if(Input.GetKeyDown(KeyCode.Space)) { } + +// 按键持续按住 +if(Input.GetKey(KeyCode.Space)) { } + +// 按键松开 +if(Input.GetKeyUp(KeyCode.Space)) { } + +// 轴输入(-1到1) +float h = Input.GetAxis("Horizontal"); +``` + +### 音频播放 +```csharp +// 播放 +audioSource.Play(); +audioSource.PlayOneShot(clip); + +// 停止 +audioSource.Stop(); +audioSource.Pause(); +``` + +### 协程(延迟执行) +```csharp +StartCoroutine(DelayFunction()); + +IEnumerator DelayFunction() +{ + yield return new WaitForSeconds(2f); + // 2秒后执行 +} +``` + +### 场景加载 +```csharp +using UnityEngine.SceneManagement; + +SceneManager.LoadScene("SceneName"); +SceneManager.LoadScene(0); // 按索引加载 +``` + +--- + +## ⚡ 快捷键速查 + +### Unity编辑器 +- `Ctrl + S`: 保存场景 +- `Ctrl + Shift + S`: 另存场景 +- `Ctrl + P`: 播放/停止 +- `Ctrl + Shift + P`: 暂停 +- `F`: 聚焦到选中对象 +- `Ctrl + D`: 复制对象 +- `Ctrl + Z`: 撤销 +- `Ctrl + Y`: 重做 + +### Visual Studio +- `F5`: 启动调试 +- `F9`: 设置断点 +- `F10`: 单步跳过 +- `F11`: 单步进入 +- `Ctrl + K, Ctrl + C`: 注释 +- `Ctrl + K, Ctrl + U`: 取消注释 +- `Ctrl + .`: 快速操作 + +--- + +## 📞 获取帮助 + +如果遇到问题: + +1. **查看Console窗口**:错误信息通常很有帮助 +2. **Google搜索错误信息**:加上"Unity"关键词 +3. **查看Unity文档**:官方API文档非常详细 +4. **提问时提供**: + - 错误信息截图 + - 相关代码 + - Unity版本 + - 想达到的效果 + +--- + +**记住**:每个程序员都是从零开始的,遇到问题是正常的,坚持学习就能成功!💪 diff --git a/Unity示例代码合集.cs b/Unity示例代码合集.cs new file mode 100644 index 0000000..d42bec7 --- /dev/null +++ b/Unity示例代码合集.cs @@ -0,0 +1,1158 @@ +/* + * Unity Taiko 示例代码合集 + * 可以直接复制使用的完整代码示例 + */ + +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.SceneManagement; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +// ==================== 数据结构 ==================== + +/// +/// 音符类型枚举 +/// +public enum NoteType +{ + Don, // 红色咚 + Ka, // 蓝色咔 + DaiDon, // 大咚 + DaiKa, // 大咔 + Drumroll, // 连打 + Balloon // 气球 +} + +/// +/// 判定结果枚举 +/// +public enum JudgeResult +{ + Perfect, // 良 + Good, // 可 + Bad, // 不可 + Miss // 未打中 +} + +/// +/// 歌曲数据 +/// +[Serializable] +public class SongData +{ + public string songId; + public string title; + public string subtitle; + public float bpm; + public string audioFile; + public float offset; +} + +/// +/// 音符数据 +/// +[Serializable] +public class NoteData +{ + public NoteType type; + public float time; // 出现时间(秒) + public float endTime; // 结束时间(连打和气球用) + public int hitCount; // 需要打击次数(气球用) + public bool isHit; // 是否已被打击 +} + +/// +/// 谱面数据 +/// +[Serializable] +public class ChartData +{ + public SongData song; + public List notes = new List(); +} + +// ==================== 游戏管理器 ==================== + +/// +/// 游戏主管理器(单例模式) +/// 使用方法:GameManager.Instance.方法名() +/// +public class GameManager : MonoBehaviour +{ + // 单例实例 + public static GameManager Instance { get; private set; } + + [Header("游戏状态")] + public bool isPlaying = false; + public float gameTime = 0f; + + [Header("当前歌曲")] + public SongData currentSong; + public ChartData currentChart; + + void Awake() + { + // 单例模式实现 + if (Instance == null) + { + Instance = this; + DontDestroyOnLoad(gameObject); // 场景切换时不销毁 + } + else + { + Destroy(gameObject); + } + } + + void Update() + { + if (isPlaying) + { + // 更新游戏时间(由AudioManager提供) + if (AudioManager.Instance != null) + { + gameTime = AudioManager.Instance.GetMusicTime(); + } + } + } + + public void StartGame(SongData song) + { + currentSong = song; + SceneManager.LoadScene("Game"); + } + + public void PauseGame() + { + isPlaying = false; + Time.timeScale = 0f; + AudioManager.Instance?.PauseMusic(); + } + + public void ResumeGame() + { + isPlaying = true; + Time.timeScale = 1f; + AudioManager.Instance?.ResumeMusic(); + } + + public void EndGame() + { + isPlaying = false; + // 显示结果界面 + UIManager.Instance?.ShowResultPanel(); + } +} + +// ==================== 音符管理器 ==================== + +/// +/// 音符管理器 - 负责生成和管理所有音符 +/// 在Unity中:创建空GameObject,命名为"NoteManager",添加此脚本 +/// +public class NoteManager : MonoBehaviour +{ + [Header("音符预制体")] + public GameObject donNotePrefab; + public GameObject kaNotePrefab; + public GameObject daiDonNotePrefab; + public GameObject daiKaNotePrefab; + public GameObject drumrollPrefab; + public GameObject balloonPrefab; + + [Header("音符配置")] + public float noteSpeed = 5f; // 音符移动速度 + public float spawnDistance = 10f; // 音符生成位置(X坐标) + public float anticipationTime = 2.5f; // 提前生成时间(秒) + + private ChartData currentChart; + private List activeNotes = new List(); + private int nextNoteIndex = 0; + + public void LoadChart(ChartData chart) + { + currentChart = chart; + nextNoteIndex = 0; + + // 清除旧音符 + foreach (Note note in activeNotes) + { + if (note != null) + Destroy(note.gameObject); + } + activeNotes.Clear(); + } + + void Update() + { + if (currentChart == null || !GameManager.Instance.isPlaying) + return; + + // 根据当前游戏时间生成音符 + SpawnNotesAtTime(GameManager.Instance.gameTime); + + // 清理已销毁的音符 + activeNotes.RemoveAll(note => note == null); + } + + void SpawnNotesAtTime(float currentTime) + { + // 检查是否有应该生成的音符 + while (nextNoteIndex < currentChart.notes.Count) + { + NoteData noteData = currentChart.notes[nextNoteIndex]; + + // 如果音符时间 - 提前时间 <= 当前时间,则生成 + if (noteData.time - anticipationTime <= currentTime) + { + SpawnNote(noteData); + nextNoteIndex++; + } + else + { + break; // 后面的音符还不到生成时间 + } + } + } + + void SpawnNote(NoteData noteData) + { + GameObject prefab = GetNotePrefab(noteData.type); + + if (prefab == null) + { + Debug.LogWarning($"找不到音符类型 {noteData.type} 的预制体"); + return; + } + + // 实例化音符 + GameObject noteObj = Instantiate(prefab); + noteObj.transform.position = new Vector3(spawnDistance, 0, 0); + + // 初始化音符 + Note note = noteObj.GetComponent(); + if (note != null) + { + note.Initialize(noteData, noteSpeed); + activeNotes.Add(note); + } + } + + GameObject GetNotePrefab(NoteType type) + { + switch (type) + { + case NoteType.Don: + return donNotePrefab; + case NoteType.Ka: + return kaNotePrefab; + case NoteType.DaiDon: + return daiDonNotePrefab; + case NoteType.DaiKa: + return daiKaNotePrefab; + case NoteType.Drumroll: + return drumrollPrefab; + case NoteType.Balloon: + return balloonPrefab; + default: + return donNotePrefab; + } + } + + public List GetActiveNotes() + { + return activeNotes; + } +} + +// ==================== 音符基类 ==================== + +/// +/// 音符基类 - 所有音符的基础行为 +/// 使用方法:创建DonNote, KaNote等子类继承此类 +/// +public class Note : MonoBehaviour +{ + [Header("音符数据")] + public NoteData data; + public float speed = 5f; + public bool isHit = false; + + [Header("判定窗口(单位:秒)")] + public float perfectWindow = 0.075f; + public float goodWindow = 0.125f; + public float badWindow = 0.2f; + + protected SpriteRenderer spriteRenderer; + protected Transform judgeLineTransform; + + public virtual void Initialize(NoteData noteData, float moveSpeed) + { + data = noteData; + speed = moveSpeed; + spriteRenderer = GetComponent(); + + // 查找判定线 + GameObject judgeLine = GameObject.FindGameObjectWithTag("JudgeLine"); + if (judgeLine != null) + { + judgeLineTransform = judgeLine.transform; + } + else + { + Debug.LogWarning("找不到带有'JudgeLine'标签的判定线对象"); + } + } + + protected virtual void Update() + { + if (!isHit) + { + Move(); + CheckAutoMiss(); + } + } + + /// + /// 移动音符 + /// + protected virtual void Move() + { + transform.position += Vector3.left * speed * Time.deltaTime; + } + + /// + /// 检查是否自动Miss + /// + protected virtual void CheckAutoMiss() + { + if (judgeLineTransform == null) + return; + + float distance = transform.position.x - judgeLineTransform.position.x; + + // 如果音符已经超过判定线很远,自动Miss + if (distance < -badWindow * speed) + { + OnMiss(); + } + } + + /// + /// 判定打击 + /// + public virtual JudgeResult Judge() + { + if (judgeLineTransform == null) + return JudgeResult.Miss; + + float distance = Mathf.Abs(transform.position.x - judgeLineTransform.position.x); + float timeDistance = distance / speed; + + if (timeDistance < perfectWindow) + return JudgeResult.Perfect; + else if (timeDistance < goodWindow) + return JudgeResult.Good; + else if (timeDistance < badWindow) + return JudgeResult.Bad; + else + return JudgeResult.Miss; + } + + /// + /// 被打击时调用 + /// + public virtual void OnHit(JudgeResult result) + { + if (isHit) + return; + + isHit = true; + data.isHit = true; + + // 播放音效 + AudioManager.Instance?.PlayHitSound(data.type); + + // 显示特效 + EffectManager.Instance?.ShowJudgeEffect(transform.position, result); + + // 销毁音符 + Destroy(gameObject, 0.1f); + } + + /// + /// Miss时调用 + /// + protected virtual void OnMiss() + { + if (isHit) + return; + + isHit = true; + data.isHit = true; + + // 记录Miss + ScoreManager scoreManager = FindObjectOfType(); + scoreManager?.AddJudgement(JudgeResult.Miss); + + Destroy(gameObject); + } +} + +// 具体音符类示例 +public class DonNote : Note +{ + public override void Initialize(NoteData noteData, float moveSpeed) + { + base.Initialize(noteData, moveSpeed); + if (spriteRenderer != null) + { + spriteRenderer.color = new Color(1f, 0.3f, 0.3f); // 红色 + } + } +} + +public class KaNote : Note +{ + public override void Initialize(NoteData noteData, float moveSpeed) + { + base.Initialize(noteData, moveSpeed); + if (spriteRenderer != null) + { + spriteRenderer.color = new Color(0.3f, 0.5f, 1f); // 蓝色 + } + } +} + +// ==================== 分数管理器 ==================== + +/// +/// 分数管理器 - 管理分数、连击、判定统计 +/// +public class ScoreManager : MonoBehaviour +{ + [Header("分数数据")] + public int totalScore = 0; + public int combo = 0; + public int maxCombo = 0; + + [Header("判定统计")] + public int perfectCount = 0; + public int goodCount = 0; + public int badCount = 0; + public int missCount = 0; + + [Header("分数配置")] + public int perfectPoints = 100; + public int goodPoints = 50; + public int badPoints = 10; + + public void AddJudgement(JudgeResult result) + { + switch (result) + { + case JudgeResult.Perfect: + perfectCount++; + combo++; + totalScore += perfectPoints; + break; + + case JudgeResult.Good: + goodCount++; + combo++; + totalScore += goodPoints; + break; + + case JudgeResult.Bad: + badCount++; + combo = 0; + totalScore += badPoints; + break; + + case JudgeResult.Miss: + missCount++; + combo = 0; + break; + } + + // 更新最大连击 + if (combo > maxCombo) + maxCombo = combo; + + // 更新UI + UIManager.Instance?.UpdateScore(totalScore, combo); + + Debug.Log($"判定: {result}, 分数: {totalScore}, 连击: {combo}"); + } + + public void ResetScore() + { + totalScore = 0; + combo = 0; + maxCombo = 0; + perfectCount = goodCount = badCount = missCount = 0; + } + + public float GetAccuracy() + { + int total = perfectCount + goodCount + badCount + missCount; + if (total == 0) + return 100f; + + return ((float)(perfectCount + goodCount) / total) * 100f; + } +} + +// ==================== 输入管理器 ==================== + +/// +/// 输入管理器 - 处理玩家输入和判定 +/// +public class InputManager : MonoBehaviour +{ + [Header("按键设置")] + public KeyCode donLeft = KeyCode.F; + public KeyCode donRight = KeyCode.J; + public KeyCode kaLeft = KeyCode.D; + public KeyCode kaRight = KeyCode.K; + + private NoteManager noteManager; + private ScoreManager scoreManager; + + void Start() + { + noteManager = FindObjectOfType(); + scoreManager = FindObjectOfType(); + } + + void Update() + { + if (!GameManager.Instance.isPlaying) + return; + + // 检测咚(红色)输入 + if (Input.GetKeyDown(donLeft) || Input.GetKeyDown(donRight)) + { + ProcessHit(NoteType.Don); + } + + // 检测咔(蓝色)输入 + if (Input.GetKeyDown(kaLeft) || Input.GetKeyDown(kaRight)) + { + ProcessHit(NoteType.Ka); + } + } + + void ProcessHit(NoteType hitType) + { + // 查找最接近判定线的匹配音符 + Note closestNote = FindClosestNote(hitType); + + if (closestNote != null) + { + JudgeResult result = closestNote.Judge(); + + if (result != JudgeResult.Miss) + { + closestNote.OnHit(result); + scoreManager?.AddJudgement(result); + } + } + } + + Note FindClosestNote(NoteType hitType) + { + if (noteManager == null) + return null; + + List activeNotes = noteManager.GetActiveNotes(); + Note closestNote = null; + float minDistance = float.MaxValue; + + GameObject judgeLine = GameObject.FindGameObjectWithTag("JudgeLine"); + if (judgeLine == null) + return null; + + foreach (Note note in activeNotes) + { + if (note == null || note.isHit) + continue; + + // 检查音符类型是否匹配 + if (!IsNoteTypeMatch(note.data.type, hitType)) + continue; + + float distance = Mathf.Abs(note.transform.position.x - judgeLine.transform.position.x); + + if (distance < minDistance && distance < note.badWindow * note.speed) + { + minDistance = distance; + closestNote = note; + } + } + + return closestNote; + } + + bool IsNoteTypeMatch(NoteType noteType, NoteType hitType) + { + if (hitType == NoteType.Don) + { + return noteType == NoteType.Don || noteType == NoteType.DaiDon; + } + else if (hitType == NoteType.Ka) + { + return noteType == NoteType.Ka || noteType == NoteType.DaiKa; + } + + return false; + } +} + +// ==================== 音频管理器 ==================== + +/// +/// 音频管理器 - 管理音乐和音效播放 +/// +public class AudioManager : MonoBehaviour +{ + public static AudioManager Instance { get; private set; } + + [Header("音频源")] + public AudioSource musicSource; + public AudioSource sfxSource; + + [Header("音效")] + public AudioClip donHitSound; + public AudioClip kaHitSound; + public AudioClip drumrollSound; + + void Awake() + { + if (Instance == null) + { + Instance = this; + DontDestroyOnLoad(gameObject); + } + else + { + Destroy(gameObject); + return; + } + + // 创建音频源 + if (musicSource == null) + { + musicSource = gameObject.AddComponent(); + musicSource.loop = false; + musicSource.playOnAwake = false; + } + + if (sfxSource == null) + { + sfxSource = gameObject.AddComponent(); + sfxSource.playOnAwake = false; + } + } + + public void LoadMusic(string audioPath) + { + // 从Resources加载(audioPath应该是相对于Resources文件夹的路径,不含扩展名) + AudioClip clip = Resources.Load(audioPath); + + if (clip != null) + { + musicSource.clip = clip; + Debug.Log($"音乐加载成功: {audioPath}"); + } + else + { + Debug.LogError($"找不到音乐文件: {audioPath}"); + } + } + + public void PlayMusic() + { + if (musicSource.clip != null) + { + musicSource.Play(); + } + } + + public void PauseMusic() + { + musicSource.Pause(); + } + + public void ResumeMusic() + { + musicSource.UnPause(); + } + + public void StopMusic() + { + musicSource.Stop(); + } + + public float GetMusicTime() + { + return musicSource.time; + } + + public void PlayHitSound(NoteType type) + { + AudioClip clip = null; + + switch (type) + { + case NoteType.Don: + case NoteType.DaiDon: + clip = donHitSound; + break; + case NoteType.Ka: + case NoteType.DaiKa: + clip = kaHitSound; + break; + case NoteType.Drumroll: + clip = drumrollSound; + break; + } + + if (clip != null) + { + sfxSource.PlayOneShot(clip); + } + } +} + +// ==================== UI管理器 ==================== + +/// +/// UI管理器 - 管理所有UI显示 +/// +public class UIManager : MonoBehaviour +{ + public static UIManager Instance { get; private set; } + + [Header("游戏UI")] + public Text scoreText; + public Text comboText; + public GameObject comboPanel; + + [Header("判定显示")] + public Text judgeText; + public float judgeFadeTime = 0.5f; + + [Header("结果面板")] + public GameObject resultPanel; + public Text resultScoreText; + public Text resultPerfectText; + public Text resultGoodText; + public Text resultBadText; + public Text resultMissText; + public Text resultAccuracyText; + + void Awake() + { + if (Instance == null) + { + Instance = this; + } + else + { + Destroy(gameObject); + } + } + + void Start() + { + if (resultPanel != null) + resultPanel.SetActive(false); + } + + public void UpdateScore(int score, int combo) + { + if (scoreText != null) + { + scoreText.text = score.ToString("D8"); + } + + if (combo > 0) + { + if (comboText != null) + { + comboText.text = combo.ToString(); + } + + if (comboPanel != null) + { + comboPanel.SetActive(true); + } + } + else + { + if (comboPanel != null) + { + comboPanel.SetActive(false); + } + } + } + + public void ShowJudgeResult(JudgeResult result) + { + if (judgeText == null) + return; + + switch (result) + { + case JudgeResult.Perfect: + judgeText.text = "良"; + judgeText.color = Color.yellow; + break; + case JudgeResult.Good: + judgeText.text = "可"; + judgeText.color = Color.white; + break; + case JudgeResult.Bad: + judgeText.text = "不可"; + judgeText.color = Color.gray; + break; + } + + StopAllCoroutines(); + StartCoroutine(FadeOutJudgeText()); + } + + IEnumerator FadeOutJudgeText() + { + judgeText.gameObject.SetActive(true); + yield return new WaitForSeconds(judgeFadeTime); + + float fadeTime = 0.3f; + float elapsed = 0f; + Color originalColor = judgeText.color; + + while (elapsed < fadeTime) + { + elapsed += Time.deltaTime; + float alpha = 1f - (elapsed / fadeTime); + judgeText.color = new Color(originalColor.r, originalColor.g, originalColor.b, alpha); + yield return null; + } + + judgeText.gameObject.SetActive(false); + judgeText.color = originalColor; + } + + public void ShowResultPanel() + { + if (resultPanel == null) + return; + + ScoreManager scoreManager = FindObjectOfType(); + if (scoreManager == null) + return; + + resultPanel.SetActive(true); + + if (resultScoreText != null) + resultScoreText.text = scoreManager.totalScore.ToString("D8"); + + if (resultPerfectText != null) + resultPerfectText.text = "良: " + scoreManager.perfectCount; + + if (resultGoodText != null) + resultGoodText.text = "可: " + scoreManager.goodCount; + + if (resultBadText != null) + resultBadText.text = "不可: " + scoreManager.badCount; + + if (resultMissText != null) + resultMissText.text = "Miss: " + scoreManager.missCount; + + if (resultAccuracyText != null) + resultAccuracyText.text = "准确率: " + scoreManager.GetAccuracy().ToString("F1") + "%"; + } +} + +// ==================== 特效管理器 ==================== + +/// +/// 特效管理器 - 管理打击特效 +/// +public class EffectManager : MonoBehaviour +{ + public static EffectManager Instance { get; private set; } + + [Header("特效预制体")] + public GameObject perfectEffectPrefab; + public GameObject goodEffectPrefab; + public GameObject badEffectPrefab; + + [Header("特效配置")] + public float effectLifetime = 1f; + + void Awake() + { + if (Instance == null) + { + Instance = this; + } + else + { + Destroy(gameObject); + } + } + + public void ShowJudgeEffect(Vector3 position, JudgeResult result) + { + GameObject prefab = null; + + switch (result) + { + case JudgeResult.Perfect: + prefab = perfectEffectPrefab; + break; + case JudgeResult.Good: + prefab = goodEffectPrefab; + break; + case JudgeResult.Bad: + prefab = badEffectPrefab; + break; + } + + if (prefab != null) + { + GameObject effect = Instantiate(prefab, position, Quaternion.identity); + Destroy(effect, effectLifetime); + } + + // 显示判定文字 + UIManager.Instance?.ShowJudgeResult(result); + } +} + +// ==================== TJA解析器 ==================== + +/// +/// TJA谱面解析器 +/// 使用方法: +/// TJAParser parser = new TJAParser(); +/// ChartData chart = parser.Parse("路径/到/main.tja"); +/// +public class TJAParser +{ + public ChartData Parse(string filePath) + { + if (!File.Exists(filePath)) + { + Debug.LogError($"找不到谱面文件: {filePath}"); + return null; + } + + ChartData chart = new ChartData(); + chart.song = new SongData(); + chart.notes = new List(); + + string[] lines = File.ReadAllLines(filePath); + + bool inNoteData = false; + float currentTime = 0f; + float bpm = 120f; + + foreach (string line in lines) + { + string trimmed = line.Trim(); + + // 跳过空行和注释 + if (string.IsNullOrEmpty(trimmed) || trimmed.StartsWith("//")) + continue; + + // 解析元数据 + if (trimmed.Contains(":") && !inNoteData) + { + ParseMetadata(trimmed, chart.song, ref bpm); + } + // 开始音符数据 + else if (trimmed == "#START") + { + inNoteData = true; + currentTime = -chart.song.offset; // 应用offset + } + // 结束音符数据 + else if (trimmed == "#END") + { + break; + } + // 解析音符数据 + else if (inNoteData) + { + if (trimmed.StartsWith("#")) + { + ProcessCommand(trimmed, ref bpm); + } + else if (trimmed.EndsWith(",")) + { + ParseMeasure(trimmed, chart.notes, ref currentTime, bpm); + } + } + } + + Debug.Log($"解析完成: {chart.song.title}, BPM: {chart.song.bpm}, 音符数: {chart.notes.Count}"); + return chart; + } + + void ParseMetadata(string line, SongData song, ref float bpm) + { + string[] parts = line.Split(new char[] { ':' }, 2); + if (parts.Length != 2) + return; + + string key = parts[0].Trim(); + string value = parts[1].Trim(); + + switch (key) + { + case "TITLE": + song.title = value; + break; + case "SUBTITLE": + song.subtitle = value; + break; + case "BPM": + if (float.TryParse(value, out float parsedBpm)) + { + bpm = parsedBpm; + song.bpm = bpm; + } + break; + case "WAVE": + song.audioFile = value; + break; + case "OFFSET": + if (float.TryParse(value, out float offset)) + { + song.offset = offset; + } + break; + } + } + + void ProcessCommand(string command, ref float bpm) + { + if (command.StartsWith("#BPMCHANGE")) + { + string value = command.Replace("#BPMCHANGE", "").Trim(); + if (float.TryParse(value, out float newBpm)) + { + bpm = newBpm; + } + } + } + + void ParseMeasure(string measure, List notes, ref float currentTime, float bpm) + { + measure = measure.TrimEnd(','); + + float beatDuration = 60f / bpm; + float noteDuration = (beatDuration * 4f) / measure.Length; + + for (int i = 0; i < measure.Length; i++) + { + char noteChar = measure[i]; + + if (noteChar != '0') + { + NoteData note = new NoteData(); + note.time = currentTime + (i * noteDuration); + + switch (noteChar) + { + case '1': + note.type = NoteType.Don; + break; + case '2': + note.type = NoteType.Ka; + break; + case '3': + note.type = NoteType.DaiDon; + break; + case '4': + note.type = NoteType.DaiKa; + break; + case '5': + case '6': + note.type = NoteType.Drumroll; + break; + case '7': + note.type = NoteType.Balloon; + break; + } + + notes.Add(note); + } + } + + currentTime += beatDuration * 4f; + } +} + +// ==================== 谱面加载器 ==================== + +/// +/// 谱面加载器组件 +/// 使用方法:附加到GameController上,调用LoadChart() +/// +public class ChartLoader : MonoBehaviour +{ + public void LoadChart(string songId) + { + // 从StreamingAssets加载 + string path = Path.Combine(Application.streamingAssetsPath, "Charts", songId, "main.tja"); + + if (!File.Exists(path)) + { + Debug.LogError($"找不到谱面文件: {path}"); + return; + } + + TJAParser parser = new TJAParser(); + ChartData chart = parser.Parse(path); + + if (chart == null) + { + Debug.LogError("谱面解析失败"); + return; + } + + // 保存到GameManager + GameManager.Instance.currentChart = chart; + GameManager.Instance.currentSong = chart.song; + + // 加载音乐(假设音乐文件在Resources/Music/下) + string audioPath = "Music/" + Path.GetFileNameWithoutExtension(chart.song.audioFile); + AudioManager.Instance?.LoadMusic(audioPath); + + // 传递给NoteManager + NoteManager noteManager = FindObjectOfType(); + noteManager?.LoadChart(chart); + + Debug.Log($"谱面加载完成: {chart.song.title}"); + } +} + +/* + * ==================== 使用说明 ==================== + * + * 1. 创建空GameObject,添加对应的Manager脚本 + * 2. 设置必要的公共变量(如prefab、UI引用等) + * 3. 确保GameObject有正确的Tag(如判定线需要"JudgeLine"标签) + * 4. 音频文件放在Assets/Resources/Music/下 + * 5. 谱面文件放在Assets/StreamingAssets/Charts/下 + * 6. 按照指南创建场景和UI + * + * 祝你成功! + */ diff --git a/Unity迁移指南.md b/Unity迁移指南.md new file mode 100644 index 0000000..e3011e6 --- /dev/null +++ b/Unity迁移指南.md @@ -0,0 +1,1859 @@ +# Taiko Web 到 Unity 迁移完整指南 + +## 📋 目录 +1. [项目概述](#项目概述) +2. [准备工作](#准备工作) +3. [第一阶段:Unity基础学习](#第一阶段unity基础学习) +4. [第二阶段:项目架构设计](#第二阶段项目架构设计) +5. [第三阶段:核心功能实现](#第三阶段核心功能实现) +6. [第四阶段:资源迁移](#第四阶段资源迁移) +7. [第五阶段:完善与优化](#第五阶段完善与优化) + +--- + +## 项目概述 + +### 当前项目分析 +你的 Taiko Web 项目包含以下核心组件: + +1. **游戏核心类**: + - `Game.js` - 主游戏逻辑 + - `Controller.js` - 游戏控制器 + - `GameRules.js` - 游戏规则和评分 + - `GameInput.js` - 输入处理 + - `Circle.js` - 音符对象 + +2. **谱面系统**: + - `.tja` 文件格式 + - `parsetja.js` - 谱面解析器 + +3. **音频系统**: + - 音乐播放 + - 音效管理 + +4. **UI系统**: + - HTML/CSS界面 + - Canvas绘图 + +5. **其他功能**: + - 分数管理 + - 插件系统 + - 多人游戏 + +### 迁移目标 +将上述功能全部用Unity重新实现,最终产品可以作为PC/移动平台的独立游戏或WebGL游戏。 + +--- + +## 准备工作 + +### 1. 安装必要软件 + +**Unity编辑器**: +- 下载地址:https://unity.com/download +- 推荐版本:Unity 2022.3 LTS (长期支持版本) +- 选择安装模块: + - ✅ Unity Editor + - ✅ Visual Studio Community (代码编辑器) + - ✅ WebGL Build Support (如果要发布网页版) + - ✅ Android Build Support (如果要发布安卓版) + +**Visual Studio Code** (可选,如果你更喜欢轻量编辑器): +- 下载地址:https://code.visualstudio.com/ + +### 2. 学习资源准备 + +**必看教程**: +1. Unity官方教程:https://learn.unity.com/ +2. 推荐课程: + - "Unity入门" - 学习基础操作(2-3小时) + - "2D游戏开发" - 学习2D游戏制作(5-8小时) + - "C#编程基础" - 如果没有编程经验(10小时) + +**参考文档**: +- Unity脚本API:https://docs.unity3d.com/ScriptReference/ +- C#基础教程:https://learn.microsoft.com/zh-cn/dotnet/csharp/ + +### 3. 创建项目规划表 + +建议时间线(根据你的学习速度调整): +- 第一阶段(1-2周):Unity基础学习 +- 第二阶段(3-5天):项目架构设计 +- 第三阶段(3-4周):核心功能实现 +- 第四阶段(1-2周):资源迁移 +- 第五阶段(1-2周):完善与优化 + +**总计:约8-12周** + +--- + +## 第一阶段:Unity基础学习 + +### 第1步:安装和熟悉Unity界面(1天) + +1. **安装Unity Hub和Unity Editor** + - 下载并安装Unity Hub + - 通过Hub安装Unity 2022.3 LTS + - 创建Unity账号并激活个人版许可证(免费) + +2. **创建第一个项目** + ``` + 1. 打开Unity Hub + 2. 点击"新建项目" + 3. 选择"2D Core"模板 + 4. 命名为"TaikoUnityTest" + 5. 选择保存位置 + 6. 点击"创建项目" + ``` + +3. **熟悉Unity界面** + - **Scene视图**:场景编辑窗口 + - **Game视图**:游戏运行预览窗口 + - **Hierarchy面板**:场景对象层级 + - **Inspector面板**:属性查看/编辑 + - **Project面板**:资源文件管理 + - **Console面板**:日志和错误信息 + +### 第2步:学习GameObject和Component(2-3天) + +**核心概念**: +- GameObject(游戏对象):场景中的所有东西都是GameObject +- Component(组件):附加到GameObject上的功能模块 + +**实践练习**: + +1. **创建一个简单的2D精灵**: + ``` + 1. 右键Hierarchy → 2D Object → Sprite + 2. 在Inspector中看到Transform和Sprite Renderer组件 + 3. 尝试修改Position、Rotation、Scale + 4. 尝试改变Sprite和Color + ``` + +2. **添加脚本组件**: + ```csharp + // 在Project面板右键 → Create → C# Script + // 命名为"TestMovement" + + using UnityEngine; + + public class TestMovement : MonoBehaviour + { + public float speed = 5f; + + void Update() + { + // 使用箭头键移动对象 + float horizontal = Input.GetAxis("Horizontal"); + float vertical = Input.GetAxis("Vertical"); + + transform.position += new Vector3(horizontal, vertical, 0) * speed * Time.deltaTime; + } + } + ``` + +3. **将脚本拖到GameObject上,点击Play测试** + +### 第3步:学习C#基础(3-5天) + +如果你已经懂JavaScript,C#会比较容易上手。主要区别: + +| JavaScript | C# | +|------------|-----| +| `var x = 10` | `int x = 10;` (需要类型声明) | +| `class Game{` | `public class Game {` | +| `this.score = 0` | `private int score = 0;` | +| `function update(){}` | `void Update(){}` | + +**重点学习**: +- 变量类型(int, float, string, bool) +- 类和对象 +- 函数/方法 +- 条件语句(if/else/switch) +- 循环(for/while) +- 数组和List +- 访问修饰符(public/private/protected) + +**简单练习**: +```csharp +// 创建一个分数管理器脚本 +using UnityEngine; + +public class ScoreManager : MonoBehaviour +{ + public int score = 0; + public int combo = 0; + + public void AddScore(int points) + { + score += points; + Debug.Log("当前分数: " + score); + } + + public void IncreaseCombo() + { + combo++; + Debug.Log("连击数: " + combo); + } + + public void ResetCombo() + { + combo = 0; + } + + void Start() + { + // 游戏开始时调用 + Debug.Log("游戏开始!"); + } + + void Update() + { + // 每帧调用 + if (Input.GetKeyDown(KeyCode.Space)) + { + AddScore(100); + IncreaseCombo(); + } + } +} +``` + +### 第4步:学习Unity 2D基础(2-3天) + +**必学内容**: + +1. **Sprite和Sprite Renderer** + - 导入图片资源 + - 设置Sprite的Pixels Per Unit + - Sprite Renderer排序层级(Sorting Layer/Order) + +2. **Canvas和UI系统** + - 创建Canvas + - UI元素:Text, Image, Button + - Canvas Scaler设置 + - Anchors和Pivot + +3. **音频系统** + - Audio Source组件 + - Audio Clip资源 + - 播放/暂停/停止音频 + + ```csharp + // 播放音频示例 + public AudioClip hitSound; + private AudioSource audioSource; + + void Start() + { + audioSource = GetComponent(); + } + + void PlayHitSound() + { + audioSource.PlayOneShot(hitSound); + } + ``` + +4. **Prefab(预制体)** + - 将GameObject拖到Project面板创建Prefab + - 使用Prefab实例化音符 + + ```csharp + public GameObject notePrefab; + + void CreateNote() + { + GameObject note = Instantiate(notePrefab); + note.transform.position = new Vector3(10, 0, 0); + } + ``` + +### 第5步:简单游戏Demo(3-4天) + +**目标**:制作一个简化版的太鼓节奏游戏Demo + +**功能列表**: +- ✅ 音符从右向左移动 +- ✅ 按空格键判定 +- ✅ 显示分数 +- ✅ 播放背景音乐 + +**实现步骤**: + +1. **创建音符脚本**: +```csharp +using UnityEngine; + +public class Note : MonoBehaviour +{ + public float speed = 5f; + + void Update() + { + // 向左移动 + transform.position += Vector3.left * speed * Time.deltaTime; + + // 超出屏幕销毁 + if (transform.position.x < -10f) + { + Destroy(gameObject); + } + } +} +``` + +2. **创建判定脚本**: +```csharp +using UnityEngine; +using UnityEngine.UI; + +public class GameController : MonoBehaviour +{ + public Text scoreText; + public GameObject notePrefab; + public Transform judgePosition; // 判定位置 + + private int score = 0; + private float nextNoteTime = 0f; + + void Update() + { + // 自动生成音符 + if (Time.time > nextNoteTime) + { + SpawnNote(); + nextNoteTime = Time.time + 2f; // 每2秒一个音符 + } + + // 检测输入 + if (Input.GetKeyDown(KeyCode.Space)) + { + CheckHit(); + } + } + + void SpawnNote() + { + GameObject note = Instantiate(notePrefab); + note.transform.position = new Vector3(10f, 0f, 0f); + } + + void CheckHit() + { + // 查找所有音符 + GameObject[] notes = GameObject.FindGameObjectsWithTag("Note"); + + foreach (GameObject note in notes) + { + float distance = Mathf.Abs(note.transform.position.x - judgePosition.position.x); + + if (distance < 0.5f) // 判定范围 + { + score += 100; + scoreText.text = "Score: " + score; + Destroy(note); + Debug.Log("Perfect!"); + return; + } + } + + Debug.Log("Miss!"); + } +} +``` + +3. **场景设置**: + - 创建空对象"GameController",添加GameController脚本 + - 创建Canvas,添加Text显示分数 + - 创建Sprite作为音符,保存为Prefab + - 创建Sprite作为判定线 + - 给音符Prefab添加"Note" Tag + +--- + +## 第二阶段:项目架构设计 + +### 第1步:分析现有代码结构(1天) + +**你的Web项目架构**: +``` +Game (主游戏类) +├── Controller (控制器) +├── GameRules (规则) +├── GameInput (输入) +├── View (视图) +├── SongData (歌曲数据) +└── Circles (音符数组) +``` + +**对应的Unity架构**: +``` +GameManager (主管理器) +├── NoteManager (音符管理) +├── ScoreManager (分数管理) +├── InputManager (输入管理) +├── AudioManager (音频管理) +├── UIManager (UI管理) +└── ChartLoader (谱面加载) +``` + +### 第2步:创建正式项目(1天) + +1. **创建新项目**: + - 项目名:`TaikoUnity` + - 模板:2D Core + - 位置:`C:\Users\Vanillaaaa\Documents\TaikoUnity` + +2. **创建文件夹结构**: +``` +Assets/ +├── Scripts/ +│ ├── Core/ (核心系统) +│ ├── Gameplay/ (游戏逻辑) +│ ├── UI/ (界面) +│ ├── Audio/ (音频) +│ ├── Input/ (输入) +│ └── Utils/ (工具类) +├── Prefabs/ +│ ├── Notes/ (音符预制体) +│ └── UI/ (UI预制体) +├── Sprites/ +│ ├── Notes/ (音符图片) +│ ├── UI/ (UI图片) +│ └── Backgrounds/ (背景) +├── Audio/ +│ ├── Music/ (音乐) +│ └── SFX/ (音效) +├── Charts/ (谱面文件) +└── Scenes/ + ├── MainMenu (主菜单) + ├── SongSelect (选歌) + └── Game (游戏) +``` + +3. **设置项目配置**: + - File → Build Settings + - 设置目标平台(PC/WebGL) + - Player Settings → Resolution:1280x720 + +### 第3步:创建核心脚本框架(2天) + +创建以下基础脚本(架子,先不实现具体功能): + +**1. GameManager.cs**: +```csharp +using UnityEngine; +using UnityEngine.SceneManagement; + +public class GameManager : MonoBehaviour +{ + public static GameManager Instance { get; private set; } + + public SongData currentSong; + public float gameTime; + public bool isPlaying; + + void Awake() + { + // 单例模式 + if (Instance == null) + { + Instance = this; + DontDestroyOnLoad(gameObject); + } + else + { + Destroy(gameObject); + } + } + + public void StartGame(SongData song) + { + currentSong = song; + SceneManager.LoadScene("Game"); + } + + public void PauseGame() + { + isPlaying = false; + Time.timeScale = 0f; + } + + public void ResumeGame() + { + isPlaying = true; + Time.timeScale = 1f; + } + + public void EndGame() + { + // 显示结果界面 + } +} +``` + +**2. NoteManager.cs**: +```csharp +using UnityEngine; +using System.Collections.Generic; + +public class NoteManager : MonoBehaviour +{ + public GameObject donNotePrefab; // 红色音符 + public GameObject kaNotePrefab; // 蓝色音符 + public GameObject drumrollPrefab; // 连打 + + private List activeNotes = new List(); + private ChartData currentChart; + + public void LoadChart(ChartData chart) + { + currentChart = chart; + } + + public void SpawnNote(NoteData noteData) + { + GameObject prefab = GetNotePrefab(noteData.type); + GameObject noteObj = Instantiate(prefab); + + Note note = noteObj.GetComponent(); + note.Initialize(noteData); + + activeNotes.Add(note); + } + + private GameObject GetNotePrefab(NoteType type) + { + switch(type) + { + case NoteType.Don: + return donNotePrefab; + case NoteType.Ka: + return kaNotePrefab; + default: + return donNotePrefab; + } + } + + void Update() + { + // 根据歌曲时间生成音符 + SpawnNotesAtTime(GameManager.Instance.gameTime); + } + + void SpawnNotesAtTime(float time) + { + // TODO: 实现音符生成逻辑 + } +} +``` + +**3. ScoreManager.cs**: +```csharp +using UnityEngine; + +public enum JudgeResult +{ + Perfect, + Good, + Bad, + Miss +} + +public class ScoreManager : MonoBehaviour +{ + public int totalScore; + public int combo; + public int maxCombo; + + public int perfectCount; + public int goodCount; + public int badCount; + public int missCount; + + public void AddJudgement(JudgeResult result) + { + switch(result) + { + case JudgeResult.Perfect: + perfectCount++; + combo++; + totalScore += 100; + break; + case JudgeResult.Good: + goodCount++; + combo++; + totalScore += 50; + break; + case JudgeResult.Bad: + badCount++; + combo = 0; + totalScore += 10; + break; + case JudgeResult.Miss: + missCount++; + combo = 0; + break; + } + + if(combo > maxCombo) + maxCombo = combo; + + UIManager.Instance?.UpdateScore(totalScore, combo); + } + + public void ResetScore() + { + totalScore = 0; + combo = 0; + maxCombo = 0; + perfectCount = goodCount = badCount = missCount = 0; + } +} +``` + +**4. 数据类定义(在Scripts/Utils/中创建GameData.cs)**: +```csharp +using System; +using System.Collections.Generic; + +[Serializable] +public class SongData +{ + public string title; + public string subtitle; + public float bpm; + public string audioFile; +} + +[Serializable] +public enum NoteType +{ + Don, // 咚(红色) + Ka, // 咔(蓝色) + DaiDon, // 大咚 + DaiKa, // 大咔 + Drumroll, // 连打 + Balloon // 气球 +} + +[Serializable] +public class NoteData +{ + public NoteType type; + public float time; // 出现时间(秒) + public float endTime; // 结束时间(连打用) + public int hitCount; // 需要打击次数(气球用) +} + +[Serializable] +public class ChartData +{ + public SongData song; + public List notes = new List(); +} +``` + +--- + +## 第三阶段:核心功能实现 + +### 第1步:音符系统(4-5天) + +**实现音符基类**: + +```csharp +// Note.cs +using UnityEngine; + +public class Note : MonoBehaviour +{ + public NoteData data; + public float speed = 5f; + public bool isHit = false; + + protected SpriteRenderer spriteRenderer; + protected Transform judgeLineTransform; + + public virtual void Initialize(NoteData noteData) + { + data = noteData; + spriteRenderer = GetComponent(); + judgeLineTransform = GameObject.FindGameObjectWithTag("JudgeLine")?.transform; + } + + protected virtual void Update() + { + if(!isHit) + { + Move(); + CheckMiss(); + } + } + + protected virtual void Move() + { + // 从右向左移动 + transform.position += Vector3.left * speed * Time.deltaTime; + } + + protected virtual void CheckMiss() + { + // 如果音符已经过了判定线很远 + if(judgeLineTransform != null) + { + float distance = transform.position.x - judgeLineTransform.position.x; + if(distance < -2f) // Miss判定 + { + OnMiss(); + } + } + } + + public virtual JudgeResult Judge() + { + if(judgeLineTransform == null) + return JudgeResult.Miss; + + float distance = Mathf.Abs(transform.position.x - judgeLineTransform.position.x); + + // 判定窗口(根据你原项目的规则调整) + if(distance < 0.075f) + return JudgeResult.Perfect; + else if(distance < 0.125f) + return JudgeResult.Good; + else if(distance < 0.2f) + return JudgeResult.Bad; + else + return JudgeResult.Miss; + } + + public virtual void OnHit(JudgeResult result) + { + isHit = true; + + // 播放音效 + AudioManager.Instance?.PlayHitSound(data.type); + + // 显示特效 + EffectManager.Instance?.ShowJudgeEffect(transform.position, result); + + // 销毁音符 + Destroy(gameObject); + } + + protected virtual void OnMiss() + { + isHit = true; + ScoreManager scoreManager = FindObjectOfType(); + scoreManager?.AddJudgement(JudgeResult.Miss); + Destroy(gameObject); + } +} +``` + +**创建具体音符类**: + +```csharp +// DonNote.cs (红色音符) +public class DonNote : Note +{ + public override void Initialize(NoteData noteData) + { + base.Initialize(noteData); + spriteRenderer.color = new Color(1f, 0.3f, 0.3f); // 红色 + } +} + +// KaNote.cs (蓝色音符) +public class KaNote : Note +{ + public override void Initialize(NoteData noteData) + { + base.Initialize(noteData); + spriteRenderer.color = new Color(0.3f, 0.5f, 1f); // 蓝色 + } +} +``` + +### 第2步:输入系统(2-3天) + +```csharp +// InputManager.cs +using UnityEngine; + +public class InputManager : MonoBehaviour +{ + public KeyCode donLeft = KeyCode.F; // 左咚 + public KeyCode donRight = KeyCode.J; // 右咚 + public KeyCode kaLeft = KeyCode.D; // 左咔 + public KeyCode kaRight = KeyCode.K; // 右咔 + + private NoteManager noteManager; + private ScoreManager scoreManager; + + void Start() + { + noteManager = FindObjectOfType(); + scoreManager = FindObjectOfType(); + } + + void Update() + { + // 检测咚(红色)输入 + if(Input.GetKeyDown(donLeft) || Input.GetKeyDown(donRight)) + { + ProcessHit(NoteType.Don); + } + + // 检测咔(蓝色)输入 + if(Input.GetKeyDown(kaLeft) || Input.GetKeyDown(kaRight)) + { + ProcessHit(NoteType.Ka); + } + } + + void ProcessHit(NoteType hitType) + { + // 查找最接近判定线的音符 + Note closestNote = FindClosestNote(hitType); + + if(closestNote != null) + { + JudgeResult result = closestNote.Judge(); + + if(result != JudgeResult.Miss) + { + closestNote.OnHit(result); + scoreManager.AddJudgement(result); + } + } + } + + Note FindClosestNote(NoteType hitType) + { + GameObject[] noteObjects = GameObject.FindGameObjectsWithTag("Note"); + Note closestNote = null; + float minDistance = float.MaxValue; + Transform judgeLine = GameObject.FindGameObjectWithTag("JudgeLine")?.transform; + + if(judgeLine == null) + return null; + + foreach(GameObject obj in noteObjects) + { + Note note = obj.GetComponent(); + + if(note == null || note.isHit) + continue; + + // 检查音符类型是否匹配 + if(!IsNoteTypeMatch(note.data.type, hitType)) + continue; + + float distance = Mathf.Abs(note.transform.position.x - judgeLine.position.x); + + if(distance < minDistance && distance < 0.3f) // 判定范围 + { + minDistance = distance; + closestNote = note; + } + } + + return closestNote; + } + + bool IsNoteTypeMatch(NoteType noteType, NoteType hitType) + { + // Don可以打Don和DaiDon + if(hitType == NoteType.Don) + { + return noteType == NoteType.Don || noteType == NoteType.DaiDon; + } + // Ka可以打Ka和DaiKa + else if(hitType == NoteType.Ka) + { + return noteType == NoteType.Ka || noteType == NoteType.DaiKa; + } + + return false; + } +} +``` + +### 第3步:谱面加载系统(3-4天) + +**TJA解析器**(这是核心部分,需要移植你的parsetja.js逻辑): + +```csharp +// TJAParser.cs +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +public class TJAParser +{ + public ChartData Parse(string filePath) + { + ChartData chart = new ChartData(); + chart.song = new SongData(); + chart.notes = new List(); + + string[] lines = File.ReadAllLines(filePath); + + bool inNoteData = false; + float currentTime = 0f; + float bpm = 120f; + int measureIndex = 0; + + foreach(string line in lines) + { + string trimmed = line.Trim(); + + // 跳过空行和注释 + if(string.IsNullOrEmpty(trimmed) || trimmed.StartsWith("//")) + continue; + + // 解析元数据 + if(trimmed.Contains(":") && !inNoteData) + { + ParseMetadata(trimmed, chart.song, ref bpm); + } + // 开始音符数据 + else if(trimmed == "#START") + { + inNoteData = true; + currentTime = 0f; + } + // 结束音符数据 + else if(trimmed == "#END") + { + break; + } + // 解析音符数据 + else if(inNoteData) + { + if(trimmed.StartsWith("#")) + { + // 处理命令(如#BPMCHANGE) + ProcessCommand(trimmed, ref bpm); + } + else if(trimmed.EndsWith(",")) + { + // 解析小节 + ParseMeasure(trimmed, chart.notes, ref currentTime, bpm); + measureIndex++; + } + } + } + + return chart; + } + + void ParseMetadata(string line, SongData song, ref float bpm) + { + string[] parts = line.Split(new char[]{':'}, 2); + if(parts.Length != 2) + return; + + string key = parts[0].Trim(); + string value = parts[1].Trim(); + + switch(key) + { + case "TITLE": + song.title = value; + break; + case "SUBTITLE": + song.subtitle = value; + break; + case "BPM": + float.TryParse(value, out bpm); + song.bpm = bpm; + break; + case "WAVE": + song.audioFile = value; + break; + } + } + + void ProcessCommand(string command, ref float bpm) + { + if(command.StartsWith("#BPMCHANGE")) + { + string value = command.Replace("#BPMCHANGE", "").Trim(); + float.TryParse(value, out bpm); + } + } + + void ParseMeasure(string measure, List notes, ref float currentTime, float bpm) + { + // 移除逗号 + measure = measure.TrimEnd(','); + + // 计算每个音符的时间间隔 + float beatDuration = 60f / bpm; // 一拍的时间 + float noteDuration = (beatDuration * 4f) / measure.Length; // 一个音符的时间 + + for(int i = 0; i < measure.Length; i++) + { + char noteChar = measure[i]; + + if(noteChar != '0') // 0表示没有音符 + { + NoteData note = new NoteData(); + note.time = currentTime + (i * noteDuration); + + // 根据字符确定音符类型 + switch(noteChar) + { + case '1': + note.type = NoteType.Don; + break; + case '2': + note.type = NoteType.Ka; + break; + case '3': + note.type = NoteType.DaiDon; + break; + case '4': + note.type = NoteType.DaiKa; + break; + case '5': + case '6': + note.type = NoteType.Drumroll; + // TODO: 处理连打的结束时间 + break; + case '7': + note.type = NoteType.Balloon; + break; + } + + notes.Add(note); + } + } + + // 更新当前时间(一个小节 = 4拍) + currentTime += beatDuration * 4f; + } +} +``` + +**谱面加载器**: + +```csharp +// ChartLoader.cs +using UnityEngine; + +public class ChartLoader : MonoBehaviour +{ + public void LoadChart(string chartPath) + { + TJAParser parser = new TJAParser(); + ChartData chart = parser.Parse(chartPath); + + // 加载音乐 + AudioManager.Instance?.LoadMusic(chart.song.audioFile); + + // 传递给NoteManager + NoteManager noteManager = FindObjectOfType(); + noteManager?.LoadChart(chart); + + Debug.Log($"加载谱面: {chart.song.title}"); + Debug.Log($"音符数量: {chart.notes.Count}"); + } +} +``` + +### 第4步:音频系统(2-3天) + +```csharp +// AudioManager.cs +using UnityEngine; +using System.Collections; + +public class AudioManager : MonoBehaviour +{ + public static AudioManager Instance { get; private set; } + + public AudioSource musicSource; + public AudioSource sfxSource; + + public AudioClip donHitSound; + public AudioClip kaHitSound; + public AudioClip drumrollSound; + + void Awake() + { + if(Instance == null) + { + Instance = this; + DontDestroyOnLoad(gameObject); + } + else + { + Destroy(gameObject); + } + + // 创建AudioSource组件 + if(musicSource == null) + { + musicSource = gameObject.AddComponent(); + musicSource.loop = false; + musicSource.playOnAwake = false; + } + + if(sfxSource == null) + { + sfxSource = gameObject.AddComponent(); + sfxSource.playOnAwake = false; + } + } + + public void LoadMusic(string fileName) + { + // 从Resources文件夹加载音乐 + AudioClip clip = Resources.Load("Music/" + Path.GetFileNameWithoutExtension(fileName)); + + if(clip != null) + { + musicSource.clip = clip; + } + else + { + Debug.LogError($"找不到音乐文件: {fileName}"); + } + } + + public void PlayMusic() + { + if(musicSource.clip != null) + { + musicSource.Play(); + } + } + + public void StopMusic() + { + musicSource.Stop(); + } + + public void PlayHitSound(NoteType type) + { + AudioClip clip = null; + + switch(type) + { + case NoteType.Don: + case NoteType.DaiDon: + clip = donHitSound; + break; + case NoteType.Ka: + case NoteType.DaiKa: + clip = kaHitSound; + break; + } + + if(clip != null) + { + sfxSource.PlayOneShot(clip); + } + } + + public float GetMusicTime() + { + return musicSource.time; + } +} +``` + +### 第5步:UI系统(2-3天) + +```csharp +// UIManager.cs +using UnityEngine; +using UnityEngine.UI; + +public class UIManager : MonoBehaviour +{ + public static UIManager Instance { get; private set; } + + [Header("Game UI")] + public Text scoreText; + public Text comboText; + public Image comboBackground; + + [Header("判定显示")] + public Text judgeText; + public GameObject perfectEffect; + public GameObject goodEffect; + public GameObject badEffect; + + void Awake() + { + if(Instance == null) + { + Instance = this; + } + else + { + Destroy(gameObject); + } + } + + public void UpdateScore(int score, int combo) + { + if(scoreText != null) + { + scoreText.text = score.ToString("D8"); // 8位数字,前面补0 + } + + if(combo > 0) + { + if(comboText != null) + { + comboText.text = combo.ToString(); + comboText.gameObject.SetActive(true); + } + + if(comboBackground != null) + { + comboBackground.gameObject.SetActive(true); + } + } + else + { + if(comboText != null) + { + comboText.gameObject.SetActive(false); + } + + if(comboBackground != null) + { + comboBackground.gameObject.SetActive(false); + } + } + } + + public void ShowJudgeResult(JudgeResult result) + { + if(judgeText == null) + return; + + switch(result) + { + case JudgeResult.Perfect: + judgeText.text = "良"; + judgeText.color = Color.yellow; + break; + case JudgeResult.Good: + judgeText.text = "可"; + judgeText.color = Color.white; + break; + case JudgeResult.Bad: + judgeText.text = "不可"; + judgeText.color = Color.gray; + break; + } + + // 显示后淡出 + StopAllCoroutines(); + StartCoroutine(FadeOutJudgeText()); + } + + System.Collections.IEnumerator FadeOutJudgeText() + { + judgeText.gameObject.SetActive(true); + + yield return new WaitForSeconds(0.5f); + + float fadeTime = 0.3f; + float elapsed = 0f; + Color originalColor = judgeText.color; + + while(elapsed < fadeTime) + { + elapsed += Time.deltaTime; + float alpha = 1f - (elapsed / fadeTime); + judgeText.color = new Color(originalColor.r, originalColor.g, originalColor.b, alpha); + yield return null; + } + + judgeText.gameObject.SetActive(false); + judgeText.color = originalColor; + } +} +``` + +--- + +## 第四阶段:资源迁移 + +### 第1步:图片资源(2-3天) + +**需要准备的图片**: +1. 音符图片(Don, Ka, DaiDon, DaiKa) +2. 判定线 +3. 背景图片 +4. UI元素(按钮、框架等) +5. 特效Sprite + +**导入步骤**: +1. 将图片复制到`Assets/Sprites/`对应文件夹 +2. 选中图片,在Inspector中: + - Texture Type: Sprite (2D and UI) + - Pixels Per Unit: 100(根据图片大小调整) + - Filter Mode: Bilinear + - Compression: 根据需要选择 + +**创建音符Prefab**: +``` +1. 创建空GameObject,命名为"DonNote" +2. 添加Sprite Renderer,设置Sprite +3. 添加Note.cs或DonNote.cs脚本 +4. 添加Tag "Note" +5. 拖到Prefabs/Notes/文件夹,创建Prefab +6. 删除Hierarchy中的对象 +``` + +### 第2步:音频资源(1-2天) + +**处理音频文件**: + +你的项目使用.ogg格式,Unity完全支持。 + +**导入步骤**: +1. 在`Assets/`创建`Resources/Music/`文件夹 +2. 复制.ogg音乐文件到这个文件夹 +3. 选中音频文件,设置: + - Load Type: Streaming(大文件)或 Compressed In Memory(小文件) + - Compression Format: Vorbis + - Quality: 70-100% + +**音效文件**: +1. 创建`Assets/Resources/SFX/`文件夹 +2. 导入打击音效 +3. 设置: + - Load Type: Decompress On Load + - Compression Format: PCM + +### 第3步:谱面文件迁移(1天) + +**迁移.tja文件**: + +1. 在`Assets/`创建`Resources/Charts/`文件夹 +2. 复制所有.tja文件 +3. 由于Unity不能直接读取Resources文件夹中的文本,需要使用StreamingAssets: + +``` +Assets/StreamingAssets/Charts/ +├── 1/ +│ └── main.tja +├── 3/ +│ └── main.tja +... +``` + +4. 修改ChartLoader加载方式: + +```csharp +public void LoadChart(string songId) +{ + string path = Path.Combine(Application.streamingAssetsPath, "Charts", songId, "main.tja"); + + if(File.Exists(path)) + { + TJAParser parser = new TJAParser(); + ChartData chart = parser.Parse(path); + // ... 继续处理 + } +} +``` + +--- + +## 第五阶段:完善与优化 + +### 第1步:完善游戏流程(3-4天) + +**创建场景切换**: + +1. **主菜单场景**(MainMenu.scene): +```csharp +// MainMenuController.cs +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UI; + +public class MainMenuController : MonoBehaviour +{ + public Button playButton; + public Button settingsButton; + public Button exitButton; + + void Start() + { + playButton.onClick.AddListener(OnPlayClicked); + settingsButton.onClick.AddListener(OnSettingsClicked); + exitButton.onClick.AddListener(OnExitClicked); + } + + void OnPlayClicked() + { + SceneManager.LoadScene("SongSelect"); + } + + void OnSettingsClicked() + { + // 打开设置界面 + } + + void OnExitClicked() + { + Application.Quit(); + } +} +``` + +2. **选歌场景**(SongSelect.scene): +```csharp +// SongSelectController.cs +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UI; +using System.Collections.Generic; + +public class SongSelectController : MonoBehaviour +{ + public Transform songListParent; + public GameObject songItemPrefab; + + private List songIds = new List{"1", "3", "4", "5"...}; + + void Start() + { + LoadSongList(); + } + + void LoadSongList() + { + foreach(string songId in songIds) + { + GameObject item = Instantiate(songItemPrefab, songListParent); + SongItem songItem = item.GetComponent(); + songItem.Setup(songId, OnSongSelected); + } + } + + void OnSongSelected(string songId) + { + // 保存选择的歌曲ID + PlayerPrefs.SetString("SelectedSong", songId); + + // 加载游戏场景 + SceneManager.LoadScene("Game"); + } +} +``` + +3. **游戏场景控制器**: +```csharp +// GameSceneController.cs +using UnityEngine; +using UnityEngine.SceneManagement; + +public class GameSceneController : MonoBehaviour +{ + public ChartLoader chartLoader; + public NoteManager noteManager; + public ScoreManager scoreManager; + public AudioManager audioManager; + + private float countdownTime = 3f; + private bool gameStarted = false; + + void Start() + { + // 获取选择的歌曲 + string songId = PlayerPrefs.GetString("SelectedSong", "1"); + + // 加载谱面 + chartLoader.LoadChart(songId); + + // 重置分数 + scoreManager.ResetScore(); + + // 开始倒计时 + StartCoroutine(StartCountdown()); + } + + System.Collections.IEnumerator StartCountdown() + { + // 显示3, 2, 1... + for(int i = 3; i > 0; i--) + { + UIManager.Instance?.ShowCountdown(i); + yield return new WaitForSeconds(1f); + } + + // 开始游戏 + gameStarted = true; + GameManager.Instance.isPlaying = true; + audioManager.PlayMusic(); + } + + void Update() + { + if(gameStarted) + { + GameManager.Instance.gameTime = audioManager.GetMusicTime(); + } + + // 检测暂停 + if(Input.GetKeyDown(KeyCode.Escape)) + { + PauseGame(); + } + } + + void PauseGame() + { + // 显示暂停菜单 + } + + public void ReturnToMenu() + { + SceneManager.LoadScene("MainMenu"); + } +} +``` + +### 第2步:添加特效和动画(2-3天) + +**打击特效**: +```csharp +// EffectManager.cs +using UnityEngine; + +public class EffectManager : MonoBehaviour +{ + public static EffectManager Instance { get; private set; } + + public GameObject perfectEffectPrefab; + public GameObject goodEffectPrefab; + public GameObject badEffectPrefab; + + void Awake() + { + if(Instance == null) + Instance = this; + } + + public void ShowJudgeEffect(Vector3 position, JudgeResult result) + { + GameObject prefab = null; + + switch(result) + { + case JudgeResult.Perfect: + prefab = perfectEffectPrefab; + break; + case JudgeResult.Good: + prefab = goodEffectPrefab; + break; + case JudgeResult.Bad: + prefab = badEffectPrefab; + break; + } + + if(prefab != null) + { + GameObject effect = Instantiate(prefab, position, Quaternion.identity); + Destroy(effect, 1f); // 1秒后销毁 + } + + // 显示判定文字 + UIManager.Instance?.ShowJudgeResult(result); + } +} +``` + +**连击数动画**: +```csharp +// ComboAnimator.cs +using UnityEngine; +using UnityEngine.UI; + +public class ComboAnimator : MonoBehaviour +{ + public Text comboText; + private Animator animator; + + void Start() + { + animator = GetComponent(); + } + + public void PlayAnimation() + { + if(animator != null) + { + animator.SetTrigger("Pop"); + } + } +} +``` + +### 第3步:优化和调试(2-3天) + +**性能优化**: + +1. **对象池**(避免频繁Instantiate和Destroy): +```csharp +// ObjectPool.cs +using System.Collections.Generic; +using UnityEngine; + +public class ObjectPool : MonoBehaviour +{ + public GameObject prefab; + public int initialSize = 50; + + private Queue pool = new Queue(); + + void Start() + { + for(int i = 0; i < initialSize; i++) + { + GameObject obj = Instantiate(prefab); + obj.SetActive(false); + pool.Enqueue(obj); + } + } + + public GameObject Get() + { + if(pool.Count > 0) + { + GameObject obj = pool.Dequeue(); + obj.SetActive(true); + return obj; + } + else + { + return Instantiate(prefab); + } + } + + public void Return(GameObject obj) + { + obj.SetActive(false); + pool.Enqueue(obj); + } +} +``` + +2. **音符生成优化**: +```csharp +// 在NoteManager中使用对象池 +private ObjectPool notePool; + +void SpawnNote(NoteData noteData) +{ + GameObject noteObj = notePool.Get(); + // ... 设置音符 +} + +// 音符销毁时 +public void ReturnNote(GameObject note) +{ + notePool.Return(note); +} +``` + +**调试工具**: +```csharp +// DebugManager.cs +using UnityEngine; + +public class DebugManager : MonoBehaviour +{ + public bool showDebugInfo = true; + public KeyCode toggleKey = KeyCode.F1; + + void Update() + { + if(Input.GetKeyDown(toggleKey)) + { + showDebugInfo = !showDebugInfo; + } + } + + void OnGUI() + { + if(!showDebugInfo) + return; + + GUILayout.BeginArea(new Rect(10, 10, 300, 200)); + GUILayout.Box("Debug Info"); + + GUILayout.Label($"FPS: {(int)(1f / Time.deltaTime)}"); + GUILayout.Label($"Game Time: {GameManager.Instance.gameTime:F2}"); + GUILayout.Label($"Active Notes: {GameObject.FindGameObjectsWithTag("Note").Length}"); + + if(GUILayout.Button("Restart")) + { + UnityEngine.SceneManagement.SceneManager.LoadScene( + UnityEngine.SceneManagement.SceneManager.GetActiveScene().name + ); + } + + GUILayout.EndArea(); + } +} +``` + +### 第4步:构建和发布(1天) + +**构建设置**: + +1. **PC版本**: + ``` + File → Build Settings + - Platform: Windows/Mac/Linux + - Architecture: x86_64 + - Target Platform: Windows/macOS/Linux + 点击"Build" + ``` + +2. **WebGL版本**: + ``` + File → Build Settings + - Platform: WebGL + - Compression Format: Gzip + - Memory Size: 256MB+(根据需要) + 点击"Build" + + 发布到网站: + 将生成的Build文件夹上传到服务器 + 访问index.html + ``` + +--- + +## 📚 额外学习资源 + +### Unity官方资源 +- Learn Unity: https://learn.unity.com/ +- 官方文档: https://docs.unity3d.com/ +- 官方论坛: https://forum.unity.com/ + +### 视频教程 +- Brackeys(YouTube): 最受欢迎的Unity教程频道 +- sykoo(YouTube): 节奏游戏制作教程 +- GameDev.tv: Udemy上的优质课程 + +### 参考项目 +- OpenTaiko: Unity太鼓达人开源项目 +- Taiko no Tatsujin PC: 参考游戏机制 + +### 社区 +- Unity中文社区: https://unity.cn/ +- r/Unity2D (Reddit): 2D游戏开发讨论 +- Discord服务器: Unity Game Dev Community + +--- + +## ⚠️ 常见问题和解决方案 + +### Q1: Unity太慢/卡顿? +**A**: +- 检查是否开启了"Auto Refresh"(可以关闭) +- 使用Fast Enter Play Mode +- 关闭不必要的Editor窗口 + +### Q2: 音频延迟问题? +**A**: +```csharp +// 在Project Settings → Audio中 +// DSP Buffer Size: Best Latency +// 在代码中添加音频延迟补偿 +public float audioLatency = 0.1f; +``` + +### Q3: 谱面时间不同步? +**A**: +- 检查BPM解析是否正确 +- 添加Offset调整 +- 使用`Time.time`而不是`Time.deltaTime`累加 + +### Q4: 打包后找不到文件? +**A**: +- 使用`Application.streamingAssetsPath` +- 检查文件是否在StreamingAssets文件夹 +- WebGL需要使用UnityWebRequest异步加载 + +--- + +## ✅ 完成检查清单 + +### 学习阶段 +- [ ] Unity界面熟悉 +- [ ] C#基础语法掌握 +- [ ] 2D游戏基础了解 +- [ ] 简单Demo完成 + +### 开发阶段 +- [ ] 项目结构搭建 +- [ ] 音符系统实现 +- [ ] 输入系统实现 +- [ ] 谱面解析器完成 +- [ ] 音频系统完成 +- [ ] UI系统完成 +- [ ] 分数系统完成 + +### 完善阶段 +- [ ] 场景切换完成 +- [ ] 特效和动画添加 +- [ ] 性能优化 +- [ ] 调试工具添加 + +### 发布阶段 +- [ ] PC版本测试 +- [ ] WebGL版本测试 +- [ ] 所有功能测试通过 + +--- + +## 🎯 下一步行动 + +1. **立即开始**: + - 今天安装Unity + - 创建第一个测试项目 + - 完成第一个脚本 + +2. **本周目标**: + - 完成Unity基础学习 + - 制作简单Demo + +3. **本月目标**: + - 完成核心功能实现 + - 能够加载和播放一首歌 + +4. **长期目标**: + - 完整游戏发布 + - 添加更多功能(多人模式、自定义皮肤等) + +--- + +## 💡 最后的建议 + +1. **循序渐进**:不要急于实现所有功能,先做一个最简单的版本能跑起来 +2. **多实践**:看教程的同时一定要动手做 +3. **善用搜索**:遇到问题先Google/百度,大部分问题都有解决方案 +4. **保存进度**:经常commit代码到Git +5. **不要放弃**:遇到困难很正常,坚持学习就能完成 + +祝你迁移顺利!有任何问题随时问我。🎮✨ diff --git a/api/categories.json b/api/categories.json new file mode 100644 index 0000000..f915b03 --- /dev/null +++ b/api/categories.json @@ -0,0 +1,146 @@ +[ + { + "aliases": null, + "id": 1, + "song_skin": { + "background": "#219fbb", + "bg_img": "bg_genre_0.png", + "border": ["#7ec3d3", "#0b6773"], + "info_fill": "#004d68", + "outline": "#005058", + "sort": 1 + }, + "title": "Pop", + "title_lang": { + "cn": "流行音乐", + "en": "Pop", + "ja": "J-POP", + "ko": "POP", + "tw": "流行音樂" + } + }, + { + "aliases": null, + "id": 2, + "song_skin": { + "background": "#ff9700", + "bg_img": "bg_genre_1.png", + "border": ["#ffdb8c", "#e75500"], + "info_fill": "#9c4002", + "outline": "#9c4100", + "sort": 2 + }, + "title": "Anime", + "title_lang": { + "cn": "卡通动画音乐", + "en": "Anime", + "ja": "アニメ", + "ko": "애니메이션", + "tw": "卡通動畫音樂" + } + }, + { + "aliases": ["ボーカロイド曲", "ボーカロイド", "vocaloid music", "vocaloid"], + "id": 3, + "song_skin": { + "background": "#def2ef", + "bg_img": "bg_genre_2.png", + "border": ["#f7fbff", "#79919f"], + "info_fill": "#546184", + "outline": "#5a6584", + "sort": 3 + }, + "title": "VOCALOID™ Music", + "title_lang": { + "en": "VOCALOID™ Music", + "ja": "ボーカロイド™曲" + } + }, + { + "aliases": [ + "バラエティー", + "どうよう", + "童謡・民謡", + "children", + "children/folk", + "children-folk" + ], + "id": 4, + "song_skin": { + "background": "#8fd321", + "bg_img": "bg_genre_3.png", + "border": ["#f7fbff", "#587d0b"], + "info_fill": "#3c6800", + "outline": "#374c00", + "sort": 4 + }, + "title": "Variety", + "title_lang": { + "cn": "综合音乐", + "en": "Variety", + "ja": "バラエティ", + "ko": "버라이어티", + "tw": "綜合音樂" + } + }, + { + "aliases": ["クラッシック", "classic"], + "id": 5, + "song_skin": { + "background": "#d1a016", + "bg_img": "bg_genre_4.png", + "border": ["#e7cf6b", "#9a6b00"], + "info_fill": "#865800", + "outline": "#734d00", + "sort": 5 + }, + "title": "Classical", + "title_lang": { + "cn": "古典音乐", + "en": "Classical", + "ja": "クラシック", + "ko": "클래식", + "tw": "古典音樂" + } + }, + { + "aliases": null, + "id": 6, + "song_skin": { + "background": "#9c72c0", + "bg_img": "bg_genre_5.png", + "border": ["#bda2ce", "#63407e"], + "info_fill": "#4f2886", + "outline": "#4b1c74", + "sort": 6 + }, + "title": "Video Game Series", + "title_lang": { + "cn": "游戏音乐", + "en": "Video Game Series", + "ja": "ゲームミュージック", + "ko": "게임", + "tw": "遊戲音樂" + } + }, + { + "aliases": null, + "id": 7, + "song_skin": { + "background": "#ff5716", + "bg_img": "bg_genre_6.png", + "border": ["#ffa66b", "#b53000"], + "info_fill": "#961e00", + "outline": "#941c00", + "sort": 7 + }, + "title": "NAMCO Original", + "title_lang": { + "cn": "NAMCO原创音乐", + "en": "NAMCO Original", + "ja": "ナムコオリジナル", + "ko": "남코 오리지널", + "tw": "NAMCO原創音樂" + } + } +] diff --git a/api/config.json b/api/config.json new file mode 100644 index 0000000..ec6f888 --- /dev/null +++ b/api/config.json @@ -0,0 +1,169 @@ +{ + "_version": { + "commit": "f7617c1b7492e30011a1f08e8f3a023839aa41bd", + "commit_short": "f7617c1", + "url": "https://github.com/bui/taiko-web/", + "version": "8.31.23" + }, + "accounts": false, + "assets_baseurl": "https://cdn.glitch.global/db467c7c-4f64-417e-b597-01745ea525ee/", + "assets_no_dir": true, + "custom_js": "", + "email": null, + "google_credentials": { + "api_key": "", + "gdrive_enabled": true, + "min_level": null, + "oauth_client_id": "", + "project_number": "" + }, + "plugins": [ + { + "hide": false, + "start": true, + "url": "/default-patches.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/gameplay/change-music-speed.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/gameplay/change-timing-window.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/gameplay/custom-scroll-speed.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/gameplay/rainbow-crown.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/gameplay/skip-results-in-multiplayer.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/gameplay/spartan-mode.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/gameplay/multiplayer-custom-songs.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/song-select/change-song-select-speed.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/song-select/download-chart.taikoweb.js" + }, + { + "hide": false, + "start": true, + "url": "/plugins/workarounds/offline-account.taikoweb.js" + }, + { + "hide": false, + "start": true, + "url": "/plugins/languages/language-es-419.taikoweb.js" + }, + { + "hide": false, + "start": true, + "url": "/plugins/languages/language-fr.taikoweb.js" + }, + { + "hide": false, + "start": true, + "url": "/plugins/languages/language-pl.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/accessibility/disable-animations.taikoweb.js" + }, + { + "hide": false, + "start": true, + "url": "/plugins/accessibility/backup-and-restore-scores.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/accessibility/dpad-axis-input.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/custom-songs/green-notes.taikoweb.js" + }, + { + "hide": false, + "start": true, + "url": "/plugins/custom-songs/custom-barlines.taikoweb.js" + }, + { + "hide": false, + "start": true, + "url": "/plugins/custom-songs/loading-background.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/for-fun/big-ok.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/debugging-testing/millisecond-accuracy.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/debugging-testing/show-bpm.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/debugging-testing/display-game-cache.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/debugging-testing/debug-button.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/debugging-testing/convert-lyrics-to-vtt.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/examples/language-en.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/plugins/examples/example-plugin.taikoweb.js" + }, + { + "hide": false, + "start": false, + "url": "/disable-judge-scores.taikoweb.js" + } + ], + "preview_type": "mp3", + "songs_baseurl": "/songs/" +} diff --git a/api/songs.json b/api/songs.json new file mode 100644 index 0000000..4243131 --- /dev/null +++ b/api/songs.json @@ -0,0 +1,731 @@ +[ + { + "id": 1, + "order": 1, + "title": "The Disappearance of Hatsune Miku -DEAD END-", + "subtitle": "Hatsune Miku", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 10, + "branch": false + }, + "ura": null + }, + "preview": 106.7, + "category_id": 3, + "category": "VOCALOID™ Music", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 3, + "order": 3, + "title": "PoPiPo", + "subtitle": "Hatsune Miku", + "courses": { + "easy": { + "stars": 2, + "branch": false + }, + "normal": { + "stars": 6, + "branch": false + }, + "hard": { + "stars": 4, + "branch": false + }, + "oni": { + "stars": 8, + "branch": false + }, + "ura": { + "stars": 9, + "branch": false + } + }, + "preview": 44.8, + "category_id": 3, + "category": "VOCALOID™ Music", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 4, + "order": 4, + "title": "Deep Sea Girl", + "subtitle": "Hatsune Miku", + "courses": { + "easy": { + "stars": 3, + "branch": false + }, + "hard": { + "stars": 6, + "branch": false + }, + "normal": { + "stars": 5, + "branch": false + }, + "oni": { + "stars": 8, + "branch": false + }, + "ura": null + }, + "preview": 43, + "category_id": 3, + "category": "VOCALOID™ Music", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 5, + "order": 5, + "title": "Last Goodbye", + "subtitle": "Toby Fox", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 9, + "branch": false + }, + "ura": null + }, + "preview": 2.775, + "category_id": 6, + "category": "Video Game Series", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 7, + "order": 7, + "title": "Super Smash Bros. Brawl Main Theme", + "subtitle": "Shogo Sakai/Nobuo Uematsu", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 6, + "branch": false + }, + "ura": null + }, + "preview": 3.9528, + "category_id": 6, + "category": "Video Game Series", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 8, + "order": 8, + "title": "Cirno's Perfect Math Class", + "subtitle": "IOSYS", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 10, + "branch": false + }, + "ura": null + }, + "preview": 10.65, + "category_id": 6, + "category": "Video Game Series", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 10, + "order": 10, + "title": "FREEDOM D↓VE", + "subtitle": "XI", + "courses": { + "easy": { + "stars": 3, + "branch": false + }, + "hard": { + "stars": 6, + "branch": false + }, + "normal": { + "stars": 5, + "branch": false + }, + "oni": { + "stars": 10, + "branch": false + }, + "ura": { + "stars": 11, + "branch": false + } + }, + "preview": 64.9, + "category_id": 4, + "category": "Variety", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 11, + "order": 11, + "title": "Good Time", + "subtitle": "Owl City & Carly Rae Jepsen", + "courses": { + "easy": null, + "hard": { + "stars": 8, + "branch": false + }, + "normal": null, + "oni": { + "stars": 10, + "branch": false + }, + "ura": null + }, + "preview": 64.9, + "category_id": 1, + "category": "Pop", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 12, + "order": 12, + "title": "Nekozilla", + "subtitle": "Different Heaven", + "courses": { + "easy": { + "stars": 4, + "branch": false + }, + "hard": { + "stars": 7, + "branch": false + }, + "normal": { + "stars": 6, + "branch": false + }, + "oni": { + "stars": 9, + "branch": false + }, + "ura": { + "stars": 10, + "branch": false + } + }, + "preview": 80.7, + "category_id": 4, + "category": "Variety", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 13, + "order": 13, + "title": "Mottai Night Land", + "subtitle": "Kyary Pamyu Pamyu", + "courses": { + "easy": { + "stars": 3, + "branch": false + }, + "hard": { + "stars": 6, + "branch": false + }, + "normal": { + "stars": 5, + "branch": false + }, + "oni": { + "stars": 7, + "branch": false + }, + "ura": null + }, + "preview": 70.601, + "category_id": 1, + "category": "Pop", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 14, + "order": 14, + "title": "Deja Vu", + "subtitle": "INITIAL D / Dave Rodgers", + "courses": { + "easy": { + "stars": 3, + "branch": false + }, + "hard": { + "stars": 5, + "branch": false + }, + "normal": { + "stars": 5, + "branch": false + }, + "oni": { + "stars": 8, + "branch": false + }, + "ura": null + }, + "preview": 63.805, + "category_id": 2, + "category": "Anime", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 15, + "order": 15, + "title": "Sky High", + "subtitle": "Jun Ishikawa", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 6, + "branch": false + }, + "ura": null + }, + "preview": -0.55, + "category_id": 6, + "category": "Video Game Series", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 16, + "order": 16, + "title": "Brinstar (Melee)", + "subtitle": "Hirokazu Ando, Shogo Sakai, Tadashi Ikegami, Takuto Kitsuta", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 8, + "branch": false + }, + "ura": null + }, + "preview": -0.07, + "category_id": 6, + "category": "Video Game Series", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, + { + "id": 18, + "order": 18, + "title": "LECIEL GLISSANDO", + "subtitle": "--Yomii", + "courses": { + "easy": { + "stars": 5, + "branch": false + }, + "hard": { + "stars": 7, + "branch": false + }, + "normal": { + "stars": 6, + "branch": false + }, + "oni": { + "stars": 10, + "branch": false + }, + "ura": null + }, + "preview": -4.246, + "category_id": 7, + "category": "Namco Originals", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, { + "id": 19, + "order": 19, + "title": "SAVE the World", + "subtitle": "Toby Fox", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 9, + "branch": false + }, + "ura": null + }, + "preview": 0.08, + "category_id": 6, + "category": "Video Game Series", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + }, { + "id": 20, + "order": 20, + "title": "U.N. Owen Was Her?", + "subtitle": "Touhou Project", + "courses": { + "easy": null, + "hard": null, + "normal": null, + "oni": { + "stars": 10, + "branch": false + }, + "ura": null + }, + "preview": 30.530, + "category_id": 6, + "category": "Video Game Series", + "title_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "subtitle_lang": { + "ja": null, + "en": null, + "cn": null, + "tw": null, + "ko": null + }, + "type": "tja", + "music_type": "ogg", + "volume": 1.0, + "lyrics": false, + "offset": null, + "song_skin": null, + "maker": null, + "hash": null + } +] diff --git a/default-patches.taikoweb.js b/default-patches.taikoweb.js new file mode 100644 index 0000000..27a3374 --- /dev/null +++ b/default-patches.taikoweb.js @@ -0,0 +1,33 @@ +export default class Plugin extends Patch{ + name = "Default patches" + version = "23.01.11" + description = "Opens the correct privacy file. Suppresses multiplayer errors. Allows importing assets through gdrive. Does not include the custom code in loader.js, which uses correct paths for api files." + author = "Katie Frogs" + + load(){ + this.addEdits( + new EditFunction(CustomSongs.prototype, "openPrivacy").load(str => { + return plugins.insertAfter(str, 'open("privacy', `.txt`) + }), + new EditFunction(Account.prototype, "openPrivacy").load(str => { + return plugins.insertAfter(str, 'open("privacy', `.txt`) + }), + new EditFunction(ImportSongs.prototype, "load").load(str => { + return plugins.strReplace(str, '!this.limited && (path.indexOf("/taiko-web assets/")', `(path.indexOf("/taiko-web assets/")`) + }), + new EditFunction(LoadSong.prototype, "run").load(str => { + str = plugins.strReplace(str, ' + "img/touch_drum.png"', ` + (gameConfig.assets_no_dir ? "touch_drum.png" : "img/touch_drum.png")`) + return plugins.strReplace(str, ' + "img/"', ` + (gameConfig.assets_no_dir ? "" : "img/")`) + }), + new EditFunction(LoadSong.prototype, "loadSongBg").load(str => { + return plugins.strReplace(str, ' + "img/"', ` + (gameConfig.assets_no_dir ? "" : "img/")`) + }) + ) + } + start(){ + p2.disable() + } + stop(){ + p2.enable() + } +} diff --git a/disable-judge-scores.taikoweb.js b/disable-judge-scores.taikoweb.js new file mode 100644 index 0000000..a709988 --- /dev/null +++ b/disable-judge-scores.taikoweb.js @@ -0,0 +1,17 @@ +export default class Plugin extends Patch{ + name = "Disable Judge Scores" + version = "22.03.05" + description = "" + author = "Katie Frogs" + + load(){ + this.addEdits( + new EditFunction(CanvasDraw.prototype, "score").load(str => { + return "" + }), + new EditFunction(View.prototype, "refresh").load(str => { + return plugins.strReplace(str, 'this.assets.drawAssets("notes")', "") + }) + ) + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..ffdbba6 --- /dev/null +++ b/index.html @@ -0,0 +1,54 @@ + + + + + Obscure Taiko + + + + + + + + + + + + + + + + + +
+
+ + + + + + diff --git a/loader-patch.js b/loader-patch.js new file mode 100644 index 0000000..c075786 --- /dev/null +++ b/loader-patch.js @@ -0,0 +1,21 @@ +;(() => { + var initStr = Loader.prototype.init.toString() + initStr = initStr.slice(initStr.indexOf("{") + 1, initStr.lastIndexOf("}")) + initStr = initStr.replace('"api/config"', '"api/config.json"') + Loader.prototype.init = Function("callback", initStr) + + var runStr = Loader.prototype.run.toString() + runStr = runStr.slice(runStr.indexOf("{") + 1, runStr.lastIndexOf("}")) + runStr = runStr.replace('"api/categories"', '"api/categories.json"') + runStr = runStr.replace('ajax("api/songs"', 'ajax("api/songs.json"') + runStr = runStr.replace(' + "fonts/"', ' + (gameConfig.assets_no_dir ? "" : "fonts/")') + runStr = runStr.replaceAll(' + "img/"', ' + (gameConfig.assets_no_dir ? "" : "img/")') + runStr = runStr.replace('gameConfig.assets_baseurl + "img/vectors.json"', '(gameConfig.assets_no_dir ? "vectors.json" : gameConfig.assets_baseurl + "img/vectors.json")') + runStr = runStr.replace('directory + "main." + songExt', '(gameConfig.assets_no_dir ? gameConfig.assets_baseurl + song.id + "." + songExt : directory + "main." + songExt)') + Loader.prototype.run = Function(runStr) + + var soundUrlStr = Loader.prototype.soundUrl.toString() + soundUrlStr = soundUrlStr.slice(soundUrlStr.indexOf("{") + 1, soundUrlStr.lastIndexOf("}")) + soundUrlStr = soundUrlStr.replace(' + "audio/"', ' + (gameConfig.assets_no_dir ? "" : "audio/")') + Loader.prototype.soundUrl = Function("name", soundUrlStr) +})() diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity new file mode 100644 index 0000000..94cbf03 --- /dev/null +++ b/node_modules/.yarn-integrity @@ -0,0 +1,10 @@ +{ + "systemParams": "win32-x64-115", + "modulesFolders": [], + "flags": [], + "linkedModules": [], + "topLevelPatterns": [], + "lockfileEntries": {}, + "files": [], + "artifacts": {} +} \ No newline at end of file diff --git a/plugins/LICENSE b/plugins/LICENSE new file mode 100644 index 0000000..618368e --- /dev/null +++ b/plugins/LICENSE @@ -0,0 +1,4 @@ +The author of this work hereby waives all claim of copyright (economic and moral) +in this work and immediately places it in the public domain; it may be used, +distorted or destroyed in any manner whatsoever without further attribution or +notice to the creator. diff --git a/plugins/README.md b/plugins/README.md new file mode 100644 index 0000000..dc88ae8 --- /dev/null +++ b/plugins/README.md @@ -0,0 +1,108 @@ +## Taiko Web Plugins +Expand the feature set of [Taiko Web](https://github.com/bui/taiko-web) with plugins. Save these .taikoweb.js files into a folder (right click and save as on the links below) and load them in-game via the Custom Song List button. + +### Gameplay +- [**Change Music Speed**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/change-music-speed.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/change-music-speed.taikoweb.js) + Slow down or speed up the music in game + - (ja) [音楽の速度を変更](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/change-music-speed.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/change-music-speed.taikoweb.js) + 音楽の速度を変更します + +- [**Change Timing Window**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/change-timing-window.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/change-timing-window.taikoweb.js) + Custom input interval for in-game notes + +- [**Custom Scroll Speed**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/custom-scroll-speed.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/custom-scroll-speed.taikoweb.js) + Changes the speed the notes scroll at in game + +- [**Rainbow Crown**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/rainbow-crown.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/rainbow-crown.taikoweb.js) + Donder-Full Combos will give rainbow crowns + +- [**Skip Results in Multiplayer**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/skip-results-in-multiplayer.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/skip-results-in-multiplayer.taikoweb.js) + Enables skipping the results screen in multiplayer, however, the other player will not get to see the full results screen without the plugin + - [Userscript version](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/userscripts/skip-results-in-multiplayer.user.js) + +- [**Spartan Mode**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/spartan-mode.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/spartan-mode.taikoweb.js) + End song on first bad hit + +- [**Multiplayer Custom Songs**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/multiplayer-custom-songs.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/gameplay/multiplayer-custom-songs.taikoweb.js) + Extends netplay and session multiplayer to custom song lists, both players are required to have the same folders + +### Song Select +- [**Change Song Select Speed**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/song-select/change-song-select-speed.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/song-select/change-song-select-speed.taikoweb.js) + Changes the song selection scroll speed + +- [**Download Chart**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/song-select/download-chart.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/song-select/download-chart.taikoweb.js) + Enables downloading chart and music files from the song select + +### Workarounds +- [**Offline Account**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/workarounds/offline-account.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/workarounds/offline-account.taikoweb.js) + Allows setting your name and customizing your Don without logging in + +- [**Old Song List**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/workarounds/old-song-list.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/workarounds/old-song-list.taikoweb.js) + Restores the default taiko.bui.pm song list to show non-custom songs + +- [**Plugins in Old Taiko Web (Userscript)**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/userscripts/plugins-in-old-taiko-web.user.js) + Implements the plugin interface in older versions of taiko-web, a userscript manager extension is required + +### Additional Languages +- [**Language: Spanish (Latin America)**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-es-419.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-es-419.taikoweb.js) + - (es-419) [Idioma: Español (Latinoamérica)](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-es-419.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-es-419.taikoweb.js) + +- [**Language: French**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-fr.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-fr.taikoweb.js) + - (fr) [Langue: Français](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-fr.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-fr.taikoweb.js) + +- [**Language: Polish**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-pl.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-pl.taikoweb.js) + - (pl) [Język: Polski](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-pl.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/languages/language-pl.taikoweb.js) + +### Accessibility +- [**Disable Animations**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/accessibility/disable-animations.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/accessibility/disable-animations.taikoweb.js) + Turn off most of the animated elements in the game + +- [**D-pad Axis Input**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/accessibility/dpad-axis-input.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/accessibility/dpad-axis-input.taikoweb.js) + Binds axis input to D-pad for gamepads + +- [**Backup and Restore Scores**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/accessibility/backup-and-restore-scores.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/accessibility/backup-and-restore-scores.taikoweb.js) + Save and load score data to a file + +### Custom Songs +- [**Green Notes**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/green-notes.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/green-notes.taikoweb.js) + Adds support for green notes (G) and ad-lib notes (F) in custom charts + +- [**Custom Barlines**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/custom-barlines.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/custom-barlines.taikoweb.js) + Adds #BARLINESCROLL and #BARLINE to the tja format. #BARLINESCROLL can be used to set independent speed values on the measure lines, can be set to a floating point value or off. #BARLINE can insert measure lines anywhere in the chart. + +- [**Loading Background**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/loading-background.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/loading-background.taikoweb.js) + Shows a custom loading background if a loading.png file is in the same directory as the chart + +- [**Fumen File Format**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/fumen-file-format.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/custom-songs/fumen-file-format.taikoweb.js) + Adds support for using Fumen files in the custom song list + +### For Fun +- [**Big OK**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/for-fun/big-ok.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/for-fun/big-ok.taikoweb.js) + When you get an OK judge score, the whole screen becomes a big OK + +### Debugging and Testing +- [**Millisecond Accuracy**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/millisecond-accuracy.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/millisecond-accuracy.taikoweb.js) + Replaces the judge score with the accuracy in milliseconds + - (ja) [ミリ秒単位の精度](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/millisecond-accuracy.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/millisecond-accuracy.taikoweb.js) + 判定点数をミリ秒単位の精度に置き換えます + +- [**Show BPM**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/show-bpm.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/show-bpm.taikoweb.js) + Displays the current BPM in game + - (ja) [BPMを表示する](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/show-bpm.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/show-bpm.taikoweb.js) + ゲーム中のBPMを表示します + +- [**Display Game Cache**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/display-game-cache.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/display-game-cache.taikoweb.js) + Appends cached assets below the game + +- [**Debug Button**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/debug-button.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/debug-button.taikoweb.js) + Adds a button to access the debug window + +- [**Convert Lyrics to vtt**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/convert-lyrics-to-vtt.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/debugging-testing/convert-lyrics-to-vtt.taikoweb.js) + Adds an option to the pause screen to download converted lyrics in WEBVTT format + +### Examples for Developers +- [**Language: English**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/examples/language-en.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/examples/language-en.taikoweb.js) + Example language plugin for translators + +- [**Example Plugin**](https://github.com/KatieFrogs/taiko-web-plugins/raw/main/examples/example-plugin.taikoweb.js) [(⬇️)](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/KatieFrogs/taiko-web-plugins/raw/main/examples/example-plugin.taikoweb.js) + Replaces the judge score with great/cool/miss diff --git a/plugins/accessibility/backup-and-restore-scores.taikoweb.js b/plugins/accessibility/backup-and-restore-scores.taikoweb.js new file mode 100644 index 0000000..f812582 --- /dev/null +++ b/plugins/accessibility/backup-and-restore-scores.taikoweb.js @@ -0,0 +1,221 @@ +export default class Plugin extends Patch{ + name = "Backup and Restore Scores" + version = "23.01.05" + description = "Save and load score data to a file" + author = "Katie Frogs" + + settingsOpts = { + saveScores: { + name: "Save Scores", + name_lang: {}, + description: "Exports all the crowns and scores to a .json file", + description_lang: {}, + options: ["Download"], + options_lang: {}, + setItem: this.export.bind(this) + }, + loadScores: { + name: "Load Scores", + name_lang: {}, + description: "Imports all the scores from a .json file, merging with existing ones", + description_lang: {}, + options: ["Browse..."], + options_lang: {}, + setItem: this.import.bind(this) + } + } + + strings = { + scoresInvalid: "Selected file is not a valid scores file", + scoresInvalid_lang: {}, + noScores: "No scores were found in the provided file", + noScores_lang: {}, + scoresImported: "%s scores imported", + scoresImported_lang: {}, + scoresNotImported: "Scores could not be imported, please try again", + scoresNotImported_lang: {} + } + + selectSupported = SettingsView.prototype.getValue.toString().indexOf("current.options_lang") !== -1 + + export(){ + var obj = {} + if(account.loggedIn){ + obj.display_name = account.displayName + obj.don = account.don + }else{ + obj.display_name = strings.defaultName + obj.don = defaultDon + } + obj.scores = scoreStorage.prepareScores(scoreStorage.scoreStrings) + obj.status = "ok" + if(account.loggedIn){ + obj.username = account.username + }else{ + obj.username = allStrings.en.defaultName + } + + var text = JSON.stringify(obj) + "\n" + var blob = new Blob([text], { + type: "application/octet-stream" + }) + + var url = URL.createObjectURL(blob) + var link = document.createElement("a") + link.href = url + if("download" in HTMLAnchorElement.prototype){ + link.download = "taiko-web scores.json" + }else{ + link.target = "_blank" + } + link.innerText = "." + link.style.opacity = "0" + document.body.appendChild(link) + setTimeout(() => { + link.click() + document.body.removeChild(link) + setTimeout(() => { + URL.revokeObjectURL(url) + }, 5000) + }) + } + + import(){ + this.cleanup() + pageEvents.add(window, "song-select", this.cleanup.bind(this), this) + var browse = document.createElement("input") + this.browseButton = browse + pageEvents.add(browse, "change", this.browseChange.bind(this)) + browse.type = "file" + browse.style.width = "1px" + browse.style.height = "1px" + browse.style.opacity = "0" + document.body.appendChild(browse) + setTimeout(() => { + browse.click() + }) + } + + browseChange(event){ + if(event.target.files.length){ + var file = new LocalFile(event.target.files[0]) + file.read().then(data => { + try{ + var obj = JSON.parse(data) + }catch(e){ + alert(plugins.getLocalTitle(this.strings.scoresInvalid, this.strings.scoresInvalid_lang)) + } + if(Array.isArray(obj.scores) && obj.scores.length){ + var scores = {} + obj.scores.forEach(scoreObj => { + var hash = scoreObj.hash + var scoreString = scoreObj.score + if(typeof hash === "string" && typeof scoreString === "string" && hash && scoreString){ + var songAdded = false + var diffArray = scoreString.split(";") + for(var i in scoreStorage.difficulty){ + if(diffArray[i]){ + var crown = parseInt(diffArray[i].slice(0, 1)) || 0 + var score = { + crown: scoreStorage.crownValue[crown] || "" + } + var scoreArray = diffArray[i].slice(1).split(",") + for(var j in scoreStorage.scoreKeys){ + var name = scoreStorage.scoreKeys[j] + var value = parseInt(scoreArray[j] || 0, 36) || 0 + if(value < 0){ + value = 0 + } + score[name] = value + } + if(!songAdded){ + scores[hash] = {title: null} + songAdded = true + } + scores[hash][scoreStorage.difficulty[i]] = score + } + } + } + }) + var amount = 0 + for(var hash in scores){ + var oldScore = scoreStorage.scores[hash] + if(oldScore){ + var increased = false + for(var i in scoreStorage.difficulty){ + var diff = scoreStorage.difficulty[i] + var oldDiff = scoreStorage.scores[hash][diff] + var newDiff = scores[hash][diff] + if(oldDiff && newDiff){ + if(oldDiff.points < newDiff.points){ + if(oldDiff.crown === "gold" || oldDiff.crown === "silver" && !newDiff.crown){ + newDiff.crown = oldDiff.crown + } + scoreStorage.scores[hash][diff] = newDiff + increased = true + }else if(newDiff.crown === "gold" && oldDiff.crown !== "gold" || newDiff.crown && !oldDiff.crown){ + oldDiff.crown = newDiff.crown + increased = true + } + }else if(!oldDiff && newDiff){ + scoreStorage.scores[hash][diff] = newDiff + increased = true + } + } + if(increased){ + amount++ + } + }else{ + scoreStorage.scores[hash] = scores[hash] + amount++ + } + } + if(amount){ + return scoreStorage.save().then(() => { + alert(plugins.getLocalTitle(this.strings.scoresImported, this.strings.scoresImported_lang).replace("%s", amount.toString())) + }, () => { + alert(plugins.getLocalTitle(this.strings.scoresNotImported, this.strings.scoresNotImported_lang)) + }) + }else{ + alert(plugins.getLocalTitle(this.strings.scoresImported, this.strings.scoresImported_lang).replace("%s", amount.toString())) + } + }else{ + alert(plugins.getLocalTitle(this.strings.noScores, this.strings.noScores_lang)) + } + }).finally(() => { + this.cleanup() + }) + } + } + + cleanup(){ + pageEvents.remove(window, "song-select", this) + if(this.browseButton){ + pageEvents.remove(this.browseButton, "change") + this.browseButton.remove() + this.browseButtons = null + } + } + + unload(){ + this.cleanup() + } + + settings(){ + return Object.keys(this.settingsOpts).map(name => { + var str = this.settingsOpts[name] + return { + name: str.name, + name_lang: str.name_lang, + description: str.description, + description_lang: str.description_lang, + type: this.selectSupported ? "select" : "toggle", + options: str.options, + options_lang: str.options_lang, + default: this.selectSupported ? str.options[0] : false, + getItem: () => this.selectSupported ? str.options[0] : false, + setItem: str.setItem + } + }) + } +} diff --git a/plugins/accessibility/disable-animations.taikoweb.js b/plugins/accessibility/disable-animations.taikoweb.js new file mode 100644 index 0000000..29c4227 --- /dev/null +++ b/plugins/accessibility/disable-animations.taikoweb.js @@ -0,0 +1,344 @@ +export default class Plugin extends Patch{ + name = "Disable Animations" + version = "22.03.16" + description = "Turn off most of the animated elements in the game" + author = "Katie Frogs" + + disabledAnimations = { + "title screen proceed": true, + "highlight": true, + "dropzone fade": true, + "loading gif": true, + // song select + "song select background": true, + "song select background fade": true, + "song select move": true, + "song select fade in": true, + "song select ura fade": true, + "song select ura arrow": true, + // in-game + "pause don": true, + "don background": true, + "song background": true, + "taiko pressed keys": true, + "taiko pressed keys fade": true, + "combo change": true, + "bar pressed keys": true, + "judge score jump": true, + "judge score fade": false, + "note faces": true, + "note explosion": true, + "pause note explosion": true, + "note shadow": true, + "note shadow fade out": true, + "flying notes": true, + "flying note fade": true, + "go go time fire fade": true, + "pause go go time fire": true, + "go go time fireworks": true, + "pause go go time fireworks": true, + "branch bar change": false, + "branch text change": true, + // results + "results fade in": true, + "results object fade in": true, + "results crown": true, + "results countup": true, + "results tetsuo and hana": true, + "results mikoshi": true, + "results flowers": true, + "results fade out": true, + } + + load(){ + var d = this.disabledAnimations + this.addEdits( + new EditFunction(SongSelect.prototype, "init").load(str => { + if(d["song select move"]) + str = plugins.strReplace(str, 'speed: 400', `speed: 0`) + return str + }), + new EditFunction(SongSelect.prototype, "redraw").load(str => { + if(d["song select move"]){ + str = plugins.strReplace(str, + '(key === "right" || key === "left") ? 20', + `(key === "right" || key === "left") ? 150`) + str = plugins.insertBefore(str, `resize && `, 'this.state.moveMS && ms < this.state.moveMS + changeSpeed') + str = plugins.insertAfter(str, + 'var elapsed = ms - this.state.moveMS', ` + if(this.state.move){ + this.state.waitPreview = ms + 400 + if(this.previewing !== null){ + this.endPreview() + } + }`) + } + if(d["song select fade in"]){ + str = plugins.strReplace(str, + 'if(screen === "titleFadeIn"){', + `if(false){`) + } + if(d["song select ura fade"]) + str = plugins.insertBefore(str, + `alphaFade = alphaFade < 0.5 ? 0 : 1 + `, 'this.draw.alpha(alphaFade, ctx, ctx => {') + if(d["song select ura arrow"]) + str = plugins.strReplace(str, '((ms - this.state.screenMS) % 1200) / 1200', `0`) + if(d["highlight"]){ + str = plugins.strReplace(str, 'highlight = 1', `highlight = 2`, 6) + str = plugins.insertBefore(str, `false && `, '!p2.session && screen === "song"){') + str = plugins.strReplace(str, + 'highlight: highlight,', + `highlight: highlight ? 1 : 0,`, 3) + } + return str + }), + new EditFunction(View.prototype, "refresh").load(str => { + if(d["highlight"]) + str = plugins.strReplace(str, 'highlight = 1', `highlight = 2`, 2) + if(d["combo change"]) + str = plugins.insertBefore(str, + `comboScale = 0 + `, 'var glyphW = 51') + if(d["taiko pressed keys"]) + str = plugins.strReplace(str, + 'for(var i = 0; i < keys.length; i++){', + `for(var i = 0; i < 0; i++){`) + if(d["taiko pressed keys fade"]) + str = plugins.strReplace(str, 'keyMS > 70 && !this.touchEnabled', `false`) + if(d["judge score jump"]) + str = plugins.insertAfter(str, 'var fadeOut = scoreMS > 250 && !this.touchEnabled', ` + yOffset = 0`) + if(d["judge score fade"]) + str = plugins.insertAfter(str, 'var fadeOut = scoreMS > 250 && !this.touchEnabled', ` + fadeOut = 0`) + if(d["branch bar change"]) + str = plugins.strReplace(str, 'this.branchAnimate && ms <= this.branchAnimate.ms + 300', `false`) + if(d["branch text change"]) + str = plugins.strReplace(str, 'this.branchAnimate && ms - this.branchAnimate.ms < 310 && ms >= this.branchAnimate.ms', `false`) + if(d["bar pressed keys"]) + str = plugins.strReplace(str, 'keyTime[sound] > ms - 130', `false`) + if(d["note explosion"]) + str = plugins.strReplace(str, 'this.assets.drawAssets("notes")', ``) + if(d["note shadow"]) + str = plugins.strReplace(str, 'scoreMS < 300 && this.currentScore.type', `false`) + if(d["note shadow fade out"]) + str = plugins.strReplace(str, 'scoreMS > 120 && !this.touchEnabled', `false`) + if(d["go go time fireworks"]) + str = plugins.strReplace(str, + '!this.touchEnabled && !this.portrait && !this.multiplayer', + `false`) + return str + }), + new EditFunction(View.prototype, "drawAnimatedCircles").load(str => { + if(d["flying notes"]){ + str = plugins.insertAfter(str, + `if(circle.fixedPos`, ' || typeof circle.fixedPos === "undefined"') + str = plugins.insertBefore(str, + `else{ + continue + }`, 'var animPoint = (ms - animT) / 490') + str = plugins.insertAfter(str, + 'if(ms < animT + 810){', ` + continue;`) + } + if(d["flying notes"] || d["flying note fade"]){ + str = plugins.strReplace(str, 'circle.animationEnded = true', ``) + } + return str + }), + new EditFunction(View.prototype, "updateNoteFaces").load(str => { + if(d["note faces"]) + str = plugins.strReplace(str, 'this.controller.getCombo() >= 50', `false`) + return str + }), + new EditFunction(View.prototype, "updateCombo").load(str => { + if(d["pause don"]) + str = `return;` + str + return str + }), + new EditFunction(ViewAssets.prototype, "init").load(str => { + if(d["pause don"]) + str = plugins.insertAfter(str, '"background", frame => {', ` + frame = 0`) + if(d["pause note explosion"]) + str = plugins.insertAfter(str, '"notes", frame => {', ` + frame = 0`) + if(d["go go time fire fade"]){ + str = plugins.strReplace(str, '3 - Math.min(200, elapsed) / 100', `1`) + str = plugins.strReplace(str, 'Math.min(200, elapsed) / 200', `1`) + str = plugins.strReplace(str, '1 - Math.min(100, elapsed) / 100', `0`) + } + if(d["pause go go time fire"]) + str = plugins.insertAfter(str, '"bar", frame => {', ` + frame = 0`) + if(d["pause go go time fireworks"]) + str = plugins.insertAfter(str, '"foreground", frame => {', ` + frame = 0`) + return str + }), + new EditFunction(Scoresheet.prototype, "redraw").load(str => { + if(d["results fade in"]) + str = plugins.insertBefore(str, + `bgOffset = (bgOffset < winH / 4) ? 0 : winH / 2 + `, 'if(bgOffset){') + if(d["results object fade in"]){ + str = plugins.insertAfter(str, 'this.draw.alpha(Math.min(1, elapsed / 400)', ` < 0.5 ? 0 : 1`) + str = plugins.insertAfter(str, 'this.draw.alpha(Math.min(1, (elapsed - 800) / 500)', ` < 0.5 ? 0 : 1`) + str = plugins.strReplace(str, + 'ctx.globalAlpha = Math.min(1, Math.max(0, (elapsed - (3100 + failedOffset)) / 500)) * 0.5', + `ctx.globalAlpha = 0.5`) + } + if(d["results crown"]){ + str = plugins.strReplace(str, 'Math.min(1, (elapsed - 1200) / 450)', `1`) + str = plugins.insertBefore(str, + `crownScale = 1 + shine = 0 + `, 'if(this.state.screen === "fadeIn" && elapsed >= 1200') + } + return str + }), + new EditFunction(Scoresheet.prototype, "getNumber").load(str => { + if(d["results countup"]) + str = plugins.strReplace(str, 'this.numbers[numberPos % 30]', `"."`) + return str + }), + new EditFunction(Account.prototype, "accountForm").load(str => { + if(d["pause don"]) + str = plugins.strReplace(str, 'matchMedia("(prefers-reduced-motion: reduce)").matches', `true`) + return str + }) + ) + if(d["loading gif"]){ + var image = assets.image["dancing-don"] + var canvas = document.createElement("canvas") + canvas.width = image.width + canvas.height = image.height + var ctx = canvas.getContext("2d") + ctx.drawImage(image, 0, 0) + var promise = new Promise(resolve => { + try{ + canvas.toBlob(resolve) + }catch(e){ + resolve() + } + }).then(blob => { + if(blob){ + var image = document.createElement("img") + var promise = pageEvents.load(image) + image.id = "dancing-don2.gif" + image.src = URL.createObjectURL(blob) + return promise.then(() => { + loader.assetsDiv.appendChild(image) + this.newDancingDon = image + this.addEdits( + new EditValue(assets.image, "dancing-don").load(() => this.newDancingDon) + ) + }, () => Promise.resolve()) + } + }) + }else{ + var promise = Promise.resolve() + } + return promise.then(() => { + var css = [] + var playState = [] + if(d["song select background"]) + playState.push("#song-select") + if(d["don background"]) + playState.push(".donbg>div") + if(d["song background"]) + playState.push("#layer2") + if(d["title screen proceed"]) + playState.push("#title-proceed") + if(d["results tetsuo and hana"]) + playState.push("#tetsuo", "#tetsuo-in", "#hana", "#hana-in") + if(d["results mikoshi"]) + playState.push("#mikoshi", "#mikoshi-in") + if(playState.length) + css.push(loader.cssRuleset({ + [playState.join(", ")]: { + "animation-play-state": "paused !important" + } + })) + var animation = [] + if(d["highlight"]) + animation.push(".setting-box", ".setting-value") + if(d["results mikoshi"]) + animation.push("#mikoshi-out") + if(d["results flowers"]) + animation.push("#flowers1-in", "#flowers2-in") + if(animation.length) + css.push(loader.cssRuleset({ + [animation.join(", ")]: { + "animation": "none !important" + } + })) + var transition = [] + if(d["song select background fade"]) + transition.push("#song-select") + if(d["dropzone fade"]) + transition.push("#dropzone") + if(d["results tetsuo and hana"]) + transition.push("#tetsuo", "#hana") + if(d["results flowers"]) + transition.push("#flowers1", "#flowers2") + if(transition.length){ + css.push(loader.cssRuleset({ + [transition.join(", ")]: { + "transition": "none !important" + } + })) + } + if(d["highlight"]) + css.push(loader.cssRuleset({ + ".view-content:not(:hover) .setting-box.selected, .setting-box:hover": { + "border-color": "#ff0" + }, + ".setting-value.selected": { + "border-color": "#e29e06" + } + })) + if(d["results flowers"]) + css.push(loader.cssRuleset({ + "#tetsuohana.dance #flowers1-in, #tetsuohana.dance #flowers2-in": { + "background-position-y": "calc(-318px * var(--scale)) !important" + } + })) + if(d["results fade out"]) + css.push(loader.cssRuleset({ + "#fade-screen": { + "display": "none" + } + })) + if(d["loading gif"]) + css.push(loader.cssRuleset({ + "#loading-don": { + "background-image": this.newDancingDon ? `url("${this.newDancingDon.src}")` : "none" + } + })) + if(css.length){ + this.style = document.createElement("style") + this.style.appendChild(document.createTextNode(css.join("\n"))) + } + }) + } + start(){ + if(this.style){ + document.head.appendChild(this.style) + } + } + stop(){ + if(this.style && this.style.parentNode){ + this.style.parentNode.removeChild(this.style) + } + } + unload(){ + if(this.newDancingDon && this.newDancingDon.parentNode){ + URL.revokeObjectURL(this.newDancingDon.src) + this.newDancingDon.parentNode.removeChild(this.newDancingDon) + } + delete this.newDancingDon + delete this.style + } +} diff --git a/plugins/accessibility/dpad-axis-input.taikoweb.js b/plugins/accessibility/dpad-axis-input.taikoweb.js new file mode 100644 index 0000000..2a633c2 --- /dev/null +++ b/plugins/accessibility/dpad-axis-input.taikoweb.js @@ -0,0 +1,77 @@ +export default class Plugin extends Patch{ + name = "D-pad Axis Input" + version = "22.06.07" + description = "Binds axis input to D-pad for gamepads" + author = "Katie Frogs" + + leftRightAxis = 0 + upDownAxis = 1 + + strings = { + leftRightAxis: { + name: "Left-Right Axis", + name_lang: {}, + description: "The number for the left-right axis, can be checked on gamepad-tester.com", + description_lang: {} + }, + upDownAxis: { + name: "Up-Down Axis", + name_lang: {}, + description: "The number for the up-down axis, can be checked on gamepad-tester.com", + description_lang: {} + } + } + + load(){ + this.addEdits( + new EditFunction(Gamepad.prototype, "play").load(str => { + return plugins.insertBefore(str, + `var leftRightAxis = this.getLeftRightAxis() + var upDownAxis = this.getUpDownAxis() + if(axes.length >= leftRightAxis){ + force.l = force.l || axes[leftRightAxis] <= -0.5 + force.r = force.r || axes[leftRightAxis] >= 0.5 + } + if(axes.length >= upDownAxis){ + force.u = force.u || axes[upDownAxis] <= -0.5 + force.d = force.d || axes[upDownAxis] >= 0.5 + } + if(leftRightAxis === 0 || upDownAxis === 0){ + force.lsl = false + force.lsr = false + } + if(leftRightAxis === 1 || upDownAxis === 1){ + force.lsu = false + force.lsd = false + } + `, 'if(axes.length >= 10){') + }), + new EditValue(Gamepad.prototype, "getLeftRightAxis").load(() => this.getLeftRightAxis.bind(this)), + new EditValue(Gamepad.prototype, "getUpDownAxis").load(() => this.getUpDownAxis.bind(this)) + ) + } + getLeftRightAxis(){ + return this.leftRightAxis + } + getUpDownAxis(){ + return this.upDownAxis + } + settings(){ + return Object.keys(this.strings).map(name => { + var str = this.strings[name] + return { + name: str.name, + name_lang: str.name_lang, + description: str.description, + description_lang: str.description_lang, + type: "number", + min: 0, + default: this[name], + getItem: () => this[name], + setItem: value => { + this[name] = value + } + } + }) + } +} diff --git a/plugins/custom-songs/custom-barlines.taikoweb.js b/plugins/custom-songs/custom-barlines.taikoweb.js new file mode 100644 index 0000000..0209553 --- /dev/null +++ b/plugins/custom-songs/custom-barlines.taikoweb.js @@ -0,0 +1,57 @@ +export default class Plugin extends Patch{ + name = "Custom Barlines" + version = "22.06.02" + description = "Adds #BARLINESCROLL and #BARLINE to the tja format. #BARLINESCROLL can be used to set independent speed values on the measure lines, can be set to a floating point value or off. #BARLINE can insert measure lines anywhere in the chart." + author = "Katie Frogs" + + load(){ + this.addEdits( + new EditFunction(ParseTja.prototype, "parseCircles").load(str => { + str = plugins.insertAfter(str, 'var lyricsLine = null', ` + var barlineScroll = null + var customBarLine = false`) + str = plugins.strReplace(str, + 'var speed = note.bpm * note.scroll / 60', + `var speed = note.bpm * (note.barlineScroll === null ? note.scroll : note.barlineScroll) / 60`) + str = plugins.strReplace(str, + 'var speed = bpm * scroll / 60', + `var speed = bpm * (barlineScroll === null ? scroll : barlineScroll) / 60`) + str = plugins.insertBefore(str, + `if(i !== 0 && note.customBarLine){ + this.measures.push({ + ms: note.start, + originalMS: note.start, + speed: note.bpm * (note.barlineScroll === null ? note.scroll : note.barlineScroll) / 60, + visible: barLine, + branch: currentBranch, + branchFirst: false + }) + } + `, 'if("lyricsLine" in note){') + str = plugins.insertBefore(str, + `case "barlinescroll": + var valueLower = value.toLowerCase().trim() + if(!valueLower || valueLower === "off"){ + barlineScroll = null + }else{ + barlineScroll = Math.max(0, parseFloat(value) || 0) + } + break + case "barline": + customBarLine = true + break + `, 'case "lyric":') + str = plugins.insertBefore(str, + `circleObj.barlineScroll = barlineScroll + circleObj.customBarLine = customBarLine + customBarLine = false + `, 'currentMeasure.push(circleObj)') + return plugins.insertBefore(str, + `circleObj2.barlineScroll = barlineScroll + circleObj2.customBarLine = customBarLine + customBarLine = false + `, 'currentMeasure.push(circleObj2)') + }) + ) + } +} diff --git a/plugins/custom-songs/fumen-file-format.taikoweb.js b/plugins/custom-songs/fumen-file-format.taikoweb.js new file mode 100644 index 0000000..faa3a86 --- /dev/null +++ b/plugins/custom-songs/fumen-file-format.taikoweb.js @@ -0,0 +1,1005 @@ +export default class Plugin extends Patch{ + name = "Fumen File Format" + version = "22.09.04" + description = "Adds support for using Fumen files in the custom song list" + author = "Katie Frogs" + + async load(){ + this.addEdits( + new EditFunction(ImportSongs.prototype, "init").load(str => { + return plugins.insertBefore(str, + `this.musicInfoXml = this.otherFiles.musicInfoXml || {} + this.songStars = this.otherFiles.songStars || {} + this.starsRegex = /^\\d+,\\d+,\\d+,\\d+(?:,\\d+)?$/ + this.duetRegex = /_[enhmx]_[12]\\.bin$/ + this.notFumen = [ + "tuning.bin", + "tuning_ext.bin", + "music_attribute.bin", + "music_order.bin", + "musicinfo.bin", + "wordlist.bin", + "songinfo.bin" + ] + this.nshPreview = this.otherFiles.nshPreview || {} + this.otherFilenames = this.otherFiles.otherFilenames || {} + this.binSongs = {} + this.binFiles = [] + `, 'this.songs = []') + }), + new EditFunction(ImportSongs.prototype, "load").load(str => { + str = plugins.insertBefore(str, + `this.otherFilenames[name] = file + `, 'this.otherFiles[path] = file') + str = plugins.insertBefore(str, + `if(name.endsWith(".bin")){ + var pathNoName = path.slice(0, -name.length) + if(this.notFumen.indexOf(name) === -1 && !pathNoName.endsWith("/duet/") && pathNoName.indexOf("/fumen_hitnarrow/") === -1 && pathNoName.indexOf("/fumen_hitwide/") === -1 && !this.duetRegex.test(name)){ + this.binFiles.push({ + file: file + }) + this.otherFiles[path] = file + } + }else `, 'if(name.endsWith(".tja")') + str = plugins.insertBefore(str, + `name.startsWith("song_") && name.endsWith(".nsh") || `, 'name === "genre.ini"') + str = plugins.insertBefore(str, + `name.endsWith(".xml") || name === "songstars.txt" || `, 'name === "songtitle.txt"') + str = plugins.insertBefore(str, + `var validDiff = ["_e", "_n", "_h", "_m", "_x"] + var getSort = input => { + var name = input.slice(0, -4) + var index = validDiff.indexOf(name.slice(-2)) + if(index !== -1){ + var song = name.slice(0, -2) + var diff = index + }else{ + var song = name + var diff = 3 + } + if(song.startsWith("ex_")){ + song = song.slice(3) + diff += 5 + } + return [song, diff] + } + this.binFiles.sort((a, b) => { + var [aSong, aDiff] = getSort(a.file.name) + var [bSong, bDiff] = getSort(b.file.name) + if(aSong === bSong){ + return aDiff > bDiff ? 1 : -1 + }else{ + return aSong > bSong ? 1 : -1 + } + }) + this.binFiles.forEach((a, i) => a.index = i) + `, 'var metaPromises = []') + return plugins.insertBefore(str, + `this.binFiles.forEach(fileObj => { + songPromises.push(this.addBin(fileObj).catch(e => console.warn(e))) + }) + `, 'this.tjaFiles.forEach(fileObj => {') + }), + new EditFunction(ImportSongs.prototype, "loaded").load(str => { + str = plugins.insertBefore(str, + `assets.otherFiles.musicInfoXml = this.musicInfoXml + assets.otherFiles.songStars = this.songStars + assets.otherFiles.nshPreview = this.nshPreview + assets.otherFiles.otherFilenames = this.otherFilenames + `, 'assets.otherFiles.songTitle = this.songTitle') + return plugins.insertBefore(str, + `var lastUra = null + for(var i in this.songs){ + var song = this.songs[i] + if(lastUra){ + if(song.chart.oni && !song.chart.easy && !song.chart.normal && !song.chart.hard && !song.chart.ura){ + var name = song.chart.oni.name.toLowerCase() + if(name.startsWith("ex_") && name.endsWith("_m.bin") && name.slice(3, -6) === lastUra){ + delete this.songs[i] + lastUra = null + continue + } + } + lastUra = null + } + if(song.courses.ura && song.chart.ura){ + var name = song.chart.ura.name.toLowerCase() + if(name.endsWith("_x.bin")){ + name = name.slice(0, -6) + }else if(name.startsWith("ex_") && name.endsWith("_m.bin")){ + name = name.slice(3, -6) + } + lastUra = name + } + if(song.md5){ + var hash = song.md5.base64().slice(0, -2) + delete song.md5 + song.hash = hash + scoreStorage.songTitles[song.title] = song.hash + var score = scoreStorage.get(hash, false, true) + if(score){ + score.title = song.title + } + } + } + `,'this.songs = this.songs.filter') + }), + new EditFunction(ImportSongs.prototype, "addMeta").load(str => { + str = plugins.insertBefore(str, + `this.binFiles.forEach(filesLoop) + `, 'this.tjaFiles.forEach(filesLoop)') + str = plugins.insertBefore(str, + `(name.endsWith(".xml") || name.startsWith("song_") && name.endsWith(".nsh")) ? data : `, 'data.replace(/\\0/g, "").split("\\n")') + str = plugins.insertBefore(str, + `if(name.endsWith(".xml")){ + var fullToHalf = { + "\\u2010": "-", + "\\u2015": "-", + "\\u2019": "'", + "\\u2032": "'" + } + var chr = String.fromCharCode + for(var i = 0; i < 26; i++){ + if(i < 10){ + fullToHalf[chr(0xff10 + i)] = chr(0x30 + i) + } + fullToHalf[chr(0xff21 + i)] = chr(0x41 + i) + fullToHalf[chr(0xff41 + i)] = chr(0x61 + i) + } + var fullWidthRegex = /[\\u2010\\u2015\\u2019\\u2032\\uff10-\\uff19\\uff21-\\uff3a\\uff41-\\uff5a]/g + var xmlDoc = new DOMParser().parseFromString(data, "text/xml") + var getXmlVal = (element, name) => { + var tag = element.getElementsByTagName(name)[0] + if(tag && tag.firstChild){ + return tag.firstChild.data + } + } + var firstTag = xmlDoc.firstElementChild + if(firstTag.tagName === "boost_serialization"){ + var musicInfo = firstTag.firstElementChild + var dataTags = musicInfo.getElementsByTagName("Data") + for(var i = 0; i < dataTags.length; i++){ + var id = getXmlVal(dataTags[i], "musicid") + var genre = getXmlVal(dataTags[i], "genrename") + if(genre === "ボーカロイド"){ + genre += "™曲" + } + var title = getXmlVal(dataTags[i], "musicname").replace(fullWidthRegex, a => fullToHalf[a]).trim() + var info = this.musicInfoXml[id] || {} + if(title){ + info.title = title + } + if(genre){ + info.genre = genre + } + this.musicInfoXml[id] = info + } + }else if(firstTag.tagName === "songs"){ + var songTags = firstTag.getElementsByTagName("song") + for(var i = 0; i < songTags.length; i++){ + var id = getXmlVal(songTags[i], "id") + var title = getXmlVal(songTags[i], "japaneseText") || "" + title = title.replace(fullWidthRegex, a => fullToHalf[a]).trim() + var ura = false + if(this.uraRegex.test(title)){ + ura = true + title = title.replace(this.uraRegex, "") + if(id.startsWith("ex_")){ + id = id.slice(3) + } + } + var stars = this.songStars[id] || {} + if(!ura){ + var easy = +getXmlVal(songTags[i], "starEasy") + if(easy){ + stars.easy = easy + } + var normal = +getXmlVal(songTags[i], "starNormal") + if(normal){ + stars.normal = normal + } + var hard = +getXmlVal(songTags[i], "starHard") + if(hard){ + stars.hard = hard + } + } + var oni = +getXmlVal(songTags[i], "starMania") + if(oni){ + if(ura){ + stars.ura = oni + }else{ + stars.oni = oni + } + } + if(id){ + this.songStars[id] = stars + if(title){ + var info = this.musicInfoXml[id] || {} + info.title = title + this.musicInfoXml[id] = info + } + } + } + } + }else if(name.startsWith("song_") && name.endsWith(".nsh")){ + var nsh = new Uint8Array(data) + this.nshPreview[name.slice(5, -4)] = struct.Unpack(">I", nsh.slice(0xe0, 0xe0 + struct.CalcLength(">I")))[0] / 1000 + }else if(name === "songstars.txt"){ + var diffs = ["easy", "normal", "hard", "oni", "ura"] + var lastTitle + for(var i = 0; i < data.length; i++){ + var line = data[i].trim() + if(line){ + if(this.starsRegex.test(line) && lastTitle){ + var stars = {} + var array = line.split(",") + for(var j in array){ + stars[diffs[j]] = parseInt(array[j]) + } + this.songStars[lastTitle] = stars + }else{ + lastTitle = line + } + } + } + }else `, 'if(name === "genre.ini"){') + return plugins.strReplace(str, 'return file.read(name === "songtitle.txt" ? undefined : "sjis")', ` + if(name.startsWith("song_") && name.endsWith(".nsh")){ + var readPromise = file.arrayBuffer() + }else{ + var unicodeFile = name.endsWith(".xml") || name === "songstars.txt" || name === "songtitle.txt" + var readPromise = file.read(unicodeFile ? undefined : "sjis") + } + return readPromise`) + }), + new EditFunction(LoadSong.prototype, "run").load(str => { + str = plugins.insertBefore(str, + `song.type === "bin" ? data : `, 'data.replace(/\\0/g, "").split("\\n")') + return plugins.strReplace(str, 'this.addPromise(chart.read(song.type === "tja" ? "sjis" : "")', + `if(song.type === "bin"){ + var chartRead = chart.arrayBuffer() + }else{ + var chartRead = chart.read(song.type === "tja" ? "sjis" : "") + } + this.addPromise(chartRead`) + }), + new EditFunction(Controller.prototype, "init").load(str => { + return plugins.insertBefore(str, + `if(selectedSong.type === "bin"){ + try{ + this.parsedSongData = new ParseBin(songData, selectedSong.difficulty, selectedSong.stars, selectedSong.offset, false, selectedSong.originalDiff) + }catch(e){ + this.game = {} + this.keyboard = this.view = {clean: () => {}} + this.run = () => {} + var title = this.selectedSong.title + if(title !== this.selectedSong.originalTitle){ + title += " (" + this.selectedSong.originalTitle + ")" + } + setTimeout(() => this.songSelection(false, { + name: "loadSongError", + title: title, + id: this.selectedSong.folder, + error: e + }), 500) + return + } + if(this.parsedSongData.branches && selectedSong.originalDiff){ + selectedSong.difficulty = selectedSong.originalDiff + } + }else `, 'if(selectedSong.type === "tja"){') + }), + new EditFunction(Controller.prototype, "restartSong").load(str => { + str = plugins.insertBefore(str, + `this.selectedSong.type === "bin" ? data : `, 'data.replace(/\\0/g, "").split("\\n")') + return plugins.strReplace(str, 'this.addPromise(promises, chart.read(this.selectedSong.type === "tja" ? "sjis" : undefined)', + `if(this.selectedSong.type === "bin"){ + var chartRead = chart.arrayBuffer() + }else{ + var chartRead = chart.read(this.selectedSong.type === "tja" ? "sjis" : undefined) + } + this.addPromise(promises, chartRead`) + }), + new EditFunction(SongSelect.prototype, "getUnloaded").load(str => { + str = plugins.strReplace(str, 'return file.read(currentSong.type', + `if(currentSong.type === "bin"){ + var diffPromises = [] + for(let diff in file){ + if(diff !== "separateDiff"){ + diffPromises.push(file[diff].arrayBuffer().then(data => { + currentSong.chart[diff] = new CachedFile(data, file[diff]) + return importSongs.addBin({ + file: currentSong.chart[diff], + index: currentSong.id + }) + })) + } + } + var importPromise = Promise.all(diffPromises) + }else{ + var importPromise = file.read(currentSong.type`) + return plugins.strReplace(str, '}).then(() => {\n\t\t\tvar imported', + `}) + } + return importPromise.then(() => { + var imported`) + }), + new EditFunction(Game.prototype, "init").load(str => { + return plugins.insertBefore(str, + `this.songData.soulPoints || `, 'this.rules.soulPoints(combo)') + }), + new EditFunction(SoundBuffer.prototype, "load").load(str => { + return plugins.strReplace(str, + 'var decoder = file.name.endsWith(".ogg") ? this.oggDecoder : this.audioDecoder', + `var decoder = this.audioDecoder + if(file.name.endsWith(".ogg")){ + decoder = this.oggDecoder + }else{ + for(var i in this.vgmExt){ + if(file.name.endsWith(this.vgmExt[i])){ + return this.vgmDecoder(file).catch(error => { + return Promise.reject([error, file.url]) + }).then(buffer => { + return new Sound(gain || {soundBuffer: this}, buffer) + }) + } + } + }`) + }), + new EditFunction(CustomSongs.prototype, "localFolder").load(str => { + return plugins.insertBefore(str, `false && `, 'typeof showDirectoryPicker === "function"') + }), + new EditValue(SoundBuffer.prototype, "vgmDecoder").load(() => this.vgmDecoder.bind(this)), + new EditValue(SoundBuffer.prototype, "vgmExt").load(() => this.vgmExt), + new EditValue(window, "ParseBin").load(() => this.ParseBin), + new EditValue(window, "FileObj").load(() => this.FileObj), + new EditValue(window, "struct").load(() => new JSPack()), + new EditValue(ImportSongs.prototype, "addBin").load(() => this.addBin), + new EditValue(ImportSongs.prototype, "findMusic").load(() => this.findMusic), + new EditValue(ImportSongs.prototype, "vgmExt").load(() => this.vgmExt) + ) + + this.douyou = { + aliases: ["童謡"], + id: assets.categories.length + 1, + title: "Children/Folk", + title_lang: { + en: "Children/Folk", + ja: "どうよう" + }, + songSkin: { + background: "#ff4e8a", + bg_img: "bg_genre_6.png", + border: ["#ffc1da", "#c6004e"], + outline: "#c3005c", + infoFill: "#a20024", + sort: 3.5 + } + } + this.vgmExt = [".nus3bank", ".nub", ".acb", ".idsp", ".at3"] + + var workerScript = await (await fetch("https://katiefrogs.github.io/vgmstream-web/js/cli-worker.js")).text() + var workerUrl = URL.createObjectURL(new Blob([workerScript], { + type: "application/javascript" + })) + this.cliWorker = new this.WorkerWrapper(workerUrl) + return this.cliWorker.load().finally(() => { + URL.revokeObjectURL(workerUrl) + }) + } + + ParseBin = class{ + constructor(file, difficulty, stars, offset, metaOnly, originalDiff){ + this.difficulty = difficulty + this.stars = stars + this.offset = (offset || 0) * -1000 + this.originalDiff = originalDiff + this.soundOffset = 0 + this.branchNames = ["normal", "advanced", "master"] + this.metadata = {} + var fumen = this.readFumen(new Uint8Array(file), metaOnly) + if(!metaOnly){ + this.measures = [] + this.beatInfo = {} + this.circles = [] + this.events = [] + this.writeCircles(fumen) + } + } + readFumen(inputFile, metaOnly){ + var file = new FileObj(inputFile) + var size = file.array.length + + var noteTypes = { + 0x1: "don", // ドン + 0x2: "don", // ド + 0x3: "don", // コ + 0x4: "ka", // カッ + 0x5: "ka", // カ + 0x6: "drumroll", + 0x7: "daiDon", + 0x8: "daiKa", + 0x9: "daiDrumroll", + 0xa: "balloon", + 0xb: "daiDon", // hands + 0xc: "balloon", // kusudama + 0xd: "daiKa", // hands + 0xe: "daiDon", // wii huge + 0xf: "daiKa", // wii huge + 0x10: "don", 0x11: "don", 0x12: "don", // wii hidden, good hit on the huge note + 0x13: "ka", 0x14: "ka", + 0x15: "don", 0x16: "don", 0x17: "don", // ok hit on the huge note + 0x18: "ka", 0x19: "ka", + 0x1a: "don", 0x1b: "don", 0x1c: "don", // bomb + 0x62: "drumroll" // ? + } + var song = {} + + var readStruct = function(format, seek){ + if(seek){ + file.seek(seek) + } + return struct.Unpack(order + format, file.read(struct.CalcLength(order + format))) || [] + } + + var order = "" + var measuresBig = readStruct(">I", 0x200)[0] + var measuresLittle = readStruct("