From a74a9ae7952e87fd34548feabebbcdd97a3f2033 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sun, 7 Mar 2021 20:50:10 +0100 Subject: [PATCH] More SWWMHandler code splitting. Revert fallback sprite stuff. It's glitchy. --- language.version | 4 +- patches/FallbackSprite.png | Bin 364 -> 0 bytes textures.dummy | 5616 +++--------------- zscript.txt | 4 + zscript/handler/swwm_handler_damage.zsc | 302 + zscript/handler/swwm_handler_worldload.zsc | 277 + zscript/handler/swwm_handler_worldthings.zsc | 360 ++ zscript/handler/swwm_handler_worldtick.zsc | 297 + zscript/swwm_handler.zsc | 1225 +--- 9 files changed, 2181 insertions(+), 5904 deletions(-) delete mode 100644 patches/FallbackSprite.png create mode 100644 zscript/handler/swwm_handler_damage.zsc create mode 100644 zscript/handler/swwm_handler_worldload.zsc create mode 100644 zscript/handler/swwm_handler_worldthings.zsc create mode 100644 zscript/handler/swwm_handler_worldtick.zsc diff --git a/language.version b/language.version index eb28e7699..642d6fb48 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r330 \cu(Sun 7 Mar 20:16:13 CET 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r330 \cu(2021-03-07 20:16:13)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r331 \cu(Sun 7 Mar 20:50:10 CET 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r331 \cu(2021-03-07 20:50:10)\c-"; diff --git a/patches/FallbackSprite.png b/patches/FallbackSprite.png deleted file mode 100644 index 850c7a9693d9db979115fdced916741f720b2f48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmeAS@N?(olHy`uVBq!ia0y~yU=xq+k@YX3yTFmn&0qr%xU|_rhanD!Gn%0A9uCf-nDgg z0_*X-*iCmE52`jdRj*9faTQeJl+EJV`D9PrtvNSbe%<}VBfsa)Z^i{|AD^a7E%|YG ze@ZW-vx{@n$qn-h=U7ZqdAwxZ`i$Q{^&b8@Y_`g8wL&xN*{2=cn$NzxTkcZ$pN--_CMkYf zteWo9{BHR=r8!2MzAmznE6zXqg?}OE{^+^Rx3ZZs4xHGau~gr3_Y}ML9P?@($( zX3P#RT)pl8w|gucD>;sqx$-N%f61!5?;Pj4`MbAIV%*47vrOXI7H&VewKJvjiWp4o ZGa1->vnMUCXJBAp@O1TaS?83{1OT!ZpMn4Y diff --git a/textures.dummy b/textures.dummy index cc1ac37d5..d94b0e5e7 100644 --- a/textures.dummy +++ b/textures.dummy @@ -1,4680 +1,936 @@ -Sprite "XZW0A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW0Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW1Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW2Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW3Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW4Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW5Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW6Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW7Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW8Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9A0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9B0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9C0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9D0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9E0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9F0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9G0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9H0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9I0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9J0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9K0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9L0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9M0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9N0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9O0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9P0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9Q0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9R0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9S0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9T0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9U0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9V0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9W0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9X0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9Y0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZW9Z0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWAZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWBZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWCZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWDZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWED0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWER0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWES0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWET0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWEZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWFZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWGZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWHZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWID0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWII0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWIZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWJZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWKZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWLZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWME0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWML0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWMZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWND0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWNZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWON0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWOZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWPZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWQZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWRZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWST0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWSZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWTZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWUZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWVZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWWZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWXZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWYZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZA0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZB0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZC0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZD0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZE0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZF0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZG0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZH0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZI0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZJ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZK0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZL0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZM0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZN0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZO0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZP0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZQ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZR0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZS0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZT0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZU0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZV0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZW0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZX0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZY0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} -Sprite "XZWZZ0", 80, 64 -{ - Offset 40, 64 - Patch "PATCHES/FALLBACKSPRITE.PNG", 0, 0 -} +Sprite "XZW0A0",1,1{} +Sprite "XZW0B0",1,1{} +Sprite "XZW0C0",1,1{} +Sprite "XZW0D0",1,1{} +Sprite "XZW0E0",1,1{} +Sprite "XZW0F0",1,1{} +Sprite "XZW0G0",1,1{} +Sprite "XZW0H0",1,1{} +Sprite "XZW0I0",1,1{} +Sprite "XZW0J0",1,1{} +Sprite "XZW0K0",1,1{} +Sprite "XZW0L0",1,1{} +Sprite "XZW0M0",1,1{} +Sprite "XZW0N0",1,1{} +Sprite "XZW0O0",1,1{} +Sprite "XZW0P0",1,1{} +Sprite "XZW0Q0",1,1{} +Sprite "XZW0R0",1,1{} +Sprite "XZW0S0",1,1{} +Sprite "XZW0T0",1,1{} +Sprite "XZW0U0",1,1{} +Sprite "XZW0V0",1,1{} +Sprite "XZW0W0",1,1{} +Sprite "XZW0X0",1,1{} +Sprite "XZW0Y0",1,1{} +Sprite "XZW0Z0",1,1{} +Sprite "XZW1A0",1,1{} +Sprite "XZW1B0",1,1{} +Sprite "XZW1C0",1,1{} +Sprite "XZW1D0",1,1{} +Sprite "XZW1E0",1,1{} +Sprite "XZW1F0",1,1{} +Sprite "XZW1G0",1,1{} +Sprite "XZW1H0",1,1{} +Sprite "XZW1I0",1,1{} +Sprite "XZW1J0",1,1{} +Sprite "XZW1K0",1,1{} +Sprite "XZW1L0",1,1{} +Sprite "XZW1M0",1,1{} +Sprite "XZW1N0",1,1{} +Sprite "XZW1O0",1,1{} +Sprite "XZW1P0",1,1{} +Sprite "XZW1Q0",1,1{} +Sprite "XZW1R0",1,1{} +Sprite "XZW1S0",1,1{} +Sprite "XZW1T0",1,1{} +Sprite "XZW1U0",1,1{} +Sprite "XZW1V0",1,1{} +Sprite "XZW1W0",1,1{} +Sprite "XZW1X0",1,1{} +Sprite "XZW1Y0",1,1{} +Sprite "XZW1Z0",1,1{} +Sprite "XZW2A0",1,1{} +Sprite "XZW2B0",1,1{} +Sprite "XZW2C0",1,1{} +Sprite "XZW2D0",1,1{} +Sprite "XZW2E0",1,1{} +Sprite "XZW2F0",1,1{} +Sprite "XZW2G0",1,1{} +Sprite "XZW2H0",1,1{} +Sprite "XZW2I0",1,1{} +Sprite "XZW2J0",1,1{} +Sprite "XZW2K0",1,1{} +Sprite "XZW2L0",1,1{} +Sprite "XZW2M0",1,1{} +Sprite "XZW2N0",1,1{} +Sprite "XZW2O0",1,1{} +Sprite "XZW2P0",1,1{} +Sprite "XZW2Q0",1,1{} +Sprite "XZW2R0",1,1{} +Sprite "XZW2S0",1,1{} +Sprite "XZW2T0",1,1{} +Sprite "XZW2U0",1,1{} +Sprite "XZW2V0",1,1{} +Sprite "XZW2W0",1,1{} +Sprite "XZW2X0",1,1{} +Sprite "XZW2Y0",1,1{} +Sprite "XZW2Z0",1,1{} +Sprite "XZW3A0",1,1{} +Sprite "XZW3B0",1,1{} +Sprite "XZW3C0",1,1{} +Sprite "XZW3D0",1,1{} +Sprite "XZW3E0",1,1{} +Sprite "XZW3F0",1,1{} +Sprite "XZW3G0",1,1{} +Sprite "XZW3H0",1,1{} +Sprite "XZW3I0",1,1{} +Sprite "XZW3J0",1,1{} +Sprite "XZW3K0",1,1{} +Sprite "XZW3L0",1,1{} +Sprite "XZW3M0",1,1{} +Sprite "XZW3N0",1,1{} +Sprite "XZW3O0",1,1{} +Sprite "XZW3P0",1,1{} +Sprite "XZW3Q0",1,1{} +Sprite "XZW3R0",1,1{} +Sprite "XZW3S0",1,1{} +Sprite "XZW3T0",1,1{} +Sprite "XZW3U0",1,1{} +Sprite "XZW3V0",1,1{} +Sprite "XZW3W0",1,1{} +Sprite "XZW3X0",1,1{} +Sprite "XZW3Y0",1,1{} +Sprite "XZW3Z0",1,1{} +Sprite "XZW4A0",1,1{} +Sprite "XZW4B0",1,1{} +Sprite "XZW4C0",1,1{} +Sprite "XZW4D0",1,1{} +Sprite "XZW4E0",1,1{} +Sprite "XZW4F0",1,1{} +Sprite "XZW4G0",1,1{} +Sprite "XZW4H0",1,1{} +Sprite "XZW4I0",1,1{} +Sprite "XZW4J0",1,1{} +Sprite "XZW4K0",1,1{} +Sprite "XZW4L0",1,1{} +Sprite "XZW4M0",1,1{} +Sprite "XZW4N0",1,1{} +Sprite "XZW4O0",1,1{} +Sprite "XZW4P0",1,1{} +Sprite "XZW4Q0",1,1{} +Sprite "XZW4R0",1,1{} +Sprite "XZW4S0",1,1{} +Sprite "XZW4T0",1,1{} +Sprite "XZW4U0",1,1{} +Sprite "XZW4V0",1,1{} +Sprite "XZW4W0",1,1{} +Sprite "XZW4X0",1,1{} +Sprite "XZW4Y0",1,1{} +Sprite "XZW4Z0",1,1{} +Sprite "XZW5A0",1,1{} +Sprite "XZW5B0",1,1{} +Sprite "XZW5C0",1,1{} +Sprite "XZW5D0",1,1{} +Sprite "XZW5E0",1,1{} +Sprite "XZW5F0",1,1{} +Sprite "XZW5G0",1,1{} +Sprite "XZW5H0",1,1{} +Sprite "XZW5I0",1,1{} +Sprite "XZW5J0",1,1{} +Sprite "XZW5K0",1,1{} +Sprite "XZW5L0",1,1{} +Sprite "XZW5M0",1,1{} +Sprite "XZW5N0",1,1{} +Sprite "XZW5O0",1,1{} +Sprite "XZW5P0",1,1{} +Sprite "XZW5Q0",1,1{} +Sprite "XZW5R0",1,1{} +Sprite "XZW5S0",1,1{} +Sprite "XZW5T0",1,1{} +Sprite "XZW5U0",1,1{} +Sprite "XZW5V0",1,1{} +Sprite "XZW5W0",1,1{} +Sprite "XZW5X0",1,1{} +Sprite "XZW5Y0",1,1{} +Sprite "XZW5Z0",1,1{} +Sprite "XZW6A0",1,1{} +Sprite "XZW6B0",1,1{} +Sprite "XZW6C0",1,1{} +Sprite "XZW6D0",1,1{} +Sprite "XZW6E0",1,1{} +Sprite "XZW6F0",1,1{} +Sprite "XZW6G0",1,1{} +Sprite "XZW6H0",1,1{} +Sprite "XZW6I0",1,1{} +Sprite "XZW6J0",1,1{} +Sprite "XZW6K0",1,1{} +Sprite "XZW6L0",1,1{} +Sprite "XZW6M0",1,1{} +Sprite "XZW6N0",1,1{} +Sprite "XZW6O0",1,1{} +Sprite "XZW6P0",1,1{} +Sprite "XZW6Q0",1,1{} +Sprite "XZW6R0",1,1{} +Sprite "XZW6S0",1,1{} +Sprite "XZW6T0",1,1{} +Sprite "XZW6U0",1,1{} +Sprite "XZW6V0",1,1{} +Sprite "XZW6W0",1,1{} +Sprite "XZW6X0",1,1{} +Sprite "XZW6Y0",1,1{} +Sprite "XZW6Z0",1,1{} +Sprite "XZW7A0",1,1{} +Sprite "XZW7B0",1,1{} +Sprite "XZW7C0",1,1{} +Sprite "XZW7D0",1,1{} +Sprite "XZW7E0",1,1{} +Sprite "XZW7F0",1,1{} +Sprite "XZW7G0",1,1{} +Sprite "XZW7H0",1,1{} +Sprite "XZW7I0",1,1{} +Sprite "XZW7J0",1,1{} +Sprite "XZW7K0",1,1{} +Sprite "XZW7L0",1,1{} +Sprite "XZW7M0",1,1{} +Sprite "XZW7N0",1,1{} +Sprite "XZW7O0",1,1{} +Sprite "XZW7P0",1,1{} +Sprite "XZW7Q0",1,1{} +Sprite "XZW7R0",1,1{} +Sprite "XZW7S0",1,1{} +Sprite "XZW7T0",1,1{} +Sprite "XZW7U0",1,1{} +Sprite "XZW7V0",1,1{} +Sprite "XZW7W0",1,1{} +Sprite "XZW7X0",1,1{} +Sprite "XZW7Y0",1,1{} +Sprite "XZW7Z0",1,1{} +Sprite "XZW8A0",1,1{} +Sprite "XZW8B0",1,1{} +Sprite "XZW8C0",1,1{} +Sprite "XZW8D0",1,1{} +Sprite "XZW8E0",1,1{} +Sprite "XZW8F0",1,1{} +Sprite "XZW8G0",1,1{} +Sprite "XZW8H0",1,1{} +Sprite "XZW8I0",1,1{} +Sprite "XZW8J0",1,1{} +Sprite "XZW8K0",1,1{} +Sprite "XZW8L0",1,1{} +Sprite "XZW8M0",1,1{} +Sprite "XZW8N0",1,1{} +Sprite "XZW8O0",1,1{} +Sprite "XZW8P0",1,1{} +Sprite "XZW8Q0",1,1{} +Sprite "XZW8R0",1,1{} +Sprite "XZW8S0",1,1{} +Sprite "XZW8T0",1,1{} +Sprite "XZW8U0",1,1{} +Sprite "XZW8V0",1,1{} +Sprite "XZW8W0",1,1{} +Sprite "XZW8X0",1,1{} +Sprite "XZW8Y0",1,1{} +Sprite "XZW8Z0",1,1{} +Sprite "XZW9A0",1,1{} +Sprite "XZW9B0",1,1{} +Sprite "XZW9C0",1,1{} +Sprite "XZW9D0",1,1{} +Sprite "XZW9E0",1,1{} +Sprite "XZW9F0",1,1{} +Sprite "XZW9G0",1,1{} +Sprite "XZW9H0",1,1{} +Sprite "XZW9I0",1,1{} +Sprite "XZW9J0",1,1{} +Sprite "XZW9K0",1,1{} +Sprite "XZW9L0",1,1{} +Sprite "XZW9M0",1,1{} +Sprite "XZW9N0",1,1{} +Sprite "XZW9O0",1,1{} +Sprite "XZW9P0",1,1{} +Sprite "XZW9Q0",1,1{} +Sprite "XZW9R0",1,1{} +Sprite "XZW9S0",1,1{} +Sprite "XZW9T0",1,1{} +Sprite "XZW9U0",1,1{} +Sprite "XZW9V0",1,1{} +Sprite "XZW9W0",1,1{} +Sprite "XZW9X0",1,1{} +Sprite "XZW9Y0",1,1{} +Sprite "XZW9Z0",1,1{} +Sprite "XZWAA0",1,1{} +Sprite "XZWAB0",1,1{} +Sprite "XZWAC0",1,1{} +Sprite "XZWAD0",1,1{} +Sprite "XZWAE0",1,1{} +Sprite "XZWAF0",1,1{} +Sprite "XZWAG0",1,1{} +Sprite "XZWAH0",1,1{} +Sprite "XZWAI0",1,1{} +Sprite "XZWAJ0",1,1{} +Sprite "XZWAK0",1,1{} +Sprite "XZWAL0",1,1{} +Sprite "XZWAM0",1,1{} +Sprite "XZWAN0",1,1{} +Sprite "XZWAO0",1,1{} +Sprite "XZWAP0",1,1{} +Sprite "XZWAQ0",1,1{} +Sprite "XZWAR0",1,1{} +Sprite "XZWAS0",1,1{} +Sprite "XZWAT0",1,1{} +Sprite "XZWAU0",1,1{} +Sprite "XZWAV0",1,1{} +Sprite "XZWAW0",1,1{} +Sprite "XZWAX0",1,1{} +Sprite "XZWAY0",1,1{} +Sprite "XZWAZ0",1,1{} +Sprite "XZWBA0",1,1{} +Sprite "XZWBB0",1,1{} +Sprite "XZWBC0",1,1{} +Sprite "XZWBD0",1,1{} +Sprite "XZWBE0",1,1{} +Sprite "XZWBF0",1,1{} +Sprite "XZWBG0",1,1{} +Sprite "XZWBH0",1,1{} +Sprite "XZWBI0",1,1{} +Sprite "XZWBJ0",1,1{} +Sprite "XZWBK0",1,1{} +Sprite "XZWBL0",1,1{} +Sprite "XZWBM0",1,1{} +Sprite "XZWBN0",1,1{} +Sprite "XZWBO0",1,1{} +Sprite "XZWBP0",1,1{} +Sprite "XZWBQ0",1,1{} +Sprite "XZWBR0",1,1{} +Sprite "XZWBS0",1,1{} +Sprite "XZWBT0",1,1{} +Sprite "XZWBU0",1,1{} +Sprite "XZWBV0",1,1{} +Sprite "XZWBW0",1,1{} +Sprite "XZWBX0",1,1{} +Sprite "XZWBY0",1,1{} +Sprite "XZWBZ0",1,1{} +Sprite "XZWCA0",1,1{} +Sprite "XZWCB0",1,1{} +Sprite "XZWCC0",1,1{} +Sprite "XZWCD0",1,1{} +Sprite "XZWCE0",1,1{} +Sprite "XZWCF0",1,1{} +Sprite "XZWCG0",1,1{} +Sprite "XZWCH0",1,1{} +Sprite "XZWCI0",1,1{} +Sprite "XZWCJ0",1,1{} +Sprite "XZWCK0",1,1{} +Sprite "XZWCL0",1,1{} +Sprite "XZWCM0",1,1{} +Sprite "XZWCN0",1,1{} +Sprite "XZWCO0",1,1{} +Sprite "XZWCP0",1,1{} +Sprite "XZWCQ0",1,1{} +Sprite "XZWCR0",1,1{} +Sprite "XZWCS0",1,1{} +Sprite "XZWCT0",1,1{} +Sprite "XZWCU0",1,1{} +Sprite "XZWCV0",1,1{} +Sprite "XZWCW0",1,1{} +Sprite "XZWCX0",1,1{} +Sprite "XZWCY0",1,1{} +Sprite "XZWCZ0",1,1{} +Sprite "XZWDA0",1,1{} +Sprite "XZWDB0",1,1{} +Sprite "XZWDC0",1,1{} +Sprite "XZWDD0",1,1{} +Sprite "XZWDE0",1,1{} +Sprite "XZWDF0",1,1{} +Sprite "XZWDG0",1,1{} +Sprite "XZWDH0",1,1{} +Sprite "XZWDI0",1,1{} +Sprite "XZWDJ0",1,1{} +Sprite "XZWDK0",1,1{} +Sprite "XZWDL0",1,1{} +Sprite "XZWDM0",1,1{} +Sprite "XZWDN0",1,1{} +Sprite "XZWDO0",1,1{} +Sprite "XZWDP0",1,1{} +Sprite "XZWDQ0",1,1{} +Sprite "XZWDR0",1,1{} +Sprite "XZWDS0",1,1{} +Sprite "XZWDT0",1,1{} +Sprite "XZWDU0",1,1{} +Sprite "XZWDV0",1,1{} +Sprite "XZWDW0",1,1{} +Sprite "XZWDX0",1,1{} +Sprite "XZWDY0",1,1{} +Sprite "XZWDZ0",1,1{} +Sprite "XZWEA0",1,1{} +Sprite "XZWEB0",1,1{} +Sprite "XZWEC0",1,1{} +Sprite "XZWED0",1,1{} +Sprite "XZWEE0",1,1{} +Sprite "XZWEF0",1,1{} +Sprite "XZWEG0",1,1{} +Sprite "XZWEH0",1,1{} +Sprite "XZWEI0",1,1{} +Sprite "XZWEJ0",1,1{} +Sprite "XZWEK0",1,1{} +Sprite "XZWEL0",1,1{} +Sprite "XZWEM0",1,1{} +Sprite "XZWEN0",1,1{} +Sprite "XZWEO0",1,1{} +Sprite "XZWEP0",1,1{} +Sprite "XZWEQ0",1,1{} +Sprite "XZWER0",1,1{} +Sprite "XZWES0",1,1{} +Sprite "XZWET0",1,1{} +Sprite "XZWEU0",1,1{} +Sprite "XZWEV0",1,1{} +Sprite "XZWEW0",1,1{} +Sprite "XZWEX0",1,1{} +Sprite "XZWEY0",1,1{} +Sprite "XZWEZ0",1,1{} +Sprite "XZWFA0",1,1{} +Sprite "XZWFB0",1,1{} +Sprite "XZWFC0",1,1{} +Sprite "XZWFD0",1,1{} +Sprite "XZWFE0",1,1{} +Sprite "XZWFF0",1,1{} +Sprite "XZWFG0",1,1{} +Sprite "XZWFH0",1,1{} +Sprite "XZWFI0",1,1{} +Sprite "XZWFJ0",1,1{} +Sprite "XZWFK0",1,1{} +Sprite "XZWFL0",1,1{} +Sprite "XZWFM0",1,1{} +Sprite "XZWFN0",1,1{} +Sprite "XZWFO0",1,1{} +Sprite "XZWFP0",1,1{} +Sprite "XZWFQ0",1,1{} +Sprite "XZWFR0",1,1{} +Sprite "XZWFS0",1,1{} +Sprite "XZWFT0",1,1{} +Sprite "XZWFU0",1,1{} +Sprite "XZWFV0",1,1{} +Sprite "XZWFW0",1,1{} +Sprite "XZWFX0",1,1{} +Sprite "XZWFY0",1,1{} +Sprite "XZWFZ0",1,1{} +Sprite "XZWGA0",1,1{} +Sprite "XZWGB0",1,1{} +Sprite "XZWGC0",1,1{} +Sprite "XZWGD0",1,1{} +Sprite "XZWGE0",1,1{} +Sprite "XZWGF0",1,1{} +Sprite "XZWGG0",1,1{} +Sprite "XZWGH0",1,1{} +Sprite "XZWGI0",1,1{} +Sprite "XZWGJ0",1,1{} +Sprite "XZWGK0",1,1{} +Sprite "XZWGL0",1,1{} +Sprite "XZWGM0",1,1{} +Sprite "XZWGN0",1,1{} +Sprite "XZWGO0",1,1{} +Sprite "XZWGP0",1,1{} +Sprite "XZWGQ0",1,1{} +Sprite "XZWGR0",1,1{} +Sprite "XZWGS0",1,1{} +Sprite "XZWGT0",1,1{} +Sprite "XZWGU0",1,1{} +Sprite "XZWGV0",1,1{} +Sprite "XZWGW0",1,1{} +Sprite "XZWGX0",1,1{} +Sprite "XZWGY0",1,1{} +Sprite "XZWGZ0",1,1{} +Sprite "XZWHA0",1,1{} +Sprite "XZWHB0",1,1{} +Sprite "XZWHC0",1,1{} +Sprite "XZWHD0",1,1{} +Sprite "XZWHE0",1,1{} +Sprite "XZWHF0",1,1{} +Sprite "XZWHG0",1,1{} +Sprite "XZWHH0",1,1{} +Sprite "XZWHI0",1,1{} +Sprite "XZWHJ0",1,1{} +Sprite "XZWHK0",1,1{} +Sprite "XZWHL0",1,1{} +Sprite "XZWHM0",1,1{} +Sprite "XZWHN0",1,1{} +Sprite "XZWHO0",1,1{} +Sprite "XZWHP0",1,1{} +Sprite "XZWHQ0",1,1{} +Sprite "XZWHR0",1,1{} +Sprite "XZWHS0",1,1{} +Sprite "XZWHT0",1,1{} +Sprite "XZWHU0",1,1{} +Sprite "XZWHV0",1,1{} +Sprite "XZWHW0",1,1{} +Sprite "XZWHX0",1,1{} +Sprite "XZWHY0",1,1{} +Sprite "XZWHZ0",1,1{} +Sprite "XZWIA0",1,1{} +Sprite "XZWIB0",1,1{} +Sprite "XZWIC0",1,1{} +Sprite "XZWID0",1,1{} +Sprite "XZWIE0",1,1{} +Sprite "XZWIF0",1,1{} +Sprite "XZWIG0",1,1{} +Sprite "XZWIH0",1,1{} +Sprite "XZWII0",1,1{} +Sprite "XZWIJ0",1,1{} +Sprite "XZWIK0",1,1{} +Sprite "XZWIL0",1,1{} +Sprite "XZWIM0",1,1{} +Sprite "XZWIN0",1,1{} +Sprite "XZWIO0",1,1{} +Sprite "XZWIP0",1,1{} +Sprite "XZWIQ0",1,1{} +Sprite "XZWIR0",1,1{} +Sprite "XZWIS0",1,1{} +Sprite "XZWIT0",1,1{} +Sprite "XZWIU0",1,1{} +Sprite "XZWIV0",1,1{} +Sprite "XZWIW0",1,1{} +Sprite "XZWIX0",1,1{} +Sprite "XZWIY0",1,1{} +Sprite "XZWIZ0",1,1{} +Sprite "XZWJA0",1,1{} +Sprite "XZWJB0",1,1{} +Sprite "XZWJC0",1,1{} +Sprite "XZWJD0",1,1{} +Sprite "XZWJE0",1,1{} +Sprite "XZWJF0",1,1{} +Sprite "XZWJG0",1,1{} +Sprite "XZWJH0",1,1{} +Sprite "XZWJI0",1,1{} +Sprite "XZWJJ0",1,1{} +Sprite "XZWJK0",1,1{} +Sprite "XZWJL0",1,1{} +Sprite "XZWJM0",1,1{} +Sprite "XZWJN0",1,1{} +Sprite "XZWJO0",1,1{} +Sprite "XZWJP0",1,1{} +Sprite "XZWJQ0",1,1{} +Sprite "XZWJR0",1,1{} +Sprite "XZWJS0",1,1{} +Sprite "XZWJT0",1,1{} +Sprite "XZWJU0",1,1{} +Sprite "XZWJV0",1,1{} +Sprite "XZWJW0",1,1{} +Sprite "XZWJX0",1,1{} +Sprite "XZWJY0",1,1{} +Sprite "XZWJZ0",1,1{} +Sprite "XZWKA0",1,1{} +Sprite "XZWKB0",1,1{} +Sprite "XZWKC0",1,1{} +Sprite "XZWKD0",1,1{} +Sprite "XZWKE0",1,1{} +Sprite "XZWKF0",1,1{} +Sprite "XZWKG0",1,1{} +Sprite "XZWKH0",1,1{} +Sprite "XZWKI0",1,1{} +Sprite "XZWKJ0",1,1{} +Sprite "XZWKK0",1,1{} +Sprite "XZWKL0",1,1{} +Sprite "XZWKM0",1,1{} +Sprite "XZWKN0",1,1{} +Sprite "XZWKO0",1,1{} +Sprite "XZWKP0",1,1{} +Sprite "XZWKQ0",1,1{} +Sprite "XZWKR0",1,1{} +Sprite "XZWKS0",1,1{} +Sprite "XZWKT0",1,1{} +Sprite "XZWKU0",1,1{} +Sprite "XZWKV0",1,1{} +Sprite "XZWKW0",1,1{} +Sprite "XZWKX0",1,1{} +Sprite "XZWKY0",1,1{} +Sprite "XZWKZ0",1,1{} +Sprite "XZWLA0",1,1{} +Sprite "XZWLB0",1,1{} +Sprite "XZWLC0",1,1{} +Sprite "XZWLD0",1,1{} +Sprite "XZWLE0",1,1{} +Sprite "XZWLF0",1,1{} +Sprite "XZWLG0",1,1{} +Sprite "XZWLH0",1,1{} +Sprite "XZWLI0",1,1{} +Sprite "XZWLJ0",1,1{} +Sprite "XZWLK0",1,1{} +Sprite "XZWLL0",1,1{} +Sprite "XZWLM0",1,1{} +Sprite "XZWLN0",1,1{} +Sprite "XZWLO0",1,1{} +Sprite "XZWLP0",1,1{} +Sprite "XZWLQ0",1,1{} +Sprite "XZWLR0",1,1{} +Sprite "XZWLS0",1,1{} +Sprite "XZWLT0",1,1{} +Sprite "XZWLU0",1,1{} +Sprite "XZWLV0",1,1{} +Sprite "XZWLW0",1,1{} +Sprite "XZWLX0",1,1{} +Sprite "XZWLY0",1,1{} +Sprite "XZWLZ0",1,1{} +Sprite "XZWMA0",1,1{} +Sprite "XZWMB0",1,1{} +Sprite "XZWMC0",1,1{} +Sprite "XZWMD0",1,1{} +Sprite "XZWME0",1,1{} +Sprite "XZWMF0",1,1{} +Sprite "XZWMG0",1,1{} +Sprite "XZWMH0",1,1{} +Sprite "XZWMI0",1,1{} +Sprite "XZWMJ0",1,1{} +Sprite "XZWMK0",1,1{} +Sprite "XZWML0",1,1{} +Sprite "XZWMM0",1,1{} +Sprite "XZWMN0",1,1{} +Sprite "XZWMO0",1,1{} +Sprite "XZWMP0",1,1{} +Sprite "XZWMQ0",1,1{} +Sprite "XZWMR0",1,1{} +Sprite "XZWMS0",1,1{} +Sprite "XZWMT0",1,1{} +Sprite "XZWMU0",1,1{} +Sprite "XZWMV0",1,1{} +Sprite "XZWMW0",1,1{} +Sprite "XZWMX0",1,1{} +Sprite "XZWMY0",1,1{} +Sprite "XZWMZ0",1,1{} +Sprite "XZWNA0",1,1{} +Sprite "XZWNB0",1,1{} +Sprite "XZWNC0",1,1{} +Sprite "XZWND0",1,1{} +Sprite "XZWNE0",1,1{} +Sprite "XZWNF0",1,1{} +Sprite "XZWNG0",1,1{} +Sprite "XZWNH0",1,1{} +Sprite "XZWNI0",1,1{} +Sprite "XZWNJ0",1,1{} +Sprite "XZWNK0",1,1{} +Sprite "XZWNL0",1,1{} +Sprite "XZWNM0",1,1{} +Sprite "XZWNN0",1,1{} +Sprite "XZWNO0",1,1{} +Sprite "XZWNP0",1,1{} +Sprite "XZWNQ0",1,1{} +Sprite "XZWNR0",1,1{} +Sprite "XZWNS0",1,1{} +Sprite "XZWNT0",1,1{} +Sprite "XZWNU0",1,1{} +Sprite "XZWNV0",1,1{} +Sprite "XZWNW0",1,1{} +Sprite "XZWNX0",1,1{} +Sprite "XZWNY0",1,1{} +Sprite "XZWNZ0",1,1{} +Sprite "XZWOA0",1,1{} +Sprite "XZWOB0",1,1{} +Sprite "XZWOC0",1,1{} +Sprite "XZWOD0",1,1{} +Sprite "XZWOE0",1,1{} +Sprite "XZWOF0",1,1{} +Sprite "XZWOG0",1,1{} +Sprite "XZWOH0",1,1{} +Sprite "XZWOI0",1,1{} +Sprite "XZWOJ0",1,1{} +Sprite "XZWOK0",1,1{} +Sprite "XZWOL0",1,1{} +Sprite "XZWOM0",1,1{} +Sprite "XZWON0",1,1{} +Sprite "XZWOO0",1,1{} +Sprite "XZWOP0",1,1{} +Sprite "XZWOQ0",1,1{} +Sprite "XZWOR0",1,1{} +Sprite "XZWOS0",1,1{} +Sprite "XZWOT0",1,1{} +Sprite "XZWOU0",1,1{} +Sprite "XZWOV0",1,1{} +Sprite "XZWOW0",1,1{} +Sprite "XZWOX0",1,1{} +Sprite "XZWOY0",1,1{} +Sprite "XZWOZ0",1,1{} +Sprite "XZWPA0",1,1{} +Sprite "XZWPB0",1,1{} +Sprite "XZWPC0",1,1{} +Sprite "XZWPD0",1,1{} +Sprite "XZWPE0",1,1{} +Sprite "XZWPF0",1,1{} +Sprite "XZWPG0",1,1{} +Sprite "XZWPH0",1,1{} +Sprite "XZWPI0",1,1{} +Sprite "XZWPJ0",1,1{} +Sprite "XZWPK0",1,1{} +Sprite "XZWPL0",1,1{} +Sprite "XZWPM0",1,1{} +Sprite "XZWPN0",1,1{} +Sprite "XZWPO0",1,1{} +Sprite "XZWPP0",1,1{} +Sprite "XZWPQ0",1,1{} +Sprite "XZWPR0",1,1{} +Sprite "XZWPS0",1,1{} +Sprite "XZWPT0",1,1{} +Sprite "XZWPU0",1,1{} +Sprite "XZWPV0",1,1{} +Sprite "XZWPW0",1,1{} +Sprite "XZWPX0",1,1{} +Sprite "XZWPY0",1,1{} +Sprite "XZWPZ0",1,1{} +Sprite "XZWQA0",1,1{} +Sprite "XZWQB0",1,1{} +Sprite "XZWQC0",1,1{} +Sprite "XZWQD0",1,1{} +Sprite "XZWQE0",1,1{} +Sprite "XZWQF0",1,1{} +Sprite "XZWQG0",1,1{} +Sprite "XZWQH0",1,1{} +Sprite "XZWQI0",1,1{} +Sprite "XZWQJ0",1,1{} +Sprite "XZWQK0",1,1{} +Sprite "XZWQL0",1,1{} +Sprite "XZWQM0",1,1{} +Sprite "XZWQN0",1,1{} +Sprite "XZWQO0",1,1{} +Sprite "XZWQP0",1,1{} +Sprite "XZWQQ0",1,1{} +Sprite "XZWQR0",1,1{} +Sprite "XZWQS0",1,1{} +Sprite "XZWQT0",1,1{} +Sprite "XZWQU0",1,1{} +Sprite "XZWQV0",1,1{} +Sprite "XZWQW0",1,1{} +Sprite "XZWQX0",1,1{} +Sprite "XZWQY0",1,1{} +Sprite "XZWQZ0",1,1{} +Sprite "XZWRA0",1,1{} +Sprite "XZWRB0",1,1{} +Sprite "XZWRC0",1,1{} +Sprite "XZWRD0",1,1{} +Sprite "XZWRE0",1,1{} +Sprite "XZWRF0",1,1{} +Sprite "XZWRG0",1,1{} +Sprite "XZWRH0",1,1{} +Sprite "XZWRI0",1,1{} +Sprite "XZWRJ0",1,1{} +Sprite "XZWRK0",1,1{} +Sprite "XZWRL0",1,1{} +Sprite "XZWRM0",1,1{} +Sprite "XZWRN0",1,1{} +Sprite "XZWRO0",1,1{} +Sprite "XZWRP0",1,1{} +Sprite "XZWRQ0",1,1{} +Sprite "XZWRR0",1,1{} +Sprite "XZWRS0",1,1{} +Sprite "XZWRT0",1,1{} +Sprite "XZWRU0",1,1{} +Sprite "XZWRV0",1,1{} +Sprite "XZWRW0",1,1{} +Sprite "XZWRX0",1,1{} +Sprite "XZWRY0",1,1{} +Sprite "XZWRZ0",1,1{} +Sprite "XZWSA0",1,1{} +Sprite "XZWSB0",1,1{} +Sprite "XZWSC0",1,1{} +Sprite "XZWSD0",1,1{} +Sprite "XZWSE0",1,1{} +Sprite "XZWSF0",1,1{} +Sprite "XZWSG0",1,1{} +Sprite "XZWSH0",1,1{} +Sprite "XZWSI0",1,1{} +Sprite "XZWSJ0",1,1{} +Sprite "XZWSK0",1,1{} +Sprite "XZWSL0",1,1{} +Sprite "XZWSM0",1,1{} +Sprite "XZWSN0",1,1{} +Sprite "XZWSO0",1,1{} +Sprite "XZWSP0",1,1{} +Sprite "XZWSQ0",1,1{} +Sprite "XZWSR0",1,1{} +Sprite "XZWSS0",1,1{} +Sprite "XZWST0",1,1{} +Sprite "XZWSU0",1,1{} +Sprite "XZWSV0",1,1{} +Sprite "XZWSW0",1,1{} +Sprite "XZWSX0",1,1{} +Sprite "XZWSY0",1,1{} +Sprite "XZWSZ0",1,1{} +Sprite "XZWTA0",1,1{} +Sprite "XZWTB0",1,1{} +Sprite "XZWTC0",1,1{} +Sprite "XZWTD0",1,1{} +Sprite "XZWTE0",1,1{} +Sprite "XZWTF0",1,1{} +Sprite "XZWTG0",1,1{} +Sprite "XZWTH0",1,1{} +Sprite "XZWTI0",1,1{} +Sprite "XZWTJ0",1,1{} +Sprite "XZWTK0",1,1{} +Sprite "XZWTL0",1,1{} +Sprite "XZWTM0",1,1{} +Sprite "XZWTN0",1,1{} +Sprite "XZWTO0",1,1{} +Sprite "XZWTP0",1,1{} +Sprite "XZWTQ0",1,1{} +Sprite "XZWTR0",1,1{} +Sprite "XZWTS0",1,1{} +Sprite "XZWTT0",1,1{} +Sprite "XZWTU0",1,1{} +Sprite "XZWTV0",1,1{} +Sprite "XZWTW0",1,1{} +Sprite "XZWTX0",1,1{} +Sprite "XZWTY0",1,1{} +Sprite "XZWTZ0",1,1{} +Sprite "XZWUA0",1,1{} +Sprite "XZWUB0",1,1{} +Sprite "XZWUC0",1,1{} +Sprite "XZWUD0",1,1{} +Sprite "XZWUE0",1,1{} +Sprite "XZWUF0",1,1{} +Sprite "XZWUG0",1,1{} +Sprite "XZWUH0",1,1{} +Sprite "XZWUI0",1,1{} +Sprite "XZWUJ0",1,1{} +Sprite "XZWUK0",1,1{} +Sprite "XZWUL0",1,1{} +Sprite "XZWUM0",1,1{} +Sprite "XZWUN0",1,1{} +Sprite "XZWUO0",1,1{} +Sprite "XZWUP0",1,1{} +Sprite "XZWUQ0",1,1{} +Sprite "XZWUR0",1,1{} +Sprite "XZWUS0",1,1{} +Sprite "XZWUT0",1,1{} +Sprite "XZWUU0",1,1{} +Sprite "XZWUV0",1,1{} +Sprite "XZWUW0",1,1{} +Sprite "XZWUX0",1,1{} +Sprite "XZWUY0",1,1{} +Sprite "XZWUZ0",1,1{} +Sprite "XZWVA0",1,1{} +Sprite "XZWVB0",1,1{} +Sprite "XZWVC0",1,1{} +Sprite "XZWVD0",1,1{} +Sprite "XZWVE0",1,1{} +Sprite "XZWVF0",1,1{} +Sprite "XZWVG0",1,1{} +Sprite "XZWVH0",1,1{} +Sprite "XZWVI0",1,1{} +Sprite "XZWVJ0",1,1{} +Sprite "XZWVK0",1,1{} +Sprite "XZWVL0",1,1{} +Sprite "XZWVM0",1,1{} +Sprite "XZWVN0",1,1{} +Sprite "XZWVO0",1,1{} +Sprite "XZWVP0",1,1{} +Sprite "XZWVQ0",1,1{} +Sprite "XZWVR0",1,1{} +Sprite "XZWVS0",1,1{} +Sprite "XZWVT0",1,1{} +Sprite "XZWVU0",1,1{} +Sprite "XZWVV0",1,1{} +Sprite "XZWVW0",1,1{} +Sprite "XZWVX0",1,1{} +Sprite "XZWVY0",1,1{} +Sprite "XZWVZ0",1,1{} +Sprite "XZWWA0",1,1{} +Sprite "XZWWB0",1,1{} +Sprite "XZWWC0",1,1{} +Sprite "XZWWD0",1,1{} +Sprite "XZWWE0",1,1{} +Sprite "XZWWF0",1,1{} +Sprite "XZWWG0",1,1{} +Sprite "XZWWH0",1,1{} +Sprite "XZWWI0",1,1{} +Sprite "XZWWJ0",1,1{} +Sprite "XZWWK0",1,1{} +Sprite "XZWWL0",1,1{} +Sprite "XZWWM0",1,1{} +Sprite "XZWWN0",1,1{} +Sprite "XZWWO0",1,1{} +Sprite "XZWWP0",1,1{} +Sprite "XZWWQ0",1,1{} +Sprite "XZWWR0",1,1{} +Sprite "XZWWS0",1,1{} +Sprite "XZWWT0",1,1{} +Sprite "XZWWU0",1,1{} +Sprite "XZWWV0",1,1{} +Sprite "XZWWW0",1,1{} +Sprite "XZWWX0",1,1{} +Sprite "XZWWY0",1,1{} +Sprite "XZWWZ0",1,1{} +Sprite "XZWXA0",1,1{} +Sprite "XZWXB0",1,1{} +Sprite "XZWXC0",1,1{} +Sprite "XZWXD0",1,1{} +Sprite "XZWXE0",1,1{} +Sprite "XZWXF0",1,1{} +Sprite "XZWXG0",1,1{} +Sprite "XZWXH0",1,1{} +Sprite "XZWXI0",1,1{} +Sprite "XZWXJ0",1,1{} +Sprite "XZWXK0",1,1{} +Sprite "XZWXL0",1,1{} +Sprite "XZWXM0",1,1{} +Sprite "XZWXN0",1,1{} +Sprite "XZWXO0",1,1{} +Sprite "XZWXP0",1,1{} +Sprite "XZWXQ0",1,1{} +Sprite "XZWXR0",1,1{} +Sprite "XZWXS0",1,1{} +Sprite "XZWXT0",1,1{} +Sprite "XZWXU0",1,1{} +Sprite "XZWXV0",1,1{} +Sprite "XZWXW0",1,1{} +Sprite "XZWXX0",1,1{} +Sprite "XZWXY0",1,1{} +Sprite "XZWXZ0",1,1{} +Sprite "XZWYA0",1,1{} +Sprite "XZWYB0",1,1{} +Sprite "XZWYC0",1,1{} +Sprite "XZWYD0",1,1{} +Sprite "XZWYE0",1,1{} +Sprite "XZWYF0",1,1{} +Sprite "XZWYG0",1,1{} +Sprite "XZWYH0",1,1{} +Sprite "XZWYI0",1,1{} +Sprite "XZWYJ0",1,1{} +Sprite "XZWYK0",1,1{} +Sprite "XZWYL0",1,1{} +Sprite "XZWYM0",1,1{} +Sprite "XZWYN0",1,1{} +Sprite "XZWYO0",1,1{} +Sprite "XZWYP0",1,1{} +Sprite "XZWYQ0",1,1{} +Sprite "XZWYR0",1,1{} +Sprite "XZWYS0",1,1{} +Sprite "XZWYT0",1,1{} +Sprite "XZWYU0",1,1{} +Sprite "XZWYV0",1,1{} +Sprite "XZWYW0",1,1{} +Sprite "XZWYX0",1,1{} +Sprite "XZWYY0",1,1{} +Sprite "XZWYZ0",1,1{} +Sprite "XZWZA0",1,1{} +Sprite "XZWZB0",1,1{} +Sprite "XZWZC0",1,1{} +Sprite "XZWZD0",1,1{} +Sprite "XZWZE0",1,1{} +Sprite "XZWZF0",1,1{} +Sprite "XZWZG0",1,1{} +Sprite "XZWZH0",1,1{} +Sprite "XZWZI0",1,1{} +Sprite "XZWZJ0",1,1{} +Sprite "XZWZK0",1,1{} +Sprite "XZWZL0",1,1{} +Sprite "XZWZM0",1,1{} +Sprite "XZWZN0",1,1{} +Sprite "XZWZO0",1,1{} +Sprite "XZWZP0",1,1{} +Sprite "XZWZQ0",1,1{} +Sprite "XZWZR0",1,1{} +Sprite "XZWZS0",1,1{} +Sprite "XZWZT0",1,1{} +Sprite "XZWZU0",1,1{} +Sprite "XZWZV0",1,1{} +Sprite "XZWZW0",1,1{} +Sprite "XZWZX0",1,1{} +Sprite "XZWZY0",1,1{} +Sprite "XZWZZ0",1,1{} diff --git a/zscript.txt b/zscript.txt index 9f5ba1be3..3e95ed381 100644 --- a/zscript.txt +++ b/zscript.txt @@ -32,6 +32,7 @@ version "4.5" #include "zscript/swwm_onfire.zsc" // handler code #include "zscript/handler/swwm_handler_cheats.zsc" +#include "zscript/handler/swwm_handler_damage.zsc" #include "zscript/handler/swwm_handler_flash.zsc" #include "zscript/handler/swwm_handler_iwantdie.zsc" #include "zscript/handler/swwm_handler_oneliners.zsc" @@ -41,6 +42,9 @@ version "4.5" #include "zscript/handler/swwm_handler_replacements.zsc" #include "zscript/handler/swwm_handler_shaders.zsc" #include "zscript/handler/swwm_handler_vanillaboss.zsc" +#include "zscript/handler/swwm_handler_worldload.zsc" +#include "zscript/handler/swwm_handler_worldthings.zsc" +#include "zscript/handler/swwm_handler_worldtick.zsc" // menu code #include "zscript/menu/swwm_menus.zsc" #include "zscript/menu/swwm_title.zsc" diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc new file mode 100644 index 000000000..427b8f82d --- /dev/null +++ b/zscript/handler/swwm_handler_damage.zsc @@ -0,0 +1,302 @@ +// WorldThingDamaged and friends + +extend Class SWWMHandler +{ + bool tookdamage[MAXPLAYERS]; + int spreecount[MAXPLAYERS]; + int lastkill[MAXPLAYERS]; + int multilevel[MAXPLAYERS]; + + // gibbing + private void DoGibThing( WorldEvent e ) + { + // no gib if it was erased or used the kill monsters cheat + if ( (e.DamageType == 'Ynykron') || (e.DamageType == 'Massacre') ) return; + int gibhealth = e.Thing.GetGibHealth(); + bool gotgibbed = (!e.Thing.bDONTGIB && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageSource && e.DamageSource.bEXTREMEDEATH) || (e.DamageType == 'Extreme') || (e.Thing.Health < gibhealth)) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) && (!e.DamageSource || !e.DamageSource.bNOEXTREMEDEATH)); + bool forcegibbed = false; + // force gib availability for some vanilla Doom monsters + if ( gotgibbed && ((e.Thing.GetClass() == "Demon") || (e.Thing.GetClass() == "Spectre") || (e.Thing.GetClass() == "HellKnight") || (e.Thing.GetClass() == "BaronOfHell") || (e.Thing.GetClass() == "Cacodemon") || (e.Thing.GetClass() == "Revenant") || (e.Thing.GetClass() == "Archvile")) ) + forcegibbed = true; + if ( !e.Thing.FindState("XDeath",true) && !e.Thing.FindState("Death.Extreme",true) && !forcegibbed ) + gotgibbed = false; + // only do special handling if they use our blood + if ( (e.Thing.GetBloodType(0) != "mkBlood") || e.Thing.bNOBLOOD ) + return; + CorpseFallTracker.TrackBody(e.Thing); + bool b; + Actor a; + // special handling of some monsters + if ( e.Thing.GetClass() == "Cyberdemon" ) + { + [b,a] = e.Thing.A_SpawnItemEx("mkGibber",flags:SXF_USEBLOODCOLOR); + if ( !b ) return; + mkGibber(a).gibbed = e.Thing; + mkGibber(a).delay = 40; + a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); + return; + } + else if ( e.Thing.GetClass() == "SpiderMastermind" ) + { + [b,a] = e.Thing.A_SpawnItemEx("mkGibber",flags:SXF_USEBLOODCOLOR); + if ( !b ) return; + mkGibber(a).gibbed = e.Thing; + mkGibber(a).delay = 60; + a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); + } + else if ( gotgibbed ) + { + [b,a] = e.Thing.A_SpawnItemEx("mkGibber",flags:SXF_USEBLOODCOLOR); + if ( !b ) return; + mkGibber(a).gibbed = e.Thing; + a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); + } + } + + // damage numbers, combat tracking, etc. + private void DoDamageHandling( WorldEvent e ) + { + bool spawnme = true; + if ( swwm_accdamage ) + { + // find existing damage number + for ( SWWMScoreObj d=damnums; d; d=d.next ) + { + if ( (d.starttic < level.maptime) || (d.acc != e.Thing) ) continue; + if ( d.score-e.Damage > d.score ) d.score = int.min; + else d.score -= e.Damage; + spawnme = false; + break; + } + } + if ( spawnme ) SWWMScoreObj.Spawn(-e.Damage,e.Thing.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+e.Thing.Height/2),ST_Damage,e.Thing); + // update combat tracker for it + if ( !(e.Thing is 'BossBrain') ) + { + for ( SWWMCombatTracker t=trackers; t; t=t.next ) + { + if ( t.mytarget != e.Thing ) continue; + t.updated = level.maptime+35; + break; + } + } + // fall dmg + SWWMWhoPushedMe.SetInstigator(e.Thing,e.DamageSource); + // stats + if ( e.Thing.player ) + { + tookdamage[e.Thing.PlayerNumber()] = true; + let s = SWWMStats.Find(e.Thing.player); + if ( s ) // deathmatch telefrag-on-spawn may cause this to be null + { + s.AddDamageTaken(e.Damage); + if ( e.Damage > s.toptaken ) s.toptaken = e.Damage; + } + } + if ( e.DamageSource && e.DamageSource.player ) + { + let s = SWWMStats.Find(e.DamageSource.player); + if ( s ) // deathmatch telefrag-on-spawn may cause this to be null + { + s.AddDamageDealt(e.Damage); + if ( e.Damage > s.topdealt ) s.topdealt = e.Damage; + } + } + } + + // combat hit chatter + private void DoCombatHit( WorldEvent e ) + { + if ( (e.DamageSource.bISMONSTER || e.DamageSource.player || (e.DamageSource is 'ScriptedMarine')) && (e.Thing == players[consoleplayer].mo) && (e.Thing.Health > 0) ) + { + if ( !lastcombat || (gametic > lastcombat+40) ) + { + if ( (e.Thing.IsFriend(e.DamageSource) || SWWMUtility.IsCivilian(e.DamageSource)) ) + lastcombat = AddOneliner("friendhit",1,10); + else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.DamageSource.bBOSS?2:4) && !SWWMHDoomHandler.IsCuteGirl(e.DamageSource) ) // [HDoom] don't shout at the girls + lastcombat = AddOneliner("gethit",1,15); + } + highesttic = gametic; + } + // friendly fire lines only fire up if we didn't kill them right away (because then the teamkill line should take priority) + if ( (e.DamageSource == players[consoleplayer].mo) && (e.Thing.bISMONSTER || e.Thing.player || (e.Thing is 'ScriptedMarine')) && (e.Thing.Health > 0) ) + { + // make sure it's not a moth, because otherwise they won't shut up about accidentally hurting them (it happens a lot) + if ( (e.Thing.IsFriend(e.DamageSource) || SWWMUtility.IsCivilian(e.Thing)) && !(e.Thing is 'LampMoth') ) + { + if ( !lastcombat || (gametic > lastcombat+40) ) + lastcombat = AddOneliner("hitfriend",1,10); + highesttic = gametic; + } + } + } + + // kill scoring + private void DoKillScoring( WorldEvent e ) + { + // fall damage tracking hack + let src = e.DamageSource; + if ( (e.DamageType == 'Falling') && !e.DamageSource ) + src = SWWMWhoPushedMe.RecallInstigator(e.Thing); + if ( (!src || !src.player || (src == e.Thing)) ) return; + let s = SWWMStats.Find(src.player); + if ( s ) + { + s.kills++; + s.AddWeaponKill(e.Inflictor,e.Thing,e.DamageType); + } + if ( src == players[consoleplayer].mo ) + { + highesttic = gametic; + if ( !lastcombat || (gametic > lastcombat+40) ) + { + if ( e.Thing.IsFriend(src) || SWWMUtility.IsCivilian(e.Thing) ) + lastcombat = AddOneliner("friendkill",1,5); + else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.Thing.bBOSS?2:5) && !SWWMHDoomHandler.IsCuteGirl(e.Thing) ) // [HDoom] don't shout at the girls + lastcombat = AddOneliner("scorekill",1,15); + } + } + // no credits unless it's a counted kill or marine (that isn't friendly) + if ( e.Thing.IsFriend(src) || (!e.Thing.default.bCountKill && !(e.Thing is 'ScriptedMarine')) ) + return; + int pnum = src.PlayerNumber(); + if ( level.maptime < (lastkill[pnum]+5*GameTicRate) ) + multilevel[pnum]++; + else multilevel[pnum] = 0; + if ( s && (multilevel[pnum]+1 > s.mkill) ) + s.mkill = multilevel[pnum]+1; + lastkill[pnum] = level.maptime; + // scoring + int score = min(1000,int(ceil(e.Thing.GetSpawnHealth()*.05)*10)); + SWWMScoreObj scr = null; + if ( src.player == players[consoleplayer] ) + scr = SWWMScoreObj.Spawn(score,e.Thing.Vec3Offset(0,0,e.Thing.Height/2)); + int ofs = 0; + if ( e.DamageType == 'Push' ) + { + score += 500; + if ( scr ) + { + scr.xscore[ofs] = 0; + scr.xstr[ofs] = StringTable.Localize("$SWWM_SHAMEFUL"); + scr.xcnt = ++ofs; + } + } + else if ( e.DamageType == 'Buttslam' ) + { + score += 300; + if ( scr ) + { + scr.xscore[ofs] = 0; + scr.xstr[ofs] = StringTable.Localize("$SWWM_BUTTSLAM"); + scr.xcnt = ++ofs; + } + } + else if ( e.DamageType == 'Love' ) + { + score += 600; + if ( scr ) + { + scr.xscore[ofs] = 0; + scr.xtcolor[ofs] = Font.FindFontColor('BlushPink'); + scr.xstr[ofs] = StringTable.Localize((e.Thing is 'WolfensteinSS')?"$SWWM_LOVED_ALT":"$SWWM_LOVED"); + scr.xcnt = ++ofs; + } + } + else if ( e.Inflictor is 'FroggyChair' ) + { + score += 1440; + if ( scr ) + { + scr.xscore[ofs] = 0; + scr.xtcolor[ofs] = Font.CR_GREEN; + scr.xstr[ofs] = StringTable.Localize("$SWWM_FROGGED"); + scr.xcnt = ++ofs; + } + } + Inventory pb; + if ( e.Inflictor && (pb = e.Inflictor.FindInventory('ParriedBuff')) ) + { + score += 200; + if ( pb.special1&1 ) score += 200; + if ( scr ) + { + scr.xscore[ofs] = 0; + if ( pb.special1&1 ) scr.xstr[ofs] = StringTable.Localize("$SWWM_PPARRY"); + else scr.xstr[ofs] = StringTable.Localize("$SWWM_PARRY"); + scr.xcnt = ++ofs; + } + } + if ( (e.Damage >= e.Thing.GetSpawnHealth()*2) || (((e.Thing.Health <= e.Thing.GetGibHealth()) || (src.bEXTREMEDEATH) || (e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageType == 'Extreme')) && !src.bNOEXTREMEDEATH && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH)) ) + { + score *= 2; + if ( scr ) + { + scr.xscore[ofs] = 0; + scr.xstr[ofs] = StringTable.Localize("$SWWM_OVERKILL"); + scr.xcnt = ++ofs; + } + } + score = int(score*(1.+.5*min(multilevel[pnum],16))); + if ( (multilevel[pnum] > 0) && scr ) + { + if ( scr ) + { + scr.xscore[ofs] = (multilevel[pnum]>=16)?int.max:(multilevel[pnum]+1); + scr.xstr[ofs] = StringTable.Localize("$SWWM_MULTIKILL"); + scr.xcnt = ++ofs; + } + } + spreecount[pnum]++; + if ( s && (spreecount[pnum] > s.skill) && !tookdamage[pnum] ) + s.skill = spreecount[pnum]; + if ( !tookdamage[pnum] ) + { + int spreebonus = 10*(spreecount[pnum]); + // taper off after 10x (some people go really far with these, holy fuck) + if ( spreecount[pnum] > 10 ) spreebonus = int(spreebonus*((spreecount[pnum]/10.)**.25)); + score += 100+spreebonus; + if ( (spreecount[pnum] > 0) && scr ) + { + scr.xscore[ofs] = spreecount[pnum]; + scr.xstr[ofs] = StringTable.Localize("$SWWM_SPREEKILL"); + scr.xcnt = ++ofs; + } + } + if ( e.Thing.bBOSS ) + { + score += 2000; + if ( scr ) + { + scr.xscore[ofs] = 0; + scr.xstr[ofs] = StringTable.Localize("$SWWM_BOSSKILL"); + scr.xcnt = ++ofs; + } + } + SWWMCredits.Give(src.player,score); + if ( scr ) scr.score = score; // update final score + if ( (level.killed_monsters+1 == level.total_monsters) && !allkills ) + { + allkills = true; + SWWMCredits.Give(src.player,1000); + Console.Printf(StringTable.Localize("$SWWM_LASTMONSTER"),src.player.GetUserName(),1000); + SWWMScoreObj.Spawn(1000,src.Vec3Offset(0,0,src.Height/2)); + } + } + + override void WorldThingDamaged( WorldEvent e ) + { + if ( e.Damage > 0 ) DoDamageHandling(e); + if ( e.DamageSource && (e.DamageSource != e.Thing) ) DoCombatHit(e); + if ( (e.Thing.Health > 0) || e.Thing.bKilled || e.Thing.bCorpse ) return; + DoGibThing(e); + // romero hax + if ( (e.Thing is 'BossBrain') && (e.DamageType == 'Telefrag') ) + e.DamageSource.DamageMobj(null,null,Actor.TELEFRAG_DAMAGE,'EndLevel'); + // voodoo doll telefragging barrel hax (eviternity death exits) + if ( (e.Thing is 'ExplosiveBarrel') && (e.DamageType == 'Telefrag') && e.DamageSource.player && (e.DamageSource.player.mo != e.DamageSource) ) + e.DamageSource.DamageMobj(null,null,Actor.TELEFRAG_DAMAGE,'EndLevel'); + if ( !e.Thing.player && !e.Thing.bIsMonster && !e.Thing.bCountKill && !(e.Thing is 'ScriptedMarine') ) return; + DoKillScoring(e); + } +} diff --git a/zscript/handler/swwm_handler_worldload.zsc b/zscript/handler/swwm_handler_worldload.zsc new file mode 100644 index 000000000..4caab4c9c --- /dev/null +++ b/zscript/handler/swwm_handler_worldload.zsc @@ -0,0 +1,277 @@ +// WorldLoaded/WorldUnloaded events + +extend Class SWWMHandler +{ + // list contains a sector that belongs to each portal group + // used to ease some portal-aware functions + Array psectors; + + // for minimap + Array ffsectors; + + // level end stats + override void WorldUnloaded( WorldEvent e ) + { + let ti = ThinkerIterator.Create("SWWMStats",Thinker.STAT_STATIC); + SWWMStats s; + while ( s = SWWMStats(ti.Next()) ) + { + if ( !(gameinfo.gametype&GAME_STRIFE) ) + { + int clust = 0; + bool secret = false; + if ( SWWMUtility.IsEviternity() ) + { + // we have to do some heavy lifting here because episodes don't match clusters + if ( level.levelnum <= 5 ) clust = 1; + else if ( level.levelnum <= 10 ) clust = 2; + else if ( level.levelnum <= 15 ) clust = 3; + else if ( level.levelnum <= 20 ) clust = 4; + else if ( level.levelnum <= 25 ) clust = 5; + else if ( level.levelnum <= 30 ) clust = 6; + else if ( level.levelnum <= 32 ) + { + secret = true; + if ( level.levelnum <= 31 ) clust = 7; + else clust = 8; + } + } + else + { + if ( (gameinfo.gametype&GAME_DOOM) && ((level.cluster == 9) || (level.cluster == 10)) ) + secret = true; + clust = level.cluster; + } + int csiz = s.clustervisit.Size(); + if ( csiz == 0 ) + { + s.clustervisit.Push(clust); + s.secretdone.Push(secret); + } + else if ( s.clustervisit[csiz-1] != clust ) + { + s.clustervisit.Push(clust); + s.secretdone.Push(secret|s.secretdone[csiz-1]); + } + } + s.AddLevelStats(); + s.lastcluster = level.cluster; + } + ClearAllShaders(players[consoleplayer]); + // reset score on dead players (death exitâ„¢) + for ( int i=0; i 0) ) continue; + let c = SWWMCredits.Find(players[i]); + if ( c ) c.credits = c.hcredits = 0; + } + // end of episode resets + if ( level.nextsecretmap.Left(6) == "enDSeQ" ) + { + for ( int i=0; i lines; + lines.Clear(); + data.Split(lines,"\n"); + bool valid = false; + for ( int j=0; j spl; + spl.Clear(); + lines[j].Split(spl," ",TOK_SKIPEMPTY); + // check game string (if any) + if ( spl.Size() > 2 ) + { + if ( (spl[2] ~== "DOOM") && !(gameinfo.gametype&GAME_Doom) ) continue; + else if ( (spl[2] ~== "HERETIC") && !(gameinfo.gametype&GAME_Heretic) ) continue; + else if ( (spl[2] ~== "HEXEN") && !(gameinfo.gametype&GAME_Hexen) ) continue; + else if ( (spl[2] ~== "STRIFE") && !(gameinfo.gametype&GAME_Strife) ) continue; + else if ( (spl[2] ~== "CHEX") && !(gameinfo.gametype&GAME_Chex) ) continue; + } + // valid lock, prepare it + let li = new("LIEntry"); + li.locknumber = spl[1].ToInt(); + li.hascolor = false; + // see if there's a Mapcolor defined + int k = j+1; + for ( int k=j+2; k skipme; + skipme.Clear(); + // find exit lines, and use lines that aren't exits + for ( int i=0; i alreadygold; + + // attempt to optimize Ynykron singularity suction + Array suckableactors; + + override void WorldThingRevived( WorldEvent e ) + { + // reattach combat tracker + if ( !swwm_notrack && (e.Thing.bSHOOTABLE || e.Thing.bISMONSTER) && !(e.Thing is 'LampMoth') && !(e.Thing is 'CompanionLamp') ) + SWWMCombatTracker.Spawn(e.Thing); + // reattach headpats + if ( SWWMUtility.IdentifyingDog(e.Thing) || SWWMUtility.IdentifyingCaco(e.Thing) + || SWWMUtility.IdentifyingDrug(e.Thing) || SWWMUtility.IdentifyingDoubleBoi(e.Thing) ) + { + // you can pet the dog, and you can also pet the caco (and friends) + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + } + if ( !(e.Thing is 'PlayerPawn') ) return; + // reset some vars + if ( e.Thing.playernumber() != -1 ) + { + multilevel[e.Thing.playernumber()] = 0; + spreecount[e.Thing.playernumber()] = 0; + tookdamage[e.Thing.playernumber()] = false; + lastkill[e.Thing.playernumber()] = int.min; + } + // reset uptime since player had just died + SWWMStats s = SWWMStats.Find(e.Thing.player); + if ( s ) s.lastspawn = level.totaltime; + } + + private bool HexenMap40() + { + if ( level.GetChecksum() ~== "2A6C4235B942467D25FD50D5B313E67A" ) return true; // 1.1 + if ( level.GetChecksum() ~== "1C5DE5A921DEE405E98E7E09D9829387" ) return true; // 1.0 + if ( level.GetChecksum() ~== "EFAFE59092DE5E613562ACF52B86C37F" ) return true; // beta + return false; + } + + private static bool ShouldSpawnGold() + { + int totalneeded = 0; + // check "free space" in player inventories + for ( int i=0; i 0); + } + + override void WorldThingDied( WorldEvent e ) + { + if ( e.Thing.default.bISMONSTER && ((e.Thing.default.bBOSS) || (e.Thing.GetSpawnHealth() >= 1000)) && (alreadygold.Find(e.Thing) == alreadygold.Size()) ) + { + // make sure we can't farm drops from revivable enemies + // (or cause some things to spam-spawn gold shells) + // (*cough* Touhou Doom *cough*) + alreadygold.Push(e.Thing); + // weight drop chance based on total count of this monster type + // guarantees that maps that get a bit slaughtery won't become easy farms for drops + int dropweight = 0; + let ti = ThinkerIterator.Create(e.Thing.GetClass()); + while ( ti.Next() ) dropweight++; + int minchance = max(1,6-(e.Thing.GetSpawnHealth()/1000)); + dropweight = max(minchance,dropweight/4); + // make sure the gold shell is "worth spawning", too + if ( !Random[GoldDrop](0,dropweight) && ShouldSpawnGold() ) + { + let g = Actor.Spawn("GoldShell",e.Thing.Vec3Offset(0,0,e.Thing.Height/2)); + double ang = FRandom[SpareShells](0,360); + g.vel.xy = (cos(ang),sin(ang))*FRandom[SpareShells](.4,.8); + g.vel.z = FRandom[SpareShells](2.,4.); + } + } + // Korax instakill + if ( (e.Thing is 'Korax') && !e.Thing.special2 && HexenMap40() ) + { + e.Thing.special2 = 1; + // terminate the monster closet scripts, open all the + // doors ourselves + level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,220); + level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,220); + level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,221); + level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,255); + level.ExecuteSpecial(Door_Open,e.Thing,null,false,10,16); + level.ExecuteSpecial(Door_Open,e.Thing,null,false,11,16); + level.ExecuteSpecial(Door_Open,e.Thing,null,false,12,16); + level.ExecuteSpecial(Door_Open,e.Thing,null,false,13,16); + level.ExecuteSpecial(Door_Open,e.Thing,null,false,14,16); + level.ExecuteSpecial(Door_Open,e.Thing,null,false,10,16); + // keep the portal closed, you can't leave unless you + // kill everyone else + let t = new("UglyBoyGetsFuckedUp"); + t.ChangeStatNum(Thinker.STAT_USER); + } + if ( swwm_partytime ) + { + let pt = Actor.Spawn("PartyTime",e.Thing.pos); + pt.target = e.Thing; + } + // force insert gib animations on some vanilla Doom monsters + int gibhealth = e.Thing.GetGibHealth(); + bool gotgibbed = (!e.Thing.bDONTGIB && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageSource && e.DamageSource.bEXTREMEDEATH) || (e.DamageType == 'Extreme') || (e.Thing.Health < gibhealth)) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) && (!e.DamageSource || !e.DamageSource.bNOEXTREMEDEATH)); + if ( !gotgibbed ) return; + if ( (e.Thing.GetClass() == "Demon") || (e.Thing.GetClass() == "Spectre") ) + ExtraGibDeaths.GibThis(e.Thing,"DemonXDeath"); + else if ( e.Thing.GetClass() == "HellKnight" ) + ExtraGibDeaths.GibThis(e.Thing,"KnightXDeath"); + else if ( e.Thing.GetClass() == "BaronOfHell" ) + ExtraGibDeaths.GibThis(e.Thing,"BaronXDeath"); + else if ( e.Thing.GetClass() == "Cacodemon" ) + ExtraGibDeaths.GibThis(e.Thing,"CacoXDeath"); + else if ( e.Thing.GetClass() == "Revenant" ) + ExtraGibDeaths.GibThis(e.Thing,"BonerXDeath"); + else if ( e.Thing.GetClass() == "Archvile" ) + ExtraGibDeaths.GibThis(e.Thing,"VileXDeath"); + } + + private void DoKeyTagFix( Actor a ) + { + if ( a is 'SWWMKey' ) return; // mod's custom keys are fine + if ( a is 'RedCard' ) a.SetTag("$T_REDCARD"); + else if ( a is 'BlueCard' ) a.SetTag("$T_BLUECARD"); + else if ( a is 'YellowCard' ) a.SetTag("$T_YELLOWCARD"); + else if ( a is 'RedSkull' ) a.SetTag("$T_REDSKULL"); + else if ( a is 'BlueSkull' ) a.SetTag("$T_BLUESKULL"); + else if ( a is 'YellowSkull' ) a.SetTag("$T_YELLOWSKULL"); + else if ( a is 'KeyYellow' ) a.SetTag("$T_YELLOWKEY"); + else if ( a is 'KeyGreen' ) a.SetTag("$T_GREENKEY"); + else if ( a is 'KeyBlue' ) a.SetTag("$T_BLUEKEY"); + else if ( a.GetClassName() == 'KeyRed' ) a.SetTag("$T_REDKEY"); + else if ( a is 'KeySteel' ) a.SetTag("$T_KEYSTEEL"); + else if ( a is 'KeyCave' ) a.SetTag("$T_KEYCAVE"); + else if ( a is 'KeyAxe' ) a.SetTag("$T_KEYAXE"); + else if ( a is 'KeyFire' ) a.SetTag("$T_KEYFIRE"); + else if ( a is 'KeyEmerald' ) a.SetTag("$T_KEYEMERALD"); + else if ( a is 'KeyDungeon' ) a.SetTag("$T_KEYDUNGEON"); + else if ( a is 'KeySilver' ) a.SetTag("$T_KEYSILVER"); + else if ( a is 'KeyRusted' ) a.SetTag("$T_KEYRUSTED"); + else if ( a is 'KeyHorn' ) a.SetTag("$T_KEYHORN"); + else if ( a is 'KeySwamp' ) a.SetTag("$T_KEYSWAMP"); + else if ( a is 'KeyCastle' ) a.SetTag("$T_KEYCASTLE"); + } + + // tempfix keys have no tags + static void KeyTagFix( Actor a ) + { + let hnd = SWWMHandler(Find("SWWMHandler")); + if ( hnd ) hnd.DoKeyTagFix(a); + } + + // copies the floatbob of overlapping identical items, so it doesn't look weird + private void CopyFloatBob( Actor a ) + { + let bt = BlockThingsIterator.Create(a,16); + while ( bt.Next() ) + { + let t = bt.Thing; + if ( !t || (t == a) || !(t is 'Inventory') || !(t.spawnpoint ~== a.spawnpoint) ) continue; + a.floatbobphase = t.floatbobphase; + a.angle = t.angle; // also copy angle + break; + } + } + + override void WorldThingDestroyed( WorldEvent e ) + { + if ( !e.Thing.default.bSHOOTABLE || !e.Thing.default.bMISSILE ) + return; + // remove from suckables + int pos = suckableactors.Find(e.Thing); + if ( pos >= suckableactors.Size() ) return; + suckableactors.Delete(pos); + } + + override void WorldThingSpawned( WorldEvent e ) + { + IWantDieSpawn(e); + if ( (e.Thing is 'TeleportDest') || (e.Thing is 'BossTarget') ) + { + let d = Actor.Spawn("SWWMTeleportDest",e.Thing.pos); + d.bNOGRAVITY = e.Thing.bNOGRAVITY; + } + if ( e.Thing is 'Inventory' ) + CopyFloatBob(e.Thing); + if ( swwm_doomfall && e.Thing.bISMONSTER ) + e.Thing.bFALLDAMAGE = true; + if ( e.Thing is 'Key' ) + { + DoKeyTagFix(e.Thing); + SWWMInterest.Spawn(thekey:Key(e.Thing)); + } + if ( indoomvacation == -1 ) indoomvacation = SWWMUtility.InDoomVacation(); + if ( e.Thing.GetClass() == 'Pig' ) + e.Thing.SetTag("$FN_PIG"); // missing in gzdoom + // eviternity stuff + else if ( (e.Thing.GetClassName() == "Archangelus") + || (e.Thing.GetClassName() == "ArchangelusA") + || (e.Thing.GetClassName() == "ArchangelusB") ) + e.Thing.SetTag("$FN_ANGEL"); + else if ( e.Thing.GetClassName() == "AstralCaco" ) + e.Thing.SetTag("$FN_ASTRAL"); + else if ( e.Thing.GetClassName() == "Annihilator" ) + { + e.Thing.SetTag("$FN_ANNIHIL"); + // OH BOY, THESE AREN'T CHANGEABLE + //e.Thing.Obituary = "$OB_ANNIHIL"; + } + else if ( e.Thing.GetClassName() == "FormerCaptain" ) + { + e.Thing.SetTag("$FN_FCAPTAIN"); + //e.Thing.Obituary = "$OB_FCAPTAIN"; + } + else if ( e.Thing.GetClassName() == "NightmareDemon" ) + { + e.Thing.SetTag("$FN_NDEMON"); + //e.Thing.Obituary = "$OB_NDEMON"; + } + // doom vacation stuff + else if ( indoomvacation ) + { + if ( e.Thing.GetClassName() == "Babe" ) + { + e.Thing.bSHOOTABLE = false; // no hurt + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = .2; + } + else if ( e.Thing.GetClassName() == "CommanderKeen" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = .4; + HeadpatTracker(hp).hdoomangfix = 5; + } + else if ( e.Thing.GetClassName() == "BBChair" ) + { + e.Thing.bUSESPECIAL = false; + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = .2; + HeadpatTracker(hp).hdoomangfix = 15; + HeadpatTracker(hp).patstate = e.Thing.MeleeState; + } + else if ( e.Thing.GetClassName() == "EvilEye" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = .1; + } + else if ( e.Thing.GetClassName() == "HeadCandles" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomangfix = 20; + } + else if ( e.Thing.GetClassName() == "HeartColumn" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = -.3; + } + else if ( e.Thing.GetClassName() == "Meat2" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = .6; + HeadpatTracker(hp).hdoomangfix = -15; + HeadpatTracker(hp).dvacationarghack = true; + } + else if ( e.Thing.GetClassName() == "Meat3" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = .6; + HeadpatTracker(hp).hdoomangfix = 20; + HeadpatTracker(hp).dvacationarghack = true; + } + else if ( e.Thing.GetClassName() == "LegsBabe" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = -1.5; + HeadpatTracker(hp).hdoomangfix = 20; + HeadpatTracker(hp).dvacationarghack = true; + } + else if ( e.Thing.GetClassName() == "Meat4" ) + { + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + HeadpatTracker(hp).hdoomheightfix = .6; + HeadpatTracker(hp).hdoomangfix = 15; + HeadpatTracker(hp).dvacationarghack = true; + } + } + if ( SWWMUtility.IdentifyingDog(e.Thing) || SWWMUtility.IdentifyingCaco(e.Thing) + || SWWMUtility.IdentifyingDrug(e.Thing) || SWWMUtility.IdentifyingDoubleBoi(e.Thing) ) + { + // you can pet the dog, and you can also pet the caco (and friends) + let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); + hp.target = e.Thing; + } + SWWMCombatTracker trk; + if ( !swwm_notrack && (e.Thing.bSHOOTABLE || e.Thing.bISMONSTER) && !(e.Thing is 'LampMoth') && !(e.Thing is 'CompanionLamp') ) + trk = SWWMCombatTracker.Spawn(e.Thing); + if ( !(e.Thing is 'LampMoth') && (e.Thing.bSHOOTABLE || e.Thing.bISMONSTER || e.Thing.bCORPSE || (e.Thing is 'Inventory') || (e.Thing is 'CompanionLamp')) ) + { + if ( (swwm_shadows == 2) || ((swwm_shadows == 1) && ((e.Thing is 'Demolitionist') || (e.Thing.SpawnState.sprite == e.Thing.GetSpriteIndex('XZW1')))) ) + SWWMShadow.Track(e.Thing); + } + // Ynykron vortex optimization (faster than a thinker iterator) + if ( e.Thing.bSHOOTABLE || e.Thing.bMISSILE ) + SuckableActors.Push(e.Thing); + // vanilla blood color changes + if ( (e.Thing.GetClass() == "BaronOfHell") || (e.Thing.GetClass() == "HellKnight") || (e.Thing.GetClass() == "Bishop") || (e.Thing.GetClass() == "Korax") ) + { + let gb = Actor.Spawn("GreenBloodReference"); + e.Thing.CopyBloodColor(gb); + gb.Destroy(); + } + else if ( e.Thing.GetClass() == "Cacodemon" ) + { + let bb = Actor.Spawn("BlueBloodReference"); + e.Thing.CopyBloodColor(bb); + bb.Destroy(); + } + else if ( (e.Thing.GetClass() == "Wizard") || (e.Thing.GetClass() == "Heresiarch") || (e.Thing.GetClass() == "Sorcerer2") ) + { + let pb = Actor.Spawn("PurpleBloodReference"); + e.Thing.CopyBloodColor(pb); + pb.Destroy(); + } + else if ( e.Thing.GetClass() == "LostSoul" ) + e.Thing.bNOBLOOD = true; + VanillaBossSpawn(e,trk); + // inflation check + if ( trk ) + { + trk.maxhealth = trk.lasthealth = e.Thing.Health; + trk.intp.Reset(trk.lasthealth); + } + } +} diff --git a/zscript/handler/swwm_handler_worldtick.zsc b/zscript/handler/swwm_handler_worldtick.zsc new file mode 100644 index 000000000..77aeb0efe --- /dev/null +++ b/zscript/handler/swwm_handler_worldtick.zsc @@ -0,0 +1,297 @@ +// WorldTick functions + +extend Class SWWMHandler +{ + transient Array combatactors; + transient Array combattics; + transient int highesttic, lastcombat; + int lastitemcount[MAXPLAYERS]; + transient String curlang; + transient bool curfuntags; + SWWMSimpleTracker strackers; + int strackers_cnt; + bool mnotify; + bool allkills, allitems, allsecrets; + bool mapclear; + int mapclearagain, restartmus; + String lastmus; + int lastorder; + bool lastloop; + + private void LangRefresh() + { + if ( (language != curlang) || (swwm_funtags != curfuntags) ) + { + // manually refresh some tags if language has changed + for ( SWWMCombatTracker t=trackers; t; t=t.next ) + t.UpdateTag(); + for ( SWWMInterest p=intpoints; p; p=p.next ) + { + if ( (p.type != INT_Key) || !p.trackedkey ) continue; + p.keytag = p.trackedkey.GetTag(); + } + for ( int i=0; i lastitemcount[i] ) + { + int score = 10*(players[i].itemcount-lastitemcount[i]); + if ( (level.total_items == level.found_items) && !allitems ) + { + allitems = true; + Console.Printf(StringTable.Localize("$SWWM_LASTITEM"),players[i].GetUserName(),500); + score += 490; + } + SWWMCredits.Give(players[i],score); + SWWMScoreObj.Spawn(score,players[i].mo.Vec3Offset(0,0,players[i].mo.Height/2)); + lastitemcount[i] = players[i].itemcount; + let s = SWWMStats.Find(players[i]); + s.items++; + } + } + } + + // combat tracking + private void CombatTrack() + { + // prune old entries + for ( int i=0; i highesttic ) + highesttic = combattics[i]; + if ( combatactors[i] + && (combatactors[i].Health > 0) + && !combatactors[i].bKILLED + && !combatactors[i].bCORPSE + && (combatactors[i].target == players[consoleplayer].mo) + && (combattics[i]+2000 > gametic) ) + continue; + combatactors.Delete(i); + combattics.Delete(i); + i--; + } + bool enteredcombat = false; + // add new entries + let ti = ThinkerIterator.Create("Actor"); + Actor a; + while ( a = Actor(ti.Next()) ) + { + if ( !a.player && !a.bISMONSTER ) continue; + // ignore the dead + if ( (a.Health <= 0) || a.bKILLED || a.bCORPSE ) continue; + // ignore friends + if ( a.IsFriend(players[consoleplayer].mo) ) continue; + // [Strife] ignore if not in combat + if ( (gameinfo.gametype&GAME_Strife) && !a.bINCOMBAT && !a.bJUSTATTACKED ) continue; + // [Strife] ignore certain classes + if ( (a is 'RatBuddy') || (a is 'Peasant') || (a is 'Beggar') ) continue; + // [Strife] ignore Oracle's spectre while it's inactive + if ( (a is 'AlienSpectre3') && a.InStateSequence(a.CurState,a.FindState("Spawn")) ) continue; + // ignore if not targetted or player can't see it + if ( (a.target != players[consoleplayer].mo) + || !SWWMUtility.InPlayerFOV(players[consoleplayer],a) ) continue; + // [HDoom] ignore cute girls + if ( SWWMHDoomHandler.IsCuteGirl(a.target) ) continue; + // is it already in? + bool addme = true; + for ( int i=0; i highesttic+700)) ) + lastcombat = AddOneliner("fightstart",1,10); + } + + private void OneHundredPercentCheck() + { + if ( !mapclear && (restartmus > 0) ) + { + restartmus--; + if ( restartmus == 0 ) S_ChangeMusic(lastmus,lastorder,lastloop,true); + return; + } + // ignore levels that have NOTHING + if ( (level.total_secrets <= 0) && (level.total_items <= 0) && (level.total_monsters <= 0) ) return; + if ( mapclear ) + { + if ( (swwm_silencemap == 1) && (musplaying.name != "") ) + { + lastmus = musplaying.name; + lastorder = musplaying.baseorder; + lastloop = musplaying.loop; + S_ChangeMusic("",force:true); + } + else if ( (swwm_silencemap > 1) && (musplaying.name != "music/olg.ogg") ) + { + lastmus = musplaying.name; + lastorder = musplaying.baseorder; + lastloop = musplaying.loop; + S_ChangeMusic("music/olg.ogg",force:true); + } + if ( (level.found_secrets < level.total_secrets) || (level.found_items < level.total_items) || (level.killed_monsters < level.total_monsters) ) + { + if ( swwm_silencemap > 0 ) + { + restartmus = 25; + S_ChangeMusic("",force:true); + } + S_StartSound("recordscratch",CHAN_VOICE,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); + mapclear = false; + if ( mapclearagain > 1 ) Console.Printf(StringTable.Localize("$SWWM_NOTCLEARAGAIN")); + else Console.Printf(StringTable.Localize("$SWWM_NOTCLEAR")); + } + return; + } + if ( (level.found_secrets < level.total_secrets) || (level.found_items < level.total_items) || (level.killed_monsters < level.total_monsters) ) return; + restartmus = 0; + mapclear = true; + if ( mapclearagain ) Console.Printf(StringTable.Localize("$SWWM_ALLCLEARAGAIN"),500); + else Console.Printf(StringTable.Localize("$SWWM_ALLCLEAR"),5000); + S_StartSound("misc/wow",CHAN_VOICE,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); + lastmus = musplaying.name; + lastorder = musplaying.baseorder; + lastloop = musplaying.loop; + if ( swwm_silencemap == 1 ) S_ChangeMusic("",force:true); + else if ( swwm_silencemap > 1 ) S_ChangeMusic("music/olg.ogg",force:true); + for ( int i=0; i viewdist ) + continue; + if ( a == players[consoleplayer].Camera ) + continue; + if ( !a.player && !a.bSOLID && !a.bSHOOTABLE && !a.bISMONSTER && !a.bFRIENDLY && !(a is 'Inventory') && !(a is 'Chancebox') ) + continue; + if ( !thesight && !a.IsFriend(players[consoleplayer].mo) && !players[consoleplayer].Camera.CheckSight(a,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) + continue; + if ( a.bKILLED || (a.Health <= 0) ) + continue; + if ( (a is 'Inventory') && (!a.bSPECIAL || Inventory(a).Owner) ) + continue; + if ( (a is 'Chancebox') && (a.CurState != a.SpawnState) ) + continue; + SWWMSimpleTracker.Track(a); + } + if ( swwm_mm_portaloverlay && (psectors.Size() > 1) ) + { + // oh boy here we go + int thisgroup = players[consoleplayer].Camera.CurSector.portalgroup; + for ( int i=0; i viewdist ) + continue; + if ( a == players[consoleplayer].Camera ) + continue; + if ( !a.player && !a.bSOLID && !a.bSHOOTABLE && !a.bISMONSTER && !a.bFRIENDLY && !(a is 'Inventory') && !(a is 'Chancebox') ) + continue; + if ( !thesight && !a.IsFriend(players[consoleplayer].mo) && !players[consoleplayer].Camera.CheckSight(a,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) + continue; + if ( a.bKILLED || (a.Health <= 0) ) + continue; + if ( (a is 'Inventory') && (!a.bSPECIAL || Inventory(a).Owner) ) + continue; + if ( (a is 'Chancebox') && (a.CurState != a.SpawnState) ) + continue; + SWWMSimpleTracker.Track(a); + } + } + } + SWWMSimpleTracker trk = strackers; + while ( trk ) + { + SWWMSimpleTracker next = trk.next; + // minimize lifespan of destroyed targets + if ( !trk.target ) trk.lastupdate = min(trk.lastupdate,level.maptime); + else if ( !trk.expired ) + { + // "last breath" update + if ( (trk.target.bKILLED || (trk.target.Health <= 0)) + || ((trk.target is 'Inventory') && (!trk.target.bSPECIAL || Inventory(trk.target).Owner)) + || ((trk.target is 'Chancebox') && (trk.target.CurState != trk.target.SpawnState)) ) + trk.Update(); + } + // prune expired trackers + if ( trk.lastupdate+140 < level.maptime ) + { + if ( !trk.prev ) strackers = trk.next; + else trk.prev.next = trk.next; + if ( trk.next ) trk.next.prev = trk.prev; + trk.Destroy(); + strackers_cnt--; + } + trk = next; + } + } +} diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index d04798b11..6d4ba3e47 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -1,51 +1,21 @@ // Handler responsible for item replacements and whatever else - -// Note: There's still a lot of code here that could be split to other files -// I'll get that done eventually, it's a complicated process +// most of the code is split up to make it easier to navigate Class SWWMHandler : EventHandler { - transient int lastlock, lastcombat; - transient Array combatactors; - transient Array combattics; - transient int highesttic; + transient int lastlock; transient int lastpickuptic[MAXPLAYERS]; SWWMCombatTracker trackers; SWWMScoreObj scorenums, damnums; SWWMInterest intpoints; - SWWMSimpleTracker strackers; - int trackers_cnt, scorenums_cnt, damnums_cnt, intpoints_cnt, strackers_cnt; - bool tookdamage[MAXPLAYERS]; - int spreecount[MAXPLAYERS]; - int lastkill[MAXPLAYERS]; - int multilevel[MAXPLAYERS]; - int lastitemcount[MAXPLAYERS]; - bool mnotify; - bool allkills, allitems, allsecrets; - bool mapclear; - int mapclearagain, restartmus; - String lastmus; - int lastorder; - bool lastloop; + int trackers_cnt, scorenums_cnt, damnums_cnt, intpoints_cnt; - transient String curlang; - transient bool curfuntags; transient int slotstrictwarn; // optimization OnFire fires; int fires_cnt; - // prevents revived monsters from spawning in more golden shells - Array alreadygold; - - // attempt to optimize Ynykron singularity suction - Array suckableactors; - - // list contains a sector that belongs to each portal group - // used to ease some portal-aware functions - Array psectors; - // stuff to reduce worldthingspawned overhead int bossmap; int iwantdie; @@ -54,9 +24,6 @@ Class SWWMHandler : EventHandler // for checkreplacement bool hasdrlamonsters; - // for minimap - Array ffsectors; - override void OnRegister() { // oneliner RNG must be relative to consoleplayer @@ -74,576 +41,6 @@ Class SWWMHandler : EventHandler } } - // level end stats - override void WorldUnloaded( WorldEvent e ) - { - let ti = ThinkerIterator.Create("SWWMStats",Thinker.STAT_STATIC); - SWWMStats s; - while ( s = SWWMStats(ti.Next()) ) - { - if ( !(gameinfo.gametype&GAME_STRIFE) ) - { - int clust = 0; - bool secret = false; - if ( SWWMUtility.IsEviternity() ) - { - // we have to do some heavy lifting here because episodes don't match clusters - if ( level.levelnum <= 5 ) clust = 1; - else if ( level.levelnum <= 10 ) clust = 2; - else if ( level.levelnum <= 15 ) clust = 3; - else if ( level.levelnum <= 20 ) clust = 4; - else if ( level.levelnum <= 25 ) clust = 5; - else if ( level.levelnum <= 30 ) clust = 6; - else if ( level.levelnum <= 32 ) - { - secret = true; - if ( level.levelnum <= 31 ) clust = 7; - else clust = 8; - } - } - else - { - if ( (gameinfo.gametype&GAME_DOOM) && ((level.cluster == 9) || (level.cluster == 10)) ) - secret = true; - clust = level.cluster; - } - int csiz = s.clustervisit.Size(); - if ( csiz == 0 ) - { - s.clustervisit.Push(clust); - s.secretdone.Push(secret); - } - else if ( s.clustervisit[csiz-1] != clust ) - { - s.clustervisit.Push(clust); - s.secretdone.Push(secret|s.secretdone[csiz-1]); - } - } - s.AddLevelStats(); - s.lastcluster = level.cluster; - } - ClearAllShaders(players[consoleplayer]); - // reset score on dead players (death exitâ„¢) - for ( int i=0; i 0) ) continue; - let c = SWWMCredits.Find(players[i]); - if ( c ) c.credits = c.hcredits = 0; - } - // end of episode resets - if ( level.nextsecretmap.Left(6) == "enDSeQ" ) - { - for ( int i=0; i lines; - lines.Clear(); - data.Split(lines,"\n"); - bool valid = false; - for ( int j=0; j spl; - spl.Clear(); - lines[j].Split(spl," ",TOK_SKIPEMPTY); - // check game string (if any) - if ( spl.Size() > 2 ) - { - if ( (spl[2] ~== "DOOM") && !(gameinfo.gametype&GAME_Doom) ) continue; - else if ( (spl[2] ~== "HERETIC") && !(gameinfo.gametype&GAME_Heretic) ) continue; - else if ( (spl[2] ~== "HEXEN") && !(gameinfo.gametype&GAME_Hexen) ) continue; - else if ( (spl[2] ~== "STRIFE") && !(gameinfo.gametype&GAME_Strife) ) continue; - else if ( (spl[2] ~== "CHEX") && !(gameinfo.gametype&GAME_Chex) ) continue; - } - // valid lock, prepare it - let li = new("LIEntry"); - li.locknumber = spl[1].ToInt(); - li.hascolor = false; - // see if there's a Mapcolor defined - int k = j+1; - for ( int k=j+2; k skipme; - skipme.Clear(); - // find exit lines, and use lines that aren't exits - for ( int i=0; i lastitemcount[i] ) - { - int score = 10*(players[i].itemcount-lastitemcount[i]); - if ( (level.total_items == level.found_items) && !allitems ) - { - allitems = true; - Console.Printf(StringTable.Localize("$SWWM_LASTITEM"),players[i].GetUserName(),500); - score += 490; - } - SWWMCredits.Give(players[i],score); - SWWMScoreObj.Spawn(score,players[i].mo.Vec3Offset(0,0,players[i].mo.Height/2)); - lastitemcount[i] = players[i].itemcount; - let s = SWWMStats.Find(players[i]); - s.items++; - } - } - } - - // combat tracking - private void CombatTrack() - { - // prune old entries - for ( int i=0; i highesttic ) - highesttic = combattics[i]; - if ( combatactors[i] - && (combatactors[i].Health > 0) - && !combatactors[i].bKILLED - && !combatactors[i].bCORPSE - && (combatactors[i].target == players[consoleplayer].mo) - && (combattics[i]+2000 > gametic) ) - continue; - combatactors.Delete(i); - combattics.Delete(i); - i--; - } - bool enteredcombat = false; - // add new entries - let ti = ThinkerIterator.Create("Actor"); - Actor a; - while ( a = Actor(ti.Next()) ) - { - if ( !a.player && !a.bISMONSTER ) continue; - // ignore the dead - if ( (a.Health <= 0) || a.bKILLED || a.bCORPSE ) continue; - // ignore friends - if ( a.IsFriend(players[consoleplayer].mo) ) continue; - // [Strife] ignore if not in combat - if ( (gameinfo.gametype&GAME_Strife) && !a.bINCOMBAT && !a.bJUSTATTACKED ) continue; - // [Strife] ignore certain classes - if ( (a is 'RatBuddy') || (a is 'Peasant') || (a is 'Beggar') ) continue; - // [Strife] ignore Oracle's spectre while it's inactive - if ( (a is 'AlienSpectre3') && a.InStateSequence(a.CurState,a.FindState("Spawn")) ) continue; - // ignore if not targetted or player can't see it - if ( (a.target != players[consoleplayer].mo) - || !SWWMUtility.InPlayerFOV(players[consoleplayer],a) ) continue; - // [HDoom] ignore cute girls - if ( SWWMHDoomHandler.IsCuteGirl(a.target) ) continue; - // is it already in? - bool addme = true; - for ( int i=0; i highesttic+700)) ) - lastcombat = AddOneliner("fightstart",1,10); - } - - private void OneHundredPercentCheck() - { - if ( !mapclear && (restartmus > 0) ) - { - restartmus--; - if ( restartmus == 0 ) S_ChangeMusic(lastmus,lastorder,lastloop,true); - return; - } - // ignore levels that have NOTHING - if ( (level.total_secrets <= 0) && (level.total_items <= 0) && (level.total_monsters <= 0) ) return; - if ( mapclear ) - { - if ( (swwm_silencemap == 1) && (musplaying.name != "") ) - { - lastmus = musplaying.name; - lastorder = musplaying.baseorder; - lastloop = musplaying.loop; - S_ChangeMusic("",force:true); - } - else if ( (swwm_silencemap > 1) && (musplaying.name != "music/olg.ogg") ) - { - lastmus = musplaying.name; - lastorder = musplaying.baseorder; - lastloop = musplaying.loop; - S_ChangeMusic("music/olg.ogg",force:true); - } - if ( (level.found_secrets < level.total_secrets) || (level.found_items < level.total_items) || (level.killed_monsters < level.total_monsters) ) - { - if ( swwm_silencemap > 0 ) - { - restartmus = 25; - S_ChangeMusic("",force:true); - } - S_StartSound("recordscratch",CHAN_VOICE,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); - mapclear = false; - if ( mapclearagain > 1 ) Console.Printf(StringTable.Localize("$SWWM_NOTCLEARAGAIN")); - else Console.Printf(StringTable.Localize("$SWWM_NOTCLEAR")); - } - return; - } - if ( (level.found_secrets < level.total_secrets) || (level.found_items < level.total_items) || (level.killed_monsters < level.total_monsters) ) return; - restartmus = 0; - mapclear = true; - if ( mapclearagain ) Console.Printf(StringTable.Localize("$SWWM_ALLCLEARAGAIN"),500); - else Console.Printf(StringTable.Localize("$SWWM_ALLCLEAR"),5000); - S_StartSound("misc/wow",CHAN_VOICE,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); - lastmus = musplaying.name; - lastorder = musplaying.baseorder; - lastloop = musplaying.loop; - if ( swwm_silencemap == 1 ) S_ChangeMusic("",force:true); - else if ( swwm_silencemap > 1 ) S_ChangeMusic("music/olg.ogg",force:true); - for ( int i=0; i viewdist ) - continue; - if ( a == players[consoleplayer].Camera ) - continue; - if ( !a.player && !a.bSOLID && !a.bSHOOTABLE && !a.bISMONSTER && !a.bFRIENDLY && !(a is 'Inventory') && !(a is 'Chancebox') ) - continue; - if ( !thesight && !a.IsFriend(players[consoleplayer].mo) && !players[consoleplayer].Camera.CheckSight(a,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) - continue; - if ( a.bKILLED || (a.Health <= 0) ) - continue; - if ( (a is 'Inventory') && (!a.bSPECIAL || Inventory(a).Owner) ) - continue; - if ( (a is 'Chancebox') && (a.CurState != a.SpawnState) ) - continue; - SWWMSimpleTracker.Track(a); - } - if ( swwm_mm_portaloverlay && (psectors.Size() > 1) ) - { - // oh boy here we go - int thisgroup = players[consoleplayer].Camera.CurSector.portalgroup; - for ( int i=0; i viewdist ) - continue; - if ( a == players[consoleplayer].Camera ) - continue; - if ( !a.player && !a.bSOLID && !a.bSHOOTABLE && !a.bISMONSTER && !a.bFRIENDLY && !(a is 'Inventory') && !(a is 'Chancebox') ) - continue; - if ( !thesight && !a.IsFriend(players[consoleplayer].mo) && !players[consoleplayer].Camera.CheckSight(a,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) - continue; - if ( a.bKILLED || (a.Health <= 0) ) - continue; - if ( (a is 'Inventory') && (!a.bSPECIAL || Inventory(a).Owner) ) - continue; - if ( (a is 'Chancebox') && (a.CurState != a.SpawnState) ) - continue; - SWWMSimpleTracker.Track(a); - } - } - } - SWWMSimpleTracker trk = strackers; - while ( trk ) - { - SWWMSimpleTracker next = trk.next; - // minimize lifespan of destroyed targets - if ( !trk.target ) trk.lastupdate = min(trk.lastupdate,level.maptime); - else if ( !trk.expired ) - { - // "last breath" update - if ( (trk.target.bKILLED || (trk.target.Health <= 0)) - || ((trk.target is 'Inventory') && (!trk.target.bSPECIAL || Inventory(trk.target).Owner)) - || ((trk.target is 'Chancebox') && (trk.target.CurState != trk.target.SpawnState)) ) - trk.Update(); - } - // prune expired trackers - if ( trk.lastupdate+140 < level.maptime ) - { - if ( !trk.prev ) strackers = trk.next; - else trk.prev.next = trk.next; - if ( trk.next ) trk.next.prev = trk.prev; - trk.Destroy(); - strackers_cnt--; - } - trk = next; - } - } - override void WorldTick() { LangRefresh(); @@ -684,622 +81,6 @@ Class SWWMHandler : EventHandler VanillaBossTick(); } - private bool HexenMap40() - { - if ( level.GetChecksum() ~== "2A6C4235B942467D25FD50D5B313E67A" ) return true; // 1.1 - if ( level.GetChecksum() ~== "1C5DE5A921DEE405E98E7E09D9829387" ) return true; // 1.0 - if ( level.GetChecksum() ~== "EFAFE59092DE5E613562ACF52B86C37F" ) return true; // beta - return false; - } - - private static bool ShouldSpawnGold() - { - int totalneeded = 0; - // check "free space" in player inventories - for ( int i=0; i 0); - } - - override void WorldThingDied( WorldEvent e ) - { - if ( e.Thing.default.bISMONSTER && ((e.Thing.default.bBOSS) || (e.Thing.GetSpawnHealth() >= 1000)) && (alreadygold.Find(e.Thing) == alreadygold.Size()) ) - { - // make sure we can't farm drops from revivable enemies - // (or cause some things to spam-spawn gold shells) - // (*cough* Touhou Doom *cough*) - alreadygold.Push(e.Thing); - // weight drop chance based on total count of this monster type - // guarantees that maps that get a bit slaughtery won't become easy farms for drops - int dropweight = 0; - let ti = ThinkerIterator.Create(e.Thing.GetClass()); - while ( ti.Next() ) dropweight++; - int minchance = max(1,6-(e.Thing.GetSpawnHealth()/1000)); - dropweight = max(minchance,dropweight/4); - // make sure the gold shell is "worth spawning", too - if ( !Random[GoldDrop](0,dropweight) && ShouldSpawnGold() ) - { - let g = Actor.Spawn("GoldShell",e.Thing.Vec3Offset(0,0,e.Thing.Height/2)); - double ang = FRandom[SpareShells](0,360); - g.vel.xy = (cos(ang),sin(ang))*FRandom[SpareShells](.4,.8); - g.vel.z = FRandom[SpareShells](2.,4.); - } - } - // Korax instakill - if ( (e.Thing is 'Korax') && !e.Thing.special2 && HexenMap40() ) - { - e.Thing.special2 = 1; - // terminate the monster closet scripts, open all the - // doors ourselves - level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,220); - level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,220); - level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,221); - level.ExecuteSpecial(ACS_Terminate,e.Thing,null,false,255); - level.ExecuteSpecial(Door_Open,e.Thing,null,false,10,16); - level.ExecuteSpecial(Door_Open,e.Thing,null,false,11,16); - level.ExecuteSpecial(Door_Open,e.Thing,null,false,12,16); - level.ExecuteSpecial(Door_Open,e.Thing,null,false,13,16); - level.ExecuteSpecial(Door_Open,e.Thing,null,false,14,16); - level.ExecuteSpecial(Door_Open,e.Thing,null,false,10,16); - // keep the portal closed, you can't leave unless you - // kill everyone else - let t = new("UglyBoyGetsFuckedUp"); - t.ChangeStatNum(Thinker.STAT_USER); - } - if ( swwm_partytime ) - { - let pt = Actor.Spawn("PartyTime",e.Thing.pos); - pt.target = e.Thing; - } - // force insert gib animations on some vanilla Doom monsters - int gibhealth = e.Thing.GetGibHealth(); - bool gotgibbed = (!e.Thing.bDONTGIB && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageSource && e.DamageSource.bEXTREMEDEATH) || (e.DamageType == 'Extreme') || (e.Thing.Health < gibhealth)) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) && (!e.DamageSource || !e.DamageSource.bNOEXTREMEDEATH)); - if ( !gotgibbed ) return; - if ( (e.Thing.GetClass() == "Demon") || (e.Thing.GetClass() == "Spectre") ) - ExtraGibDeaths.GibThis(e.Thing,"DemonXDeath"); - else if ( e.Thing.GetClass() == "HellKnight" ) - ExtraGibDeaths.GibThis(e.Thing,"KnightXDeath"); - else if ( e.Thing.GetClass() == "BaronOfHell" ) - ExtraGibDeaths.GibThis(e.Thing,"BaronXDeath"); - else if ( e.Thing.GetClass() == "Cacodemon" ) - ExtraGibDeaths.GibThis(e.Thing,"CacoXDeath"); - else if ( e.Thing.GetClass() == "Revenant" ) - ExtraGibDeaths.GibThis(e.Thing,"BonerXDeath"); - else if ( e.Thing.GetClass() == "Archvile" ) - ExtraGibDeaths.GibThis(e.Thing,"VileXDeath"); - } - - // gibbing - private void DoGibThing( WorldEvent e ) - { - // no gib if it was erased or used the kill monsters cheat - if ( (e.DamageType == 'Ynykron') || (e.DamageType == 'Massacre') ) return; - int gibhealth = e.Thing.GetGibHealth(); - bool gotgibbed = (!e.Thing.bDONTGIB && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageSource && e.DamageSource.bEXTREMEDEATH) || (e.DamageType == 'Extreme') || (e.Thing.Health < gibhealth)) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) && (!e.DamageSource || !e.DamageSource.bNOEXTREMEDEATH)); - bool forcegibbed = false; - // force gib availability for some vanilla Doom monsters - if ( gotgibbed && ((e.Thing.GetClass() == "Demon") || (e.Thing.GetClass() == "Spectre") || (e.Thing.GetClass() == "HellKnight") || (e.Thing.GetClass() == "BaronOfHell") || (e.Thing.GetClass() == "Cacodemon") || (e.Thing.GetClass() == "Revenant") || (e.Thing.GetClass() == "Archvile")) ) - forcegibbed = true; - if ( !e.Thing.FindState("XDeath",true) && !e.Thing.FindState("Death.Extreme",true) && !forcegibbed ) - gotgibbed = false; - // only do special handling if they use our blood - if ( (e.Thing.GetBloodType(0) != "mkBlood") || e.Thing.bNOBLOOD ) - return; - CorpseFallTracker.TrackBody(e.Thing); - bool b; - Actor a; - // special handling of some monsters - if ( e.Thing.GetClass() == "Cyberdemon" ) - { - [b,a] = e.Thing.A_SpawnItemEx("mkGibber",flags:SXF_USEBLOODCOLOR); - if ( !b ) return; - mkGibber(a).gibbed = e.Thing; - mkGibber(a).delay = 40; - a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); - return; - } - else if ( e.Thing.GetClass() == "SpiderMastermind" ) - { - [b,a] = e.Thing.A_SpawnItemEx("mkGibber",flags:SXF_USEBLOODCOLOR); - if ( !b ) return; - mkGibber(a).gibbed = e.Thing; - mkGibber(a).delay = 60; - a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); - } - else if ( gotgibbed ) - { - [b,a] = e.Thing.A_SpawnItemEx("mkGibber",flags:SXF_USEBLOODCOLOR); - if ( !b ) return; - mkGibber(a).gibbed = e.Thing; - a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); - } - } - - // damage numbers, combat tracking, etc. - private void DoDamageHandling( WorldEvent e ) - { - bool spawnme = true; - if ( swwm_accdamage ) - { - // find existing damage number - for ( SWWMScoreObj d=damnums; d; d=d.next ) - { - if ( (d.starttic < level.maptime) || (d.acc != e.Thing) ) continue; - if ( d.score-e.Damage > d.score ) d.score = int.min; - else d.score -= e.Damage; - spawnme = false; - break; - } - } - if ( spawnme ) SWWMScoreObj.Spawn(-e.Damage,e.Thing.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+e.Thing.Height/2),ST_Damage,e.Thing); - // update combat tracker for it - if ( !(e.Thing is 'BossBrain') ) - { - for ( SWWMCombatTracker t=trackers; t; t=t.next ) - { - if ( t.mytarget != e.Thing ) continue; - t.updated = level.maptime+35; - break; - } - } - // fall dmg - SWWMWhoPushedMe.SetInstigator(e.Thing,e.DamageSource); - // stats - if ( e.Thing.player ) - { - tookdamage[e.Thing.PlayerNumber()] = true; - let s = SWWMStats.Find(e.Thing.player); - if ( s ) // deathmatch telefrag-on-spawn may cause this to be null - { - s.AddDamageTaken(e.Damage); - if ( e.Damage > s.toptaken ) s.toptaken = e.Damage; - } - } - if ( e.DamageSource && e.DamageSource.player ) - { - let s = SWWMStats.Find(e.DamageSource.player); - if ( s ) // deathmatch telefrag-on-spawn may cause this to be null - { - s.AddDamageDealt(e.Damage); - if ( e.Damage > s.topdealt ) s.topdealt = e.Damage; - } - } - } - - // combat hit chatter - private void DoCombatHit( WorldEvent e ) - { - if ( (e.DamageSource.bISMONSTER || e.DamageSource.player || (e.DamageSource is 'ScriptedMarine')) && (e.Thing == players[consoleplayer].mo) && (e.Thing.Health > 0) ) - { - if ( !lastcombat || (gametic > lastcombat+40) ) - { - if ( (e.Thing.IsFriend(e.DamageSource) || SWWMUtility.IsCivilian(e.DamageSource)) ) - lastcombat = AddOneliner("friendhit",1,10); - else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.DamageSource.bBOSS?2:4) && !SWWMHDoomHandler.IsCuteGirl(e.DamageSource) ) // [HDoom] don't shout at the girls - lastcombat = AddOneliner("gethit",1,15); - } - highesttic = gametic; - } - // friendly fire lines only fire up if we didn't kill them right away (because then the teamkill line should take priority) - if ( (e.DamageSource == players[consoleplayer].mo) && (e.Thing.bISMONSTER || e.Thing.player || (e.Thing is 'ScriptedMarine')) && (e.Thing.Health > 0) ) - { - // make sure it's not a moth, because otherwise they won't shut up about accidentally hurting them (it happens a lot) - if ( (e.Thing.IsFriend(e.DamageSource) || SWWMUtility.IsCivilian(e.Thing)) && !(e.Thing is 'LampMoth') ) - { - if ( !lastcombat || (gametic > lastcombat+40) ) - lastcombat = AddOneliner("hitfriend",1,10); - highesttic = gametic; - } - } - } - - // kill scoring - private void DoKillScoring( WorldEvent e ) - { - // fall damage tracking hack - let src = e.DamageSource; - if ( (e.DamageType == 'Falling') && !e.DamageSource ) - src = SWWMWhoPushedMe.RecallInstigator(e.Thing); - if ( (!src || !src.player || (src == e.Thing)) ) return; - let s = SWWMStats.Find(src.player); - if ( s ) - { - s.kills++; - s.AddWeaponKill(e.Inflictor,e.Thing,e.DamageType); - } - if ( src == players[consoleplayer].mo ) - { - highesttic = gametic; - if ( !lastcombat || (gametic > lastcombat+40) ) - { - if ( e.Thing.IsFriend(src) || SWWMUtility.IsCivilian(e.Thing) ) - lastcombat = AddOneliner("friendkill",1,5); - else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.Thing.bBOSS?2:5) && !SWWMHDoomHandler.IsCuteGirl(e.Thing) ) // [HDoom] don't shout at the girls - lastcombat = AddOneliner("scorekill",1,15); - } - } - // no credits unless it's a counted kill or marine (that isn't friendly) - if ( e.Thing.IsFriend(src) || (!e.Thing.default.bCountKill && !(e.Thing is 'ScriptedMarine')) ) - return; - int pnum = src.PlayerNumber(); - if ( level.maptime < (lastkill[pnum]+5*GameTicRate) ) - multilevel[pnum]++; - else multilevel[pnum] = 0; - if ( s && (multilevel[pnum]+1 > s.mkill) ) - s.mkill = multilevel[pnum]+1; - lastkill[pnum] = level.maptime; - // scoring - int score = min(1000,int(ceil(e.Thing.GetSpawnHealth()*.05)*10)); - SWWMScoreObj scr = null; - if ( src.player == players[consoleplayer] ) - scr = SWWMScoreObj.Spawn(score,e.Thing.Vec3Offset(0,0,e.Thing.Height/2)); - int ofs = 0; - if ( e.DamageType == 'Push' ) - { - score += 500; - if ( scr ) - { - scr.xscore[ofs] = 0; - scr.xstr[ofs] = StringTable.Localize("$SWWM_SHAMEFUL"); - scr.xcnt = ++ofs; - } - } - else if ( e.DamageType == 'Buttslam' ) - { - score += 300; - if ( scr ) - { - scr.xscore[ofs] = 0; - scr.xstr[ofs] = StringTable.Localize("$SWWM_BUTTSLAM"); - scr.xcnt = ++ofs; - } - } - else if ( e.DamageType == 'Love' ) - { - score += 600; - if ( scr ) - { - scr.xscore[ofs] = 0; - scr.xtcolor[ofs] = Font.FindFontColor('BlushPink'); - scr.xstr[ofs] = StringTable.Localize((e.Thing is 'WolfensteinSS')?"$SWWM_LOVED_ALT":"$SWWM_LOVED"); - scr.xcnt = ++ofs; - } - } - else if ( e.Inflictor is 'FroggyChair' ) - { - score += 1440; - if ( scr ) - { - scr.xscore[ofs] = 0; - scr.xtcolor[ofs] = Font.CR_GREEN; - scr.xstr[ofs] = StringTable.Localize("$SWWM_FROGGED"); - scr.xcnt = ++ofs; - } - } - Inventory pb; - if ( e.Inflictor && (pb = e.Inflictor.FindInventory('ParriedBuff')) ) - { - score += 200; - if ( pb.special1&1 ) score += 200; - if ( scr ) - { - scr.xscore[ofs] = 0; - if ( pb.special1&1 ) scr.xstr[ofs] = StringTable.Localize("$SWWM_PPARRY"); - else scr.xstr[ofs] = StringTable.Localize("$SWWM_PARRY"); - scr.xcnt = ++ofs; - } - } - if ( (e.Damage >= e.Thing.GetSpawnHealth()*2) || (((e.Thing.Health <= e.Thing.GetGibHealth()) || (src.bEXTREMEDEATH) || (e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageType == 'Extreme')) && !src.bNOEXTREMEDEATH && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH)) ) - { - score *= 2; - if ( scr ) - { - scr.xscore[ofs] = 0; - scr.xstr[ofs] = StringTable.Localize("$SWWM_OVERKILL"); - scr.xcnt = ++ofs; - } - } - score = int(score*(1.+.5*min(multilevel[pnum],16))); - if ( (multilevel[pnum] > 0) && scr ) - { - if ( scr ) - { - scr.xscore[ofs] = (multilevel[pnum]>=16)?int.max:(multilevel[pnum]+1); - scr.xstr[ofs] = StringTable.Localize("$SWWM_MULTIKILL"); - scr.xcnt = ++ofs; - } - } - spreecount[pnum]++; - if ( s && (spreecount[pnum] > s.skill) && !tookdamage[pnum] ) - s.skill = spreecount[pnum]; - if ( !tookdamage[pnum] ) - { - int spreebonus = 10*(spreecount[pnum]); - // taper off after 10x (some people go really far with these, holy fuck) - if ( spreecount[pnum] > 10 ) spreebonus = int(spreebonus*((spreecount[pnum]/10.)**.25)); - score += 100+spreebonus; - if ( (spreecount[pnum] > 0) && scr ) - { - scr.xscore[ofs] = spreecount[pnum]; - scr.xstr[ofs] = StringTable.Localize("$SWWM_SPREEKILL"); - scr.xcnt = ++ofs; - } - } - if ( e.Thing.bBOSS ) - { - score += 2000; - if ( scr ) - { - scr.xscore[ofs] = 0; - scr.xstr[ofs] = StringTable.Localize("$SWWM_BOSSKILL"); - scr.xcnt = ++ofs; - } - } - SWWMCredits.Give(src.player,score); - if ( scr ) scr.score = score; // update final score - if ( (level.killed_monsters+1 == level.total_monsters) && !allkills ) - { - allkills = true; - SWWMCredits.Give(src.player,1000); - Console.Printf(StringTable.Localize("$SWWM_LASTMONSTER"),src.player.GetUserName(),1000); - SWWMScoreObj.Spawn(1000,src.Vec3Offset(0,0,src.Height/2)); - } - } - - override void WorldThingDamaged( WorldEvent e ) - { - if ( e.Damage > 0 ) DoDamageHandling(e); - if ( e.DamageSource && (e.DamageSource != e.Thing) ) DoCombatHit(e); - if ( (e.Thing.Health > 0) || e.Thing.bKilled || e.Thing.bCorpse ) return; - DoGibThing(e); - // romero hax - if ( (e.Thing is 'BossBrain') && (e.DamageType == 'Telefrag') ) - e.DamageSource.DamageMobj(null,null,Actor.TELEFRAG_DAMAGE,'EndLevel'); - // voodoo doll telefragging barrel hax (eviternity death exits) - if ( (e.Thing is 'ExplosiveBarrel') && (e.DamageType == 'Telefrag') && e.DamageSource.player && (e.DamageSource.player.mo != e.DamageSource) ) - e.DamageSource.DamageMobj(null,null,Actor.TELEFRAG_DAMAGE,'EndLevel'); - if ( !e.Thing.player && !e.Thing.bIsMonster && !e.Thing.bCountKill && !(e.Thing is 'ScriptedMarine') ) return; - DoKillScoring(e); - } - - private void DoKeyTagFix( Actor a ) - { - if ( a is 'SWWMKey' ) return; // mod's custom keys are fine - if ( a is 'RedCard' ) a.SetTag("$T_REDCARD"); - else if ( a is 'BlueCard' ) a.SetTag("$T_BLUECARD"); - else if ( a is 'YellowCard' ) a.SetTag("$T_YELLOWCARD"); - else if ( a is 'RedSkull' ) a.SetTag("$T_REDSKULL"); - else if ( a is 'BlueSkull' ) a.SetTag("$T_BLUESKULL"); - else if ( a is 'YellowSkull' ) a.SetTag("$T_YELLOWSKULL"); - else if ( a is 'KeyYellow' ) a.SetTag("$T_YELLOWKEY"); - else if ( a is 'KeyGreen' ) a.SetTag("$T_GREENKEY"); - else if ( a is 'KeyBlue' ) a.SetTag("$T_BLUEKEY"); - else if ( a.GetClassName() == 'KeyRed' ) a.SetTag("$T_REDKEY"); - else if ( a is 'KeySteel' ) a.SetTag("$T_KEYSTEEL"); - else if ( a is 'KeyCave' ) a.SetTag("$T_KEYCAVE"); - else if ( a is 'KeyAxe' ) a.SetTag("$T_KEYAXE"); - else if ( a is 'KeyFire' ) a.SetTag("$T_KEYFIRE"); - else if ( a is 'KeyEmerald' ) a.SetTag("$T_KEYEMERALD"); - else if ( a is 'KeyDungeon' ) a.SetTag("$T_KEYDUNGEON"); - else if ( a is 'KeySilver' ) a.SetTag("$T_KEYSILVER"); - else if ( a is 'KeyRusted' ) a.SetTag("$T_KEYRUSTED"); - else if ( a is 'KeyHorn' ) a.SetTag("$T_KEYHORN"); - else if ( a is 'KeySwamp' ) a.SetTag("$T_KEYSWAMP"); - else if ( a is 'KeyCastle' ) a.SetTag("$T_KEYCASTLE"); - } - - // tempfix keys have no tags - static void KeyTagFix( Actor a ) - { - let hnd = SWWMHandler(Find("SWWMHandler")); - if ( hnd ) hnd.DoKeyTagFix(a); - } - - // copies the floatbob of overlapping identical items, so it doesn't look weird - private void CopyFloatBob( Actor a ) - { - let bt = BlockThingsIterator.Create(a,16); - while ( bt.Next() ) - { - let t = bt.Thing; - if ( !t || (t == a) || !(t is 'Inventory') || !(t.spawnpoint ~== a.spawnpoint) ) continue; - a.floatbobphase = t.floatbobphase; - a.angle = t.angle; // also copy angle - break; - } - } - - override void WorldThingDestroyed( WorldEvent e ) - { - if ( !e.Thing.default.bSHOOTABLE || !e.Thing.default.bMISSILE ) - return; - // remove from suckables - int pos = suckableactors.Find(e.Thing); - if ( pos >= suckableactors.Size() ) return; - suckableactors.Delete(pos); - } - - override void WorldThingSpawned( WorldEvent e ) - { - IWantDieSpawn(e); - if ( (e.Thing is 'TeleportDest') || (e.Thing is 'BossTarget') ) - { - let d = Actor.Spawn("SWWMTeleportDest",e.Thing.pos); - d.bNOGRAVITY = e.Thing.bNOGRAVITY; - } - if ( e.Thing is 'Inventory' ) - CopyFloatBob(e.Thing); - if ( swwm_doomfall && e.Thing.bISMONSTER ) - e.Thing.bFALLDAMAGE = true; - if ( e.Thing is 'Key' ) - { - DoKeyTagFix(e.Thing); - SWWMInterest.Spawn(thekey:Key(e.Thing)); - } - if ( indoomvacation == -1 ) indoomvacation = SWWMUtility.InDoomVacation(); - if ( e.Thing.GetClass() == 'Pig' ) - e.Thing.SetTag("$FN_PIG"); // missing in gzdoom - // eviternity stuff - else if ( (e.Thing.GetClassName() == "Archangelus") - || (e.Thing.GetClassName() == "ArchangelusA") - || (e.Thing.GetClassName() == "ArchangelusB") ) - e.Thing.SetTag("$FN_ANGEL"); - else if ( e.Thing.GetClassName() == "AstralCaco" ) - e.Thing.SetTag("$FN_ASTRAL"); - else if ( e.Thing.GetClassName() == "Annihilator" ) - { - e.Thing.SetTag("$FN_ANNIHIL"); - // OH BOY, THESE AREN'T CHANGEABLE - //e.Thing.Obituary = "$OB_ANNIHIL"; - } - else if ( e.Thing.GetClassName() == "FormerCaptain" ) - { - e.Thing.SetTag("$FN_FCAPTAIN"); - //e.Thing.Obituary = "$OB_FCAPTAIN"; - } - else if ( e.Thing.GetClassName() == "NightmareDemon" ) - { - e.Thing.SetTag("$FN_NDEMON"); - //e.Thing.Obituary = "$OB_NDEMON"; - } - // doom vacation stuff - else if ( indoomvacation ) - { - if ( e.Thing.GetClassName() == "Babe" ) - { - e.Thing.bSHOOTABLE = false; // no hurt - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = .2; - } - else if ( e.Thing.GetClassName() == "CommanderKeen" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = .4; - HeadpatTracker(hp).hdoomangfix = 5; - } - else if ( e.Thing.GetClassName() == "BBChair" ) - { - e.Thing.bUSESPECIAL = false; - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = .2; - HeadpatTracker(hp).hdoomangfix = 15; - HeadpatTracker(hp).patstate = e.Thing.MeleeState; - } - else if ( e.Thing.GetClassName() == "EvilEye" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = .1; - } - else if ( e.Thing.GetClassName() == "HeadCandles" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomangfix = 20; - } - else if ( e.Thing.GetClassName() == "HeartColumn" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = -.3; - } - else if ( e.Thing.GetClassName() == "Meat2" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = .6; - HeadpatTracker(hp).hdoomangfix = -15; - HeadpatTracker(hp).dvacationarghack = true; - } - else if ( e.Thing.GetClassName() == "Meat3" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = .6; - HeadpatTracker(hp).hdoomangfix = 20; - HeadpatTracker(hp).dvacationarghack = true; - } - else if ( e.Thing.GetClassName() == "LegsBabe" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = -1.5; - HeadpatTracker(hp).hdoomangfix = 20; - HeadpatTracker(hp).dvacationarghack = true; - } - else if ( e.Thing.GetClassName() == "Meat4" ) - { - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - HeadpatTracker(hp).hdoomheightfix = .6; - HeadpatTracker(hp).hdoomangfix = 15; - HeadpatTracker(hp).dvacationarghack = true; - } - } - if ( SWWMUtility.IdentifyingDog(e.Thing) || SWWMUtility.IdentifyingCaco(e.Thing) - || SWWMUtility.IdentifyingDrug(e.Thing) || SWWMUtility.IdentifyingDoubleBoi(e.Thing) ) - { - // you can pet the dog, and you can also pet the caco (and friends) - let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); - hp.target = e.Thing; - } - SWWMCombatTracker trk; - if ( !swwm_notrack && (e.Thing.bSHOOTABLE || e.Thing.bISMONSTER) && !(e.Thing is 'LampMoth') && !(e.Thing is 'CompanionLamp') ) - trk = SWWMCombatTracker.Spawn(e.Thing); - if ( !(e.Thing is 'LampMoth') && (e.Thing.bSHOOTABLE || e.Thing.bISMONSTER || e.Thing.bCORPSE || (e.Thing is 'Inventory') || (e.Thing is 'CompanionLamp')) ) - { - if ( (swwm_shadows == 2) || ((swwm_shadows == 1) && ((e.Thing is 'Demolitionist') || (e.Thing.SpawnState.sprite == e.Thing.GetSpriteIndex('XZW1')))) ) - SWWMShadow.Track(e.Thing); - } - // Ynykron vortex optimization (faster than a thinker iterator) - if ( e.Thing.bSHOOTABLE || e.Thing.bMISSILE ) - SuckableActors.Push(e.Thing); - // vanilla blood color changes - if ( (e.Thing.GetClass() == "BaronOfHell") || (e.Thing.GetClass() == "HellKnight") || (e.Thing.GetClass() == "Bishop") || (e.Thing.GetClass() == "Korax") ) - { - let gb = Actor.Spawn("GreenBloodReference"); - e.Thing.CopyBloodColor(gb); - gb.Destroy(); - } - else if ( e.Thing.GetClass() == "Cacodemon" ) - { - let bb = Actor.Spawn("BlueBloodReference"); - e.Thing.CopyBloodColor(bb); - bb.Destroy(); - } - else if ( (e.Thing.GetClass() == "Wizard") || (e.Thing.GetClass() == "Heresiarch") || (e.Thing.GetClass() == "Sorcerer2") ) - { - let pb = Actor.Spawn("PurpleBloodReference"); - e.Thing.CopyBloodColor(pb); - pb.Destroy(); - } - else if ( e.Thing.GetClass() == "LostSoul" ) - e.Thing.bNOBLOOD = true; - VanillaBossSpawn(e,trk); - // inflation check - if ( trk ) - { - trk.maxhealth = trk.lasthealth = e.Thing.Health; - trk.intp.Reset(trk.lasthealth); - } - } - override void PostUiTick() { OnelinerUITick();