commit bcd02d78878b1924b9d6572187bce1638981b18f Author: calliope <me@calliope.sh> Date: Wed, 17 Sep 2025 01:48:06 -0500 tracking this so i dont lose it Diffstat:
456 files changed, 5373 insertions(+), 0 deletions(-)
diff --git a/.gitignore b/.gitignore @@ -0,0 +1,7 @@ +*.sw* + +*.png~ +*.kra~ +*.blend1 + +*.cfg diff --git a/README b/README @@ -0,0 +1 @@ +gameplay mod for gzdoom. this project is old and unfinished. no idea if it runs on modern versions of the engine diff --git a/etayn.pk3 b/etayn.pk3 Binary files differ. diff --git a/gamedata/decaldef.txt b/gamedata/decaldef.txt @@ -0,0 +1,11 @@ +decal SwordSlash +{ + pic SSLASH3 + translucent 0.85 + shade "00 00 00" +} + +decal SummonCircle +{ + pic PENTAGRAM +} +\ No newline at end of file diff --git a/gamedata/graphics/HUD/HCDEATH.png b/gamedata/graphics/HUD/HCDEATH.png Binary files differ. diff --git a/gamedata/graphics/HUD/HCONT.png b/gamedata/graphics/HUD/HCONT.png Binary files differ. diff --git a/gamedata/graphics/HUD/HLTHFUL.png b/gamedata/graphics/HUD/HLTHFUL.png Binary files differ. diff --git a/gamedata/graphics/HUD/HMPTY.png b/gamedata/graphics/HUD/HMPTY.png Binary files differ. diff --git a/gamedata/graphics/HUD/HUDSWD.png b/gamedata/graphics/HUD/HUDSWD.png Binary files differ. diff --git a/gamedata/graphics/HUD/KEYBLU.png b/gamedata/graphics/HUD/KEYBLU.png Binary files differ. diff --git a/gamedata/graphics/HUD/KEYRED.png b/gamedata/graphics/HUD/KEYRED.png Binary files differ. diff --git a/gamedata/graphics/HUD/KEYYEL.png b/gamedata/graphics/HUD/KEYYEL.png Binary files differ. diff --git a/gamedata/graphics/HUD/MSHOT.png b/gamedata/graphics/HUD/MSHOT.png Binary files differ. diff --git a/gamedata/graphics/HUD/S1INACT.png b/gamedata/graphics/HUD/S1INACT.png Binary files differ. diff --git a/gamedata/graphics/HUD/S2INACT.png b/gamedata/graphics/HUD/S2INACT.png Binary files differ. diff --git a/gamedata/graphics/HUD/S2UNA.png b/gamedata/graphics/HUD/S2UNA.png Binary files differ. diff --git a/gamedata/graphics/HUD/S3INACT.png b/gamedata/graphics/HUD/S3INACT.png Binary files differ. diff --git a/gamedata/graphics/HUD/S3UNA.png b/gamedata/graphics/HUD/S3UNA.png Binary files differ. diff --git a/gamedata/graphics/HUD/S4INACT.png b/gamedata/graphics/HUD/S4INACT.png Binary files differ. diff --git a/gamedata/graphics/HUD/S4UNA.png b/gamedata/graphics/HUD/S4UNA.png Binary files differ. diff --git a/gamedata/graphics/HUD/S5INACT.png b/gamedata/graphics/HUD/S5INACT.png Binary files differ. diff --git a/gamedata/graphics/HUD/S5UNA.png b/gamedata/graphics/HUD/S5UNA.png Binary files differ. diff --git a/gamedata/graphics/HUD/S6INACT.png b/gamedata/graphics/HUD/S6INACT.png Binary files differ. diff --git a/gamedata/graphics/HUD/S6UNA.png b/gamedata/graphics/HUD/S6UNA.png Binary files differ. diff --git a/gamedata/graphics/HUD/SCONT.png b/gamedata/graphics/HUD/SCONT.png Binary files differ. diff --git a/gamedata/graphics/HUD/SCONTLOW.png b/gamedata/graphics/HUD/SCONTLOW.png Binary files differ. diff --git a/gamedata/graphics/HUD/SLOT1ICO.png b/gamedata/graphics/HUD/SLOT1ICO.png Binary files differ. diff --git a/gamedata/graphics/HUD/SLOT2ICO.png b/gamedata/graphics/HUD/SLOT2ICO.png Binary files differ. diff --git a/gamedata/graphics/HUD/SLOT3ICO.png b/gamedata/graphics/HUD/SLOT3ICO.png Binary files differ. diff --git a/gamedata/graphics/HUD/SLOT4ICO.png b/gamedata/graphics/HUD/SLOT4ICO.png Binary files differ. diff --git a/gamedata/graphics/HUD/SLOT5ICO.png b/gamedata/graphics/HUD/SLOT5ICO.png Binary files differ. diff --git a/gamedata/graphics/HUD/SLOT6ICO.png b/gamedata/graphics/HUD/SLOT6ICO.png Binary files differ. diff --git a/gamedata/graphics/HUD/SPIRFUL.png b/gamedata/graphics/HUD/SPIRFUL.png Binary files differ. diff --git a/gamedata/graphics/HUD/SPIRLOS.png b/gamedata/graphics/HUD/SPIRLOS.png Binary files differ. diff --git a/gamedata/graphics/TITLEPIC.png b/gamedata/graphics/TITLEPIC.png Binary files differ. diff --git a/gamedata/graphics/sslash2.png b/gamedata/graphics/sslash2.png Binary files differ. diff --git a/gamedata/graphics/sslash3.png b/gamedata/graphics/sslash3.png Binary files differ. diff --git a/gamedata/keyconf.txt b/gamedata/keyconf.txt @@ -0,0 +1,6 @@ +addKeySection "Etayne Keybindings" "ETAYNEMOD" +addMenuKey "Don Armor" ETAYNEMOD_DonArmor +addMenuKey "Remove Armor" ETAYNEMOD_RemArmor + +alias ETAYNEMOD_DonArmor "" +alias ETAYNEMOD_RemArmor "netevent ETAYNEMOD_RemArmorEvent" +\ No newline at end of file diff --git a/gamedata/mapinfo.txt b/gamedata/mapinfo.txt @@ -0,0 +1,13 @@ +gameinfo +{ + PlayerClasses = "DevilbunnyPlayer" + AddEventHandlers = "ETAYNEMOD_EventHandler" + StatusBarClass = "DevilbunnyHud" +} + +map MAPTEST "TEST MAP" +{ + next = "MAP01" + music = "D_THE_DA" + sky1 = "RSKY1", 0.1 +} diff --git a/gamedata/maps/MAPTEST.wad b/gamedata/maps/MAPTEST.wad Binary files differ. diff --git a/gamedata/sndinfo.txt b/gamedata/sndinfo.txt @@ -0,0 +1,32 @@ +//WEAPONS + +swing WOOSH +throspin SPIN +ting TING +tink TINK +swordpickup SWEQUIP +swordland SWLAND +grief/clang GRCLANG +grief/throwclang GRTHCLNG +grief/toss GRTHROW +bigwoosh BIGWOOSH +passecharge TLCHARGE +passego PASSEGO +fleshhit FLHIT +fleshchop FLCHOP + +whirlwind WHIRL + +bun/wingflap FLAPPY +bun/wingfurl WFURL +bun/glide GLIDE +bun/punch BPUNCH +bun/wallscratch WALLSCRH +bun/scratch BSCRATCH +bun/ouch BOUCH +bun/dying BDEATH +bun/death RATTLE +bun/land CLAND + +$playersound devilbunny female *grunt CLAND +$playersound devilbunny female *land CLAND diff --git a/gamedata/sounds/BDEATH.wav b/gamedata/sounds/BDEATH.wav Binary files differ. diff --git a/gamedata/sounds/BIGWOOSH.wav b/gamedata/sounds/BIGWOOSH.wav Binary files differ. diff --git a/gamedata/sounds/BOUCH.wav b/gamedata/sounds/BOUCH.wav Binary files differ. diff --git a/gamedata/sounds/BPUNCH.wav b/gamedata/sounds/BPUNCH.wav Binary files differ. diff --git a/gamedata/sounds/BSCRATCH.wav b/gamedata/sounds/BSCRATCH.wav Binary files differ. diff --git a/gamedata/sounds/CLAND.wav b/gamedata/sounds/CLAND.wav Binary files differ. diff --git a/gamedata/sounds/FLAPPY.wav b/gamedata/sounds/FLAPPY.wav Binary files differ. diff --git a/gamedata/sounds/FLCHOP.wav b/gamedata/sounds/FLCHOP.wav Binary files differ. diff --git a/gamedata/sounds/FLHIT.wav b/gamedata/sounds/FLHIT.wav Binary files differ. diff --git a/gamedata/sounds/GLIDE.wav b/gamedata/sounds/GLIDE.wav Binary files differ. diff --git a/gamedata/sounds/GRCLANG.wav b/gamedata/sounds/GRCLANG.wav Binary files differ. diff --git a/gamedata/sounds/GRTHROW.wav b/gamedata/sounds/GRTHROW.wav Binary files differ. diff --git a/gamedata/sounds/PASSEGO.wav b/gamedata/sounds/PASSEGO.wav Binary files differ. diff --git a/gamedata/sounds/RATTLE.wav b/gamedata/sounds/RATTLE.wav Binary files differ. diff --git a/gamedata/sounds/SPIN.wav b/gamedata/sounds/SPIN.wav Binary files differ. diff --git a/gamedata/sounds/SWEQUIP.wav b/gamedata/sounds/SWEQUIP.wav Binary files differ. diff --git a/gamedata/sounds/SWLAND.wav b/gamedata/sounds/SWLAND.wav Binary files differ. diff --git a/gamedata/sounds/TING.wav b/gamedata/sounds/TING.wav Binary files differ. diff --git a/gamedata/sounds/TINK.wav b/gamedata/sounds/TINK.wav Binary files differ. diff --git a/gamedata/sounds/TLCHARGE.wav b/gamedata/sounds/TLCHARGE.wav Binary files differ. diff --git a/gamedata/sounds/WALLSCRH.wav b/gamedata/sounds/WALLSCRH.wav Binary files differ. diff --git a/gamedata/sounds/WFURL.wav b/gamedata/sounds/WFURL.wav Binary files differ. diff --git a/gamedata/sounds/WHIRL.wav b/gamedata/sounds/WHIRL.wav Binary files differ. diff --git a/gamedata/sounds/WOOSH.wav b/gamedata/sounds/WOOSH.wav Binary files differ. diff --git a/gamedata/sprites/effects/ASHLA0.png b/gamedata/sprites/effects/ASHLA0.png Binary files differ. diff --git a/gamedata/sprites/effects/ASHLB0.png b/gamedata/sprites/effects/ASHLB0.png Binary files differ. diff --git a/gamedata/sprites/effects/ASHLC0.png b/gamedata/sprites/effects/ASHLC0.png Binary files differ. diff --git a/gamedata/sprites/effects/DST1A0.png b/gamedata/sprites/effects/DST1A0.png Binary files differ. diff --git a/gamedata/sprites/effects/FEATA0.png b/gamedata/sprites/effects/FEATA0.png Binary files differ. diff --git a/gamedata/sprites/effects/FEATB0.png b/gamedata/sprites/effects/FEATB0.png Binary files differ. diff --git a/gamedata/sprites/effects/FEATC0.png b/gamedata/sprites/effects/FEATC0.png Binary files differ. diff --git a/gamedata/sprites/effects/FEATG0.png b/gamedata/sprites/effects/FEATG0.png Binary files differ. diff --git a/gamedata/sprites/effects/FEATH0.png b/gamedata/sprites/effects/FEATH0.png Binary files differ. diff --git a/gamedata/sprites/effects/FEATI0.png b/gamedata/sprites/effects/FEATI0.png Binary files differ. diff --git a/gamedata/sprites/effects/FEATJ0.png b/gamedata/sprites/effects/FEATJ0.png Binary files differ. diff --git a/gamedata/sprites/effects/MSLCA0.png b/gamedata/sprites/effects/MSLCA0.png Binary files differ. diff --git a/gamedata/sprites/effects/MSLCB0.png b/gamedata/sprites/effects/MSLCB0.png Binary files differ. diff --git a/gamedata/sprites/effects/MSLCC0.png b/gamedata/sprites/effects/MSLCC0.png Binary files differ. diff --git a/gamedata/sprites/effects/MSLCD0.png b/gamedata/sprites/effects/MSLCD0.png Binary files differ. diff --git a/gamedata/sprites/effects/WHIRA0.png b/gamedata/sprites/effects/WHIRA0.png Binary files differ. diff --git a/gamedata/sprites/effects/WHIRB0.png b/gamedata/sprites/effects/WHIRB0.png Binary files differ. diff --git a/gamedata/sprites/effects/WHIRC0.png b/gamedata/sprites/effects/WHIRC0.png Binary files differ. diff --git a/gamedata/sprites/effects/WHIRD0.png b/gamedata/sprites/effects/WHIRD0.png Binary files differ. diff --git a/gamedata/sprites/effects/WHIRE0.png b/gamedata/sprites/effects/WHIRE0.png Binary files differ. diff --git a/gamedata/sprites/effects/WHIRF0.png b/gamedata/sprites/effects/WHIRF0.png Binary files differ. diff --git a/gamedata/sprites/items/BRIGA0.png b/gamedata/sprites/items/BRIGA0.png Binary files differ. diff --git a/gamedata/sprites/items/CNVGA0.png b/gamedata/sprites/items/CNVGA0.png Binary files differ. diff --git a/gamedata/sprites/items/CNVGB0.png b/gamedata/sprites/items/CNVGB0.png Binary files differ. diff --git a/gamedata/sprites/items/DORBA0.png b/gamedata/sprites/items/DORBA0.png Binary files differ. diff --git a/gamedata/sprites/items/DORBB0.png b/gamedata/sprites/items/DORBB0.png Binary files differ. diff --git a/gamedata/sprites/items/DORBC0.png b/gamedata/sprites/items/DORBC0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO1A0.png b/gamedata/sprites/items/FLO1A0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO1B0.png b/gamedata/sprites/items/FLO1B0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO1C0.png b/gamedata/sprites/items/FLO1C0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO1D0.png b/gamedata/sprites/items/FLO1D0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO1E0.png b/gamedata/sprites/items/FLO1E0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO1F0.png b/gamedata/sprites/items/FLO1F0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO2A0.png b/gamedata/sprites/items/FLO2A0.png Binary files differ. diff --git a/gamedata/sprites/items/FLO3A0.png b/gamedata/sprites/items/FLO3A0.png Binary files differ. diff --git a/gamedata/sprites/items/HOGLA0.png b/gamedata/sprites/items/HOGLA0.png Binary files differ. diff --git a/gamedata/sprites/items/INSKA0.png b/gamedata/sprites/items/INSKA0.png Binary files differ. diff --git a/gamedata/sprites/items/LUNGA0.png b/gamedata/sprites/items/LUNGA0.png Binary files differ. diff --git a/gamedata/sprites/items/MARIA0.png b/gamedata/sprites/items/MARIA0.png Binary files differ. diff --git a/gamedata/sprites/items/SAWPA0.png b/gamedata/sprites/items/SAWPA0.png Binary files differ. diff --git a/gamedata/sprites/items/SMONA0.png b/gamedata/sprites/items/SMONA0.png Binary files differ. diff --git a/gamedata/sprites/items/SMONB0.png b/gamedata/sprites/items/SMONB0.png Binary files differ. diff --git a/gamedata/sprites/items/SMONC0.png b/gamedata/sprites/items/SMONC0.png Binary files differ. diff --git a/gamedata/sprites/items/SORDA0.png b/gamedata/sprites/items/SORDA0.png Binary files differ. diff --git a/gamedata/sprites/items/TOSSA0.png b/gamedata/sprites/items/TOSSA0.png Binary files differ. diff --git a/gamedata/sprites/items/ZORNA0.png b/gamedata/sprites/items/ZORNA0.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A1.png b/gamedata/sprites/summons/chodeman/CHK3A1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A2.png b/gamedata/sprites/summons/chodeman/CHK3A2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A3.png b/gamedata/sprites/summons/chodeman/CHK3A3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A4.png b/gamedata/sprites/summons/chodeman/CHK3A4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A5.png b/gamedata/sprites/summons/chodeman/CHK3A5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A6.png b/gamedata/sprites/summons/chodeman/CHK3A6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A7.png b/gamedata/sprites/summons/chodeman/CHK3A7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3A8.png b/gamedata/sprites/summons/chodeman/CHK3A8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B1.png b/gamedata/sprites/summons/chodeman/CHK3B1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B2.png b/gamedata/sprites/summons/chodeman/CHK3B2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B3.png b/gamedata/sprites/summons/chodeman/CHK3B3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B4.png b/gamedata/sprites/summons/chodeman/CHK3B4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B5.png b/gamedata/sprites/summons/chodeman/CHK3B5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B6.png b/gamedata/sprites/summons/chodeman/CHK3B6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B7.png b/gamedata/sprites/summons/chodeman/CHK3B7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3B8.png b/gamedata/sprites/summons/chodeman/CHK3B8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C1.png b/gamedata/sprites/summons/chodeman/CHK3C1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C2.png b/gamedata/sprites/summons/chodeman/CHK3C2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C3.png b/gamedata/sprites/summons/chodeman/CHK3C3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C4.png b/gamedata/sprites/summons/chodeman/CHK3C4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C5.png b/gamedata/sprites/summons/chodeman/CHK3C5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C6.png b/gamedata/sprites/summons/chodeman/CHK3C6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C7.png b/gamedata/sprites/summons/chodeman/CHK3C7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3C8.png b/gamedata/sprites/summons/chodeman/CHK3C8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D1.png b/gamedata/sprites/summons/chodeman/CHK3D1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D2.png b/gamedata/sprites/summons/chodeman/CHK3D2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D3.png b/gamedata/sprites/summons/chodeman/CHK3D3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D4.png b/gamedata/sprites/summons/chodeman/CHK3D4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D5.png b/gamedata/sprites/summons/chodeman/CHK3D5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D6.png b/gamedata/sprites/summons/chodeman/CHK3D6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D7.png b/gamedata/sprites/summons/chodeman/CHK3D7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3D8.png b/gamedata/sprites/summons/chodeman/CHK3D8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E1.png b/gamedata/sprites/summons/chodeman/CHK3E1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E2.png b/gamedata/sprites/summons/chodeman/CHK3E2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E3.png b/gamedata/sprites/summons/chodeman/CHK3E3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E4.png b/gamedata/sprites/summons/chodeman/CHK3E4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E5.png b/gamedata/sprites/summons/chodeman/CHK3E5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E6.png b/gamedata/sprites/summons/chodeman/CHK3E6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E7.png b/gamedata/sprites/summons/chodeman/CHK3E7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3E8.png b/gamedata/sprites/summons/chodeman/CHK3E8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F1.png b/gamedata/sprites/summons/chodeman/CHK3F1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F2.png b/gamedata/sprites/summons/chodeman/CHK3F2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F3.png b/gamedata/sprites/summons/chodeman/CHK3F3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F4.png b/gamedata/sprites/summons/chodeman/CHK3F4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F5.png b/gamedata/sprites/summons/chodeman/CHK3F5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F6.png b/gamedata/sprites/summons/chodeman/CHK3F6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F7.png b/gamedata/sprites/summons/chodeman/CHK3F7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3F8.png b/gamedata/sprites/summons/chodeman/CHK3F8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G1.png b/gamedata/sprites/summons/chodeman/CHK3G1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G2.png b/gamedata/sprites/summons/chodeman/CHK3G2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G3.png b/gamedata/sprites/summons/chodeman/CHK3G3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G4.png b/gamedata/sprites/summons/chodeman/CHK3G4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G5.png b/gamedata/sprites/summons/chodeman/CHK3G5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G6.png b/gamedata/sprites/summons/chodeman/CHK3G6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G7.png b/gamedata/sprites/summons/chodeman/CHK3G7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3G8.png b/gamedata/sprites/summons/chodeman/CHK3G8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H1.png b/gamedata/sprites/summons/chodeman/CHK3H1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H2.png b/gamedata/sprites/summons/chodeman/CHK3H2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H3.png b/gamedata/sprites/summons/chodeman/CHK3H3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H4.png b/gamedata/sprites/summons/chodeman/CHK3H4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H5.png b/gamedata/sprites/summons/chodeman/CHK3H5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H6.png b/gamedata/sprites/summons/chodeman/CHK3H6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H7.png b/gamedata/sprites/summons/chodeman/CHK3H7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3H8.png b/gamedata/sprites/summons/chodeman/CHK3H8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I1.png b/gamedata/sprites/summons/chodeman/CHK3I1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I2.png b/gamedata/sprites/summons/chodeman/CHK3I2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I3.png b/gamedata/sprites/summons/chodeman/CHK3I3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I4.png b/gamedata/sprites/summons/chodeman/CHK3I4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I5.png b/gamedata/sprites/summons/chodeman/CHK3I5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I6.png b/gamedata/sprites/summons/chodeman/CHK3I6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I7.png b/gamedata/sprites/summons/chodeman/CHK3I7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3I8.png b/gamedata/sprites/summons/chodeman/CHK3I8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J1.png b/gamedata/sprites/summons/chodeman/CHK3J1.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J2.png b/gamedata/sprites/summons/chodeman/CHK3J2.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J3.png b/gamedata/sprites/summons/chodeman/CHK3J3.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J4.png b/gamedata/sprites/summons/chodeman/CHK3J4.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J5.png b/gamedata/sprites/summons/chodeman/CHK3J5.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J6.png b/gamedata/sprites/summons/chodeman/CHK3J6.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J7.png b/gamedata/sprites/summons/chodeman/CHK3J7.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3J8.png b/gamedata/sprites/summons/chodeman/CHK3J8.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3K0.png b/gamedata/sprites/summons/chodeman/CHK3K0.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3L0.png b/gamedata/sprites/summons/chodeman/CHK3L0.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3M0.png b/gamedata/sprites/summons/chodeman/CHK3M0.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3N0.png b/gamedata/sprites/summons/chodeman/CHK3N0.png Binary files differ. diff --git a/gamedata/sprites/summons/chodeman/CHK3O0.png b/gamedata/sprites/summons/chodeman/CHK3O0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A1.png b/gamedata/sprites/summons/stallion/CHK2A1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A2.png b/gamedata/sprites/summons/stallion/CHK2A2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A3.png b/gamedata/sprites/summons/stallion/CHK2A3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A4.png b/gamedata/sprites/summons/stallion/CHK2A4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A5.png b/gamedata/sprites/summons/stallion/CHK2A5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A6.png b/gamedata/sprites/summons/stallion/CHK2A6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A7.png b/gamedata/sprites/summons/stallion/CHK2A7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2A8.png b/gamedata/sprites/summons/stallion/CHK2A8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B1.png b/gamedata/sprites/summons/stallion/CHK2B1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B2.png b/gamedata/sprites/summons/stallion/CHK2B2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B3.png b/gamedata/sprites/summons/stallion/CHK2B3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B4.png b/gamedata/sprites/summons/stallion/CHK2B4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B5.png b/gamedata/sprites/summons/stallion/CHK2B5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B6.png b/gamedata/sprites/summons/stallion/CHK2B6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B7.png b/gamedata/sprites/summons/stallion/CHK2B7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2B8.png b/gamedata/sprites/summons/stallion/CHK2B8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C1.png b/gamedata/sprites/summons/stallion/CHK2C1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C2.png b/gamedata/sprites/summons/stallion/CHK2C2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C3.png b/gamedata/sprites/summons/stallion/CHK2C3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C4.png b/gamedata/sprites/summons/stallion/CHK2C4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C5.png b/gamedata/sprites/summons/stallion/CHK2C5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C6.png b/gamedata/sprites/summons/stallion/CHK2C6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C7.png b/gamedata/sprites/summons/stallion/CHK2C7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2C8.png b/gamedata/sprites/summons/stallion/CHK2C8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D1.png b/gamedata/sprites/summons/stallion/CHK2D1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D2.png b/gamedata/sprites/summons/stallion/CHK2D2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D3.png b/gamedata/sprites/summons/stallion/CHK2D3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D4.png b/gamedata/sprites/summons/stallion/CHK2D4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D5.png b/gamedata/sprites/summons/stallion/CHK2D5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D6.png b/gamedata/sprites/summons/stallion/CHK2D6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D7.png b/gamedata/sprites/summons/stallion/CHK2D7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2D8.png b/gamedata/sprites/summons/stallion/CHK2D8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E1.png b/gamedata/sprites/summons/stallion/CHK2E1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E2.png b/gamedata/sprites/summons/stallion/CHK2E2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E3.png b/gamedata/sprites/summons/stallion/CHK2E3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E4.png b/gamedata/sprites/summons/stallion/CHK2E4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E5.png b/gamedata/sprites/summons/stallion/CHK2E5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E6.png b/gamedata/sprites/summons/stallion/CHK2E6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E7.png b/gamedata/sprites/summons/stallion/CHK2E7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2E8.png b/gamedata/sprites/summons/stallion/CHK2E8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F1.png b/gamedata/sprites/summons/stallion/CHK2F1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F2.png b/gamedata/sprites/summons/stallion/CHK2F2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F3.png b/gamedata/sprites/summons/stallion/CHK2F3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F4.png b/gamedata/sprites/summons/stallion/CHK2F4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F5.png b/gamedata/sprites/summons/stallion/CHK2F5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F6.png b/gamedata/sprites/summons/stallion/CHK2F6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F7.png b/gamedata/sprites/summons/stallion/CHK2F7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2F8.png b/gamedata/sprites/summons/stallion/CHK2F8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G1.png b/gamedata/sprites/summons/stallion/CHK2G1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G2.png b/gamedata/sprites/summons/stallion/CHK2G2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G3.png b/gamedata/sprites/summons/stallion/CHK2G3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G4.png b/gamedata/sprites/summons/stallion/CHK2G4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G5.png b/gamedata/sprites/summons/stallion/CHK2G5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G6.png b/gamedata/sprites/summons/stallion/CHK2G6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G7.png b/gamedata/sprites/summons/stallion/CHK2G7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2G8.png b/gamedata/sprites/summons/stallion/CHK2G8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H1.png b/gamedata/sprites/summons/stallion/CHK2H1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H2.png b/gamedata/sprites/summons/stallion/CHK2H2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H3.png b/gamedata/sprites/summons/stallion/CHK2H3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H4.png b/gamedata/sprites/summons/stallion/CHK2H4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H5.png b/gamedata/sprites/summons/stallion/CHK2H5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H6.png b/gamedata/sprites/summons/stallion/CHK2H6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H7.png b/gamedata/sprites/summons/stallion/CHK2H7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2H8.png b/gamedata/sprites/summons/stallion/CHK2H8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I1.png b/gamedata/sprites/summons/stallion/CHK2I1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I2.png b/gamedata/sprites/summons/stallion/CHK2I2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I3.png b/gamedata/sprites/summons/stallion/CHK2I3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I4.png b/gamedata/sprites/summons/stallion/CHK2I4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I5.png b/gamedata/sprites/summons/stallion/CHK2I5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I6.png b/gamedata/sprites/summons/stallion/CHK2I6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I7.png b/gamedata/sprites/summons/stallion/CHK2I7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2I8.png b/gamedata/sprites/summons/stallion/CHK2I8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J1.png b/gamedata/sprites/summons/stallion/CHK2J1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J2.png b/gamedata/sprites/summons/stallion/CHK2J2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J3.png b/gamedata/sprites/summons/stallion/CHK2J3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J4.png b/gamedata/sprites/summons/stallion/CHK2J4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J5.png b/gamedata/sprites/summons/stallion/CHK2J5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J6.png b/gamedata/sprites/summons/stallion/CHK2J6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J7.png b/gamedata/sprites/summons/stallion/CHK2J7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2J8.png b/gamedata/sprites/summons/stallion/CHK2J8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K1.png b/gamedata/sprites/summons/stallion/CHK2K1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K2.png b/gamedata/sprites/summons/stallion/CHK2K2.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K3.png b/gamedata/sprites/summons/stallion/CHK2K3.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K4.png b/gamedata/sprites/summons/stallion/CHK2K4.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K5.png b/gamedata/sprites/summons/stallion/CHK2K5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K6.png b/gamedata/sprites/summons/stallion/CHK2K6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K7.png b/gamedata/sprites/summons/stallion/CHK2K7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2K8.png b/gamedata/sprites/summons/stallion/CHK2K8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2L0.png b/gamedata/sprites/summons/stallion/CHK2L0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2M0.png b/gamedata/sprites/summons/stallion/CHK2M0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2N0.png b/gamedata/sprites/summons/stallion/CHK2N0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2O0.png b/gamedata/sprites/summons/stallion/CHK2O0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/CHK2P0.png b/gamedata/sprites/summons/stallion/CHK2P0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBFIA0.png b/gamedata/sprites/summons/stallion/RBFIA0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBFIB0.png b/gamedata/sprites/summons/stallion/RBFIB0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBFIC0.png b/gamedata/sprites/summons/stallion/RBFIC0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBFID0.png b/gamedata/sprites/summons/stallion/RBFID0.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINA1.png b/gamedata/sprites/summons/stallion/RBINA1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINA2A8.png b/gamedata/sprites/summons/stallion/RBINA2A8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINA3A7.png b/gamedata/sprites/summons/stallion/RBINA3A7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINA4A6.png b/gamedata/sprites/summons/stallion/RBINA4A6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINA5.png b/gamedata/sprites/summons/stallion/RBINA5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINB1.png b/gamedata/sprites/summons/stallion/RBINB1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINB2B8.png b/gamedata/sprites/summons/stallion/RBINB2B8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINB3B7.png b/gamedata/sprites/summons/stallion/RBINB3B7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINB4B6.png b/gamedata/sprites/summons/stallion/RBINB4B6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINB5.png b/gamedata/sprites/summons/stallion/RBINB5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINC1.png b/gamedata/sprites/summons/stallion/RBINC1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINC2C8.png b/gamedata/sprites/summons/stallion/RBINC2C8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINC3C7.png b/gamedata/sprites/summons/stallion/RBINC3C7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINC4C6.png b/gamedata/sprites/summons/stallion/RBINC4C6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBINC5.png b/gamedata/sprites/summons/stallion/RBINC5.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBIND1.png b/gamedata/sprites/summons/stallion/RBIND1.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBIND2D8.png b/gamedata/sprites/summons/stallion/RBIND2D8.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBIND3D7.png b/gamedata/sprites/summons/stallion/RBIND3D7.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBIND4D6.png b/gamedata/sprites/summons/stallion/RBIND4D6.png Binary files differ. diff --git a/gamedata/sprites/summons/stallion/RBIND5.png b/gamedata/sprites/summons/stallion/RBIND5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A1.png b/gamedata/sprites/summons/tallboy/CHK1A1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A2.png b/gamedata/sprites/summons/tallboy/CHK1A2.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A3.png b/gamedata/sprites/summons/tallboy/CHK1A3.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A4.png b/gamedata/sprites/summons/tallboy/CHK1A4.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A5.png b/gamedata/sprites/summons/tallboy/CHK1A5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A6.png b/gamedata/sprites/summons/tallboy/CHK1A6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A7.png b/gamedata/sprites/summons/tallboy/CHK1A7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1A8.png b/gamedata/sprites/summons/tallboy/CHK1A8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1B1.png b/gamedata/sprites/summons/tallboy/CHK1B1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1B2B8.png b/gamedata/sprites/summons/tallboy/CHK1B2B8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1B3B7.png b/gamedata/sprites/summons/tallboy/CHK1B3B7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1B4B6.png b/gamedata/sprites/summons/tallboy/CHK1B4B6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1B5.png b/gamedata/sprites/summons/tallboy/CHK1B5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1C1.png b/gamedata/sprites/summons/tallboy/CHK1C1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1C2C8.png b/gamedata/sprites/summons/tallboy/CHK1C2C8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1C3C7.png b/gamedata/sprites/summons/tallboy/CHK1C3C7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1C4C6.png b/gamedata/sprites/summons/tallboy/CHK1C4C6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1C5.png b/gamedata/sprites/summons/tallboy/CHK1C5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1D1.png b/gamedata/sprites/summons/tallboy/CHK1D1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1D2D8.png b/gamedata/sprites/summons/tallboy/CHK1D2D8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1D3D7.png b/gamedata/sprites/summons/tallboy/CHK1D3D7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1D4D6.png b/gamedata/sprites/summons/tallboy/CHK1D4D6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1D5.png b/gamedata/sprites/summons/tallboy/CHK1D5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1E1.png b/gamedata/sprites/summons/tallboy/CHK1E1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1E2E8.png b/gamedata/sprites/summons/tallboy/CHK1E2E8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1E3E7.png b/gamedata/sprites/summons/tallboy/CHK1E3E7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1E4E6.png b/gamedata/sprites/summons/tallboy/CHK1E4E6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1E5.png b/gamedata/sprites/summons/tallboy/CHK1E5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1F0.png b/gamedata/sprites/summons/tallboy/CHK1F0.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1G0.png b/gamedata/sprites/summons/tallboy/CHK1G0.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1H0.png b/gamedata/sprites/summons/tallboy/CHK1H0.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1I1.png b/gamedata/sprites/summons/tallboy/CHK1I1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1I2I8.png b/gamedata/sprites/summons/tallboy/CHK1I2I8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1I3I7.png b/gamedata/sprites/summons/tallboy/CHK1I3I7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1I4I6.png b/gamedata/sprites/summons/tallboy/CHK1I4I6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1I5.png b/gamedata/sprites/summons/tallboy/CHK1I5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1J1.png b/gamedata/sprites/summons/tallboy/CHK1J1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1J2J8.png b/gamedata/sprites/summons/tallboy/CHK1J2J8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1J3J7.png b/gamedata/sprites/summons/tallboy/CHK1J3J7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1J4J6.png b/gamedata/sprites/summons/tallboy/CHK1J4J6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1J5.png b/gamedata/sprites/summons/tallboy/CHK1J5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1K0.png b/gamedata/sprites/summons/tallboy/CHK1K0.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1L0.png b/gamedata/sprites/summons/tallboy/CHK1L0.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1M1.png b/gamedata/sprites/summons/tallboy/CHK1M1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1M2M8.png b/gamedata/sprites/summons/tallboy/CHK1M2M8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1M3M7.png b/gamedata/sprites/summons/tallboy/CHK1M3M7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1M4M6.png b/gamedata/sprites/summons/tallboy/CHK1M4M6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1M5.png b/gamedata/sprites/summons/tallboy/CHK1M5.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1N1.png b/gamedata/sprites/summons/tallboy/CHK1N1.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1N2N8.png b/gamedata/sprites/summons/tallboy/CHK1N2N8.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1N3N7.png b/gamedata/sprites/summons/tallboy/CHK1N3N7.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1N4N6.png b/gamedata/sprites/summons/tallboy/CHK1N4N6.png Binary files differ. diff --git a/gamedata/sprites/summons/tallboy/CHK1N5.png b/gamedata/sprites/summons/tallboy/CHK1N5.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWA0.png b/gamedata/sprites/weapons/claw/CLAWA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWB0.png b/gamedata/sprites/weapons/claw/CLAWB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWC0.png b/gamedata/sprites/weapons/claw/CLAWC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWD0.png b/gamedata/sprites/weapons/claw/CLAWD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWE0.png b/gamedata/sprites/weapons/claw/CLAWE0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWF0.png b/gamedata/sprites/weapons/claw/CLAWF0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWG0.png b/gamedata/sprites/weapons/claw/CLAWG0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWH0.png b/gamedata/sprites/weapons/claw/CLAWH0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWI0.png b/gamedata/sprites/weapons/claw/CLAWI0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWJ0.png b/gamedata/sprites/weapons/claw/CLAWJ0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWK0.png b/gamedata/sprites/weapons/claw/CLAWK0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWL0.png b/gamedata/sprites/weapons/claw/CLAWL0.png Binary files differ. diff --git a/gamedata/sprites/weapons/claw/CLAWM0.png b/gamedata/sprites/weapons/claw/CLAWM0.png Binary files differ. diff --git a/gamedata/sprites/weapons/fleche/BLSDA0.png b/gamedata/sprites/weapons/fleche/BLSDA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/fleche/BLSDB0.png b/gamedata/sprites/weapons/fleche/BLSDB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/fleche/BLSDC0.png b/gamedata/sprites/weapons/fleche/BLSDC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/fleche/BLSDD0.png b/gamedata/sprites/weapons/fleche/BLSDD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/fleche/BLSDE0.png b/gamedata/sprites/weapons/fleche/BLSDE0.png Binary files differ. diff --git a/gamedata/sprites/weapons/passe/PASSA0.png b/gamedata/sprites/weapons/passe/PASSA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/passe/PASSB0.png b/gamedata/sprites/weapons/passe/PASSB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/passe/PASSC0.png b/gamedata/sprites/weapons/passe/PASSC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/passe/PASSD0.png b/gamedata/sprites/weapons/passe/PASSD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/swordparry/PARYA0.png b/gamedata/sprites/weapons/swordparry/PARYA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/swordparry/PARYB0.png b/gamedata/sprites/weapons/swordparry/PARYB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/swordparry/PARYC0.png b/gamedata/sprites/weapons/swordparry/PARYC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/swordparry/PARYD0.png b/gamedata/sprites/weapons/swordparry/PARYD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/swordparry/PARYE0.png b/gamedata/sprites/weapons/swordparry/PARYE0.png Binary files differ. diff --git a/gamedata/sprites/weapons/swordparry/PARYF0.png b/gamedata/sprites/weapons/swordparry/PARYF0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/SPONA0.png b/gamedata/sprites/weapons/throw/SPONA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/SPONB0.png b/gamedata/sprites/weapons/throw/SPONB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/SPONC0.png b/gamedata/sprites/weapons/throw/SPONC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/SPOND0.png b/gamedata/sprites/weapons/throw/SPOND0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THROA1.png b/gamedata/sprites/weapons/throw/THROA1.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THROA2A8.png b/gamedata/sprites/weapons/throw/THROA2A8.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THROA3A7.png b/gamedata/sprites/weapons/throw/THROA3A7.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THROA4A6.png b/gamedata/sprites/weapons/throw/THROA4A6.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THROA5.png b/gamedata/sprites/weapons/throw/THROA5.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THSWA0.png b/gamedata/sprites/weapons/throw/THSWA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THSWB0.png b/gamedata/sprites/weapons/throw/THSWB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THSWC0.png b/gamedata/sprites/weapons/throw/THSWC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THSWD0.png b/gamedata/sprites/weapons/throw/THSWD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/throw/THSWE0.png b/gamedata/sprites/weapons/throw/THSWE0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/DRAWA0.png b/gamedata/sprites/weapons/vom/DRAWA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/DRAWB0.png b/gamedata/sprites/weapons/vom/DRAWB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/DRAWC0.png b/gamedata/sprites/weapons/vom/DRAWC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/DRAWD0.png b/gamedata/sprites/weapons/vom/DRAWD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDA0.png b/gamedata/sprites/weapons/vom/PHSDA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDB0.png b/gamedata/sprites/weapons/vom/PHSDB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDC0.png b/gamedata/sprites/weapons/vom/PHSDC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDD0.png b/gamedata/sprites/weapons/vom/PHSDD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDE0.png b/gamedata/sprites/weapons/vom/PHSDE0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDF0.png b/gamedata/sprites/weapons/vom/PHSDF0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDG0.png b/gamedata/sprites/weapons/vom/PHSDG0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDH0.png b/gamedata/sprites/weapons/vom/PHSDH0.png Binary files differ. diff --git a/gamedata/sprites/weapons/vom/PHSDI0.png b/gamedata/sprites/weapons/vom/PHSDI0.png Binary files differ. diff --git a/gamedata/sprites/weapons/zorn/ZHSDA0.png b/gamedata/sprites/weapons/zorn/ZHSDA0.png Binary files differ. diff --git a/gamedata/sprites/weapons/zorn/ZHSDB0.png b/gamedata/sprites/weapons/zorn/ZHSDB0.png Binary files differ. diff --git a/gamedata/sprites/weapons/zorn/ZHSDC0.png b/gamedata/sprites/weapons/zorn/ZHSDC0.png Binary files differ. diff --git a/gamedata/sprites/weapons/zorn/ZHSDD0.png b/gamedata/sprites/weapons/zorn/ZHSDD0.png Binary files differ. diff --git a/gamedata/sprites/weapons/zorn/ZHSDE0.png b/gamedata/sprites/weapons/zorn/ZHSDE0.png Binary files differ. diff --git a/gamedata/sprites/weapons/zorn/ZHSDF0.png b/gamedata/sprites/weapons/zorn/ZHSDF0.png Binary files differ. diff --git a/gamedata/textures.txt b/gamedata/textures.txt @@ -0,0 +1,1264 @@ +sprite INSKA0, 24, 24 +{ + offset 12, 32 + patch INSKA0, 0, 0 +} + +sprite HOGLA0, 24, 24 +{ + offset 12, 32 + patch HOGLA0, 0, 0 +} + +sprite FLO2A0, 32, 25 +{ + offset 16, 25 + patch FLO2A0, 0, 0 +} + +sprite FLO3A0, 26, 31 +{ + offset 13, 40 + patch FLO3A0, 0, 0 +} + +sprite BRIGA0, 34, 40 +{ + offset 18, 40 + patch BRIGA0, 0, 0 +} + +sprite FLO1A0, 16, 15 +{ + offset 8, 15 + patch FLO1A0, 0, 0 +} + +sprite FLO1B0, 16, 15 +{ + offset 8, 15 + patch FLO1B0, 0, 0 +} + +sprite FLO1C0, 16, 15 +{ + offset 8, 15 + patch FLO1C0, 0, 0 +} + +sprite FLO1D0, 16, 15 +{ + offset 8, 15 + patch FLO1D0, 0, 0 +} + +sprite FLO1E0, 16, 15 +{ + offset 8, 15 + patch FLO1E0, 0, 0 +} + +sprite FLO1F0, 16, 15 +{ + offset 8, 15 + patch FLO1F0, 0, 0 +} + +sprite SORDA0, 34, 90 +{ + offset 17, 55 + patch SORDA0, 0, 0 +} + +sprite SORDB0, 34, 90 +{ + offset 17, 55 + patch SORDA0, 0, 0 + { + FlipY + } +} + +//summons +sprite CHK2B1, 70, 66 +{ + offset 35, 66 + patch CHK2B1, 0, 0 +} + +sprite CHK2B2, 83, 81 +{ + offset 40, 81 + patch CHK2B2, 0, 0 +} + +sprite CHK2B3, 80, 64 +{ + offset 40, 64 + patch CHK2B3, 0, 0 +} + +sprite CHK2B4, 70, 67 +{ + offset 35, 67 + patch CHK2B4, 0, 0 +} + +sprite CHK2B5, 76, 68 +{ + offset 38, 68 + patch CHK2B5, 0, 0 +} + +sprite CHK2B6, 62, 68 +{ + offset 31, 68 + patch CHK2B6, 0, 0 +} + +sprite CHK2B7, 80, 64 +{ + offset 40, 64 + patch CHK2B7, 0, 0 +} + +sprite CHK2B8, 83, 81 +{ + offset 41, 81 + patch CHK2B8, 0, 0 +} + +sprite CHK2C1, 70, 66 +{ + offset 35, 66 + patch CHK2C1, 0, 0 +} + +sprite CHK2C2, 83, 81 +{ + offset 41, 81 + patch CHK2C2, 0, 0 +} + +sprite CHK2C3, 80, 64 +{ + offset 40, 64 + patch CHK2C3, 0, 0 +} + +sprite CHK2C4, 70, 67 +{ + offset 35, 67 + patch CHK2C4, 0, 0 +} + +sprite CHK2C5, 76, 68 +{ + offset 38, 68 + patch CHK2C5, 0, 0 +} + +sprite CHK2C6, 62, 68 +{ + offset 31, 68 + patch CHK2C6, 0, 0 +} + +sprite CHK2C7, 80, 64 +{ + offset 40, 64 + patch CHK2C7, 0, 0 +} + +sprite CHK2C8, 83, 81 +{ + offset 41, 81 + patch CHK2C8, 0, 0 +} + +sprite CHK2D1, 70, 66 +{ + offset 35, 66 + patch CHK2D1, 0, 0 +} + +sprite CHK2D2, 83, 81 +{ + offset 41, 81 + patch CHK2D2, 0, 0 +} + +sprite CHK2D3, 80, 64 +{ + offset 40, 64 + patch CHK2D3, 0, 0 +} + +sprite CHK2D4, 70, 67 +{ + offset 35, 67 + patch CHK2D4, 0, 0 +} + +sprite CHK2D5, 76, 68 +{ + offset 38, 68 + patch CHK2D5, 0, 0 +} + +sprite CHK2D6, 62, 68 +{ + offset 31, 68 + patch CHK2D6, 0, 0 +} + +sprite CHK2D7, 80, 64 +{ + offset 40, 64 + patch CHK2D7, 0, 0 +} + +sprite CHK2D8, 83, 81 +{ + offset 41, 81 + patch CHK2D8, 0, 0 +} + +sprite CHK2E1, 70, 66 +{ + offset 35, 66 + patch CHK2E1, 0, 0 +} + +sprite CHK2E2, 83, 81 +{ + offset 41, 81 + patch CHK2E2, 0, 0 +} + +sprite CHK2E3, 80, 64 +{ + offset 40, 64 + patch CHK2E3, 0, 0 +} + +sprite CHK2E4, 70, 67 +{ + offset 35, 67 + patch CHK2E4, 0, 0 +} + +sprite CHK2E5, 76, 68 +{ + offset 38, 68 + patch CHK2E5, 0, 0 +} + +sprite CHK2E6, 62, 68 +{ + offset 31, 68 + patch CHK2E6, 0, 0 +} + +sprite CHK2E7, 80, 64 +{ + offset 40, 64 + patch CHK2E7, 0, 0 +} + +sprite CHK2E8, 83, 81 +{ + offset 41, 81 + patch CHK2E8, 0, 0 +} + +sprite CHK2F1, 58, 86 +{ + offset 29, 86 + patch CHK2F1, 0, 0 +} + +sprite CHK2F2, 83, 81 +{ + offset 41, 81 + patch CHK2F2, 0, 0 +} + +sprite CHK2F3, 130, 91 +{ + offset 65, 91 + patch CHK2F3, 0, 0 +} + +sprite CHK2F4, 100, 100 +{ + offset 50, 100 + patch CHK2F4, 0, 0 +} + +sprite CHK2F5, 58, 86 +{ + offset 29, 86 + patch CHK2F5, 0, 0 +} + +sprite CHK2F6, 100, 92 +{ + offset 50, 92 + patch CHK2F6, 0, 0 +} + +sprite CHK2F7, 130, 91 +{ + offset 65, 91 + patch CHK2F7, 0, 0 +} + +sprite CHK2F8, 83, 81 +{ + offset 41, 81 + patch CHK2F8, 0, 0 +} + +sprite CHK2G1, 58, 86 +{ + offset 29, 86 + patch CHK2G1, 0, 0 +} + +sprite CHK2G2, 83, 81 +{ + offset 41, 81 + patch CHK2G2, 0, 0 +} + +sprite CHK2G3, 130, 91 +{ + offset 65, 91 + patch CHK2G3, 0, 0 +} + +sprite CHK2G4, 100, 100 +{ + offset 50, 100 + patch CHK2G4, 0, 0 +} + +sprite CHK2G5, 58, 86 +{ + offset 29, 86 + patch CHK2G5, 0, 0 +} + +sprite CHK2G6, 100, 92 +{ + offset 50, 92 + patch CHK2G6, 0, 0 +} + +sprite CHK2G7, 130, 91 +{ + offset 65, 91 + patch CHK2G7, 0, 0 +} + +sprite CHK2G8, 83, 81 +{ + offset 41, 81 + patch CHK2G8, 0, 0 +} + +sprite CHK2H1, 58, 86 +{ + offset 29, 86 + patch CHK2H1, 0, 0 +} + +sprite CHK2H2, 83, 81 +{ + offset 41, 81 + patch CHK2H2, 0, 0 +} + +sprite CHK2H3, 130, 91 +{ + offset 65, 91 + patch CHK2H3, 0, 0 +} + +sprite CHK2H4, 100, 100 +{ + offset 50, 100 + patch CHK2H4, 0, 0 +} + +sprite CHK2H5, 58, 86 +{ + offset 29, 86 + patch CHK2H5, 0, 0 +} + +sprite CHK2H6, 100, 92 +{ + offset 50, 92 + patch CHK2H6, 0, 0 +} + +sprite CHK2H7, 130, 91 +{ + offset 65, 91 + patch CHK2H7, 0, 0 +} + +sprite CHK2H8, 83, 81 +{ + offset 41, 81 + patch CHK2H8, 0, 0 +} + +sprite CHK2I1, 58, 86 +{ + offset 29, 86 + patch CHK2I1, 0, 0 +} + +sprite CHK2I2, 83, 81 +{ + offset 41, 81 + patch CHK2I2, 0, 0 +} + +sprite CHK2I3, 130, 91 +{ + offset 65, 91 + patch CHK2I3, 0, 0 +} + +sprite CHK2I4, 100, 100 +{ + offset 50, 100 + patch CHK2I4, 0, 0 +} + +sprite CHK2I5, 58, 86 +{ + offset 29, 86 + patch CHK2I5, 0, 0 +} + +sprite CHK2I6, 100, 92 +{ + offset 50, 92 + patch CHK2I6, 0, 0 +} + +sprite CHK2I7, 130, 91 +{ + offset 65, 91 + patch CHK2I7, 0, 0 +} + +sprite CHK2I8, 83, 81 +{ + offset 41, 81 + patch CHK2I8, 0, 0 +} + +sprite CHK2J1, 58, 86 +{ + offset 29, 86 + patch CHK2J1, 0, 0 +} + +sprite CHK2J2, 83, 81 +{ + offset 41, 81 + patch CHK2J2, 0, 0 +} + +sprite CHK2J3, 130, 91 +{ + offset 65, 91 + patch CHK2J3, 0, 0 +} + +sprite CHK2J4, 100, 100 +{ + offset 50, 100 + patch CHK2J4, 0, 0 +} + +sprite CHK2J5, 58, 86 +{ + offset 29, 86 + patch CHK2J5, 0, 0 +} + +sprite CHK2J6, 100, 92 +{ + offset 50, 92 + patch CHK2J6, 0, 0 +} + +sprite CHK2J7, 130, 91 +{ + offset 65, 91 + patch CHK2J7, 0, 0 +} + +sprite CHK2J8, 83, 81 +{ + offset 41, 81 + patch CHK2J8, 0, 0 +} + +sprite CHK2K1, 58, 86 +{ + offset 29, 86 + patch CHK2K1, 0, 0 +} + +sprite CHK2K2, 83, 81 +{ + offset 41, 81 + patch CHK2K2, 0, 0 +} + +sprite CHK2K3, 130, 91 +{ + offset 65, 91 + patch CHK2K3, 0, 0 +} + +sprite CHK2K4, 100, 100 +{ + offset 50, 100 + patch CHK2K4, 0, 0 +} + +sprite CHK2K5, 58, 86 +{ + offset 29, 86 + patch CHK2K5, 0, 0 +} + +sprite CHK2K6, 100, 92 +{ + offset 50, 92 + patch CHK2K6, 0, 0 +} + +sprite CHK2K7, 130, 91 +{ + offset 65, 91 + patch CHK2K7, 0, 0 +} + +sprite CHK2K8, 83, 81 +{ + offset 41, 81 + patch CHK2K8, 0, 0 +} + +sprite CHK2N0, 80, 64 +{ + offset 40, 64 + patch CHK2N0, 0, 0 +} + +sprite CHK2O0, 80, 64 +{ + offset 40, 64 + patch CHK2O0, 0, 0 +} + +sprite CHK2P0, 80, 64 +{ + offset 40, 64 + patch CHK2P0, 0, 0 +} + +sprite RBFIA0, 16, 17 +{ + offset 8, 17 + patch RBFIB0, 0, 0 +} + +sprite RBFIB0, 16, 17 +{ + offset 8, 17 + patch RBFIB0, 0, 0 +} + +sprite RBFIC0, 16, 17 +{ + offset 8, 17 + patch RBFIC0, 0, 0 +} + +sprite RBFID0, 16, 17 +{ + offset 8, 17 + patch RBFID0, 0, 0 +} + +sprite RBINA1, 60, 17 +{ + offset 30, 8 + patch RBINA1, 0, 0 +} + +sprite RBINA2A8, 60, 17 +{ + offset 30, 8 + patch RBINA2A8, 0, 0 +} + +sprite RBINA3A7, 60, 17 +{ + offset 30, 8 + patch RBINA3A7, 0, 0 +} + +sprite RBINA4A6, 60, 17 +{ + offset 30, 8 + patch RBINA4A6, 0, 0 +} + +sprite RBINA5, 60, 17 +{ + offset 30, 8 + patch RBINA5, 0, 0 +} + +sprite RBINB1, 60, 17 +{ + offset 30, 8 + patch RBINB1, 0, 0 +} + +sprite RBINB2B8, 60, 17 +{ + offset 30, 8 + patch RBINB2B8, 0, 0 +} + +sprite RBINB3B7, 60, 17 +{ + offset 30, 8 + patch RBINB3B7, 0, 0 +} + +sprite RBINB4B6, 60, 17 +{ + offset 30, 8 + patch RBINB4B6, 0, 0 +} + +sprite RBINB5, 60, 17 +{ + offset 30, 8 + patch RBINB5, 0, 0 +} + +sprite RBINC1, 60, 17 +{ + offset 30, 8 + patch RBINC1, 0, 0 +} + +sprite RBINC2C8, 60, 17 +{ + offset 30, 8 + patch RBINC2C8, 0, 0 +} + +sprite RBINC3C7, 60, 17 +{ + offset 30, 8 + patch RBINC3C7, 0, 0 +} + +sprite RBINC4C6, 60, 17 +{ + offset 30, 8 + patch RBINC4C6, 0, 0 +} + +sprite RBINC5, 60, 17 +{ + offset 30, 8 + patch RBINC5, 0, 0 +} + +sprite RBIND1, 60, 17 +{ + offset 30, 8 + patch RBIND1, 0, 0 +} + +sprite RBIND2D8, 60, 17 +{ + offset 30, 8 + patch RBIND2D8, 0, 0 +} + +sprite RBIND3D7, 60, 17 +{ + offset 30, 8 + patch RBIND3D7, 0, 0 +} + +sprite RBIND4D6, 60, 17 +{ + offset 30, 8 + patch RBIND4D6, 0, 0 +} + +sprite RBIND5, 60, 17 +{ + offset 30, 8 + patch RBIND5, 0, 0 +} + +sprite CHK3A1, 88, 60 +{ + offset 44, 60 + patch CHK3A1, 0, 0 +} + +sprite CHK3A2, 66, 46 +{ + offset 33, 46 + patch CHK3A2, 0, 0 +} + +sprite CHK3A3, 41, 50 +{ + offset 20, 50 + patch CHK3A3, 0, 0 +} + +sprite CHK3A4, 66, 46 +{ + offset 33, 46 + patch CHK3A4, 0, 0 +} + +sprite CHK3A5, 70, 60 +{ + offset 35, 60 + patch CHK3A5, 0, 0 +} + +sprite CHK3A6, 66, 46 +{ + offset 33, 46 + patch CHK3A6, 0, 0 +} + +sprite CHK3A7, 41, 50 +{ + offset 20, 50 + patch CHK3A7, 0, 0 +} + +sprite CHK3A8, 70, 46 +{ + offset 35, 46 + patch CHK3A8, 0, 0 +} + +sprite CHK3B1, 70, 60 +{ + offset 35, 60 + patch CHK3B1, 0, 0 +} + +sprite CHK3B2, 66, 46 +{ + offset 33, 46 + patch CHK3B2, 0, 0 +} + +sprite CHK3B3, 41, 50 +{ + offset 20, 50 + patch CHK3B3, 0, 0 +} + +sprite CHK3B4, 66, 46 +{ + offset 33, 46 + patch CHK3B4, 0, 0 +} + +sprite CHK3B5, 70, 60 +{ + offset 35, 60 + patch CHK3B5, 0, 0 +} + +sprite CHK3B6, 66, 46 +{ + offset 33, 46 + patch CHK3B6, 0, 0 +} + +sprite CHK3B7, 41, 50 +{ + offset 20, 50 + patch CHK3B7, 0, 0 +} + +sprite CHK3B8, 70, 46 +{ + offset 35, 46 + patch CHK3B8, 0, 0 +} + +sprite CHK3C1, 70, 60 +{ + offset 35, 60 + patch CHK3C1, 0, 0 +} + +sprite CHK3C2, 66, 46 +{ + offset 33, 46 + patch CHK3C2, 0, 0 +} + +sprite CHK3C3, 41, 50 +{ + offset 20, 50 + patch CHK3C3, 0, 0 +} + +sprite CHK3C4, 66, 46 +{ + offset 33, 46 + patch CHK3C4, 0, 0 +} + +sprite CHK3C5, 70, 60 +{ + offset 35, 60 + patch CHK3C5, 0, 0 +} + +sprite CHK3C6, 66, 46 +{ + offset 33, 46 + patch CHK3C6, 0, 0 +} + +sprite CHK3C7, 41, 50 +{ + offset 20, 50 + patch CHK3C7, 0, 0 +} + +sprite CHK3C8, 70, 46 +{ + offset 35, 46 + patch CHK3C8, 0, 0 +} + +sprite CHK3D1, 70, 60 +{ + offset 35, 60 + patch CHK3D1, 0, 0 +} + +sprite CHK3D2, 66, 46 +{ + offset 33, 46 + patch CHK3D2, 0, 0 +} + +sprite CHK3D3, 41, 50 +{ + offset 20, 50 + patch CHK3D3, 0, 0 +} + +sprite CHK3D4, 66, 46 +{ + offset 33, 46 + patch CHK3D4, 0, 0 +} + +sprite CHK3D5, 70, 60 +{ + offset 35, 60 + patch CHK3D5, 0, 0 +} + +sprite CHK3D6, 66, 46 +{ + offset 33, 46 + patch CHK3D6, 0, 0 +} + +sprite CHK3D7, 41, 50 +{ + offset 20, 50 + patch CHK3D7, 0, 0 +} + +sprite CHK3D8, 70, 46 +{ + offset 35, 46 + patch CHK3D8, 0, 0 +} + +sprite CHK3E1, 70, 60 +{ + offset 35, 60 + patch CHK3E1, 0, 0 +} + +sprite CHK3E2, 66, 46 +{ + offset 33, 46 + patch CHK3E2, 0, 0 +} + +sprite CHK3E3, 41, 50 +{ + offset 20, 50 + patch CHK3E3, 0, 0 +} + +sprite CHK3E4, 66, 46 +{ + offset 33, 46 + patch CHK3E4, 0, 0 +} + +sprite CHK3E5, 70, 60 +{ + offset 35, 60 + patch CHK3E5, 0, 0 +} + +sprite CHK3E6, 66, 46 +{ + offset 33, 46 + patch CHK3E6, 0, 0 +} + +sprite CHK3E7, 41, 50 +{ + offset 20, 50 + patch CHK3E7, 0, 0 +} + +sprite CHK3E8, 70, 46 +{ + offset 35, 46 + patch CHK3E8, 0, 0 +} + +sprite CHK3F1, 88, 60 +{ + offset 44, 60 + patch CHK3F1, 0, 0 +} + +sprite CHK3F2, 100, 60 +{ + offset 50, 60 + patch CHK3F2, 0, 0 +} + +sprite CHK3F3, 103, 64 +{ + offset 51, 64 + patch CHK3F3, 0, 0 +} + +sprite CHK3F4, 100, 60 +{ + offset 50, 60 + patch CHK3F4, 0, 0 +} + +sprite CHK3F5, 88, 60 +{ + offset 44, 60 + patch CHK3F5, 0, 0 +} + +sprite CHK3F6, 100, 60 +{ + offset 50, 60 + patch CHK3F6, 0, 0 +} + +sprite CHK3F7, 103, 64 +{ + offset 51, 64 + patch CHK3F7, 0, 0 +} + +sprite CHK3F8, 100, 60 +{ + offset 50, 60 + patch CHK3F8, 0, 0 +} + +sprite CHK3G1, 88, 60 +{ + offset 44, 60 + patch CHK3G1, 0, 0 +} + +sprite CHK3G2, 100, 60 +{ + offset 50, 60 + patch CHK3G2, 0, 0 +} + +sprite CHK3G3, 103, 64 +{ + offset 51, 64 + patch CHK3G3, 0, 0 +} + +sprite CHK3G4, 100, 60 +{ + offset 50, 60 + patch CHK3G4, 0, 0 +} + +sprite CHK3G5, 88, 60 +{ + offset 44, 60 + patch CHK3G5, 0, 0 +} + +sprite CHK3G6, 100, 60 +{ + offset 50, 60 + patch CHK3G6, 0, 0 +} + +sprite CHK3G7, 103, 64 +{ + offset 51, 64 + patch CHK3G7, 0, 0 +} + +sprite CHK3G8, 100, 60 +{ + offset 50, 60 + patch CHK3G8, 0, 0 +} + +sprite CHK3H1, 88, 60 +{ + offset 44, 60 + patch CHK3H1, 0, 0 +} + +sprite CHK3H2, 100, 60 +{ + offset 50, 60 + patch CHK3H2, 0, 0 +} + +sprite CHK3H3, 103, 64 +{ + offset 51, 64 + patch CHK3H3, 0, 0 +} + +sprite CHK3H4, 100, 60 +{ + offset 50, 60 + patch CHK3H4, 0, 0 +} + +sprite CHK3H5, 88, 60 +{ + offset 44, 60 + patch CHK3H5, 0, 0 +} + +sprite CHK3H6, 100, 60 +{ + offset 50, 60 + patch CHK3H6, 0, 0 +} + +sprite CHK3H7, 103, 64 +{ + offset 51, 64 + patch CHK3H7, 0, 0 +} + +sprite CHK3H8, 100, 60 +{ + offset 50, 60 + patch CHK3H8, 0, 0 +} + +sprite CHK3I1, 88, 60 +{ + offset 44, 60 + patch CHK3I1, 0, 0 +} + +sprite CHK3I2, 100, 60 +{ + offset 50, 60 + patch CHK3I2, 0, 0 +} + +sprite CHK3I3, 103, 64 +{ + offset 51, 64 + patch CHK3I3, 0, 0 +} + +sprite CHK3I4, 100, 60 +{ + offset 50, 60 + patch CHK3I4, 0, 0 +} + +sprite CHK3I5, 88, 60 +{ + offset 44, 60 + patch CHK3I5, 0, 0 +} + +sprite CHK3I6, 100, 60 +{ + offset 50, 60 + patch CHK3I6, 0, 0 +} + +sprite CHK3I7, 103, 64 +{ + offset 51, 64 + patch CHK3I7, 0, 0 +} + +sprite CHK3I8, 100, 60 +{ + offset 50, 60 + patch CHK3I8, 0, 0 +} + +sprite CHK3J1, 88, 60 +{ + offset 44, 60 + patch CHK3J1, 0, 0 +} + +sprite CHK3J2, 100, 60 +{ + offset 50, 60 + patch CHK3J2, 0, 0 +} + +sprite CHK3J3, 103, 64 +{ + offset 51, 64 + patch CHK3J3, 0, 0 +} + +sprite CHK3J4, 100, 60 +{ + offset 50, 60 + patch CHK3J4, 0, 0 +} + +sprite CHK3J5, 88, 60 +{ + offset 44, 60 + patch CHK3J5, 0, 0 +} + +sprite CHK3J6, 100, 60 +{ + offset 50, 60 + patch CHK3J6, 0, 0 +} + +sprite CHK3J7, 103, 64 +{ + offset 51, 64 + patch CHK3J7, 0, 0 +} + +sprite CHK3J8, 100, 60 +{ + offset 50, 60 + patch CHK3J8, 0, 0 +} + +sprite CHK3K0, 60, 44 +{ + offset 30, 44 + patch CHK3K0, 0, 0 +} + +sprite CHK3L0, 60, 44 +{ + offset 30, 44 + patch CHK3L0, 0, 0 +} + +sprite CHK3M0, 88, 60 +{ + offset 88, 60 + patch CHK3M0, 0, 0 +} + +sprite CHK3N0, 88, 60 +{ + offset 88, 60 + patch CHK3N0, 0, 0 +} + +sprite CHK3O0, 88, 60 +{ + offset 88, 60 + patch CHK3O0, 0, 0 +} + +//powerups +sprite DORBA0, 34, 34 +{ + offset 17, 50 + patch DORBA0, 0, 0 +} + +sprite DORBB0, 34, 34 +{ + offset 17, 50 + patch DORBB0, 0, 0 +} + +sprite DORBC0, 34, 34 +{ + offset 17, 50 + patch DORBC0, 0, 0 +} + +sprite CNVGA0, 24, 28 +{ + offset 12, 40 + patch CNVGA0, 0, 0 +} + +sprite CNVGB0, 24, 28 +{ + offset 12, 40 + patch CNVGB0, 0, 0 +} diff --git a/gamedata/zactors/armor.zsc b/gamedata/zactors/armor.zsc @@ -0,0 +1,73 @@ +// 0 = UNARMORED +// 1 = BRIGANDINE (backpack replacement, 50% damage reduction) +// 2 = MARISKULL (radsuit replacement) + +class DBArmorBase : Actor +{ + int armortype; + Property ArmorType : armortype; + Default + { + Radius 30; + Height 30; + DBArmorBase.ArmorType 0; + } + + override void Tick() + { + let bun = DevilbunnyPlayer(players[consoleplayer].mo); + if (bun) + { + if(Distance3d(bun) < 64) + { + bun.A_Print("Press your 'don armor' binding to wear this shit"); + if (bun.inDonArmor && bun.hasArmorType == 0) + { + bun.hasArmorType = armortype; + A_StartSound("swordland", CHAN_BODY); + SetStateLabel("Poof"); + } + } + } + Super.Tick(); + } + + States + { + Poof: + TNT1 A 1; + stop; + } +} + +class Brigandine : DBArmorBase replaces Backpack +{ + Default + { + DBArmorBase.ArmorType 1; + } + + States + { + Spawn: + BRIG A -1; + stop; + } +} + + +class MariSkull : Brigandine replaces RadSuit +{ + Default + { + DBArmorBase.ArmorType 2; + } + + States + { + Spawn: + MARI A -1; + stop; + } + +} diff --git a/gamedata/zactors/cheats.zsc b/gamedata/zactors/cheats.zsc @@ -0,0 +1,140 @@ +extend class DevilbunnyPlayer +{ + override void CheatGive(String name, int amount) + { + let player = self.player; + if (player.mo == NULL || player.health <= 0) + { + return; + } + + bool giveall = FALSE; + if (name ~== "all") + { + giveall = TRUE; + } + + if (name ~== "health") + { + health = 1; + if (amount > 0) + { + self.GainHealth(amount); + } + else + { + self.hitpoints = player.maxhits; + } + } + + if (giveall || name ~== "spirit" || name ~== "armor" || name ~== "ammo") + { + if (amount <= 0) + amount = 400; + + self.GainSpirit(amount); + + if (!giveall) + return; + } + + if (giveall || name ~== "sword" || name ~== "grief") + { + self.hasSword = 1; + + if (!giveall) + return; + } + + if (giveall || name ~== "brigandine" || name ~== "backpack") + { + self.hasArmorType = 1; + + if (!giveall) + return; + } + + if (giveall || name ~== "skullarmor" || name ~== "radsuit") + { + self.hasArmorType = 2; + + if (!giveall) + return; + } + + if (giveall || name ~== "stunpunch" || name ~== "chainsaw") + { + self.stunPunch = TRUE; + + if (!giveall) + return; + } + + if (giveall || name ~== "keys") + { + for (int i = 0; i < AllActorClasses.Size(); ++i) + { + if (AllActorClasses[i] is "Key") + { + let keyitem = GetDefaultByType (AllActorClasses[i]); + if (keyitem.special1 != 0) + { + let item = Inventory(Spawn(AllActorClasses[i])); + if (!item.CallTryPickup (self)) + { + item.Destroy (); + } + } + } + } + if (!giveall) + return; + } + + if (giveall || name ~== "weapons") + { + let savedpending = player.PendingWeapon; + for (i = 0; i < AllActorClasses.Size(); ++i) + { + let type = (class<Weapon>)(AllActorClasses[i]); + if (type != null && type != "Weapon") + { + // Don't give replaced weapons unless the replacement was done by Dehacked. + let rep = GetReplacement(type); + if (rep == type || rep is "DehackedPickup") + { + // Give the weapon only if it is set in a weapon slot. + if (player.weapons.LocateWeapon(type)) + { + readonly<Weapon> def = GetDefaultByType (type); + if (giveall == ALL_YESYES || !def.bCheatNotWeapon) + { + GiveInventory(type, 1, true); + } + } + } + } + } + player.PendingWeapon = savedpending; + + if (!giveall) + return; + } + } + + if (giveall) + return; + + type = name; + if (type == NULL) + { + if (PlayerNumber() == consoleplayer) + A_Log(String.Format("Unknown item \"%s\"\n", name)); + } + else + { + GiveInventory(type, amount, true); + } + return; + +} +\ No newline at end of file diff --git a/gamedata/zactors/damage.zsc b/gamedata/zactors/damage.zsc @@ -0,0 +1,263 @@ +extend class DevilbunnyPlayer +{ + // 0 = UNARMORED + // 1 = BRIGANDINE (backpack replacement, 50% damage reduction) + // 2 = MARISKULL (radsuit replacement) + // wish zscript supported enums + int hasArmorType; + + //the target that the player's summons will attack. Decided by + //1. last monster that damaged the player + //2. closest monster (to the player) targeting the player + actor summonTarget; + int targetRange; + int targetPriority; + + void PissOffSummons(Actor target, int priority) + { + if (priority > targetPriority) + { + summonTarget = target; + targetPriority = priority + 40; + } + } + + void HandleSTarget() + { + //reset this every frame so the + //eventhandler can figure out which + //alerted monster is closest to the player + targetRange = 4000; + + //target's priority diminishes over time + //so summons will switch targets + if (targetPriority > 0) + { + targetPriority -= 1; + } + else + { + //forget about targets that don't have LOS with the player + //(eventually) + if (!CheckSight(summonTarget)) + { + summonTarget = null; + return; + } + } + + //if no summonTarget, set priority to 0 so that'll always + //change if another valid target is found + if(!summonTarget) + { + targetPriority = 0; + return; + } + + //check for things that are targeted + //by summons but shouldn't be + if ( + /*dead monsters*/ + summonTarget.InStateSequence( + summonTarget.CurState, + summonTarget.ResolveState("Death")) + || summonTarget.InStateSequence( + summonTarget.CurState, + summonTarget.ResolveState("XDeath")) + /*the summoner*/ + || (summonTarget == self) + /*Another summon (or itself)*/ + || (summonTarget is "SummonBase") + ) + { + summonTarget = null; + targetPriority = 0; + } + } + + override int DamageMobj(Actor inflictor, Actor source, int damage, Name mod, int flags, double angle) + { + if (flags & DMG_FORCED) //kill instantly if A_Die() is called + { + damage = 1; + return Super.DamageMobj(inflictor, source, damage, mod, flags, angle); + } + //this mod doesn't use doom-style armor. Just in case the player ends up with it, somehow... + flags = flags | DMG_NO_ARMOR; + + int sreduce; //amount to reduce the damage due to spirit + + sreduce = damage / 3; + + if (!(flags & DMG_NO_FACTOR)) + { + if (mod == "PlayerDamage") + { + damage = 0; + sreduce = 0; + } + if (self.hasArmorType == 1) //wearing half damage armor + { + damage = damage / 2; + if (mod == "Melee") + { + damage = 0; + sreduce = 0; + } + } + else if (self.hasArmorType == 2) //wearing radsuit replacement + { + if (mod == "Drowning" || mod == "Slime" || mod == "Poison" || mod == "Ice" ) + { + damage = 0; + } + + if (mod == "Fire") + { + damage /= 2; + } + + sreduce = 0; + } + } + + vector3 offs; + offs.z = 30; + if (damage >= 90) + { + spawn("BigFeatherBurst", pos + offs, NO_REPLACE); + } + else if (damage >= 40) + { + spawn("FeatherBurst", pos + offs, NO_REPLACE); + } + else if (damage >= 5) + { + spawn("MaybeFeather", pos + offs, NO_REPLACE); + } + + if (damage && (self.hitpoints > 0)) + { + if (self.hitpoints - damage <= 0) + { + A_StartSound("bun/dying", CHAN_BODY); + } + else + { + A_StartSound("bun/ouch", CHAN_BODY); + } + } + + if (sreduce > self.spirit) + { + sreduce -= self.spirit; + self.spirit = 0; + } + + damage -= sreduce; + self.LoseSpirit(sreduce); + + self.LoseHealth(damage); + damage = 0; + + if (source && mod != "PlayerDamage") + { + self.PissOffSummons(source, 300); + } + + return Super.DamageMobj(inflictor, source, damage, mod, flags, angle); + } + + void updateParryShield() + { + if (parryShield) + { + parryShield.SetOrigin(Vec3Angle(32, angle, 32), false); + + if (player.readyweapon) + { + let curweapon = DevilbunnyWeapon(player.readyweapon); + + if (curweapon.parries == TRUE) + { + parryShield.bShootable = true; + } + else + { + parryShield.bShootable = false; + } + + let spain = parryShield.ResolveState("Pain"); + let scur = parryShield.CurState; + let parrystate = curweapon.FindState("Parry"); + + + if(spain && scur && parrystate) + { + if (parryShield.InStateSequence(scur, spain)) + { + if (curweapon.parryAnimReady) + { + player.setpsprite(PSP_WEAPON,parrystate); + } + } + } + } + } + else + { + // A_Log("Created New ParryShield"); + self.parryShield = spawn("ParryAct", pos); + } + } + + void GainSpirit(int amount) + { + spirit += amount; + targspirit += amount; + if (targspirit > maxspirit) + { + targspirit = maxspirit; + spirit = maxspirit; + } + } + + bool SpendSpirit(int amount) + { + if (hasArmorType == 2) { amount /= 2; } + if (spirit >= amount) + { + LoseSpirit(amount); //actually sets targspirit + spirit -= amount; + return true; + } + return false; + } + + void LoseSpirit(int amount) + { + targspirit -= amount; + if (targspirit < 0) + { + targspirit = 0; + } + } + + void GainHealth(int amount) + { + hitpoints += amount; + if (hitpoints > maxhits) + { + hitpoints = maxhits; + } + } + + void LoseHealth(int amount) + { + hitpoints -= amount; + if (hitpoints < 0) + { + hitpoints = 0; + } + } +} diff --git a/gamedata/zactors/effects.zsc b/gamedata/zactors/effects.zsc @@ -0,0 +1,636 @@ +class EffectBase : Actor +{ + default + { + +MOVEWITHSECTOR +// +FLOORCLIP + } + + bool mirrored; + + override void PostBeginPlay() + { + self.mirrored = false; + super.PostBeginPlay(); + } + + void flipSprite() + { + if (mirrored) + { + A_SetScale(1, 1); + mirrored = FALSE; + } + else + { + A_SetScale(-1, 1); + mirrored = TRUE; + } + } +} + +//these actors can get picked up by dust devils. Don't call orbitCenter until orbitAngle, orbitDistance, and orbitHeight are set. +class WhirlDebris : EffectBase +{ + + Default + { +// Projectile; + Species "debris"; + +THRUSPECIES + } + + double orbitAngle; + double orbitDistance; + double orbitHeight; + actor orbitTarget; + + + override bool CanCollideWith(Actor other, bool passive) + { + if (orbitTarget) + { + return false; + } + + //TODO: might move these for performance sake + if (other.GetClassName() == "DustDevil") + { + orbitTarget = other; + orbitDistance = Distance2D(orbitTarget); + orbitHeight = pos.z - orbitTarget.pos.z; + orbitAngle = orbitTarget.AngleTo(self, false); + + + if (ResolveState("Orbit")) + { + SetStateLabel("Orbit"); + } + } + + return false; + } + + void orbitCenter(bool interp) + { + if (orbitTarget) + { + Vector3 newpos; + newpos = orbitTarget.Vec3Angle(orbitDistance, orbitAngle, orbitHeight, FALSE); + SetOrigin(newpos, interp); + + if (orbitDistance < 10) + { + orbitDistance += 1; + } + + double ospeed; + ospeed = (1 / orbitDistance) * 500; + + orbitAngle += ospeed; + } + } +} + +class FeatherFlutter : WhirlDebris +{ + Default + { + Radius 32; + Height 2; + -NOGRAVITY + +SOLID + +MOVEWITHSECTOR +// +CLIENTSIDEONLY + Gravity 0.005; + } + + void featSOrbit(bool flyup = true) //special feather orbit quarks + { + if(flyup) + { + if (orbitHeight < 50) + { + orbitHeight += 0.6; + } + } + else + { + if (orbitHeight > 10) + { + orbitHeight -= 0.5; + } + } + + if (!orbitTarget) + { + SetStateLabel("StopOrbit"); + } + } + + States + { + Crash: + XDeath: + Death: + FEAT B 1 + { + bThruActors = false; + } + FEAT B -1; + Stop; + Spawn: + FEAT A 1 NoDelay + { + if (random(0, 1)) + { + flipSprite(); + } + } + Flutter: + FEAT ABC 12 + { + Vel.X = 0; + Vel.Y = 0; + if (pos.z <= floorz) + { + SetStateLabel("Death"); + } + if (orbitTarget) + { + SetStateLabel("Orbit"); + } + } + TNT1 A 0 + { + flipSprite(); + } + loop; + Orbit: + FEAT G 1 + { + bNoGravity = true; + if (!orbitTarget) + { + SetStateLabel("StopOrbit"); + } + } + OrbitLoop: + TNT1 A 0 + { + if (orbitDistance > 40) + { + int denom = 14; + if (orbitDistance > 55) + { + int denom = 2; + } + if (!random(0, denom)) + { + SetStateLabel("StopOrbit"); + orbitTarget = null; + bThruActors = true; + } + } + + + if (random(0, 1)) + { + flipSprite(); + } + + int ran = random(1, 4); + if (ran == 4) + SetStateLabel("OrbitA"); + if (ran == 3) + SetStateLabel("OrbitB"); + if (ran == 2) + SetStateLabel("OrbitC"); + if (ran == 1) + SetStateLabel("OrbitD"); + } + goto Flutter; + OrbitA: + FEAT GGGGGGGG 2 + { + orbitCenter(TRUE); + featSOrbit(TRUE); + } + goto OrbitLoop; + OrbitB: + FEAT HHHHHHHH 2 + { + orbitCenter(TRUE); + featSOrbit(TRUE); + } + goto OrbitLoop; + OrbitC: + FEAT IIIIIIII 2 + { + orbitCenter(TRUE); + featSOrbit(FALSE); + } + goto OrbitLoop; + OrbitD: + FEAT JJJJJJJJ 2 + { + orbitCenter(TRUE); + featSOrbit(FALSE); + } + goto OrbitLoop; + StopOrbit: + FEAT J 15 + { + Vel.Z += .6; + Thrust(2, orbitAngle); + bNoGravity = false; + } + TNT1 A 0 + { + Vel.Z = 0; + } + goto Flutter; + } +} + +class DustPuff : WhirlDebris +{ + Default + { + Radius 3; + Height 3; + Projectile; + +THRUACTORS + +FORCEXYBILLBOARD + } + + states + { + Spawn: + TNT1 A 1 NoDelay + { + orbitAngle = random(-180, 180); + orbitDistance = random(10, 50); + orbitHeight = random(10, 50); + orbitTarget = target; + orbitCenter(FALSE); //don't interpolate setting to initial position, so you don't see the sprite zipping up into place after it spawns + } + DST1 AAAAAAAAAAAAAAAA 2 + { + if (!target) + { + A_Remove(AAPTR_DEFAULT, RMVF_EVERYTHING); + } + orbitCenter(TRUE); + orbitHeight += 0.5; +// orbitAngle = orbitAngle + 10; + } + Stop; + } + +} + +class DustDevil : Actor +{ + Default + { + Radius 100; + Height 64; + Speed 0; +// +NOBLOCKMAP +// +THRUACTORS + +SOLID + } + + //TODO: merge with other colliding dust devils + override bool CanCollideWith(Actor other, bool passive) + { + if(other.species == "debris") + { + return true; + } + return false; + } + + + action void spawnDust() + { + actor puff; + puff = spawn("DustPuff", pos, NO_REPLACE); + + if (puff) + { + puff.target = self; + } + } + + action void checkCanSpawn(int radius) + { + Vector3 cpoint; + cpoint.x = pos.x + radius; + cpoint.y = pos.y; + cpoint.z = pos.z; + if(level.IsPointInLevel(cpoint)) + { + cpoint.x = pos.x - radius; + if(level.IsPointInLevel(cpoint)) + { + cpoint.x = pos.x; + cpoint.y = pos.y + radius; + if(level.IsPointInLevel(cpoint)) + { + cpoint.y = pos.y - radius; + if(level.IsPointInLevel(cpoint)) + { + return; + } + } + } + } + + A_Remove(AAPTR_DEFAULT, RMVF_EVERYTHING); + return; + } + + states + { + Spawn: + TNT1 A 1; + TNT1 A 0 + { + CheckPosition(pos.xy); + A_StartSound("whirlwind", 50, CHANF_LOOP, 0.3); + } + TNT1 AAA 15 spawnDust(); + TNT1 A 0 + { + checkCanSpawn(200); + } + TNT1 AAAA 10 spawnDust(); + Full: + TNT1 A 0 A_StartSound("whirlwind", 50, CHANF_LOOP, 1.0); + TNT1 AAAAAAA 6 + { + spawnDust(); + CheckPosition(pos.xy); + } + TNT1 AAAAAAA 6 + { + spawnDust(); + CheckPosition(pos.xy); + } + TNT1 AAAAAAA 6 + { + spawnDust(); + CheckPosition(pos.xy); + } + TNT1 AAAAAAA 6 + { + spawnDust(); + CheckPosition(pos.xy); + } + TNT1 A 1 A_Jump(200, "Full"); + Taper: + TNT1 A 0 A_StartSound("whirlwind", 50, CHANF_LOOP, 0.3); + TNT1 AAAA 10 spawnDust(); + TNT1 AAA 15 spawnDust(); + TNT1 A 0 A_StopSound(50); + Stop; + } +} + +class ChoppedRocket : Actor +{ + default + { + Radius 11; + Height 4; + Projectile; + Speed 4; + -NOGRAVITY + -NOBLOCKMAP + +THRUACTORS + +MOVEWITHSECTOR + +FLOORCLIP + +CLIENTSIDEONLY + } + + states + { + Spawn: + MSLC BCDA 3; + loop; + Crash: + XDeath: + Death: + MSLC A -1; + stop; + } + +} + +class SHorizBlood : EffectBase +{ + default + { + Radius 4; + Height 4; + Speed 0; + +THRUACTORS + Projectile; + -NOGRAVITY + Gravity 1.0; + +FORCEXYBILLBOARD + Decal "BloodSplat"; + } + + States + { + Spawn: + ASHL C 1; + Loop; + Crash: + Death: + XDeath: + Stop; + } +} + +class FeatherBurst : Actor +{ + Default + { + Radius 1; + Height 1; + Projectile; + Speed 0; +// +CLIENTSIDEONLY; + +THRUACTORS + Damage 0; + } + + action void spawnFeather() + { + int randx; + int randy; + int randz; + randx = random(-40, 40); + randy = random(-40, 40); + randz = random(-10, 20); + A_SpawnItemEx("FeatherFlutter", 40 + randx, 0 + randy, 10 + randz, 0, 0, 0, 0, SXF_NOCHECKPOSITION); + } + + + States + { + Spawn: + TNT1 A 2; + TNT1 A 3 spawnFeather(); + TNT1 A 1 A_Jump(120, "FeatTwo"); + Goto Death; + FeatTwo: + TNT1 A 1 spawnFeather(); + TNT1 A 1 A_Jump(50, "FeatThree"); + Goto Death; + FeatThree: + TNT1 A 1 spawnFeather(); + Crash: + XDeath: //when hitting a bleeding actor + Death: + TNT1 A 1; + Stop; + } +} + +class MaybeFeather : FeatherBurst +{ + States + { + Spawn: + TNT1 A 2; + TNT1 A 3 + { + if (random(0, 3) == 3) + { + spawnFeather(); + } + } + Crash: + XDeath: //when hitting a bleeding actor + Death: + TNT1 A 1; + Stop; + } +} + +class HugeFeatherBurst: FeatherBurst //just for performance testing +{ + + action void spawnFeatherBigSpread() + { + int randx; + int randy; + int randz; + randx = random(-300, 300); + randy = random(-300, 300); + randz = random(-10, 20); + A_SpawnItemEx("FeatherFlutter", 40 + randx, 0 + randy, 10 + randz, 0, 0, 0, 0, SXF_NOCHECKPOSITION); + } + + States + { + Spawn: + TNT1 A 2; + TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 + { + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + spawnFeatherBigSpread(); + + } + Death: + TNT1 A 1; + stop; + + } +} + +class BigFeatherBurst : FeatherBurst +{ + States + { + Spawn: + TNT1 A 2; + TNT1 AAAAAAAA 1 + { + spawnFeather(); + } + TNT1 A 1 A_Jump(150, "FeatOne"); + Goto Death; + FeatOne: + TNT1 AAAAA 1 + { + spawnFeather(); + } + TNT1 A 1 A_Jump(50, "FeatTwo"); + Goto Death; + FeatTwo: + TNT1 AAAA 1 + { + spawnFeather(); + } + TNT1 A 1 A_Jump(30, "FeatThree"); + Goto Death; + FeatThree: + TNT1 AAA 1 + { + spawnFeather(); + } + Crash: + XDeath: //when hitting a bleeding actor + Death: + TNT1 A 1; + Stop; + } +} + +class ZippySpark : Actor +{ + Default + { + +NOGRAVITY + } + + + Double TurnSpeed, PitchSpeed; + + States + { + Spawn: + TNT1 A 4 NoDelay + { + Angle = frandom(0, 360); + Pitch = frandom(0, 360); + TurnSpeed = random(-30, 30) + 60 + (120 * random(-1, 0)); + PitchSpeed = random(-30, 30) + 60 + (120 * random(-1, 0)); + } + Fly: + PLSS AABBAA 2 Bright + { + Angle += TurnSpeed; + Pitch += PitchSpeed; + Vel3DFromAngle(10, Angle, Pitch); + } + Death: + TNT1 A 1; + Stop; + } + +} diff --git a/gamedata/zactors/etaynehud.zsc b/gamedata/zactors/etaynehud.zsc @@ -0,0 +1,223 @@ +class DevilbunnyHUD : BaseStatusBar +{ + HUDFont testfont; + + override void Init() + { + testfont = HUDFont.Create(smallfont); + + PlayerInfo p = players[consoleplayer]; + if (p && p.mo) + { + AttachToPlayer(p); + BeginHUD(); + BeginStatusBar(); + } + } + + override void Tick() //every 1/35s + { + super.Tick(); + } + + override void Draw(int state, double TicFrac) //every frame + { + if (state == HUD_StatusBar) + { + DrawSBar(); + } + else if (state == HUD_Fullscreen) + { + DrawFullScreenHUD(); + } + super.Draw(state, TicFrac); + } + + void DrawSBar() + { + + } + + void DrawFullScreenHud() + { + let p = PlayerPawn(players[consoleplayer].mo); + let bun = DevilbunnyPlayer(players[consoleplayer].mo); + + if (bun) + { + DrawHealthAndSpirit(); + + //mugshot + DrawImage("MSHOT", (170, 190), 0); + + //sword + if (bun.hasSword) + { + DrawImage("HUDSWD", (40, 190), 0); + } + + DrawKeyIcons(); + DrawWeaponIcons(); + } + } + + void DrawHealthAndSpirit() + { + int hpxpos, spirxpos, ypos; + + hpxpos = 10; + spirxpos = 70; + ypos = 190; + + let bun = DevilbunnyPlayer(players[consoleplayer].mo); + + if(bun.hitpoints > 0) + { + DrawImage("HCONT", (hpxpos, ypos), 0); + } + else + { + DrawImage("HCDEATH", (hpxpos, ypos), 0); + } + DrawBar("HLTHFUL", "HMPTY", bun.hitpoints, bun.maxhits, (hpxpos,ypos), 0, 3, 0); + + DrawImage("SCONT", (spirxpos, ypos), 0); + DrawBar("SPIRLOS", "HMPTY", bun.spirit, bun.maxspirit, (spirxpos, ypos), 0, 3, 0); + DrawBar("SPIRFUL", "HMPTY", bun.targspirit, bun.maxspirit, (spirxpos, ypos), 0, 3, 0); + } + + void DrawKeyIcons() + { + if(CheckInventory("BlueCard") || CheckInventory("BlueSkull")) + { + DrawImage("KEYBLU", (100, 190), 0); + } + if(CheckInventory("YellowCard") || CheckInventory("YellowSkull")) + { + DrawImage("KEYYEL", (110, 190), 0); + } + if(CheckInventory("RedCard") || CheckInventory("RedSkull")) + { + DrawImage("KEYRED", (120, 190), 0); + } + + } + + void DrawWeaponIcons() + { + let bun = DevilbunnyPlayer(players[consoleplayer].mo); + + int S1xpos, S2xpos, S3xpos, S4xpos, S5xpos, S6xpos; + int ypos; + + s1xpos = 220; + s2xpos = 250; + s3xpos = 280; + s4xpos = 310; + s5xpos = 340; + s6xpos = 370; + + ypos = 190; + + if (bun.player.ReadyWeapon == Weapon(bun.FindInventory("CorpsACorps"))) + { + DrawImage("SLOT1ICO", (s1xpos, ypos), 0); + } + else + { + DrawImage("S1INACT", (s1xpos, ypos), 0); + } + + if (bun.player.ReadyWeapon == Weapon(bun.FindInventory("Pflug"))) + { + DrawImage("SLOT2ICO", (s2xpos, ypos), 0); + } + else + { + if(bun.hasSword) + { + DrawImage("S2INACT", (s2xpos, ypos), 0); + } + else + { + DrawImage("S2UNA", (s2xpos, ypos), 0); + } + } + + if(CheckInventory("Fleche")) + { + if (bun.player.ReadyWeapon == Weapon(bun.FindInventory("Fleche"))) + { + DrawImage("SLOT3ICO", (s3xpos, ypos), 0); + } + else + { + if (bun.hasSword) + { + DrawImage("S3INACT", (s3xpos, ypos), 0); + } + else + { + DrawImage("S3UNA", (s3xpos, ypos), 0); + } + } + } + + if(CheckInventory("ThrowTech")) + { + if (bun.player.ReadyWeapon == Weapon(bun.FindInventory("ThrowTech"))) + { + DrawImage("SLOT4ICO", (s4xpos, ypos), 0); + } + else + { + if (bun.hasSword) + { + DrawImage("S4INACT", (s4xpos, ypos), 0); + } + else + { + DrawImage("S4UNA", (s4xpos, ypos), 0); + } + } + } + + if(CheckInventory("Zornhau")) + { + if (bun.player.ReadyWeapon == Weapon(bun.FindInventory("Zornhau"))) + { + DrawImage("SLOT5ICO", (s5xpos, ypos), 0); + } + else + { + if (bun.hasSword) + { + DrawImage("S5INACT", (s5xpos, ypos), 0); + } + else + { + DrawImage("S5UNA", (s5xpos, ypos), 0); + } + } + } + + if(CheckInventory("Passe")) + { + if (bun.player.ReadyWeapon == Weapon(bun.FindInventory("Passe"))) + { + DrawImage("SLOT6ICO", (s6xpos, ypos), 0); + } + else + { + if (bun.hasSword) + { + DrawImage("S6INACT", (s6xpos, ypos), 0); + } + else + { + DrawImage("S6UNA", (s6xpos, ypos), 0); + } + } + } + } +} +\ No newline at end of file diff --git a/gamedata/zactors/eventhandler.zsc b/gamedata/zactors/eventhandler.zsc @@ -0,0 +1,183 @@ +class ETAYNEMOD_EventHandler : EventHandler +{ + + override void WorldTick() + { + } + + override void WorldLoaded(WorldEvent e) + { + let p = players[consoleplayer].mo; + let bun = DevilbunnyPlayer(p); + + bun.bThruActors = false; //otherwise you'll be noncorporeal after you fleche into a level exit + + if (bun.hitpoints < 20) + bun.hitpoints = 20; + + bun.targspirit = bun.spirit; + } + + override bool InputProcess(InputEvent e) + { + if (e.Type == InputEvent.Type_KeyDown) + { + EventHandler.SendNetworkEvent("ETAYNEMOD_KeyDown", e.KeyScan); + } + else if (e.Type == InputEvent.Type_KeyUp) + { + EventHandler.SendNetworkEvent("ETAYNEMOD_KeyUp", e.KeyScan); + } + return false; + } + + override void NetworkProcess (ConsoleEvent e) + { + if (e.Player < 0 || !(players[e.Player].mo)) + { + return; + } + + let p = DevilbunnyPlayer(players[e.Player].mo); + if (p) + { + + + int key = Bindings.GetKeysForCommand("ETAYNEMOD_DonArmor"); + if (e.Name ~== "ETAYNEMOD_KeyDown") + { + if (key == e.args[0]) + p.inDonArmor = true; + } + else if (e.Name ~== "ETAYNEMOD_KeyUp") + { + if (key == e.args[0]) + p.inDonArmor = false; + } + else if (e.Name ~== "ETAYNEMOD_RemArmorEvent") + { + p.TakeOffArmor(); + } + + } + } + + override void WorldThingDied(WorldEvent e) + { + if (!e.thing) + return; + + if (e.thing.bIsMonster) + { + let a = EtMonsterHandler(e.thing.FindInventory("EtMonsterHandler", true)); + if (a) + { + a.isDead = true; + } + } + } + + override void WorldThingSpawned(WorldEvent e) + { + if(!e.thing) + return; + + bool monster = e.Thing.bIsMonster; + + if (e.Thing is "SummonBase") + return; + + if(monster && !e.Thing.CountInv("EtMonsterHandler")) + { + e.Thing.A_GiveInventory("EtMonsterHandler"); + } + + } + + override void WorldThingRevived(WorldEvent e) + { + if (e.Thing) + { + if(e.Thing.GetClassName() == "DevilbunnyPlayer") + { + let p = DevilbunnyPlayer(e.Thing.player.mo); + p.HitPoints = 100; + return; + } + + if(e.Thing.bIsMonster) + { + let a = EtMonsterHandler(e.thing.FindInventory("EtMonsterHandler", true)); + if (a) + { + a.isDead = false; + } + } + } + } +} + +Class EtMonsterHandler : Inventory +{ + bool superTicked; + bool isDead; + + default + { + Inventory.MaxAmount 1; + +INVENTORY.AUTOACTIVATE + +INVENTORY.UNDROPPABLE + +INVENTORY.UNTOSSABLE + } + + override void Tick() + { + if (!superTicked) + { + Super.Tick(); + superTicked = true; + } + + if (!owner) + return; + + if (isDead) + return; + + if (owner.target) + { + if (!owner.CheckSight(owner.target)) + return; + + + if (owner.target.GetClassName() == "DevilbunnyPlayer") + { + let t = DevilbunnyPlayer(owner.target); + + //prioritize archviles that are flaming all over you + if (owner.tracer) + { + if (owner.tracer.GetClassName() == "ArchvileFire") + { + t.PissOffSummons(owner, 150); + } + } + + if (t.targetRange > owner.Distance2D(t)) + { + t.PissOffSummons(owner, 60); + return; + } + } + if (owner.target is "SummonBase") + { + if (owner.target.master.GetClassName() == "DevilbunnyPlayer") + { + let m = DevilbunnyPlayer(owner.target.master); + m.PissOffSummons(owner, 5); + return; + } + } + } + } +} diff --git a/gamedata/zactors/movement.zsc b/gamedata/zactors/movement.zsc @@ -0,0 +1,187 @@ +//TODO: Delay between flying and gliding? +extend class DevilbunnyPlayer +{ + double flightYaw; //for flight tank controls + double flightRoll; + + void PlayGliding() + { + if ((glideState != null) && !InStateSequence(CurState, glideState)) + { + SetState(glideState); + } + } + + void PlayFlying() + { + if ((flyState != null) && !InStateSequence(CurState, flyState)) + { + SetState(flyState); + } + } + + void PlayFurl() + { + if ((furlState != null) && !InStateSequence(CurState, furlState)) + { + SetState(furlState); + } + } + + void PlayDash() + { + if ((dashState != null) && !InStateSequence(CurState, dashState)) + { + SetState(dashState); + } + } + + + override void CheckJump() + { + return; + } + + override void CheckCrouch(bool totallyfrozen) + { + return; + } + + //handle movement when not flying or gliding + void walkMove(double movefactor) + { + UserCmd cmd = player.cmd; + double forwardmove, sidemove; + if (cmd.forwardmove | cmd.sidemove) + { + double fm, sm; + + + + fm = cmd.forwardmove; + sm = cmd.sidemove; + [fm, sm] = TweakSpeeds (fm, sm); + fm *= Speed / 256; + sm *= Speed / 256; + + + forwardmove = fm * movefactor * (35 / TICRATE); + sidemove = sm * movefactor * (35 / TICRATE); + + if (forwardmove) + { + ForwardThrust(forwardmove, Angle); + } + if (sidemove) + { + let a = Angle - 90; + Thrust(sidemove, a); + } + + if (!(player.cheats & CF_PREDICTING) && (forwardmove != 0 || sidemove != 0)) + { + PlayRunning (); + } + + if (player.cheats & CF_REVERTPLEASE) + { + player.cheats &= ~CF_REVERTPLEASE; + player.camera = player.mo; + } + } + } + + double getsign(double val) + { + double vout; + if (val) + { + vout = val / abs(val); + return vout; + } + return 0; + } + + void FlyMove(double multithrust, double movefactor) + { + double fthrust; + double fakedrag; //Should make an actual drag vector + double velAngle; + + fthrust = (multithrust * 100) * (Speed / 256) * movefactor * (35 / TICRATE); + velAngle = atan2(Vel.Y, Vel.X); + fakedrag = DeltaAngle(velAngle, Angle) / 180; + fakedrag = 200 * fakedrag * movefactor * (35 / TICRATE); + + vector3 accel; + + accel.x = fthrust * cos(Angle); + accel.y = fthrust * sin(Angle); + accel.z = fthrust * 7; + + accel.x += (fakedrag * cos(velAngle + 90)); + accel.y += (fakedrag * sin(velAngle + 90)); + + Vel += accel; + } + + override void MovePlayer() + { + let player = self.player; + UserCmd cmd = player.cmd; + + //A_Log(Pos.X .. ", " .. Pos.Y .. " / " .. Angle); + //A_Log("" .. Pitch); + //A_Log("" .. Pos.Z); + + // [RH] 180-degree turn overrides all other yaws + if (player.turnticks) + { + player.turnticks--; + Angle += (180. / TURN180_TICKS); + } + else + { + Angle += cmd.yaw * (360./65536.); + } + + player.onground = (pos.z <= floorz) || bOnMobj || bMBFBouncer || (player.cheats & CF_NOCLIP2); + + double friction, movefactor; + [friction, movefactor] = GetFriction(); + + //flying movement. Need to account for being underwater. + if ((cmd.buttons & BT_JUMP) && (waterlevel < 2)) + { + PlayFlying(); + flyMove(24, movefactor); + return; + } + + //running and walking and such things. Don't glide off small ledges. + if(player.onground || waterlevel >= 2 || pos.z <= floorz + 20) + { + A_SetRoll(0); + flightYaw = Angle; + flightRoll = 0; + if ((waterlevel >= 2) && (cmd.buttons & BT_JUMP)) + { + Vel.Z = 4 * Speed; + } + + A_StopSound(CHAN_WINGS); + walkMove(movefactor); + return; + } + + if(cmd.buttons & BT_CROUCH) + { + PlayFurl(); + return; + } + + //and finally, gliding + PlayGliding(); + flyMove(21, movefactor); + } +} diff --git a/gamedata/zactors/player.zsc b/gamedata/zactors/player.zsc @@ -0,0 +1,181 @@ +const CHAN_WINGS = 1215; //custom sound channel for the sounds your wings make. Arbitrary number. + +//TODO: Make dashes uninterruptible +class DevilbunnyPlayer : PlayerPawn +{ + //custom input stuff + bool inDonArmor; + + actor parryShield; + actor thrownSword; //keep track of our sword projectile so we can make it disappear when we recall it + + + state flyState; + state glideState; + state furlState; + state dashState; + + bool hasSword; //don't throw your sword, dummy + bool stunPunch; //if you've picked up the chainsaw replacement + + //it's a lot easier to just bypass the inventory system for player resources + int spirit, maxspirit, targspirit; + Property StartSpirit : spirit; + Property MaxSpirit : maxspirit; + int hitpoints, maxhits; + Property HitPoints : hitpoints; + Property MaxHits : maxhits; + + Default + { + Gravity 2.0; + Speed 1; + Health 1; + Radius 16; + Height 56; + Mass 150; + Painchance 255; + Player.DisplayName "Devilbunny"; + Player.StartItem "Pflug"; + Player.StartItem "CorpsACorps"; + Player.WeaponSlot 1, "CorpsACorps"; + Player.WeaponSlot 2, "Pflug"; + Player.WeaponSlot 3, "Fleche"; + Player.WeaponSlot 4, "ThrowTech"; + Player.WeaponSlot 5, "Zornhau"; + Player.WeaponSlot 6, "Passe"; + Player.SoundClass "devilbunny"; + Species "Player"; + +THRUSPECIES + + //we don't actually use zdoom's health or armor values, though they do function in mostly the same way + DevilbunnyPlayer.StartSpirit 100; + DevilbunnyPlayer.MaxSpirit 400; + + DevilbunnyPlayer.HitPoints 100; + DevilbunnyPlayer.MaxHits 100; + } + + override void PostBeginPlay() + { + self.inDonArmor = FALSE; + + self.hasSword = 1; + self.stunPunch = 0; + self.hasArmorType = 0; + self.flyState = self.ResolveState("Fly"); + self.glideState = self.ResolveState("Glide"); + self.furlState = self.ResolveState("Furl"); + self.dashState = self.ResolveState("Dash"); + + self.parryShield = spawn("ParryAct", pos); + self.summonTarget = null; + self.targetRange = 4000; + self.targetPriority = 0; + + //movement vars + self.flightRoll = 0; + self.flightYaw = 0; + Super.PostBeginPlay(); + } + //Don't want the FOV resetting until after we are done dashing + override void CheckFOV() + { + if (InStateSequence(CurState, dashState)) + { + return; + } + Super.CheckFOV(); + } + + + override void PlayerThink() + { + Super.PlayerThink(); + + + if (hitpoints <= 0) + { + targspirit = 0; + if (spirit <= 0) + { + A_Die(); + } + } + + HandleSTarget(); + + if (spirit > targspirit) + { + spirit -= 1; + } + + updateParryShield(); + } + + + + void TakeOffArmor() + { + if (!player.onground) { return; } + + if (hasArmorType == 1) + { + spawn("Brigandine", pos, NO_REPLACE); + } + else if (hasArmorType == 2) + { + spawn("MariSkull", pos, NO_REPLACE); + } + + A_StartSound("swordland", CHAN_BODY); + hasArmorType = 0; //unarmored + + } + + States + { + Spawn: + PLAY A 1 A_StopSound(CHAN_WINGS); + loop; + See: + PLAY ABCD 4; + loop; + Fly: + TNT1 A 0 A_StartSound("bun/wingflap", CHAN_WINGS, CHANF_DEFAULT, 1.0, ATTN_IDLE, 1.0); + PLAY ABCD 6; + goto Spawn; + Glide: + PLAY A 15; + TNT1 A 0 A_StartSound("bun/glide", CHAN_WINGS, CHANF_LOOP); + PLAY A 30; + goto Glide + 2; + Furl: + TNT1 A 0 A_StartSound("bun/wingfurl", CHAN_WINGS); + PLAY B 6; + goto Furl + 1; + Dash: + TNT1 A 0 A_StopSound(CHAN_WINGS); + PLAY EEEEEEEEEEEEEEEEEEEE 1 + { + if (vel.Length() <= 10) + { + SetStateLabel("Spawn"); + } + } + goto Spawn; + Pain: + TNT1 A 0; + TNT1 A 0; + PLAY G 4 A_Pain; + Goto Spawn; + Death: +// PLAY H 0 A_SpawnProjectile("BigFeatherBurst", 32, 20, 180, CMF_AIMDIRECTION); + PLAY H 10; + PLAY I 10 A_StartSound("bun/death", CHAN_BODY, CHANF_DEFAULT); + PLAY J 10 A_NoBlocking; + PLAY KLM 10; + PLAY N -1; + Stop; + } +} diff --git a/gamedata/zactors/powerups.zsc b/gamedata/zactors/powerups.zsc @@ -0,0 +1,365 @@ +class ParryAct : Actor +{ + bool justHit; + + Default + { + Species "Player"; + Speed 0; + PainChance 255; + Radius 32; + Height 32; + Mass 0x7FFFFFFF; + PainChance "PlayerDamage", 0; + +NOTARGET + +NOINFIGHTING + -SOLID + +NOGRAVITY + +THRUSPECIES + +SHOOTABLE + +NOBLOOD + +DONTSPLASH + +DONTRIP + +NOCLIP + +NODAMAGE +// +REFLECTIVE +// +DEFLECT + +ALLOWTHRUFLAGS + +NOTELEPORT + } + +/* alas! It almost works. Might be possible with EventHandlers + override int DamageMobj(Actor inflictor, Actor source, int damage, Name mod, int flags, double angle) + { + if (inflictor) + { + if(inflictor.GetClassName() == "Rocket") + { + Actor x, y; + x = Spawn("ChoppedRocket", inflictor.pos, NO_REPLACE); + y = Spawn("ChoppedRocket", inflictor.pos, NO_REPLACE); + x.thrust(20, inflictor.angle); + y.thrust(20, inflictor.angle); + inflictor.A_Remove(AAPTR_DEFAULT, RMVF_MISSILES); + flags = DMG_THRUSTLESS; + } + } + + return Super.DamageMobj(inflictor, source, damage, mod, flags, angle); + } +*/ + + States + { + Spawn: + TNT1 A 1 + { + justHit = FALSE; + } + loop; + Pain: + TNT1 A 0 + { + justHit = TRUE; + } + TNT1 A 6; + Goto Spawn; + Death: + Goto Spawn; + } +} + +class DBPickupBase : CustomInventory +{ + Default + { + +COUNTITEM + } + //only call this in the Pickup state, otherwise it will do nothing + action void GiveSpirit(int amount) + { + let owner1 = DevilbunnyPlayer(self); + owner1.GainSpirit(amount); + } + + action void GiveHealth(int amount) + { + let owner1 = DevilbunnyPlayer(self); + owner1.GainHealth(amount); + } +} + +class StunPickup : DBPickupBase replaces Chainsaw +{ + Default + { + Inventory.Pickupmessage "Your unarmed strikes become more forceful!"; + } + + States + { + Spawn: + SAWP A -1; + stop; + Pickup: + TNT1 A 0 + { + let owner1 = DevilbunnyPlayer(self); + owner1.stunPunch = 1; + A_SelectWeapon("CorpsACorps"); + GiveSpirit(10); + } + stop; + } + +} + +class HandofGlory : DBPickupBase replaces Soulsphere +{ + default + { + Inventory.PickupMessage "Holy artifact!"; + } + + states + { + Spawn: + HOGL A -1; + stop; + Pickup: + TNT1 A 0 + { + GiveHealth(50); + GiveSpirit(50); + } + } + +} + +class Reliquary : DBPickupBase replaces Megasphere +{ + default + { + Inventory.PickupMessage "Holy artifact!"; + } + + states + { + Spawn: + INSK A -1; + stop; + Pickup: + TNT1 A 0 + { + GiveHealth(100); + GiveSpirit(100); + } + } +} + +class DivinePower : InvulnerabilitySphere replaces InvulnerabilitySphere +{ + default + { + Inventory.PickupMessage "Divine might!"; + } + + states + { + Spawn: + DORB ABC 6 bright; + loop; + } +} + +class CandlePower : Infrared replaces Infrared +{ + default + { + Inventory.PickupMessage "Divine might!"; + } + + states + { + Spawn: + CNVG AB 6; + loop; + } +} + +//til I can figure out a replacement +class NewMedikit : DBPickupBase replaces Medikit +{ + states + { + Spawn: + MEDI A -1; + stop; + Pickup: + TNT1 A 0 + { + GiveHealth(25); + } + } +} + +class NewZerk : DBPickupBase replaces Berserk +{ + states + { + Spawn: + PSTR A -1; + stop; + Pickup: + TNT1 A 0 + { + GiveHealth(100); + } + } +} +class Gladiolus : DBPickupBase replaces ArmorBonus +{ + int spiritbonus; + Property SpiritBonus : spiritbonus; + default + { + Inventory.PickupMessage "Gladiolus"; + Inventory.Icon "FLO1A0"; + Gladiolus.SpiritBonus 1; + } + States + { + Spawn: + TNT1 A 1; + FLO1 A 1 + { + int ran = random(1, 6); + if (ran == 1) { SetStateLabel("Flow1"); } + if (ran == 2) { SetStateLabel("Flow2"); } + if (ran == 3) { SetStateLabel("Flow3"); } + if (ran == 4) { SetStateLabel("Flow4"); } + if (ran == 5) { SetStateLabel("Flow5"); } + if (ran == 6) { SetStateLabel("Flow6"); } + } + Flow1: + FLO1 A 1; + Loop; + Flow2: + FLO1 B 1; + Loop; + Flow3: + FLO1 C 1; + Loop; + Flow4: + FLO1 D 1; + Loop; + Flow5: + FLO1 E 1; + Loop; + Flow6: + FLO1 F 1; + Loop; + + Pickup: + TNT1 A 0 + { + GiveSpirit(invoker.spiritbonus); + } + stop; + } +} + +class FLreplaceShells : Gladiolus replaces Shell {} +class FLreplaceClip : Gladiolus replaces Clip {} +class FLreplaceCell : Gladiolus replaces Cell {} +class FLreplaceRocket : Gladiolus replaces RocketAmmo {} +class FLreplaceHBonus : Gladiolus replaces HealthBonus {} + +class Flowers : Gladiolus +{ + default + { + Gladiolus.SpiritBonus 10; + } + States + { + Spawn: + FLO2 A 1; + Loop; + } +} + +class FLreplaceShellBox : Flowers replaces ShellBox {} +class FLreplaceClipBox : Flowers replaces ClipBox {} +class FLreplaceCellPack : Flowers replaces CellPack {} +class FLreplaceRocketBox : Flowers replaces RocketBox {} +class FLreplaceStimpack : Flowers replaces Stimpack {} + +class MoreFlowers : Gladiolus replaces GreenArmor +{ + default + { + Gladiolus.SpiritBonus 50; + } + States + { + Spawn: + FLO3 A 1; + Loop; + } +} + +class BigFlowers : Gladiolus replaces BlueArmor +{ + default + { + Gladiolus.SpiritBonus 100; + } + States + { + Spawn: + FLO3 A 1; + Loop; + } + +} + +class HellContract : DBPickupBase replaces BlurSphere +{ + default + { + Inventory.Pickupmessage "You found a contract."; + } + + States + { + Spawn: + SMON ABC 35; + Loop; + Pickup: + TNT1 A 100; + TNT1 A 1 + { + GiveSpirit(100); + vector3 offset = (40,40,0); + let x = Spawn("ChuckleFuckOne", pos + offset); + if (x) + { + x.master = self; + } + + let y = Spawn("ChuckleFuckTwo", pos); + if (y) + { + y.master = self; + } + + let z = Spawn("ChuckleFuckThree", pos - offset); + if (z) + { + z.master = self; + } + } + stop; + } +} diff --git a/gamedata/zactors/slot1-corpsacorps.zsc b/gamedata/zactors/slot1-corpsacorps.zsc @@ -0,0 +1,193 @@ +//body to body in French. First weapon I wrote, need to clean this up. +class CorpsACorps : DevilbunnyWeapon +{ + + Default + { + Weapon.SlotNumber 1; + Weapon.Kickback 1500; + +WEAPON.NOALERT + DevilbunnyWeapon.CanParry FALSE; + } + + action void BunPunch(int damagemin, int damagemax, int range, bool playclawsound = 0) + { + FTranslatedLineTarget t; + if (!playclawsound) + { + LineAttack(Angle, range, Pitch, random(damagemin, damagemax), "PlayerDamage", "HaraPunchPuff", LAF_NORANDOMPUFFZ, t, 0, 0, 0); + } + else + { + LineAttack(Angle, range, Pitch, random(damagemin, damagemax), "PlayerDamage", "HaraClawPuff", LAF_NORANDOMPUFFZ, t, 0, 0, 0); + } + + + if (t.linetarget) + { + if (!playclawsound) + { + A_StartSound("bun/punch", CHAN_WEAPON, CHANF_DEFAULT); + } + else + { + A_StartSound("bun/scratch", CHAN_WEAPON, CHANF_DEFAULT); + } + + let owner1 = DevilbunnyPlayer(self); + Actor v = t.linetarget; + owner1.summonTarget = v; + if (owner1.stunPunch == TRUE) + { + if (v.FindState("Pain") && !v.bDORMANT && v.bSHOOTABLE) + { + t.linetarget.SetStateLabel("Pain"); + } + } + } + } + + States + { + Ready: + CLAW B 1 + { + let owner1 = DevilbunnyPlayer(self); + if(owner1.hasSword == 0) + { + A_WeaponReady(WRF_NOSWITCH); + } + else + { + A_WeaponReady(); + } + } + Loop; + Deselect: + CLAW A 1 A_Lower(999); + loop; + Select: + CLAW A 8 Offset(0, 32); + TNT1 A 0 + { + //otherwise player can still draw their sword during the Select state + let owner1 = DevilbunnyPlayer(self); + if(owner1.hasSword == 0) + { + self.player.PendingWeapon = WP_NOCHANGE; + } + } + TNT1 A 0 A_Raise(999); + loop; + Fire: + TNT1 A 1 + { + int ran = random(1, 2); + //punch if on ground, kick while in the air + if (pos.z <= (floorz + 10)) + { + if (ran == 1) { setWeaponState("PunchRight"); } + if (ran == 2) { setWeaponState("PunchLeft"); } + return; + } + if (ran == 1) { setWeaponState("ClawLeft"); } + if (ran == 2) { setWeaponState("ClawRight"); } + } + goto Ready; + PunchRight: + CLAW C 6; + CLAW D 10 BunPunch(50, 150, 150); + Goto Ready; + PunchLeft: + CLAW E 6; + CLAW F 10 BunPunch(50, 150, 150); + Goto Ready; + ClawLeft: + CLAW G 6; + CLAW H 10 BunPunch(70, 170, 200, 1); + Goto Ready; + ClawRight: + CLAW I 6; + CLAW J 10 BunPunch(70, 170, 200, 1); + Goto Ready; + AltFire: + TNT1 A 0 + { + let owner1 = DevilbunnyPlayer(self); + + + if (owner1.hasSword == 0) + { + if (owner1.SpendSpirit(100)) + { + if (owner1.thrownSword && owner1.thrownSword.ResolveState("Poof")) + { + owner1.thrownSword.SetStateLabel("Poof"); + } + } + else + { + setWeaponState("Ready"); + } + } + else + { + setWeaponState("Ready"); + } + } + CLAW KL 8; + CLAW M 20; + TNT1 A 0 + { + let owner1 = DevilbunnyPlayer(self); + owner1.hasSword = 1; + A_SelectWeapon("Pflug"); + } + Goto Ready; + } +} + +class HaraClawPuff: BulletPuff +{ + default + { + Species "Player"; + +ALLOWTHRUFLAGS + +THRUSPECIES + +NOEXTREMEDEATH + // +ALWAYSPUFF + -ALLOWPARTICLES + DamageType "PlayerDamage"; + AttackSound "bun/wallscratch"; + } + + states + { + Spawn: + Crash: + TNT1 A 1; + stop; + } +} + +class HaraPunchPuff : BulletPuff +{ + default + { + Species "Player"; + +ALLOWTHRUFLAGS + +THRUSPECIES + +NOEXTREMEDEATH + -ALLOWPARTICLES + DamageType "PlayerDamage"; + AttackSound "bun/punch"; + } + + states + { + Spawn: + Crash: + TNT1 A 1; + stop; + } +} diff --git a/gamedata/zactors/slot2-pflug.zsc b/gamedata/zactors/slot2-pflug.zsc @@ -0,0 +1,141 @@ +class Pflug : DevilbunnyWeapon +{ + const VOMMINDAMAGE = 100; + const VOMMAXDAMAGE = 250; + + Default + { + Weapon.SlotNumber 2; + Weapon.Kickback 200; + +WEAPON.NOALERT + DevilbunnyWeapon.CanParry TRUE; + } + + action void createSlashEffects() + { + if (random(1, 100) < 4) //only create a dust devil about 5% of swings + { + spawn("DustDevil", self.pos, NO_REPLACE); + } + A_FireProjectile("StrikeBlast", 0, 0, 0, 0, 0, 0); + } + + + + //From what I can tell, zdoom has no non-hacky way of doing away with doom's specific weapon raising and lowering mechanics. Oh well + States + { + Ready: + PHSD A 1 + { + A_WeaponReady(); + invoker.parryAnimReady = TRUE; + } + Loop; + Deselect: + TNT1 A 0 A_Lower(999); + loop; + Select: + DRAW AB 2 Offset(0, 32); + DRAW C 5 Offset(0, 32); + DRAW D 3 Offset(0, 32); + PHSD A 0 A_Raise(999); + loop; + Parry: + TNT1 A 0 + { + A_StartSound("tink", CHAN_WEAPON, CHANF_DEFAULT, 0.5, ATTN_NORM, 1); + invoker.parryAnimReady = FALSE; + } + TNT1 A 0 A_Jump(127, "ParryA"); + PARY AABBCCCCC 1 A_WeaponReady(); + goto Ready; + ParryA: + PARY DDEEFFFFF 1 A_WeaponReady(); + goto Ready; + Fire: + TNT1 A 0 + { + invoker.parryAnimReady = FALSE; + } + TNT1 A 0 A_Jump(127, "SwingRight"); + SwingLeft: + PHSD B 8; + PHSD C 1; + PHSD D 1 + { + HorizFan(150, -100, VOMMINDAMAGE, VOMMAXDAMAGE, 256, "VomSlashLeft", "ClangEffectSmall"); + createSlashEffects(); + } + PHSD E 4; + TNT1 A 7; + TNT1 A 0 A_ReFire; + Goto Ready; + SwingRight: + PHSD F 8; + PHSD G 1; + PHSD H 1 + { + HorizFan(-150, 100, VOMMINDAMAGE, VOMMAXDAMAGE, 256, "VomSlashRight", "ClangEffectSmall"); + createSlashEffects(); + } + PHSD I 4; + TNT1 A 7; + TNT1 A 0 A_ReFire; + Goto Ready; + } +} + +class VomSlashLeft : SlashEffectBase +{ + states + { + XDeath: + TNT1 A 1 + { + GrantImmune(); + Actor sblood; + sblood = spawn("SHorizBlood", pos, NO_REPLACE); + sblood.Thrust(10, angle - 90 + random(-10, 10)); + sblood.Vel.z += random(-1, 5); + } + Stop; + } +} + +class ClangEffectSmall : BulletPuff +{ + default + { + -ALLOWPARTICLES + AttackSound "grief/clang"; + +ALLOWTHRUFLAGS + +THRUACTORS + +NOEXTREMEDEATH + } + + states + { + Spawn: + Crash: + TNT1 A 1; + stop; + } +} + +class VomSlashRight : SlashEffectBase +{ + states + { + XDeath: + TNT1 A 1 + { + GrantImmune(); + Actor sblood; + sblood = spawn("SHorizBlood", pos, NO_REPLACE); + sblood.Thrust(10, angle + 90 + random(-10, 10)); + sblood.Vel.z += random(-1, 5); + } + Stop; + } +} diff --git a/gamedata/zactors/slot3-fleche.zsc b/gamedata/zactors/slot3-fleche.zsc @@ -0,0 +1,130 @@ +class Fleche : DevilbunnyWeapon +{ + int dashCharge; + + Default + { + Weapon.SlotNumber 3; + Weapon.Kickback 0; +// +WEAPON.NOALERT + +FORCERADIUSDMG + DevilbunnyWeapon.CanParry TRUE; + + } + + action void incCharge() + { + if (invoker.dashCharge < 70) + { + invoker.dashCharge = invoker.dashCharge + 1; + } + } + + action int checkCharge() + { + return invoker.dashCharge; + } + + action void clearCharge() + { + invoker.dashCharge = 0; + } + + States + { + Ready: + BLSD A 1 + { + clearCharge(); + A_WeaponReady(); + } + Loop; + Deselect: + BLSD B 8 A_Lower(500); + Loop; + Select: + BLSD DE 3 Offset(0, 32); + TNT1 A 0 A_Raise(500); + Loop; + Fire: + TNT1 A 0 A_StartSound("ting"); + Charge: + TNT1 A 0 + { + A_ReFire(); + } + TNT1 A 1 + { + let DBowner = DevilbunnyPlayer(self); + DBowner.PlayDash(); + if (checkCharge() >= 50) + { + return ResolveState("DashBig"); + } + if (checkCharge() >= 20) + { + return ResolveState("DashMid"); + } + return ResolveState("DashSmall"); + } + Hold: + TNT1 A 0 + { + incCharge(); + int x = checkCharge(); + } + BLSD B 1; + Goto Charge; + DashBig: + BLSD C 4 + { + A_ChangeVelocity(110, 0, 0, CVF_RELATIVE); + bTHRUACTORS = true; + } + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 5 + { + bTHRUACTORS = false; + } + BLSD A 5; + Goto Ready; + DashMid: + BLSD C 4 + { + A_ChangeVelocity(80, 0, 0, CVF_RELATIVE); + bTHRUACTORS = true; + } + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 5 + { + bTHRUACTORS = false; + } + BLSD A 5; + Goto Ready; + DashSmall: + BLSD C 4 + { + A_ChangeVelocity(45, 0, 0, CVF_RELATIVE); + bTHRUACTORS = true; + } + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 2 A_Explode(random(20,30), 128, 0, TRUE, 128); + BLSD C 5 + { + bTHRUACTORS = false; + } + BLSD A 5; + Goto Ready; + } +} diff --git a/gamedata/zactors/slot4-throw.zsc b/gamedata/zactors/slot4-throw.zsc @@ -0,0 +1,137 @@ +class ThrowTech : DevilbunnyWeapon +{ + Default + { + Weapon.SlotNumber 5; + +WEAPON.NOALERT + +DONTGIB + DevilbunnyWeapon.CanParry FALSE; + } + + States + { + Ready: + THSW C 1 + { + A_WeaponReady(); + } + loop; + Deselect: + TNT1 A 1 A_Lower(500); + loop; + Select: + THSW A 6 Offset(0, 32); + THSW B 2 Offset(0, 32); + TNT1 A 1 A_Raise(500); + Goto Ready; + Fire: + THSW E 2; + THSW D 12 + { + let tsword = SpawnPlayerMissile("ThrownSword", Angle); + A_StartSound("grief/toss", CHAN_WEAPON, CHANF_DEFAULT); + } + TNT1 A 0 + { + //force switch to fist + let tfist = Weapon(FindInventory("CorpsACorps")); + if (tfist != NULL) + { + self.player.PendingWeapon = tfist; + } + } + Goto Ready; + } +} + +class ThrownSword : Actor +{ + Default + { + Radius 11; + Height 8; + Speed 25; + ProjectileKickBack 15; + DamageFunction (random(4000, 8000)); + Species "Player"; + Projectile; + +THRUSPECIES +// +ROLLSPRITE +// +FORCEXYBILLBOARD + +SKYEXPLODE //don't want your sword vanishing as soon as it touches the skybox! + -NOGRAVITY + Gravity 0.3; + } + + States + { + Spawn: + TNT1 A 0 Nodelay + { + if(!target) + SetStateLabel("Crash"); + + let owner1 = DevilbunnyPlayer(target); + owner1.thrownSword = self; + Vel += owner1.Vel; + owner1.hasSword = 0; + if (owner1.Pitch < -55 ) + { + SetStateLabel("Fly2"); + } + } + Fly: + THRO A 2; + TNT1 A 0 Spawn("ZippySpark", pos); + loop; + Fly2: + SORD B 1; + loop; + Death: + Crash: + TNT1 A 0 + { + bForceXYBillboard = true; + if (pos.z > floorz) + { + A_ChangeVelocity(-15, 0, 0, CVF_RELATIVE | CVF_REPLACE); + } + else + { + vel.z = 5; + + } + + } + XDeath: //when hitting a bleeding actor + THRO A 1 + { + A_Explode(250, 32, 0, TRUE, 16); //this is so you can kill the icon of sin with a well-placed sword throw! + A_StartSound("throspin", CHAN_6); + A_StartSound("ting", CHAN_WEAPON, CHANF_DEFAULT, 1.0, ATTN_IDLE, 1.0); + } + Spin: + SPON ABCD 2 A_Explode(40, 64, 0, FALSE, 64); + TNT1 A 0 + { + if (pos.z <= floorz) + { + SetStateLabel("Land"); + } + } + loop; + Land: + SPON D 4 + { + let owner1 = DevilbunnyPlayer(target); + owner1.thrownSword = spawn("SwordPickup", pos, NO_REPLACE); + A_StartSound("swordland", CHAN_WEAPON, CHANF_DEFAULT, 0.6, ATTN_IDLE, 1.0); + A_StopSound(CHAN_6); + } + stop; + Poof: + TNT1 A 1; + stop; + } + +} diff --git a/gamedata/zactors/slot5-zornhau.zsc b/gamedata/zactors/slot5-zornhau.zsc @@ -0,0 +1,64 @@ +class Zornhau : DevilbunnyWeapon +{ + + int swordCharge; + + Default + { + Weapon.SlotNumber 4; + Weapon.Kickback 1500; +// +WEAPON.NOALERT tis loud + DevilbunnyWeapon.CanParry FALSE; + } + + States + { + Ready: + ZHSD A 1 + { + A_WeaponReady(); + } + Loop; + Deselect: + TNT1 A 0 A_Lower(500); + Loop; + Select: + ZHSD EA 4 Offset(0, 32); + TNT1 A 0 A_Raise(999); + Loop; + Fire: + TNT1 A 12; + ZHSD B 2 ; + TNT1 A 0 + { + VertFan(2000, 3000, 400); + A_FireProjectile("ZornStrikeBlast", 0, 0, 0, 0, 0, 0); + spawn("DustDevil", pos, NO_REPLACE); + } + ZHSD CD 1; + ZHSD F 3; + TNT1 A 17; + ZHSD EA 4; + Goto Ready; + } +} + +class ZornStrikeBlast : StrikeBlast +{ + States + { + Spawn: + TNT1 AAA 2 + { + A_Explode(random(50,100), 256, 0, FALSE, 256); + } + stop; + Death: + TNT1 A 1 A_StartSound("grief/clang", CHAN_AUTO, CHANF_DEFAULT, 1.0, ATTN_IDLE, 1.0); + TNT1 A 6; + stop; + Crash: + XDeath: + stop; + } +} diff --git a/gamedata/zactors/slot6-passe.zsc b/gamedata/zactors/slot6-passe.zsc @@ -0,0 +1,103 @@ +class Passe : DevilbunnyWeapon +{ + Actor teleBeam; + Actor teleTarget; + + Default + { + Weapon.SlotNumber 6; + DevilbunnyWeapon.CanParry FALSE; + } + + States + { + Ready: + PASS A 1 A_WeaponReady; + loop; + Fire: + PASS B 7; + PASS C 8 + { + A_StartSound("passecharge"); + Actor zuh; + [zuh, invoker.teleBeam] = SpawnPlayerMissile("TeleportBeam"); + } + PASS C 1 A_Refire; + Goto Tele; + Hold: + PASS C 5; + TNT1 A 0 A_Refire; + Tele: + PASS D 35 + { + if (invoker.teleBeam) + { + invoker.teleTarget = Spawn("PasseSpot", invoker.teleBeam.pos); + invoker.teleBeam.SetState(invoker.teleBeam.ResolveState("XDeath")); + } + } + PASS A 1 + { + if (invoker.teleTarget) + { + A_StartSound("passego"); + SetOrigin(invoker.teleTarget.pos, false); + } + } + Goto Ready; + Select: + PASS A 1 A_Raise(500); + Loop; + Deselect: + PASS A 1 A_Lower(500); + Loop; + } +} + +class TeleportBeam : Actor +{ + Default + { + Radius 2; + Height 2; + Speed 20; + Species "Player"; + Projectile; + +THRUSPECIES + +THRUACTORS + } + + States + { + Spawn: + BON2 B 1; + Loop; + Death: + XDeath: + Crash: + TNT1 A 1 + { +// SpawnPlayerMissile("PasseSpot"); + } +// BFE1 ABCDEF 1; + Stop; + } +} + +class PasseSpot : Actor +{ + Default + { + Radius 20; + Height 64; +// ReactionTime 60; + +SOLID + +NOGRAVITY + } + States + { + Spawn: + BFE1 B 60; + Stop; + } +} diff --git a/gamedata/zactors/summons.zsc b/gamedata/zactors/summons.zsc @@ -0,0 +1,668 @@ +//TODO: Improve pathfinding (the permanent goal) +//TODO: Summons make a blood splatter when they hit the player +//(but deal no damage), fix that +//TODO: Make summons step back if they're within +//(say) 100 units of the player +//TODO: Have ChaseTarget() get called from a function that +//runs every tick instead of in the state block, so +//summons don't move slower if they have a running +//animation with more frames MAYBE ??? +//TODO: Code other two chucklefucks +//TODO: Jump to higher sectors, maybe? +//TODO: Summons should pioritize monsters that are behind you. +//TODO: If summons can't get to a target, should try to +//stand in front of it + +class TestMark1 : Actor +{ + default + { + +THRUACTORS + +NOGRAVITY + } + + states + { + Spawn: + BON1 A 1; + loop; + Death: + TNT1 A 0; + stop; + } + +} + +class TestMark2 : TestMark1 +{ + states + { + Spawn: + BON2 A 8; + Death: + BON2 A 1; + stop; + } +} + +//for pathfinding +struct NavSect +{ + //line between current and destination sector + Line transLine; + + //pointer to destination sector + Sector s; + + //dest sector height, or ceiling z - floor z + double height; + + //step up or down + double deltaZ; + + Vector2 mid; +} + + +class SummonBase : Actor +{ + //linedef flags for pathfinding + const ML_BLOCKING = 0x00000001; + const ML_BLOCKMONSTERS = 0x00000002; + const ML_TWOSIDED = 0x00000004; + const ML_BLOCKEVERYTHING = 0x00008000; + + const PF_IMPOSSIBLE = 0; + const PF_CLOSERSECT = 1; + const PF_STRAIGHTSHOT = 2; + + Actor attackTarget; + NavSect navGoal; + bool pathPlan; + + //emotions! + int Anger, Frustration, Happiness; + + //debug +// Actor Cmarker; +// Actor Fmarker; + + + default + { + Health 400; + Speed 15; + Radius 16; + Height 56; + Mass 100; + Monster; //TODO: Pick and choose specific flags instead of using the Monster combo + -COUNTKILL + +FLOORCLIP + +THRUSPECIES + +DROPOFF + Species "Player"; + DamageFactor "PlayerDamage", 0; + } + + override void PostBeginPlay() + { + self.attackTarget = null; + self.Anger = 0; + self.Frustration = 0; + self.Happiness = 0; + + self.pathPlan = false; + + + //test + // Cmarker = spawn("TestMark1", pos); + // Fmarker = spawn("TestMark1", pos); + } + + override void Tick() + { + self.ManageEmotions(); + self.ChooseTarget(); + super.Tick(); + } + + //Choose target to attack + void ChooseTarget() + { + if (!master) + return; + + let ownerx = DevilbunnyPlayer(master); + + attackTarget = ownerx.summonTarget; + } + + + //TODO: Make this only work when actor's on the ground + void SMoveForward() + { + double move; + move = Speed / 5; + + Thrust(move, Angle); + } + + + //super advanced pathfinding go! + int PlanPath() + { + //if it's in the same sector, run straight in + if (CurSector == attackTarget.CurSector) + { + return PF_STRAIGHTSHOT; + } + + NavSect gsect; + //we're comparing the (possible) destination sector's distance from target + //to the summon's current distance from target. If it's shorter + //move to the destination sector + double targ_dist = (CurSector.centerSpot - attackTarget.Pos.xy).Length(); + + int plan = PF_IMPOSSIBLE; + + //check all sectors bordering this one's linedefs + for (int it = 0; it < CurSector.lines.Size(); ++it) + { + //coding this is so much more complicated than it should be + line l; + sector s; + double tdist; + Vector2 mid; + double h, dz; + + l = CurSector.lines[it]; + + if ( + (l.flags & ML_TWOSIDED) && + !(l.flags & (ML_BLOCKING + | ML_BLOCKEVERYTHING + | ML_BLOCKMONSTERS)) + ) + { + //either the front or the back of this linedef + //should be the sector our summon is standing in + //so ignore it + if (l.backSector == CurSector) + { + s = l.frontSector; + } + else + { + s = l.backSector; + } + + //debug + // Vector3 sp; + // sp.x = s.centerSpot.x; + // sp.y = s.centerSpot.y; + // sp.z = s.floorPlane.d; + // spawn("TestMark2", sp); + + tdist = (s.centerSpot - attackTarget.Pos.xy).Length(); + mid = s.centerSpot; + //probably gets a little janky with sloped floors + h = s.ceilingPlane.ZatPoint(mid) - s.floorPlane.ZatPoint(mid); + dz = s.floorPlane.ZatPoint(mid) - curSector.floorPlane.ZatPoint(pos.xy); + + //if ceiling is too low to run through + if (h < 64) + { + continue; + } + + //if it's elevated above the current sector + if (dz > 16) + { + continue; + } + + //if it's in an adjacent (pathable) sector, just run right in + if (s == attackTarget.CurSector) + { + return PF_STRAIGHTSHOT; + } + + //if this distance is lower than any other sector + //checked (and the current distance between + //the summon and the target) then this is the sector we + //want to go to! + + //"struct assignment not implemented yet" + //come onnnn, seriously?? + if (tdist < targ_dist) + { + plan = PF_CLOSERSECT; + //I'm so mad about this + navGoal.transLine = l; + navGoal.s = s; + navGoal.height = h; + navGoal.deltaZ = dz; + navGoal.mid = mid; + //ugh + } + } + } + + //test +// if (plan == PF_CLOSERSECT) +// { +// Vector3 gp; +// gp.x = navGoal.mid.x; +// gp.y = navGoal.mid.y; +// gp.z = navGoal.s.floorPlane.ZatPoint(gp.xy); +// Cmarker.SetOrigin(gp, true); +// gp.z = navGoal.s.ceilingPlane.ZatPoint(gp.xy); +// Fmarker.SetOrigin(gp, true); +// } + //-- + + return plan; + } + + void FacePoint(Vector2 point) + { + Vector2 offs = point - Pos.xy; + Angle = atan2(offs.y, offs.x); + } + + void ChaseTarget(StateLabel attackstate = "Melee") + { + if (!attackTarget) + return; + + if (Distance2D(attackTarget) < 130) + { + A_Face(attackTarget); + SetStateLabel(attackstate); + return; + } + + //can't run around if in the air + if (!((pos.z <= floorz) || bOnMobj)) + return; + + int plan = PlanPath(); + + //A_Log(attackTarget.GetClassName() .. " | " .. plan .. " | CSec " .. CurSector.Index() .. " | TSec " .. attackTarget.CurSector.Index()); + + //if in the same sector as the target, run straight in + if (plan == PF_STRAIGHTSHOT) + { + A_Face(attackTarget); + SMoveForward(); + return; + } + if (plan == PF_CLOSERSECT) + { + FacePoint(navGoal.mid); + SMoveForward(); + return; + } + if (plan == PF_IMPOSSIBLE) + return; //TODO: Try to get between target and player + + } + + void ManageEmotions() + { + //GetPissed(); + FindHappiness(); + FindFrustration(); + } + + virtual void FindHappiness() + { + if (master) + { + let owner1 = DevilbunnyPlayer(master); + if (Distance2D(owner1) <= 500) + { + if (owner1.hasArmorType == 0) + { + Happiness = 60; + } + else + { + Happiness = 40; + } + } + else + { + Happiness = 20; + } + } + + HealThing(Happiness); + } + + virtual void FindFrustration() + { + if (!attackTarget) + { + Frustration = 0; + return; + } + + Frustration += 1; + } +} + + +class ChuckleFuckOne : SummonBase +{ + void HammerAttack() + { + FTranslatedLineTarget t; + A_Face(attackTarget); + LineAttack(Angle, 130, Pitch, 90 + Happiness, "PlayerDamage", null, 0, t); + + if (t.linetarget) + { + Frustration -= 100; + if (Frustration < 0) + { + Frustration = 0; + } + } + + } + + states + { + Spawn: + CHK1 KL 60; + See: + CHK1 A 0 + { + if(attackTarget) + { + SetStateLabel("Run"); + } + else + { + if (!CheckIfCloser(master, 1024, false)) + { + SetStateLabel("FindMaster"); + } + if (!CheckIfCloser(master, 400)) + { + SetStateLabel("Follow"); + } + + } + } + Lookout: + CHK1 A 1 A_FaceMaster(); + Goto See; + Run: + CHK1 BBBCCCDDDEEE 2 + { + ChaseTarget("Swing"); + if (Frustration > 200) + { + SetStateLabel("FindMaster"); + Frustration = 0; + } + } + goto See; + Follow: + CHK1 BBBCCCDDDEEE 2 + { + A_FaceMaster(); + SMoveForward(); + } + goto See; + FindMaster: + CHK1 KL 8 SetOrigin(master.pos, false); + Goto See; + Teleport: + CHK1 KL 8 SetOrigin(attackTarget.pos, false); + Goto See; + Swing: + CHK1 I 6 + { + HammerAttack(); + } + CHK1 J 6; + Goto See; + Death: + CHK1 FGH 8; + CHK1 H -1; + Stop; + + } + +} + +class FuckDebris : Actor +{ + default + { + Radius 10; + Height 10; + +THRUACTORS + } + + states + { + Spawn: + RBFI ABCDABCDABCDABCDABCDABCDABCDABCD 4; + Death: + TNT1 A 2; + stop; + } +} + +class FuckArrow : Actor +{ + default + { + Radius 10; + Height 4; + Speed 40; + Damage 50; + Projectile; + DamageType "PlayerDamage"; + Species "Player"; + +ROLLSPRITE + +THRUSPECIES + } + + states + { + Spawn: + RBIN ABCD 2; + loop; + Crash: + Death: + XDeath: + TNT1 A 2 + { + A_Explode(400, 256); + for (int it = 0; it < 8; it++) + { + actor a; + a = spawn("FuckDebris", pos); + a.Vel.X = frandom(-10.0, 10.0); + a.Vel.Y = frandom(-10.0, 10.0); + a.Vel.Z = frandom(-10.0, 10.0); + } + } + stop; + } +} + +class ChuckleFuckTwo : SummonBase +{ + states + { + Spawn: + CHK2 LM 60 A_FaceMaster; + See: + CHK2 A 0 + { + if (!CheckIfCloser(master, 1024, false)) + { + SetStateLabel("FindMaster"); + } + if (!CheckIfCloser(master, 400)) + { + SetStateLabel("Follow"); + } + if (attackTarget) + { + if(CheckSight(attackTarget)) + { + SetStateLabel("Shoot"); + } + } + } + Lookout: + CHK2 A 1; + goto See; + Follow: + CHK2 BBBCCCDDDEEE 2 + { + A_FaceMaster(); + SMoveForward(); + } + goto See; + FindMaster: + CHK2 LM 8 SetOrigin(master.pos, false); + goto See; + Shoot: + CHK2 FFGGHHIJHIJHIJHIJ 4 A_Face(attackTarget); + CHK2 K 1 + { + A_Face(attackTarget); + //TODO: hacky, should make a function for this + target = attackTarget; + A_SpawnProjectile("FuckArrow", 50, 0, 0, CMF_TRACKOWNER); + } + CHK2 K 8; + goto See; + Death: + CHK2 NOP 8; + CHK2 P -1; + stop; + + + } +} + +class ChuckleFuckThree : SummonBase +{ + void AxeAttack() + { + FTranslatedLineTarget t; + A_Face(attackTarget); + LineAttack(Angle, 130, Pitch, 200 + Happiness, "PlayerDamage", null, 0, t); + + if (t.linetarget) + { + t.linetarget.Thrust(30, Angle); + Frustration -= 100; + if (Frustration < 0) + { + Frustration = 0; + } + } + + } + + states + { + Spawn: + CHK3 KL 60 A_FaceMaster; + See: + CHK3 A 0 + { + if(attackTarget) + { + SetStateLabel("Run"); + } + else + { + if (!CheckIfCloser(master, 1024, false)) + { + SetStateLabel("FindMaster"); + } + if (!CheckIfCloser(master, 400)) + { + SetStateLabel("Follow"); + } + + } + } + Lookout: + CHK3 A 1 A_FaceMaster(); + Goto See; + Run: + CHK3 BBBCCCDDDEEE 2 + { + ChaseTarget("Swing"); + if (Frustration > 200) + { + SetStateLabel("FindMaster"); + Frustration = 0; + } + } + goto See; + Follow: + CHK3 BBBCCCDDDEEE 2 + { + A_FaceMaster(); + SMoveForward(); + } + goto See; + FindMaster: + CHK3 KL 8 SetOrigin(master.pos, false); + Goto See; + Teleport: + CHK3 KL 8 SetOrigin(attackTarget.pos, false); + Goto See; + Swing: + CHK3 F 8; + CHK3 G 10; + TNT1 A 0 + { + AxeAttack(); + } + CHK3 HIJ 4; + Goto See; + Death: + CHK3 MNO 8; + CHK3 O -1; + Stop; + } +} + +Class SummonFireBall : Actor +{ + default + { + Radius 6; + Height 16; + Speed 20; + Damage 30; + Projectile; + +THRUSPECIES + Species "Player"; + DamageType "PlayerDamage"; + } + + states + { + Spawn: + BAL7 AB 4 Bright; + loop; + Death: + BAL7 CDE 6 Bright; + stop; + } +} diff --git a/gamedata/zactors/wbase.zsc b/gamedata/zactors/wbase.zsc @@ -0,0 +1,172 @@ +class DevilbunnyWeapon : Weapon +{ + bool parries; + property CanParry : parries; + + bool parryAnimReady; //enable in ready state, disable when you don't want the animation to play. Should only be used if the weapon has a parry state. + + override void PostBeginPlay() + { + parryAnimReady = FALSE; + Super.PostBeginPlay(); + } + + + action void setWeaponState(statelabel st,int layer=PSP_WEAPON) + { + if(player) + { + player.setpsprite(layer,invoker.findstate(st)); + } + } + + + action void VertFan(int damagemin, int damagemax, int range) + { + A_StartSound("bigwoosh", CHAN_WEAPON, CHANF_DEFAULT); + for(int offz = 0; offz <= 120; offz += 20) + { + LineAttack(Angle, range, Pitch, random(damagemin, damagemax), "PlayerDamage", "SlashEffectBase", LAF_NORANDOMPUFFZ | LAF_OVERRIDEZ, null, offz, 0, -5); + LineAttack(Angle, range, Pitch, random(damagemin, damagemax), "PlayerDamage", "SlashEffectBase", LAF_NORANDOMPUFFZ | LAF_OVERRIDEZ, null, offz + 10, 0, 5); + } + } + + action void HorizFan(int startoffs, int endoffs, int damagemin, int damagemax, int range, class<Actor> pufftype = null, class<Actor> clangtype = null) + { + FTranslatedLineTarget t; + bool hitflesh = FALSE; + + //this lineattack is only for making the clang sound and spawning a decal if the player swings their sword near a wall + //TODO: Implement for vertfan + LineAttack(Angle, range / 3, Pitch, 0, "None", clangtype, LAF_NORANDOMPUFFZ); + + if (startoffs > endoffs) + { + for (int offs = startoffs; offs >= endoffs; offs -= 10) + { + LineAttack(Angle, range, Pitch, random(damagemin, damagemax), "PlayerDamage", pufftype, LAF_NORANDOMPUFFZ, t, 0, 0, offs); + if (t.linetarget) {hitflesh = TRUE;} + } + } + else + { + for (int offs = startoffs; offs <= endoffs; offs += 10) + { + LineAttack(Angle, 192, Pitch, random(damagemin,damagemax), "PlayerDamage", pufftype, LAF_NORANDOMPUFFZ, t, 0, 0, offs); + if (t.linetarget) {hitflesh = TRUE;} + } + } + if (hitflesh == TRUE) + { + A_StartSound("fleshchop", CHAN_WEAPON, CHANF_DEFAULT); + } + else + { + A_StartSound("swing", CHAN_WEAPON); + //A_StartSound("fleshhit", CHAN_WEAPON, CHANF_DEFAULT); + } + } + + default + { + DevilbunnyWeapon.CanParry TRUE; + +WEAPON.MELEEWEAPON + } +} + +class SlashProtect : PowerProtection +{ + default + { + DamageFactor "PlayerDamage", 0; + Powerup.Duration 8; + Inventory.MaxAmount 1; + } +} + +class SlashPuffTimer : Powerup +{ + default + { + Powerup.Duration 8; + Inventory.MaxAmount 1; + } +} + +//bit of a hack, give the target a temporary item that makes them immune to damage from the player, so they don't get hit by multiple slashfan tracers. Inheriting actors should call GrantImmune() in their XDeath state +class SlashEffectBase : BulletPuff +{ + default + { + Species "Player"; + +ALWAYSPUFF + +ALLOWTHRUFLAGS + +THRUSPECIES + +HITTRACER + +PUFFONACTORS + +BLOODLESSIMPACT + +NOEXTREMEDEATH + DamageType "PlayerDamage"; + } + + void GrantImmune() + { + if (tracer.CountInv("SlashPuffTimer")) + { + tracer.GiveInventory("SlashProtect", 1); + return; + } + tracer.GiveInventory("SlashPuffTimer",1); + } + + States + { + Crash: + TNT1 A 1 + { + bALLOWPARTICLES = 0; + } + Stop; + XDeath: + TNT1 A 0 + { + GrantImmune(); + } + Stop; + } +} + +//Knocks back and deals minor damage in a radius. Most weapons should have their own special one that inherits from this +class StrikeBlast : FastProjectile +{ + Default + { + Radius 1; + Height 1; + Speed 20; + +THRUACTORS + +THRUSPECIES + Damage 0; + Projectile; +// +FORCERADIUSDMG + //Decal "SwordSlash"; + DamageType "PlayerDamage"; + Species "Player"; + } + + States + { + Spawn: + TNT1 AAA 2 + { + A_Explode(random(5,10), 128, 0, FALSE, 128); + } + stop; + Death: + TNT1 A 6; + stop; + Crash: + XDeath: + stop; + } +} diff --git a/gamedata/zactors/wpicksup.zsc b/gamedata/zactors/wpicksup.zsc @@ -0,0 +1,152 @@ +class S3FlechePickup : DBPickupBase replaces SuperShotgun +{ + Default + { + +WEAPONSPAWN + Inventory.Pickupmessage "Thou hast mastered Fleche!"; + } + + States + { + Spawn: + LUNG A -1; + stop; + Pickup: + TNT1 A 1 + { + if (CountInv("Fleche") == 0) + { + A_GiveInventory("Fleche", 1); + GiveSpirit(10); + } + } + stop; + } +} + +class S5ZornhauPickup : DBPickupBase replaces PlasmaRifle +{ + Default + { + +WEAPONSPAWN + Inventory.Pickupmessage "You have mastered Zornhau"; + } + + States + { + Spawn: + ZORN A -1; + stop; + Pickup: + TNT1 A 1 + { + if (CountInv("Zornhau") == 0) + { + A_GiveInventory("Zornhau", 1); + GiveSpirit(10); + } + } + stop; + } +} + +class S6PassePickup : DBPickupBase replaces BFG9000 +{ + Default + { + +WEAPONSPAWN + Inventory.Pickupmessage "Teleport technique!"; + } + + States + { + Spawn: + BON2 A -1; + stop; + Pickup: + TNT1 A 0 + { + if (CountInv("Passe") == 0) + { + A_GiveInventory("Passe", 1); + GiveSpirit(10); + } + } + stop; + } +} + +class S4ThrowPickup : DBPickupBase replaces RocketLauncher +{ + Default + { + +WEAPONSPAWN + Inventory.Pickupmessage "Thou hast mastered the flying sword!"; + } + + States + { + Spawn: + TOSS A -1; + stop; + Pickup: + TNT1 A 0 + { + if (CountInv("ThrowTech") == 0) + { + A_GiveInventory("ThrowTech", 1); + GiveSpirit(10); + } + } + stop; + } +} + +class SwordPickup : CustomInventory //for when you throw your sword +{ + Default + { + Inventory.Pickupmessage "Got it!"; + +INVENTORY.QUIET + -NOGRAVITY + } + + States + { + Spawn: + SORD A -1 Bright; + stop; + Pickup: + TNT1 A 0 + { + let owner1 = DevilbunnyPlayer(self); + owner1.hasSword = 1; + A_SelectWeapon("Pflug"); + A_StartSound("swordpickup"); + } + Poof: + TNT1 A 1; + stop; + + } +} + +class FakeShotgun : Actor replaces Shotgun //guns!? +{ + + States + { + Spawn: + SHOT A -1; + } + +} + +class FakeChaingun : Actor replaces Chaingun +{ + States + { + Spawn: + MGUN A -1; + } +} diff --git a/gamedata/zscript.txt b/gamedata/zscript.txt @@ -0,0 +1,24 @@ +version "4.3" + +#include "zactors/wbase.zsc" +#include "zactors/slot1-corpsacorps.zsc" +#include "zactors/slot2-pflug.zsc" +#include "zactors/slot3-fleche.zsc" +#include "zactors/slot4-throw.zsc" +#include "zactors/slot5-zornhau.zsc" +#include "zactors/slot6-passe.zsc" + +#include "zactors/powerups.zsc" +#include "zactors/wpicksup.zsc" +#include "zactors/armor.zsc" + +#include "zactors/player.zsc" +#include "zactors/movement.zsc" +#include "zactors/damage.zsc" + +#include "zactors/etaynehud.zsc" +#include "zactors/eventhandler.zsc" + + +#include "zactors/effects.zsc" +#include "zactors/summons.zsc" diff --git a/promos/PROMOv2.mkv b/promos/PROMOv2.mkv Binary files differ. diff --git a/promos/etayn_promo.mp3 b/promos/etayn_promo.mp3 Binary files differ. diff --git a/sourcefiles/2020-04-14_rest_sword.psd b/sourcefiles/2020-04-14_rest_sword.psd Binary files differ. diff --git a/sourcefiles/draw.blend b/sourcefiles/draw.blend Binary files differ. diff --git a/sourcefiles/fleche.blend b/sourcefiles/fleche.blend Binary files differ. diff --git a/sourcefiles/horiz.blend b/sourcefiles/horiz.blend Binary files differ. diff --git a/sourcefiles/sword.blend b/sourcefiles/sword.blend Binary files differ. diff --git a/sourcefiles/throw.blend b/sourcefiles/throw.blend Binary files differ. diff --git a/sourcefiles/zorn.blend b/sourcefiles/zorn.blend Binary files differ.