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 0000000..aa72db0
Binary files /dev/null and b/AvaliSkin.dll differ
diff --git a/Dialog/English.txt b/Dialog/English.txt
index 35344e3..f34af9d 100644
--- a/Dialog/English.txt
+++ b/Dialog/English.txt
@@ -1,10 +1,41 @@
AVALI_SKIN_TITLE= Avali Skin
-AVALI_SKIN_COLORONE= Color One
-AVALI_SKIN_COLORTWO= Color Two
-AVALI_SKIN_MARKING_COLORS= Marking Colors
-AVALI_SKIN_ZERODASH= Zero Dashes
-AVALI_SKIN_ONEDASH= One Dash
-AVALI_SKIN_TWODASH= Two Dashes
-AVALI_SKIN_THREEDASH= Three Dashes
-AVALI_SKIN_FOURDASH= Four Dashes
-AVALI_SKIN_FIVEDASH= Five+ Dashes
+
+modoptions_avaliskin_colormodeopt=Dash color mode
+modoptions_avaliskin_colormodeopt_ExternalDash=Use hair color
+modoptions_avaliskin_colormodeopt_ManualPreset=Select color preset
+modoptions_avaliskin_colormodeopt_ManualPreset_note=Selects hair color from color presets
+Make sure to disable other hair color mods.
+modoptions_avaliskin_colormodeopt_ManualRGB=Select RGB color
+modoptions_avaliskin_colormodeopt_ManualRGB_note=Selects hair color from RGB values.
+Make sure to disable other hair color mods.
+modoptions_avaliskin_colormodeopt_ExternalDash_note=Uses hair color from vanilla
+or from other mods (e.g., Hyperline, Prideline)
+
+AVALI_SKIN_COLORS=Dash colors
+AVALI_SKIN_DASH0=Zero Dashes
+AVALI_SKIN_DASH1=One Dash
+AVALI_SKIN_DASH2=Two Dashes
+AVALI_SKIN_DASH3=Three Dashes
+AVALI_SKIN_DASH4=Four Dashes
+AVALI_SKIN_DASH5=Five+ Dashes
+
+AVALI_SKIN_RED=Red
+AVALI_SKIN_GREEN=Green
+AVALI_SKIN_BLUE=Blue
+AVALI_SKIN_COLOR=Color
+
+modoptions_avaliskin_celestenet_header=CelesteNet support
+modoptions_avaliskin_celestenet=Enable CelesteNet support
+modoptions_avaliskin_celestenet_nocelestenet=CelesteNet is not installed. Optional.
+
+modoptions_avaliskin_celestenetsync=CelesteNet skin sync
+modoptions_avaliskin_celestenetsync_SendReceive=Send/Receive
+modoptions_avaliskin_celestenetsync_Send=Send only
+modoptions_avaliskin_celestenetsync_Receive=Receive only
+modoptions_avaliskin_celestenetsync_None=Disable
+modoptions_avaliskin_celestenetsync_note=Synchronizes skins for other CelesteNet
+players if they also have this mod
+
+modoptions_avaliskin_celesteneteveryonehasskin=Everyone is an Avali
+modoptions_avaliskin_celesteneteveryonehasskin_note=Renders all CelesteNet players
+as Avalis, regardless of their skin
diff --git a/Effects/AvaliRecolor.fx b/Effects/AvaliRecolor.fx
new file mode 100644
index 0000000..239a561
--- /dev/null
+++ b/Effects/AvaliRecolor.fx
@@ -0,0 +1,35 @@
+// Compile with fxc.exe AvaliRecolor.fx /T fx_2_0 /O3
+
+// Creates a texture at a given texture index
+#define DECLARE_TEXTURE(Name, index) \
+ texture Name: register(t##index); \
+ sampler Name##Sampler: register(s##index)
+
+// Samples the texture and returns a color
+#define SAMPLE_TEXTURE(Name, texCoord) tex2D(Name##Sampler, texCoord)
+
+
+DECLARE_TEXTURE(text, 0); // The texture to be recolored
+
+uniform float4 color_replace_from; // #1ad589
+uniform float4 color_replace_to;
+uniform float threshold; // 0.01
+
+
+// hsls provides distance instead of this...
+// float fast_distance4(float4 a, float4 b) {
+// float4 diff = a - b;
+// return diff.x * diff.x + diff.y * diff.y + diff.z * diff.z + diff.w * diff.w;
+// }
+
+
+float4 ps_recolor(float4 pos: SV_Position, float4 in_color: COLOR0, float2 uv: TEXCOORD0): COLOR {
+ float4 color = SAMPLE_TEXTURE(text, uv);
+ return (distance(color, color_replace_from) < threshold ? color_replace_to : color) * in_color;
+}
+
+technique Recolor {
+ pass {
+ PixelShader = compile ps_2_0 ps_recolor();
+ }
+}
diff --git a/Effects/AvaliRecolor.o b/Effects/AvaliRecolor.o
new file mode 100644
index 0000000..d0661bd
Binary files /dev/null and b/Effects/AvaliRecolor.o differ
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 0000000..7e0110e
Binary files /dev/null and b/SourceCode/Libraries/CelesteNet.Client.dll differ
diff --git a/SourceCode/Libraries/CelesteNet.Shared.dll b/SourceCode/Libraries/CelesteNet.Shared.dll
new file mode 100644
index 0000000..b678430
Binary files /dev/null and b/SourceCode/Libraries/CelesteNet.Shared.dll differ
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