diff --git a/cvarinfo.base b/cvarinfo.base index 41214ec02..47841c7df 100644 --- a/cvarinfo.base +++ b/cvarinfo.base @@ -19,7 +19,6 @@ nosave bool swwm_pois = true; // show points of interest highlighted by omnisi nosave bool swwm_shaders = true; // use pp shaders for some effects server bool swwm_revive = true; // allows the player to do an "emergency reboot" when dying server int swwm_revivecooldown = 60; // cooldown after using a revive, in seconds (0: no limit) -server int swwm_blood = 1; // custom blood/gibbing (2: forcibly use our blood) server int swwm_maxblood = 200; // max blood effects at any time server int swwm_maxgibs = 100; // max gibs at any time server int swwm_maxcasings = 100; // max casings and spent mags at any time diff --git a/decaldef.txt b/decaldef.txt index 5c4dae64c..41fd58154 100644 --- a/decaldef.txt +++ b/decaldef.txt @@ -637,3 +637,335 @@ decal DemoSpray y-scale 0.25 solid } + +// replace vanilla blood +decal BloodSplat1 +{ + pic blsplat1 + shade "BloodDefault" + x-scale 0.6 + y-scale 0.6 + randomflipx + randomflipy +} +decal BloodSplat2 +{ + pic blsplat2 + shade "BloodDefault" + x-scale 0.625 + y-scale 0.625 + randomflipx + randomflipy +} +decal BloodSplat3 +{ + pic blsplat3 + shade "BloodDefault" + x-scale 0.675 + y-scale 0.675 + randomflipx + randomflipy +} +decal BloodSplat4 +{ + pic blsplat4 + shade "BloodDefault" + x-scale 0.7 + y-scale 0.7 + randomflipx + randomflipy +} +decal BloodSplat5 +{ + pic blsplat5 + shade "BloodDefault" + x-scale 0.725 + y-scale 0.725 + randomflipx + randomflipy +} +decal BloodSplat6 +{ + pic blsplat6 + shade "BloodDefault" + x-scale 0.75 + y-scale 0.75 + randomflipx + randomflipy +} +decal BloodSplat7 +{ + pic blsplat7 + shade "BloodDefault" + x-scale 0.775 + y-scale 0.775 + randomflipx + randomflipy +} +decal BloodSplat8 +{ + pic blsplat8 + shade "BloodDefault" + x-scale 0.8 + y-scale 0.8 + randomflipx + randomflipy +} +decal BloodSplatX1 +{ + pic blsplat1 + shade "BloodDefault" + x-scale 0.875 + y-scale 0.875 + randomflipx + randomflipy + LowerDecal "BloodSlide1" +} +decal BloodSlide1 +{ + pic blslide1 + shade "BloodDefault" + x-scale 0.875 + y-scale 0.875 + randomflipx + animator BloodStretcher +} +decal BloodSplatX2 +{ + pic blsplat2 + shade "BloodDefault" + x-scale 0.9 + y-scale 0.9 + randomflipx + randomflipy + LowerDecal "BloodSlide2" +} +decal BloodSlide2 +{ + pic blslide2 + shade "BloodDefault" + x-scale 0.9 + y-scale 0.9 + randomflipx + animator BloodStretcher +} +decal BloodSplatX3 +{ + pic blsplat3 + shade "BloodDefault" + x-scale 0.925 + y-scale 0.925 + randomflipx + randomflipy + LowerDecal "BloodSlide3" +} +decal BloodSlide3 +{ + pic blslide3 + shade "BloodDefault" + x-scale 0.925 + y-scale 0.925 + randomflipx + animator BloodStretcher +} +decal BloodSplatX4 +{ + pic blsplat4 + shade "BloodDefault" + x-scale 0.95 + y-scale 0.95 + randomflipx + randomflipy + LowerDecal "BloodSlide4" +} +decal BloodSlide4 +{ + pic blslide4 + shade "BloodDefault" + x-scale 0.95 + y-scale 0.95 + randomflipx + animator BloodStretcher +} +decal BloodSplatX5 +{ + pic blsplat5 + shade "BloodDefault" + x-scale 0.975 + y-scale 0.975 + randomflipx + randomflipy + LowerDecal "BloodSlide5" +} +decal BloodSlide5 +{ + pic blslide5 + shade "BloodDefault" + x-scale 0.975 + y-scale 0.975 + randomflipx + animator BloodStretcher +} +decal BloodSplatX6 +{ + pic blsplat6 + shade "BloodDefault" + x-scale 1.0 + y-scale 1.0 + randomflipx + randomflipy + LowerDecal "BloodSlide6" +} +decal BloodSlide6 +{ + pic blslide6 + shade "BloodDefault" + x-scale 1.0 + y-scale 1.0 + randomflipx + animator BloodStretcher +} +decal BloodSplatX7 +{ + pic blsplat7 + shade "BloodDefault" + x-scale 1.25 + y-scale 1.25 + randomflipx + randomflipy + LowerDecal "BloodSlide7" +} +decal BloodSlide7 +{ + pic blslide7 + shade "BloodDefault" + x-scale 1.25 + y-scale 1.25 + randomflipx + animator BloodStretcher +} +decal BloodSplatX8 +{ + pic blsplat8 + shade "BloodDefault" + x-scale 1.5 + y-scale 1.5 + randomflipx + randomflipy + LowerDecal "BloodSlide8" +} +decal BloodSlide8 +{ + pic blslide8 + shade "BloodDefault" + x-scale 1.5 + y-scale 1.5 + randomflipx + animator BloodStretcher +} + +decalgroup BloodSplat +{ + BloodSplat1 1 + BloodSplat2 1 + BloodSplat3 1 + BloodSplat4 1 + BloodSplat5 1 + BloodSplat6 1 + BloodSplat7 1 + BloodSplat8 1 + + BloodSplatX1 1 + BloodSplatX2 1 + BloodSplatX3 1 + BloodSplatX4 1 + BloodSplatX5 1 + BloodSplatX6 1 + BloodSplatX7 1 + BloodSplatX8 1 +} + +decal BloodSmear1 +{ + pic blslide1 + x-scale 0.625 + y-scale 0.625 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} +decal BloodSmear2 +{ + pic blslide2 + x-scale 0.65 + y-scale 0.65 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} +decal BloodSmear3 +{ + pic blslide3 + x-scale 0.675 + y-scale 0.675 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} +decal BloodSmear4 +{ + pic blslide4 + x-scale 0.7 + y-scale 0.7 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} +decal BloodSmear5 +{ + pic blslide5 + x-scale 0.725 + y-scale 0.725 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} +decal BloodSmear6 +{ + pic blslide6 + x-scale 0.75 + y-scale 0.75 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} +decal BloodSmear7 +{ + pic blslide7 + x-scale 0.775 + y-scale 0.775 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} +decal BloodSmear8 +{ + pic blslide8 + x-scale 0.8 + y-scale 0.8 + randomflipx + shade "BloodDefault" + animator BloodSmearer +} + +decalgroup BloodSmear +{ + BloodSmear1 1 + BloodSmear2 1 + BloodSmear3 1 + BloodSmear4 1 + BloodSmear5 1 + BloodSmear6 1 + BloodSmear7 1 + BloodSmear8 1 +} diff --git a/graphics/Decals/blslide1.png b/graphics/Decals/blslide1.png new file mode 100644 index 000000000..eae700760 Binary files /dev/null and b/graphics/Decals/blslide1.png differ diff --git a/graphics/Decals/blslide2.png b/graphics/Decals/blslide2.png new file mode 100644 index 000000000..819edfeb1 Binary files /dev/null and b/graphics/Decals/blslide2.png differ diff --git a/graphics/Decals/blslide3.png b/graphics/Decals/blslide3.png new file mode 100644 index 000000000..cb4fd0723 Binary files /dev/null and b/graphics/Decals/blslide3.png differ diff --git a/graphics/Decals/blslide4.png b/graphics/Decals/blslide4.png new file mode 100644 index 000000000..4f2edf028 Binary files /dev/null and b/graphics/Decals/blslide4.png differ diff --git a/graphics/Decals/blslide5.png b/graphics/Decals/blslide5.png new file mode 100644 index 000000000..d51eb12b8 Binary files /dev/null and b/graphics/Decals/blslide5.png differ diff --git a/graphics/Decals/blslide6.png b/graphics/Decals/blslide6.png new file mode 100644 index 000000000..60093c912 Binary files /dev/null and b/graphics/Decals/blslide6.png differ diff --git a/graphics/Decals/blslide7.png b/graphics/Decals/blslide7.png new file mode 100644 index 000000000..f9f62117a Binary files /dev/null and b/graphics/Decals/blslide7.png differ diff --git a/graphics/Decals/blslide8.png b/graphics/Decals/blslide8.png new file mode 100644 index 000000000..301b51665 Binary files /dev/null and b/graphics/Decals/blslide8.png differ diff --git a/graphics/Decals/blsplat1.png b/graphics/Decals/blsplat1.png new file mode 100644 index 000000000..21649fde9 Binary files /dev/null and b/graphics/Decals/blsplat1.png differ diff --git a/graphics/Decals/blsplat2.png b/graphics/Decals/blsplat2.png new file mode 100644 index 000000000..f567e2511 Binary files /dev/null and b/graphics/Decals/blsplat2.png differ diff --git a/graphics/Decals/blsplat3.png b/graphics/Decals/blsplat3.png new file mode 100644 index 000000000..79c9ccb8f Binary files /dev/null and b/graphics/Decals/blsplat3.png differ diff --git a/graphics/Decals/blsplat4.png b/graphics/Decals/blsplat4.png new file mode 100644 index 000000000..4807b6ee1 Binary files /dev/null and b/graphics/Decals/blsplat4.png differ diff --git a/graphics/Decals/blsplat5.png b/graphics/Decals/blsplat5.png new file mode 100644 index 000000000..aa8ca223a Binary files /dev/null and b/graphics/Decals/blsplat5.png differ diff --git a/graphics/Decals/blsplat6.png b/graphics/Decals/blsplat6.png new file mode 100644 index 000000000..387c821f0 Binary files /dev/null and b/graphics/Decals/blsplat6.png differ diff --git a/graphics/Decals/blsplat7.png b/graphics/Decals/blsplat7.png new file mode 100644 index 000000000..e7dcf31a6 Binary files /dev/null and b/graphics/Decals/blsplat7.png differ diff --git a/graphics/Decals/blsplat8.png b/graphics/Decals/blsplat8.png new file mode 100644 index 000000000..8b50248a1 Binary files /dev/null and b/graphics/Decals/blsplat8.png differ diff --git a/language.def_menu b/language.def_menu index c74605ad0..9adb7842e 100644 --- a/language.def_menu +++ b/language.def_menu @@ -58,7 +58,6 @@ SWWM_UNLIMITED = "Unlimited"; SWWM_ONERETRY = "One Retry"; SWWM_NONE = "None"; SWWM_BTITLE = "Balance Options"; -SWWM_BLOOD = "Enable Custom Blood"; SWWM_FUZZ = "Enable Animated Menu BG"; SWWM_CBTALL = "Unrestricted Busting"; SWWM_DOOMFALL = "Force Monster Fall Damage"; @@ -222,7 +221,6 @@ TOOLTIP_SWWM_POIS = "Show points of interest (such as key items and exits) when TOOLTIP_SWWM_SHADERS = "Use postprocess shaders for things like powerups and the Silver Bullet scope. You can disable this if you'd prefer something lighter on the eyes."; TOOLTIP_SWWM_REVIVE = "Allows the player to get back up after dying by pressing Fire. Has a configurable cooldown."; TOOLTIP_SWWM_REVIVECOOLDOWN = "Time in seconds of downtime after using a reboot, where if you die again, you can't get back up. Set to 0 to allow unlimited reboots. Alternatively, you can also set it to only allow one reboot per map (enforced on expert difficulties)."; -TOOLTIP_SWWM_BLOOD = "Enable custom blood and gore effects, adapted from Soundless Mound. Other loaded mods' gore will take priority unless set to \"Always\". BLUDTYPE patches from Nashgore are supported."; TOOLTIP_SWWM_FUZZ = "Toggling this off is recommended if you're recording/streaming as this effect can harm video quality."; TOOLTIP_SWWM_CBTALL = "Allows the Wallbuster and other weapons capable of map geometry destruction to break pretty much anything, not just doors and platforms. Note that this can break some maps, which is why this option is here."; TOOLTIP_SWWM_DOOMFALL = "Makes monsters take fall damage outside of Hexen. Requires map reload if previously disabled."; diff --git a/language.es_menu b/language.es_menu index 94ad902fa..b328bdbe2 100644 --- a/language.es_menu +++ b/language.es_menu @@ -56,7 +56,6 @@ SWWM_UNLIMITED = "Ilimitado"; SWWM_ONERETRY = "Un Reintento"; SWWM_NONE = "Ninguno"; SWWM_BTITLE = "Opciones de Balance"; -SWWM_BLOOD = "Habilitar Sangre Personalizada"; SWWM_FUZZ = "Habilitar Fondo Animado de Menú"; SWWM_CBTALL = "Reventamiento sin Restricciones"; SWWM_DOOMFALL = "Forzar Daño por Caída en Monstruos"; @@ -217,7 +216,6 @@ TOOLTIP_SWWM_POIS = "Muestra puntos de interés (tales como llaves y salidas) cu TOOLTIP_SWWM_SHADERS = "Usa shaders de postprocesado para cosas como potenciadores y la mira del Silver Bullet. Puedes desactivar esto si prefieres algo más ligero para la vista."; TOOLTIP_SWWM_REVIVE = "Permite al jugador volver a levantarse tras morir pulsando Fuego. Tiene un cooldown configurable."; TOOLTIP_SWWM_REVIVECOOLDOWN = "Tiempo en segundos tras reiniciar, durante el cual si mueres otra vez, no puedes volver a levantarte. Pon a 0 para permitir reinicios ilimitados. Alternativamente, puedes elegir que solo se permita un reinicio por mapa (forzado en dificultades expertas)."; -TOOLTIP_SWWM_BLOOD = "Activa efectos de sangre y vísceras personalizados, adaptados de Soundless Mound. La sangre de otros mods tiene prioridad a menos que se elija \"Siempre\". Se soportan parches BLUDTYPE para Nashgore."; TOOLTIP_SWWM_FUZZ = "Desactivar esto es recomendado si estás grabando o haciendo streaming, ya que este effecto puede dañar la calidad del vídeo."; TOOLTIP_SWWM_CBTALL = "Permite a la Wallbuster y otras armas capaces de reventar geometría del mapa destruír casi cualquier cosa, no solo puertas y plataformas. Ten en cuenta que esto puede romper algunos mapas, razón de que haya esta opción."; TOOLTIP_SWWM_DOOMFALL = "Hace que los monstruos reciban daño por caída fuera de Hexen. Requiere reinicio de mapa si fue desactivado anteriormente."; diff --git a/language.version b/language.version index 33c19d61d..51697a8e6 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1192 \cu(vie 07 mar 2025 12:26:22 CET)\c-"; -SWWM_SHORTVER="\cw1.3pre r1192 \cu(2025-03-07 12:26:22)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1193 \cu(vie 07 mar 2025 17:27:59 CET)\c-"; +SWWM_SHORTVER="\cw1.3pre r1193 \cu(2025-03-07 17:27:59)\c-"; diff --git a/menudef.txt b/menudef.txt index 108f311d0..2da4323ec 100644 --- a/menudef.txt +++ b/menudef.txt @@ -166,7 +166,6 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_SHOWMAPTITLE", "swwm_showmaptitle", "YesNo" StaticText " " StaticText "$SWWM_ETITLE", 1 - Option "$SWWM_BLOOD", "swwm_blood", "SWWMYesNoAlways" Option "$SWWM_NOMAGDROP", "swwm_nomagdrop", "NoYes" ScaleSliderFix "$SWWM_MAXBLOOD", "swwm_maxblood", -1, 1000, 100, "$SWWM_NONE", "$SWWM_UNLIMITED" ScaleSliderFix "$SWWM_MAXGIBS", "swwm_maxgibs", -1, 1000, 100, "$SWWM_NONE", "$SWWM_UNLIMITED" diff --git a/modeldef/misc.txt b/modeldef/misc.txt index b734de8da..8843e55b0 100644 --- a/modeldef/misc.txt +++ b/modeldef/misc.txt @@ -110,15 +110,62 @@ Model "mkBloodDrop" FrameIndex SBLD H 0 0 Skin 0 "BloodDrop4.png" FrameIndex SBLD I 0 0 - ZOffset -0.1 - Skin 0 "BloodDrop1.png" + Skin 0 "BloodDrop5.png" FrameIndex SBLD J 0 0 - Skin 0 "BloodDrop2.png" + Skin 0 "BloodDrop6.png" FrameIndex SBLD K 0 0 - Skin 0 "BloodDrop3.png" + Skin 0 "BloodDrop7.png" FrameIndex SBLD L 0 0 - Skin 0 "BloodDrop4.png" + Skin 0 "BloodDrop8.png" FrameIndex SBLD M 0 0 + ZOffset -0.1 + Skin 0 "BloodSplat1.png" + FrameIndex SBLD N 0 0 + Skin 0 "BloodSplat2.png" + FrameIndex SBLD O 0 0 + Skin 0 "BloodSplat3.png" + FrameIndex SBLD P 0 0 + Skin 0 "BloodSplat4.png" + FrameIndex SBLD Q 0 0 + Skin 0 "BloodSplat1.png" + FrameIndex SBLD R 0 0 + Skin 0 "BloodSplat2.png" + FrameIndex SBLD S 0 0 + Skin 0 "BloodSplat3.png" + FrameIndex SBLD T 0 0 + Skin 0 "BloodSplat4.png" + FrameIndex SBLD U 0 0 +} + +Model "mkBloodBlast" +{ + Path "models/extra" + Model 0 "Flat.obj" + Scale 20 20 20 + ZOffset 0.1 + USEACTORPITCH + USEACTORROLL + DONTCULLBACKFACES + + Skin 0 "BloodBlast.png" + FrameIndex XZW1 A 0 0 +} + +Model "mkBloodPool" +{ + Path "models/extra" + Model 0 "Flat.obj" + Scale 60 60 60 + ZOffset 0.1 + USEACTORPITCH + USEACTORROLL + DONTCULLBACKFACES + + Skin 0 "blodpool.png" + FrameIndex XZW1 A 0 0 + // do not use for sprite-based monsters + Skin 0 "blodpool_shaded.png" + FrameIndex XZW1 B 0 0 } Model "mkFlyingGib" diff --git a/modeldef/weapons/ynykron.txt b/modeldef/weapons/ynykron.txt index 633549048..d16640720 100644 --- a/modeldef/weapons/ynykron.txt +++ b/modeldef/weapons/ynykron.txt @@ -9,7 +9,7 @@ Model "AshenRemains" USEACTORROLL DONTCULLBACKFACES - Skin 0 "BigBlast.png" + Skin 0 "BloodBlast.png" FrameIndex XZW1 A 0 0 } diff --git a/models/extra/BigBlast.png b/models/extra/BigBlast.png deleted file mode 100644 index 280b33d9e..000000000 Binary files a/models/extra/BigBlast.png and /dev/null differ diff --git a/models/extra/BloodBlast.png b/models/extra/BloodBlast.png new file mode 100644 index 000000000..3bb088c55 Binary files /dev/null and b/models/extra/BloodBlast.png differ diff --git a/models/extra/BloodDrop1.png b/models/extra/BloodDrop1.png index 3c05ae7be..92714be34 100644 Binary files a/models/extra/BloodDrop1.png and b/models/extra/BloodDrop1.png differ diff --git a/models/extra/BloodDrop2.png b/models/extra/BloodDrop2.png index 5b4d6b262..3e62984e7 100644 Binary files a/models/extra/BloodDrop2.png and b/models/extra/BloodDrop2.png differ diff --git a/models/extra/BloodDrop3.png b/models/extra/BloodDrop3.png index d4eeb24de..5dfe7d932 100644 Binary files a/models/extra/BloodDrop3.png and b/models/extra/BloodDrop3.png differ diff --git a/models/extra/BloodDrop4.png b/models/extra/BloodDrop4.png index 9faec7110..790f1a169 100644 Binary files a/models/extra/BloodDrop4.png and b/models/extra/BloodDrop4.png differ diff --git a/models/extra/BloodDrop5.png b/models/extra/BloodDrop5.png new file mode 100644 index 000000000..9df59ab50 Binary files /dev/null and b/models/extra/BloodDrop5.png differ diff --git a/models/extra/BloodDrop6.png b/models/extra/BloodDrop6.png new file mode 100644 index 000000000..b2e909f7d Binary files /dev/null and b/models/extra/BloodDrop6.png differ diff --git a/models/extra/BloodDrop7.png b/models/extra/BloodDrop7.png new file mode 100644 index 000000000..9be17e3cf Binary files /dev/null and b/models/extra/BloodDrop7.png differ diff --git a/models/extra/BloodDrop8.png b/models/extra/BloodDrop8.png new file mode 100644 index 000000000..9cb657cbc Binary files /dev/null and b/models/extra/BloodDrop8.png differ diff --git a/models/extra/BloodFoot1.png b/models/extra/BloodFoot1.png new file mode 100644 index 000000000..9f64aab7d Binary files /dev/null and b/models/extra/BloodFoot1.png differ diff --git a/models/extra/BloodFoot2.png b/models/extra/BloodFoot2.png new file mode 100644 index 000000000..062b3de80 Binary files /dev/null and b/models/extra/BloodFoot2.png differ diff --git a/models/extra/BloodFoot3.png b/models/extra/BloodFoot3.png new file mode 100644 index 000000000..ab1915c76 Binary files /dev/null and b/models/extra/BloodFoot3.png differ diff --git a/models/extra/BloodFoot4.png b/models/extra/BloodFoot4.png new file mode 100644 index 000000000..f0360bf0f Binary files /dev/null and b/models/extra/BloodFoot4.png differ diff --git a/models/extra/BloodSplat1.png b/models/extra/BloodSplat1.png new file mode 100644 index 000000000..a96017cc3 Binary files /dev/null and b/models/extra/BloodSplat1.png differ diff --git a/models/extra/BloodSplat2.png b/models/extra/BloodSplat2.png new file mode 100644 index 000000000..656a96a9b Binary files /dev/null and b/models/extra/BloodSplat2.png differ diff --git a/models/extra/BloodSplat3.png b/models/extra/BloodSplat3.png new file mode 100644 index 000000000..dd182957e Binary files /dev/null and b/models/extra/BloodSplat3.png differ diff --git a/models/extra/BloodSplat4.png b/models/extra/BloodSplat4.png new file mode 100644 index 000000000..5232b01e1 Binary files /dev/null and b/models/extra/BloodSplat4.png differ diff --git a/models/extra/BloodSplat5.png b/models/extra/BloodSplat5.png new file mode 100644 index 000000000..e5ef705d6 Binary files /dev/null and b/models/extra/BloodSplat5.png differ diff --git a/models/extra/BloodSplat6.png b/models/extra/BloodSplat6.png new file mode 100644 index 000000000..79f1ed321 Binary files /dev/null and b/models/extra/BloodSplat6.png differ diff --git a/models/extra/BloodSplat7.png b/models/extra/BloodSplat7.png new file mode 100644 index 000000000..98216dacb Binary files /dev/null and b/models/extra/BloodSplat7.png differ diff --git a/models/extra/BloodSplat8.png b/models/extra/BloodSplat8.png new file mode 100644 index 000000000..76c3a707f Binary files /dev/null and b/models/extra/BloodSplat8.png differ diff --git a/models/extra/blodpool.png b/models/extra/blodpool.png new file mode 100644 index 000000000..9e90c6a34 Binary files /dev/null and b/models/extra/blodpool.png differ diff --git a/models/extra/blodpool_shaded.png b/models/extra/blodpool_shaded.png new file mode 100644 index 000000000..946d44049 Binary files /dev/null and b/models/extra/blodpool_shaded.png differ diff --git a/sprites/MSMKA0.png b/sprites/MSMKA0.png new file mode 100644 index 000000000..8c057fa21 Binary files /dev/null and b/sprites/MSMKA0.png differ diff --git a/sprites/MSMKB0.png b/sprites/MSMKB0.png new file mode 100644 index 000000000..4977856c6 Binary files /dev/null and b/sprites/MSMKB0.png differ diff --git a/sprites/MSMKC0.png b/sprites/MSMKC0.png new file mode 100644 index 000000000..72022d3f2 Binary files /dev/null and b/sprites/MSMKC0.png differ diff --git a/sprites/MSMKD0.png b/sprites/MSMKD0.png new file mode 100644 index 000000000..42c3b3e43 Binary files /dev/null and b/sprites/MSMKD0.png differ diff --git a/sprites/MSMKE0.png b/sprites/MSMKE0.png new file mode 100644 index 000000000..14e00247e Binary files /dev/null and b/sprites/MSMKE0.png differ diff --git a/sprites/MSMKF0.png b/sprites/MSMKF0.png new file mode 100644 index 000000000..9551ab618 Binary files /dev/null and b/sprites/MSMKF0.png differ diff --git a/sprites/MSMKG0.png b/sprites/MSMKG0.png new file mode 100644 index 000000000..6039ae379 Binary files /dev/null and b/sprites/MSMKG0.png differ diff --git a/sprites/MSMKH0.png b/sprites/MSMKH0.png new file mode 100644 index 000000000..be2220518 Binary files /dev/null and b/sprites/MSMKH0.png differ diff --git a/zscript/handler/swwm_handler.zsc b/zscript/handler/swwm_handler.zsc index 9da781f5c..8283e2d65 100644 --- a/zscript/handler/swwm_handler.zsc +++ b/zscript/handler/swwm_handler.zsc @@ -53,6 +53,9 @@ Class SWWMHandler : EventHandler transient ui Vector2 oldplayerpos; transient ui bool do_trace_steps; + // for bloody footsteps + mkBloodPool bloodpools; + enum EProfileTimer { PT_WORLDTICK, diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc index c978b0b9c..1b159e4a5 100644 --- a/zscript/handler/swwm_handler_damage.zsc +++ b/zscript/handler/swwm_handler_damage.zsc @@ -32,6 +32,7 @@ extend Class SWWMHandler if ( !b ) return; mkGibber(a).gibbed = e.Thing; mkGibber(a).delay = 40; + mkGibber(a).mksplat = true; a.special1 = 1; a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); return; @@ -42,6 +43,7 @@ extend Class SWWMHandler if ( !b ) return; mkGibber(a).gibbed = e.Thing; mkGibber(a).delay = 60; + mkGibber(a).mksplat = true; a.special1 = 1; a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); } diff --git a/zscript/handler/swwm_handler_queues.zsc b/zscript/handler/swwm_handler_queues.zsc index bd0837ad3..eb148a75f 100644 --- a/zscript/handler/swwm_handler_queues.zsc +++ b/zscript/handler/swwm_handler_queues.zsc @@ -196,8 +196,5 @@ extend Class SWWMHandler oldmaxdebris = swwm_maxdebris; oldmaxblood = swwm_maxblood; oldmaxgibs = swwm_maxgibs; - if ( swwm_blood ) return; - while ( blods ) DeQueueBlod(blods); - while ( meats ) DeQueueMeat(meats); } } diff --git a/zscript/handler/swwm_handler_replacements.zsc b/zscript/handler/swwm_handler_replacements.zsc index 0ac62b7fd..2a4cc2070 100644 --- a/zscript/handler/swwm_handler_replacements.zsc +++ b/zscript/handler/swwm_handler_replacements.zsc @@ -675,8 +675,7 @@ extend Class SWWMHandler return; } } - // only replace vanilla blood if no other gore mod is doing it (unless swwm_blood is set to 2) - if ( (((e.Replacee == "Blood") && (!e.Replacement || (e.Replacement == "Blood") || (swwm_blood >= 2))) || (bludtypes.Find(e.Replacee.GetClassName()) < bludtypes.Size())) && swwm_blood ) e.Replacement = "mkBlood"; + if ( (e.Replacee is 'Blood') || (bludtypes.Find(e.Replacee.GetClassName()) < bludtypes.Size()) ) e.Replacement = 'mkBlood'; else if ( e.Replacee is 'ItemFog' ) e.Replacement = 'SWWMItemFog'; else if ( e.Replacee is 'TeleportFog' ) e.Replacement = 'SWWMTeleportFog'; else if ( (e.Replacee is 'CommanderKeen') && (!e.Replacement || (e.Replacement == 'CommanderKeen')) ) diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index ff6a53c2b..99acc4110 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -302,7 +302,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor } SWWMUtility.SetToSlope(self,FRandom[Blood](0,360)); A_SetRenderStyle(1.,STYLE_Shaded); - frame = Random[Blood](5,8); + frame = Random[Blood](5,12); int numpt = Random[Blood](4,8); puff.lifetime = 20; puff.startalpha = .5*alpha; @@ -357,7 +357,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor } SWWMUtility.SetToSlope(self,FRandom[Blood](0,360),true); A_SetRenderStyle(1.,STYLE_Shaded); - frame = Random[Blood](9,12); + frame = Random[Blood](13,20); int numpt = Random[Blood](4,8); puff.lifetime = 20; puff.startalpha = .5*alpha; @@ -456,7 +456,7 @@ Class mkBloodSmoke : SWWMStaticSprite override void SetupSprite() { - texture = TexMan.CheckForTexture(String.Format("BSMK%c0",0x41+Random[Blood](0,19))); + texture = TexMan.CheckForTexture(String.Format("MSMK%c0",0x41+Random[Blood](0,7))); Scale = (.5,.5); Alpha = .35; SetRenderStyle(STYLE_Shaded); @@ -653,6 +653,7 @@ Class mkGibber : SWWMNonInteractiveActor color shadecol; meta Class gibtype; // allow custom gib types (will be used for monster pack) bool psnd; + bool mksplat; Property GibType: gibtype; @@ -754,6 +755,14 @@ Class mkGibber : SWWMNonInteractiveActor A_StartSound("misc/gibber",CHAN_VOICE,CHANF_OVERLAP); psnd = true; } + if ( mksplat ) + { + let s = Spawn("mkBloodBlast",pos); + s.SetShade(shadecol); + s.scale *= radius/4.; + s.master = gibbed; + mksplat = false; + } BurstGibs(); if ( reactiontime <= 0 ) Destroy(); @@ -767,6 +776,44 @@ Class mkGibber : SWWMNonInteractiveActor } } +// for exploding Cyberdemon/Spider +Class mkBloodBlast : SWWMNonInteractiveActor +{ + override void Tick() + { + if ( freezetics > 0 ) + { + freezetics--; + return; + } + if ( isFrozen() ) return; + double fz = CurSector.floorplane.ZAtPoint(pos.xy); + if ( fz != pos.z ) SetOrigin((pos.x,pos.y,fz),true); + if ( (waterlevel > 0) || GetFloorTerrain().isliquid ) + A_FadeOut(); + if ( !master ) A_FadeOut(.01); + } + override void PostBeginPlay() + { + double fz = CurSector.floorplane.ZAtPoint(pos.xy); + SetZ(fz); + prev.z = fz; + A_QueueCorpse(); + SWWMUtility.SetToSlope(self,FRandom[Blood](0,360)); + } + default + { + RenderStyle "Shaded"; + StencilColor "Red"; + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} + // bare actors used for copying blood color to vanilla monsters Class GreenBloodReference : Actor { @@ -822,6 +869,93 @@ Class CorpseFallTracker : Thinker // wait until body is dead on floor and at the last state of animation if ( (mybody.Health > 0) || isflying || (mybody.tics != -1) || (mybody.vel.length() > 0) ) return; + let b = mybody.Spawn("mkBloodPool",mybody.pos); + Color shadecol; + if ( mybody.bloodcolor ) shadecol = Color(mybody.bloodcolor.r/2,mybody.bloodcolor.g/2,mybody.bloodcolor.b/2); + else shadecol = Color(80,0,0); + mkBloodPool(b).stepcol = shadecol; + b.master = mybody; + b.A_SetScale(mybody.default.radius/16.); + // futureproofing hack (heh) + let mtype = SWWMUtility.GetParentClassBefore(mybody.GetClass(),'Actor'); + if ( mtype.GetClassName() == 'SWWMMonster' ) + { + b.A_SetRenderStyle(1.,STYLE_Shaded); + b.SetShade(shadecol); + } + else b.translation = mybody.bloodtranslation; Destroy(); } } + +// Blood pool +Class mkBloodPool : SWWMNonInteractiveActor +{ + double basesz, sz, accel; + Color stepcol; + mkBloodPool prevpool, nextpool; + + override void OnDestroy() + { + Super.OnDestroy(); + if ( prevpool ) + { + prevpool.nextpool = nextpool; + if ( nextpool ) nextpool.prevpool = prevpool; + } + let hnd = SWWMHandler(EventHandler.Find("SWWMHandler")); + if ( !hnd ) return; + hnd.bloodpools = nextpool; + } + + override void PostBeginPlay() + { + double fz = CurSector.floorplane.ZAtPoint(pos.xy); + SetZ(fz); + prev.z = fz; + accel = .0012; + basesz = scale.x; + sz = .01; + A_SetScale(sz); + A_QueueCorpse(); + SWWMUtility.SetToSlope(self,FRandom[Blood](0,360)); + let hnd = SWWMHandler(EventHandler.Find("SWWMHandler")); + if ( !hnd ) return; + nextpool = hnd.bloodpools; + hnd.bloodpools = self; + if ( nextpool ) nextpool.prevpool = self; + } + + override void Tick() + { + if ( freezetics > 0 ) + { + freezetics--; + return; + } + if ( isFrozen() ) return; + double fz = CurSector.floorplane.ZAtPoint(pos.xy); + if ( fz != pos.z ) SetOrigin((pos.x,pos.y,fz),true); + if ( (waterlevel > 0) || GetFloorTerrain().isliquid ) + A_FadeOut(); + if ( !master ) A_FadeOut(.01); + if ( accel <= double.epsilon ) return; + sz += accel; + accel *= .997; + A_SetScale(basesz*sz); + A_SetSize(50.*basesz*sz); + } + + Default + { + Radius 1; + Height 1; + StencilColor "Red"; + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} diff --git a/zscript/utility/swwm_utility_info.zsc b/zscript/utility/swwm_utility_info.zsc index 0eb01b2ad..3a436a8c2 100644 --- a/zscript/utility/swwm_utility_info.zsc +++ b/zscript/utility/swwm_utility_info.zsc @@ -495,4 +495,14 @@ extend Class SWWMUtility return true; return target.bCOUNTITEM; } + + // return the highest parent class in hierarchy before a specific "highest class" + // useful to check stuff such as monster subtypes and the like + static Class GetParentClassBefore( Class baseclass, Class highestclass ) + { + Class step = baseclass; + while ( (step.GetParentClass() != highestclass) && step.GetParentClass() ) + step = step.GetParentClass(); + return step; + } }