From cf5efcbdbc7d67d790c27cc118a020038d6c15d3 Mon Sep 17 00:00:00 2001 From: yosh Date: Sun, 7 May 2023 22:30:34 -0400 Subject: [PATCH] Merge all of micycle's changes Squashed commit of the following: commit 9005b2b7b43ffe0b07fafa67f3d9f82cd26d110c Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 19:59:20 2023 -0400 fix crash on client disconnect commit 3105e82ac2d688e8c3e9461d4235d9dbde300379 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 16:56:36 2023 -0400 fix uncaught fallthrough in GetColor commit 030cc459d78988abdca702b8000b5ad7e282dab3 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 16:31:27 2023 -0400 add the license text for CC-BY-NC-SA-4 from the license on gamebanana commit 38c403f662a78ebb3cf0d093e0e4356ee31f4474 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 16:23:52 2023 -0400 build commit 61af7e666aac2c8a6099c3e95fe48fda0a082038 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 16:23:25 2023 -0400 we no longer need reloads or deaths when enabling commit de509fc32d151e70e93514ffe10bf10388c21c4b Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 16:21:08 2023 -0400 add strip target in phony just in case commit 44d8e87eb9ba4252f9c283f285d9757243a551da Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 16:20:19 2023 -0400 convert crlf newlines to lf and remove utf8-bom commit 02c4ef754a1b22687ad84ba83c2b14ef9a8fc376 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 16:17:01 2023 -0400 strip our reference assemblies to reduce file size commit 1af89ed351e95e49712921df4d06799f0823aafa Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 15:58:00 2023 -0400 fix regression for playback entities and other non-ghost player sprites commit 157bbadde5365822f38daa885b29cd19f30990c2 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 05:33:08 2023 -0400 polish commit 4629793c530ecac41ca4d4e1376037973f554c90 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 05:19:44 2023 -0400 reword commit 998e4e91f215795d09c2d84ba95fc5dbaf60db5e Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 05:18:44 2023 -0400 build commit 1ff0b69c9dc9a1c5728a3919fc4f4bff4dfd24c5 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 05:18:31 2023 -0400 remove bullshit note commit ad799e4e52efd1343c1c3d29380043fbc24e2ff8 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 04:56:46 2023 -0400 add note about disabling hair mods commit a78de6b6780aa3d035cb422f307050d741ee5587 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 04:39:25 2023 -0400 build commit f605307da9303e0529923a4b6f8767f2991df0d0 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 04:39:20 2023 -0400 fix crash w/o celestenet & make note a header (disabled notes can't be viewed) commit 8b297426fcbe01cbddfc4ee4289f90b3160e4f87 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 04:11:25 2023 -0400 unused commit fd69e4c918b41149ce0399e5fc75139a6280f571 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 04:11:11 2023 -0400 move colorutil into misc commit 6522db9f06e7e461098fc13705f04b02542a52a9 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 03:59:18 2023 -0400 build commit 3d57982539e8b734099bd24dce765dcaedc7e5a7 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 03:59:13 2023 -0400 reword some more text commit a87e853d44f98b09c95308a1f13683188da612fd Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 03:50:06 2023 -0400 disable celestenet settings when not installed + reword some text commit 50ed0542decf3219275813d4873c613f620e8b28 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 03:48:34 2023 -0400 Revert "dependency downloader for celestenet" This reverts commit 6c896eaee60d22944e679352e7de74b6ead36aa8. commit 6c896eaee60d22944e679352e7de74b6ead36aa8 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 03:47:50 2023 -0400 dependency downloader for celestenet commit f4f280230500611cf6ae0269e116c63ff420b1d1 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 03:17:14 2023 -0400 build actually done wtf? commit 8e003342720efcd213db75502e6acbea61b76304 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 02:52:34 2023 -0400 rewrite commit c601079e66e44c72ea50e818856b829a0328ac17 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 02:52:11 2023 -0400 fix dash trails but introduce a crash with players w/o mod commit 0b3b051292c10391eae73f23242de3179a8a9904 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 01:33:41 2023 -0400 well it does sync, but issues: - setting hair color conflicts with hyperline - hair direction doesn't update wtf? - dash trail is fucked commit da36686a4791d57dcb9a5cb8636005086a4d75e2 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun May 7 01:16:37 2023 -0400 fix celestenet onoffs not displaing the stored setting on first load commit 62a25a5e737c33a47f6f1c5f77037d7d681b4114 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sat May 6 20:28:28 2023 -0400 remove unneeded line in makefile commit 394a7cd49b64d071a8ab0276b6db19bb56de1579 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sat May 6 20:28:17 2023 -0400 refactor module to better support ghosts, and finish celestnet module commit 9f0f04a6d903ee760d556ba94b282b73083c6bae Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sat May 6 16:19:28 2023 -0400 fix makfile for hot reload commit c4316c1c7eb99f0d8080df01ff97bc89eb6f3076 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sat May 6 02:58:44 2023 -0400 start proper celestenet module commit 96a21fac816fb30a3710837571e1d683ea39645e Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Mon Apr 24 15:26:36 2023 -0400 fix settings crash commit a66cf51ed1d2a2e6d0fc36b46ab587d51bc88e4e Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Mon Apr 24 15:01:25 2023 -0400 add celeste menu options commit c095747458f8abd904e21d19742c97e44907f0eb Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 14:45:44 2023 -0400 fix crash with ghosts not having a scene set??!? commit bcea0f41e5b0dace8e61bf112ec5fc47679ceffc Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 03:36:33 2023 -0400 Settings.enabled and player != null guards commit 3cecaa2a6b6adcfcd96790e4e2f36fef0200e922 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 03:19:45 2023 -0400 quick fix for null ghost hair commit cedb0c55b38405abcb901c94203e4bea1dcd1e65 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 02:40:21 2023 -0400 unload the celestenet hook commit 486d09221566d7de3b2c8f739710800536be6f74 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 02:38:34 2023 -0400 fix up makefile commit 68e99cf0c4898e399c093a7aa60b87c6e1db98ac Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 02:26:30 2023 -0400 rm old dll commit eb6006e6f5afec3b281469ec3cfa56e732ecf7e4 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 02:26:14 2023 -0400 code rebuild commit 05441fcd3ab35ac76a50bea744259b0704794bbe Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 02:17:19 2023 -0400 clean up :3 commit 831dd6775cf585ab0feb202fc27e66b36e033c6d Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sun Apr 23 01:51:04 2023 -0400 add in CelesteNet ghost support :) commit 7e8bcac717e294f88b097ec6c60eb128a521d605 Author: micycle <5301938-bit_network@users.noreply.gitlab.com> Date: Sat Apr 22 23:42:58 2023 -0400 initial commit (should have starting tracking a while ago) --- Audio/avali_skinsounds.guids.txt | 2012 ++++++++++---------- AvaliSkin.dll | Bin 0 -> 26624 bytes Dialog/English.txt | 49 +- Effects/AvaliRecolor.fx | 35 + Effects/AvaliRecolor.o | Bin 0 -> 1008 bytes Graphics/Sprites.xml | 384 ++-- LICENSE | 437 +++++ SourceCode/AvaliSkinModule.cs | 707 ++++--- SourceCode/AvaliSkinSettings.cs | 420 +++- SourceCode/CelesteNetAvaliComponent.cs | 89 + SourceCode/Data.cs | 78 + SourceCode/Libraries/CelesteNet.Client.dll | Bin 0 -> 99840 bytes SourceCode/Libraries/CelesteNet.Shared.dll | Bin 0 -> 62464 bytes SourceCode/Makefile | 41 + SourceCode/Misc.cs | 56 + everest.yaml | 5 +- 16 files changed, 2733 insertions(+), 1580 deletions(-) create mode 100755 AvaliSkin.dll create mode 100644 Effects/AvaliRecolor.fx create mode 100644 Effects/AvaliRecolor.o create mode 100644 LICENSE create mode 100644 SourceCode/CelesteNetAvaliComponent.cs create mode 100644 SourceCode/Data.cs create mode 100644 SourceCode/Libraries/CelesteNet.Client.dll create mode 100644 SourceCode/Libraries/CelesteNet.Shared.dll create mode 100644 SourceCode/Makefile create mode 100644 SourceCode/Misc.cs diff --git a/Audio/avali_skinsounds.guids.txt b/Audio/avali_skinsounds.guids.txt index 2ac1a44..3a227d9 100644 --- a/Audio/avali_skinsounds.guids.txt +++ b/Audio/avali_skinsounds.guids.txt @@ -1,1006 +1,1006 @@ -{ad25a031-880b-4f88-ac12-82d6c52fbdea} event:/char/badeline/appear -{7a71fc61-b688-4d82-a2b7-781c2434e942} event:/char/badeline/booster_begin -{b2ee45d8-e1b0-43f1-baaa-f6e77d37ddb5} event:/char/badeline/booster_final -{207a212a-2beb-4022-a8da-11ac987d3097} event:/char/badeline/booster_reappear -{7e3c6b4e-e41a-4e9a-9d24-22737c66593b} event:/char/badeline/booster_relocate -{2592d638-f3c5-4f6f-81e0-888a04affa40} event:/char/badeline/booster_throw -{bbe7d0c8-45f9-4671-b49e-8e38e357bb81} event:/char/badeline/boss_bullet -{898fc1ea-250b-4d03-8f37-c0c35799a915} event:/char/badeline/boss_hug -{b4002010-ff11-4311-87c7-f87028220f78} event:/char/badeline/boss_idle_air -{e7a2ddd6-091a-44ab-aac7-e57bd13c009c} event:/char/badeline/boss_laser_charge -{58b5d825-ebcf-457b-b493-9be82640b9eb} event:/char/badeline/boss_laser_fire -{646b0a01-2101-424f-804b-18842f72a62d} event:/char/badeline/boss_prefight_getup -{33df1e8a-7605-4b2d-8235-ee78fbaa8c55} event:/char/badeline/climb_ledge -{b54ae334-409b-4bba-82e2-62753f764f90} event:/char/badeline/dash_red_left -{50356124-434a-4dca-aeb1-52462846fb8a} event:/char/badeline/dash_red_right -{16b40879-0a79-4e42-8c91-fe419a8e186c} event:/char/badeline/disappear -{937c3941-eeb8-4f1f-8451-765b33545202} event:/char/badeline/dreamblock_enter -{3b142d62-975a-41a3-9b59-8e5ba4f6cbdb} event:/char/badeline/dreamblock_exit -{697102c2-9978-42b7-a3b0-0c2b99c9032e} event:/char/badeline/dreamblock_travel -{d879f9dd-98d0-479e-9f08-a1848f4a0f5c} event:/char/badeline/duck -{ff6442f1-66c2-4dba-8d57-038dda8fd296} event:/char/badeline/footstep -{8824489f-1d0b-4670-beb2-08d67cfd3c3b} event:/char/badeline/grab -{c122d904-fb7a-4bfe-99a1-f5a4f8701d17} event:/char/badeline/grab_letgo -{c2cd2f17-045c-4312-b7f6-8e7b750577c0} event:/char/badeline/handhold -{95ce0255-9a27-47b4-a902-fb25c0f2a2e2} event:/char/badeline/jump -{64424649-d82c-4efc-90a9-f54e8411d9b7} event:/char/badeline/jump_assisted -{58e689a2-1717-434f-9fa7-dffcd72ab27e} event:/char/badeline/jump_climb_left -{d9a77828-0390-434a-8cbc-e3df56a40cc4} event:/char/badeline/jump_climb_right -{6faecb61-f82e-400e-9785-4d407a82c838} event:/char/badeline/jump_dreamblock -{bc8a6051-399a-4f76-a865-02b53c5fe8ab} event:/char/badeline/jump_special -{73a21bdf-62c2-46d8-ae04-68e6c0c26b7f} event:/char/badeline/jump_super -{7ca46073-e6b8-4f74-b9a8-ac54a8966c5b} event:/char/badeline/jump_superslide -{2336b17f-5769-4e2e-a636-aee1ddef9086} event:/char/badeline/jump_superwall -{ab3be2a7-36d0-43cb-990a-2c49ba5d5c60} event:/char/badeline/jump_wall_left -{3e5b18db-8f99-4ab7-ad08-8529fd257b6b} event:/char/badeline/jump_wall_right -{8f924592-8b14-40d6-81af-d42fab0b6da1} event:/char/badeline/landing -{25294859-6bfd-434e-9528-8433245fe3b5} event:/char/badeline/level_entry -{38557af4-adf9-4328-9f2c-167b12ff9f8e} event:/char/badeline/maddy_join -{450fb5b3-e9e3-45d8-9f34-ba05e292958f} event:/char/badeline/maddy_split -{1a114663-4b93-4aab-ba8c-ca8793f2831e} event:/char/badeline/stand -{97d0d2e4-92f5-48cf-948f-4fc85b0a0791} event:/char/badeline/temple_move_chats -{a5ceb7fd-8a03-4c79-8d4f-81ad37400f43} event:/char/badeline/temple_move_first -{a2443155-5af1-4e19-80d5-a81a3d9cf06d} event:/char/badeline/wallslide -{9fdf9618-b47b-4427-bb22-4642a42296b9} event:/char/dialogue/sfx_support/phone_static_ex -{0793a2c4-4c0b-41de-8f60-cbaed147961b} event:/char/dialogue/sfx_support/phone_static_mom -{e27b3ab9-d6c9-4952-92bf-e652b98a9ed5} event:/char/dialogue/!!!_README -{aba9f19a-b015-4dfa-ab6a-c1c34385e6e9} event:/char/dialogue/badeline -{0d2b6a74-2224-4d42-b4c1-275e02188e35} event:/char/dialogue/ex -{93dc35c9-2d7f-428b-a991-10a75e908831} event:/char/dialogue/granny -{6db7fffa-a9ef-4b37-8c16-6857785af731} event:/char/dialogue/madeline -{eb633670-e129-48ad-82cc-bc3b09203d6f} event:/char/dialogue/madeline_mirror -{9a3d146f-f39b-41f5-a269-890782e44fcc} event:/char/dialogue/mom -{94086ab9-c160-4468-b8f5-20d8c0df94f3} event:/char/dialogue/oshiro -{81a8f569-0320-45e8-a85d-f05fc73ab18a} event:/char/dialogue/secret_character -{e15162c0-8d07-4a4a-86b2-31a4143ef96c} event:/char/dialogue/theo -{06f37413-874a-4d3a-b325-e43d5835bded} event:/char/dialogue/theo_mirror -{b778a405-ac7f-440e-8754-aef888736b87} event:/char/dialogue/theo_webcam -{baf0c37e-6b25-4b7f-8bcf-653b7ffbb4a5} event:/char/granny/cane_tap -{e6fcb1bd-e802-4b86-ba6a-4d5b4f9d1d8e} event:/char/granny/laugh_firstphrase -{7d86252d-c88c-4317-865e-430792def883} event:/char/granny/laugh_oneha -{ae79fcef-d9b4-44c5-91e5-e0348229e9d5} event:/char/madeline/Vanilla Backup/death -{421fe5d0-9d4b-40a5-ab8e-23b1ec4bf1b3} event:/char/madeline/Vanilla Backup/idle_crackknuckles -{ae4aea88-f499-49e8-9536-78c4bad21743} event:/char/madeline/Vanilla Backup/idle_sneeze -{65659bc0-3d2b-429c-9bdc-42e7a2d29a94} event:/char/madeline/Vanilla Backup/predeath -{75ab6aef-3f69-4776-b60f-5700451cc9a2} event:/char/madeline/backpack_drop -{99373af6-beba-488d-b516-ff48fd95e8b8} event:/char/madeline/campfire_sit -{9435a742-7595-48a4-b2af-2757c4f927da} event:/char/madeline/campfire_stand -{9457c17c-688b-4701-b2ae-b89d821d54f7} event:/char/madeline/climb_ledge -{82f8448b-9452-4b12-838c-dcd81098476e} event:/char/madeline/core_hair_charged -{315ac151-5eb6-4e6b-b1b7-0531f3572c44} event:/char/madeline/crystaltheo_lift -{eb1249df-06cf-434d-991b-0b73464eef06} event:/char/madeline/crystaltheo_throw -{cb220baa-d2cb-4a87-9907-a6595dba6735} event:/char/madeline/dash_pink_left -{8ec31009-771f-4473-a3fc-45b209d6aa87} event:/char/madeline/dash_pink_right -{b9d3a7c5-3d49-4b8a-aad1-fcfaf87293af} event:/char/madeline/dash_red_left -{066cd550-a394-4bed-a4cf-c71905a160ed} event:/char/madeline/dash_red_right -{2de81082-0768-430b-b7fb-728c94bd1dcb} event:/char/madeline/death -{06d7cbaf-9d9e-4f67-8adb-37a599dd4c37} event:/char/madeline/dreamblock_enter -{0a9527ad-360b-4cd2-b585-92b066720b34} event:/char/madeline/dreamblock_exit -{47bc2416-fd95-4a75-8952-7c43757e0e66} event:/char/madeline/dreamblock_travel -{0d6cb459-91af-4842-8d2b-0f0e103313ef} event:/char/madeline/duck -{73ada323-e77f-43f7-b0df-a8facdef03b7} event:/char/madeline/footstep -{8aa6ab7b-3104-4a06-8e7e-b1141ac0d23d} event:/char/madeline/grab -{0e0bb484-9840-47f8-a697-773134e4bedb} event:/char/madeline/grab_letgo -{7f8c23d1-bd9d-4a10-b8af-fd4a5cb12244} event:/char/madeline/handhold -{92a3c07d-326f-45b0-9001-4ed3a7c178a2} event:/char/madeline/idle_crackknuckles -{852ea39f-c182-4385-9aa3-1d95cb02040b} event:/char/madeline/idle_scratch -{8c51bec8-fb5a-4f50-ac30-9ad4c2c49ba2} event:/char/madeline/idle_sneeze -{eeede5f5-3691-4cd9-8b2c-91e02d3d41ed} event:/char/madeline/jump -{73ba5692-b6bd-4c78-a392-e41fa7425ead} event:/char/madeline/jump_assisted -{faac7cb1-bc6a-4e0d-8dc5-97f3c94363e6} event:/char/madeline/jump_climb_left -{1a77f0d4-81d8-4f97-bdf1-8e1e39cc69ef} event:/char/madeline/jump_climb_right -{5e5a1f06-5cf9-4daf-a7ed-3b36554dd44b} event:/char/madeline/jump_dreamblock -{25759b99-ad2a-4483-bb7e-0c4eac782c53} event:/char/madeline/jump_special -{4fc69f31-fc0f-42d3-af4c-20424c74d6a4} event:/char/madeline/jump_super -{8f5b7d80-8ca1-4415-942c-f1338b8a79f1} event:/char/madeline/jump_superslide -{67bb774a-41bd-4375-a4e7-53031c7f75cd} event:/char/madeline/jump_superwall -{f63c2b0a-f708-44f5-af13-6bba7e3af2cb} event:/char/madeline/jump_wall_left -{3b128250-55a7-4a1b-8d8e-edf325d80192} event:/char/madeline/jump_wall_right -{a7289b79-f525-4762-943e-98cf5c94151a} event:/char/madeline/landing -{60e29264-3711-498c-a7ed-c58ecefb5543} event:/char/madeline/mirrortemple_big_landing -{33880264-68a6-4863-8a03-e4ea7c5a72df} event:/char/madeline/predeath -{14d582cb-0c50-4837-bcc5-e7e03ff23687} event:/char/madeline/revive -{73265a98-2cb3-4d98-9643-cf592c2b9131} event:/char/madeline/stand -{7d18d617-475b-4d12-ad45-885c619e7540} event:/char/madeline/summit_areastart -{72eb7f2d-c3e9-41b2-afc0-b4cfee087389} event:/char/madeline/summit_flytonext -{f5babe6c-1ec1-4d4e-8934-a1809b5e26cb} event:/char/madeline/summit_sit -{dae064c8-86f9-458b-83af-fbd8b699a3b9} event:/char/madeline/theo_collapse -{cad411d1-889d-4fb6-85e7-210db19d1e11} event:/char/madeline/wallslide -{cab0df89-b0d1-439c-8ac7-37db9d43e3a1} event:/char/madeline/water_dash_gen -{fb5d35c5-47c8-439d-8d52-ec6daf91887b} event:/char/madeline/water_dash_in -{5ce79651-4adc-4592-b018-38aa212d6ca6} event:/char/madeline/water_dash_out -{4016ea56-842c-4649-99c4-7057db18c835} event:/char/madeline/water_in -{5cf06f89-cf18-4dfa-bc69-5e4b58095cf3} event:/char/madeline/water_move_general -{7d656ffa-050f-4cab-bbc9-03863fa14e4f} event:/char/madeline/water_move_shallow -{3b90c629-7dcf-467b-a438-75e3287c8ae5} event:/char/madeline/water_out -{e1fec409-ace5-4006-8b7c-ccf9fbf1ac59} event:/char/oshiro/boss_charge -{05362357-0f1e-4f89-9d04-8a2778451a6c} event:/char/oshiro/boss_enter_screen -{f5fc7368-4f02-4479-a805-0efdff3633f6} event:/char/oshiro/boss_precharge -{28afe636-0afc-4a73-957d-fa53f6295250} event:/char/oshiro/boss_reform -{53cd822c-b7e1-4d50-8574-4fe404457747} event:/char/oshiro/boss_slam_final -{83376c6a-a014-418e-9e21-dbc48df90069} event:/char/oshiro/boss_slam_first -{945afadd-8b82-439d-a3d5-c70d53d8df96} event:/char/oshiro/boss_transform_begin -{6be863d8-6204-4f23-9f06-f90d6d7a8092} event:/char/oshiro/boss_transform_burst -{6dd647fe-eefd-43d7-8a35-5a614678dd12} event:/char/oshiro/chat_collapse -{2985ee63-eec3-4263-bf6d-71e332bfa805} event:/char/oshiro/chat_get_up -{c4fc63e7-6814-466a-9077-c90a82fc710e} event:/char/oshiro/chat_turn_left -{a5b71a3a-2b11-43d7-a6dc-c2fc90d9d07e} event:/char/oshiro/chat_turn_right -{7714e509-b855-47b0-b57b-3b7d803c5652} event:/char/oshiro/move_01_0xa_exit -{4f200dab-f854-4ed1-8e93-b736211791d5} event:/char/oshiro/move_02_03a_exit -{ecd941b2-7246-49f9-ad46-dd6eee981bd5} event:/char/oshiro/move_03_08a_exit -{ce338380-a29d-461a-b661-267fa7acd32c} event:/char/oshiro/move_04_pace_left -{e2f5eac6-9d40-4bc5-bcaf-d14b6269354b} event:/char/oshiro/move_04_pace_right -{b6e13523-090a-44eb-aa4f-1a3c270c507f} event:/char/oshiro/move_05_09b_exit -{d63e2c8f-499c-4edc-a892-041ae47d5b96} event:/char/oshiro/move_06_04d_exit -{96c70110-4204-4456-b3ed-baf02ba4139a} event:/char/oshiro/move_07_roof00_enter -{dfc82939-d51a-4454-aedf-1b3c6d4cf986} event:/char/oshiro/move_08_roof07_exit -{56221566-2fd7-4b1a-99d7-6af227ab8398} event:/char/theo/phone_taps_loop -{f37cd8d3-4249-47ca-8243-28ae26cf7c5c} event:/char/theo/resort_ceilingvent_hey -{5220fbf8-61c9-4a15-8490-8571a7cfa54f} event:/char/theo/resort_ceilingvent_popoff -{d3ade5b6-5418-4d18-8ac3-b31f1f5a9581} event:/char/theo/resort_ceilingvent_seeya -{6fb99d9c-74ca-412d-b3b0-247b39a382df} event:/char/theo/resort_ceilingvent_shake -{30c6c5c3-bf5d-4cbe-b3ea-3ed4c1e2396e} event:/char/theo/resort_crawl -{757f9c8a-033b-4c8d-82d8-f415972efc8d} event:/char/theo/resort_standtocrawl -{56e5cd34-78ba-45b2-96f3-83fc95c7c8df} event:/char/theo/resort_vent_grab -{aeef3032-ca85-4ac7-9866-c04c15bb8ef3} event:/char/theo/resort_vent_rip -{3d4ee73d-0198-43a2-b1d4-7b98cb16944b} event:/char/theo/resort_vent_tug -{4b18a52d-d2ba-4f5c-9880-9b49a0179e72} event:/char/theo/resort_vent_tumble -{3e111712-ffe7-404b-8dfe-08b630014170} event:/char/theo/yolo_fist -{1220c5e3-9e68-4e3f-9731-37f8efeca4d5} event:/classic/!!!_README -{96db8ec4-31c6-45aa-ae05-0b73cd02a1ff} event:/classic/pico8_boot -{79038cb9-407b-4d35-892a-1ec71396a682} event:/classic/pico8_mus_00 -{b7c9c3a9-c1bc-4a77-961e-b306f5b9c140} event:/classic/pico8_mus_01 -{feac844d-0797-404b-a390-3ab8257a187c} event:/classic/pico8_mus_02 -{7186f56e-2df7-42eb-9375-3b272fe60ce1} event:/classic/pico8_mus_03 -{aaa40caf-ae3a-4f7e-a2b3-92c2ebe55df6} event:/classic/sfx0 -{3e4da5d7-22bc-4a2a-975f-962d0b13ea30} event:/classic/sfx1 -{6452fdae-f5bc-405a-95b0-ab1aeef0c504} event:/classic/sfx13 -{a9262674-7b9d-4aea-8a57-84c2f26049b6} event:/classic/sfx14 -{818fc44f-268e-48ff-8876-b8a64842b5ed} event:/classic/sfx15 -{4d5e60c8-4be0-42c1-9f24-e5ebecd840eb} event:/classic/sfx16 -{e52366bb-874d-4e52-97b0-5f84602ce96d} event:/classic/sfx2 -{5956eda7-31c9-47f6-8b62-f8b488c879a5} event:/classic/sfx23 -{21c14b80-cb2e-4f2e-8d1e-b8f3941b162c} event:/classic/sfx3 -{14db4278-02a9-4513-9361-0e53d9da8811} event:/classic/sfx35 -{4e545f69-79f2-4d28-950c-10cbb43e77e6} event:/classic/sfx37 -{bbabbdbc-da20-42af-9c0d-0daa8299cc7f} event:/classic/sfx38 -{09c2f490-6fc5-4d52-95e1-e873ff360487} event:/classic/sfx4 -{4e2a357d-8a57-4ea6-8df5-b9411495dfd6} event:/classic/sfx5 -{606bd67d-d92a-46f0-a2e1-0a95ea23bfef} event:/classic/sfx51 -{6ccb266f-2044-41dc-88bd-55d20f34627a} event:/classic/sfx54 -{55989b60-f060-4a18-87cc-0d1ad5428801} event:/classic/sfx55 -{c2f12510-a65f-4fe6-b8c2-d6dafd0bd33d} event:/classic/sfx6 -{52df708d-a28a-46e8-bf24-a7516b8d6960} event:/classic/sfx61 -{e489d78b-10c5-47e7-9ad5-bee84ab5df55} event:/classic/sfx62 -{99e37b23-955b-4b57-8297-e5c24a7618ee} event:/classic/sfx7 -{a0206dfc-61d3-447f-ac45-dbcaeeb2babf} event:/classic/sfx8 -{94844611-3d78-4843-bef4-5a7fb9cd3930} event:/classic/sfx9 -{0fa79a65-c103-4f72-84d6-7a22c9b2f43c} event:/env/amb/00_prologue -{04cc4be2-4acf-474a-a897-8709563af4c3} event:/env/amb/01_main -{f34c1fdf-5470-453f-afc5-c3ef0f0f65cb} event:/env/amb/02_awake -{409883b0-271d-4b20-9f0b-2d24e2f3c328} event:/env/amb/02_dream -{c37ce843-6664-44ab-9d07-8acdbc9efed8} event:/env/amb/03_exterior -{fee4e52e-5f96-4739-b609-07ccd6c60610} event:/env/amb/03_interior -{db641550-ff4f-430a-9dad-9e038e382ae5} event:/env/amb/03_pico8_closeup -{d0ea5750-b681-4bcd-a795-8a1fa908ac2e} event:/env/amb/04_main -{edc1c4bb-137f-4551-92f0-220b11118e0d} event:/env/amb/05_interior_dark -{36b91db4-ad22-4c8d-aa83-7964f95398ab} event:/env/amb/05_interior_main -{fb77cba9-f373-4f6b-9057-2fa3fffdd657} event:/env/amb/05_mirror_sequence -{8a921fb6-6b6c-4f2d-bd8b-8d7a319a44fc} event:/env/amb/06_lake -{b09159fb-d5a0-4daa-ab5f-0f1898bc3335} event:/env/amb/06_main -{2e69b6a7-2ab5-4a35-a307-27a52fdf7458} event:/env/amb/09_main -{a64aedd6-1f18-4f49-a41d-9a9f5ebbe616} event:/env/amb/worldmap -{c15f9104-cc0f-4d4f-b085-fb0e40d43924} event:/env/local/02_old_site/phone_lamp -{f271db26-d18b-488c-8a6f-d5f2b98039fa} event:/env/local/03_resort/broken_window_large -{3052bb3d-8343-4d09-bf59-d525735f4407} event:/env/local/03_resort/broken_window_small -{6217f4fb-20f3-4fc2-9ab5-45297d919bc5} event:/env/local/03_resort/pico8_machine -{9ccbd053-b248-430d-9e0b-d7d294b97e39} event:/env/local/06_reflection/boss_idle_ground -{ce0c8cf0-9aa6-4b7a-a66a-cd8509e5f674} event:/env/local/07_summit/flag_flap -{e9d25928-9e16-43ac-9e79-f099290d643c} event:/env/local/09_core/conveyor_idle -{57b3a09b-dbc8-435e-8d24-6d1f913ac85c} event:/env/local/09_core/fireballs_idle -{7fc7eafb-26b7-4b84-bfb4-1d779c22a066} event:/env/local/09_core/lavagate_idle -{7cc20e5f-81e5-4166-acc6-704dc13f46f3} event:/env/local/campfire_loop -{a780517b-19c9-47d4-88ab-091fb03f1f9e} event:/env/local/campfire_start -{cc54fdc5-ac1a-4df6-8180-03295b15aca1} event:/env/local/waterfall_big_in -{1a51e71c-fbf7-4f0c-b659-622ada05f17c} event:/env/local/waterfall_big_main -{76e57bb1-14a6-44cc-ae96-de5ae20e81fd} event:/env/local/waterfall_small_in_deep -{9bbc655b-22ce-4c82-897b-cfe0fad986d5} event:/env/local/waterfall_small_in_shallow -{ccef0473-c1e5-4dd0-8c94-fc3fe5fc95bb} event:/env/local/waterfall_small_main -{6a3f7aaf-bea3-4ac6-a919-d4b6eef81ae7} event:/env/state/underwater -{3f2d088f-f438-42c1-b9e9-6e6a44203865} event:/game/00_prologue/bridge_rumble_loop -{fb47d655-bc4f-4361-b4a2-d19e30518d24} event:/game/00_prologue/bridge_support_break -{319ecd12-335d-44ff-94ca-07fe499d4a87} event:/game/00_prologue/car_down -{45cba62a-4146-4fdb-8b39-643e9ab1782c} event:/game/00_prologue/car_up -{0c8ca90b-c14e-41ca-8233-ec0f74a6aab5} event:/game/00_prologue/fallblock_first_impact -{388260ad-8996-4220-a041-4165704072d4} event:/game/00_prologue/fallblock_first_shake -{477f6667-1b22-4276-a0cf-1370ae099d9e} event:/game/00_prologue/intro_vignette -{b9976863-f695-4730-b534-9299bf5f58b1} event:/game/01_forsaken_city/birdbros_finish -{9df8975f-f839-4ee6-91ec-61fcfc2a93a3} event:/game/01_forsaken_city/birdbros_fly_loop -{811bbaf0-41b3-4271-8cba-215e12986fb5} event:/game/01_forsaken_city/birdbros_thrust -{e9da9c8d-7bdb-4345-9724-35892a5b44ac} event:/game/01_forsaken_city/console_blue -{893973ec-2dd4-4478-b771-30ac723a7c9e} event:/game/01_forsaken_city/console_purple -{20819c4b-843b-46f2-8c05-8e062e76681d} event:/game/01_forsaken_city/console_red -{6b0262b0-9ae4-474e-9f76-aa1c59942351} event:/game/01_forsaken_city/console_static_long -{024160fc-f496-4d0a-9b5d-16d473524b95} event:/game/01_forsaken_city/console_static_loop -{214e17a6-b3af-451f-a29f-a08351abe64d} event:/game/01_forsaken_city/console_static_short -{6a535067-5141-44c5-92fa-69aa73d96058} event:/game/01_forsaken_city/console_white -{6ddd11c0-8481-4912-81be-ac3ecaeef96f} event:/game/01_forsaken_city/console_yellow -{99c35088-2d5e-4846-b27e-e1adfcd15afa} event:/game/01_forsaken_city/fallblock_ice_impact -{8d6d24fe-c860-4328-9650-c29b39ba87a2} event:/game/01_forsaken_city/fallblock_ice_shake -{c7f359ea-785f-4328-8135-4000ec1486bc} event:/game/01_forsaken_city/zip_mover -{f4f839d0-f7cc-402a-9767-ad79d20ae5d6} event:/game/02_old_site/lantern_hit -{44ed360f-e714-4a3a-99e8-3aed8ecf22cb} event:/game/02_old_site/sequence_badeline_intro -{77800c0d-5128-44d0-8bb1-67174af44406} event:/game/02_old_site/sequence_mirror -{7a436113-5059-4565-a239-927c4876b345} event:/game/02_old_site/sequence_phone_pickup -{1da40d8f-f7d3-425c-9f34-37684fda4aa4} event:/game/02_old_site/sequence_phone_ring_loop -{2c58d235-d6db-4974-825f-426ec121fe23} event:/game/02_old_site/sequence_phone_ringtone_loop -{5a79bbfe-cff0-4117-890d-90e4121c3fec} event:/game/02_old_site/sequence_phone_transform -{d75e80d5-50b4-4a0c-91c8-b7d377fd0d9b} event:/game/02_old_site/theoselfie_foley -{24197259-c364-40a3-b155-f4ba57503891} event:/game/02_old_site/theoselfie_photo_filter -{1eb80e39-81b3-45ec-a5c7-285e31d92245} event:/game/02_old_site/theoselfie_photo_in -{9524d309-340d-4bd4-9479-b6c08e2615cd} event:/game/02_old_site/theoselfie_photo_out -{ab48ef65-2a19-4e26-bd96-c91188020dd6} event:/game/03_resort/clutterswitch_books -{72ea8830-baf4-40b0-bc3a-d05ae7a3ace3} event:/game/03_resort/clutterswitch_boxes -{9f8d7e9f-ec6d-4903-81bc-e1c4e0869dc1} event:/game/03_resort/clutterswitch_finish -{bbec6527-f6d3-42a3-9ad5-4ebbeeebccc9} event:/game/03_resort/clutterswitch_linens -{99b2879f-9f5f-4c28-8a2f-46e379488863} event:/game/03_resort/clutterswitch_return -{4518ae95-ba77-4242-b617-6c18d2f4f570} event:/game/03_resort/clutterswitch_squish -{dcef90ad-4141-4451-a54a-139802c4cfe5} event:/game/03_resort/deskbell_again -{b65c24ca-a160-4d14-b930-2c851cc91f30} event:/game/03_resort/door_metal_close -{1a62e6d5-c2d5-45c7-8d15-ae1352a8b1a4} event:/game/03_resort/door_metal_open -{aec16b15-9f62-4a00-ad28-abfe8b8565dd} event:/game/03_resort/door_wood_close -{d2c8b607-3339-4882-bfa6-e2023dd9ab5f} event:/game/03_resort/door_wood_open -{d77f57f5-6a0e-41d7-aff8-3d2e35942458} event:/game/03_resort/fallblock_wood_impact -{705d6d6f-3d2e-46c5-babb-c84a5ddb35f9} event:/game/03_resort/fallblock_wood_shake -{94fcaef2-821e-4308-8532-4f141db24227} event:/game/03_resort/fallblock_wooddistant_impact -{f84f688a-176f-41b7-b8e9-96df630ff088} event:/game/03_resort/fluff_tendril_emerge -{477a28ea-70e0-4085-8053-d3bf776aedc2} event:/game/03_resort/fluff_tendril_recede -{11bddfee-df7f-41b8-84a0-8fbe19a1ba30} event:/game/03_resort/fluff_tendril_touch -{1e7997d7-a551-479e-90d3-f6929fd665ef} event:/game/03_resort/forcefield_bump -{4c443389-e3fc-41ab-b502-29d39a06f591} event:/game/03_resort/forcefield_idle_loop -{512ca8f8-a58f-4bd0-bd55-a237fa07c6c6} event:/game/03_resort/forcefield_vanish -{ce414756-a0c5-481c-9d0b-dc045f5d5771} event:/game/03_resort/key_unlock -{a20f939e-69a3-4b1a-a1ae-7dfcfa310fe0} event:/game/03_resort/lantern_bump -{142ae054-bc66-4b91-8c25-eff2ee9e4f05} event:/game/03_resort/memo_in -{a3b55290-30ce-464e-b669-9582d71e7c70} event:/game/03_resort/memo_out -{e4408a77-67c1-4e52-974d-4e1363d4cb6f} event:/game/03_resort/platform_horiz_left -{ce237948-99bc-45ba-a812-45c3166d1ce9} event:/game/03_resort/platform_horiz_right -{9ade5023-0a36-4b94-bd91-a542cee21719} event:/game/03_resort/platform_vert_down_loop -{457fdcf2-f81a-4b03-a669-e1193355a7c2} event:/game/03_resort/platform_vert_end -{a4c41f6f-ff8f-4ec8-b122-6c6ab1f81e23} event:/game/03_resort/platform_vert_start -{f894b1fb-3842-414c-aef3-ae5a271587d1} event:/game/03_resort/platform_vert_up_loop -{fc333ed7-13ad-42a5-903d-8ddb19226c0e} event:/game/03_resort/sequence_oshiro_intro -{e00ff4f4-f290-443a-ad1d-27e6c429c328} event:/game/03_resort/sequence_oshirofluff_pt1 -{e00d4196-5c66-4504-af86-08a0ed590b8e} event:/game/03_resort/sequence_oshirofluff_pt2 -{c3deeaef-d69e-4595-9bba-31caa24af6d8} event:/game/03_resort/suite_bad_ceilingbreak -{19ecfec2-e1a0-4335-862f-eaa1d9e679fd} event:/game/03_resort/suite_bad_exittop -{90e330ed-1d4f-4a5a-9dfd-1567b918879c} event:/game/03_resort/suite_bad_intro -{2b2852bd-7b5e-4c42-a05d-31b667dfc577} event:/game/03_resort/suite_bad_mirrorbreak -{9adf0f9b-8820-44de-aede-62403e1c095c} event:/game/03_resort/suite_bad_moveroof -{503d84f2-17c0-4a36-9f8c-7a17e4517e52} event:/game/03_resort/suite_bad_movestageleft -{1f43075b-c346-4a3d-a81d-b2a2fa18b281} event:/game/03_resort/trapdoor_frombottom -{9cf437b5-d65b-4dd9-a6a4-76fe3e7f9c14} event:/game/03_resort/trapdoor_fromtop -{3164e6e3-a335-4821-bbed-eb598dcae9ce} event:/game/04_cliffside/arrowblock_activate -{51df0abc-4ee9-4dd8-8123-d559a7f51383} event:/game/04_cliffside/arrowblock_break -{05956d91-3c60-437c-b83c-c7883b36408d} event:/game/04_cliffside/arrowblock_debris -{77afc34f-d0dc-4224-89c6-936762850581} event:/game/04_cliffside/arrowblock_move -{f478a136-13df-4b80-946d-1081658ef79f} event:/game/04_cliffside/arrowblock_move_child -{a09bfe4a-d2df-48da-af7f-64c1db765dcf} event:/game/04_cliffside/arrowblock_reappear -{d5e8a4f4-f627-4802-975c-b99ef4fea5ee} event:/game/04_cliffside/arrowblock_reform_begin -{7d6ccc8f-678e-4648-bead-3a5c82cfd916} event:/game/04_cliffside/arrowblock_side_depress -{9a3d6d97-4b11-4771-bf58-fbe2d7274579} event:/game/04_cliffside/arrowblock_side_release -{29ffaa1c-75e8-43e8-9002-54bc40193f8b} event:/game/04_cliffside/cloud_blue_boost -{24844c62-b116-4d87-b944-e748e897bd28} event:/game/04_cliffside/cloud_pink_boost -{39c755bc-96f7-4fe8-89b6-0b1a93a61881} event:/game/04_cliffside/cloud_pink_reappear -{bff1e723-0426-432f-8cbd-780f03e54492} event:/game/04_cliffside/gondola_cliffmechanism_start -{03879103-1510-4dca-a1d0-5e8749bfa6a1} event:/game/04_cliffside/gondola_finish -{056c87c9-457e-475f-b216-206d73982cd2} event:/game/04_cliffside/gondola_halted_loop -{e714a1e9-e0de-4ff0-bb70-9290eeafb029} event:/game/04_cliffside/gondola_movement_loop -{b8669a2f-941b-47c3-9e37-fff4c4086a54} event:/game/04_cliffside/gondola_restart -{4071aef2-1c21-4095-9fe9-500c007d3dcd} event:/game/04_cliffside/gondola_scaryhair_01 -{6817fd65-b0e9-43b5-8338-029e57b0f794} event:/game/04_cliffside/gondola_scaryhair_02 -{d0fff247-3b15-4a9c-8606-00cf2da9475a} event:/game/04_cliffside/gondola_scaryhair_03 -{81f28bb7-3b0a-43e7-bcd8-4bab557fe657} event:/game/04_cliffside/gondola_theo_fall -{b3501af7-543d-4a16-ba86-5fb0da4416fd} event:/game/04_cliffside/gondola_theo_lever_fail -{898f077b-02af-4524-883d-8bd2a8d7bd9b} event:/game/04_cliffside/gondola_theo_lever_start -{8a992dbc-82cf-41f6-9ebe-493eb1dd3c3a} event:/game/04_cliffside/gondola_theo_recover -{6d7ed51e-7e2c-43ed-913d-6617d6dd43e0} event:/game/04_cliffside/gondola_theoselfie_halt -{e916ead7-7d6f-43a7-aaf7-b6a507a6664f} event:/game/04_cliffside/greenbooster_dash -{bcd8c865-476c-4ff8-a8a4-facf110321a8} event:/game/04_cliffside/greenbooster_end -{a0bb25ba-3b9d-45a1-b4cd-214fe07288c0} event:/game/04_cliffside/greenbooster_enter -{80c246ab-79ac-4190-81c0-56bc959e67c8} event:/game/04_cliffside/greenbooster_reappear -{6bfa7995-5b42-4cc2-8459-6c650085f0c2} event:/game/04_cliffside/snowball_impact -{1c2db8f7-e816-4ebc-b825-0fd27357291e} event:/game/04_cliffside/snowball_spawn -{f2966dfb-524f-456f-9107-d2b2c8bbf398} event:/game/04_cliffside/stone_blockade -{c9374bde-64a8-4f26-b4ce-d84b28dac8c8} event:/game/04_cliffside/whiteblock_fallthru -{564d50fe-6229-4fc5-bef4-771b026308f2} event:/game/05_mirror_temple/bladespinner_spin -{097d5975-dee1-42e2-a3f0-1524b9d60fc6} event:/game/05_mirror_temple/button_activate -{e3598466-186b-4d6e-92bf-0a796a4b5f6a} event:/game/05_mirror_temple/button_depress -{797e3c30-39f9-4ab4-9749-9b7451598ec4} event:/game/05_mirror_temple/button_return -{3f6dc969-2f5c-4324-9cef-fc0119536f80} event:/game/05_mirror_temple/crackedwall_vanish -{1e303df8-ca93-4c8a-83a4-671e311469b0} event:/game/05_mirror_temple/crystaltheo_break_free -{5d717d53-4596-4f11-8f44-c73fb9543aba} event:/game/05_mirror_temple/crystaltheo_hit_ground -{ac5d3d51-3aac-4c22-a608-ba0bb777ca27} event:/game/05_mirror_temple/crystaltheo_hit_side -{f64177a2-2611-49cc-8c63-d74c1e29c8a3} event:/game/05_mirror_temple/eye_pulse -{ca49621b-2ecf-4c77-8282-ba1719986f0f} event:/game/05_mirror_temple/eyebro_eyemove -{22a41a42-5e6f-4185-85d4-b5d1a8c38d4d} event:/game/05_mirror_temple/eyewall_bounce -{7f180cd1-0f90-433d-b71e-c9a6cc7f49e7} event:/game/05_mirror_temple/eyewall_destroy -{68e31409-b316-478b-8eb3-67a885e9dd33} event:/game/05_mirror_temple/gate_main_close -{3ec0a31a-f6af-4426-aaa1-db57098dbd39} event:/game/05_mirror_temple/gate_main_open -{adbfae43-5c5b-4b38-abd2-e13215ebde56} event:/game/05_mirror_temple/gate_theo_close -{2b2b58c7-88e0-4575-aaa5-fbf276beddcf} event:/game/05_mirror_temple/gate_theo_open -{2cc437e8-70f0-48b0-ac2a-0dc93ee06b87} event:/game/05_mirror_temple/key_unlock_dark -{fef47165-cad5-492a-8a42-3db9cc48c2bd} event:/game/05_mirror_temple/key_unlock_light -{4fa2a3d9-560d-4546-92b7-969d2ca1fb29} event:/game/05_mirror_temple/mainmirror_reveal -{b857bbcf-540e-46fd-af37-5ea6d12e28f2} event:/game/05_mirror_temple/mainmirror_torch_lit_1 -{35abfea4-7b3b-489d-bcd8-431b93b87fa4} event:/game/05_mirror_temple/mainmirror_torch_lit_2 -{36604f79-14aa-4a46-a7b3-42a15fc7fbc1} event:/game/05_mirror_temple/mainmirror_torch_loop -{bdeb0f35-c06a-4f67-96d6-57869f22114f} event:/game/05_mirror_temple/redbooster_dash -{b3da9cec-f45e-4dcd-bf8b-c84a7dd5c56b} event:/game/05_mirror_temple/redbooster_end -{1ed8d7f1-ef06-4db9-98d2-4f2ea3b46e7b} event:/game/05_mirror_temple/redbooster_enter -{7f0e5b69-8d8a-4983-ac98-deb970106cc6} event:/game/05_mirror_temple/redbooster_move -{ae2f6ea7-bd05-41df-a0dd-044058292d72} event:/game/05_mirror_temple/redbooster_reappear -{39c3eab6-ef3e-4ffb-8653-b0345fc67e20} event:/game/05_mirror_temple/room_lightlevel_down -{752d010d-81f5-4ea8-a9ab-b99d4e0e1dd9} event:/game/05_mirror_temple/room_lightlevel_up -{9521ed4e-a395-4ef2-89cc-3a3c99942108} event:/game/05_mirror_temple/seeker_aggro -{a35ec65b-6b2b-47b1-8c5f-b13facb6487f} event:/game/05_mirror_temple/seeker_booped -{3147835f-3002-4097-bc14-53c456a8501f} event:/game/05_mirror_temple/seeker_dash -{051055e4-9308-4765-9a0b-877491039301} event:/game/05_mirror_temple/seeker_dash_turn -{48325639-2492-43e0-81de-cd7898db8b8c} event:/game/05_mirror_temple/seeker_death -{d7f87c78-d631-4cb3-8487-f077d65ed4a5} event:/game/05_mirror_temple/seeker_hit_lightwall -{b51e22cd-a7bb-42e5-a0d9-af5e9bfe3c36} event:/game/05_mirror_temple/seeker_hit_normal -{ded98d91-1f1e-4fcf-b177-959028cd379c} event:/game/05_mirror_temple/seeker_playercontrolstart -{fd08f871-88dc-484f-8773-497258aa3034} event:/game/05_mirror_temple/seeker_revive -{439c8be0-4350-4504-9df9-173abc3e15bb} event:/game/05_mirror_temple/seeker_statue_break -{1b02729d-bb1d-4366-94fb-a5683edbfa38} event:/game/05_mirror_temple/swapblock_move -{c4d97750-9512-487d-bd98-cfbe021a2702} event:/game/05_mirror_temple/swapblock_move_end -{a9879415-f054-4486-9582-44cf599b5e70} event:/game/05_mirror_temple/swapblock_return -{7820adbb-5c57-46ac-bde1-9ecba7fa730e} event:/game/05_mirror_temple/swapblock_return_end -{2bf6eb6d-2bbb-4bbf-bf76-1f37fd8b6098} event:/game/05_mirror_temple/torch_activate -{3d116858-7da6-4838-a3bc-5e1f1fb73fd4} event:/game/06_reflection/badeline_feather_slice -{79ca9943-db1f-4118-9c48-1893e5937e42} event:/game/06_reflection/badeline_freakout_1 -{45b9d18d-7871-4c32-93af-521b3bd55483} event:/game/06_reflection/badeline_freakout_2 -{3b218b08-138f-48ab-9e13-00d093114e40} event:/game/06_reflection/badeline_freakout_3 -{3a28d465-3e86-4e3c-8ffd-5e5ba8449c95} event:/game/06_reflection/badeline_freakout_4 -{d1915e57-1952-448d-8610-6b123f6b449c} event:/game/06_reflection/badeline_freakout_5 -{6d25e0a4-6603-4ead-b934-ab432c153bd9} event:/game/06_reflection/badeline_pull_cliffbreak -{74f464a2-074c-4693-9aa6-fc4b1a875f50} event:/game/06_reflection/badeline_pull_impact -{a78e5da7-9ee8-4ba7-bdf0-f3fa45dfb3d8} event:/game/06_reflection/badeline_pull_rumble_loop -{b03ce754-f33d-44f6-aaa8-4f7702dfc335} event:/game/06_reflection/badeline_pull_whooshdown -{03185ab0-0f08-4c6e-a6ae-1c44da6b2842} event:/game/06_reflection/boss_spikes_burst -{a67c7b2a-2efe-437d-b4eb-9b0b7c9a5c38} event:/game/06_reflection/crushblock_activate -{0b58832d-4e27-44db-a154-558d490c3083} event:/game/06_reflection/crushblock_impact -{964ff961-da31-4ff4-b344-7b7dd4ddc7d7} event:/game/06_reflection/crushblock_move_loop -{a8ad11bd-1740-42fc-a83b-e067c2461c18} event:/game/06_reflection/crushblock_move_loop_covert -{251c3dfb-0cab-4ef7-bb2c-2b0f8aa56537} event:/game/06_reflection/crushblock_rest -{115ebebd-cb97-4ba1-bc55-5f6dac63a699} event:/game/06_reflection/crushblock_rest_waypoint -{b04421be-109d-400f-8797-cdd05d0f6bd7} event:/game/06_reflection/crushblock_return_loop -{88cc2646-c70d-47bb-9e88-1de934fa1792} event:/game/06_reflection/fall_spike_smash -{441f8a0a-8783-4894-b45c-815c95877931} event:/game/06_reflection/fallblock_boss_impact -{d7c6ea52-c946-4099-9a90-553be5d5335b} event:/game/06_reflection/fallblock_boss_shake -{eb66579e-6a05-4b8d-ad27-0f39703998c7} event:/game/06_reflection/feather_bubble_bounce -{6e29b787-1f7a-4f44-84a8-eb867342a37f} event:/game/06_reflection/feather_bubble_get -{eef6081c-aa94-4203-a235-41cc41007d4e} event:/game/06_reflection/feather_bubble_renew -{3cafbad4-ca29-4798-815a-ada3a887ffd3} event:/game/06_reflection/feather_get -{9a2f4eef-a598-4031-9600-4ed2d0ecec3c} event:/game/06_reflection/feather_reappear -{38215515-d671-4635-a2ff-9b6749619301} event:/game/06_reflection/feather_renew -{e08e627f-334c-46f1-b8a8-9c090cadc788} event:/game/06_reflection/feather_state_bump -{ea1e1d39-ace6-481c-8438-d57709355f1e} event:/game/06_reflection/feather_state_end -{a7153155-8c54-4635-9ea5-5423d9cd02e5} event:/game/06_reflection/feather_state_loop -{7d1dcd4a-298d-4943-b70d-f41311ec4f1b} event:/game/06_reflection/feather_state_warning -{61497bfa-cd5f-4c26-86ae-a12d04fd5dee} event:/game/06_reflection/hug_badeline_glow -{3aded16d-06f6-4a37-aa4c-91bd91ee290a} event:/game/06_reflection/hug_image_1 -{d375e1f8-d1ac-47f2-8bc9-bc51029404e6} event:/game/06_reflection/hug_image_2 -{21cc70d3-7469-431e-b31d-63844d7005c5} event:/game/06_reflection/hug_image_3 -{97ad5be6-ab5a-4587-9868-1a6a36befc48} event:/game/06_reflection/hug_levelup_text_in -{be107a92-39f3-4789-8fbb-b1055dee27ee} event:/game/06_reflection/hug_levelup_text_out -{21db4b0c-6524-4545-8266-c6ea1bf032ef} event:/game/06_reflection/pinballbumper_hit -{8d6249fc-9f0d-4980-b876-036252ae209d} event:/game/06_reflection/pinballbumper_reset -{34751b86-7136-491f-b281-4acfc5abc130} event:/game/06_reflection/scaryhair_move -{990ebd4d-3117-4c00-8328-88b757411c91} event:/game/06_reflection/scaryhair_whoosh -{91dc7f98-2590-4c28-adcb-02c1881cf8d2} event:/game/06_reflection/supersecret_dashflavour -{8b071bc7-bb71-4db6-9a0c-78c576426dc8} event:/game/06_reflection/supersecret_heartappear -{3e6f0df6-6fe4-47de-b2c0-d08bcfa21319} event:/game/06_reflection/supersecret_torch_1 -{ba61f3cf-14b9-4d76-b433-4a6d8f14dedc} event:/game/06_reflection/supersecret_torch_2 -{a962651f-30eb-4a9c-97fc-d835f6a87783} event:/game/06_reflection/supersecret_torch_3 -{954696fc-a63e-4463-a54c-10838017aa8e} event:/game/06_reflection/supersecret_torch_4 -{007817b9-722a-44c8-8e14-cc66233ce495} event:/game/07_summit/altitude_count -{6fb5dd68-3aab-4a50-ad31-33d08b2e88e5} event:/game/07_summit/checkpoint_confetti -{98bbbca2-1b04-495b-8a02-7eae819d473c} event:/game/07_summit/gem_get -{c4168a8d-2840-4f88-8dae-c53ae7a67551} event:/game/07_summit/gem_unlock_1 -{e67a6421-0ca8-4051-98f4-8ee400f0db93} event:/game/07_summit/gem_unlock_2 -{b7fd1fc1-f041-42ef-82c3-ff792e998a1a} event:/game/07_summit/gem_unlock_3 -{dccaadfe-f788-4980-8a91-4f8fadb26609} event:/game/07_summit/gem_unlock_4 -{f7e67666-e4fe-49db-a6e3-209bfae067a4} event:/game/07_summit/gem_unlock_5 -{c8ad0627-526a-4251-b3c9-9e77637278a0} event:/game/07_summit/gem_unlock_6 -{4ab3c742-e5f8-4337-a38e-ea8ed81f3585} event:/game/07_summit/gem_unlock_complete -{d16b3d24-62a8-428d-a6c9-9a1d9b0b47db} event:/game/09_core/bounceblock_break -{9d02cd4d-a187-4104-a985-505de199fb25} event:/game/09_core/bounceblock_reappear -{7be458ab-5b1e-4237-84e7-ead255468209} event:/game/09_core/bounceblock_touch -{c11484c7-8cc1-4328-b074-2ed680b452f1} event:/game/09_core/conveyor_activate -{a97e79b8-1e79-4f31-a648-7b99414a800c} event:/game/09_core/final_heart_get -{91d12529-3e7b-47e2-bc73-2037267fc6ca} event:/game/09_core/frontdoor_heartfill -{12eebf33-5c32-46f2-b988-00fdffb83b6d} event:/game/09_core/frontdoor_unlock -{2718ffac-db8e-4f95-b54e-253134bd48a5} event:/game/09_core/hotpinball_activate -{3988aed8-0d51-4226-8ebb-89a25c823c78} event:/game/09_core/iceball_break -{6c7ea8bb-a843-4cd6-8397-c31344ae3a83} event:/game/09_core/iceblock_reappear -{cb58d270-9f66-4686-aea7-ca779f5ce612} event:/game/09_core/iceblock_touch -{2823a745-a4bf-428a-9c9f-01d36d543f63} event:/game/09_core/pinballbumper_hit -{d9c39b1e-abbe-40b0-a78a-b78b61d94ebd} event:/game/09_core/rising_threat -{4873d018-21da-4850-8503-df248e413cb5} event:/game/09_core/switch_dies -{e08cde3f-631d-47ab-a94a-9281717c3219} event:/game/09_core/switch_to_cold -{9b4a375f-ac9e-4d57-a145-b7e488e46191} event:/game/09_core/switch_to_hot -{93c5f4b9-cb2c-4db0-ad3f-b05272ff8950} event:/game/general/assist_dash_aim -{f32eab8f-468d-430f-8fb4-c603abc19aab} event:/game/general/assist_dreamblockbounce -{0cc0f8af-53e0-4301-a6ba-9d3545a34e4e} event:/game/general/assist_nonsolid_in -{992b2466-36d9-4202-a439-2a74a43a19d1} event:/game/general/assist_nonsolid_out -{b98b9406-a64d-4428-b882-a33366f50cbf} event:/game/general/assist_screenbottom -{5f8d988c-528d-4d55-a6e2-4c47bfc50176} event:/game/general/bird_in -{51d238e6-4f1b-46f6-a94d-df78f8df8ac7} event:/game/general/bird_land_dirt -{391d10bd-1577-4ae2-8370-04e1bd3f0fc5} event:/game/general/bird_peck -{4d1ae0ae-db96-47b7-925c-ce84c6ab722e} event:/game/general/bird_squawk -{7ea54ed8-0285-4dfc-a1ce-558444a4aa59} event:/game/general/bird_startle -{73b07905-9234-4900-af6e-b27820978106} event:/game/general/birdbaby_flyaway -{855749a2-8c5a-4db6-9877-f7cfd3a2183c} event:/game/general/birdbaby_hop -{2708f97c-8a18-4c6b-9bd7-1abf90dac0f6} event:/game/general/birdbaby_tweet_loop -{0e132294-09bd-44a3-9af3-9392521eddef} event:/game/general/cassette_block_switch_1 -{4286af39-b45f-42e6-887d-f8515180d3f8} event:/game/general/cassette_block_switch_2 -{9db695ce-ce56-4025-9528-030d6b599c86} event:/game/general/cassette_bubblereturn -{111996f6-8bae-408f-86d1-0aeae8203f4b} event:/game/general/cassette_get -{4c42d16c-381c-43ca-9d5d-56595e196b08} event:/game/general/cassette_preview -{1acb8e84-5f79-4dcd-86aa-e8a514535b7d} event:/game/general/crystalheart_blue_get -{96349ed6-cd24-4010-a9ee-0e93101a6609} event:/game/general/crystalheart_bounce -{10ff4e08-9448-49ae-8092-d402bb128538} event:/game/general/crystalheart_gold_get -{78f2deb2-fccc-4d1d-b78a-9667d574bbf3} event:/game/general/crystalheart_pulse -{e04dbcbd-4476-4174-9046-1e92febcc08e} event:/game/general/crystalheart_red_get -{8b672ab7-0d76-45fb-a9e9-1676ca014d6f} event:/game/general/debris_dirt -{3795b486-390b-46cc-97f9-dced1a83453b} event:/game/general/debris_stone -{972b07a3-38ff-4818-b24d-151db5d3a044} event:/game/general/debris_wood -{735f3afc-00bc-46da-94f1-2cb51e3bfecc} event:/game/general/diamond_return -{a47180e1-9bc2-4dbc-86c7-6402cea2e2be} event:/game/general/diamond_touch -{5381856a-d548-4a31-b7e5-b94d2a72881e} event:/game/general/fallblock_impact -{a9cc805b-cc3c-4e29-af3b-bc69914e5a10} event:/game/general/fallblock_shake -{3070bcdd-928f-4ffb-ba75-d43dbb2c2864} event:/game/general/key_get -{2b6c4db0-c9c8-4be7-8835-b4866bc1e4f5} event:/game/general/lookout_move -{60836b2c-9999-4f03-8801-2c01dc40b163} event:/game/general/lookout_use -{f372e3a9-bb65-4343-bf47-b87d18d10383} event:/game/general/passage_closed_behind -{e217436d-8f73-462c-9877-ac095e8f20b8} event:/game/general/platform_disintegrate -{58e5b7db-c18b-4399-bd5c-dd592c9c1b47} event:/game/general/platform_return -{38e9f295-6400-41e8-b574-9a1e8c908622} event:/game/general/secret_revealed -{2626645e-6392-4963-8361-4dccfa511758} event:/game/general/seed_complete_berry -{26391bcd-7613-49ad-a9bd-529f7bcaeb29} event:/game/general/seed_complete_main -{884bccb8-958a-4278-8a1b-daf74fff37c0} event:/game/general/seed_poof -{b5d1aeec-3d7e-4eed-9e82-5014b99162ce} event:/game/general/seed_pulse -{c4df15cb-44b5-4913-b238-29083f1d8b0a} event:/game/general/seed_reappear -{6160ad7b-16f6-49a5-aa9b-55d75da5a8e1} event:/game/general/seed_touch -{1a7858a9-96f8-426a-a06f-0c2750e43f85} event:/game/general/spotlight_intro -{b38c0f26-cef2-487f-b99c-295757ccd5a9} event:/game/general/spotlight_outro -{a4c52eee-f6a0-4ebe-976f-fab38d4cfa7a} event:/game/general/spring -{2452bb12-5d79-4849-b62b-17cc06744679} event:/game/general/strawberry_blue_pulse -{5c271b0b-eba2-400b-8011-e1d673324674} event:/game/general/strawberry_blue_touch -{3b9e48f1-e72d-46a6-909b-4ce5044c4253} event:/game/general/strawberry_flyaway -{3b45b8d4-ff15-4d36-9411-3e4ce2726377} event:/game/general/strawberry_get -{e144b578-20dd-4722-897c-24de90562b7b} event:/game/general/strawberry_laugh -{0886e368-bce4-4922-97c3-edeadf714e29} event:/game/general/strawberry_pulse -{525d00db-bc31-4054-9f61-0238bfd62941} event:/game/general/strawberry_touch -{dd319a09-d197-4604-8ebf-c5fee614d863} event:/game/general/strawberry_wingflap -{5a1e6a52-fa6a-44fb-b7ef-931a000b7c95} event:/game/general/thing_booped -{30fafd37-cd47-4a56-ab3b-0cc8f1beec5b} event:/game/general/touchswitch_any -{0d6edb8b-2936-4e11-bc13-2c8bba70cbfa} event:/game/general/touchswitch_gate_finish -{845556f0-842c-46d2-ac6c-64fc05f14cb0} event:/game/general/touchswitch_gate_open -{0bf56c65-3c71-4a0a-bce1-0bc63af5b3f6} event:/game/general/touchswitch_last -{effc3510-2efe-422f-aa3a-30b8ace60533} event:/game/general/touchswitch_last_cutoff -{479dda0f-e99f-478b-96c0-6367cf06cab2} event:/game/general/touchswitch_last_oneshot -{329fd34b-cca4-4d8c-a07e-fdf8be436e38} event:/game/general/wall_break_dirt -{7c01de41-a31a-43c3-9c0f-9ae85ad94c68} event:/game/general/wall_break_ice -{92f75010-4e90-428e-834c-1315ddbd9460} event:/game/general/wall_break_stone -{634bdd66-3f53-4679-8ced-fadfc60d412f} event:/game/general/wall_break_wood -{51873fdd-604e-4810-9db1-8c6e5a6049b5} event:/music/cassette/01_forsaken_city -{e44a2aa5-f96e-4d75-8018-8bee278017ad} event:/music/cassette/02_old_site -{bb2ac8fc-6353-4127-bc7b-7439262508da} event:/music/cassette/03_resort -{bda820f1-0c6f-4c4f-8e8b-615d94a6bb89} event:/music/cassette/04_cliffside -{117d38ce-6174-491e-9564-107d17a7b187} event:/music/cassette/05_mirror_temple -{832066ac-c78a-4c60-a7d0-dbc2c4712dd7} event:/music/cassette/06_reflection -{464d1185-b4c6-4ab8-b570-ed2a92c3aade} event:/music/cassette/07_summit -{ac98793d-c890-4675-bb13-3a3aec282b0b} event:/music/cassette/09_core -{474ccf9f-bad7-48e2-b7c6-df307b74e4a5} event:/music/lvl0/bridge -{8b890963-5cea-4df9-8d73-ca2116519928} event:/music/lvl0/intro -{02fa256c-1e08-46e5-9082-85c38b403d4c} event:/music/lvl0/title_ping -{1af3da54-a900-4929-acdf-5098a27c4d8e} event:/music/lvl1/main -{294d9147-9177-42ba-9bd8-04defb79a6a6} event:/music/lvl1/theo -{aa60a19a-6bab-43d2-9b18-9c0f39087123} event:/music/lvl2/awake -{11062cdc-badd-4bd5-96b2-f47463ddd9b2} event:/music/lvl2/beginning -{e2d41f6a-ec7d-4b25-a74f-3746b7207f4f} event:/music/lvl2/chase -{c6d8b40c-ab8b-415e-8279-fd5ddfde7f68} event:/music/lvl2/dreamblock_sting_pt1 -{f0a05548-59a3-4b71-baf0-2d591c25677e} event:/music/lvl2/dreamblock_sting_pt2 -{8d56aaf8-b0f5-4f8c-b27a-9c07e13e5fa2} event:/music/lvl2/evil_madeline -{78ac6937-dfd7-4d1c-a3b0-a71818c2cc49} event:/music/lvl2/mirror -{a013a019-5c83-47fa-8c76-bf26a0ee3ab7} event:/music/lvl2/phone_end -{92c762da-6b09-4ae6-bea6-6264d405d309} event:/music/lvl2/phone_loop -{73c95a24-6c35-4dc5-893d-7e79ecc61481} event:/music/lvl3/clean -{31a7988d-80bf-40ee-84f0-644a17abe6cc} event:/music/lvl3/explore -{cc153928-7bcc-4c83-b9e2-586dca338588} event:/music/lvl3/intro -{16a8585c-e163-4594-bbeb-5bb2977f947f} event:/music/lvl3/oshiro_chase -{416d5500-d42a-4981-baa8-83381cbbce3f} event:/music/lvl3/oshiro_theme -{e15a069f-4f5d-430e-9741-b8fffb62ab3d} event:/music/lvl4/heavy_winds -{bd2bf7cc-8196-4f69-9548-418ea37eb9fd} event:/music/lvl4/main -{afcdbcca-8216-4659-ad5d-a2f4d836e1ee} event:/music/lvl4/minigame -{ddeb5097-ebd0-4e92-964c-b9458ae3ff18} event:/music/lvl5/middle_temple -{7e1c842a-b3d8-440a-9c39-196826b8bee2} event:/music/lvl5/mirror -{1b5af286-b8ce-444a-8f9b-03bc5fb66166} event:/music/lvl5/mirror_cutscene -{b19f2493-502a-408c-847b-4e0bb666e202} event:/music/lvl5/normal -{2d16d1b8-f6c7-472d-879f-c583537302d7} event:/music/lvl5/seeker_drums_layer -{466271ba-3e10-4943-ba99-0bd63ade7636} event:/music/lvl6/badeline_acoustic -{42d3ce68-8863-487c-bc3c-a1f74bd85911} event:/music/lvl6/badeline_fight -{e1a395a5-aa17-4418-ac3d-ffa51c618014} event:/music/lvl6/badeline_glitch -{f1e2f6f3-29d9-4914-8296-4261a223d3ac} event:/music/lvl6/madeline_and_theo -{29904477-ac10-4b8d-8858-0ac06df88d02} event:/music/lvl6/main -{1841d8c6-d1af-4319-9926-9ed41e4a8d85} event:/music/lvl6/secret_room -{78fca5fd-8d0a-42d2-b5d8-3501cef99c85} event:/music/lvl6/starjump -{f351bdf5-087b-451d-92c6-1ac651117107} event:/music/lvl6/the_fall -{435249ff-4293-4369-8652-5d2f314551c5} event:/music/lvl7/final_ascent -{443b630c-e94c-4aba-ad10-4cc7468d49cb} event:/music/lvl7/main -{f335427a-7961-4e4e-b94c-58c2a4490182} event:/music/lvl8/main -{38e2f39c-382d-4136-86fd-e24520f3b71e} event:/music/lvl9/main -{4d5dc6c1-fd41-4e8d-bf91-84a15631055d} event:/music/menu/complete_area -{ac1cb91e-c5ed-42f9-82f9-847cc2c0df9e} event:/music/menu/complete_bside -{705df905-2639-470f-963f-408f30e23a2b} event:/music/menu/complete_summit -{f47636da-f583-418c-beb4-f4e0d3e80ec3} event:/music/menu/credits -{a8ac3582-9e94-40af-b76a-2ff51f076e6f} event:/music/menu/level_select -{889ddcf6-8d06-4106-9e73-f5d63f964717} event:/music/remix/01_forsaken_city -{1d8f0733-f7c7-4af1-947d-da16faaa673a} event:/music/remix/02_old_site -{ec2e5fa5-9f50-4fd7-bdc2-45474c4967a3} event:/music/remix/03_resort -{a0b49e74-eb0b-4519-bb38-987095b66578} event:/music/remix/04_cliffside -{8efb347e-e501-4bab-9349-7b6dbba66551} event:/music/remix/05_mirror_temple -{51acfb4c-c5b1-4bd7-af44-a0c2472327db} event:/music/remix/06_reflection -{16aaecdf-ca62-4273-9bff-7900f3d92a4b} event:/music/remix/07_summit -{10deb10e-5387-4e38-8ce5-aa83feaa5cf7} event:/music/remix/09_core -{a38a422d-553d-4a98-bd77-4fb94c9a40a8} event:/new_content/char/badeline/birdcrash_scene_float -{cad1c006-44ce-4a92-8c90-5996befaa8c4} event:/new_content/char/badeline/booster_finalfinal_part1 -{db21d96e-f70a-4799-987e-574c9f68cc2d} event:/new_content/char/badeline/booster_finalfinal_part2 -{5a554fe3-4398-4960-ab5e-70dc62685ded} event:/new_content/char/badeline/booster_first_appear -{4316d3ba-709e-4fc5-8e8c-0279daf4659e} event:/new_content/char/badeline/booster_relocate_slow -{fd06af1f-776a-4879-9100-91b14c48bb66} event:/new_content/char/badeline/maddy_join_quick -{bd5452ab-7b14-4571-bca2-21656793c2d6} event:/new_content/char/granny/cane_tap_ending -{1cc5e3b3-4078-4728-9405-a5ab3ac94759} event:/new_content/char/granny/dissipate -{eeab0167-3ebd-45b2-b701-7dc9f98959e0} event:/new_content/char/madeline/Vanilla Backup/death_golden -{b17c7077-e1c9-4ba8-8f49-4eec29d9f1ce} event:/new_content/char/madeline/bounce_boost -{5534c1ec-5c0a-4589-a5c7-cbb3fcbfa160} event:/new_content/char/madeline/glider_drop -{e2c752dc-10dc-41e7-8709-95cbbcfe9104} event:/new_content/char/madeline/hiccup_ducking -{57531525-33bf-45a5-bf27-306814b95457} event:/new_content/char/madeline/hiccup_standing -{89dec006-6bd9-4491-b238-bfc13a072506} event:/new_content/char/madeline/screenentry_golden -{a260d3a1-20b3-44f1-9543-e8ec9bcccfe9} event:/new_content/char/madeline/screenentry_gran -{ff56e917-feba-4631-84eb-2718c65c1e58} event:/new_content/char/madeline/screenentry_gran_landing -{82b35daf-877f-401a-9b49-6a4bb9ff5bc3} event:/new_content/char/madeline/screenentry_lowgrav -{0653a7ee-59e5-4915-8695-dcba555607b5} event:/new_content/char/madeline/screenentry_stubborn -{c2e8cdc9-b6a3-4f66-8500-af91182f176e} event:/new_content/char/madeline/death_golden -{e36926d3-b7b4-409f-904c-5d5d1131b55a} event:/new_content/char/tutorial_ghost/appear -{a41658fa-080f-4fde-9a63-d571b36237ed} event:/new_content/char/tutorial_ghost/dash_red_left -{2e4105eb-0489-4a3b-8466-b356d06a7f8c} event:/new_content/char/tutorial_ghost/dash_red_right -{14db73f4-6a9b-494a-b1b6-1e82763b508e} event:/new_content/char/tutorial_ghost/disappear -{052e57b9-276e-4eee-ab21-09a978ef3621} event:/new_content/char/tutorial_ghost/dreamblock_sequence -{97781d70-8798-43ce-b1b8-aec9039c3262} event:/new_content/char/tutorial_ghost/footstep -{6279ab0b-6594-4756-8495-4eefa78093a1} event:/new_content/char/tutorial_ghost/grab -{8490f47c-fa00-40cb-a2ff-2d94c2ac9292} event:/new_content/char/tutorial_ghost/handhold -{94bde26a-6355-4896-b674-d44adf70705d} event:/new_content/char/tutorial_ghost/jump -{0f15b7da-7808-4c29-8bb8-382c1ec6e407} event:/new_content/char/tutorial_ghost/jump_super -{5e86985d-5063-4a53-ad24-46896ff682a2} event:/new_content/char/tutorial_ghost/land -{03c328c7-8d1c-48c2-b2e6-d1d8225e4d89} event:/new_content/env/local/cafe_computer -{e88c096c-382f-4add-aa77-36653d4a0b14} event:/new_content/env/local/cafe_sign -{4525fa59-c11e-4863-843f-3783571b11cf} event:/new_content/env/local/kevinpc -{9cb8fd7f-f28f-4f21-8153-2d3c5830e0a1} event:/new_content/env/local/tutorial_static_left -{e0a3bd21-b245-4733-9fb5-69f2261b4ce5} event:/new_content/env/local/tutorial_static_right -{58a69c31-956e-42a2-a9a2-359e67921ffa} event:/new_content/env/10_electricity -{7c6562f4-68b1-484a-8e50-a935f1ab56f7} event:/new_content/env/10_endscene -{3f8d0871-07ac-49dd-b7c2-893043eaaf83} event:/new_content/env/10_grannyclouds -{fceb8b1e-7d92-400b-903f-406dade6162c} event:/new_content/env/10_rain -{f89e2eed-f3a6-46bf-9de1-9a3827ff79db} event:/new_content/env/10_rushingvoid -{589ad0f1-53f4-4567-b6a1-34c670afb80d} event:/new_content/env/10_space_underwater -{a351d4ea-7c48-43ce-a371-db4ee6f5ddc5} event:/new_content/env/10_voidspiral -{447f67ef-0777-4a7a-94e2-c00300316d10} event:/new_content/game/10_farewell/bird_camera_pan_up -{d3a1e63e-2265-4652-988f-3d07724ab466} event:/new_content/game/10_farewell/bird_crashscene_leave -{2bb2c164-719e-4ead-8dbd-f6943e93ec31} event:/new_content/game/10_farewell/bird_crashscene_recover -{a1745c53-2c9e-4545-bc28-275b56d913d8} event:/new_content/game/10_farewell/bird_crashscene_relocate -{61f52438-bee9-4393-ac9b-10a03ec220b9} event:/new_content/game/10_farewell/bird_crashscene_start -{712650d6-3edc-40f8-96e7-c4d70aabc7fb} event:/new_content/game/10_farewell/bird_crashscene_twitch_1 -{59ecf2bc-ad5d-4055-ad4d-c477789353f9} event:/new_content/game/10_farewell/bird_crashscene_twitch_2 -{84666200-9dc1-435c-86dc-c576f7fea100} event:/new_content/game/10_farewell/bird_crashscene_twitch_3 -{ba4f0d7f-6781-437f-8f40-babd44ffd7e5} event:/new_content/game/10_farewell/bird_flappyscene -{613e3e96-0787-4e4c-b1b9-d5b85edb09f2} event:/new_content/game/10_farewell/bird_flappyscene_entry -{9aa30c86-bd74-4fe0-a746-6206a161dbda} event:/new_content/game/10_farewell/bird_fly_uptonext -{00c336f3-361c-455c-a735-88d322bb0a87} event:/new_content/game/10_farewell/bird_flyuproll -{9ba95702-66ae-441f-944e-c123175195ff} event:/new_content/game/10_farewell/bird_relocate -{ff882573-75c7-4aeb-86e2-73a946646308} event:/new_content/game/10_farewell/bird_startle -{f73f6ebb-c858-4a36-b59a-74c66ee1f901} event:/new_content/game/10_farewell/bird_throw -{ee413800-8752-4f0b-9a5d-3084e2473aa2} event:/new_content/game/10_farewell/bird_wingflap -{67ac36e7-71f0-4956-97b1-ac7ce0e1bd0a} event:/new_content/game/10_farewell/cafe_computer_off -{4be46c93-4868-4b41-ab86-cd5b4cb24ab4} event:/new_content/game/10_farewell/cafe_computer_on -{2760b17a-48e8-4008-8fdc-c5180c7e7516} event:/new_content/game/10_farewell/cafe_computer_on_old -{cb643135-d2a6-4999-b669-d2385a7cf546} event:/new_content/game/10_farewell/cafe_computer_startupsfx -{e50e05b1-7d84-42b4-9978-eaed3a3d9945} event:/new_content/game/10_farewell/endscene_attachment_click -{0d8902b7-105c-4f09-973b-28e701845084} event:/new_content/game/10_farewell/endscene_attachment_notify -{9492988e-612e-418d-a1a5-b416db84f087} event:/new_content/game/10_farewell/endscene_dial_theo -{87c24e15-dce0-40ae-a8b5-878e5a071dc6} event:/new_content/game/10_farewell/endscene_final_input -{0a35baac-0a14-4121-b6fe-8336c5ae6507} event:/new_content/game/10_farewell/endscene_photo_zoom -{8e4da22f-7a93-46b7-8e07-7255d3431e1b} event:/new_content/game/10_farewell/fakeheart_bounce -{a72e0e5c-5db0-4542-8a29-25d4d8e19a14} event:/new_content/game/10_farewell/fakeheart_get -{51f68531-d228-4786-b703-6a5f44e41cee} event:/new_content/game/10_farewell/fakeheart_pulse -{08327e1d-c840-4d1e-9733-0cf4a843f867} event:/new_content/game/10_farewell/fusebox_hit_1 -{6b7fe1af-1dfd-40f1-89bc-b3e43f6eddcf} event:/new_content/game/10_farewell/fusebox_hit_2 -{0a4ae8c6-5797-4d09-8636-106589eeeeae} event:/new_content/game/10_farewell/glider_emancipate -{59507330-6098-4229-9ad1-7c927ec01298} event:/new_content/game/10_farewell/glider_engage -{cd01863f-3e92-4952-9a97-9a529df26b53} event:/new_content/game/10_farewell/glider_land -{faf2332c-87fb-46d7-b108-99de35f7d683} event:/new_content/game/10_farewell/glider_movement -{0ef75714-36af-4845-bd24-72028d9c1efb} event:/new_content/game/10_farewell/glider_platform_dissipate -{d3bd0dd4-28a4-4217-ac40-a3b8c2531979} event:/new_content/game/10_farewell/glider_wallbounce_left -{de545f84-effc-4211-b6e5-ecffe93189db} event:/new_content/game/10_farewell/glider_wallbounce_right -{825153d7-05f3-44b4-834c-fa2248bab331} event:/new_content/game/10_farewell/glitch_long -{b26ebe07-7db5-40d0-9282-2d1449db8c5a} event:/new_content/game/10_farewell/glitch_medium -{42d600c5-32c3-4433-8a1e-be394b30bcde} event:/new_content/game/10_farewell/glitch_short -{6fc73c45-4446-4114-b002-6dfeb92769d7} event:/new_content/game/10_farewell/heart_door -{67466be6-2fc8-4d0e-992e-0c882a8adf9a} event:/new_content/game/10_farewell/key_unlock_1 -{ce614f36-80cd-453a-8af8-3ba2c20c5a5a} event:/new_content/game/10_farewell/key_unlock_2 -{e4d013b8-4cd3-4cab-aec7-829d00c6307a} event:/new_content/game/10_farewell/key_unlock_3 -{324223a1-46c3-437e-9069-ed5059b47b95} event:/new_content/game/10_farewell/key_unlock_4 -{65131955-b8d6-4254-9fe9-ce9965b0f8c9} event:/new_content/game/10_farewell/key_unlock_5 -{d27aa340-38c2-46fe-9e45-83c4f6be9070} event:/new_content/game/10_farewell/lightning_strike -{9f711ad4-4561-47f1-ab99-938d1169b1ca} event:/new_content/game/10_farewell/locked_door_appear_1 -{7a366698-8474-4be8-83ab-be004cb6a2a3} event:/new_content/game/10_farewell/locked_door_appear_2 -{c2f181a5-e820-4e13-aa2d-ff902fab795a} event:/new_content/game/10_farewell/locked_door_appear_3 -{a4f824f9-22e8-4589-a9b9-0db1ad747fa3} event:/new_content/game/10_farewell/locked_door_appear_4 -{1c75f1cf-5825-42f1-b57f-5b5a5cefdedd} event:/new_content/game/10_farewell/locked_door_appear_5 -{17a8ef3e-78e8-430c-9cf4-995a121ef1fe} event:/new_content/game/10_farewell/pico8_flag -{711fa1d2-88c6-4f74-a650-fe7011e736fa} event:/new_content/game/10_farewell/pinkdiamond_return -{8aeeda91-d53c-409e-9f6b-37f8724ca79a} event:/new_content/game/10_farewell/pinkdiamond_touch -{cabdd646-45f5-4dbd-9cd2-898a99a794c4} event:/new_content/game/10_farewell/ppt_cube_transition -{b8e2f523-8fd3-444c-99aa-b45e5910fcda} event:/new_content/game/10_farewell/ppt_dissolve_transition -{43420008-de4c-4d1c-8f4b-15c4871e4354} event:/new_content/game/10_farewell/ppt_doubleclick -{35472fac-2f05-4eb5-8281-d929b5ce41bb} event:/new_content/game/10_farewell/ppt_happy_wavedashing -{c0b225c7-09c9-4ab7-a093-706c35d87598} event:/new_content/game/10_farewell/ppt_impossible -{55899a39-fc05-43d3-8878-834a4a25b6d4} event:/new_content/game/10_farewell/ppt_its_easy -{5c9780f7-de2d-4811-813e-f89201d92e35} event:/new_content/game/10_farewell/ppt_mouseclick -{445a96f2-982e-49d4-895a-19889e614955} event:/new_content/game/10_farewell/ppt_spinning_transition -{33a10afa-41bd-4534-8222-17e7947e9517} event:/new_content/game/10_farewell/ppt_wavedash_whoosh -{82f68918-aab7-4a13-a58a-05a318a8c32c} event:/new_content/game/10_farewell/puffer_boop -{495bbb28-2513-4698-8d54-fa114ff6722d} event:/new_content/game/10_farewell/puffer_expand -{355e716c-e169-4114-a223-a4e3156d23cf} event:/new_content/game/10_farewell/puffer_reform -{6fc9a437-3cb1-4455-b2e1-421eb885177c} event:/new_content/game/10_farewell/puffer_return -{2f7381e9-7264-4df3-8cff-84cc46b2d3d9} event:/new_content/game/10_farewell/puffer_shrink -{7867f29b-8e33-4e2e-8d56-00cf9211cadd} event:/new_content/game/10_farewell/puffer_splode -{026c5b8c-d51e-42df-a9bd-ae7b1e84f7b2} event:/new_content/game/10_farewell/quake_onset -{28caabf1-2b9d-480e-bcc2-5947a2398087} event:/new_content/game/10_farewell/quake_rockbreak -{a948d002-6935-4b70-92bf-39b7e43c56e0} event:/new_content/game/10_farewell/strawberry_gold_detach -{b0f9d304-0ba2-4858-b514-7620a56dda0b} event:/new_content/game/10_farewell/zip_mover -{3f2d120c-8b3f-4adf-b110-42388e8c5674} event:/new_content/music/lvl10/cinematic/bird_crash_first -{92aa23ba-8ab2-4448-aae6-67acbe73582b} event:/new_content/music/lvl10/cinematic/bird_crash_second -{3482e653-439f-46cc-8cbd-02abf456b0e4} event:/new_content/music/lvl10/cinematic/end -{0aab6c8a-4133-4265-8bad-098df594150f} event:/new_content/music/lvl10/cinematic/end_intro -{c188c18a-cede-4cca-b9c1-455f89a13ca8} event:/new_content/music/lvl10/cassette_rooms -{427b4b7d-22a7-4295-9f47-931b594b4daa} event:/new_content/music/lvl10/final_run -{c76a681f-24c9-48b2-b9c7-ca8bca24902e} event:/new_content/music/lvl10/golden_room -{4d1d9d21-9e89-405f-844f-070ae9d6611e} event:/new_content/music/lvl10/granny_farewell -{e296f495-1041-400e-9c31-c59ef318e7b7} event:/new_content/music/lvl10/intermission_heartgroove -{c6c1c7be-a5a5-4654-8e6f-15aed6a96847} event:/new_content/music/lvl10/intermission_powerpoint -{f7e0cc43-4a57-49ee-a114-7d9d1e40b198} event:/new_content/music/lvl10/part01 -{af7a6f63-887d-4508-b54e-ff4e4f296ae1} event:/new_content/music/lvl10/part02 -{57cceb1a-e169-43f4-802c-d41992ec6926} event:/new_content/music/lvl10/part03 -{8023c811-1142-42b8-8789-cbf1221c5c81} event:/new_content/music/lvl10/reconciliation -{2133d394-da16-49a5-82d2-59dfabecf762} event:/new_content/ui/postcard_variants_in -{f065adf0-963d-4d3e-a4fe-1538154936f7} event:/new_content/ui/postcard_variants_out -{4c875fde-bab4-4ddf-a32b-1a098a44e2a1} event:/new_content/ui/rename_entry_accept_locked -{b3639ef6-f73d-4ae0-a8c7-8edb94279868} event:/new_content/ui/skip_all -{7d16c138-146a-4337-97b7-777ec6146448} event:/new_content/timeline_bubble_to_remembered -{b5fd173e-9a58-4412-9be1-094108b82157} event:/state/cafe_computer_active -{d85a0635-cbcf-4ba3-8466-b6e24aa45894} event:/state/underwater -{c4d2289a-859e-42e9-ba38-eee1791a3a62} event:/ui/game/chatoptions_appear -{dd4cb027-0132-4039-9303-c9ad8589683e} event:/ui/game/chatoptions_roll_down -{1b030b2e-c125-40d5-b582-5819c6c29584} event:/ui/game/chatoptions_roll_up -{bc008f9e-76c5-42d5-b2f0-574cb7dacf6f} event:/ui/game/chatoptions_select -{632ed69e-ef16-4824-8aaf-8e01aad17cce} event:/ui/game/general_text_loop -{903b26bf-ad0c-40a2-b53f-f2a08b50ae4f} event:/ui/game/hotspot_main_in -{4684b7e3-ac7e-40c0-a242-822dbd84326e} event:/ui/game/hotspot_main_out -{07defb47-8579-4c47-9528-289e7a758553} event:/ui/game/hotspot_note_in -{3f531057-7752-4e5a-a782-82ad7428ac70} event:/ui/game/hotspot_note_out -{44a55198-a0bd-4e72-baba-5654142dccef} event:/ui/game/increment_dashcount -{ea92919d-46d8-411e-82f6-b36c79d96c72} event:/ui/game/increment_strawberry -{b086c73f-8ceb-4bea-b569-bdd561e32ccf} event:/ui/game/lookout_off -{defdc0d5-8ae6-47e4-8970-29f12a66fe66} event:/ui/game/lookout_on -{6e6a7734-f98c-45cf-930f-61c51f193827} event:/ui/game/memorial_dream_loop -{037333ef-5916-4131-a76c-77b8d31c21cd} event:/ui/game/memorial_dream_text_in -{c3ddcdec-04ff-43b0-8103-ba0f0841c550} event:/ui/game/memorial_dream_text_loop -{78a27ccb-8b29-41e9-aa60-20e4d193f41d} event:/ui/game/memorial_dream_text_out -{27c68b11-4893-406e-8a68-2c7cf6a7ae0d} event:/ui/game/memorial_text_in -{12f81211-c72f-44f7-951c-4884bea99668} event:/ui/game/memorial_text_loop -{812275c5-1e5a-4d69-98e1-f7892c4bb440} event:/ui/game/memorial_text_out -{c6311b80-2ae7-4155-80f1-d3e2713efaa3} event:/ui/game/pause -{7858a8e8-adf9-40a6-8e14-e337a6979e53} event:/ui/game/textadvance_madeline -{b26824d6-39fe-4d09-9d83-ebdcbb29ba6b} event:/ui/game/textadvance_other -{38079a52-37cc-421f-a9d1-2b0f0222e779} event:/ui/game/textbox_madeline_in -{8a79d85e-2889-4b7f-8d52-b46381392b8b} event:/ui/game/textbox_madeline_out -{651eff96-de48-4c77-b069-bd718be76cff} event:/ui/game/textbox_other_in -{3b6c0f9a-9399-4af4-8443-d1bf6544869a} event:/ui/game/textbox_other_out -{ca812d95-eb8b-4ebd-a04b-e424704c17f2} event:/ui/game/tutorial_note_flip_back -{0c739c5d-67d7-4d95-861d-cc0d64892a1d} event:/ui/game/tutorial_note_flip_front -{6096b41c-7b56-4839-ad53-deb9e5693246} event:/ui/game/unpause -{59883fc3-7f79-422e-927d-1c1374123356} event:/ui/main/assist_button_info -{dd53a3ab-bc60-4da3-996d-5fc6b83483dc} event:/ui/main/assist_button_no -{7c65f68d-623c-42f1-94bd-4e2d59199d32} event:/ui/main/assist_button_yes -{3fd21d57-8fb5-4107-8d03-2048428bc2fc} event:/ui/main/assist_info_whistle -{1c2d9b78-9172-44db-a205-15b3cd91191e} event:/ui/main/bside_intro_text -{fe9c58fa-d60a-4644-b34d-c0c4ebac2486} event:/ui/main/button_back -{a3b25ad0-f493-4fd1-a31f-40b07f739225} event:/ui/main/button_climb -{b6aad0d5-cc07-46f4-ab3a-3b3692a57678} event:/ui/main/button_invalid -{8a93c5a5-538c-49f6-9d07-988839862ba1} event:/ui/main/button_lowkey -{cf18e899-f774-47e2-b72c-5252231fd47c} event:/ui/main/button_select -{aceb1345-a4e8-4bc5-a872-bb421573f59c} event:/ui/main/button_toggle_off -{dcef4547-0df6-4b2c-9a70-3aa537982264} event:/ui/main/button_toggle_on -{c0e02b41-0977-4813-a592-a2a98242b153} event:/ui/main/message_confirm -{c46d3981-3581-4b29-b3f8-d64ab072709e} event:/ui/main/postcard_ch1_in -{ffcabe42-ca8e-4460-95cb-14e528caebd7} event:/ui/main/postcard_ch1_out -{1210af0a-7e91-40af-a33c-d3fd2601ae54} event:/ui/main/postcard_ch2_in -{ddf70f5d-bd79-46da-ab2e-35d8795aab78} event:/ui/main/postcard_ch2_out -{55dfbf00-cc82-4781-b0e3-4f83a8a3fdb1} event:/ui/main/postcard_ch3_in -{468d3c98-0643-43eb-aedc-4cd3775a745c} event:/ui/main/postcard_ch3_out -{4cc4fcce-dbbc-4ffa-946d-8823ae5b1c56} event:/ui/main/postcard_ch4_in -{9920201a-f44f-464c-ad36-26934ed4b557} event:/ui/main/postcard_ch4_out -{90a158fb-009e-4cc1-9e4b-ba1ca47c05d9} event:/ui/main/postcard_ch5_in -{ab60fd25-5612-425c-bcdd-3e57a6c612bf} event:/ui/main/postcard_ch5_out -{590d1629-f340-4c4e-aee7-310f78d2c441} event:/ui/main/postcard_ch6_in -{ae32b875-534a-43de-a8bf-59d802dfb98b} event:/ui/main/postcard_ch6_out -{753b8bdc-2b0a-443a-ae37-94f321d71932} event:/ui/main/postcard_csides_in -{c74741a2-3b04-4ae8-9953-bc2bb485d643} event:/ui/main/postcard_csides_out -{cffad095-d6a7-4c91-b263-74bec658f1d8} event:/ui/main/rename_entry_accept -{9e499f93-8f88-4450-ae82-54887bb5e3ba} event:/ui/main/rename_entry_backspace -{a71ecb95-b025-4b35-8a2c-fe0cd6f68e95} event:/ui/main/rename_entry_char -{d389ba5d-76cf-4634-a763-d60d23c07cb1} event:/ui/main/rename_entry_rollover -{44e7e56e-3d7c-48e4-a1ae-a01de2685a81} event:/ui/main/rename_entry_space -{fb6ae8ab-4c41-4d90-8d2b-61a45e0a33e8} event:/ui/main/rollover_down -{987ab0da-0575-4f22-a0bc-7dd7a3a60769} event:/ui/main/rollover_up -{ef525bd4-4d18-479c-b651-56cd3699e478} event:/ui/main/savefile_begin -{c649a587-9eb6-4ba6-bafc-de133aeea2c5} event:/ui/main/savefile_delete -{ac7e055f-0a4d-4862-9032-88a8cd9e8322} event:/ui/main/savefile_rename_start -{83577bfc-85e1-444f-8c60-97ad3f3092a5} event:/ui/main/savefile_rollover_down -{b99d10cb-deb7-4b29-978b-912f929a5872} event:/ui/main/savefile_rollover_first -{15e11635-109d-417e-8424-2821f91f8020} event:/ui/main/savefile_rollover_up -{6d72de1a-04fe-4be5-826b-5576002c277f} event:/ui/main/title_firstinput -{4c808f23-d04c-49eb-9195-a9e324b57add} event:/ui/main/whoosh_large_in -{918e9353-b7fb-4d65-9bab-7e21facb3231} event:/ui/main/whoosh_large_out -{0e6af11e-69f3-4a92-b762-7421c912c3d6} event:/ui/main/whoosh_list_in -{efa0d333-7ee5-46ce-b457-b99997659215} event:/ui/main/whoosh_list_out -{03c233f3-c314-4560-8d48-a237b0b41c4a} event:/ui/main/whoosh_savefile_in -{38993101-6a7d-4344-bb63-69face96fd3a} event:/ui/main/whoosh_savefile_out -{02c8ac12-1389-44b9-8db8-1df0bd5b09b6} event:/ui/postgame/crystal_heart -{131dc336-4229-44d3-873f-e435fb501faf} event:/ui/postgame/death_appear -{26999d37-f12e-4b55-b82e-c26c02fcb288} event:/ui/postgame/death_count -{1ebd2b11-e6c4-4cc8-bb94-523470bda7b6} event:/ui/postgame/death_final -{44a2d3fc-e727-4ed4-8907-535d11f81e3e} event:/ui/postgame/goldberry_count -{426469e9-5e87-46e9-8b9d-bc2ae055c7b7} event:/ui/postgame/strawberry_count -{628514bb-19b3-4498-b365-4434988a1478} event:/ui/postgame/strawberry_total -{de75e71a-61d2-4a5c-94fe-96d0127fab02} event:/ui/postgame/strawberry_total_all -{ff2a6fb9-87b0-4de2-bd85-2d477f338d7c} event:/ui/postgame/unlock_bside -{704b695d-3513-449d-88eb-e29fc7622990} event:/ui/postgame/unlock_newchapter -{7fc9d8e3-08e2-43b8-9a9c-74f51be9a206} event:/ui/postgame/unlock_newchapter_icon -{6388ebe4-7ccd-46ad-b60d-7a85d7e5aceb} event:/ui/world_map/chapter/back -{4a191f4f-da31-43ec-bf30-f8ff8de7feed} event:/ui/world_map/chapter/checkpoint_back -{8c12045b-63ea-4faf-845c-49f6671595c2} event:/ui/world_map/chapter/checkpoint_photo_add -{40c88bb1-a035-4e54-90e1-fc879d1bf42b} event:/ui/world_map/chapter/checkpoint_photo_remove -{b5eab944-3bb1-4537-81f8-36cc0768539c} event:/ui/world_map/chapter/checkpoint_start -{08853c84-022c-4432-b99f-8894748ea056} event:/ui/world_map/chapter/level_select -{2bc690b2-830d-4fee-9960-5e9c158a07c1} event:/ui/world_map/chapter/pane_contract -{811a5ad1-89a4-4e2f-b6ee-20665c9ebde9} event:/ui/world_map/chapter/pane_expand -{d947ef25-1335-4e74-9675-7f91beb1df80} event:/ui/world_map/chapter/tab_roll_left -{6f553704-eb86-4407-91b5-c6e9714f398c} event:/ui/world_map/chapter/tab_roll_right -{f6ac20d0-ea9e-4cee-a4aa-a8b30bf3d745} event:/ui/world_map/icon/assist_skip -{7009f879-18fe-4b01-b78d-f4ef5bc66cb2} event:/ui/world_map/icon/flip_left -{c1f648bf-d9b1-455c-a3dd-b92bcce571c6} event:/ui/world_map/icon/flip_right -{687c2393-d73e-4247-a97b-4f2c2ccce388} event:/ui/world_map/icon/roll_left -{14563914-60ff-43cc-bc2e-d5766cc30964} event:/ui/world_map/icon/roll_right -{939f9872-0a8e-4cac-bf5e-12df3729da5f} event:/ui/world_map/icon/select -{0623a8c0-4454-4c71-9804-ecb030c4eb50} event:/ui/world_map/journal/back -{bbc37507-2859-4dd7-bbe5-7e6209214e03} event:/ui/world_map/journal/heart_grab -{85f626c3-7607-416c-b0ae-ddd0ed804755} event:/ui/world_map/journal/heart_release -{4ed2243f-db33-4095-97fd-800825c5a26d} event:/ui/world_map/journal/heart_roll -{d76b642b-3a69-4960-bfe3-2146b1654e5c} event:/ui/world_map/journal/heart_shift_down -{789aa61b-6d4a-4f93-92f0-bcc17c4c46c6} event:/ui/world_map/journal/heart_shift_up -{481d0322-28da-4d44-977a-cc140ff7c609} event:/ui/world_map/journal/page_cover_back -{2e990fd4-2c29-4527-8968-e47ff4006e81} event:/ui/world_map/journal/page_cover_forward -{b8f82543-3aed-4e88-8256-7b7b1bfafa2f} event:/ui/world_map/journal/page_main_back -{8da57015-c10e-4ce5-8e6b-82af4b7e73b9} event:/ui/world_map/journal/page_main_forward -{8a991cbf-dda9-4121-b960-d8bd790f5daa} event:/ui/world_map/journal/select -{309df40a-ed6b-46cc-b6a0-b1ddf5814ac8} event:/ui/world_map/whoosh/1000ms_back -{06eddf29-f6ea-43c4-a5a5-5e06c1c5bb61} event:/ui/world_map/whoosh/1000ms_forward -{25e6e3fa-ff02-440e-ac63-c83c3ad1efaf} event:/ui/world_map/whoosh/400ms_back -{c3640c55-8e89-4437-84ce-e0a3c1770575} event:/ui/world_map/whoosh/400ms_forward -{362e549d-25f0-4a5b-9c83-796e9ed389db} event:/ui/world_map/whoosh/600ms_back -{a5fff838-6687-4506-b03f-e5b16bb6ae84} event:/ui/world_map/whoosh/600ms_forward -{6f54f0d1-61d4-442e-8bf7-4dfbf6870c07} event:/ui/world_map/whoosh/700ms_back -{ca8ffe65-72eb-4fb3-9c3d-27fef47bc3d1} event:/ui/world_map/whoosh/700ms_forward -{2dca99b6-dcf5-40e6-8cd1-c72f97d364cd} event:/ui/world_map/whoosh/900ms_back -{21a98c43-8e79-4b8a-8963-a269735f3989} event:/ui/world_map/whoosh/900ms_forward -{ea595d6d-cb07-4897-81cb-4830bf5823cb} event:/!!!_README_FIRST -{c7aad72f-9796-42d3-980b-d093fd765716} bus:/ -{aac396d1-a63f-418a-810a-5d5a59fb2c43} bus:/gameplay_sfx -{2677ced7-94e4-44e2-9f5a-74aaeda5ab63} bus:/gameplay_sfx/ambience -{69a539a8-37d8-4e24-979b-291077c574a9} bus:/gameplay_sfx/ambience/00_prologue -{ca9f4472-47c9-4528-b4a7-0367eef8b734} bus:/gameplay_sfx/ambience/01_forsaken_city -{9e955e67-8d57-413c-a8ff-a52760f97355} bus:/gameplay_sfx/ambience/02_old_site -{24502313-f693-41bd-8fbb-b570e73b730d} bus:/gameplay_sfx/ambience/03_resort -{82beff30-ccff-40bf-9e07-5a1cd2978856} bus:/gameplay_sfx/ambience/03_resort/main -{8801307f-ec10-47f5-b1e6-bd4209b925a5} bus:/gameplay_sfx/ambience/03_resort/pico8_room -{537a0457-23d1-4dfa-84ee-a9a0a89091f0} bus:/gameplay_sfx/ambience/04_cliffside -{52d79f87-b8ae-49f8-9b8f-0623798fe5c0} bus:/gameplay_sfx/ambience/05_mirror_temple -{d0d5e0b6-9ffd-4f74-b865-f1f2be77d3b3} bus:/gameplay_sfx/ambience/06_reflection -{2d22a1f7-3d3f-443a-9f5c-b3af2c719942} bus:/gameplay_sfx/ambience/07_summit -{cefe7684-2923-468f-b00b-c5983937e33c} bus:/gameplay_sfx/ambience/09_core -{a98d0a0f-3a46-4300-b387-c39f0db5d47e} bus:/gameplay_sfx/ambience/10_farewell -{ddb5ed22-a8d2-4142-ba12-5bd032527511} bus:/gameplay_sfx/ambience/10_farewell/cafe_sign -{1394d383-dd5e-4772-abcd-5780e97a8ee3} bus:/gameplay_sfx/ambience/10_farewell/electricity -{fab12ece-124b-4bca-98d5-6ad4320118b0} bus:/gameplay_sfx/ambience/10_farewell/kevinpc -{992ed3aa-96d9-4f83-ac2f-3af5ac4a32db} bus:/gameplay_sfx/ambience/10_farewell/10_space_remembered -{71710caf-9227-413f-ac6a-261cf6e0cb5b} bus:/gameplay_sfx/ambience/shared_local -{8087939b-55de-4834-a7ec-2b62741a1099} bus:/gameplay_sfx/ambience/shared_local/campfire_loop -{520daa59-6d74-4eef-8d67-5c50d55bebd8} bus:/gameplay_sfx/ambience/worldmap -{db469001-f950-40b8-b411-2a1d327b3ce6} bus:/gameplay_sfx/berries -{bc43e82f-8373-4a3c-b676-5ef48f674f2e} bus:/gameplay_sfx/berries/1000s -{15f0abc3-40c1-4812-b526-303e80fe2175} bus:/gameplay_sfx/berries/2000s -{affd9e52-b032-49cb-acd6-4221f642f2e6} bus:/gameplay_sfx/berries/3000s -{ebd67fc6-0745-4b6e-afa8-2fa389df52e1} bus:/gameplay_sfx/berries/4000s -{2a8fc7b0-907d-46dc-919a-225a1258ebb8} bus:/gameplay_sfx/berries/5000s -{060010db-a9d6-41e0-b1fc-7af651b896b5} bus:/gameplay_sfx/berries/6000s -{d3031014-2f55-4036-904a-070ba37ba6df} bus:/gameplay_sfx/char -{9b8177d0-ae29-4cb1-93e6-c584b54b3804} bus:/gameplay_sfx/char/badeline -{91c7b130-9c0a-4cb2-bf01-26313faa39f9} bus:/gameplay_sfx/char/dialogue -{357a43e8-4c3d-4321-9116-1941d532be68} bus:/gameplay_sfx/char/dialogue/phone_static -{06222055-39e3-43b4-a9db-520a4ab66fbc} bus:/gameplay_sfx/char/dialogue/speech -{3828f323-8e89-4c34-b0fe-6c403cb6606b} bus:/gameplay_sfx/char/granny -{7bd1184c-7ddc-4175-bc87-a2b111b031a9} bus:/gameplay_sfx/char/madeline -{c4112d32-cfdc-4926-82a6-68afc89d352e} bus:/gameplay_sfx/char/oshiro -{99c3166e-4555-4140-b041-0a237a13fca7} bus:/gameplay_sfx/char/theo -{1ea7af9f-bcac-4a3e-8e2a-66cc1e04e9eb} bus:/gameplay_sfx/char/tutorial_ghost -{3fdf5514-61e2-4c69-9fa7-5cd0a627fc16} bus:/gameplay_sfx/classic -{1156896d-4cbe-4f11-ad91-44626753f14a} bus:/gameplay_sfx/classic/pico8_verb -{0dfbeb74-7020-4dfa-9cc8-fa85dd157aa1} bus:/gameplay_sfx/game -{6e4f0c21-c551-48a4-828e-b7ea3816b42d} bus:/gameplay_sfx/game/chapters -{55e7d588-47a3-441a-add3-f8a793212d75} bus:/gameplay_sfx/game/chapters/00_prologue -{5820993d-7e39-4b2a-a2e7-9cd902543ad1} bus:/gameplay_sfx/game/chapters/01_forsaken_city -{54bd4bc0-f511-416f-8629-a7abba53f460} bus:/gameplay_sfx/game/chapters/01_forsaken_city/birdbros_finish -{2ce9652c-a647-4e5d-b74a-b36ea60715d9} bus:/gameplay_sfx/game/chapters/01_forsaken_city/console -{30890542-6efc-4ea9-927e-3ca0c3b97d95} bus:/gameplay_sfx/game/chapters/02_old_site -{cd8aa47e-bd24-45e3-808c-a0d546f9a915} bus:/gameplay_sfx/game/chapters/03_resort -{bc44100e-d99c-401f-92a3-38ee8dd8e8ae} bus:/gameplay_sfx/game/chapters/03_resort/clutterswitch_presses -{33443f80-8d51-4756-b504-16cac32901ad} bus:/gameplay_sfx/game/chapters/03_resort/key_unlocks -{130cca3c-25f1-4e3f-a26a-d604b2a1bf58} bus:/gameplay_sfx/game/chapters/04_cliffside -{3420193e-c3db-4417-9232-4cf3ebb0d18c} bus:/gameplay_sfx/game/chapters/04_cliffside/gondola_halted -{b62be6ff-22a2-4c54-986c-0734a819f8f1} bus:/gameplay_sfx/game/chapters/04_cliffside/gondola_verb -{7eab4c86-6346-457f-a497-c4464651f92c} bus:/gameplay_sfx/game/chapters/05_mirror_temple -{60223204-af0c-42e2-a281-29ce5cad5edc} bus:/gameplay_sfx/game/chapters/05_mirror_temple/room_lightlevel -{913b4578-2371-417d-a413-90806a14a9c8} bus:/gameplay_sfx/game/chapters/06_reflection -{f2bd3dc2-e8ec-4ac6-b3b4-4810b47bb8d7} bus:/gameplay_sfx/game/chapters/07_summit -{327f796b-864b-45f9-9991-839720ec7108} bus:/gameplay_sfx/game/chapters/09_core -{2219f267-26c7-4a3c-bc90-148c7cb385c9} bus:/gameplay_sfx/game/chapters/10_farewell -{1290bf60-75df-4063-a36d-1f89c688a282} bus:/gameplay_sfx/game/chapters/10_farewell/bird_wingflaps -{05e910f2-4e6d-4f1d-a82d-014519b4667f} bus:/gameplay_sfx/game/chapters/10_farewell/cafe_computer_amb -{a40f9839-9900-436a-b1ab-566f86dfde57} bus:/gameplay_sfx/game/chapters/10_farewell/cafe_computer_sfx -{5e4eb968-5e09-4be0-bef0-76c2fc17b546} bus:/gameplay_sfx/game/chapters/10_farewell/cassette_room_cymbals -{c56ef299-cdcd-4782-a645-c8ba138ae994} bus:/gameplay_sfx/game/general -{6e3ad52b-f7d9-482d-8970-c157ebc1d716} bus:/gameplay_sfx/game/general/no_pause -{80173d30-4942-4abb-81e7-999ad33a9c18} bus:/gameplay_sfx/game/general/yes_pause -{34514772-f9f0-4a83-8fe7-2757c9206fe0} bus:/gameplay_sfx/game/general/yes_pause/birds -{dac56484-a3d4-47be-8c8e-38ecce68acc8} bus:/gameplay_sfx/game/general/yes_pause/crystalhearts -{8842a7ec-7a4c-432c-be20-64074839636d} bus:/gameplay_sfx/game/general/yes_pause/crystalhearts/fakeheart -{d001d4bf-94bd-4842-bd12-c8d07686ecf3} bus:/gameplay_sfx/game/general/yes_pause/secret_revealed -{ad993587-e7fc-427f-95b0-3a8204f772a7} bus:/gameplay_sfx/game/general/yes_pause/strawberry_pulse -{ab63552e-0d56-46cb-82f3-277df8c07c7b} bus:/gameplay_sfx/game/glitches -{cf6c699a-44d0-402c-ae02-e2e0a46cb94a} bus:/gameplay_sfx/golden_room_flavour -{eb29e2c4-d8fe-47ed-9d8a-490d0c656466} bus:/gameplay_sfx/granny_clouds_dialogue -{9bebdba3-d621-4355-9273-df3368b27182} bus:/gameplay_sfx/kevinpc_verb -{74728fec-f0ab-42ad-aeb9-03d95a119e42} bus:/gameplay_sfx/prologue_verb -{d457df36-9eb7-45c7-a624-6e74d6f10ec9} bus:/gameplay_sfx/sfx_in_space -{c66382b2-56ff-461e-8062-7f881794db85} bus:/music -{2cf5046e-8b34-4d1e-9bde-cb34c2c82607} bus:/music/stings -{035161f3-528e-4896-9238-683d2f3d60f1} bus:/music/tunes -{ae8c943a-7d3c-4e7f-a225-e98315a401e4} bus:/music/tunes/cassette -{2dce7e88-a742-4150-94ed-516b68f6c7d0} bus:/music/tunes/classic -{7429d822-1e68-4251-9907-6d4e8d14a82e} bus:/music/tunes/mains -{e4123d5a-7c10-4871-bbfb-72c4fd63f2ee} bus:/music/tunes/mains/dlc -{598cd199-b5f0-49f5-ba6b-3a2f5ef1de25} bus:/music/tunes/mains/dlc/heartgroove -{8ca23161-65dd-4d81-a97c-003d515b3062} bus:/music/tunes/mains/dlc/part01 -{b2c12b19-7dc1-4872-90da-653b17ebd258} bus:/music/tunes/mains/dlc/part02 -{b5df4708-d694-4a66-86a4-80f50b898f92} bus:/music/tunes/mains/lvl0 -{ef97f0b1-3bc4-4f64-aa42-84cd819b75be} bus:/music/tunes/mains/lvl1 -{24ffc423-525a-4e57-a96a-a392cf455198} bus:/music/tunes/mains/lvl2 -{0a5ea434-cec4-4b65-9f8c-733a13ac4e86} bus:/music/tunes/mains/lvl2/beginning -{7f93dae5-d646-46a5-ae9d-561b4ea5b4d8} bus:/music/tunes/mains/lvl2/beginning_verb -{dd297a42-ca69-42b2-8a75-81bc2c076773} bus:/music/tunes/mains/lvl3 -{281fbfae-927e-4dd8-a3b7-90d51b0fcd03} bus:/music/tunes/mains/lvl4 -{2d452462-5099-4832-9c7b-6244168969f8} bus:/music/tunes/mains/lvl5 -{8bd3048f-79b5-47bd-b697-ded53096b69a} bus:/music/tunes/mains/lvl5/eye_mains -{ea09e719-2d63-4cfa-90b1-7bc68aa0fb89} bus:/music/tunes/mains/lvl5/eye_pulse -{d10b0171-eaf7-4c53-9d55-d05d1bc34e03} bus:/music/tunes/mains/lvl5/torch_arp -{898234ab-6340-4783-9dda-de3e6a4b1c58} bus:/music/tunes/mains/lvl6 -{b3c415b6-811f-43cf-a1f5-4f979596f23f} bus:/music/tunes/mains/lvl7 -{6a55c92f-3eba-4f8c-b8cf-d70c7e200cb4} bus:/music/tunes/mains/lvl8 -{e4b86f10-cdb3-4394-8aba-4aefd2628607} bus:/music/tunes/mains/lvl9 -{dc7b136f-f266-48a1-a0ce-34938c4da9be} bus:/music/tunes/mains/layer_verbcontrol -{f81bdbae-62d5-467b-8f64-608c3c625282} bus:/music/tunes/remix -{af0b4601-5e4b-4580-afb8-ce641dcea598} bus:/music/tunes/remix/02_old_site -{33f0d1af-cd28-4272-a966-89189763d3c1} bus:/music/tunes/side_rooms -{fad3f5c6-a940-4180-8133-53243e1a6eb3} bus:/music/tunes/side_rooms/golden_room -{33116628-46c3-4bfd-9ca6-a4a152fb9ef2} bus:/music/tunes/side_rooms/ppt_content -{1ff13d10-7ecd-46fd-9140-2e67c33c217e} bus:/music/tunes/cassette_previews -{8abc7179-c5ff-48ff-85fd-73ba46b14ed3} bus:/music/tunes/pico8_mus_verb -{59256484-66d5-4ec4-9639-208cf82dfcbf} bus:/ui_sfx -{b8b28cf3-de11-4a37-ace3-02999b659e63} bus:/ui_sfx/game -{e8a05ec7-a764-4f64-aac4-4a7f3ba3e4b9} bus:/ui_sfx/rename_piano -{724d852b-c1ab-4aa4-b2b1-c13d3b299928} bus:/ui_sfx/worldmap_whoosh -{fda3f2a1-d68f-44e7-b701-10e208d3e7dc} bus:/ui_sfx/rename_verb -{45e94b3e-40aa-4719-a33e-8fdd3336bd63} bus:/Reverb -{de538080-4e35-4fae-ba40-6635b9a31bae} bus:/Reverb_Dash_Assist -{64ceaf84-8717-4592-80ab-6f3d75b5a276} vca:/gameplay_sfx -{277f4614-fa32-411a-addd-618b460440f8} vca:/music -{8d7cf364-00af-4b77-8298-c64b484c5ea4} vca:/ui_sfx -{35a38d70-5255-4def-a24c-38d4b432bc7b} snapshot:/music_all_mute -{5b5b6aa0-ca7b-4149-acc6-8e39d8e40cf9} snapshot:/music_mains_mute -{e45a0ce7-66cd-46e7-87bd-f403fd07c6f4} snapshot:/pause_menu -{bce88c97-680c-409d-8ebe-a1133d014d9b} snapshot:/music_secretrevealed -{c2361c39-b90d-4bc4-b168-c4134201a468} snapshot:/dialogue_in_progress -{69755b6c-ec19-4fd8-8db3-3cd08aaf87a1} snapshot:/game_03_clutterswitch_moment -{b3536257-a5f6-4424-92c2-c1b2dda22d72} snapshot:/mus_lvl1_verbtransition -{4c5628e7-adc7-4f0e-a060-82a919c16948} snapshot:/game_00_prologue_amb_down -{34a72406-5330-4cd8-a826-a00d559a0b2e} snapshot:/game_00_prologue_amb_off -{36956a3c-c731-43e9-903e-598f3ec922a0} snapshot:/underwater -{1ab40160-5839-4d5b-8b1d-e0a6bd83347d} snapshot:/game_02_dreammemorial_fade -{8a7f5b1b-7f61-4772-bd14-7de5aafbd44a} snapshot:/game_00_verb -{481f2201-8ce0-43b2-9f3a-bc51cb2b1de2} snapshot:/game_04_gondolafeather_main -{259cebd0-0338-4527-9b41-af852a325cd1} snapshot:/game_04_gondolafeather_verb -{05fa7a5e-2a5c-4750-944c-ed3ea46c2e64} snapshot:/char_granny_laughs_down -{a946aeab-8328-4a84-a58c-4e76700c32a8} snapshot:/env_worldmap_down -{386f6f68-a0da-4c9c-a51a-5aa8d8deea46} snapshot:/game_05_torch_arp -{93cf42c4-26a2-4f75-bd42-8ad29455d171} snapshot:/boss_pitch_sfx -{19948c40-9c7c-4b8a-8dc8-66824fd99eb9} snapshot:/music_reflection_secret -{51370088-3349-4bd9-8ef8-21e646482678} snapshot:/env_allamb_down -{3b704b9e-58b1-4522-8936-0f74cfca567e} snapshot:/game_03_pico8room -{da7d5bb5-c1ec-43df-a92c-a2986bcb978f} snapshot:/game_05_eyedeath -{6b16607b-8e2f-4b79-a1e5-339e589e6919} snapshot:/game_05_mus_pulse_controller -{d8e12b32-0f5a-4897-8bde-7be2012a0924} snapshot:/game_03_oshirofreakout -{22902dd7-41fe-4617-9412-e928455e3d4b} snapshot:/game_gen_crystalheart -{f2738ff2-989f-40bc-8421-a976ba8e49e2} snapshot:/game_05_eyedistance -{c6fa6b4e-5c95-4f3d-8616-385bc8e6f703} snapshot:/game_01_birdbros_finish -{061649d4-7a37-483d-bcd3-70793d8fcdb2} snapshot:/mus_cassette_amb_down -{1829469a-4c2d-4f04-a2b6-8a528987e9a9} snapshot:/game_10_in_space -{df897601-d549-4868-85a2-51ceca90b5df} snapshot:/game_10_final_boost -{859952f9-2a6f-47b2-855b-7fdc9678c9f4} snapshot:/game_10_cafe_computer_active -{2ef4067b-f330-40b8-ab59-15280643ba2d} snapshot:/game_10_glitch_active -{7ea9a03b-ea60-4a15-be33-26a7a9423b63} snapshot:/game_10_inside_cafe -{658d9ddb-30a9-4a55-bd62-d730d793ec83} snapshot:/game_10_amb_voidspiral_active -{9ae549ff-5ba1-4ec1-aec8-ee17190a2d08} snapshot:/game_10_granny_clouds_dialogue -{45db5a63-5d6d-4c3c-9c0c-d9924542b762} snapshot:/game_10_golden_room_flavour -{5955bc4d-e3b4-4663-a676-bdaf632c0d78} snapshot:/game_10_bird_wings_silenced -{97b29aac-da8d-4a14-9aa1-8fbdc80d4672} snapshot:/game_gen_large_berry_get -{f14989bf-0210-48f2-88ab-45fb0c662318} snapshot:/game_10_goldenroom_death_fix -{3a534bf9-d4cd-43ce-b2f1-a63b24452b46} snapshot:/game_10_kevinpc_verbtransition -{45a77b82-31db-4b49-84c5-c93bff634316} snapshot:/game_10_kevinpc_sendcontrol -{b0d8db78-996f-45db-ba9e-85f1dcb6b3fd} snapshot:/game_10_BIR_music_part02 -{973c602d-8504-457b-853f-43107629197b} snapshot:/game_10_BIR_sfx -{1125cef8-d475-441c-b76b-fe4bdb43aa42} snapshot:/game_10_BIR_music_part01 -{03db7333-40ef-44fe-83cb-7e650abdb49c} snapshot:/game_gen_dash_assist_active -{df75cc48-86f4-4adf-91d7-d50d708f5c75} snapshot:/assist_game_speed/assist_speed_90 -{feedddf6-0cfd-4e09-bd66-d1259261651e} snapshot:/assist_game_speed/assist_speed_80 -{4d899a40-a5f6-4ea0-ae36-1f5b15238747} snapshot:/assist_game_speed/assist_speed_70 -{ab9f20ac-e1fa-4ed7-9d7c-19ad254a2d28} snapshot:/assist_game_speed/assist_speed_60 -{434bc162-0111-4667-a5bd-a5327b21e422} snapshot:/assist_game_speed/assist_speed_50 -{401f67f5-af7d-4b5d-a7fd-e7d30583a9a8} snapshot:/variant_speed/variant_speed_120 -{3637f3f7-d1d0-495f-beea-8e13fb5cc4a8} snapshot:/variant_speed/variant_speed_140 -{a7e8f688-585b-4660-a43e-60875c42921a} snapshot:/variant_speed/variant_speed_160 -{d7f19e36-26eb-4630-a934-9f2f1924e3ee} snapshot:/berry_cooperation/1000s_down -{85104a93-1b84-443c-b44b-034b2aaa643b} snapshot:/berry_cooperation/2000s_down -{641d4a72-8e6e-41a8-8f3d-b28219bd4cd7} snapshot:/berry_cooperation/3000s_down -{365efe2d-29e7-4d45-988e-451406863f9a} snapshot:/berry_cooperation/4000s_down -{1aa61ee8-68fc-4c62-9a54-35743044bafe} snapshot:/berry_cooperation/5000s_down -{5044f438-f2ba-41ac-8609-855b8133e867} bank:/avali_skinsounds -{a327f717-e8b5-4fb0-b4dd-84bd8a585fe0} bank:/dlc_music -{e85b3c9e-428d-41b7-82c0-37814f3cbf15} bank:/dlc_sfx -{7916fdbf-1253-451d-a369-6dfd34341e4e} bank:/music -{98263171-3ea2-482b-abb7-9af01e4c002a} bank:/sfx -{f0efde81-92ec-4f1a-8b48-815f4d8a3255} bank:/ui -{f42d1384-f9ea-4ba4-9e08-a4d067c55b3b} bank:/Master Bank +{ad25a031-880b-4f88-ac12-82d6c52fbdea} event:/char/badeline/appear +{7a71fc61-b688-4d82-a2b7-781c2434e942} event:/char/badeline/booster_begin +{b2ee45d8-e1b0-43f1-baaa-f6e77d37ddb5} event:/char/badeline/booster_final +{207a212a-2beb-4022-a8da-11ac987d3097} event:/char/badeline/booster_reappear +{7e3c6b4e-e41a-4e9a-9d24-22737c66593b} event:/char/badeline/booster_relocate +{2592d638-f3c5-4f6f-81e0-888a04affa40} event:/char/badeline/booster_throw +{bbe7d0c8-45f9-4671-b49e-8e38e357bb81} event:/char/badeline/boss_bullet +{898fc1ea-250b-4d03-8f37-c0c35799a915} event:/char/badeline/boss_hug +{b4002010-ff11-4311-87c7-f87028220f78} event:/char/badeline/boss_idle_air +{e7a2ddd6-091a-44ab-aac7-e57bd13c009c} event:/char/badeline/boss_laser_charge +{58b5d825-ebcf-457b-b493-9be82640b9eb} event:/char/badeline/boss_laser_fire +{646b0a01-2101-424f-804b-18842f72a62d} event:/char/badeline/boss_prefight_getup +{33df1e8a-7605-4b2d-8235-ee78fbaa8c55} event:/char/badeline/climb_ledge +{b54ae334-409b-4bba-82e2-62753f764f90} event:/char/badeline/dash_red_left +{50356124-434a-4dca-aeb1-52462846fb8a} event:/char/badeline/dash_red_right +{16b40879-0a79-4e42-8c91-fe419a8e186c} event:/char/badeline/disappear +{937c3941-eeb8-4f1f-8451-765b33545202} event:/char/badeline/dreamblock_enter +{3b142d62-975a-41a3-9b59-8e5ba4f6cbdb} event:/char/badeline/dreamblock_exit +{697102c2-9978-42b7-a3b0-0c2b99c9032e} event:/char/badeline/dreamblock_travel +{d879f9dd-98d0-479e-9f08-a1848f4a0f5c} event:/char/badeline/duck +{ff6442f1-66c2-4dba-8d57-038dda8fd296} event:/char/badeline/footstep +{8824489f-1d0b-4670-beb2-08d67cfd3c3b} event:/char/badeline/grab +{c122d904-fb7a-4bfe-99a1-f5a4f8701d17} event:/char/badeline/grab_letgo +{c2cd2f17-045c-4312-b7f6-8e7b750577c0} event:/char/badeline/handhold +{95ce0255-9a27-47b4-a902-fb25c0f2a2e2} event:/char/badeline/jump +{64424649-d82c-4efc-90a9-f54e8411d9b7} event:/char/badeline/jump_assisted +{58e689a2-1717-434f-9fa7-dffcd72ab27e} event:/char/badeline/jump_climb_left +{d9a77828-0390-434a-8cbc-e3df56a40cc4} event:/char/badeline/jump_climb_right +{6faecb61-f82e-400e-9785-4d407a82c838} event:/char/badeline/jump_dreamblock +{bc8a6051-399a-4f76-a865-02b53c5fe8ab} event:/char/badeline/jump_special +{73a21bdf-62c2-46d8-ae04-68e6c0c26b7f} event:/char/badeline/jump_super +{7ca46073-e6b8-4f74-b9a8-ac54a8966c5b} event:/char/badeline/jump_superslide +{2336b17f-5769-4e2e-a636-aee1ddef9086} event:/char/badeline/jump_superwall +{ab3be2a7-36d0-43cb-990a-2c49ba5d5c60} event:/char/badeline/jump_wall_left +{3e5b18db-8f99-4ab7-ad08-8529fd257b6b} event:/char/badeline/jump_wall_right +{8f924592-8b14-40d6-81af-d42fab0b6da1} event:/char/badeline/landing +{25294859-6bfd-434e-9528-8433245fe3b5} event:/char/badeline/level_entry +{38557af4-adf9-4328-9f2c-167b12ff9f8e} event:/char/badeline/maddy_join +{450fb5b3-e9e3-45d8-9f34-ba05e292958f} event:/char/badeline/maddy_split +{1a114663-4b93-4aab-ba8c-ca8793f2831e} event:/char/badeline/stand +{97d0d2e4-92f5-48cf-948f-4fc85b0a0791} event:/char/badeline/temple_move_chats +{a5ceb7fd-8a03-4c79-8d4f-81ad37400f43} event:/char/badeline/temple_move_first +{a2443155-5af1-4e19-80d5-a81a3d9cf06d} event:/char/badeline/wallslide +{9fdf9618-b47b-4427-bb22-4642a42296b9} event:/char/dialogue/sfx_support/phone_static_ex +{0793a2c4-4c0b-41de-8f60-cbaed147961b} event:/char/dialogue/sfx_support/phone_static_mom +{e27b3ab9-d6c9-4952-92bf-e652b98a9ed5} event:/char/dialogue/!!!_README +{aba9f19a-b015-4dfa-ab6a-c1c34385e6e9} event:/char/dialogue/badeline +{0d2b6a74-2224-4d42-b4c1-275e02188e35} event:/char/dialogue/ex +{93dc35c9-2d7f-428b-a991-10a75e908831} event:/char/dialogue/granny +{6db7fffa-a9ef-4b37-8c16-6857785af731} event:/char/dialogue/madeline +{eb633670-e129-48ad-82cc-bc3b09203d6f} event:/char/dialogue/madeline_mirror +{9a3d146f-f39b-41f5-a269-890782e44fcc} event:/char/dialogue/mom +{94086ab9-c160-4468-b8f5-20d8c0df94f3} event:/char/dialogue/oshiro +{81a8f569-0320-45e8-a85d-f05fc73ab18a} event:/char/dialogue/secret_character +{e15162c0-8d07-4a4a-86b2-31a4143ef96c} event:/char/dialogue/theo +{06f37413-874a-4d3a-b325-e43d5835bded} event:/char/dialogue/theo_mirror +{b778a405-ac7f-440e-8754-aef888736b87} event:/char/dialogue/theo_webcam +{baf0c37e-6b25-4b7f-8bcf-653b7ffbb4a5} event:/char/granny/cane_tap +{e6fcb1bd-e802-4b86-ba6a-4d5b4f9d1d8e} event:/char/granny/laugh_firstphrase +{7d86252d-c88c-4317-865e-430792def883} event:/char/granny/laugh_oneha +{ae79fcef-d9b4-44c5-91e5-e0348229e9d5} event:/char/madeline/Vanilla Backup/death +{421fe5d0-9d4b-40a5-ab8e-23b1ec4bf1b3} event:/char/madeline/Vanilla Backup/idle_crackknuckles +{ae4aea88-f499-49e8-9536-78c4bad21743} event:/char/madeline/Vanilla Backup/idle_sneeze +{65659bc0-3d2b-429c-9bdc-42e7a2d29a94} event:/char/madeline/Vanilla Backup/predeath +{75ab6aef-3f69-4776-b60f-5700451cc9a2} event:/char/madeline/backpack_drop +{99373af6-beba-488d-b516-ff48fd95e8b8} event:/char/madeline/campfire_sit +{9435a742-7595-48a4-b2af-2757c4f927da} event:/char/madeline/campfire_stand +{9457c17c-688b-4701-b2ae-b89d821d54f7} event:/char/madeline/climb_ledge +{82f8448b-9452-4b12-838c-dcd81098476e} event:/char/madeline/core_hair_charged +{315ac151-5eb6-4e6b-b1b7-0531f3572c44} event:/char/madeline/crystaltheo_lift +{eb1249df-06cf-434d-991b-0b73464eef06} event:/char/madeline/crystaltheo_throw +{cb220baa-d2cb-4a87-9907-a6595dba6735} event:/char/madeline/dash_pink_left +{8ec31009-771f-4473-a3fc-45b209d6aa87} event:/char/madeline/dash_pink_right +{b9d3a7c5-3d49-4b8a-aad1-fcfaf87293af} event:/char/madeline/dash_red_left +{066cd550-a394-4bed-a4cf-c71905a160ed} event:/char/madeline/dash_red_right +{2de81082-0768-430b-b7fb-728c94bd1dcb} event:/char/madeline/death +{06d7cbaf-9d9e-4f67-8adb-37a599dd4c37} event:/char/madeline/dreamblock_enter +{0a9527ad-360b-4cd2-b585-92b066720b34} event:/char/madeline/dreamblock_exit +{47bc2416-fd95-4a75-8952-7c43757e0e66} event:/char/madeline/dreamblock_travel +{0d6cb459-91af-4842-8d2b-0f0e103313ef} event:/char/madeline/duck +{73ada323-e77f-43f7-b0df-a8facdef03b7} event:/char/madeline/footstep +{8aa6ab7b-3104-4a06-8e7e-b1141ac0d23d} event:/char/madeline/grab +{0e0bb484-9840-47f8-a697-773134e4bedb} event:/char/madeline/grab_letgo +{7f8c23d1-bd9d-4a10-b8af-fd4a5cb12244} event:/char/madeline/handhold +{92a3c07d-326f-45b0-9001-4ed3a7c178a2} event:/char/madeline/idle_crackknuckles +{852ea39f-c182-4385-9aa3-1d95cb02040b} event:/char/madeline/idle_scratch +{8c51bec8-fb5a-4f50-ac30-9ad4c2c49ba2} event:/char/madeline/idle_sneeze +{eeede5f5-3691-4cd9-8b2c-91e02d3d41ed} event:/char/madeline/jump +{73ba5692-b6bd-4c78-a392-e41fa7425ead} event:/char/madeline/jump_assisted +{faac7cb1-bc6a-4e0d-8dc5-97f3c94363e6} event:/char/madeline/jump_climb_left +{1a77f0d4-81d8-4f97-bdf1-8e1e39cc69ef} event:/char/madeline/jump_climb_right +{5e5a1f06-5cf9-4daf-a7ed-3b36554dd44b} event:/char/madeline/jump_dreamblock +{25759b99-ad2a-4483-bb7e-0c4eac782c53} event:/char/madeline/jump_special +{4fc69f31-fc0f-42d3-af4c-20424c74d6a4} event:/char/madeline/jump_super +{8f5b7d80-8ca1-4415-942c-f1338b8a79f1} event:/char/madeline/jump_superslide +{67bb774a-41bd-4375-a4e7-53031c7f75cd} event:/char/madeline/jump_superwall +{f63c2b0a-f708-44f5-af13-6bba7e3af2cb} event:/char/madeline/jump_wall_left +{3b128250-55a7-4a1b-8d8e-edf325d80192} event:/char/madeline/jump_wall_right +{a7289b79-f525-4762-943e-98cf5c94151a} event:/char/madeline/landing +{60e29264-3711-498c-a7ed-c58ecefb5543} event:/char/madeline/mirrortemple_big_landing +{33880264-68a6-4863-8a03-e4ea7c5a72df} event:/char/madeline/predeath +{14d582cb-0c50-4837-bcc5-e7e03ff23687} event:/char/madeline/revive +{73265a98-2cb3-4d98-9643-cf592c2b9131} event:/char/madeline/stand +{7d18d617-475b-4d12-ad45-885c619e7540} event:/char/madeline/summit_areastart +{72eb7f2d-c3e9-41b2-afc0-b4cfee087389} event:/char/madeline/summit_flytonext +{f5babe6c-1ec1-4d4e-8934-a1809b5e26cb} event:/char/madeline/summit_sit +{dae064c8-86f9-458b-83af-fbd8b699a3b9} event:/char/madeline/theo_collapse +{cad411d1-889d-4fb6-85e7-210db19d1e11} event:/char/madeline/wallslide +{cab0df89-b0d1-439c-8ac7-37db9d43e3a1} event:/char/madeline/water_dash_gen +{fb5d35c5-47c8-439d-8d52-ec6daf91887b} event:/char/madeline/water_dash_in +{5ce79651-4adc-4592-b018-38aa212d6ca6} event:/char/madeline/water_dash_out +{4016ea56-842c-4649-99c4-7057db18c835} event:/char/madeline/water_in +{5cf06f89-cf18-4dfa-bc69-5e4b58095cf3} event:/char/madeline/water_move_general +{7d656ffa-050f-4cab-bbc9-03863fa14e4f} event:/char/madeline/water_move_shallow +{3b90c629-7dcf-467b-a438-75e3287c8ae5} event:/char/madeline/water_out +{e1fec409-ace5-4006-8b7c-ccf9fbf1ac59} event:/char/oshiro/boss_charge +{05362357-0f1e-4f89-9d04-8a2778451a6c} event:/char/oshiro/boss_enter_screen +{f5fc7368-4f02-4479-a805-0efdff3633f6} event:/char/oshiro/boss_precharge +{28afe636-0afc-4a73-957d-fa53f6295250} event:/char/oshiro/boss_reform +{53cd822c-b7e1-4d50-8574-4fe404457747} event:/char/oshiro/boss_slam_final +{83376c6a-a014-418e-9e21-dbc48df90069} event:/char/oshiro/boss_slam_first +{945afadd-8b82-439d-a3d5-c70d53d8df96} event:/char/oshiro/boss_transform_begin +{6be863d8-6204-4f23-9f06-f90d6d7a8092} event:/char/oshiro/boss_transform_burst +{6dd647fe-eefd-43d7-8a35-5a614678dd12} event:/char/oshiro/chat_collapse +{2985ee63-eec3-4263-bf6d-71e332bfa805} event:/char/oshiro/chat_get_up +{c4fc63e7-6814-466a-9077-c90a82fc710e} event:/char/oshiro/chat_turn_left +{a5b71a3a-2b11-43d7-a6dc-c2fc90d9d07e} event:/char/oshiro/chat_turn_right +{7714e509-b855-47b0-b57b-3b7d803c5652} event:/char/oshiro/move_01_0xa_exit +{4f200dab-f854-4ed1-8e93-b736211791d5} event:/char/oshiro/move_02_03a_exit +{ecd941b2-7246-49f9-ad46-dd6eee981bd5} event:/char/oshiro/move_03_08a_exit +{ce338380-a29d-461a-b661-267fa7acd32c} event:/char/oshiro/move_04_pace_left +{e2f5eac6-9d40-4bc5-bcaf-d14b6269354b} event:/char/oshiro/move_04_pace_right +{b6e13523-090a-44eb-aa4f-1a3c270c507f} event:/char/oshiro/move_05_09b_exit +{d63e2c8f-499c-4edc-a892-041ae47d5b96} event:/char/oshiro/move_06_04d_exit +{96c70110-4204-4456-b3ed-baf02ba4139a} event:/char/oshiro/move_07_roof00_enter +{dfc82939-d51a-4454-aedf-1b3c6d4cf986} event:/char/oshiro/move_08_roof07_exit +{56221566-2fd7-4b1a-99d7-6af227ab8398} event:/char/theo/phone_taps_loop +{f37cd8d3-4249-47ca-8243-28ae26cf7c5c} event:/char/theo/resort_ceilingvent_hey +{5220fbf8-61c9-4a15-8490-8571a7cfa54f} event:/char/theo/resort_ceilingvent_popoff +{d3ade5b6-5418-4d18-8ac3-b31f1f5a9581} event:/char/theo/resort_ceilingvent_seeya +{6fb99d9c-74ca-412d-b3b0-247b39a382df} event:/char/theo/resort_ceilingvent_shake +{30c6c5c3-bf5d-4cbe-b3ea-3ed4c1e2396e} event:/char/theo/resort_crawl +{757f9c8a-033b-4c8d-82d8-f415972efc8d} event:/char/theo/resort_standtocrawl +{56e5cd34-78ba-45b2-96f3-83fc95c7c8df} event:/char/theo/resort_vent_grab +{aeef3032-ca85-4ac7-9866-c04c15bb8ef3} event:/char/theo/resort_vent_rip +{3d4ee73d-0198-43a2-b1d4-7b98cb16944b} event:/char/theo/resort_vent_tug +{4b18a52d-d2ba-4f5c-9880-9b49a0179e72} event:/char/theo/resort_vent_tumble +{3e111712-ffe7-404b-8dfe-08b630014170} event:/char/theo/yolo_fist +{1220c5e3-9e68-4e3f-9731-37f8efeca4d5} event:/classic/!!!_README +{96db8ec4-31c6-45aa-ae05-0b73cd02a1ff} event:/classic/pico8_boot +{79038cb9-407b-4d35-892a-1ec71396a682} event:/classic/pico8_mus_00 +{b7c9c3a9-c1bc-4a77-961e-b306f5b9c140} event:/classic/pico8_mus_01 +{feac844d-0797-404b-a390-3ab8257a187c} event:/classic/pico8_mus_02 +{7186f56e-2df7-42eb-9375-3b272fe60ce1} event:/classic/pico8_mus_03 +{aaa40caf-ae3a-4f7e-a2b3-92c2ebe55df6} event:/classic/sfx0 +{3e4da5d7-22bc-4a2a-975f-962d0b13ea30} event:/classic/sfx1 +{6452fdae-f5bc-405a-95b0-ab1aeef0c504} event:/classic/sfx13 +{a9262674-7b9d-4aea-8a57-84c2f26049b6} event:/classic/sfx14 +{818fc44f-268e-48ff-8876-b8a64842b5ed} event:/classic/sfx15 +{4d5e60c8-4be0-42c1-9f24-e5ebecd840eb} event:/classic/sfx16 +{e52366bb-874d-4e52-97b0-5f84602ce96d} event:/classic/sfx2 +{5956eda7-31c9-47f6-8b62-f8b488c879a5} event:/classic/sfx23 +{21c14b80-cb2e-4f2e-8d1e-b8f3941b162c} event:/classic/sfx3 +{14db4278-02a9-4513-9361-0e53d9da8811} event:/classic/sfx35 +{4e545f69-79f2-4d28-950c-10cbb43e77e6} event:/classic/sfx37 +{bbabbdbc-da20-42af-9c0d-0daa8299cc7f} event:/classic/sfx38 +{09c2f490-6fc5-4d52-95e1-e873ff360487} event:/classic/sfx4 +{4e2a357d-8a57-4ea6-8df5-b9411495dfd6} event:/classic/sfx5 +{606bd67d-d92a-46f0-a2e1-0a95ea23bfef} event:/classic/sfx51 +{6ccb266f-2044-41dc-88bd-55d20f34627a} event:/classic/sfx54 +{55989b60-f060-4a18-87cc-0d1ad5428801} event:/classic/sfx55 +{c2f12510-a65f-4fe6-b8c2-d6dafd0bd33d} event:/classic/sfx6 +{52df708d-a28a-46e8-bf24-a7516b8d6960} event:/classic/sfx61 +{e489d78b-10c5-47e7-9ad5-bee84ab5df55} event:/classic/sfx62 +{99e37b23-955b-4b57-8297-e5c24a7618ee} event:/classic/sfx7 +{a0206dfc-61d3-447f-ac45-dbcaeeb2babf} event:/classic/sfx8 +{94844611-3d78-4843-bef4-5a7fb9cd3930} event:/classic/sfx9 +{0fa79a65-c103-4f72-84d6-7a22c9b2f43c} event:/env/amb/00_prologue +{04cc4be2-4acf-474a-a897-8709563af4c3} event:/env/amb/01_main +{f34c1fdf-5470-453f-afc5-c3ef0f0f65cb} event:/env/amb/02_awake +{409883b0-271d-4b20-9f0b-2d24e2f3c328} event:/env/amb/02_dream +{c37ce843-6664-44ab-9d07-8acdbc9efed8} event:/env/amb/03_exterior +{fee4e52e-5f96-4739-b609-07ccd6c60610} event:/env/amb/03_interior +{db641550-ff4f-430a-9dad-9e038e382ae5} event:/env/amb/03_pico8_closeup +{d0ea5750-b681-4bcd-a795-8a1fa908ac2e} event:/env/amb/04_main +{edc1c4bb-137f-4551-92f0-220b11118e0d} event:/env/amb/05_interior_dark +{36b91db4-ad22-4c8d-aa83-7964f95398ab} event:/env/amb/05_interior_main +{fb77cba9-f373-4f6b-9057-2fa3fffdd657} event:/env/amb/05_mirror_sequence +{8a921fb6-6b6c-4f2d-bd8b-8d7a319a44fc} event:/env/amb/06_lake +{b09159fb-d5a0-4daa-ab5f-0f1898bc3335} event:/env/amb/06_main +{2e69b6a7-2ab5-4a35-a307-27a52fdf7458} event:/env/amb/09_main +{a64aedd6-1f18-4f49-a41d-9a9f5ebbe616} event:/env/amb/worldmap +{c15f9104-cc0f-4d4f-b085-fb0e40d43924} event:/env/local/02_old_site/phone_lamp +{f271db26-d18b-488c-8a6f-d5f2b98039fa} event:/env/local/03_resort/broken_window_large +{3052bb3d-8343-4d09-bf59-d525735f4407} event:/env/local/03_resort/broken_window_small +{6217f4fb-20f3-4fc2-9ab5-45297d919bc5} event:/env/local/03_resort/pico8_machine +{9ccbd053-b248-430d-9e0b-d7d294b97e39} event:/env/local/06_reflection/boss_idle_ground +{ce0c8cf0-9aa6-4b7a-a66a-cd8509e5f674} event:/env/local/07_summit/flag_flap +{e9d25928-9e16-43ac-9e79-f099290d643c} event:/env/local/09_core/conveyor_idle +{57b3a09b-dbc8-435e-8d24-6d1f913ac85c} event:/env/local/09_core/fireballs_idle +{7fc7eafb-26b7-4b84-bfb4-1d779c22a066} event:/env/local/09_core/lavagate_idle +{7cc20e5f-81e5-4166-acc6-704dc13f46f3} event:/env/local/campfire_loop +{a780517b-19c9-47d4-88ab-091fb03f1f9e} event:/env/local/campfire_start +{cc54fdc5-ac1a-4df6-8180-03295b15aca1} event:/env/local/waterfall_big_in +{1a51e71c-fbf7-4f0c-b659-622ada05f17c} event:/env/local/waterfall_big_main +{76e57bb1-14a6-44cc-ae96-de5ae20e81fd} event:/env/local/waterfall_small_in_deep +{9bbc655b-22ce-4c82-897b-cfe0fad986d5} event:/env/local/waterfall_small_in_shallow +{ccef0473-c1e5-4dd0-8c94-fc3fe5fc95bb} event:/env/local/waterfall_small_main +{6a3f7aaf-bea3-4ac6-a919-d4b6eef81ae7} event:/env/state/underwater +{3f2d088f-f438-42c1-b9e9-6e6a44203865} event:/game/00_prologue/bridge_rumble_loop +{fb47d655-bc4f-4361-b4a2-d19e30518d24} event:/game/00_prologue/bridge_support_break +{319ecd12-335d-44ff-94ca-07fe499d4a87} event:/game/00_prologue/car_down +{45cba62a-4146-4fdb-8b39-643e9ab1782c} event:/game/00_prologue/car_up +{0c8ca90b-c14e-41ca-8233-ec0f74a6aab5} event:/game/00_prologue/fallblock_first_impact +{388260ad-8996-4220-a041-4165704072d4} event:/game/00_prologue/fallblock_first_shake +{477f6667-1b22-4276-a0cf-1370ae099d9e} event:/game/00_prologue/intro_vignette +{b9976863-f695-4730-b534-9299bf5f58b1} event:/game/01_forsaken_city/birdbros_finish +{9df8975f-f839-4ee6-91ec-61fcfc2a93a3} event:/game/01_forsaken_city/birdbros_fly_loop +{811bbaf0-41b3-4271-8cba-215e12986fb5} event:/game/01_forsaken_city/birdbros_thrust +{e9da9c8d-7bdb-4345-9724-35892a5b44ac} event:/game/01_forsaken_city/console_blue +{893973ec-2dd4-4478-b771-30ac723a7c9e} event:/game/01_forsaken_city/console_purple +{20819c4b-843b-46f2-8c05-8e062e76681d} event:/game/01_forsaken_city/console_red +{6b0262b0-9ae4-474e-9f76-aa1c59942351} event:/game/01_forsaken_city/console_static_long +{024160fc-f496-4d0a-9b5d-16d473524b95} event:/game/01_forsaken_city/console_static_loop +{214e17a6-b3af-451f-a29f-a08351abe64d} event:/game/01_forsaken_city/console_static_short +{6a535067-5141-44c5-92fa-69aa73d96058} event:/game/01_forsaken_city/console_white +{6ddd11c0-8481-4912-81be-ac3ecaeef96f} event:/game/01_forsaken_city/console_yellow +{99c35088-2d5e-4846-b27e-e1adfcd15afa} event:/game/01_forsaken_city/fallblock_ice_impact +{8d6d24fe-c860-4328-9650-c29b39ba87a2} event:/game/01_forsaken_city/fallblock_ice_shake +{c7f359ea-785f-4328-8135-4000ec1486bc} event:/game/01_forsaken_city/zip_mover +{f4f839d0-f7cc-402a-9767-ad79d20ae5d6} event:/game/02_old_site/lantern_hit +{44ed360f-e714-4a3a-99e8-3aed8ecf22cb} event:/game/02_old_site/sequence_badeline_intro +{77800c0d-5128-44d0-8bb1-67174af44406} event:/game/02_old_site/sequence_mirror +{7a436113-5059-4565-a239-927c4876b345} event:/game/02_old_site/sequence_phone_pickup +{1da40d8f-f7d3-425c-9f34-37684fda4aa4} event:/game/02_old_site/sequence_phone_ring_loop +{2c58d235-d6db-4974-825f-426ec121fe23} event:/game/02_old_site/sequence_phone_ringtone_loop +{5a79bbfe-cff0-4117-890d-90e4121c3fec} event:/game/02_old_site/sequence_phone_transform +{d75e80d5-50b4-4a0c-91c8-b7d377fd0d9b} event:/game/02_old_site/theoselfie_foley +{24197259-c364-40a3-b155-f4ba57503891} event:/game/02_old_site/theoselfie_photo_filter +{1eb80e39-81b3-45ec-a5c7-285e31d92245} event:/game/02_old_site/theoselfie_photo_in +{9524d309-340d-4bd4-9479-b6c08e2615cd} event:/game/02_old_site/theoselfie_photo_out +{ab48ef65-2a19-4e26-bd96-c91188020dd6} event:/game/03_resort/clutterswitch_books +{72ea8830-baf4-40b0-bc3a-d05ae7a3ace3} event:/game/03_resort/clutterswitch_boxes +{9f8d7e9f-ec6d-4903-81bc-e1c4e0869dc1} event:/game/03_resort/clutterswitch_finish +{bbec6527-f6d3-42a3-9ad5-4ebbeeebccc9} event:/game/03_resort/clutterswitch_linens +{99b2879f-9f5f-4c28-8a2f-46e379488863} event:/game/03_resort/clutterswitch_return +{4518ae95-ba77-4242-b617-6c18d2f4f570} event:/game/03_resort/clutterswitch_squish +{dcef90ad-4141-4451-a54a-139802c4cfe5} event:/game/03_resort/deskbell_again +{b65c24ca-a160-4d14-b930-2c851cc91f30} event:/game/03_resort/door_metal_close +{1a62e6d5-c2d5-45c7-8d15-ae1352a8b1a4} event:/game/03_resort/door_metal_open +{aec16b15-9f62-4a00-ad28-abfe8b8565dd} event:/game/03_resort/door_wood_close +{d2c8b607-3339-4882-bfa6-e2023dd9ab5f} event:/game/03_resort/door_wood_open +{d77f57f5-6a0e-41d7-aff8-3d2e35942458} event:/game/03_resort/fallblock_wood_impact +{705d6d6f-3d2e-46c5-babb-c84a5ddb35f9} event:/game/03_resort/fallblock_wood_shake +{94fcaef2-821e-4308-8532-4f141db24227} event:/game/03_resort/fallblock_wooddistant_impact +{f84f688a-176f-41b7-b8e9-96df630ff088} event:/game/03_resort/fluff_tendril_emerge +{477a28ea-70e0-4085-8053-d3bf776aedc2} event:/game/03_resort/fluff_tendril_recede +{11bddfee-df7f-41b8-84a0-8fbe19a1ba30} event:/game/03_resort/fluff_tendril_touch +{1e7997d7-a551-479e-90d3-f6929fd665ef} event:/game/03_resort/forcefield_bump +{4c443389-e3fc-41ab-b502-29d39a06f591} event:/game/03_resort/forcefield_idle_loop +{512ca8f8-a58f-4bd0-bd55-a237fa07c6c6} event:/game/03_resort/forcefield_vanish +{ce414756-a0c5-481c-9d0b-dc045f5d5771} event:/game/03_resort/key_unlock +{a20f939e-69a3-4b1a-a1ae-7dfcfa310fe0} event:/game/03_resort/lantern_bump +{142ae054-bc66-4b91-8c25-eff2ee9e4f05} event:/game/03_resort/memo_in +{a3b55290-30ce-464e-b669-9582d71e7c70} event:/game/03_resort/memo_out +{e4408a77-67c1-4e52-974d-4e1363d4cb6f} event:/game/03_resort/platform_horiz_left +{ce237948-99bc-45ba-a812-45c3166d1ce9} event:/game/03_resort/platform_horiz_right +{9ade5023-0a36-4b94-bd91-a542cee21719} event:/game/03_resort/platform_vert_down_loop +{457fdcf2-f81a-4b03-a669-e1193355a7c2} event:/game/03_resort/platform_vert_end +{a4c41f6f-ff8f-4ec8-b122-6c6ab1f81e23} event:/game/03_resort/platform_vert_start +{f894b1fb-3842-414c-aef3-ae5a271587d1} event:/game/03_resort/platform_vert_up_loop +{fc333ed7-13ad-42a5-903d-8ddb19226c0e} event:/game/03_resort/sequence_oshiro_intro +{e00ff4f4-f290-443a-ad1d-27e6c429c328} event:/game/03_resort/sequence_oshirofluff_pt1 +{e00d4196-5c66-4504-af86-08a0ed590b8e} event:/game/03_resort/sequence_oshirofluff_pt2 +{c3deeaef-d69e-4595-9bba-31caa24af6d8} event:/game/03_resort/suite_bad_ceilingbreak +{19ecfec2-e1a0-4335-862f-eaa1d9e679fd} event:/game/03_resort/suite_bad_exittop +{90e330ed-1d4f-4a5a-9dfd-1567b918879c} event:/game/03_resort/suite_bad_intro +{2b2852bd-7b5e-4c42-a05d-31b667dfc577} event:/game/03_resort/suite_bad_mirrorbreak +{9adf0f9b-8820-44de-aede-62403e1c095c} event:/game/03_resort/suite_bad_moveroof +{503d84f2-17c0-4a36-9f8c-7a17e4517e52} event:/game/03_resort/suite_bad_movestageleft +{1f43075b-c346-4a3d-a81d-b2a2fa18b281} event:/game/03_resort/trapdoor_frombottom +{9cf437b5-d65b-4dd9-a6a4-76fe3e7f9c14} event:/game/03_resort/trapdoor_fromtop +{3164e6e3-a335-4821-bbed-eb598dcae9ce} event:/game/04_cliffside/arrowblock_activate +{51df0abc-4ee9-4dd8-8123-d559a7f51383} event:/game/04_cliffside/arrowblock_break +{05956d91-3c60-437c-b83c-c7883b36408d} event:/game/04_cliffside/arrowblock_debris +{77afc34f-d0dc-4224-89c6-936762850581} event:/game/04_cliffside/arrowblock_move +{f478a136-13df-4b80-946d-1081658ef79f} event:/game/04_cliffside/arrowblock_move_child +{a09bfe4a-d2df-48da-af7f-64c1db765dcf} event:/game/04_cliffside/arrowblock_reappear +{d5e8a4f4-f627-4802-975c-b99ef4fea5ee} event:/game/04_cliffside/arrowblock_reform_begin +{7d6ccc8f-678e-4648-bead-3a5c82cfd916} event:/game/04_cliffside/arrowblock_side_depress +{9a3d6d97-4b11-4771-bf58-fbe2d7274579} event:/game/04_cliffside/arrowblock_side_release +{29ffaa1c-75e8-43e8-9002-54bc40193f8b} event:/game/04_cliffside/cloud_blue_boost +{24844c62-b116-4d87-b944-e748e897bd28} event:/game/04_cliffside/cloud_pink_boost +{39c755bc-96f7-4fe8-89b6-0b1a93a61881} event:/game/04_cliffside/cloud_pink_reappear +{bff1e723-0426-432f-8cbd-780f03e54492} event:/game/04_cliffside/gondola_cliffmechanism_start +{03879103-1510-4dca-a1d0-5e8749bfa6a1} event:/game/04_cliffside/gondola_finish +{056c87c9-457e-475f-b216-206d73982cd2} event:/game/04_cliffside/gondola_halted_loop +{e714a1e9-e0de-4ff0-bb70-9290eeafb029} event:/game/04_cliffside/gondola_movement_loop +{b8669a2f-941b-47c3-9e37-fff4c4086a54} event:/game/04_cliffside/gondola_restart +{4071aef2-1c21-4095-9fe9-500c007d3dcd} event:/game/04_cliffside/gondola_scaryhair_01 +{6817fd65-b0e9-43b5-8338-029e57b0f794} event:/game/04_cliffside/gondola_scaryhair_02 +{d0fff247-3b15-4a9c-8606-00cf2da9475a} event:/game/04_cliffside/gondola_scaryhair_03 +{81f28bb7-3b0a-43e7-bcd8-4bab557fe657} event:/game/04_cliffside/gondola_theo_fall +{b3501af7-543d-4a16-ba86-5fb0da4416fd} event:/game/04_cliffside/gondola_theo_lever_fail +{898f077b-02af-4524-883d-8bd2a8d7bd9b} event:/game/04_cliffside/gondola_theo_lever_start +{8a992dbc-82cf-41f6-9ebe-493eb1dd3c3a} event:/game/04_cliffside/gondola_theo_recover +{6d7ed51e-7e2c-43ed-913d-6617d6dd43e0} event:/game/04_cliffside/gondola_theoselfie_halt +{e916ead7-7d6f-43a7-aaf7-b6a507a6664f} event:/game/04_cliffside/greenbooster_dash +{bcd8c865-476c-4ff8-a8a4-facf110321a8} event:/game/04_cliffside/greenbooster_end +{a0bb25ba-3b9d-45a1-b4cd-214fe07288c0} event:/game/04_cliffside/greenbooster_enter +{80c246ab-79ac-4190-81c0-56bc959e67c8} event:/game/04_cliffside/greenbooster_reappear +{6bfa7995-5b42-4cc2-8459-6c650085f0c2} event:/game/04_cliffside/snowball_impact +{1c2db8f7-e816-4ebc-b825-0fd27357291e} event:/game/04_cliffside/snowball_spawn +{f2966dfb-524f-456f-9107-d2b2c8bbf398} event:/game/04_cliffside/stone_blockade +{c9374bde-64a8-4f26-b4ce-d84b28dac8c8} event:/game/04_cliffside/whiteblock_fallthru +{564d50fe-6229-4fc5-bef4-771b026308f2} event:/game/05_mirror_temple/bladespinner_spin +{097d5975-dee1-42e2-a3f0-1524b9d60fc6} event:/game/05_mirror_temple/button_activate +{e3598466-186b-4d6e-92bf-0a796a4b5f6a} event:/game/05_mirror_temple/button_depress +{797e3c30-39f9-4ab4-9749-9b7451598ec4} event:/game/05_mirror_temple/button_return +{3f6dc969-2f5c-4324-9cef-fc0119536f80} event:/game/05_mirror_temple/crackedwall_vanish +{1e303df8-ca93-4c8a-83a4-671e311469b0} event:/game/05_mirror_temple/crystaltheo_break_free +{5d717d53-4596-4f11-8f44-c73fb9543aba} event:/game/05_mirror_temple/crystaltheo_hit_ground +{ac5d3d51-3aac-4c22-a608-ba0bb777ca27} event:/game/05_mirror_temple/crystaltheo_hit_side +{f64177a2-2611-49cc-8c63-d74c1e29c8a3} event:/game/05_mirror_temple/eye_pulse +{ca49621b-2ecf-4c77-8282-ba1719986f0f} event:/game/05_mirror_temple/eyebro_eyemove +{22a41a42-5e6f-4185-85d4-b5d1a8c38d4d} event:/game/05_mirror_temple/eyewall_bounce +{7f180cd1-0f90-433d-b71e-c9a6cc7f49e7} event:/game/05_mirror_temple/eyewall_destroy +{68e31409-b316-478b-8eb3-67a885e9dd33} event:/game/05_mirror_temple/gate_main_close +{3ec0a31a-f6af-4426-aaa1-db57098dbd39} event:/game/05_mirror_temple/gate_main_open +{adbfae43-5c5b-4b38-abd2-e13215ebde56} event:/game/05_mirror_temple/gate_theo_close +{2b2b58c7-88e0-4575-aaa5-fbf276beddcf} event:/game/05_mirror_temple/gate_theo_open +{2cc437e8-70f0-48b0-ac2a-0dc93ee06b87} event:/game/05_mirror_temple/key_unlock_dark +{fef47165-cad5-492a-8a42-3db9cc48c2bd} event:/game/05_mirror_temple/key_unlock_light +{4fa2a3d9-560d-4546-92b7-969d2ca1fb29} event:/game/05_mirror_temple/mainmirror_reveal +{b857bbcf-540e-46fd-af37-5ea6d12e28f2} event:/game/05_mirror_temple/mainmirror_torch_lit_1 +{35abfea4-7b3b-489d-bcd8-431b93b87fa4} event:/game/05_mirror_temple/mainmirror_torch_lit_2 +{36604f79-14aa-4a46-a7b3-42a15fc7fbc1} event:/game/05_mirror_temple/mainmirror_torch_loop +{bdeb0f35-c06a-4f67-96d6-57869f22114f} event:/game/05_mirror_temple/redbooster_dash +{b3da9cec-f45e-4dcd-bf8b-c84a7dd5c56b} event:/game/05_mirror_temple/redbooster_end +{1ed8d7f1-ef06-4db9-98d2-4f2ea3b46e7b} event:/game/05_mirror_temple/redbooster_enter +{7f0e5b69-8d8a-4983-ac98-deb970106cc6} event:/game/05_mirror_temple/redbooster_move +{ae2f6ea7-bd05-41df-a0dd-044058292d72} event:/game/05_mirror_temple/redbooster_reappear +{39c3eab6-ef3e-4ffb-8653-b0345fc67e20} event:/game/05_mirror_temple/room_lightlevel_down +{752d010d-81f5-4ea8-a9ab-b99d4e0e1dd9} event:/game/05_mirror_temple/room_lightlevel_up +{9521ed4e-a395-4ef2-89cc-3a3c99942108} event:/game/05_mirror_temple/seeker_aggro +{a35ec65b-6b2b-47b1-8c5f-b13facb6487f} event:/game/05_mirror_temple/seeker_booped +{3147835f-3002-4097-bc14-53c456a8501f} event:/game/05_mirror_temple/seeker_dash +{051055e4-9308-4765-9a0b-877491039301} event:/game/05_mirror_temple/seeker_dash_turn +{48325639-2492-43e0-81de-cd7898db8b8c} event:/game/05_mirror_temple/seeker_death +{d7f87c78-d631-4cb3-8487-f077d65ed4a5} event:/game/05_mirror_temple/seeker_hit_lightwall +{b51e22cd-a7bb-42e5-a0d9-af5e9bfe3c36} event:/game/05_mirror_temple/seeker_hit_normal +{ded98d91-1f1e-4fcf-b177-959028cd379c} event:/game/05_mirror_temple/seeker_playercontrolstart +{fd08f871-88dc-484f-8773-497258aa3034} event:/game/05_mirror_temple/seeker_revive +{439c8be0-4350-4504-9df9-173abc3e15bb} event:/game/05_mirror_temple/seeker_statue_break +{1b02729d-bb1d-4366-94fb-a5683edbfa38} event:/game/05_mirror_temple/swapblock_move +{c4d97750-9512-487d-bd98-cfbe021a2702} event:/game/05_mirror_temple/swapblock_move_end +{a9879415-f054-4486-9582-44cf599b5e70} event:/game/05_mirror_temple/swapblock_return +{7820adbb-5c57-46ac-bde1-9ecba7fa730e} event:/game/05_mirror_temple/swapblock_return_end +{2bf6eb6d-2bbb-4bbf-bf76-1f37fd8b6098} event:/game/05_mirror_temple/torch_activate +{3d116858-7da6-4838-a3bc-5e1f1fb73fd4} event:/game/06_reflection/badeline_feather_slice +{79ca9943-db1f-4118-9c48-1893e5937e42} event:/game/06_reflection/badeline_freakout_1 +{45b9d18d-7871-4c32-93af-521b3bd55483} event:/game/06_reflection/badeline_freakout_2 +{3b218b08-138f-48ab-9e13-00d093114e40} event:/game/06_reflection/badeline_freakout_3 +{3a28d465-3e86-4e3c-8ffd-5e5ba8449c95} event:/game/06_reflection/badeline_freakout_4 +{d1915e57-1952-448d-8610-6b123f6b449c} event:/game/06_reflection/badeline_freakout_5 +{6d25e0a4-6603-4ead-b934-ab432c153bd9} event:/game/06_reflection/badeline_pull_cliffbreak +{74f464a2-074c-4693-9aa6-fc4b1a875f50} event:/game/06_reflection/badeline_pull_impact +{a78e5da7-9ee8-4ba7-bdf0-f3fa45dfb3d8} event:/game/06_reflection/badeline_pull_rumble_loop +{b03ce754-f33d-44f6-aaa8-4f7702dfc335} event:/game/06_reflection/badeline_pull_whooshdown +{03185ab0-0f08-4c6e-a6ae-1c44da6b2842} event:/game/06_reflection/boss_spikes_burst +{a67c7b2a-2efe-437d-b4eb-9b0b7c9a5c38} event:/game/06_reflection/crushblock_activate +{0b58832d-4e27-44db-a154-558d490c3083} event:/game/06_reflection/crushblock_impact +{964ff961-da31-4ff4-b344-7b7dd4ddc7d7} event:/game/06_reflection/crushblock_move_loop +{a8ad11bd-1740-42fc-a83b-e067c2461c18} event:/game/06_reflection/crushblock_move_loop_covert +{251c3dfb-0cab-4ef7-bb2c-2b0f8aa56537} event:/game/06_reflection/crushblock_rest +{115ebebd-cb97-4ba1-bc55-5f6dac63a699} event:/game/06_reflection/crushblock_rest_waypoint +{b04421be-109d-400f-8797-cdd05d0f6bd7} event:/game/06_reflection/crushblock_return_loop +{88cc2646-c70d-47bb-9e88-1de934fa1792} event:/game/06_reflection/fall_spike_smash +{441f8a0a-8783-4894-b45c-815c95877931} event:/game/06_reflection/fallblock_boss_impact +{d7c6ea52-c946-4099-9a90-553be5d5335b} event:/game/06_reflection/fallblock_boss_shake +{eb66579e-6a05-4b8d-ad27-0f39703998c7} event:/game/06_reflection/feather_bubble_bounce +{6e29b787-1f7a-4f44-84a8-eb867342a37f} event:/game/06_reflection/feather_bubble_get +{eef6081c-aa94-4203-a235-41cc41007d4e} event:/game/06_reflection/feather_bubble_renew +{3cafbad4-ca29-4798-815a-ada3a887ffd3} event:/game/06_reflection/feather_get +{9a2f4eef-a598-4031-9600-4ed2d0ecec3c} event:/game/06_reflection/feather_reappear +{38215515-d671-4635-a2ff-9b6749619301} event:/game/06_reflection/feather_renew +{e08e627f-334c-46f1-b8a8-9c090cadc788} event:/game/06_reflection/feather_state_bump +{ea1e1d39-ace6-481c-8438-d57709355f1e} event:/game/06_reflection/feather_state_end +{a7153155-8c54-4635-9ea5-5423d9cd02e5} event:/game/06_reflection/feather_state_loop +{7d1dcd4a-298d-4943-b70d-f41311ec4f1b} event:/game/06_reflection/feather_state_warning +{61497bfa-cd5f-4c26-86ae-a12d04fd5dee} event:/game/06_reflection/hug_badeline_glow +{3aded16d-06f6-4a37-aa4c-91bd91ee290a} event:/game/06_reflection/hug_image_1 +{d375e1f8-d1ac-47f2-8bc9-bc51029404e6} event:/game/06_reflection/hug_image_2 +{21cc70d3-7469-431e-b31d-63844d7005c5} event:/game/06_reflection/hug_image_3 +{97ad5be6-ab5a-4587-9868-1a6a36befc48} event:/game/06_reflection/hug_levelup_text_in +{be107a92-39f3-4789-8fbb-b1055dee27ee} event:/game/06_reflection/hug_levelup_text_out +{21db4b0c-6524-4545-8266-c6ea1bf032ef} event:/game/06_reflection/pinballbumper_hit +{8d6249fc-9f0d-4980-b876-036252ae209d} event:/game/06_reflection/pinballbumper_reset +{34751b86-7136-491f-b281-4acfc5abc130} event:/game/06_reflection/scaryhair_move +{990ebd4d-3117-4c00-8328-88b757411c91} event:/game/06_reflection/scaryhair_whoosh +{91dc7f98-2590-4c28-adcb-02c1881cf8d2} event:/game/06_reflection/supersecret_dashflavour +{8b071bc7-bb71-4db6-9a0c-78c576426dc8} event:/game/06_reflection/supersecret_heartappear +{3e6f0df6-6fe4-47de-b2c0-d08bcfa21319} event:/game/06_reflection/supersecret_torch_1 +{ba61f3cf-14b9-4d76-b433-4a6d8f14dedc} event:/game/06_reflection/supersecret_torch_2 +{a962651f-30eb-4a9c-97fc-d835f6a87783} event:/game/06_reflection/supersecret_torch_3 +{954696fc-a63e-4463-a54c-10838017aa8e} event:/game/06_reflection/supersecret_torch_4 +{007817b9-722a-44c8-8e14-cc66233ce495} event:/game/07_summit/altitude_count +{6fb5dd68-3aab-4a50-ad31-33d08b2e88e5} event:/game/07_summit/checkpoint_confetti +{98bbbca2-1b04-495b-8a02-7eae819d473c} event:/game/07_summit/gem_get +{c4168a8d-2840-4f88-8dae-c53ae7a67551} event:/game/07_summit/gem_unlock_1 +{e67a6421-0ca8-4051-98f4-8ee400f0db93} event:/game/07_summit/gem_unlock_2 +{b7fd1fc1-f041-42ef-82c3-ff792e998a1a} event:/game/07_summit/gem_unlock_3 +{dccaadfe-f788-4980-8a91-4f8fadb26609} event:/game/07_summit/gem_unlock_4 +{f7e67666-e4fe-49db-a6e3-209bfae067a4} event:/game/07_summit/gem_unlock_5 +{c8ad0627-526a-4251-b3c9-9e77637278a0} event:/game/07_summit/gem_unlock_6 +{4ab3c742-e5f8-4337-a38e-ea8ed81f3585} event:/game/07_summit/gem_unlock_complete +{d16b3d24-62a8-428d-a6c9-9a1d9b0b47db} event:/game/09_core/bounceblock_break +{9d02cd4d-a187-4104-a985-505de199fb25} event:/game/09_core/bounceblock_reappear +{7be458ab-5b1e-4237-84e7-ead255468209} event:/game/09_core/bounceblock_touch +{c11484c7-8cc1-4328-b074-2ed680b452f1} event:/game/09_core/conveyor_activate +{a97e79b8-1e79-4f31-a648-7b99414a800c} event:/game/09_core/final_heart_get +{91d12529-3e7b-47e2-bc73-2037267fc6ca} event:/game/09_core/frontdoor_heartfill +{12eebf33-5c32-46f2-b988-00fdffb83b6d} event:/game/09_core/frontdoor_unlock +{2718ffac-db8e-4f95-b54e-253134bd48a5} event:/game/09_core/hotpinball_activate +{3988aed8-0d51-4226-8ebb-89a25c823c78} event:/game/09_core/iceball_break +{6c7ea8bb-a843-4cd6-8397-c31344ae3a83} event:/game/09_core/iceblock_reappear +{cb58d270-9f66-4686-aea7-ca779f5ce612} event:/game/09_core/iceblock_touch +{2823a745-a4bf-428a-9c9f-01d36d543f63} event:/game/09_core/pinballbumper_hit +{d9c39b1e-abbe-40b0-a78a-b78b61d94ebd} event:/game/09_core/rising_threat +{4873d018-21da-4850-8503-df248e413cb5} event:/game/09_core/switch_dies +{e08cde3f-631d-47ab-a94a-9281717c3219} event:/game/09_core/switch_to_cold +{9b4a375f-ac9e-4d57-a145-b7e488e46191} event:/game/09_core/switch_to_hot +{93c5f4b9-cb2c-4db0-ad3f-b05272ff8950} event:/game/general/assist_dash_aim +{f32eab8f-468d-430f-8fb4-c603abc19aab} event:/game/general/assist_dreamblockbounce +{0cc0f8af-53e0-4301-a6ba-9d3545a34e4e} event:/game/general/assist_nonsolid_in +{992b2466-36d9-4202-a439-2a74a43a19d1} event:/game/general/assist_nonsolid_out +{b98b9406-a64d-4428-b882-a33366f50cbf} event:/game/general/assist_screenbottom +{5f8d988c-528d-4d55-a6e2-4c47bfc50176} event:/game/general/bird_in +{51d238e6-4f1b-46f6-a94d-df78f8df8ac7} event:/game/general/bird_land_dirt +{391d10bd-1577-4ae2-8370-04e1bd3f0fc5} event:/game/general/bird_peck +{4d1ae0ae-db96-47b7-925c-ce84c6ab722e} event:/game/general/bird_squawk +{7ea54ed8-0285-4dfc-a1ce-558444a4aa59} event:/game/general/bird_startle +{73b07905-9234-4900-af6e-b27820978106} event:/game/general/birdbaby_flyaway +{855749a2-8c5a-4db6-9877-f7cfd3a2183c} event:/game/general/birdbaby_hop +{2708f97c-8a18-4c6b-9bd7-1abf90dac0f6} event:/game/general/birdbaby_tweet_loop +{0e132294-09bd-44a3-9af3-9392521eddef} event:/game/general/cassette_block_switch_1 +{4286af39-b45f-42e6-887d-f8515180d3f8} event:/game/general/cassette_block_switch_2 +{9db695ce-ce56-4025-9528-030d6b599c86} event:/game/general/cassette_bubblereturn +{111996f6-8bae-408f-86d1-0aeae8203f4b} event:/game/general/cassette_get +{4c42d16c-381c-43ca-9d5d-56595e196b08} event:/game/general/cassette_preview +{1acb8e84-5f79-4dcd-86aa-e8a514535b7d} event:/game/general/crystalheart_blue_get +{96349ed6-cd24-4010-a9ee-0e93101a6609} event:/game/general/crystalheart_bounce +{10ff4e08-9448-49ae-8092-d402bb128538} event:/game/general/crystalheart_gold_get +{78f2deb2-fccc-4d1d-b78a-9667d574bbf3} event:/game/general/crystalheart_pulse +{e04dbcbd-4476-4174-9046-1e92febcc08e} event:/game/general/crystalheart_red_get +{8b672ab7-0d76-45fb-a9e9-1676ca014d6f} event:/game/general/debris_dirt +{3795b486-390b-46cc-97f9-dced1a83453b} event:/game/general/debris_stone +{972b07a3-38ff-4818-b24d-151db5d3a044} event:/game/general/debris_wood +{735f3afc-00bc-46da-94f1-2cb51e3bfecc} event:/game/general/diamond_return +{a47180e1-9bc2-4dbc-86c7-6402cea2e2be} event:/game/general/diamond_touch +{5381856a-d548-4a31-b7e5-b94d2a72881e} event:/game/general/fallblock_impact +{a9cc805b-cc3c-4e29-af3b-bc69914e5a10} event:/game/general/fallblock_shake +{3070bcdd-928f-4ffb-ba75-d43dbb2c2864} event:/game/general/key_get +{2b6c4db0-c9c8-4be7-8835-b4866bc1e4f5} event:/game/general/lookout_move +{60836b2c-9999-4f03-8801-2c01dc40b163} event:/game/general/lookout_use +{f372e3a9-bb65-4343-bf47-b87d18d10383} event:/game/general/passage_closed_behind +{e217436d-8f73-462c-9877-ac095e8f20b8} event:/game/general/platform_disintegrate +{58e5b7db-c18b-4399-bd5c-dd592c9c1b47} event:/game/general/platform_return +{38e9f295-6400-41e8-b574-9a1e8c908622} event:/game/general/secret_revealed +{2626645e-6392-4963-8361-4dccfa511758} event:/game/general/seed_complete_berry +{26391bcd-7613-49ad-a9bd-529f7bcaeb29} event:/game/general/seed_complete_main +{884bccb8-958a-4278-8a1b-daf74fff37c0} event:/game/general/seed_poof +{b5d1aeec-3d7e-4eed-9e82-5014b99162ce} event:/game/general/seed_pulse +{c4df15cb-44b5-4913-b238-29083f1d8b0a} event:/game/general/seed_reappear +{6160ad7b-16f6-49a5-aa9b-55d75da5a8e1} event:/game/general/seed_touch +{1a7858a9-96f8-426a-a06f-0c2750e43f85} event:/game/general/spotlight_intro +{b38c0f26-cef2-487f-b99c-295757ccd5a9} event:/game/general/spotlight_outro +{a4c52eee-f6a0-4ebe-976f-fab38d4cfa7a} event:/game/general/spring +{2452bb12-5d79-4849-b62b-17cc06744679} event:/game/general/strawberry_blue_pulse +{5c271b0b-eba2-400b-8011-e1d673324674} event:/game/general/strawberry_blue_touch +{3b9e48f1-e72d-46a6-909b-4ce5044c4253} event:/game/general/strawberry_flyaway +{3b45b8d4-ff15-4d36-9411-3e4ce2726377} event:/game/general/strawberry_get +{e144b578-20dd-4722-897c-24de90562b7b} event:/game/general/strawberry_laugh +{0886e368-bce4-4922-97c3-edeadf714e29} event:/game/general/strawberry_pulse +{525d00db-bc31-4054-9f61-0238bfd62941} event:/game/general/strawberry_touch +{dd319a09-d197-4604-8ebf-c5fee614d863} event:/game/general/strawberry_wingflap +{5a1e6a52-fa6a-44fb-b7ef-931a000b7c95} event:/game/general/thing_booped +{30fafd37-cd47-4a56-ab3b-0cc8f1beec5b} event:/game/general/touchswitch_any +{0d6edb8b-2936-4e11-bc13-2c8bba70cbfa} event:/game/general/touchswitch_gate_finish +{845556f0-842c-46d2-ac6c-64fc05f14cb0} event:/game/general/touchswitch_gate_open +{0bf56c65-3c71-4a0a-bce1-0bc63af5b3f6} event:/game/general/touchswitch_last +{effc3510-2efe-422f-aa3a-30b8ace60533} event:/game/general/touchswitch_last_cutoff +{479dda0f-e99f-478b-96c0-6367cf06cab2} event:/game/general/touchswitch_last_oneshot +{329fd34b-cca4-4d8c-a07e-fdf8be436e38} event:/game/general/wall_break_dirt +{7c01de41-a31a-43c3-9c0f-9ae85ad94c68} event:/game/general/wall_break_ice +{92f75010-4e90-428e-834c-1315ddbd9460} event:/game/general/wall_break_stone +{634bdd66-3f53-4679-8ced-fadfc60d412f} event:/game/general/wall_break_wood +{51873fdd-604e-4810-9db1-8c6e5a6049b5} event:/music/cassette/01_forsaken_city +{e44a2aa5-f96e-4d75-8018-8bee278017ad} event:/music/cassette/02_old_site +{bb2ac8fc-6353-4127-bc7b-7439262508da} event:/music/cassette/03_resort +{bda820f1-0c6f-4c4f-8e8b-615d94a6bb89} event:/music/cassette/04_cliffside +{117d38ce-6174-491e-9564-107d17a7b187} event:/music/cassette/05_mirror_temple +{832066ac-c78a-4c60-a7d0-dbc2c4712dd7} event:/music/cassette/06_reflection +{464d1185-b4c6-4ab8-b570-ed2a92c3aade} event:/music/cassette/07_summit +{ac98793d-c890-4675-bb13-3a3aec282b0b} event:/music/cassette/09_core +{474ccf9f-bad7-48e2-b7c6-df307b74e4a5} event:/music/lvl0/bridge +{8b890963-5cea-4df9-8d73-ca2116519928} event:/music/lvl0/intro +{02fa256c-1e08-46e5-9082-85c38b403d4c} event:/music/lvl0/title_ping +{1af3da54-a900-4929-acdf-5098a27c4d8e} event:/music/lvl1/main +{294d9147-9177-42ba-9bd8-04defb79a6a6} event:/music/lvl1/theo +{aa60a19a-6bab-43d2-9b18-9c0f39087123} event:/music/lvl2/awake +{11062cdc-badd-4bd5-96b2-f47463ddd9b2} event:/music/lvl2/beginning +{e2d41f6a-ec7d-4b25-a74f-3746b7207f4f} event:/music/lvl2/chase +{c6d8b40c-ab8b-415e-8279-fd5ddfde7f68} event:/music/lvl2/dreamblock_sting_pt1 +{f0a05548-59a3-4b71-baf0-2d591c25677e} event:/music/lvl2/dreamblock_sting_pt2 +{8d56aaf8-b0f5-4f8c-b27a-9c07e13e5fa2} event:/music/lvl2/evil_madeline +{78ac6937-dfd7-4d1c-a3b0-a71818c2cc49} event:/music/lvl2/mirror +{a013a019-5c83-47fa-8c76-bf26a0ee3ab7} event:/music/lvl2/phone_end +{92c762da-6b09-4ae6-bea6-6264d405d309} event:/music/lvl2/phone_loop +{73c95a24-6c35-4dc5-893d-7e79ecc61481} event:/music/lvl3/clean +{31a7988d-80bf-40ee-84f0-644a17abe6cc} event:/music/lvl3/explore +{cc153928-7bcc-4c83-b9e2-586dca338588} event:/music/lvl3/intro +{16a8585c-e163-4594-bbeb-5bb2977f947f} event:/music/lvl3/oshiro_chase +{416d5500-d42a-4981-baa8-83381cbbce3f} event:/music/lvl3/oshiro_theme +{e15a069f-4f5d-430e-9741-b8fffb62ab3d} event:/music/lvl4/heavy_winds +{bd2bf7cc-8196-4f69-9548-418ea37eb9fd} event:/music/lvl4/main +{afcdbcca-8216-4659-ad5d-a2f4d836e1ee} event:/music/lvl4/minigame +{ddeb5097-ebd0-4e92-964c-b9458ae3ff18} event:/music/lvl5/middle_temple +{7e1c842a-b3d8-440a-9c39-196826b8bee2} event:/music/lvl5/mirror +{1b5af286-b8ce-444a-8f9b-03bc5fb66166} event:/music/lvl5/mirror_cutscene +{b19f2493-502a-408c-847b-4e0bb666e202} event:/music/lvl5/normal +{2d16d1b8-f6c7-472d-879f-c583537302d7} event:/music/lvl5/seeker_drums_layer +{466271ba-3e10-4943-ba99-0bd63ade7636} event:/music/lvl6/badeline_acoustic +{42d3ce68-8863-487c-bc3c-a1f74bd85911} event:/music/lvl6/badeline_fight +{e1a395a5-aa17-4418-ac3d-ffa51c618014} event:/music/lvl6/badeline_glitch +{f1e2f6f3-29d9-4914-8296-4261a223d3ac} event:/music/lvl6/madeline_and_theo +{29904477-ac10-4b8d-8858-0ac06df88d02} event:/music/lvl6/main +{1841d8c6-d1af-4319-9926-9ed41e4a8d85} event:/music/lvl6/secret_room +{78fca5fd-8d0a-42d2-b5d8-3501cef99c85} event:/music/lvl6/starjump +{f351bdf5-087b-451d-92c6-1ac651117107} event:/music/lvl6/the_fall +{435249ff-4293-4369-8652-5d2f314551c5} event:/music/lvl7/final_ascent +{443b630c-e94c-4aba-ad10-4cc7468d49cb} event:/music/lvl7/main +{f335427a-7961-4e4e-b94c-58c2a4490182} event:/music/lvl8/main +{38e2f39c-382d-4136-86fd-e24520f3b71e} event:/music/lvl9/main +{4d5dc6c1-fd41-4e8d-bf91-84a15631055d} event:/music/menu/complete_area +{ac1cb91e-c5ed-42f9-82f9-847cc2c0df9e} event:/music/menu/complete_bside +{705df905-2639-470f-963f-408f30e23a2b} event:/music/menu/complete_summit +{f47636da-f583-418c-beb4-f4e0d3e80ec3} event:/music/menu/credits +{a8ac3582-9e94-40af-b76a-2ff51f076e6f} event:/music/menu/level_select +{889ddcf6-8d06-4106-9e73-f5d63f964717} event:/music/remix/01_forsaken_city +{1d8f0733-f7c7-4af1-947d-da16faaa673a} event:/music/remix/02_old_site +{ec2e5fa5-9f50-4fd7-bdc2-45474c4967a3} event:/music/remix/03_resort +{a0b49e74-eb0b-4519-bb38-987095b66578} event:/music/remix/04_cliffside +{8efb347e-e501-4bab-9349-7b6dbba66551} event:/music/remix/05_mirror_temple +{51acfb4c-c5b1-4bd7-af44-a0c2472327db} event:/music/remix/06_reflection +{16aaecdf-ca62-4273-9bff-7900f3d92a4b} event:/music/remix/07_summit +{10deb10e-5387-4e38-8ce5-aa83feaa5cf7} event:/music/remix/09_core +{a38a422d-553d-4a98-bd77-4fb94c9a40a8} event:/new_content/char/badeline/birdcrash_scene_float +{cad1c006-44ce-4a92-8c90-5996befaa8c4} event:/new_content/char/badeline/booster_finalfinal_part1 +{db21d96e-f70a-4799-987e-574c9f68cc2d} event:/new_content/char/badeline/booster_finalfinal_part2 +{5a554fe3-4398-4960-ab5e-70dc62685ded} event:/new_content/char/badeline/booster_first_appear +{4316d3ba-709e-4fc5-8e8c-0279daf4659e} event:/new_content/char/badeline/booster_relocate_slow +{fd06af1f-776a-4879-9100-91b14c48bb66} event:/new_content/char/badeline/maddy_join_quick +{bd5452ab-7b14-4571-bca2-21656793c2d6} event:/new_content/char/granny/cane_tap_ending +{1cc5e3b3-4078-4728-9405-a5ab3ac94759} event:/new_content/char/granny/dissipate +{eeab0167-3ebd-45b2-b701-7dc9f98959e0} event:/new_content/char/madeline/Vanilla Backup/death_golden +{b17c7077-e1c9-4ba8-8f49-4eec29d9f1ce} event:/new_content/char/madeline/bounce_boost +{5534c1ec-5c0a-4589-a5c7-cbb3fcbfa160} event:/new_content/char/madeline/glider_drop +{e2c752dc-10dc-41e7-8709-95cbbcfe9104} event:/new_content/char/madeline/hiccup_ducking +{57531525-33bf-45a5-bf27-306814b95457} event:/new_content/char/madeline/hiccup_standing +{89dec006-6bd9-4491-b238-bfc13a072506} event:/new_content/char/madeline/screenentry_golden +{a260d3a1-20b3-44f1-9543-e8ec9bcccfe9} event:/new_content/char/madeline/screenentry_gran +{ff56e917-feba-4631-84eb-2718c65c1e58} event:/new_content/char/madeline/screenentry_gran_landing +{82b35daf-877f-401a-9b49-6a4bb9ff5bc3} event:/new_content/char/madeline/screenentry_lowgrav +{0653a7ee-59e5-4915-8695-dcba555607b5} event:/new_content/char/madeline/screenentry_stubborn +{c2e8cdc9-b6a3-4f66-8500-af91182f176e} event:/new_content/char/madeline/death_golden +{e36926d3-b7b4-409f-904c-5d5d1131b55a} event:/new_content/char/tutorial_ghost/appear +{a41658fa-080f-4fde-9a63-d571b36237ed} event:/new_content/char/tutorial_ghost/dash_red_left +{2e4105eb-0489-4a3b-8466-b356d06a7f8c} event:/new_content/char/tutorial_ghost/dash_red_right +{14db73f4-6a9b-494a-b1b6-1e82763b508e} event:/new_content/char/tutorial_ghost/disappear +{052e57b9-276e-4eee-ab21-09a978ef3621} event:/new_content/char/tutorial_ghost/dreamblock_sequence +{97781d70-8798-43ce-b1b8-aec9039c3262} event:/new_content/char/tutorial_ghost/footstep +{6279ab0b-6594-4756-8495-4eefa78093a1} event:/new_content/char/tutorial_ghost/grab +{8490f47c-fa00-40cb-a2ff-2d94c2ac9292} event:/new_content/char/tutorial_ghost/handhold +{94bde26a-6355-4896-b674-d44adf70705d} event:/new_content/char/tutorial_ghost/jump +{0f15b7da-7808-4c29-8bb8-382c1ec6e407} event:/new_content/char/tutorial_ghost/jump_super +{5e86985d-5063-4a53-ad24-46896ff682a2} event:/new_content/char/tutorial_ghost/land +{03c328c7-8d1c-48c2-b2e6-d1d8225e4d89} event:/new_content/env/local/cafe_computer +{e88c096c-382f-4add-aa77-36653d4a0b14} event:/new_content/env/local/cafe_sign +{4525fa59-c11e-4863-843f-3783571b11cf} event:/new_content/env/local/kevinpc +{9cb8fd7f-f28f-4f21-8153-2d3c5830e0a1} event:/new_content/env/local/tutorial_static_left +{e0a3bd21-b245-4733-9fb5-69f2261b4ce5} event:/new_content/env/local/tutorial_static_right +{58a69c31-956e-42a2-a9a2-359e67921ffa} event:/new_content/env/10_electricity +{7c6562f4-68b1-484a-8e50-a935f1ab56f7} event:/new_content/env/10_endscene +{3f8d0871-07ac-49dd-b7c2-893043eaaf83} event:/new_content/env/10_grannyclouds +{fceb8b1e-7d92-400b-903f-406dade6162c} event:/new_content/env/10_rain +{f89e2eed-f3a6-46bf-9de1-9a3827ff79db} event:/new_content/env/10_rushingvoid +{589ad0f1-53f4-4567-b6a1-34c670afb80d} event:/new_content/env/10_space_underwater +{a351d4ea-7c48-43ce-a371-db4ee6f5ddc5} event:/new_content/env/10_voidspiral +{447f67ef-0777-4a7a-94e2-c00300316d10} event:/new_content/game/10_farewell/bird_camera_pan_up +{d3a1e63e-2265-4652-988f-3d07724ab466} event:/new_content/game/10_farewell/bird_crashscene_leave +{2bb2c164-719e-4ead-8dbd-f6943e93ec31} event:/new_content/game/10_farewell/bird_crashscene_recover +{a1745c53-2c9e-4545-bc28-275b56d913d8} event:/new_content/game/10_farewell/bird_crashscene_relocate +{61f52438-bee9-4393-ac9b-10a03ec220b9} event:/new_content/game/10_farewell/bird_crashscene_start +{712650d6-3edc-40f8-96e7-c4d70aabc7fb} event:/new_content/game/10_farewell/bird_crashscene_twitch_1 +{59ecf2bc-ad5d-4055-ad4d-c477789353f9} event:/new_content/game/10_farewell/bird_crashscene_twitch_2 +{84666200-9dc1-435c-86dc-c576f7fea100} event:/new_content/game/10_farewell/bird_crashscene_twitch_3 +{ba4f0d7f-6781-437f-8f40-babd44ffd7e5} event:/new_content/game/10_farewell/bird_flappyscene +{613e3e96-0787-4e4c-b1b9-d5b85edb09f2} event:/new_content/game/10_farewell/bird_flappyscene_entry +{9aa30c86-bd74-4fe0-a746-6206a161dbda} event:/new_content/game/10_farewell/bird_fly_uptonext +{00c336f3-361c-455c-a735-88d322bb0a87} event:/new_content/game/10_farewell/bird_flyuproll +{9ba95702-66ae-441f-944e-c123175195ff} event:/new_content/game/10_farewell/bird_relocate +{ff882573-75c7-4aeb-86e2-73a946646308} event:/new_content/game/10_farewell/bird_startle +{f73f6ebb-c858-4a36-b59a-74c66ee1f901} event:/new_content/game/10_farewell/bird_throw +{ee413800-8752-4f0b-9a5d-3084e2473aa2} event:/new_content/game/10_farewell/bird_wingflap +{67ac36e7-71f0-4956-97b1-ac7ce0e1bd0a} event:/new_content/game/10_farewell/cafe_computer_off +{4be46c93-4868-4b41-ab86-cd5b4cb24ab4} event:/new_content/game/10_farewell/cafe_computer_on +{2760b17a-48e8-4008-8fdc-c5180c7e7516} event:/new_content/game/10_farewell/cafe_computer_on_old +{cb643135-d2a6-4999-b669-d2385a7cf546} event:/new_content/game/10_farewell/cafe_computer_startupsfx +{e50e05b1-7d84-42b4-9978-eaed3a3d9945} event:/new_content/game/10_farewell/endscene_attachment_click +{0d8902b7-105c-4f09-973b-28e701845084} event:/new_content/game/10_farewell/endscene_attachment_notify +{9492988e-612e-418d-a1a5-b416db84f087} event:/new_content/game/10_farewell/endscene_dial_theo +{87c24e15-dce0-40ae-a8b5-878e5a071dc6} event:/new_content/game/10_farewell/endscene_final_input +{0a35baac-0a14-4121-b6fe-8336c5ae6507} event:/new_content/game/10_farewell/endscene_photo_zoom +{8e4da22f-7a93-46b7-8e07-7255d3431e1b} event:/new_content/game/10_farewell/fakeheart_bounce +{a72e0e5c-5db0-4542-8a29-25d4d8e19a14} event:/new_content/game/10_farewell/fakeheart_get +{51f68531-d228-4786-b703-6a5f44e41cee} event:/new_content/game/10_farewell/fakeheart_pulse +{08327e1d-c840-4d1e-9733-0cf4a843f867} event:/new_content/game/10_farewell/fusebox_hit_1 +{6b7fe1af-1dfd-40f1-89bc-b3e43f6eddcf} event:/new_content/game/10_farewell/fusebox_hit_2 +{0a4ae8c6-5797-4d09-8636-106589eeeeae} event:/new_content/game/10_farewell/glider_emancipate +{59507330-6098-4229-9ad1-7c927ec01298} event:/new_content/game/10_farewell/glider_engage +{cd01863f-3e92-4952-9a97-9a529df26b53} event:/new_content/game/10_farewell/glider_land +{faf2332c-87fb-46d7-b108-99de35f7d683} event:/new_content/game/10_farewell/glider_movement +{0ef75714-36af-4845-bd24-72028d9c1efb} event:/new_content/game/10_farewell/glider_platform_dissipate +{d3bd0dd4-28a4-4217-ac40-a3b8c2531979} event:/new_content/game/10_farewell/glider_wallbounce_left +{de545f84-effc-4211-b6e5-ecffe93189db} event:/new_content/game/10_farewell/glider_wallbounce_right +{825153d7-05f3-44b4-834c-fa2248bab331} event:/new_content/game/10_farewell/glitch_long +{b26ebe07-7db5-40d0-9282-2d1449db8c5a} event:/new_content/game/10_farewell/glitch_medium +{42d600c5-32c3-4433-8a1e-be394b30bcde} event:/new_content/game/10_farewell/glitch_short +{6fc73c45-4446-4114-b002-6dfeb92769d7} event:/new_content/game/10_farewell/heart_door +{67466be6-2fc8-4d0e-992e-0c882a8adf9a} event:/new_content/game/10_farewell/key_unlock_1 +{ce614f36-80cd-453a-8af8-3ba2c20c5a5a} event:/new_content/game/10_farewell/key_unlock_2 +{e4d013b8-4cd3-4cab-aec7-829d00c6307a} event:/new_content/game/10_farewell/key_unlock_3 +{324223a1-46c3-437e-9069-ed5059b47b95} event:/new_content/game/10_farewell/key_unlock_4 +{65131955-b8d6-4254-9fe9-ce9965b0f8c9} event:/new_content/game/10_farewell/key_unlock_5 +{d27aa340-38c2-46fe-9e45-83c4f6be9070} event:/new_content/game/10_farewell/lightning_strike +{9f711ad4-4561-47f1-ab99-938d1169b1ca} event:/new_content/game/10_farewell/locked_door_appear_1 +{7a366698-8474-4be8-83ab-be004cb6a2a3} event:/new_content/game/10_farewell/locked_door_appear_2 +{c2f181a5-e820-4e13-aa2d-ff902fab795a} event:/new_content/game/10_farewell/locked_door_appear_3 +{a4f824f9-22e8-4589-a9b9-0db1ad747fa3} event:/new_content/game/10_farewell/locked_door_appear_4 +{1c75f1cf-5825-42f1-b57f-5b5a5cefdedd} event:/new_content/game/10_farewell/locked_door_appear_5 +{17a8ef3e-78e8-430c-9cf4-995a121ef1fe} event:/new_content/game/10_farewell/pico8_flag +{711fa1d2-88c6-4f74-a650-fe7011e736fa} event:/new_content/game/10_farewell/pinkdiamond_return +{8aeeda91-d53c-409e-9f6b-37f8724ca79a} event:/new_content/game/10_farewell/pinkdiamond_touch +{cabdd646-45f5-4dbd-9cd2-898a99a794c4} event:/new_content/game/10_farewell/ppt_cube_transition +{b8e2f523-8fd3-444c-99aa-b45e5910fcda} event:/new_content/game/10_farewell/ppt_dissolve_transition +{43420008-de4c-4d1c-8f4b-15c4871e4354} event:/new_content/game/10_farewell/ppt_doubleclick +{35472fac-2f05-4eb5-8281-d929b5ce41bb} event:/new_content/game/10_farewell/ppt_happy_wavedashing +{c0b225c7-09c9-4ab7-a093-706c35d87598} event:/new_content/game/10_farewell/ppt_impossible +{55899a39-fc05-43d3-8878-834a4a25b6d4} event:/new_content/game/10_farewell/ppt_its_easy +{5c9780f7-de2d-4811-813e-f89201d92e35} event:/new_content/game/10_farewell/ppt_mouseclick +{445a96f2-982e-49d4-895a-19889e614955} event:/new_content/game/10_farewell/ppt_spinning_transition +{33a10afa-41bd-4534-8222-17e7947e9517} event:/new_content/game/10_farewell/ppt_wavedash_whoosh +{82f68918-aab7-4a13-a58a-05a318a8c32c} event:/new_content/game/10_farewell/puffer_boop +{495bbb28-2513-4698-8d54-fa114ff6722d} event:/new_content/game/10_farewell/puffer_expand +{355e716c-e169-4114-a223-a4e3156d23cf} event:/new_content/game/10_farewell/puffer_reform +{6fc9a437-3cb1-4455-b2e1-421eb885177c} event:/new_content/game/10_farewell/puffer_return +{2f7381e9-7264-4df3-8cff-84cc46b2d3d9} event:/new_content/game/10_farewell/puffer_shrink +{7867f29b-8e33-4e2e-8d56-00cf9211cadd} event:/new_content/game/10_farewell/puffer_splode +{026c5b8c-d51e-42df-a9bd-ae7b1e84f7b2} event:/new_content/game/10_farewell/quake_onset +{28caabf1-2b9d-480e-bcc2-5947a2398087} event:/new_content/game/10_farewell/quake_rockbreak +{a948d002-6935-4b70-92bf-39b7e43c56e0} event:/new_content/game/10_farewell/strawberry_gold_detach +{b0f9d304-0ba2-4858-b514-7620a56dda0b} event:/new_content/game/10_farewell/zip_mover +{3f2d120c-8b3f-4adf-b110-42388e8c5674} event:/new_content/music/lvl10/cinematic/bird_crash_first +{92aa23ba-8ab2-4448-aae6-67acbe73582b} event:/new_content/music/lvl10/cinematic/bird_crash_second +{3482e653-439f-46cc-8cbd-02abf456b0e4} event:/new_content/music/lvl10/cinematic/end +{0aab6c8a-4133-4265-8bad-098df594150f} event:/new_content/music/lvl10/cinematic/end_intro +{c188c18a-cede-4cca-b9c1-455f89a13ca8} event:/new_content/music/lvl10/cassette_rooms +{427b4b7d-22a7-4295-9f47-931b594b4daa} event:/new_content/music/lvl10/final_run +{c76a681f-24c9-48b2-b9c7-ca8bca24902e} event:/new_content/music/lvl10/golden_room +{4d1d9d21-9e89-405f-844f-070ae9d6611e} event:/new_content/music/lvl10/granny_farewell +{e296f495-1041-400e-9c31-c59ef318e7b7} event:/new_content/music/lvl10/intermission_heartgroove +{c6c1c7be-a5a5-4654-8e6f-15aed6a96847} event:/new_content/music/lvl10/intermission_powerpoint +{f7e0cc43-4a57-49ee-a114-7d9d1e40b198} event:/new_content/music/lvl10/part01 +{af7a6f63-887d-4508-b54e-ff4e4f296ae1} event:/new_content/music/lvl10/part02 +{57cceb1a-e169-43f4-802c-d41992ec6926} event:/new_content/music/lvl10/part03 +{8023c811-1142-42b8-8789-cbf1221c5c81} event:/new_content/music/lvl10/reconciliation +{2133d394-da16-49a5-82d2-59dfabecf762} event:/new_content/ui/postcard_variants_in +{f065adf0-963d-4d3e-a4fe-1538154936f7} event:/new_content/ui/postcard_variants_out +{4c875fde-bab4-4ddf-a32b-1a098a44e2a1} event:/new_content/ui/rename_entry_accept_locked +{b3639ef6-f73d-4ae0-a8c7-8edb94279868} event:/new_content/ui/skip_all +{7d16c138-146a-4337-97b7-777ec6146448} event:/new_content/timeline_bubble_to_remembered +{b5fd173e-9a58-4412-9be1-094108b82157} event:/state/cafe_computer_active +{d85a0635-cbcf-4ba3-8466-b6e24aa45894} event:/state/underwater +{c4d2289a-859e-42e9-ba38-eee1791a3a62} event:/ui/game/chatoptions_appear +{dd4cb027-0132-4039-9303-c9ad8589683e} event:/ui/game/chatoptions_roll_down +{1b030b2e-c125-40d5-b582-5819c6c29584} event:/ui/game/chatoptions_roll_up +{bc008f9e-76c5-42d5-b2f0-574cb7dacf6f} event:/ui/game/chatoptions_select +{632ed69e-ef16-4824-8aaf-8e01aad17cce} event:/ui/game/general_text_loop +{903b26bf-ad0c-40a2-b53f-f2a08b50ae4f} event:/ui/game/hotspot_main_in +{4684b7e3-ac7e-40c0-a242-822dbd84326e} event:/ui/game/hotspot_main_out +{07defb47-8579-4c47-9528-289e7a758553} event:/ui/game/hotspot_note_in +{3f531057-7752-4e5a-a782-82ad7428ac70} event:/ui/game/hotspot_note_out +{44a55198-a0bd-4e72-baba-5654142dccef} event:/ui/game/increment_dashcount +{ea92919d-46d8-411e-82f6-b36c79d96c72} event:/ui/game/increment_strawberry +{b086c73f-8ceb-4bea-b569-bdd561e32ccf} event:/ui/game/lookout_off +{defdc0d5-8ae6-47e4-8970-29f12a66fe66} event:/ui/game/lookout_on +{6e6a7734-f98c-45cf-930f-61c51f193827} event:/ui/game/memorial_dream_loop +{037333ef-5916-4131-a76c-77b8d31c21cd} event:/ui/game/memorial_dream_text_in +{c3ddcdec-04ff-43b0-8103-ba0f0841c550} event:/ui/game/memorial_dream_text_loop +{78a27ccb-8b29-41e9-aa60-20e4d193f41d} event:/ui/game/memorial_dream_text_out +{27c68b11-4893-406e-8a68-2c7cf6a7ae0d} event:/ui/game/memorial_text_in +{12f81211-c72f-44f7-951c-4884bea99668} event:/ui/game/memorial_text_loop +{812275c5-1e5a-4d69-98e1-f7892c4bb440} event:/ui/game/memorial_text_out +{c6311b80-2ae7-4155-80f1-d3e2713efaa3} event:/ui/game/pause +{7858a8e8-adf9-40a6-8e14-e337a6979e53} event:/ui/game/textadvance_madeline +{b26824d6-39fe-4d09-9d83-ebdcbb29ba6b} event:/ui/game/textadvance_other +{38079a52-37cc-421f-a9d1-2b0f0222e779} event:/ui/game/textbox_madeline_in +{8a79d85e-2889-4b7f-8d52-b46381392b8b} event:/ui/game/textbox_madeline_out +{651eff96-de48-4c77-b069-bd718be76cff} event:/ui/game/textbox_other_in +{3b6c0f9a-9399-4af4-8443-d1bf6544869a} event:/ui/game/textbox_other_out +{ca812d95-eb8b-4ebd-a04b-e424704c17f2} event:/ui/game/tutorial_note_flip_back +{0c739c5d-67d7-4d95-861d-cc0d64892a1d} event:/ui/game/tutorial_note_flip_front +{6096b41c-7b56-4839-ad53-deb9e5693246} event:/ui/game/unpause +{59883fc3-7f79-422e-927d-1c1374123356} event:/ui/main/assist_button_info +{dd53a3ab-bc60-4da3-996d-5fc6b83483dc} event:/ui/main/assist_button_no +{7c65f68d-623c-42f1-94bd-4e2d59199d32} event:/ui/main/assist_button_yes +{3fd21d57-8fb5-4107-8d03-2048428bc2fc} event:/ui/main/assist_info_whistle +{1c2d9b78-9172-44db-a205-15b3cd91191e} event:/ui/main/bside_intro_text +{fe9c58fa-d60a-4644-b34d-c0c4ebac2486} event:/ui/main/button_back +{a3b25ad0-f493-4fd1-a31f-40b07f739225} event:/ui/main/button_climb +{b6aad0d5-cc07-46f4-ab3a-3b3692a57678} event:/ui/main/button_invalid +{8a93c5a5-538c-49f6-9d07-988839862ba1} event:/ui/main/button_lowkey +{cf18e899-f774-47e2-b72c-5252231fd47c} event:/ui/main/button_select +{aceb1345-a4e8-4bc5-a872-bb421573f59c} event:/ui/main/button_toggle_off +{dcef4547-0df6-4b2c-9a70-3aa537982264} event:/ui/main/button_toggle_on +{c0e02b41-0977-4813-a592-a2a98242b153} event:/ui/main/message_confirm +{c46d3981-3581-4b29-b3f8-d64ab072709e} event:/ui/main/postcard_ch1_in +{ffcabe42-ca8e-4460-95cb-14e528caebd7} event:/ui/main/postcard_ch1_out +{1210af0a-7e91-40af-a33c-d3fd2601ae54} event:/ui/main/postcard_ch2_in +{ddf70f5d-bd79-46da-ab2e-35d8795aab78} event:/ui/main/postcard_ch2_out +{55dfbf00-cc82-4781-b0e3-4f83a8a3fdb1} event:/ui/main/postcard_ch3_in +{468d3c98-0643-43eb-aedc-4cd3775a745c} event:/ui/main/postcard_ch3_out +{4cc4fcce-dbbc-4ffa-946d-8823ae5b1c56} event:/ui/main/postcard_ch4_in +{9920201a-f44f-464c-ad36-26934ed4b557} event:/ui/main/postcard_ch4_out +{90a158fb-009e-4cc1-9e4b-ba1ca47c05d9} event:/ui/main/postcard_ch5_in +{ab60fd25-5612-425c-bcdd-3e57a6c612bf} event:/ui/main/postcard_ch5_out +{590d1629-f340-4c4e-aee7-310f78d2c441} event:/ui/main/postcard_ch6_in +{ae32b875-534a-43de-a8bf-59d802dfb98b} event:/ui/main/postcard_ch6_out +{753b8bdc-2b0a-443a-ae37-94f321d71932} event:/ui/main/postcard_csides_in +{c74741a2-3b04-4ae8-9953-bc2bb485d643} event:/ui/main/postcard_csides_out +{cffad095-d6a7-4c91-b263-74bec658f1d8} event:/ui/main/rename_entry_accept +{9e499f93-8f88-4450-ae82-54887bb5e3ba} event:/ui/main/rename_entry_backspace +{a71ecb95-b025-4b35-8a2c-fe0cd6f68e95} event:/ui/main/rename_entry_char +{d389ba5d-76cf-4634-a763-d60d23c07cb1} event:/ui/main/rename_entry_rollover +{44e7e56e-3d7c-48e4-a1ae-a01de2685a81} event:/ui/main/rename_entry_space +{fb6ae8ab-4c41-4d90-8d2b-61a45e0a33e8} event:/ui/main/rollover_down +{987ab0da-0575-4f22-a0bc-7dd7a3a60769} event:/ui/main/rollover_up +{ef525bd4-4d18-479c-b651-56cd3699e478} event:/ui/main/savefile_begin +{c649a587-9eb6-4ba6-bafc-de133aeea2c5} event:/ui/main/savefile_delete +{ac7e055f-0a4d-4862-9032-88a8cd9e8322} event:/ui/main/savefile_rename_start +{83577bfc-85e1-444f-8c60-97ad3f3092a5} event:/ui/main/savefile_rollover_down +{b99d10cb-deb7-4b29-978b-912f929a5872} event:/ui/main/savefile_rollover_first +{15e11635-109d-417e-8424-2821f91f8020} event:/ui/main/savefile_rollover_up +{6d72de1a-04fe-4be5-826b-5576002c277f} event:/ui/main/title_firstinput +{4c808f23-d04c-49eb-9195-a9e324b57add} event:/ui/main/whoosh_large_in +{918e9353-b7fb-4d65-9bab-7e21facb3231} event:/ui/main/whoosh_large_out +{0e6af11e-69f3-4a92-b762-7421c912c3d6} event:/ui/main/whoosh_list_in +{efa0d333-7ee5-46ce-b457-b99997659215} event:/ui/main/whoosh_list_out +{03c233f3-c314-4560-8d48-a237b0b41c4a} event:/ui/main/whoosh_savefile_in +{38993101-6a7d-4344-bb63-69face96fd3a} event:/ui/main/whoosh_savefile_out +{02c8ac12-1389-44b9-8db8-1df0bd5b09b6} event:/ui/postgame/crystal_heart +{131dc336-4229-44d3-873f-e435fb501faf} event:/ui/postgame/death_appear +{26999d37-f12e-4b55-b82e-c26c02fcb288} event:/ui/postgame/death_count +{1ebd2b11-e6c4-4cc8-bb94-523470bda7b6} event:/ui/postgame/death_final +{44a2d3fc-e727-4ed4-8907-535d11f81e3e} event:/ui/postgame/goldberry_count +{426469e9-5e87-46e9-8b9d-bc2ae055c7b7} event:/ui/postgame/strawberry_count +{628514bb-19b3-4498-b365-4434988a1478} event:/ui/postgame/strawberry_total +{de75e71a-61d2-4a5c-94fe-96d0127fab02} event:/ui/postgame/strawberry_total_all +{ff2a6fb9-87b0-4de2-bd85-2d477f338d7c} event:/ui/postgame/unlock_bside +{704b695d-3513-449d-88eb-e29fc7622990} event:/ui/postgame/unlock_newchapter +{7fc9d8e3-08e2-43b8-9a9c-74f51be9a206} event:/ui/postgame/unlock_newchapter_icon +{6388ebe4-7ccd-46ad-b60d-7a85d7e5aceb} event:/ui/world_map/chapter/back +{4a191f4f-da31-43ec-bf30-f8ff8de7feed} event:/ui/world_map/chapter/checkpoint_back +{8c12045b-63ea-4faf-845c-49f6671595c2} event:/ui/world_map/chapter/checkpoint_photo_add +{40c88bb1-a035-4e54-90e1-fc879d1bf42b} event:/ui/world_map/chapter/checkpoint_photo_remove +{b5eab944-3bb1-4537-81f8-36cc0768539c} event:/ui/world_map/chapter/checkpoint_start +{08853c84-022c-4432-b99f-8894748ea056} event:/ui/world_map/chapter/level_select +{2bc690b2-830d-4fee-9960-5e9c158a07c1} event:/ui/world_map/chapter/pane_contract +{811a5ad1-89a4-4e2f-b6ee-20665c9ebde9} event:/ui/world_map/chapter/pane_expand +{d947ef25-1335-4e74-9675-7f91beb1df80} event:/ui/world_map/chapter/tab_roll_left +{6f553704-eb86-4407-91b5-c6e9714f398c} event:/ui/world_map/chapter/tab_roll_right +{f6ac20d0-ea9e-4cee-a4aa-a8b30bf3d745} event:/ui/world_map/icon/assist_skip +{7009f879-18fe-4b01-b78d-f4ef5bc66cb2} event:/ui/world_map/icon/flip_left +{c1f648bf-d9b1-455c-a3dd-b92bcce571c6} event:/ui/world_map/icon/flip_right +{687c2393-d73e-4247-a97b-4f2c2ccce388} event:/ui/world_map/icon/roll_left +{14563914-60ff-43cc-bc2e-d5766cc30964} event:/ui/world_map/icon/roll_right +{939f9872-0a8e-4cac-bf5e-12df3729da5f} event:/ui/world_map/icon/select +{0623a8c0-4454-4c71-9804-ecb030c4eb50} event:/ui/world_map/journal/back +{bbc37507-2859-4dd7-bbe5-7e6209214e03} event:/ui/world_map/journal/heart_grab +{85f626c3-7607-416c-b0ae-ddd0ed804755} event:/ui/world_map/journal/heart_release +{4ed2243f-db33-4095-97fd-800825c5a26d} event:/ui/world_map/journal/heart_roll +{d76b642b-3a69-4960-bfe3-2146b1654e5c} event:/ui/world_map/journal/heart_shift_down +{789aa61b-6d4a-4f93-92f0-bcc17c4c46c6} event:/ui/world_map/journal/heart_shift_up +{481d0322-28da-4d44-977a-cc140ff7c609} event:/ui/world_map/journal/page_cover_back +{2e990fd4-2c29-4527-8968-e47ff4006e81} event:/ui/world_map/journal/page_cover_forward +{b8f82543-3aed-4e88-8256-7b7b1bfafa2f} event:/ui/world_map/journal/page_main_back +{8da57015-c10e-4ce5-8e6b-82af4b7e73b9} event:/ui/world_map/journal/page_main_forward +{8a991cbf-dda9-4121-b960-d8bd790f5daa} event:/ui/world_map/journal/select +{309df40a-ed6b-46cc-b6a0-b1ddf5814ac8} event:/ui/world_map/whoosh/1000ms_back +{06eddf29-f6ea-43c4-a5a5-5e06c1c5bb61} event:/ui/world_map/whoosh/1000ms_forward +{25e6e3fa-ff02-440e-ac63-c83c3ad1efaf} event:/ui/world_map/whoosh/400ms_back +{c3640c55-8e89-4437-84ce-e0a3c1770575} event:/ui/world_map/whoosh/400ms_forward +{362e549d-25f0-4a5b-9c83-796e9ed389db} event:/ui/world_map/whoosh/600ms_back +{a5fff838-6687-4506-b03f-e5b16bb6ae84} event:/ui/world_map/whoosh/600ms_forward +{6f54f0d1-61d4-442e-8bf7-4dfbf6870c07} event:/ui/world_map/whoosh/700ms_back +{ca8ffe65-72eb-4fb3-9c3d-27fef47bc3d1} event:/ui/world_map/whoosh/700ms_forward +{2dca99b6-dcf5-40e6-8cd1-c72f97d364cd} event:/ui/world_map/whoosh/900ms_back +{21a98c43-8e79-4b8a-8963-a269735f3989} event:/ui/world_map/whoosh/900ms_forward +{ea595d6d-cb07-4897-81cb-4830bf5823cb} event:/!!!_README_FIRST +{c7aad72f-9796-42d3-980b-d093fd765716} bus:/ +{aac396d1-a63f-418a-810a-5d5a59fb2c43} bus:/gameplay_sfx +{2677ced7-94e4-44e2-9f5a-74aaeda5ab63} bus:/gameplay_sfx/ambience +{69a539a8-37d8-4e24-979b-291077c574a9} bus:/gameplay_sfx/ambience/00_prologue +{ca9f4472-47c9-4528-b4a7-0367eef8b734} bus:/gameplay_sfx/ambience/01_forsaken_city +{9e955e67-8d57-413c-a8ff-a52760f97355} bus:/gameplay_sfx/ambience/02_old_site +{24502313-f693-41bd-8fbb-b570e73b730d} bus:/gameplay_sfx/ambience/03_resort +{82beff30-ccff-40bf-9e07-5a1cd2978856} bus:/gameplay_sfx/ambience/03_resort/main +{8801307f-ec10-47f5-b1e6-bd4209b925a5} bus:/gameplay_sfx/ambience/03_resort/pico8_room +{537a0457-23d1-4dfa-84ee-a9a0a89091f0} bus:/gameplay_sfx/ambience/04_cliffside +{52d79f87-b8ae-49f8-9b8f-0623798fe5c0} bus:/gameplay_sfx/ambience/05_mirror_temple +{d0d5e0b6-9ffd-4f74-b865-f1f2be77d3b3} bus:/gameplay_sfx/ambience/06_reflection +{2d22a1f7-3d3f-443a-9f5c-b3af2c719942} bus:/gameplay_sfx/ambience/07_summit +{cefe7684-2923-468f-b00b-c5983937e33c} bus:/gameplay_sfx/ambience/09_core +{a98d0a0f-3a46-4300-b387-c39f0db5d47e} bus:/gameplay_sfx/ambience/10_farewell +{ddb5ed22-a8d2-4142-ba12-5bd032527511} bus:/gameplay_sfx/ambience/10_farewell/cafe_sign +{1394d383-dd5e-4772-abcd-5780e97a8ee3} bus:/gameplay_sfx/ambience/10_farewell/electricity +{fab12ece-124b-4bca-98d5-6ad4320118b0} bus:/gameplay_sfx/ambience/10_farewell/kevinpc +{992ed3aa-96d9-4f83-ac2f-3af5ac4a32db} bus:/gameplay_sfx/ambience/10_farewell/10_space_remembered +{71710caf-9227-413f-ac6a-261cf6e0cb5b} bus:/gameplay_sfx/ambience/shared_local +{8087939b-55de-4834-a7ec-2b62741a1099} bus:/gameplay_sfx/ambience/shared_local/campfire_loop +{520daa59-6d74-4eef-8d67-5c50d55bebd8} bus:/gameplay_sfx/ambience/worldmap +{db469001-f950-40b8-b411-2a1d327b3ce6} bus:/gameplay_sfx/berries +{bc43e82f-8373-4a3c-b676-5ef48f674f2e} bus:/gameplay_sfx/berries/1000s +{15f0abc3-40c1-4812-b526-303e80fe2175} bus:/gameplay_sfx/berries/2000s +{affd9e52-b032-49cb-acd6-4221f642f2e6} bus:/gameplay_sfx/berries/3000s +{ebd67fc6-0745-4b6e-afa8-2fa389df52e1} bus:/gameplay_sfx/berries/4000s +{2a8fc7b0-907d-46dc-919a-225a1258ebb8} bus:/gameplay_sfx/berries/5000s +{060010db-a9d6-41e0-b1fc-7af651b896b5} bus:/gameplay_sfx/berries/6000s +{d3031014-2f55-4036-904a-070ba37ba6df} bus:/gameplay_sfx/char +{9b8177d0-ae29-4cb1-93e6-c584b54b3804} bus:/gameplay_sfx/char/badeline +{91c7b130-9c0a-4cb2-bf01-26313faa39f9} bus:/gameplay_sfx/char/dialogue +{357a43e8-4c3d-4321-9116-1941d532be68} bus:/gameplay_sfx/char/dialogue/phone_static +{06222055-39e3-43b4-a9db-520a4ab66fbc} bus:/gameplay_sfx/char/dialogue/speech +{3828f323-8e89-4c34-b0fe-6c403cb6606b} bus:/gameplay_sfx/char/granny +{7bd1184c-7ddc-4175-bc87-a2b111b031a9} bus:/gameplay_sfx/char/madeline +{c4112d32-cfdc-4926-82a6-68afc89d352e} bus:/gameplay_sfx/char/oshiro +{99c3166e-4555-4140-b041-0a237a13fca7} bus:/gameplay_sfx/char/theo +{1ea7af9f-bcac-4a3e-8e2a-66cc1e04e9eb} bus:/gameplay_sfx/char/tutorial_ghost +{3fdf5514-61e2-4c69-9fa7-5cd0a627fc16} bus:/gameplay_sfx/classic +{1156896d-4cbe-4f11-ad91-44626753f14a} bus:/gameplay_sfx/classic/pico8_verb +{0dfbeb74-7020-4dfa-9cc8-fa85dd157aa1} bus:/gameplay_sfx/game +{6e4f0c21-c551-48a4-828e-b7ea3816b42d} bus:/gameplay_sfx/game/chapters +{55e7d588-47a3-441a-add3-f8a793212d75} bus:/gameplay_sfx/game/chapters/00_prologue +{5820993d-7e39-4b2a-a2e7-9cd902543ad1} bus:/gameplay_sfx/game/chapters/01_forsaken_city +{54bd4bc0-f511-416f-8629-a7abba53f460} bus:/gameplay_sfx/game/chapters/01_forsaken_city/birdbros_finish +{2ce9652c-a647-4e5d-b74a-b36ea60715d9} bus:/gameplay_sfx/game/chapters/01_forsaken_city/console +{30890542-6efc-4ea9-927e-3ca0c3b97d95} bus:/gameplay_sfx/game/chapters/02_old_site +{cd8aa47e-bd24-45e3-808c-a0d546f9a915} bus:/gameplay_sfx/game/chapters/03_resort +{bc44100e-d99c-401f-92a3-38ee8dd8e8ae} bus:/gameplay_sfx/game/chapters/03_resort/clutterswitch_presses +{33443f80-8d51-4756-b504-16cac32901ad} bus:/gameplay_sfx/game/chapters/03_resort/key_unlocks +{130cca3c-25f1-4e3f-a26a-d604b2a1bf58} bus:/gameplay_sfx/game/chapters/04_cliffside +{3420193e-c3db-4417-9232-4cf3ebb0d18c} bus:/gameplay_sfx/game/chapters/04_cliffside/gondola_halted +{b62be6ff-22a2-4c54-986c-0734a819f8f1} bus:/gameplay_sfx/game/chapters/04_cliffside/gondola_verb +{7eab4c86-6346-457f-a497-c4464651f92c} bus:/gameplay_sfx/game/chapters/05_mirror_temple +{60223204-af0c-42e2-a281-29ce5cad5edc} bus:/gameplay_sfx/game/chapters/05_mirror_temple/room_lightlevel +{913b4578-2371-417d-a413-90806a14a9c8} bus:/gameplay_sfx/game/chapters/06_reflection +{f2bd3dc2-e8ec-4ac6-b3b4-4810b47bb8d7} bus:/gameplay_sfx/game/chapters/07_summit +{327f796b-864b-45f9-9991-839720ec7108} bus:/gameplay_sfx/game/chapters/09_core +{2219f267-26c7-4a3c-bc90-148c7cb385c9} bus:/gameplay_sfx/game/chapters/10_farewell +{1290bf60-75df-4063-a36d-1f89c688a282} bus:/gameplay_sfx/game/chapters/10_farewell/bird_wingflaps +{05e910f2-4e6d-4f1d-a82d-014519b4667f} bus:/gameplay_sfx/game/chapters/10_farewell/cafe_computer_amb +{a40f9839-9900-436a-b1ab-566f86dfde57} bus:/gameplay_sfx/game/chapters/10_farewell/cafe_computer_sfx +{5e4eb968-5e09-4be0-bef0-76c2fc17b546} bus:/gameplay_sfx/game/chapters/10_farewell/cassette_room_cymbals +{c56ef299-cdcd-4782-a645-c8ba138ae994} bus:/gameplay_sfx/game/general +{6e3ad52b-f7d9-482d-8970-c157ebc1d716} bus:/gameplay_sfx/game/general/no_pause +{80173d30-4942-4abb-81e7-999ad33a9c18} bus:/gameplay_sfx/game/general/yes_pause +{34514772-f9f0-4a83-8fe7-2757c9206fe0} bus:/gameplay_sfx/game/general/yes_pause/birds +{dac56484-a3d4-47be-8c8e-38ecce68acc8} bus:/gameplay_sfx/game/general/yes_pause/crystalhearts +{8842a7ec-7a4c-432c-be20-64074839636d} bus:/gameplay_sfx/game/general/yes_pause/crystalhearts/fakeheart +{d001d4bf-94bd-4842-bd12-c8d07686ecf3} bus:/gameplay_sfx/game/general/yes_pause/secret_revealed +{ad993587-e7fc-427f-95b0-3a8204f772a7} bus:/gameplay_sfx/game/general/yes_pause/strawberry_pulse +{ab63552e-0d56-46cb-82f3-277df8c07c7b} bus:/gameplay_sfx/game/glitches +{cf6c699a-44d0-402c-ae02-e2e0a46cb94a} bus:/gameplay_sfx/golden_room_flavour +{eb29e2c4-d8fe-47ed-9d8a-490d0c656466} bus:/gameplay_sfx/granny_clouds_dialogue +{9bebdba3-d621-4355-9273-df3368b27182} bus:/gameplay_sfx/kevinpc_verb +{74728fec-f0ab-42ad-aeb9-03d95a119e42} bus:/gameplay_sfx/prologue_verb +{d457df36-9eb7-45c7-a624-6e74d6f10ec9} bus:/gameplay_sfx/sfx_in_space +{c66382b2-56ff-461e-8062-7f881794db85} bus:/music +{2cf5046e-8b34-4d1e-9bde-cb34c2c82607} bus:/music/stings +{035161f3-528e-4896-9238-683d2f3d60f1} bus:/music/tunes +{ae8c943a-7d3c-4e7f-a225-e98315a401e4} bus:/music/tunes/cassette +{2dce7e88-a742-4150-94ed-516b68f6c7d0} bus:/music/tunes/classic +{7429d822-1e68-4251-9907-6d4e8d14a82e} bus:/music/tunes/mains +{e4123d5a-7c10-4871-bbfb-72c4fd63f2ee} bus:/music/tunes/mains/dlc +{598cd199-b5f0-49f5-ba6b-3a2f5ef1de25} bus:/music/tunes/mains/dlc/heartgroove +{8ca23161-65dd-4d81-a97c-003d515b3062} bus:/music/tunes/mains/dlc/part01 +{b2c12b19-7dc1-4872-90da-653b17ebd258} bus:/music/tunes/mains/dlc/part02 +{b5df4708-d694-4a66-86a4-80f50b898f92} bus:/music/tunes/mains/lvl0 +{ef97f0b1-3bc4-4f64-aa42-84cd819b75be} bus:/music/tunes/mains/lvl1 +{24ffc423-525a-4e57-a96a-a392cf455198} bus:/music/tunes/mains/lvl2 +{0a5ea434-cec4-4b65-9f8c-733a13ac4e86} bus:/music/tunes/mains/lvl2/beginning +{7f93dae5-d646-46a5-ae9d-561b4ea5b4d8} bus:/music/tunes/mains/lvl2/beginning_verb +{dd297a42-ca69-42b2-8a75-81bc2c076773} bus:/music/tunes/mains/lvl3 +{281fbfae-927e-4dd8-a3b7-90d51b0fcd03} bus:/music/tunes/mains/lvl4 +{2d452462-5099-4832-9c7b-6244168969f8} bus:/music/tunes/mains/lvl5 +{8bd3048f-79b5-47bd-b697-ded53096b69a} bus:/music/tunes/mains/lvl5/eye_mains +{ea09e719-2d63-4cfa-90b1-7bc68aa0fb89} bus:/music/tunes/mains/lvl5/eye_pulse +{d10b0171-eaf7-4c53-9d55-d05d1bc34e03} bus:/music/tunes/mains/lvl5/torch_arp +{898234ab-6340-4783-9dda-de3e6a4b1c58} bus:/music/tunes/mains/lvl6 +{b3c415b6-811f-43cf-a1f5-4f979596f23f} bus:/music/tunes/mains/lvl7 +{6a55c92f-3eba-4f8c-b8cf-d70c7e200cb4} bus:/music/tunes/mains/lvl8 +{e4b86f10-cdb3-4394-8aba-4aefd2628607} bus:/music/tunes/mains/lvl9 +{dc7b136f-f266-48a1-a0ce-34938c4da9be} bus:/music/tunes/mains/layer_verbcontrol +{f81bdbae-62d5-467b-8f64-608c3c625282} bus:/music/tunes/remix +{af0b4601-5e4b-4580-afb8-ce641dcea598} bus:/music/tunes/remix/02_old_site +{33f0d1af-cd28-4272-a966-89189763d3c1} bus:/music/tunes/side_rooms +{fad3f5c6-a940-4180-8133-53243e1a6eb3} bus:/music/tunes/side_rooms/golden_room +{33116628-46c3-4bfd-9ca6-a4a152fb9ef2} bus:/music/tunes/side_rooms/ppt_content +{1ff13d10-7ecd-46fd-9140-2e67c33c217e} bus:/music/tunes/cassette_previews +{8abc7179-c5ff-48ff-85fd-73ba46b14ed3} bus:/music/tunes/pico8_mus_verb +{59256484-66d5-4ec4-9639-208cf82dfcbf} bus:/ui_sfx +{b8b28cf3-de11-4a37-ace3-02999b659e63} bus:/ui_sfx/game +{e8a05ec7-a764-4f64-aac4-4a7f3ba3e4b9} bus:/ui_sfx/rename_piano +{724d852b-c1ab-4aa4-b2b1-c13d3b299928} bus:/ui_sfx/worldmap_whoosh +{fda3f2a1-d68f-44e7-b701-10e208d3e7dc} bus:/ui_sfx/rename_verb +{45e94b3e-40aa-4719-a33e-8fdd3336bd63} bus:/Reverb +{de538080-4e35-4fae-ba40-6635b9a31bae} bus:/Reverb_Dash_Assist +{64ceaf84-8717-4592-80ab-6f3d75b5a276} vca:/gameplay_sfx +{277f4614-fa32-411a-addd-618b460440f8} vca:/music +{8d7cf364-00af-4b77-8298-c64b484c5ea4} vca:/ui_sfx +{35a38d70-5255-4def-a24c-38d4b432bc7b} snapshot:/music_all_mute +{5b5b6aa0-ca7b-4149-acc6-8e39d8e40cf9} snapshot:/music_mains_mute +{e45a0ce7-66cd-46e7-87bd-f403fd07c6f4} snapshot:/pause_menu +{bce88c97-680c-409d-8ebe-a1133d014d9b} snapshot:/music_secretrevealed +{c2361c39-b90d-4bc4-b168-c4134201a468} snapshot:/dialogue_in_progress +{69755b6c-ec19-4fd8-8db3-3cd08aaf87a1} snapshot:/game_03_clutterswitch_moment +{b3536257-a5f6-4424-92c2-c1b2dda22d72} snapshot:/mus_lvl1_verbtransition +{4c5628e7-adc7-4f0e-a060-82a919c16948} snapshot:/game_00_prologue_amb_down +{34a72406-5330-4cd8-a826-a00d559a0b2e} snapshot:/game_00_prologue_amb_off +{36956a3c-c731-43e9-903e-598f3ec922a0} snapshot:/underwater +{1ab40160-5839-4d5b-8b1d-e0a6bd83347d} snapshot:/game_02_dreammemorial_fade +{8a7f5b1b-7f61-4772-bd14-7de5aafbd44a} snapshot:/game_00_verb +{481f2201-8ce0-43b2-9f3a-bc51cb2b1de2} snapshot:/game_04_gondolafeather_main +{259cebd0-0338-4527-9b41-af852a325cd1} snapshot:/game_04_gondolafeather_verb +{05fa7a5e-2a5c-4750-944c-ed3ea46c2e64} snapshot:/char_granny_laughs_down +{a946aeab-8328-4a84-a58c-4e76700c32a8} snapshot:/env_worldmap_down +{386f6f68-a0da-4c9c-a51a-5aa8d8deea46} snapshot:/game_05_torch_arp +{93cf42c4-26a2-4f75-bd42-8ad29455d171} snapshot:/boss_pitch_sfx +{19948c40-9c7c-4b8a-8dc8-66824fd99eb9} snapshot:/music_reflection_secret +{51370088-3349-4bd9-8ef8-21e646482678} snapshot:/env_allamb_down +{3b704b9e-58b1-4522-8936-0f74cfca567e} snapshot:/game_03_pico8room +{da7d5bb5-c1ec-43df-a92c-a2986bcb978f} snapshot:/game_05_eyedeath +{6b16607b-8e2f-4b79-a1e5-339e589e6919} snapshot:/game_05_mus_pulse_controller +{d8e12b32-0f5a-4897-8bde-7be2012a0924} snapshot:/game_03_oshirofreakout +{22902dd7-41fe-4617-9412-e928455e3d4b} snapshot:/game_gen_crystalheart +{f2738ff2-989f-40bc-8421-a976ba8e49e2} snapshot:/game_05_eyedistance +{c6fa6b4e-5c95-4f3d-8616-385bc8e6f703} snapshot:/game_01_birdbros_finish +{061649d4-7a37-483d-bcd3-70793d8fcdb2} snapshot:/mus_cassette_amb_down +{1829469a-4c2d-4f04-a2b6-8a528987e9a9} snapshot:/game_10_in_space +{df897601-d549-4868-85a2-51ceca90b5df} snapshot:/game_10_final_boost +{859952f9-2a6f-47b2-855b-7fdc9678c9f4} snapshot:/game_10_cafe_computer_active +{2ef4067b-f330-40b8-ab59-15280643ba2d} snapshot:/game_10_glitch_active +{7ea9a03b-ea60-4a15-be33-26a7a9423b63} snapshot:/game_10_inside_cafe +{658d9ddb-30a9-4a55-bd62-d730d793ec83} snapshot:/game_10_amb_voidspiral_active +{9ae549ff-5ba1-4ec1-aec8-ee17190a2d08} snapshot:/game_10_granny_clouds_dialogue +{45db5a63-5d6d-4c3c-9c0c-d9924542b762} snapshot:/game_10_golden_room_flavour +{5955bc4d-e3b4-4663-a676-bdaf632c0d78} snapshot:/game_10_bird_wings_silenced +{97b29aac-da8d-4a14-9aa1-8fbdc80d4672} snapshot:/game_gen_large_berry_get +{f14989bf-0210-48f2-88ab-45fb0c662318} snapshot:/game_10_goldenroom_death_fix +{3a534bf9-d4cd-43ce-b2f1-a63b24452b46} snapshot:/game_10_kevinpc_verbtransition +{45a77b82-31db-4b49-84c5-c93bff634316} snapshot:/game_10_kevinpc_sendcontrol +{b0d8db78-996f-45db-ba9e-85f1dcb6b3fd} snapshot:/game_10_BIR_music_part02 +{973c602d-8504-457b-853f-43107629197b} snapshot:/game_10_BIR_sfx +{1125cef8-d475-441c-b76b-fe4bdb43aa42} snapshot:/game_10_BIR_music_part01 +{03db7333-40ef-44fe-83cb-7e650abdb49c} snapshot:/game_gen_dash_assist_active +{df75cc48-86f4-4adf-91d7-d50d708f5c75} snapshot:/assist_game_speed/assist_speed_90 +{feedddf6-0cfd-4e09-bd66-d1259261651e} snapshot:/assist_game_speed/assist_speed_80 +{4d899a40-a5f6-4ea0-ae36-1f5b15238747} snapshot:/assist_game_speed/assist_speed_70 +{ab9f20ac-e1fa-4ed7-9d7c-19ad254a2d28} snapshot:/assist_game_speed/assist_speed_60 +{434bc162-0111-4667-a5bd-a5327b21e422} snapshot:/assist_game_speed/assist_speed_50 +{401f67f5-af7d-4b5d-a7fd-e7d30583a9a8} snapshot:/variant_speed/variant_speed_120 +{3637f3f7-d1d0-495f-beea-8e13fb5cc4a8} snapshot:/variant_speed/variant_speed_140 +{a7e8f688-585b-4660-a43e-60875c42921a} snapshot:/variant_speed/variant_speed_160 +{d7f19e36-26eb-4630-a934-9f2f1924e3ee} snapshot:/berry_cooperation/1000s_down +{85104a93-1b84-443c-b44b-034b2aaa643b} snapshot:/berry_cooperation/2000s_down +{641d4a72-8e6e-41a8-8f3d-b28219bd4cd7} snapshot:/berry_cooperation/3000s_down +{365efe2d-29e7-4d45-988e-451406863f9a} snapshot:/berry_cooperation/4000s_down +{1aa61ee8-68fc-4c62-9a54-35743044bafe} snapshot:/berry_cooperation/5000s_down +{5044f438-f2ba-41ac-8609-855b8133e867} bank:/avali_skinsounds +{a327f717-e8b5-4fb0-b4dd-84bd8a585fe0} bank:/dlc_music +{e85b3c9e-428d-41b7-82c0-37814f3cbf15} bank:/dlc_sfx +{7916fdbf-1253-451d-a369-6dfd34341e4e} bank:/music +{98263171-3ea2-482b-abb7-9af01e4c002a} bank:/sfx +{f0efde81-92ec-4f1a-8b48-815f4d8a3255} bank:/ui +{f42d1384-f9ea-4ba4-9e08-a4d067c55b3b} bank:/Master Bank diff --git a/AvaliSkin.dll b/AvaliSkin.dll new file mode 100755 index 0000000000000000000000000000000000000000..aa72db0328c7ccf6840215647bc1c0c8debf1ca7 GIT binary patch literal 26624 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 F_yWbCih}?E literal 0 HcmV?d00001 diff --git a/Graphics/Sprites.xml b/Graphics/Sprites.xml index 428b3fd..42a7448 100644 --- a/Graphics/Sprites.xml +++ b/Graphics/Sprites.xml @@ -1,192 +1,192 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cbe5ad1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,437 @@ +Attribution-NonCommercial-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/SourceCode/AvaliSkinModule.cs b/SourceCode/AvaliSkinModule.cs index d955711..09cbd71 100644 --- a/SourceCode/AvaliSkinModule.cs +++ b/SourceCode/AvaliSkinModule.cs @@ -1,278 +1,429 @@ -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; -using Monocle; -using System; -using MonoMod.Cil; -using MonoMod.Utils; -using System.Collections.Generic; - -namespace Celeste.Mod.AvaliSkin { - // This code was built off of max480's code for the Pro Banana Skin. - // Other mods I referenced include SkinModHelper and Kayden Fox skin. - public class AvaliSkinModule : EverestModule { - public static AvaliSkinModule Instance; - public override Type SettingsType => typeof(AvaliSkinSettings); - public static AvaliSkinSettings Settings => (AvaliSkinSettings) Instance._Settings; - public static SpriteBank AvaliSpriteBank; - - // the dash colors, tbr - private static Color ZeroDashColor; - private static Color OneDashColor; - private static Color TwoDashColor; - private static Color ThreeDashColor; - private static Color FourDashColor; - private static Color FiveDashColor; - - // recolored dash particles (A = 0-dash, B = 1-dash, C = 2-dash) - private static ParticleType P_DashA; - private static ParticleType P_DashB; - private static ParticleType P_DashC; - - // Atlas for Color1 and Color2; we'll see if we need these later. - // private static Atlas Col1Atlas; - // private static Atlas Col2Atlas; - - // Color Grade IDs - private static string dashGID; - // private static string col1GID; - // private static string col2GID; - - public AvaliSkinModule() { - Instance = this; - } - - public override void Load() { - On.Celeste.PlayerSprite.ctor += onPlayerSpriteConstructor; - On.Celeste.Player.Render += onPlayerRender; - On.Celeste.Player.GetCurrentTrailColor += onPlayerGetTrailColor; - On.Celeste.Player.UpdateHair += onPlayerUpdateHair; - On.Celeste.Player.DashUpdate += onPlayerDashUpdate; - IL.Celeste.DeathEffect.Draw += DeathEffectDrawHook; - On.Celeste.Payphone.ctor += onPayphoneConstructor; - On.Celeste.Lookout.ctor += onLookoutConstructor; - } - - public override void LoadContent(bool firstLoad) { - base.LoadContent(firstLoad); - } - - public override void Unload() { - On.Celeste.PlayerSprite.ctor -= onPlayerSpriteConstructor; - On.Celeste.Player.Render -= onPlayerRender; - On.Celeste.Player.GetCurrentTrailColor -= onPlayerGetTrailColor; - On.Celeste.Player.UpdateHair -= onPlayerUpdateHair; - On.Celeste.Player.DashUpdate -= onPlayerDashUpdate; - IL.Celeste.DeathEffect.Draw -= DeathEffectDrawHook; - On.Celeste.Payphone.ctor -= onPayphoneConstructor; - On.Celeste.Lookout.ctor -= onLookoutConstructor; - } - - private void onPlayerSpriteConstructor(On.Celeste.PlayerSprite.orig_ctor orig, PlayerSprite self, PlayerSpriteMode mode) { - orig(self, mode); - - if (Settings.Enabled) { - // set the dash colors - ZeroDashColor = ColorsToHex.SettingToColor(Settings.ZeroDash); - OneDashColor = ColorsToHex.SettingToColor(Settings.OneDash); - TwoDashColor = ColorsToHex.SettingToColor(Settings.TwoDash); - ThreeDashColor = ColorsToHex.SettingToColor(Settings.ThreeDash); - FourDashColor = ColorsToHex.SettingToColor(Settings.FourDash); - FiveDashColor = ColorsToHex.SettingToColor(Settings.FiveDash); - - // build the small dash particles - P_DashA = new ParticleType(Player.P_DashA) - { - Color = ZeroDashColor, - Color2 = OneDashColor, - }; - P_DashB = new ParticleType(Player.P_DashA) - { - Color = OneDashColor, - Color2 = TwoDashColor, - }; - P_DashC = new ParticleType(Player.P_DashA) - { - Color = TwoDashColor, - Color2 = TwoDashColor, - }; - - if (self.Mode == PlayerSpriteMode.Madeline || self.Mode == PlayerSpriteMode.MadelineNoBackpack || self.Mode == PlayerSpriteMode.Playback) - { - string sprID = ""; - switch (self.Mode) - { - case PlayerSpriteMode.Madeline: - sprID = "player_avali"; break; - case PlayerSpriteMode.MadelineNoBackpack: - sprID = "player_avali_no_backpack"; break; - case PlayerSpriteMode.Playback: - sprID = "player_avali_playback"; break; - } - PlayerSprite.CreateFramesMetadata(sprID); - GFX.SpriteBank.CreateOn(self, sprID); - } - } - } - - private void onPlayerRender(On.Celeste.Player.orig_Render orig, Player self) { - if (Settings.Enabled) { - // we are going to apply a color grade to the Avali using the colors set in settings - // get the dash texture ID - switch (self.Dashes) { - case 0: - dashGID = "mcol_" + Settings.ZeroDash; break; - case 1: - dashGID = "mcol_" + Settings.OneDash; break; - case 2: - dashGID = "mcol_" + Settings.TwoDash; break; - case 3: - dashGID = "mcol_" + Settings.ThreeDash; break; - case 4: - dashGID = "mcol_" + Settings.FourDash; break; - default: - dashGID = "mcol_" + Settings.FiveDash; break; - } - - /* get the color1 and color2 grade IDS - col1GID = "col1_" + Settings.ColorOne; - col2GID = "col2_" + Settings.ColorTwo; - - This is where code to apply custom color1 and color2 would go, but I've learned that using colorgrades themselves is *not* a viable option, so I have not currently implemented it. - I might need a custom effect. - - */ - - - // apply the colorgrade to the player - Effect fxColorGrading = GFX.FxColorGrading; - fxColorGrading.CurrentTechnique = fxColorGrading.Techniques["ColorGradeSingle"]; - Engine.Graphics.GraphicsDevice.Textures[1] = GFX.ColorGrades[dashGID].Texture.Texture_Safe; - Draw.SpriteBatch.End(); - Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, fxColorGrading, (self.Scene as Level).GameplayRenderer.Camera.Matrix); - - // render Avali... - orig(self); - - // ... and reset rendering to stop using the color grade. - Draw.SpriteBatch.End(); - Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, null, (self.Scene as Level).GameplayRenderer.Camera.Matrix); - } else { - // skin disabled, just render Maddy - orig(self); - } - } - private void DeathEffectDrawHook(ILContext il) - { - // replace death particle, just like SkinModHelper - ILCursor cursor = new ILCursor(il); - while (cursor.TryGotoNext(MoveType.After, instr => instr.MatchLdstr("characters/player/hair00"))) { - cursor.EmitDelegate>(ReplaceDeathParticle); - } - } - private static string ReplaceDeathParticle(string deathParticle) - { - if (Settings.Enabled) { - string newDeathParticle = "characters/Avali/death_particle"; - return newDeathParticle; - } - return deathParticle; - } - private Color onPlayerGetTrailColor(On.Celeste.Player.orig_GetCurrentTrailColor orig, Player self) { - if (Settings.Enabled) { - // replace trail colors with marking colors - int dashCount = self.Dashes; - switch (dashCount) { - case 0: - return ZeroDashColor; - case 1: - return OneDashColor; - case 2: - return TwoDashColor; - case 3: - return ThreeDashColor; - case 4: - return FourDashColor; - default: - return FiveDashColor; - } - } - - // skin disabled, keep original colors - return orig(self); - } - - private void onPlayerUpdateHair(On.Celeste.Player.orig_UpdateHair orig, Player self, bool applyGravity) { - orig(self, applyGravity); - - if (Settings.Enabled) { - // change player hair color to match dash colors. - // (hair is invisible, but that influences other things like the orbs when the Avali dies and respawns) - int dashCount = self.Dashes; - switch (dashCount) - { - case 0: - self.Hair.Color = ZeroDashColor; break; - case 1: - self.Hair.Color = OneDashColor; break; - case 2: - self.Hair.Color = TwoDashColor; break; - case 3: - self.Hair.Color = ThreeDashColor; break; - case 4: - self.Hair.Color = FourDashColor; break; - default: - self.Hair.Color = FiveDashColor; break; - } - } - } - - private int onPlayerDashUpdate(On.Celeste.Player.orig_DashUpdate orig, Player self) { - if (!Settings.Enabled) { - // skin disabled: just run vanilla code - return orig(self); - } - - // back up vanilla particles - ParticleType bakDashA = Player.P_DashA; - ParticleType bakDashB = Player.P_DashB; - ParticleType bakDashBadB = Player.P_DashBadB; - - // replace them with recolored ones - Player.P_DashA = P_DashA; - Player.P_DashB = P_DashB; - Player.P_DashBadB = P_DashB; - - // run vanilla code: if it emits particles, it will use recolored ones. - int result = orig(self); - - // restore vanilla particles - Player.P_DashA = bakDashA; - Player.P_DashB = bakDashB; - Player.P_DashBadB = bakDashBadB; - - return result; - } - private void onPayphoneConstructor(On.Celeste.Payphone.orig_ctor orig, Payphone self, Vector2 pos) - { - orig(self, pos); - if (Settings.Enabled) - { - // replace payphone sprites - self.Remove(self.Sprite); - self.Add(self.Sprite = GFX.SpriteBank.Create("payphone_avali")); - self.Sprite.Play("idle"); - } - } - - private void onLookoutConstructor(On.Celeste.Lookout.orig_ctor orig, Lookout self, EntityData data, Vector2 pos) - { - orig(self, data, pos); - if (Settings.Enabled) { - // replace lookout (binoculars) sprites - DynamicData lookoutData = new DynamicData(self); - Sprite origSpr = lookoutData.Get("sprite"); - GFX.SpriteBank.CreateOn(origSpr, "lookout_avali"); - } - } - } -} +using System; +using System.Collections.Generic; + +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Monocle; +using MonoMod.Cil; +using MonoMod.Utils; +using MonoMod.RuntimeDetour; + +using Celeste.Mod.CelesteNet.Client; +using Celeste.Mod.CelesteNet.Client.Entities; +using Celeste.Mod.CelesteNet.DataTypes; + +using ColorChoice = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice; +using ColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorMode; + + +namespace Celeste.Mod.AvaliSkin { + // This code was built off of max480's code for the Pro Banana Skin. + // Other mods I referenced include SkinModHelper, Hyperline, Styleline, and Kayden Fox skin. + public class AvaliSkinModule : EverestModule { + public static AvaliSkinModule Instance; + public override Type SettingsType => typeof(AvaliSkinSettings); + public static AvaliSkinSettings Settings => (AvaliSkinSettings) Instance._Settings; + + public static AvaliConfig PlayerConfig { + get => new AvaliConfig { + Enabled = Settings.Enabled, + ColorMode = Settings.ColorModeOpt, + ManualPreset = Settings.DashPreset, + ManualRGB = Settings.DashRGBColor + }; + } + private static Effect FxRecolor; + + public static EverestModuleMetadata CelesteNetMeta = new EverestModuleMetadata() { + Name = "CelesteNet.Client", + Version = new Version(2, 0, 0) + }; + + public AvaliSkinModule() => Instance = this; + + + public override void Load() { + Logger.Log(LogLevel.Info, "AvaliSkin", $"Hooking stuff..."); + + On.Celeste.LevelLoader.ctor += onLevelLoaderctor; + On.Celeste.Player.Render += onPlayerRender; + + if (Everest.Loader.DependencyLoaded(CelesteNetMeta)) { + Logger.Log(LogLevel.Info, "AvaliSkin", $"Hooking for CelesteNet..."); + On.Celeste.PlayerSprite.Render += onPlayerSpriteRenderCelestenet; + On.Celeste.PlayerSprite.Render += onPlayerSpriteRenderCelestenetMisc; + } else { + On.Celeste.PlayerSprite.Render += onPlayerSpriteRenderMisc; + } + + using (new DetourContext("AvaliSkinModule") { + After = { "Hyperline" } + }) { + On.Celeste.Player.GetCurrentTrailColor += onPlayerGetTrailColor; + On.Celeste.Player.UpdateHair += onPlayerUpdateHair; + On.Celeste.Player.DashUpdate += onPlayerDashUpdate; + } + + IL.Celeste.DeathEffect.Draw += DeathEffectDrawHook; + On.Celeste.Payphone.ctor += onPayphoneConstructor; + On.Celeste.Lookout.ctor += onLookoutConstructor; + } + + + public override void LoadContent(bool firstLoad) { + base.LoadContent(firstLoad); + + IGraphicsDeviceService graphicsDeviceService = + Engine.Instance.Content.ServiceProvider + .GetService(typeof(IGraphicsDeviceService)) + as IGraphicsDeviceService; + + ModAsset asset = Everest.Content.Get("Effects/AvaliRecolor.o", true); + FxRecolor = new Effect(graphicsDeviceService.GraphicsDevice, asset.Data); + } + + + public override void Unload() { + Logger.Log(LogLevel.Info, "AvaliSkin", $"Unhooking stuff..."); + + On.Celeste.LevelLoader.ctor -= onLevelLoaderctor; + On.Celeste.Player.Render -= onPlayerRender; + + if (Everest.Loader.DependencyLoaded(CelesteNetMeta)) { + Logger.Log(LogLevel.Info, "AvaliSkin", $"Unhooking hooks for CelesteNet..."); + On.Celeste.PlayerSprite.Render -= onPlayerSpriteRenderCelestenet; + On.Celeste.PlayerSprite.Render -= onPlayerSpriteRenderCelestenetMisc; + } else { + On.Celeste.PlayerSprite.Render -= onPlayerSpriteRenderMisc; + } + + using (new DetourContext("AvaliSkinModule") { + After = { "Hyperline" } + }) { + On.Celeste.Player.GetCurrentTrailColor -= onPlayerGetTrailColor; + On.Celeste.Player.UpdateHair -= onPlayerUpdateHair; + On.Celeste.Player.DashUpdate -= onPlayerDashUpdate; + } + + IL.Celeste.DeathEffect.Draw -= DeathEffectDrawHook; + On.Celeste.Payphone.ctor -= onPayphoneConstructor; + On.Celeste.Lookout.ctor -= onLookoutConstructor; + + FxRecolor.Dispose(); + } + + + private void trySpriteSwap(PlayerSprite sprite, bool enabled) { + DynamicData dd = DynamicData.For(sprite); + bool oldEnabled = false; + // TryGet crashes with value types (of course; obviously!) + // So we use a object type with the nullable bool... this is a bug in monomod? + if (dd.TryGet("avaliskin_enabled", out bool? ddoldEnabled)) { + oldEnabled = (bool) ddoldEnabled; + } + + if (oldEnabled != enabled) { + string spriteID = ""; + switch (sprite.Mode) { + case PlayerSpriteMode.Madeline: + spriteID = enabled ? "player_avali" : "player"; break; + case PlayerSpriteMode.MadelineNoBackpack: + spriteID = enabled ? "player_avali_no_backpack" : "player_no_backpack"; break; + case PlayerSpriteMode.Playback: + spriteID = enabled ? "player_avali_playback" : "player_playback"; break; + default: return; + } + + dd.Set("avaliskin_enabled", (bool?) enabled); + Vector2 pos = sprite.RenderPosition; + GFX.SpriteBank.CreateOn(sprite, spriteID); + sprite.RenderPosition = pos; + } + } + + + private void onLevelLoaderctor( + On.Celeste.LevelLoader.orig_ctor orig, LevelLoader self, + Session session, Vector2? startPosition = null + ) { + orig(self, session, startPosition); + + // This only needs to be ran once, but we can't run this in LoadContent + // because the sprites are not loaded yet... see the original Everest + // source for this function + PlayerSprite.CreateFramesMetadata("player_avali"); + PlayerSprite.CreateFramesMetadata("player_avali_no_backpack"); + PlayerSprite.CreateFramesMetadata("player_avali_playback"); + } + + + private void onPlayerRender(On.Celeste.Player.orig_Render orig, Player self) { + PlayerSprite sprite = self.Sprite; + if (sprite.Scene != null && PlayerConfig.IsEnabled(self)) { + // swap out the player's spritebank if the enabled state changed + trySpriteSwap(sprite, true); + Color color = PlayerConfig.GetColor(self); + + // apply the recolor effect to the player: + // replace the color #1ud589 in the sprite with color + FxRecolor.Parameters["threshold"].SetValue(0.01f); + FxRecolor.Parameters["color_replace_from"].SetValue( + (new Color((byte) 0x1u, 0xd5, 0x89, 0xff)).ToVector4() + ); + FxRecolor.Parameters["color_replace_to"].SetValue(color.ToVector4()); + FxRecolor.CurrentTechnique = FxRecolor.Techniques["Recolor"]; + + Draw.SpriteBatch.End(); + Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, FxRecolor, (self.Scene as Level).GameplayRenderer.Camera.Matrix); + + // render Avali... + orig(self); + + // ... and reset rendering to stop using the effect + Draw.SpriteBatch.End(); + Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, null, (self.Scene as Level).GameplayRenderer.Camera.Matrix); + } else if (self.Scene != null) { + trySpriteSwap(sprite, false); + orig(self); + } else { + orig(self); + } + } + + + private void onPlayerSpriteRenderMisc(On.Celeste.PlayerSprite.orig_Render orig, PlayerSprite self) { + Player player = Engine.Scene.Tracker.GetEntity(); + if (player == null) { + orig(self); + return; + } + + // This handles rendering of misc instances of PlayerSprites: + // usually player playback entities and the such. + if ( + self.Scene != null + && (self.Entity == null || !(self.Entity is Player)) + ) { + if (PlayerConfig.IsEnabled(player)) { + trySpriteSwap(self, true); + Color color = PlayerConfig.GetColor(player); + + // apply the recolor effect to the sprite + // replace the color #1ud589 in the sprite with color + FxRecolor.Parameters["threshold"].SetValue(0.01f); + FxRecolor.Parameters["color_replace_from"].SetValue( + (new Color((byte) 0x1u, 0xd5, 0x89, 0xff)).ToVector4() + ); + FxRecolor.Parameters["color_replace_to"].SetValue(color.ToVector4()); + FxRecolor.CurrentTechnique = FxRecolor.Techniques["Recolor"]; + + Draw.SpriteBatch.End(); + Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, FxRecolor, (self.Scene as Level).GameplayRenderer.Camera.Matrix); + + // render the sprite... + orig(self); + + // ... and reset rendering to stop using the effect + Draw.SpriteBatch.End(); + Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, null, (self.Scene as Level).GameplayRenderer.Camera.Matrix); + } else { + trySpriteSwap(self, false); + orig(self); + } + } else { + orig(self); + } + } + + private void onPlayerSpriteRenderCelestenetMisc(On.Celeste.PlayerSprite.orig_Render orig, PlayerSprite self) { + // This handles rendering of misc instances of PlayerSprites: + // usually player playback entities and the such. + if ( + self.Scene != null && ( + self.Entity == null + || !(self.Entity is Player || self.Entity is Ghost) + ) + ) { + onPlayerSpriteRenderMisc(orig, self); + } else { + orig(self); + } + } + + + // CelesteNet must be loaded when calling this function. + private void onPlayerSpriteRenderCelestenet(On.Celeste.PlayerSprite.orig_Render orig, PlayerSprite self) { + // CelesteNet players are not actually Player classes, but instead this custom Ghost class. + // Ghosts have their own custom hair and sprite which we are able to recolor like the player. + // We need to be really paranoid here cuz celestenet jank... + CelesteNetClient client = CelesteNetClientModule.Instance.Client; + AvaliConfig everyoneHasSkin = new AvaliConfig { Enabled = true, ColorMode = ColorMode.ExternalDash}; + Color color; + Ghost ghost; + if ( + self.Scene != null && self.Entity != null + && self.Entity is Ghost ghost2 && ghost2.PlayerInfo != null + && client != null + && client.Data.TryGetBoundRef( + ghost2.PlayerInfo.ID, + out DataPlayerAvaliSkin data + ) && data != null + && data.Config.IsEnabled(ghost2) + ) { + ghost = ghost2; + color = data.Config.GetColor(ghost); + } else if ( + Settings.CelesteNetEveryoneHasSkin + && self.Scene != null && self.Entity != null + && self.Entity is Ghost ghost3 + && everyoneHasSkin.IsEnabled(ghost3) + ) { + ghost = ghost3; + color = everyoneHasSkin.GetColor(ghost); + } else if ( + self.Scene != null && self.Entity != null + && self.Entity is Ghost _ + ) { + trySpriteSwap(self, false); + orig(self); + return; + } else { + orig(self); + return; + } + + // swap out the ghost's spritebank if the enabled state changed + trySpriteSwap(self, true); + + // apply the recolor effect to the ghost: + // replace the color #1ud589 in the sprite with color + FxRecolor.Parameters["threshold"].SetValue(0.01f); + FxRecolor.Parameters["color_replace_from"].SetValue( + (new Color((byte) 0x1u, 0xd5, 0x89, 0xff)).ToVector4() + ); + FxRecolor.Parameters["color_replace_to"].SetValue(color.ToVector4()); + FxRecolor.CurrentTechnique = FxRecolor.Techniques["Recolor"]; + + Draw.SpriteBatch.End(); + Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, FxRecolor, (self.Scene as Level).GameplayRenderer.Camera.Matrix); + + // render the ghost... + orig(self); + + // ... and reset rendering to stop using the effect + Draw.SpriteBatch.End(); + Draw.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, null, (self.Scene as Level).GameplayRenderer.Camera.Matrix); + } + + + private void DeathEffectDrawHook(ILContext il) { + // replace death particle, just like SkinModHelper + ILCursor cursor = new ILCursor(il); + while (cursor.TryGotoNext(MoveType.After, instr => instr.MatchLdstr("characters/player/hair00"))) { + cursor.EmitDelegate>(ReplaceDeathParticle); + } + } + + + private static string ReplaceDeathParticle(string deathParticle) { + if (PlayerConfig.Enabled) { + string newDeathParticle = "characters/Avali/death_particle"; + return newDeathParticle; + } + return deathParticle; + } + + + private Color onPlayerGetTrailColor(On.Celeste.Player.orig_GetCurrentTrailColor orig, Player self) { + Color orig_color = orig(self); + if (PlayerConfig.IsEnabled(self)) { + // Don't change the trail color if another mod is in control of it! + // The hair mod should do be doing that instead of us. + // Furthermore: naively doing this will look strange because the white + // hair flash right after dashing will be copied to the trail. + if (PlayerConfig.ColorMode != ColorMode.ExternalDash) { + // replace trail colors with marking colors + return PlayerConfig.GetColor(self); + } + } + + // skin disabled, keep original colors + return orig_color; + } + + + private void onPlayerUpdateHair(On.Celeste.Player.orig_UpdateHair orig, Player self, bool applyGravity) { + orig(self, applyGravity); + + // Don't change the hair color if another mod is in control of it! + if (PlayerConfig.IsEnabled(self) && PlayerConfig.ColorMode != ColorMode.ExternalDash) { + // change player hair color to match dash colors. + // (hair is invisible, but that influences other things like the orbs when the Avali dies and respawns) + self.Hair.Color = PlayerConfig.GetColor(self); + } + } + + + private int onPlayerDashUpdate(On.Celeste.Player.orig_DashUpdate orig, Player self) { + if (!( + PlayerConfig.IsEnabled(self) + // We can't exfiltrate a dash color in this mode because we can't extract that + // without integrating with the dash color mod, and besides, whatever mod that + // changed the dash color should have also changed these particles regardless. + && PlayerConfig.ColorMode != ColorMode.ExternalDash + )) { + // disabled, just run vanilla code + return orig(self); + } + + Color color = PlayerConfig.GetColor(self); + + // back up vanilla particles + ParticleType bakDashA = Player.P_DashA; + ParticleType bakDashB = Player.P_DashB; + ParticleType bakDashBadB = Player.P_DashBadB; + + // Replace them with recolored ones. + // We need to generate these dash particles on the fly because multiple players may + // have different colors (e.g. Celestenet). + Player.P_DashA = new ParticleType(Player.P_DashA) { + Color = color, + Color2 = color, + }; + Player.P_DashB = Player.P_DashA; + Player.P_DashBadB = Player.P_DashA; + + // run vanilla code: if it emits particles, it will use recolored ones. + int result = orig(self); + + // restore vanilla particles + Player.P_DashA = bakDashA; + Player.P_DashB = bakDashB; + Player.P_DashBadB = bakDashBadB; + + return result; + } + + + private void onPayphoneConstructor(On.Celeste.Payphone.orig_ctor orig, Payphone self, Vector2 pos) { + orig(self, pos); + if (Settings.Enabled) { + // replace payphone sprites + self.Remove(self.Sprite); + self.Add(self.Sprite = GFX.SpriteBank.Create("payphone_avali")); + self.Sprite.Play("idle"); + } + } + + + private void onLookoutConstructor(On.Celeste.Lookout.orig_ctor orig, Lookout self, EntityData data, Vector2 pos) { + orig(self, data, pos); + if (Settings.Enabled) { + // replace lookout (binoculars) sprites + DynamicData lookoutData = new DynamicData(self); + Sprite origSpr = lookoutData.Get("sprite"); + GFX.SpriteBank.CreateOn(origSpr, "lookout_avali"); + } + } + } +} diff --git a/SourceCode/AvaliSkinSettings.cs b/SourceCode/AvaliSkinSettings.cs index 9f9725e..3e07342 100644 --- a/SourceCode/AvaliSkinSettings.cs +++ b/SourceCode/AvaliSkinSettings.cs @@ -1,94 +1,326 @@ -using Monocle; - -namespace Celeste.Mod.AvaliSkin -{ - [SettingName("AVALI_SKIN_TITLE")] - public class AvaliSkinSettings : EverestModuleSettings - { - private bool enabled = true; - - [SettingSubText("Note: Enabling/disabling in-game requires either\na reload or death before some things change")] - public bool Enabled - { - get => enabled; - set - { - enabled = value; - - if (Engine.Scene is Level level) - { - // we're in a map: reset sprite the same way the Other Self toggle does. - // the hook on PlayerSprite will decide if we should use the Avali skin or not. - Player player = level.Tracker.GetEntity(); - if (player != null) - { - PlayerSpriteMode mode = (SaveData.Instance.Assists.PlayAsBadeline ? PlayerSpriteMode.MadelineAsBadeline : player.DefaultSpriteMode); - if (player.Active) - { - player.ResetSpriteNextFrame(mode); - } - else - { - player.ResetSprite(mode); - } - } - } - } - } - - #region AvaliColorSettings - - /* For later - - [SettingName("AVALI_SKIN_COLORONE")] - public ColorChoice ColorOne { get; set; } = ColorChoice.Beige; - - [SettingName("AVALI_SKIN_COLORTWO")] - public ColorChoice ColorTwo { get; set; } = ColorChoice.GreyLight; - - */ - - [SettingName("AVALI_SKIN_ZERODASH")] - [SettingSubText("Note: Changing colors in-game requires either\na reload or death before fully applying")] - public ColorChoice ZeroDash { get; set; } = ColorChoice.BlueLight; - - [SettingName("AVALI_SKIN_ONEDASH")] - public ColorChoice OneDash { get; set; } = ColorChoice.Turquoise; - - [SettingName("AVALI_SKIN_TWODASH")] - public ColorChoice TwoDash { get; set; } = ColorChoice.Pink; - - [SettingName("AVALI_SKIN_THREEDASH")] - public ColorChoice ThreeDash { get; set; } = ColorChoice.BlueDark; - - [SettingName("AVALI_SKIN_FOURDASH")] - public ColorChoice FourDash { get; set; } = ColorChoice.Yellow; - - [SettingName("AVALI_SKIN_FIVEDASH")] - public ColorChoice FiveDash { get; set; } = ColorChoice.Red; - - #endregion - - public enum ColorChoice - { - Beige, - Black, - BlueDark, - BlueLight, - Brown, - Cyan, - GreenDark, - GreenLight, - GreyDark, - GreyLight, - Magenta, - Orange, - Pink, - Purple, - Red, - Turquoise, - White, - Yellow, - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; + +using Microsoft.Xna.Framework; +using Monocle; + +using YamlDotNet.Serialization; + +namespace Celeste.Mod.AvaliSkin { + [SettingName("AVALI_SKIN_TITLE")] + public class AvaliSkinSettings : EverestModuleSettings { + private void updateOptions() { + bool loadedCelestenet = Everest.Loader.DependencyLoaded(AvaliSkinModule.CelesteNetMeta); + + // send the new settings to other celestenet players if we're connected + if (loadedCelestenet) { updateSkinCelestenet(); } + + // menu is not loaded; don't bother + if (ColorModeOptItem == null) { return; } + + // disable all the normal options if the main toggle is disabled + ColorModeOptItem.Disabled = !Enabled; + ColorSubmenuItem.Disabled = !Enabled; + + // change up the colormode note based on the selection + string colorModeNote = ""; + switch (ColorModeOpt) { + case ColorMode.ExternalDash: colorModeNote = "modoptions_avaliskin_colormodeopt_ExternalDash_note"; break; + case ColorMode.ManualPreset: colorModeNote = "modoptions_avaliskin_colormodeopt_ManualPreset_note"; break; + case ColorMode.ManualRGB: colorModeNote = "modoptions_avaliskin_colormodeopt_ManualRGB_note"; break; + } + ColorModeOptNote.Title = colorModeNote.DialogOrKey(); + + // no point in showing the submenu at all for externaldash; there's + // nothing to configure! + ColorSubmenuItem.Visible = ColorModeOpt != ColorMode.ExternalDash; + + // disable and change item visibility based on main toggle or colormode + foreach (var item in DashRGBItems) { + item.Disabled = !Enabled; + item.Visible = ColorModeOpt == ColorMode.ManualRGB; + } + + foreach (var item in DashPresetItems) { + item.Disabled = !Enabled; + item.Visible = ColorModeOpt == ColorMode.ManualPreset; + } + + + // Disable if Celestenet is not installed/enabled. + EnableCelesteNetItem.Disabled = !loadedCelestenet; + + // Independently disable the celestenet options + // The user might want the skin disabled, but not for others! + // Also disable these options if Celestenet is not installed/enabled. + CelesteNetSyncItem.Disabled = !EnableCelesteNet || !loadedCelestenet; + CelesteNetEveryoneHasSkinItem.Disabled = !EnableCelesteNet || !loadedCelestenet; + } + + // CelesteNet must be loaded when calling this function. + private void updateSkinCelestenet() { + // this needs to be in a seperate function because the entire component + // relies on an assembly reference + if (CelesteNetAvaliComponent.Instance != null) { + CelesteNetAvaliComponent.Instance.SendAvaliSkin(); + } + } + + // note: YamlDotNet ignores all private member variables + private bool enabled = true; + public bool Enabled { + get => enabled; + set { + enabled = value; + + if (Engine.Scene is Level level) { + // we're in a map: reset sprite the same way the Other Self toggle does. + // the hook on PlayerSprite will decide if we should use the Avali skin or not. + Player player = level.Tracker.GetEntity(); + if (player != null) { + PlayerSpriteMode mode = (SaveData.Instance.Assists.PlayAsBadeline ? PlayerSpriteMode.MadelineAsBadeline : player.DefaultSpriteMode); + if (player.Active) { + player.ResetSpriteNextFrame(mode); + } else { + player.ResetSprite(mode); + } + } + } + + updateOptions(); + } + } + + + public enum ColorMode { + ExternalDash, + ManualPreset, + ManualRGB + } + + public ColorMode ColorModeOpt { get; set; } = ColorMode.ExternalDash; + private TextMenu.Item ColorModeOptItem; + private TextMenu.SubHeader ColorModeOptNote; + public void CreateColorModeOptEntry(TextMenu menu, bool inGame) { + ColorModeOptItem = new TextMenuExt.EnumerableSlider( + "modoptions_avaliskin_colormodeopt".DialogOrKey(), + // Enum.GetValues returns an Array, which is not enumerable. + // However, normal object vectors are. So... + ((ColorMode[]) Enum.GetValues(typeof(ColorMode))).Select( + variant => new KeyValuePair( + variant, + $"modoptions_avaliskin_colormodeopt_{variant.ToString()}".DialogOrKey() + ) + ), + ColorModeOpt + ).Change(opt => { + ColorModeOpt = opt; + updateOptions(); + }); + menu.Add(ColorModeOptItem); + ColorModeOptItem.AddDescription(menu, "modoptions_avaliskin_colormodeopt_note".DialogOrKey()); + + List items = menu.GetItems(); + ColorModeOptNote = (TextMenu.SubHeader) items[items.IndexOf(ColorModeOptItem) + 1]; + } + + #region AvaliColorSettings + + // ColorSubmenu is a dummy setting that is only used to position the + // Submenu. This setting is never used, hence why it is Void! + [YamlIgnore] + public Void ColorSubmenu { get; set; } + private TextMenuExt.OptionSubMenu ColorSubmenuItem; + public void CreateColorSubmenuEntry(TextMenu menu, bool inGame) { + DashRGBItems.Clear(); + DashPresetItems.Clear(); + + ColorSubmenuItem = new TextMenuExt.OptionSubMenu( + "AVALI_SKIN_COLORS".DialogOrKey() + ); + + // This generates n submenus, one for each dash + for (int i = 0; i < DashRGBColor.Count; i++) { + TextMenuExt.IntSlider DashRItem, DashGItem, DashBItem; + TextMenu.Option DashColorItem; + + int j = i; // C# lambda are wierd: capturing i directly mutates the captured variable + + ColorSubmenuItem.Add( + $"AVALI_SKIN_DASH{i}".DialogOrKey(), + new List { + (DashRItem = new TextMenuExt.IntSlider( + "AVALI_SKIN_RED".DialogOrKey(), + 0, 255, DashRGBColor[j].R + ).Change( + // C# is stupidly pendatic and doesn't support property assignment in List elements + // so we have to do this ugly shit to avoid breaking up this expression into two + c => DashRGBColor[j] = new Color((byte) c, DashRGBColor[j].B, DashRGBColor[j].G) + )), + (DashGItem = new TextMenuExt.IntSlider( + "AVALI_SKIN_BLUE".DialogOrKey(), + 0, 255, DashRGBColor[j].G + ).Change( + c => DashRGBColor[j] = new Color(DashRGBColor[j].R, (byte) c, DashRGBColor[j].G) + )), + (DashBItem = new TextMenuExt.IntSlider( + "AVALI_SKIN_GREEN".DialogOrKey(), + 0, 255, DashRGBColor[j].B + ).Change( + c => DashRGBColor[j] = new Color(DashRGBColor[j].R, DashRGBColor[j].B, (byte) c) + )), + (DashColorItem = new TextMenuExt.EnumSlider( + "AVALI_SKIN_COLOR".DialogOrKey(), + DashPreset[j] + ).Change(c => DashPreset[j] = c)), + } + ); + + DashRGBItems.Add(DashRItem); + DashRGBItems.Add(DashGItem); + DashRGBItems.Add(DashBItem); + DashPresetItems.Add(DashColorItem); + } + + menu.Add(ColorSubmenuItem); + } + + + // The following two settings DashRGB & DashPreset are not shown, but + // stored. They are set in the above submenu. + [SettingIgnore] + [YamlIgnore] + public List DashRGBColor { get; set; } = new List { + ColorUtil.SettingToColor(ColorChoice.BlueLight), + ColorUtil.SettingToColor(ColorChoice.Turquoise), + ColorUtil.SettingToColor(ColorChoice.Pink), + ColorUtil.SettingToColor(ColorChoice.BlueDark), + ColorUtil.SettingToColor(ColorChoice.Yellow), + ColorUtil.SettingToColor(ColorChoice.Red), + }; + // this will get (de)serialized from/into a yaml list + [SettingIgnore] + public IEnumerable DashRGB { + get => DashRGBColor.Select(c => ColorUtil.ColorToHex(c)); + set { + DashRGBColor = value.Select(c => ColorUtil.HexToColor(c)).ToList(); + } + } + // Stores submenu items that are enabled/disabled when colormode is RGB + private List DashRGBItems = new List(); + + + [SettingIgnore] + public List DashPreset { get; set; } = new List { + ColorChoice.BlueLight, + ColorChoice.Turquoise, + ColorChoice.Pink, + ColorChoice.BlueDark, + ColorChoice.Yellow, + ColorChoice.Red, + }; + // Stores submenu items that are enabled/disabled when colormode is preset + private List> DashPresetItems = new List>(); + + + + public bool EnableCelesteNet { get; set; } = true; + [YamlIgnore] + private TextMenu.Item EnableCelesteNetItem; + public void CreateEnableCelesteNetEntry(TextMenu menu, bool inGame) { + menu.Add(new TextMenu.SubHeader( + "modoptions_avaliskin_celestenet_header".DialogOrKey(), false + )); + + EnableCelesteNetItem = new TextMenu.OnOff( + "modoptions_avaliskin_celestenet".DialogOrKey(), + EnableCelesteNet + ).Change(enabled => { + EnableCelesteNet = enabled; + updateOptions(); + }); + menu.Add(EnableCelesteNetItem); + + if (!Everest.Loader.DependencyLoaded(AvaliSkinModule.CelesteNetMeta)) { + menu.Add(new TextMenu.SubHeader( + "modoptions_avaliskin_celestenet_nocelestenet".DialogOrKey(), false + )); + } + } + + + public enum SendReceive { + SendReceive, + Send, + Receive, + None + } + + public SendReceive CelesteNetSync { get; set; } = SendReceive.SendReceive; + [YamlIgnore] + private TextMenu.Item CelesteNetSyncItem; + public void CreateCelesteNetSyncEntry(TextMenu menu, bool inGame) { + CelesteNetSyncItem = new TextMenuExt.EnumerableSlider( + "modoptions_avaliskin_celestenetsync".DialogOrKey(), + ((SendReceive[]) Enum.GetValues(typeof(SendReceive))).Select( + variant => new KeyValuePair( + variant, + $"modoptions_avaliskin_celestenetsync_{variant.ToString()}".DialogOrKey() + ) + ), + CelesteNetSync + ).Change(opt => CelesteNetSync = opt); + menu.Add(CelesteNetSyncItem); + CelesteNetSyncItem.AddDescription( + menu, + "modoptions_avaliskin_celestenetsync_note".DialogOrKey() + ); + } + + public bool CelesteNetEveryoneHasSkin { get; set; } = false; + [YamlIgnore] + private TextMenu.Item CelesteNetEveryoneHasSkinItem; + public void CreateCelesteNetEveryoneHasSkinEntry(TextMenu menu, bool inGame) { + CelesteNetEveryoneHasSkinItem = new TextMenu.OnOff( + "modoptions_avaliskin_celesteneteveryonehasskin".DialogOrKey(), + CelesteNetEveryoneHasSkin + ).Change(enabled => CelesteNetEveryoneHasSkin = enabled); + menu.Add(CelesteNetEveryoneHasSkinItem); + CelesteNetEveryoneHasSkinItem.AddDescription( + menu, + "modoptions_avaliskin_celesteneteveryonehasskin_note".DialogOrKey() + ); + + // call update options once the entire menu is loaded: this item is + // added last + updateOptions(); + } + + #endregion + + public enum ColorChoice + { + Beige, + Black, + BlueDark, + BlueLight, + Brown, + Cyan, + GreenDark, + GreenLight, + GreyDark, + GreyLight, + Magenta, + Orange, + Pink, + Purple, + Red, + Turquoise, + White, + Yellow, + } + } + + +} diff --git a/SourceCode/CelesteNetAvaliComponent.cs b/SourceCode/CelesteNetAvaliComponent.cs new file mode 100644 index 0000000..ab938b9 --- /dev/null +++ b/SourceCode/CelesteNetAvaliComponent.cs @@ -0,0 +1,89 @@ +using Microsoft.Xna.Framework; + +using Celeste.Mod.CelesteNet; +using Celeste.Mod.CelesteNet.Client; +using Celeste.Mod.CelesteNet.Client.Entities; +using Celeste.Mod.CelesteNet.DataTypes; + +using ColorChoice = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice; +using ColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorMode; +using SendReceive = Celeste.Mod.AvaliSkin.AvaliSkinSettings.SendReceive; + + +namespace Celeste.Mod.AvaliSkin { + public class CelesteNetAvaliComponent : CelesteNetGameComponent { + private static AvaliSkinSettings ModuleSettings => AvaliSkinModule.Settings; + public static CelesteNetAvaliComponent Instance; + + private CelesteNetClientContext Ctx; + + public CelesteNetAvaliComponent(CelesteNetClientContext context, Game game) : base(context, game) { + Instance = this; + Ctx = context; + } + + public void Handle(CelesteNetConnection con, DataReady ready) { + SendAvaliSkin(); + } + + public void SendAvaliSkin() { + if (Ctx.Client != null && Ctx.Client.PlayerInfo != null) { + if ( + ModuleSettings.CelesteNetSync == SendReceive.SendReceive + || ModuleSettings.CelesteNetSync == SendReceive.Send + ) { + Logger.Log(LogLevel.Info, "AvaliSkin", $"Sending updated DataPlayerAvaliSkin!"); + AvaliConfig config = AvaliSkinModule.PlayerConfig; + Ctx.Client.Send(new DataPlayerAvaliSkin(Ctx.Client.PlayerInfo, config)); + } + } + } + } + + + public class DataPlayerAvaliSkin : DataType { + public AvaliConfig Config; + public DataPlayerInfo Player; + + static DataPlayerAvaliSkin() { DataID = "avaliskin_skinconfig"; } + public DataPlayerAvaliSkin() {} + public DataPlayerAvaliSkin(DataPlayerInfo player, AvaliConfig config) { + this.Player = player; + this.Config = config; + } + + public override MetaType[] GenerateMeta(DataContext ctx) => new MetaType[] { + new MetaPlayerPrivateState(Player), + new MetaBoundRef(DataType.DataID, Player?.ID ?? uint.MaxValue, true) + }; + + public override void FixupMeta(DataContext ctx) { + Player = Get(ctx); + Get(ctx).ID = Player?.ID ?? uint.MaxValue; + } + + protected override void Read(CelesteNetBinaryReader reader) { + Config = new AvaliConfig { + Enabled = reader.ReadBoolean(), + ColorMode = ColorMode.ExternalDash + }; + } + + protected override void Write(CelesteNetBinaryWriter writer) { + writer.Write(Config.Enabled); + if (Config.Enabled) { + // byte lengthRGB = Math.Min(ManualRGB.Count, 5); + // writer.Write((byte) ManualRGB.Count); + // foreach (var color in ManualRGB) { + // write.WriteNoA(color); + // } + + // byte lengthPreset = Math.Min(ManualPreset.Count, 5); + // writer.Write((byte) ManualPreset.Count); + // foreach (var color in ManualPreset) { + // write.Write((byte) color); + // } + } + } + } +} diff --git a/SourceCode/Data.cs b/SourceCode/Data.cs new file mode 100644 index 0000000..43764d2 --- /dev/null +++ b/SourceCode/Data.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework; + +using Celeste.Mod.CelesteNet.Client; +using Celeste.Mod.CelesteNet.Client.Entities; +using Celeste.Mod.CelesteNet.DataTypes; + +using ColorChoice = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice; +using ColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorMode; +using SendReceive = Celeste.Mod.AvaliSkin.AvaliSkinSettings.SendReceive; + + +namespace Celeste.Mod.AvaliSkin { + public class AvaliConfig { + private static AvaliSkinSettings Settings => AvaliSkinModule.Settings; + + public bool Enabled; + public ColorMode ColorMode; + public List ManualPreset = new List(); + public List ManualRGB = new List(); + + + public bool IsEnabled(Player player) { + return Enabled; + } + + public bool IsEnabled(Ghost ghost) { + return Settings.EnableCelesteNet + && ( + (Enabled && ( + Settings.CelesteNetSync == SendReceive.SendReceive + || Settings.CelesteNetSync == SendReceive.Receive + )) + || Settings.CelesteNetEveryoneHasSkin + ); + } + + // Check sprite.Scene != null && sprite.Entity != null && sprite.Entity is Player player + // before calling this + public Color GetColor(Player player) { + int dashes = player.Dashes; + switch (this.ColorMode) { + case ColorMode.ExternalDash: + // Infrequently, it's possible for the player to momentarily have no hair. + if (player.Hair != null && player.Sprite.HairCount > 0) { + return player.Hair.GetHairColor(0); + } else { + // If the player does have no hair, then just default to + // whatever preset... this only happens momentarily anyways + return ColorUtil.SettingToColor( + ManualPreset[Math.Min(dashes, ManualPreset.Count - 1)] + ); + } + + case ColorMode.ManualRGB: + return ManualRGB[Math.Min(dashes, ManualRGB.Count - 1)]; + + case ColorMode.ManualPreset: default: + return ColorUtil.SettingToColor( + ManualPreset[Math.Min(dashes, ManualPreset.Count - 1)] + ); + } + } + + // Check sprite.Scene != null && sprite.Entity != null && sprite.Entity is Ghost + // before calling this + public Color GetColor(Ghost ghost) { + // Infrequently, it's possible for the ghost to momentarily have no hair. + if (ghost.Hair != null && ghost.Sprite.HairCount > 0) { + return ghost.Hair.GetHairColor(0); + } else { + // todo: wtf??? + return new Color(0, 0, 0); + } + } + } +} diff --git a/SourceCode/Libraries/CelesteNet.Client.dll b/SourceCode/Libraries/CelesteNet.Client.dll new file mode 100644 index 0000000000000000000000000000000000000000..7e0110e372f2a212baf29311b7e60857aaa83432 GIT binary patch literal 99840 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

rF@JdA?PO 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 ZPg$Lf@L0Bb2C4A(8P8S^R{Wp){1?22E?WQq literal 0 HcmV?d00001 diff --git a/SourceCode/Makefile b/SourceCode/Makefile new file mode 100644 index 0000000..b76407b --- /dev/null +++ b/SourceCode/Makefile @@ -0,0 +1,41 @@ +# run make release to compile everything on linux (and maybe on macos too who knows) + +SHELL = /bin/bash +# .ONESHELL: +# .SHELLFLAGS=-ec + + +LIBS = -pkg:dotnet -r:MonoMod.Utils.dll -r:MonoMod.RuntimeDetour.dll \ +-r:Celeste.exe -r:MMHOOK_Celeste.dll -r:FNA.dll -r:Mono.Cecil.dll -r:YamlDotNet.dll -r:CelesteNet.Client.dll -r:CelesteNet.Shared.dll +# If this mod is setup in the Celeste/Mods/ directory, then we use the paths: +# - ../../../, which should be the Celeste/ directory, which contains most dlls +# - ./Libraries/, which contains the optional dependency CelesteNet.Client.dll +LIB_PATH = -lib:../../../ -lib:./Libraries/ + +BINARY=AvaliSkin.dll + + +.PHONY: default release strip +default: release + +# To compile code on linux you will need the mono runtime and mcs (the mono c# compiler), and that's it actually. +release: + mcs ${LIB_PATH} ${LIBS} *.cs -t:library -out:${BINARY} -optimize + cat ${BINARY} > ../${BINARY} + rm ${BINARY} + +# This strips out code from reference assemblies so only the symbols are +# present for linking. +strip: + for file in ./Libraries/*; do mono-cil-strip "$$file"; done + +# To compile the shaders, you will need: +# - wine64 to be installed, +# - the June 2010 legacy DirectX SDK needs to be unzipped under wine +# (download: https://www.microsoft.com/en-us/download/details.aspx?id=6812) +# - and you will need D3DCompiler_43.dll which you can grab from winetricks or +# if you have steam proton installed, you probably already have a copy of it +# *somewhere* on your system. +# Man microsoft software sucks... how is this company still alive +shader_c: + wine64 DXSDK/Utilities/bin/x64/fxc.exe "AvaliRecolor.fx" "/T" "fx_2_0" "/Fo" "AvaliRecolor.o" "/O3" diff --git a/SourceCode/Misc.cs b/SourceCode/Misc.cs new file mode 100644 index 0000000..78c3260 --- /dev/null +++ b/SourceCode/Misc.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using YamlDotNet.Serialization; + +using Monocle; + +using CC = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice; + + +namespace Celeste.Mod.AvaliSkin { + public static class Misc { + public static string DialogOrKey(this string key, Language lang = null) { + return key.DialogCleanOrNull(lang) ?? key; + } + } + + + // This is a "never/empty type" in C#. It is impossible to construct. + // Used in cases where a variable should never be initialized. + public enum Void {} + + + public class ColorUtil { + public static Color SettingToColor(CC col) { + switch (col) { + case CC.Beige: return new Color(162, 133, 92); + case CC.Black: return new Color(0, 0, 0); + case CC.BlueDark: return new Color(22, 42, 162); + case CC.BlueLight: return new Color(50, 151, 223); + case CC.Brown: return new Color(98, 75, 33); + case CC.Cyan: return new Color(26, 225, 225); + case CC.GreenDark: return new Color(41, 132, 49); + case CC.GreenLight: return new Color(59, 219, 47); + case CC.GreyDark: return new Color(60, 60, 60); + case CC.GreyLight: return new Color(168, 168, 168); + case CC.Magenta: return new Color(228, 14, 155); + case CC.Orange: return new Color(237, 147, 32); + case CC.Pink: return new Color(233, 106, 252); + case CC.Purple: return new Color(190, 23, 214); + case CC.Red: return new Color(238, 17, 34); + case CC.Turquoise: return new Color(26, 213, 137); + case CC.White: return new Color(255, 255, 255); + case CC.Yellow: return new Color(244, 226, 15); + default: return new Color(26, 213, 137); + } + } + + public static string ColorToHex(Color color) { + return $"#{color.R:x2}{color.G:x2}{color.B:x2}"; + } + + public static Color HexToColor(string hex) { + return Monocle.Calc.HexToColor(hex); + } + } +} diff --git a/everest.yaml b/everest.yaml index a7db767..33a43ef 100644 --- a/everest.yaml +++ b/everest.yaml @@ -3,4 +3,7 @@ DLL: AvaliSkin.dll Dependencies: - Name: Everest - Version: 1.3070.0 \ No newline at end of file + Version: 1.3070.0 + OptionalDependencies: + - Name: CelesteNet.Client + Version: 2.0.0