diff --git a/CVARINFO.txt b/CVARINFO.txt index b0418b9e..4ba959e0 100644 --- a/CVARINFO.txt +++ b/CVARINFO.txt @@ -11,6 +11,7 @@ server int bdoom_debrisnum = 300; server bool bdoom_shakes = true; server int bdoom_weapons = 1; server bool bdoom_autoreload = true; +server bool bdoom_killableobjects = true; user bool bdoom_muzzle = true; server bool bdoom_tracers = true; server bool bdoom_flies = true; diff --git a/DECORATE.txt b/DECORATE.txt index 944da2bb..efe79955 100644 --- a/DECORATE.txt +++ b/DECORATE.txt @@ -1,8 +1,3 @@ - -#include "DECORATE/BD_MONST.txt" - - -// --------- OBJECTS - -//#include "DECORATE/Objects/BD_OBJ.txt" //decorative objects -#include "DECORATE/Objects/BD_DEAD.txt" //impaled bodies and other gory decorations \ No newline at end of file +#include "DECORATE/MONSTERS/IconOfSin.txt" +#include "DECORATE/BD_Blood.txt" +#include "DECORATE/BD_Monst.txt" \ No newline at end of file diff --git a/DECORATE/Objects/BD_OBJ.txt b/DECORATE/Objects/BD_OBJ.txt deleted file mode 100644 index ca155639..00000000 --- a/DECORATE/Objects/BD_OBJ.txt +++ /dev/null @@ -1,232 +0,0 @@ -//***************************\\ -//***************************\\ -//****** O B J E C T S ******\\ -//***************************\\ -//***************************\\ - - - -Actor BarrelPart : DebrisGeneral -{ -+DOOMBOUNCE --NOGRAVITY --NOBLOCKMAP -gravity 1.0 -seesound "" -scale .55 -mass 1 -states - { - Spawn: - TNT1 A 0 NoDelay A_QueueCorpse - TNT1 A 0 A_SetScale(scalex*randompick(-1,1),scaley) - BPRT ABCDEFGH 1 - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Debris")==0,"Null") - goto spawn+2 - Death: - TNT1 A 0 A_jump(256,1,2,3) - BPRT A 50 A_JumpIf(GetCVAR("bdoom_Debris")==0,"Null") - wait - BPRT B 50 A_JumpIf(GetCVAR("bdoom_Debris")==0,"Null") - wait - BPRT E 50 A_JumpIf(GetCVAR("bdoom_Debris")==0,"Null") - wait - } -} - - -//****** -// HELL -//****** - - - -Actor BD_EvilEye replaces EvilEye -{ -+NOINTERACTION -states - { - Spawn: - TNT1 A 0 NoDelay A_spawnitem("BD_Candlestick") - TNT1 A 0 A_spawnitem("FloatingEye",0,10) - stop - } -} - -Actor FloatingEye -{ -renderstyle translucent -+VISIBILITYPULSE -+FORCEXYBILLBOARD -+SOLID -+NOGRAVITY -+RELATIVETOFLOOR -+FLOATBOB -floatbobstrength .75 -states - { - Spawn: - SEYE ABCDEF 4 bright - loop - } -} - -Actor BD_FloatingSkull : FloatingSkull replaces FloatingSkull -{ -+FLOATBOB -floatbobstrength 0.5 -states - { - Spawn: - TNT1 A 0 NoDelay A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX A 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX B 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX C 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX D 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX E 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX F 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX A 4 bright - goto Spawn - } -} - -Actor SkullSmoke : DebrisGeneral -{ -bouncetype None -+NOGRAVITY -+DONTSPLASH -+NOINTERACTION -renderstyle ADD -alpha 0.5 -scale .04 -states - { - Spawn: - SPRK A 1 bright A_FadeOut(0.03) - TNT1 A 0 A_SetScale(scalex*0.9,scaley*0.9) - loop - } -} - -actor BD_HeartColumn : HeartColumn replaces HeartColumn -{ -states - { - Spawn: - COL5 B 14 - TNT1 A 0 A_CheckSight(2) - TNT1 A 0 A_SpawnItemEx("DecorativeBloodDrop",0,0,random(32,36), random(1,2),0,random(1,3), random(-0,360), 0,200) - COL5 A 9 - loop - } -} - -Actor DecorativeBloodDrop : BD_Blood -{ -states - { - Death: - stop - } -} - -Actor BD_BigTree : BigTree replaces BigTree -{ -states - { - Spawn: - TNT1 A 0 NoDelay A_SetScale(scalex*randompick(-1,1),scaley) - TNT1 A 0 A_Jump(256,1,2,3,4) - TRE2 A -1 - stop - TRE2 B -1 - stop - TRE2 C -1 - stop - TRE2 D -1 - stop - } -} - -Actor BD_TorchTree : TorchTree replaces TorchTree -{ -states - { - Spawn: - TNT1 A 0 NoDelay A_SetScale(scalex*randompick(-1,1),scaley) - TNT1 A 0 A_Jump(256,1,2) - TRE1 A -1 - stop - TRE1 B -1 - stop - } -} - - -//// TELEPORT FOG - -Actor BD_TeleportFog : TeleportFog replaces TeleportFog -{ -+FORCEXYBILLBOARD -renderstyle Add -alpha .8 -states - { - Spawn: - TNT1 A 0 NoDelay A_SetScale(scalex*randompick(-1,1),scaley) - TNT1 A 0 A_SpawnItem("TeleportGreenFlare", 0, 28) - TFOG ABCDCBABABCDCDEFGHIJ 3 bright - stop - } -} - -Actor TeleportGreenFlare : Flare_General -{ -+FORCEXYBILLBOARD -states - { - Spawn: - TNT1 A 0 NoDelay A_JumpIf(GetCVAR("bdoom_Flames")==0,"Null") - TNT1 A 0 A_Jump(256,1,2,3) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright A_SetScale(0.3,0.3) - LENG A 3 bright A_SetScale(0.25,0.25) - LENG A 3 bright A_SetScale(0.2,0.2) - LENG A 3 bright A_SetScale(0.1,0.1) - stop - } -} \ No newline at end of file diff --git a/D_MONSTERS.txt b/D_MONSTERS.txt deleted file mode 100644 index 040f9af3..00000000 --- a/D_MONSTERS.txt +++ /dev/null @@ -1,5 +0,0 @@ -/*----------------------------------------------------------- - NEW MONSTERS ------------------------------------------------------------*/ - -#include "DECORATE/MONSTERS/IconOfSin.txt" \ No newline at end of file diff --git a/GLDEFS.lights b/GLDEFS.lights index 3777fd6e..f716bf85 100644 --- a/GLDEFS.lights +++ b/GLDEFS.lights @@ -1,43 +1,51 @@ -// ------------------------------------------------------ -// ------------------ DOOM GAME LIGHTS ------------------ -// ------------- MODIFIED FOR BEAUTIFUL DOOM ------------- -// ------------------------------------------------------ +// ------------------------------------------------- +// ------------- BEAUTIFUL DOOM LIGHTS ------------- +// ------------------------------------------------- -object EnBulletPuff +flickerlight BPUFF { -frame BPUF { light BPUFF1 } +color 1.0 0.8 0.0 +size 2 +secondarySize 3 +chance 0.2 } -object RicochetBullet +object EnBulletPuff { -frame TNT1 { light BPUFF1 } +frame BPUF { light BPUFF } } -object ChainsawPuff +object RicochetBullet { -frame BPUF { light BPUFF1 } +frame TNT1 { light BPUFF } } -/*object RicochetSpark +flickerlight CPUFF { -frame SPRK { light BPUFF1 } -}*/ +color 1.0 0.8 0.0 +size 8 +secondarySize 10 +chance 0.5 +} -flickerlight2 ZOMBIEATK +object ChainsawPuff { - color 1.0 0.8 0.2 - size 48 - secondarySize 56 - interval 1 - offset 0 40 0 +frame CPUF { light CPUFF } } -object BD_DoomPlayer +pulselight RSPARK { - frame PLAYF { light ZOMBIEATK } +color 1.0 0.5 0.0 +size 4 +secondarySize 0 +interval 3 } +/*object RicochetSpark +{ +frame SPRK { light RSPARK } +}*/ // ---------------------------- // -- BEAUTIFUL DOOM Weapons -- @@ -77,82 +85,40 @@ flickerlight ROCKET_X3 object BD_Rocket { frame MISLA { light ROCKET } -frame BOM2A { light ROCKET_X3 } -frame BOM2B { light ROCKET_X3 } -frame BOM2C { light ROCKET_X3 } -frame BOM2D { light ROCKET_X3 } -frame BOM2E { light ROCKET_X3 } -frame BOM2F { light ROCKET_X2 } -frame BOM2G { light ROCKET_X2 } -frame BOM2H { light ROCKET_X2 } -frame BOM2I { light ROCKET_X2 } -frame BOM2j { light ROCKET_X2 } -frame BOM2K { light ROCKET_X1 } -frame BOM2L { light ROCKET_X1 } -frame BOM2M { light ROCKET_X1 } -frame BOM2N { light ROCKET_X1 } -frame BOM2O { light ROCKET_X1 } -frame BOM2P { light ROCKET_X1 } -frame BOM2Q { light ROCKET_X1 } -frame BOM2R { light ROCKET_X1 } -frame BOM2S { light ROCKET_X1 } -frame BOM2T { light ROCKET_X1 } -frame BOM2U { light ROCKET_X1 } -frame BOM2V { light ROCKET_X1 } +frame BOM6A { light ROCKET_X3 } +frame BOM6B { light ROCKET_X3 } +frame BOM6C { light ROCKET_X3 } +frame BOM6D { light ROCKET_X3 } +frame BOM6E { light ROCKET_X3 } +frame BOM6F { light ROCKET_X2 } +frame BOM6G { light ROCKET_X2 } +frame BOM6H { light ROCKET_X2 } +frame BOM6I { light ROCKET_X2 } +frame BOM6j { light ROCKET_X2 } +frame BOM6K { light ROCKET_X1 } +frame BOM6L { light ROCKET_X1 } +frame BOM6M { light ROCKET_X1 } +frame BOM6N { light ROCKET_X1 } +frame BOM6O { light ROCKET_X1 } +frame BOM6P { light ROCKET_X1 } +frame BOM6Q { light ROCKET_X1 } +frame BOM6R { light ROCKET_X1 } +frame BOM6S { light ROCKET_X1 } +frame BOM6T { light ROCKET_X1 } } object ModernRocket { frame MROK { light ROCKET } -frame BOM2A { light ROCKET_X3 } -frame BOM2B { light ROCKET_X3 } -frame BOM2C { light ROCKET_X3 } -frame BOM2D { light ROCKET_X3 } -frame BOM2E { light ROCKET_X3 } -frame BOM2F { light ROCKET_X2 } -frame BOM2G { light ROCKET_X2 } -frame BOM2H { light ROCKET_X2 } -frame BOM2I { light ROCKET_X2 } -frame BOM2j { light ROCKET_X2 } -frame BOM2K { light ROCKET_X1 } -frame BOM2L { light ROCKET_X1 } -frame BOM2M { light ROCKET_X1 } -frame BOM2N { light ROCKET_X1 } -frame BOM2O { light ROCKET_X1 } -frame BOM2P { light ROCKET_X1 } -frame BOM2Q { light ROCKET_X1 } -frame BOM2R { light ROCKET_X1 } -frame BOM2S { light ROCKET_X1 } -frame BOM2T { light ROCKET_X1 } -frame BOM2U { light ROCKET_X1 } -frame BOM2V { light ROCKET_X1 } +frame BOM4 { light ROCKET_X1 } +frame BOM5 { light ROCKET_X3 } } object ModernGrenade { -frame BOM2A { light ROCKET_X3 } -frame BOM2B { light ROCKET_X3 } -frame BOM2C { light ROCKET_X3 } -frame BOM2D { light ROCKET_X3 } -frame BOM2E { light ROCKET_X3 } -frame BOM2F { light ROCKET_X2 } -frame BOM2G { light ROCKET_X2 } -frame BOM2H { light ROCKET_X2 } -frame BOM2I { light ROCKET_X2 } -frame BOM2j { light ROCKET_X2 } -frame BOM2K { light ROCKET_X1 } -frame BOM2L { light ROCKET_X1 } -frame BOM2M { light ROCKET_X1 } -frame BOM2N { light ROCKET_X1 } -frame BOM2O { light ROCKET_X1 } -frame BOM2P { light ROCKET_X1 } -frame BOM2Q { light ROCKET_X1 } -frame BOM2R { light ROCKET_X1 } -frame BOM2S { light ROCKET_X1 } -frame BOM2T { light ROCKET_X1 } -frame BOM2U { light ROCKET_X1 } -frame BOM2V { light ROCKET_X1 } +frame BOM4 { light ROCKET_X1 } +frame BOM5 { light ROCKET_X3 } } object SeekerFlare @@ -248,7 +214,7 @@ flickerlight PLASMA_X4 object BD_Plasmaball { - frame COIL { light PLASMABALL } +frame COIL { light PLASMABALL } frame PEXPA { light PLASMA_X1 } frame PEXPB { light PLASMA_X1 } frame PEXPC { light PLASMA_X1 } @@ -328,11 +294,6 @@ flickerlight YPLASMA_4 chance 0.4 } -object PlasmaRailBall -{ -//frame PEXP { light PLASMARAIL } -} - // BFG pointlight BFGBALL { @@ -383,19 +344,48 @@ flickerlight BFGBALL_X5 object BD_BFGBall { frame BFGB { light BFGBALL } - frame BFGB { light BFGBALL } - frame COIXA { light BFGBALL_X1 } - frame COIXB { light BFGBALL_X2 } - frame COIXC { light BFGBALL_X3 } - frame COIXD { light BFGBALL_X4 } - frame COIXE { light BFGBALL_X5 } - frame COIXF { light BFGBALL_X4 } - frame COIXG { light BFGBALL_X4 } - frame COIXH { light BFGBALL_X3 } - frame COIXI { light BFGBALL_X3 } - frame COIXJ { light BFGBALL_X2 } - frame COIXK { light BFGBALL_X1 } + frame BFGXA { light BFGBALL_X1 } + frame BFGXB { light BFGBALL_X2 } + frame BFGXC { light BFGBALL_X3 } + frame BFGXD { light BFGBALL_X4 } + frame BFGXE { light BFGBALL_X5 } + frame BFGXF { light BFGBALL_X4 } + frame BFGXG { light BFGBALL_X4 } + frame BFGXH { light BFGBALL_X3 } + frame BFGXI { light BFGBALL_X3 } + frame BFGXJ { light BFGBALL_X2 } + frame BFGXK { light BFGBALL_X1 } +} + +flickerlight BFGRailBall_Hold +{ + color 0.1 1.0 0.1 + size 28 + secondarySize 30 + chance 0.1 +} + +Object BFGRailBall_Hold +{ + frame PEXP { light BFGRailBall_Hold } +} + +object BFGRailBall +{ + frame PEXPA { light BFGBALL_X1 } + frame PEXPB { light BFGBALL_X2 } + frame PEXPC { light BFGBALL_X3 } + frame PEXPD { light BFGBALL_X4 } + frame PEXPE { light BFGBALL_X5 } + frame PEXPF { light BFGBALL_X4 } + frame PEXPG { light BFGBALL_X4 } + frame PEXPH { light BFGBALL_X3 } + frame PEXPI { light BFGBALL_X3 } + frame PEXPJ { light BFGBALL_X2 } + frame PEXPK { light BFGBALL_X2 } + frame PEXPL { light BFGBALL_X1 } + frame PEXPM { light BFGBALL_X1 } } object ModernBFGBall @@ -455,7 +445,7 @@ flickerlight ALTBFG_X4 } -object BFGExtra +object BD_BFGExtra { frame PEXPA { light BFGBALL_X1 } frame PEXPB { light BFGBALL_X2 } @@ -577,46 +567,29 @@ object BD_DoomImpBall // Cacodemon fireball flickerlight CACOBALL { - color 0.1 0.1 1.0 + color 0.3 0.1 1.0 size 56 - secondarySize 64 + secondarySize 58 chance 0.5 + dontlightself 1 } -flickerlight CACOBALL_X1 -{ - color 0.1 0.4 0.9 - size 72 - secondarySize 80 - chance 0.25 -} - -flickerlight CACOBALL_X2 -{ - color 0.0 0.1 0.6 - size 88 - secondarySize 96 - chance 0.25 -} - -flickerlight CACOBALL_X3 +pulselight XCACOBALL { - color 0.0 0.0 0.3 - size 104 - secondarySize 112 - chance 0.25 + color 0.3 0.1 1.0 + size 58 + secondarySize 0 + interval 1 + dontlightself 1 } object BD_CacodemonBall { - frame CABA { light CACOBALL } + frame ELBA { light CACOBALL } + //frame ELBA { light CACOBALL1 } - frame CABXA { light CACOBALL_X1 } - frame CABXB { light CACOBALL_X1 } - frame CABXC { light CACOBALL_X2 } - frame CABXD { light CACOBALL_X2 } - frame CABXE { light CACOBALL_X3 } - frame CABXF { light CACOBALL_X3 } + frame ELBX { light XCACOBALL } + //frame ELBX { light XCACOBALL1 } } // Baron / Hell Knight fireball @@ -1105,17 +1078,6 @@ object BD_Column } -// Short tech lamp -flickerlight SMALLLAMP -{ - color 0.8 0.8 1.0 - size 48 - secondarySize 52 - chance 0.01 - offset 0 58 0 - dontlightself 1 -} - object BD_TechLamp2 { frame BLP2A { light BIGLAMP } @@ -1706,79 +1668,64 @@ object BD_BlueArmor } -pointlight ROCKET + +// Doom Teleport fog +pointlight TFOGA { - color 1.0 0.7 0.0 + color 0.4 1.0 0.4 size 56 } -flickerlight ROCKET_X1 +pointlight TFOGB { - color 1.0 0.7 0.0 - size 64 - secondarySize 72 - chance 0.3 + color 0.4 1.0 0.4 + size 50 } -flickerlight ROCKET_X2 +pointlight TFOGC { - color 0.5 0.1 0.0 - size 80 - secondarySize 88 - chance 0.3 + color 0.4 1.0 0.4 + size 50 } -flickerlight ROCKET_X3 +pointlight TFOGD { - color 0.3 0.0 0.0 - size 96 - secondarySize 104 - chance 0.3 + color 0.4 1.0 0.4 + size 46 } - -// Doom Teleport fog -flickerlight DTFOG1 +pointlight TFOGE { color 0.4 1.0 0.4 - size 56 - secondarySize 64 - chance 0.4 + size 40 } -flickerlight DTFOG2 +pointlight TFOGF { color 0.4 1.0 0.4 - size 40 - secondarySize 48 - chance 0.4 + size 32 } -flickerlight DTFOG3 +pointlight TFOGG { color 0.4 1.0 0.4 size 24 - secondarySize 32 - chance 0.4 } -flickerlight DTFOG4 +pointlight TFOGH { color 0.4 1.0 0.4 - size 10 - secondarySize 16 - chance 0.4 + size 16 } object BD_TeleportFog { - frame TFOGA { light DTFOG1 } - frame TFOGB { light DTFOG2 } - frame TFOGC { light DTFOG2 } - frame TFOGD { light DTFOG2 } - frame TFOGE { light DTFOG3 } - frame TFOGF { light DTFOG4 } - frame TFOGI { light DTFOG4 } - frame TFOGJ { light DTFOG3 } + frame TFOGA { light TFOGA } + frame TFOGB { light TFOGB } + frame TFOGC { light TFOGC } + frame TFOGD { light TFOGD } + frame TFOGE { light TFOGE } + frame TFOGF { light TFOGF } + frame TFOGG { light TFOGG } } diff --git a/SNDINFO.txt b/SNDINFO.txt index f3bfd416..a2ff2926 100644 --- a/SNDINFO.txt +++ b/SNDINFO.txt @@ -1,3 +1,4 @@ + /// MENU SOUNDS $alias menu/choose weapons/ricochet // Choose a menu item @@ -126,29 +127,11 @@ $limit gibs/gibbed 6 misc/flyloop "sounds/flyloop.ogg" $limit misc/flyloop 10 -// Item Pickup Sounds - -pickups/berserk BERSPKUP -ammo/clip CLIPPKUP -ammo/clipbox CBOXPKUP -ammo/shells SHELPKUP -ammo/rockets ROCKPKUP -ammo/cells CELLPKUP - -pickups/chaingun CHGNPKUP -pickups/rocketlauncher RLANDRAW -pickups/plasmarifle PLSDRAW -pickups/bfg BFGDRAW - - - - /////////////////////// /////// MONSTERS ////// /////////////////////// -world/torch DSTORCH gibs/metalgib DSMETALB $random gibs/cybergibs { gibs/metalgib gibs/metalgib gibs/meatland } @@ -183,6 +166,8 @@ chainguy/death1 dcpodth1 chainguy/death2 dcpodth2 chainguy/death3 dcpodth3 +electric/hum elcthum1 + ////////////////////////// //// ITEMS & OBJECTS ///// @@ -195,6 +180,13 @@ chainguy/death3 dcpodth3 glasscrack glascrck +world/torch DSTORCH + +$random world/heartbeat { hbeat1 hbeat2 hbeat3 } +hbeat1 hbeat1 +hbeat2 hbeat2 +hbeat3 hbeat3 + $random spark { spark1 spark2 spark3 } spark1 "sounds/decorations/spark1.ogg" spark2 "sounds/decorations/spark2.ogg" @@ -227,7 +219,6 @@ pickups/invulnerability INVUPKUP pickups/invisibility INVSPKUP pickups/googles GGLSPKUP pickups/allmap AMAPPKUP -//berserk is in WEAPONS wad! pickups/armor0 ARM0PKUP pickups/armor1 ARM1PKUP pickups/armor2 ARM2PKUP @@ -237,3 +228,15 @@ pickups/radsuit SUITPKUP pickups/backpack BKPKPKUP $alias misc/p_pkup pickups/allmap misc/k_pkup CARDPKUP + +pickups/berserk BERSPKUP +ammo/clip CLIPPKUP +ammo/clipbox CBOXPKUP +ammo/shells SHELPKUP +ammo/rockets ROCKPKUP +ammo/cells CELLPKUP + +pickups/chaingun CHGNPKUP +pickups/rocketlauncher RLANDRAW +pickups/plasmarifle PLSDRAW +pickups/bfg BFGDRAW \ No newline at end of file diff --git a/Sounds/elcthum.ogg b/Sounds/elcthum.ogg new file mode 100644 index 00000000..51d1ac7a Binary files /dev/null and b/Sounds/elcthum.ogg differ diff --git a/Sounds/elcthum1.ogg b/Sounds/elcthum1.ogg new file mode 100644 index 00000000..eb1e5f13 Binary files /dev/null and b/Sounds/elcthum1.ogg differ diff --git a/Sounds/hbeat1.ogg b/Sounds/hbeat1.ogg new file mode 100644 index 00000000..e8403ea9 Binary files /dev/null and b/Sounds/hbeat1.ogg differ diff --git a/Sounds/hbeat2.ogg b/Sounds/hbeat2.ogg new file mode 100644 index 00000000..21f2f301 Binary files /dev/null and b/Sounds/hbeat2.ogg differ diff --git a/Sounds/hbeat3.ogg b/Sounds/hbeat3.ogg new file mode 100644 index 00000000..ebdc3b2c Binary files /dev/null and b/Sounds/hbeat3.ogg differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTNA0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTNA0.png new file mode 100644 index 00000000..de656e42 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTNA0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTNB0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTNB0.png new file mode 100644 index 00000000..2a1af392 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTNB0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTNC0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTNC0.png new file mode 100644 index 00000000..b3fa7c69 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTNC0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTND0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTND0.png new file mode 100644 index 00000000..cf21273a Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTND0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTNE0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTNE0.png new file mode 100644 index 00000000..d7beea5b Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTNE0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTNF0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTNF0.png new file mode 100644 index 00000000..d69e8290 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTNF0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTNG0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTNG0.png new file mode 100644 index 00000000..b558f46c Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTNG0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/CLTNH0.png b/Sprites/MONSTERS/Cacodemon/electroball/CLTNH0.png new file mode 100644 index 00000000..d03aad80 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/CLTNH0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAA0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAA0.png index be2e4dd1..0def7f22 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAA0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAA0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAB0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAB0.png index 5fbdd631..b857d01a 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAB0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAB0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAC0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAC0.png index 3dd52592..ecbf3f68 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAC0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAC0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAD0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAD0.png index fb357e36..6f466b10 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAD0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAD0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAE0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAE0.png index 92b8f5f9..10980b86 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAE0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAE0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAF0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAF0.png index 004427c4..6b6336dd 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAF0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAF0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAG0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAG0.png index 1589b9f7..71da2813 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAG0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAG0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAH0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAH0.png index f4aa1acb..da3d8e07 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAH0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAH0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAI0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAI0.png index d8d27026..704d8dfb 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAI0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAI0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAJ0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAJ0.png index 63e7a3da..acf01288 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAJ0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAJ0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAK0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAK0.png index f3344c04..e82310d8 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAK0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAK0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAL0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAL0.png index db5b2d7d..4a738c1c 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAL0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAL0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAM0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAM0.png index 11ac7a8c..ff440177 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAM0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAM0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAN0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAN0.png index 0989e4d2..2808ecb5 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAN0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAN0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBAO0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBAO0.png index f09d11a8..74e6fa47 100644 Binary files a/Sprites/MONSTERS/Cacodemon/electroball/ELBAO0.png and b/Sprites/MONSTERS/Cacodemon/electroball/ELBAO0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXA0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXA0.png new file mode 100644 index 00000000..aa2f82b6 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXA0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXB0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXB0.png new file mode 100644 index 00000000..07a27de8 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXB0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXC0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXC0.png new file mode 100644 index 00000000..c022977a Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXC0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXD0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXD0.png new file mode 100644 index 00000000..21c729a0 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXD0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXE0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXE0.png new file mode 100644 index 00000000..c7896363 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXE0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXF0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXF0.png new file mode 100644 index 00000000..bd14b924 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXF0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXG0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXG0.png new file mode 100644 index 00000000..a4150a3f Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXG0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXH0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXH0.png new file mode 100644 index 00000000..0d2fe9c6 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXH0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXI0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXI0.png new file mode 100644 index 00000000..4a611c00 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXI0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXJ0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXJ0.png new file mode 100644 index 00000000..2316c9ca Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXJ0.png differ diff --git a/Sprites/MONSTERS/Cacodemon/electroball/ELBXK0.png b/Sprites/MONSTERS/Cacodemon/electroball/ELBXK0.png new file mode 100644 index 00000000..dafa6e62 Binary files /dev/null and b/Sprites/MONSTERS/Cacodemon/electroball/ELBXK0.png differ diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PA0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PA0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PA0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PA0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PB0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PB0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PB0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PB0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PC0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PC0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PC0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PC0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PD0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PD0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PD0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PD0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PE0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PE0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PE0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PE0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PF0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PF0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PF0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PF0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PG0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PG0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PG0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PG0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/PL4PH0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PH0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/PL4PH0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/PL4PH0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL2A0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2A0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL2A0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2A0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL2B0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2B0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL2B0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2B0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL2C0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2C0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL2C0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2C0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL2D0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2D0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL2D0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2D0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL2E0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2E0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL2E0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2E0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL2F0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2F0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL2F0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL2F0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL4A0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL4A0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL4A0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL4A0.png diff --git a/Sprites/OBJECTS/HeadsOnaStick/POL4B0.png b/Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL4B0.png similarity index 100% rename from Sprites/OBJECTS/HeadsOnaStick/POL4B0.png rename to Sprites/OBJECTS/DecorativeVictims/HeadsOnaStick/POL4B0.png diff --git a/Sprites/OBJECTS/HeartColumn/BHACA0.png b/Sprites/OBJECTS/HeartColumn/BHACA0.png new file mode 100644 index 00000000..bced1b45 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACA0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACB0.png b/Sprites/OBJECTS/HeartColumn/BHACB0.png new file mode 100644 index 00000000..c9d51c56 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACB0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACC0.png b/Sprites/OBJECTS/HeartColumn/BHACC0.png new file mode 100644 index 00000000..d3d81e02 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACC0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACD0.png b/Sprites/OBJECTS/HeartColumn/BHACD0.png new file mode 100644 index 00000000..5b72fb45 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACD0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACE0.png b/Sprites/OBJECTS/HeartColumn/BHACE0.png new file mode 100644 index 00000000..8ef304a2 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACE0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACF0.png b/Sprites/OBJECTS/HeartColumn/BHACF0.png new file mode 100644 index 00000000..b24dc9f5 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACF0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACG0.png b/Sprites/OBJECTS/HeartColumn/BHACG0.png new file mode 100644 index 00000000..22697004 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACG0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACH0.png b/Sprites/OBJECTS/HeartColumn/BHACH0.png new file mode 100644 index 00000000..81f43e0d Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACH0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACI0.png b/Sprites/OBJECTS/HeartColumn/BHACI0.png new file mode 100644 index 00000000..64712b47 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACI0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACJ0.png b/Sprites/OBJECTS/HeartColumn/BHACJ0.png new file mode 100644 index 00000000..6506220d Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACJ0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACK0.png b/Sprites/OBJECTS/HeartColumn/BHACK0.png new file mode 100644 index 00000000..feb1f51a Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACK0.png differ diff --git a/Sprites/OBJECTS/HeartColumn/BHACL0.png b/Sprites/OBJECTS/HeartColumn/BHACL0.png new file mode 100644 index 00000000..3fa28be4 Binary files /dev/null and b/Sprites/OBJECTS/HeartColumn/BHACL0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/BTR2A0.png b/Sprites/OBJECTS/OtherObjects/BTR2A0.png new file mode 100644 index 00000000..6a6a97be Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/BTR2A0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/TRE2B0.png b/Sprites/OBJECTS/OtherObjects/BTR2B0.png similarity index 100% rename from Sprites/OBJECTS/OtherObjects/TRE2B0.png rename to Sprites/OBJECTS/OtherObjects/BTR2B0.png diff --git a/Sprites/OBJECTS/OtherObjects/TRE2C0.png b/Sprites/OBJECTS/OtherObjects/BTR2C0.png similarity index 100% rename from Sprites/OBJECTS/OtherObjects/TRE2C0.png rename to Sprites/OBJECTS/OtherObjects/BTR2C0.png diff --git a/Sprites/OBJECTS/OtherObjects/TRE2D0.png b/Sprites/OBJECTS/OtherObjects/BTR2D0.png similarity index 100% rename from Sprites/OBJECTS/OtherObjects/TRE2D0.png rename to Sprites/OBJECTS/OtherObjects/BTR2D0.png diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBA0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBA0.png new file mode 100644 index 00000000..58f7add7 Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBA0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBB0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBB0.png new file mode 100644 index 00000000..0d539fbb Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBB0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBC0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBC0.png new file mode 100644 index 00000000..cb90575c Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBC0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBD0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBD0.png new file mode 100644 index 00000000..3a4fce64 Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBD0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBE0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBE0.png new file mode 100644 index 00000000..3f16c9e6 Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBE0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBF0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBF0.png new file mode 100644 index 00000000..d65ea9c7 Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBF0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBG0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBG0.png new file mode 100644 index 00000000..b1581df7 Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBG0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBH0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBH0.png new file mode 100644 index 00000000..e8db7ab6 Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBH0.png differ diff --git a/Sprites/OBJECTS/OtherObjects/leaf/LEFBI0.png b/Sprites/OBJECTS/OtherObjects/leaf/LEFBI0.png new file mode 100644 index 00000000..3eeacf9d Binary files /dev/null and b/Sprites/OBJECTS/OtherObjects/leaf/LEFBI0.png differ diff --git a/Sprites/SFX/BPRTB0.png b/Sprites/SFX/BPRTB0.png deleted file mode 100644 index 581e9df4..00000000 Binary files a/Sprites/SFX/BPRTB0.png and /dev/null differ diff --git a/Sprites/SFX/BPRTC0.png b/Sprites/SFX/BPRTC0.png deleted file mode 100644 index 6d93f1e4..00000000 Binary files a/Sprites/SFX/BPRTC0.png and /dev/null differ diff --git a/Sprites/SFX/BPRTD0.png b/Sprites/SFX/BPRTD0.png deleted file mode 100644 index 6c9d703a..00000000 Binary files a/Sprites/SFX/BPRTD0.png and /dev/null differ diff --git a/Sprites/SFX/BPRTE0.png b/Sprites/SFX/BPRTE0.png deleted file mode 100644 index a51f31b7..00000000 Binary files a/Sprites/SFX/BPRTE0.png and /dev/null differ diff --git a/Sprites/SFX/BPRTF0.png b/Sprites/SFX/BPRTF0.png deleted file mode 100644 index d256b7b7..00000000 Binary files a/Sprites/SFX/BPRTF0.png and /dev/null differ diff --git a/Sprites/SFX/BPRTG0.png b/Sprites/SFX/BPRTG0.png deleted file mode 100644 index 474bb7b1..00000000 Binary files a/Sprites/SFX/BPRTG0.png and /dev/null differ diff --git a/Sprites/SFX/BPRTH0.png b/Sprites/SFX/BPRTH0.png deleted file mode 100644 index 3d0020f8..00000000 Binary files a/Sprites/SFX/BPRTH0.png and /dev/null differ diff --git a/TRNSLATE.txt b/TRNSLATE.txt index eed3df76..a52719b0 100644 --- a/TRNSLATE.txt +++ b/TRNSLATE.txt @@ -22,6 +22,10 @@ GreenBloodyScorched = "0:4=5:8","9:12=105:111","13:15=105:111","16:31=105:111"," //Cacpdemon fleshy-colored gibs CacoGibs = "0:4=48:79","5:8=48:79","9:12=48:79","13:15=48:79","16:47=48:79","48:79=48:79","80:111=48:79","112:127=48:79","128:151=48:79","152:159=48:79","160:167=48:79","168:191=48:79","208:223=48:79","224:231=48:79","232:235=48:79","236:239=48:79","248:249=48:79","250:254=48:79","255:255=48:79" +/*//red to blue +BlueBlood = "0:250=%[0.00,0.00,0.39]:[0.30,0.43,2.00]" +//red to green +GreenBlood = "0:255=%[0.00,0.00,0.00]:[0.02,1.65,0.10]"*/ //red to blue BlueBlood = "16:47=194:207", "168:191=196:207", "232:235=240:246" @@ -36,7 +40,7 @@ GreenPlasma = "192:207=112:127", "240:247=122:127" YellowPlasma = "192:207 = 224:231", "240:247 = 232:235" //debris -DebrisStone = "0:255 = 105:111" //dark-grey +DebrisStone = "0:255=%[0.00,0.00,0.00]:[0.61,0.61,0.61]" //dark-grey DebrisWood = "0:255 = 73:79" //brown DebrisMarble1 = "0:255 = 152:159" //pale green DebrisMarble2 = "0:255 = 96:105" //medium grey diff --git a/Z_BDoom/BD_monster.zc b/Z_BDoom/BD_monster.zc index 55edc4b2..11f1bf99 100644 --- a/Z_BDoom/BD_monster.zc +++ b/Z_BDoom/BD_monster.zc @@ -108,27 +108,59 @@ void BD_Gibs() A_SpawnItemEx("Gib_liver", frandom(-4,4),frandom(-4,4),frandom(8,28),vel.x*frandom(0.3,0.8),vel.y*frandom(0.3,0.8),frandom(3,5), 0, SXF_ABSOLUTEVELOCITY | SXF_SETTARGET | SXF_TRANSFERTRANSLATION, 128); A_SpawnItemEx("Gib_kidneys", frandom(-4,4),frandom(-4,4),frandom(8,28),vel.x*frandom(0.3,0.8),vel.y*frandom(0.3,0.8),frandom(3,5), 0, SXF_ABSOLUTEVELOCITY | SXF_SETTARGET | SXF_TRANSFERTRANSLATION, 128); - A_SpawnItemEx("Gib_Hand", frandom(6,4),frandom(-4,4),frandom(35,40), vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10), 0, SXF_ABSOLUTEVELOCITY | SXF_SETTARGET | SXF_TRANSFERTRANSLATION, 32); - A_SpawnItemEx("Gib_Hand", frandom(6,4),frandom(-4,4),frandom(35,40), vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10), 0, SXF_ABSOLUTEVELOCITY | SXF_SETTARGET | SXF_TRANSFERTRANSLATION, 32); - A_SpawnItemEx("Gib_Leg", frandom(6,4),frandom(-4,4),frandom(10,12), vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10), 0, SXF_ABSOLUTEVELOCITY | SXF_SETTARGET | SXF_TRANSFERTRANSLATION, 32); - A_SpawnItemEx("Gib_Leg", frandom(6,4),frandom(-4,4),frandom(10,12), vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10), 0, SXF_ABSOLUTEVELOCITY | SXF_SETTARGET | SXF_TRANSFERTRANSLATION, 32); - A_SpawnItemEx("Gib_head", frandom(-2,2),frandom(-2,2),frandom(42,48),vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10), 0, SXF_ABSOLUTEVELOCITY | SXF_SETTARGET | SXF_TRANSFERTRANSLATION, 32); + let hand = Gib_Hand( Spawn("Gib_Hand",(pos.x+frandom(6,4),pos.y+frandom(-4,4),pos.z+frandom(35,40))) ); + if (hand) { + hand.gibtype = GetClassName(); + hand.vel = (vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10)); + hand.target = self; + hand.translation = translation; + } + let hand1 = Gib_Hand( Spawn("Gib_Hand",(pos.x+frandom(6,4),pos.y+frandom(-4,4),pos.z+frandom(35,40))) ); + if (hand1) { + hand1.gibtype = GetClassName(); + hand1.vel = (vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10)); + hand1.target = self; + hand1.translation = translation; + } + let leg = Gib_Leg( Spawn("Gib_Leg",(pos.x+frandom(6,4),pos.y+frandom(-4,4),pos.z+frandom(10,12))) ); + if (leg) { + leg.gibtype = GetClassName(); + leg.vel = (vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10)); + leg.target = self; + leg.translation = translation; + } + let leg1 = Gib_Leg( Spawn("Gib_Leg",(pos.x+frandom(6,4),pos.y+frandom(-4,4),pos.z+frandom(10,12))) ); + if (leg1) { + leg1.gibtype = GetClassName(); + leg1.vel = (vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10)); + leg1.target = self; + leg1.translation = translation; + } + let head = Gib_head( Spawn("Gib_head",(pos.x+frandom(-2,2),pos.y+frandom(-2,2),pos.z+frandom(42,48))) ); + if (head) { + head.gibtype = GetClassName(); + head.vel = (vel.x*frandom(0.35,1.2), vel.y*frandom(0.35,1.2),frandom(5,10)); + head.target = self; + head.translation = translation; + } - actor torso1 = Spawn("Gib_Torso1",(pos.x+frandom(-8,8),pos.y+frandom(-8,8),pos.z+frandom(18,28))); - torso1.vel.x = vel.x*frandom(0.7,0.95); - torso1.vel.y = vel.y*frandom(0.7,0.95); - torso1.vel.z = vel.z*frandom(0.7,0.95); - torso1.target = self; - torso1.scale.x = randompick(-1,1); - torso1.translation = translation; - actor torso2 = Spawn("Gib_Torso2",(pos.x,pos.y+frandom(-8,8),pos.z+frandom(12,24))); - torso2.vel.x = vel.x*frandom(0.7,0.95); - torso2.vel.y = vel.y*frandom(0.7,0.95); - torso2.vel.z = vel.z*frandom(0.7,0.95); - torso2.target = self; - torso2.translation = translation; - if (torso1.scale.x == -1) //horizontal scale is randomized but synced between pieces of the same torso, so it doesn't look like 2 left halves or 2 right halves - torso2.scale.x = -1; + let torso1 = Gib_Torso1(Spawn("Gib_Torso1",(pos.x+frandom(-8,8),pos.y+frandom(-8,8),pos.z+frandom(18,28)))); + if (torso1) { + torso1.gibtype = GetClassName(); + torso1.vel = (vel.x*frandom(0.7,0.95),vel.y*frandom(0.7,0.95),vel.z*frandom(0.7,0.95)); + torso1.target = self; + torso1.scale.x = randompick(-1,1); + torso1.translation = translation; + } + let torso2 = Gib_Torso2(Spawn("Gib_Torso2",(pos.x,pos.y+frandom(-8,8),pos.z+frandom(12,24)))); + if (torso2) { + torso2.gibtype = GetClassName(); + torso1.vel = (vel.x*frandom(0.7,0.95),vel.y*frandom(0.7,0.95),vel.z*frandom(0.7,0.95)); + torso2.target = self; + torso2.translation = translation; + if (torso1.scale.x == -1) //horizontal scale is randomized but synced between pieces of the same torso, so it doesn't look like 2 left halves or 2 right halves + torso2.scale.x = -1; + } } states @@ -146,9 +178,11 @@ states } #### # 1 { if (vel.length() ~== 0) { - if (bdoom_blood) - A_SpawnItemEx("AniBloodPool",0,0,0,0,0,0,0,SXF_SETTARGET|SXF_USEBLOODCOLOR); - A_SpawnItemEx("CorpseFlySpawner",0,0,0,0,0,0,0,SXF_SETMASTER); + if (bdoom_blood) { + let a = AniBloodPool(Spawn("AniBloodPool",(pos.x,pos.y,floorz))); + if (a) a.translation = BloodTranslation; + } + A_SpawnItemEx("CorpseFlySpawner",flags:SXF_SETMASTER); return ResolveState("DeathEnd"); } return ResolveState(null); @@ -267,6 +301,8 @@ states /*This is spawned by a burning monster and receives a "fire" translation from it, while the monster receives "scorched" translation. As this fades out, it creates an effect of smooth transition from burning to scorched. +In case of plasma death, this receives normal translation, while the monster becomes +scorched. */ Class TranslatedBurningBody : Actor { diff --git a/Z_BDoom/bd_blood.zc b/Z_BDoom/bd_blood.zc index 186ae4f2..5700a295 100644 --- a/Z_BDoom/bd_blood.zc +++ b/Z_BDoom/bd_blood.zc @@ -2,7 +2,7 @@ Class BloodGeneral : DebrisGeneral abstract { string bloodfloor; string bloodceiling; -string bcolor; +name bcolor; static const name bsprite[] = { "YBL7","YBL8","YBL9" }; Default { @@ -76,30 +76,30 @@ I could just use BloodTranslation directly for all cases, but that makes the spr */ override void PostBeginPlay() { if (!bdoom_blood || !target){ - self.destroy(); + destroy(); return; } if (target is "BDoomMonster") { let trg = BDoomMonster(target); if (trg.burning){ - self.destroy(); + destroy(); return; } } if (target.bloodcolor) { //obvious green prevalence if (target.bloodcolor.G > 4*(target.bloodcolor.R + target.bloodcolor.B)) { - bcolor = "green"; + bcolor = 'green'; A_SetTranslation("GreenBlood"); } //obvious blue prevalence else if (target.bloodcolor.B > 4*(target.bloodcolor.R + target.bloodcolor.G)) { - bcolor = "blue"; + bcolor = 'blue'; A_SetTranslation("BlueBlood"); } //obvious red prevalence. bloodcolor = 0 means default bloodcolor (68 00 00 or specified in MAPINFO). If changed in MAPINFO, it'll be a mismatch, but whaddaya do else if (target.bloodcolor.R > 4*(target.bloodcolor.B + target.bloodcolor.G) || target.bloodcolor == 0) { - bcolor = "red"; + bcolor = 'red'; } //if played with another wad that contains very peculiar blood, like yellow or purple, translate sprites along with it. They won't spawn decals themselves. else @@ -111,27 +111,26 @@ override void PostBeginPlay() { virtual void BD_BloodDecal() { - if (bcolor ~== "blue") + if (bcolor == 'blue') A_SprayDecal("BloodSplatBlue",32); - else if (bcolor ~== "green") + else if (bcolor == 'green') A_SprayDecal("BloodSplatGreen",32); - else if (bcolor ~== "red") + else if (bcolor == 'red') A_SprayDecal("BloodSplatRed",32); //no way to transfer shade to decals, so blood of colors other than red/blue/green won't produce decals } states { spawn: - TNT1 AAA 0 NoDelay; //override hardcoded frame-skipping behavior for Blood + TNT1 AAA 0; //override hardcoded frame-skipping behavior for Blood TNT1 A 0 { A_FaceTarget(0,270,180,0); A_SetScale(scale.x*randompick(-1,1)*frandom(0.7,1.2),scale.y*randompick(-1,1)*frandom(0.7,1.2)); roll = random(0,359); self.sprite = GetSpriteIndex(bsprite[random(0,2)]); - return resolvestate("BD_Blood"); - return resolvestate(null); + return resolvestate("BloodDo"); } - BD_Blood: + BloodDo: #### ABCDEFGHIJKLMNOPQRS 1 { if (waterlevel > 0) return ResolveState("Water"); @@ -150,7 +149,7 @@ states return ResolveState("CeilingSplat"); if (floorpic == skyflatnum || pos.z != floorz){ - self.destroy(); + destroy(); return ResolveState(null); } if (CheckLandingSize(24)) @@ -160,7 +159,7 @@ states if (CheckLandingSize(12)) scale*=0.5; if (CheckLandingSize(6)){ - self.destroy(); + destroy(); return ResolveState(null); } A_QueueCorpse(); @@ -174,7 +173,7 @@ states #### # 1 { if (waterlevel > 0){ - self.destroy(); + destroy(); return ResolveState(null); } if (CheckWater()) @@ -188,7 +187,7 @@ states TNT1 A 0 { //console.printf("ceiling"); if (ceilingpic == skyflatnum) { - self.destroy(); + destroy(); return ResolveState(null); } if (CheckLandingSize(24,1)) @@ -198,23 +197,23 @@ states if (CheckLandingSize(12,1)) scale*=0.5; if (CheckLandingSize(6,1)) { - self.destroy(); + destroy(); return ResolveState(null); } - A_SpawnItemEx("CeilingSplat",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL|SXF_TRANSFERRENDERSTYLE|SXF_TRANSFERSCALE|SXF_TRANSFERPOINTERS); + A_SpawnItemEx("CeilingSplat",flags:SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL|SXF_TRANSFERRENDERSTYLE|SXF_TRANSFERSCALE|SXF_TRANSFERPOINTERS); return ResolveState(null); } stop; Raise: TNT1 A 0 { - self.sprite = GetSpriteIndex(bsprite[random(0,2)]); + sprite = GetSpriteIndex(bsprite[random(0,2)]); roll = random(0,359); FlyBack(); } #### SRQPONMLKJIHGFEDCBA 1 { A_FadeOut(0.07); if (target && Distance3D(target) < 16) { - self.destroy(); + destroy(); return ResolveState(null); } return ResolveState(null); @@ -240,10 +239,10 @@ states { spawn: TNT1 A 1 NoDelay { - A_SetScale(scale.x*randompick(-1,1)*frandom(0.7,1.2),scale.y*randompick(-1,1)*frandom(0.7,1.2)); + scale.x*= (randompick(-1,1)*frandom(0.7,1.2)); + scale.y*= (randompick(-1,1)*frandom(0.7,1.2)); SetOrigin((pos.x,pos.y,floorz),0); return resolvestate("Death"); - return resolvestate(null); } stop; } @@ -297,7 +296,7 @@ states TNT1 A 0 { vel.z = -3.7; } BLOD ZZZZZZZZZZZZZZZZZZZZZZZZZ 1 { if (waterlevel > 0) { - self.destroy(); + destroy(); return ResolveState(null); } if (pos.z <= floorz) @@ -319,6 +318,7 @@ states Class AniBloodPool : BloodGeneral { +bool instant; //if true, the blood pool will instantly go through all the phases and reach the required size — for decorative purposes such as Heart Column, where animation is unneeded, but checking for overhand may still important double psize; Default { +NOINTERACTION @@ -334,15 +334,28 @@ Default { } override void PostBeginPlay() { if (waterlevel > 0) { - self.destroy(); + destroy(); return; } double pscale; pscale = frandom(0.23,0.35); psize = pscale*22; A_SetScale(pscale*frandom(0.8,1.1)*randompick(-1,1),pscale*frandom(0.8,1.1)*randompick(-1,1)); - super.PostBeginPlay(); - } + + + if (target && target.bloodcolor) { + if (target.bloodcolor.G > 4*(target.bloodcolor.R + target.bloodcolor.B)) + A_SetTranslation("GreenBlood"); + else if (target.bloodcolor.B > 4*(target.bloodcolor.R + target.bloodcolor.G)) + A_SetTranslation("BlueBlood"); + else if (target.bloodcolor.R > 4*(target.bloodcolor.B + target.bloodcolor.G) || target.bloodcolor == 0) + bcolor = 'red'; + else + Translation = target.BloodTranslation; + } + + Super.PostBeginPlay(); + } override void Tick () { super.Tick(); if (CheckWater()) @@ -363,7 +376,7 @@ states Spawn: TNT1 A 0 NoDelay { if (InvalidFloor()) { - self.destroy(); + destroy(); return ResolveState(null); } SetOrigin((pos.x,pos.y,floorz+0.5),0); @@ -371,6 +384,8 @@ states return A_Jump(128,"Spawn1"); } 0000 ABCDEFGHI 2 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -379,6 +394,8 @@ states return ResolveState(null); } 0000 JKLMNOPQRSTU 2 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -387,6 +404,8 @@ states return ResolveState(null); } 0000 VWXYZ 3 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -395,6 +414,8 @@ states return ResolveState(null); } 0001 ABCD 3 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -405,6 +426,8 @@ states goto rest; Spawn1: 1000 ABCDEFGHI 2 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -413,6 +436,8 @@ states return ResolveState(null); } 1000 JKLMNOPQRSTU 2 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -421,6 +446,8 @@ states return ResolveState(null); } 1000 VWXYZ 3 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -429,6 +456,8 @@ states return ResolveState(null); } 1001 ABCD 3 { + if (instant) + A_SetTics(0); if (InvalidFloor()) return ResolveState("Rest"); if (Checkwater()) @@ -440,7 +469,7 @@ states Rest: #### # 1 { if (waterlevel > 0) { - self.destroy(); + destroy(); return ResolveState(null); } if (Checkwater()) @@ -455,8 +484,8 @@ states -//decorative blood for gory decorations -Class BloodSpill : CeilingBloodDrop +//decorative blood drop for gory decorations +Class DecorBloodDrop : CeilingBloodDrop { Default { scale 0.15; @@ -469,7 +498,7 @@ states TNT1 A 0 { vel.z = -3.7; } BLOD ZZZZZZZZZZZZZZZZZZZZZZZZZ 1 { if (waterlevel > 0) { - self.destroy(); + destroy(); return ResolveState(null); } if (pos.z <= floorz) @@ -494,11 +523,11 @@ Default { } override void BD_BloodDecal() { - if (bcolor ~== "blue") + if (bcolor == 'blue') A_SprayDecal("BloodSprayBlue",32); - else if (bcolor ~== "green") + else if (bcolor == 'green') A_SprayDecal("BloodSprayGreen",32); - else if (bcolor ~== "red") + else if (bcolor == 'red') A_SprayDecal("BloodSprayRed",32); } states @@ -510,7 +539,7 @@ states roll = random(0,359); self.sprite = GetSpriteIndex(bsprite[random(0,2)]); } - BD_Blood: + BloodDo: #### ABCDEFGHIJKLMNOPQRS 1 { if (waterlevel > 0) return ResolveState("Fade"); @@ -536,7 +565,7 @@ Default { } override void PostBeginPlay() { if (waterlevel > 0) { - self.destroy(); + destroy(); return; } super.PostBeginPlay(); @@ -562,7 +591,7 @@ Class NeckSpurt : BloodSpurt { override void PostBeginPlay() { if (waterlevel > 0) { - self.destroy(); + destroy(); return; } super.PostBeginPlay(); @@ -577,7 +606,7 @@ Class FrontalSpurt : BloodSpurt { override void PostBeginPlay() { if (waterlevel > 0) { - self.destroy(); + destroy(); return; } super.PostBeginPlay(); @@ -626,10 +655,10 @@ Default { } states { - BD_Blood: + BloodDo: #### ABCDEFGHIJKKLLMMNNOOOPPPQQQRRRSSS 1 { if (waterlevel > 0) { - self.destroy(); + destroy(); return ResolveState(null); } vel.z = clamp(vel.z - 0.3,-2.0,10.0); diff --git a/Z_BDoom/bd_gibs.zc b/Z_BDoom/bd_gibs.zc index cbe9d3f0..3c8142d8 100644 --- a/Z_BDoom/bd_gibs.zc +++ b/Z_BDoom/bd_gibs.zc @@ -16,6 +16,7 @@ class Gibs_General : DebrisGeneral abstract { //int etimer; +name gibtype; double brot; //how much to adjust rotation during flight double bmass; //the mass the gib gains after it lands bool bflat; //whether it needs to get FLATSPRITE when resting @@ -150,7 +151,7 @@ static const string GibSprite[] = }; override void GibBeginPlay() { - self.sprite = GetSpriteIndex(GibSprite[random(0,4)]); + sprite = GetSpriteIndex(GibSprite[random(0,4)]); bmass = 50; brot = random(14,17)*randompick(-1,1); A_QueueCorpse(); @@ -172,6 +173,8 @@ override void GibFall() { } override void Tick() { Super.Tick(); + if (level.isFrozen()) + return; if (!bNOBLOOD && vel.length() <= 2 && !bdoom_blood && pos.z == floorz && waterlevel == 0) A_SpawnItemEx("BD_GibBloodPool",frandom(-2,2),frandom(-2,2),0, 0,0,0, 0,SXF_TRANSFERPOINTERS,80); //spawn blood trail on the floor when pushed around by explosions //if for some reason the switch into raising animation failed, just fade out the gib @@ -334,7 +337,7 @@ override void GibBeginPlay() bmass = 80; bflat = true; brot = frandom(4,7)*randompick(1,-1); - self.sprite = GetSpriteIndex("GIX2"); + sprite = GetSpriteIndex("GIX2"); } } @@ -346,7 +349,7 @@ Default { override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("GIX1"); + sprite = GetSpriteIndex("GIX1"); } } @@ -358,7 +361,7 @@ Default { override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("GIX3"); + sprite = GetSpriteIndex("GIX3"); } } @@ -370,7 +373,7 @@ Default { override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("GIX4"); + sprite = GetSpriteIndex("GIX4"); } } @@ -385,38 +388,38 @@ override void GibBeginPlay() super.GibBeginPlay(); bmass = 70; brot = frandom(6,9)*randompick(1,-1); - if (target){ - if (target is "BD_Zombieman") { - self.sprite = GetSpriteIndex("HND1"); + //if (target){ + if (gibtype == 'BD_Zombieman') { + sprite = GetSpriteIndex("HND1"); restframe = random(1,2); } - else if (target is "BD_ShotgunGuy") { - self.sprite = GetSpriteIndex("HND2"); + else if (gibtype == 'BD_ShotgunGuy') { + sprite = GetSpriteIndex("HND2"); restframe = 1; } - else if (target is "BD_ChaingunGuy") { - self.sprite = GetSpriteIndex("HND3"); + else if (gibtype == 'BD_ChaingunGuy') { + sprite = GetSpriteIndex("HND3"); restframe = random(1,2); } - else if (target is "BD_DoomImp") { - self.sprite = GetSpriteIndex("HND4"); + else if (gibtype == 'BD_DoomImp') { + sprite = GetSpriteIndex("HND4"); restframe = random(1,2); } - else if (target is "BD_WolfensteinSS") { - self.sprite = GetSpriteIndex("HND5"); + else if (gibtype == 'BD_WolfensteinSS') { + sprite = GetSpriteIndex("HND5"); restframe = 1; } - else if (target is "BD_Demon") { - self.sprite = GetSpriteIndex("HND8"); + else if (gibtype == 'BD_Demon' || gibtype == 'BD_Spectre') { + sprite = GetSpriteIndex("HND8"); restframe = 1; - if (target is "BD_Spectre") + if (gibtype == 'BD_Spectre') A_SetRenderstyle(0.5,STYLE_OptFuzzy); } else { self.destroy(); return; } - } + //} } } @@ -428,29 +431,29 @@ Default { } override void GibBeginPlay() { - if (target){ - if (target is "BD_Zombieman") { - self.sprite = GetSpriteIndex("LEG1"); + //if (target){ + if (gibtype == 'BD_Zombieman') { + sprite = GetSpriteIndex("LEG1"); self.frame = random(0,1); restframe = random(2,4); } - else if (target is "BD_ShotgunGuy") { - self.sprite = GetSpriteIndex("LEG2"); + else if (gibtype == 'BD_ShotgunGuy') { + sprite = GetSpriteIndex("LEG2"); self.frame = random(0,1); restframe = random(2,4); } - else if (target is "BD_ChaingunGuy") { - self.sprite = GetSpriteIndex("LEG3"); + else if (gibtype == 'BD_ChaingunGuy') { + sprite = GetSpriteIndex("LEG3"); self.frame = 0; restframe = random(1,2); } - else if (target is "BD_DoomImp") { - self.sprite = GetSpriteIndex("LEG4"); + else if (gibtype == 'BD_DoomImp') { + sprite = GetSpriteIndex("LEG4"); self.frame = random(0,1); restframe = random(2,3); } - else if (target is "BD_WolfensteinSS") { - self.sprite = GetSpriteIndex("LEG5"); + else if (gibtype == 'BD_WolfensteinSS') { + sprite = GetSpriteIndex("LEG5"); self.frame = 0; restframe = random(1,2); } @@ -458,7 +461,7 @@ override void GibBeginPlay() self.destroy(); return; } - } + //} bmass = 70; brot = frandom(5,8)*randompick(1,-1); } @@ -475,40 +478,40 @@ override void GibBeginPlay() super.GibBeginPlay(); bmass = 70; brot = frandom(8,12)*randompick(1,-1); - if (target){ - if (target is "BD_Zombieman") { - self.sprite = GetSpriteIndex("HED1"); + //if (target){ + if (gibtype == 'BD_Zombieman') { + sprite = GetSpriteIndex("HED1"); restframe = random(1,3); } - else if (target is "BD_ShotgunGuy") { - self.sprite = GetSpriteIndex("HED2"); + else if (gibtype == 'BD_ShotgunGuy') { + sprite = GetSpriteIndex("HED2"); restframe = random(1,2); } - else if (target is "BD_ChaingunGuy") { - self.sprite = GetSpriteIndex("HED3"); + else if (gibtype == 'BD_ChaingunGuy') { + sprite = GetSpriteIndex("HED3"); restframe = random(1,2); } - else if (target is "BD_DoomImp") { - self.sprite = GetSpriteIndex("HED4"); + else if (gibtype == 'BD_DoomImp') { + sprite = GetSpriteIndex("HED4"); restframe = random(1,2); } - else if (target is "BD_WolfensteinSS") { - self.sprite = GetSpriteIndex("HED5"); + else if (gibtype == 'BD_WolfensteinSS') { + sprite = GetSpriteIndex("HED5"); restframe = random(1,2); } - else if (target is "BD_Demon") { - self.sprite = GetSpriteIndex("HED8"); + else if (gibtype == 'BD_Demon' || gibtype == 'BD_Spectre') { + sprite = GetSpriteIndex("HED8"); restframe = 1; brot = frandom(3,4)*randompick(1,-1); bmass = 100; - if (target is "BD_Spectre") + if (gibtype == 'BD_Spectre') A_SetRenderstyle(0.5,STYLE_OptFuzzy); } else { self.destroy(); return; } - } + //} } } @@ -522,33 +525,33 @@ Default { override void GibBeginPlay() { A_QueueCorpse(); - if (target) { + //if (target) { brot = randompick(-1,1); //only used for underwater rotation - if (target is "BD_Zombieman") { - self.sprite = GetSpriteIndex("TR11"); + if (gibtype == 'BD_Zombieman') { + sprite = GetSpriteIndex("TR11"); finalframe = 3; restframe = 6; } - else if (target is "BD_ShotgunGuy") { - self.sprite = GetSpriteIndex("TR21"); + else if (gibtype == 'BD_ShotgunGuy') { + sprite = GetSpriteIndex("TR21"); finalframe = 3; restframe = 7; } - else if (target is "BD_ChainGunGuy") { - self.sprite = GetSpriteIndex("TR31"); + else if (gibtype == 'BD_ChainGunGuy') { + sprite = GetSpriteIndex("TR31"); finalframe = 4; restframe = 8; } - else if (target is "BD_DoomImp") { - self.sprite = GetSpriteIndex("TR41"); + else if (gibtype == 'BD_DoomImp') { + sprite = GetSpriteIndex("TR41"); finalframe = 3; restframe = 7; } - else if (target is "BD_WolfensteinSS") { //the SS soldier has only 1 torso set that is used as his death animation on the WolfesteinSS actor directly + else if (gibtype == 'BD_WolfensteinSS') { //the SS soldier has only 1 torso set that is used as his death animation on the WolfesteinSS actor directly self.destroy(); return; } - } + //} bmass = 200; } states @@ -605,32 +608,32 @@ Class Gib_Torso2 : Gib_Torso1 override void GibBeginPlay() { super.GibBeginPlay(); - if (target) { - if (target is "BD_Zombieman") { - self.sprite = GetSpriteIndex("TR12"); + //if (target) { + if (gibtype == 'BD_Zombieman') { + sprite = GetSpriteIndex("TR12"); finalframe = 3; restframe = 6; } - else if (target is "BD_ShotgunGuy") { - self.sprite = GetSpriteIndex("TR22"); + else if (gibtype == 'BD_ShotgunGuy') { + sprite = GetSpriteIndex("TR22"); finalframe = 3; restframe = 7; } - else if (target is "BD_ChainGunGuy") { - self.sprite = GetSpriteIndex("TR32"); + else if (gibtype == 'BD_ChainGunGuy') { + sprite = GetSpriteIndex("TR32"); finalframe = 3; restframe = 7; } - else if (target is "BD_DoomImp") { - self.sprite = GetSpriteIndex("TR42"); + else if (gibtype == 'BD_DoomImp') { + sprite = GetSpriteIndex("TR42"); finalframe = 3; restframe = 7; } - else if (target is "BD_WolfensteinSS") { + else if (gibtype == 'BD_WolfensteinSS') { self.destroy(); return; } - } + //} } } @@ -657,7 +660,7 @@ Default { } override void GibBeginPlay() { - self.sprite = GetSpriteIndex("EYE1"); + sprite = GetSpriteIndex("EYE1"); bmass = 40; brot = frandom(18,22)*randompick(1,-1); A_QueueCorpse(); @@ -679,7 +682,7 @@ Default { override void GibBeginPlay() { Super.GibBeginPlay(); - self.sprite = GetSpriteIndex("LGI1"); + sprite = GetSpriteIndex("LGI1"); bmass = 40; brot = frandom(14,20)*randompick(1,-1); } @@ -713,7 +716,7 @@ Class LS_shard : LS_Horn override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("LGI3"); + sprite = GetSpriteIndex("LGI3"); bmass = 30; } } @@ -727,7 +730,7 @@ Default { override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("LGI2"); + sprite = GetSpriteIndex("LGI2"); bmass = 50; } } @@ -739,7 +742,7 @@ class PainElementalHand : BasicMeatPiece override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("HND6"); + sprite = GetSpriteIndex("HND6"); restframe = 1; } } @@ -749,7 +752,7 @@ class PainElementalJaw : PainElementalHand override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("PAPP"); + sprite = GetSpriteIndex("PAPP"); } } @@ -758,7 +761,7 @@ class PainElementalHorn : PainElementalHand override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("PARP"); + sprite = GetSpriteIndex("PARP"); } } @@ -835,7 +838,7 @@ override void GibBeginPlay() { super.GibBeginPlay(); brot = -10; - self.sprite = GetSpriteIndex("HED7"); + sprite = GetSpriteIndex("HED7"); } override void GibFall () { @@ -851,7 +854,7 @@ override void GibBeginPlay() { super.GibBeginPlay(); brot = -5; - self.sprite = GetSpriteIndex("HND7"); + sprite = GetSpriteIndex("HND7"); roll = 45; } override void GibFall () @@ -868,7 +871,7 @@ Class CyberHandRight : CyberHandLeft override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("HND9"); + sprite = GetSpriteIndex("HND9"); brot = 5; roll = 0; } @@ -886,7 +889,7 @@ Class CyberLegLeft : CyberHandRight override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("LEG9"); + sprite = GetSpriteIndex("LEG9"); brot = -5; } } @@ -896,7 +899,7 @@ Class CyberLegRight : CyberHandLeft override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("LEG7"); + sprite = GetSpriteIndex("LEG7"); brot = 5; roll = 0; } @@ -914,7 +917,7 @@ Class CyberTorso1 : CyberHandRight override void GibBeginPlay() { super.GibBeginPlay(); - self.sprite = GetSpriteIndex("TRC1"); + sprite = GetSpriteIndex("TRC1"); brot = 8; } } @@ -924,7 +927,7 @@ Class CyberTorso2 : Gib_Torso1 override void GibBeginPlay() { A_QueueCorpse(); - self.sprite = GetSpriteIndex("TRC2"); + sprite = GetSpriteIndex("TRC2"); restframe = 4; restframe = 9; bmass = 600; @@ -945,7 +948,7 @@ Class CyberTorso3 : CyberTorso2 override void GibBeginPlay() { Super.GibBeginPlay(); - self.sprite = GetSpriteIndex("TRC3"); + sprite = GetSpriteIndex("TRC3"); } } @@ -962,7 +965,7 @@ override void GibBeginPlay() { super.GibBeginPlay(); brot = 7; - self.sprite = GetSpriteIndex("SPP1"); + sprite = GetSpriteIndex("SPP1"); restframe = 3; } override void GibFall() { @@ -990,7 +993,7 @@ override void GibBeginPlay() { super.GibBeginPlay(); brot = -7; - self.sprite = GetSpriteIndex("SPP1"); + sprite = GetSpriteIndex("SPP1"); scale.x *= -1; } } @@ -1001,7 +1004,7 @@ override void GibBeginPlay() { super.GibBeginPlay(); brot = randompick(-6,6); - self.sprite = GetSpriteIndex("SPP2"); + sprite = GetSpriteIndex("SPP2"); scale.x *= randompick(-1,1); } } @@ -1012,7 +1015,7 @@ override void GibBeginPlay() { super.GibBeginPlay(); brot = randompick(-5,5); - self.sprite = GetSpriteIndex("SPP3"); + sprite = GetSpriteIndex("SPP3"); } override void GibFall() { super.GibFall(); @@ -1029,7 +1032,7 @@ override void GibBeginPlay() bmass = 100; A_QueueCorpse(); roll = random(0,359); - self.sprite = GetSpriteIndex("TRP1"); + sprite = GetSpriteIndex("TRP1"); frame = random (0,2); brot = randompick(8,-8); A_SetScale(0.6); diff --git a/Z_BDoom/bd_main.zc b/Z_BDoom/bd_main.zc index cea70cf4..77c30a52 100644 --- a/Z_BDoom/bd_main.zc +++ b/Z_BDoom/bd_main.zc @@ -11,7 +11,6 @@ Default { DebrisGeneral.sfxtype "debris"; +ROLLSPRITE +BLOODLESSIMPACT //for debris that can bump into actors - +FIXMAPTHINGPOS //not sure it even does anything, hence the override +NOTAUTOAIMED +MISSILE //enters Death when it hits the floor +NOBLOCKMAP @@ -64,13 +63,11 @@ override void PostBeginPlay() override void Tick() { super.Tick(); - if(level.isFrozen()) - return; - if ( (sfxtype == 'debris' && !bdoom_debris) || - (sfxtype == 'flames' && !bdoom_flames) || - (sfxtype == 'blood' && !bdoom_blood) || - (sfxtype == 'gibs' && !bdoom_gibs) ) - { + if (!level.isFrozen() && + ((sfxtype == 'debris' &&!bdoom_debris) || + (sfxtype == 'flames' &&!bdoom_flames) || + (sfxtype == 'blood' && !bdoom_blood) || + (sfxtype == 'gibs' && !bdoom_gibs) )) { A_DeQueueCorpse(); destroy(); return; @@ -88,11 +85,14 @@ Class SmallDebris : DebrisGeneral abstract int wrot; bool landed; double dgravity; //fake gravity -bool removeonfall; +double dbreak; //how quickly to reduce horizontal speed of "landed" particles +bool removeonfall; //whether to remove immediately as it reaches the floor property dgravity : dgravity; property removeonfall : removeonfall; +property dbreak : dbreak; Default { SmallDebris.removeonfall true; + SmallDebris.dbreak 0; -MISSILE -RELATIVETOFLOOR +NOINTERACTION @@ -100,22 +100,30 @@ Default { smalldebris.dgravity 0.8; } override void Tick() { + if (!level.IsPointInLevel(pos)) { + destroy(); + return; + } super.tick(); - if (landed || level.isFrozen()) + if (level.isFrozen()) return; - vel.z-=dgravity; - if (pos.z <= floorz) { - if (removeonfall) { - self.destroy(); - return; - } - else { + if (pos.z > floorz) + vel.z-=dgravity; + else if (removeonfall) { + destroy(); + return; + } + else { + vel.z = 0; + vel.x *= dbreak; + vel.y *= dbreak; + if (vel.length() < 0.1) landed = true; + if (pos.z < floorz) SetOrigin((pos.x,pos.y,floorz),0); - bMOVEWITHSECTOR = true; - bRELATIVETOFLOOR = true; - } - } + bMOVEWITHSECTOR = true; + bRELATIVETOFLOOR = true; + } } } @@ -123,8 +131,8 @@ override void Tick() { Class Flare_General : DebrisGeneral abstract { name fcolor; //flare of the color; can be set as a property or externally -double fscale; //scale; used to when scale needs to be easily set externally from the lightsource -double falpha; //alpha; used to when scale needs to be easily set externally from the lightsource +double fscale; //scale; used to when scale needs to be easily set externally from the spawner +double falpha; //alpha; used to when scale needs to be easily set externally from the spawner property fcolor : fcolor; Default { DebrisGeneral.sfxtype "flames"; @@ -147,6 +155,8 @@ virtual void SetColor() { //fcolor is meant to be set by the actor that spawns t sprite = GetSpriteIndex("LENY"); else if (fcolor == 'tech') sprite = GetSpriteIndex("LENS"); //tech lamps use a completely different flare + else if (fcolor == 'cbra') + sprite = GetSpriteIndex("LENC"); //so do candelabras else { destroy(); return; @@ -171,7 +181,7 @@ Class BD_BaseFlare : Flare_General states { Spawn: - LENR A 0 NoDelay SetColor(); + TNT1 A 0 NoDelay SetColor(); #### # 1 bright; wait; } @@ -199,7 +209,7 @@ override void Tick() { states { Spawn: - LENR A 0 NoDelay { //this part makes sure the flare is aligned with the master, otherwise it tends to appear at the wrong place when spawned + TNT1 A 0 NoDelay { //this part makes sure the flare is aligned with the master, otherwise it tends to appear at the wrong place when spawned if (master) { SetOrigin(master.pos,0); vel = master.vel; @@ -443,7 +453,7 @@ states { Spawn: SMOK ABCDEFGHIJKLMNOPQ 2 NoDelay { - A_SpawnItemEx("BlackSmokeTrail",frandom(-2,2),frandom(-2,2),frandom(-2,2),0,0,0,0); + A_SpawnItemEx("BlackSmokeTrail",frandom(-2,2),frandom(-2,2),frandom(-2,2)); A_FadeOut(0.01); } wait; @@ -650,7 +660,7 @@ Class EnBulletPuff : BDoomPuff { //int hitangle; string hittex; //texture that was hit -string dtype; //debris type +name dtype; //debris type int rchance; //ricochet chance bool debris; //whether to spawn debris int smoke; //0 - none, 1 - directional, 2 - radial along the wall @@ -716,7 +726,7 @@ states || hittex.IndexOf("ZZWOLF5") >= 0 || hittex.IndexOf("ZZWOLF6") >= 0 || hittex.IndexOf("ZZWOLF7") >= 0 ) { decaltype = "BulletWchip"; - dtype = "wood"; + dtype = 'wood'; debris = true; smoke = 1; A_Playsound("bullet/wood",0,1.0,0,3); @@ -725,7 +735,7 @@ states || hittex.IndexOf("FLOOR7_2") >= 0 ) { decaltype = "BulletSchip"; - dtype = "marble"; + dtype = 'marble'; rchance = 20; debris = true; smoke = 2; @@ -733,7 +743,7 @@ states } else if ( hittex.IndexOf("BRICK") >= 0 || hittex.IndexOf("BIGBRIK1") >= 0 || hittex.IndexOf("BIGBRIK3") >= 0) { decaltype = "BulletSchip"; - dtype = "brick"; + dtype = 'brick'; rchance = 15; debris = true; smoke = 2; @@ -765,21 +775,21 @@ states || hittex.IndexOf("SP_FACE") >= 0 ) { decaltype = "Bulletchip"; - dtype = "bloody"; + dtype = 'bloody'; debris = true; smoke = 0; A_Playsound("bullet/body",0,1.0,0,3); } else if (hittex.IndexOf("SKIN") >= 0 || hittex.IndexOf("ZFACE") >= 0 ) { decaltype = "Bulletchip"; - dtype = "skin"; + dtype = 'skin'; debris = false; smoke = 0; A_Playsound("bullet/body",0,1.0,0,3); } else if (puffdata.HitType != TRACE_HitNone) { //BROWN GRAY CEMENT and the rest, stone seems like a good generic type decaltype = "Bulletchip"; - dtype = "stone"; + dtype = 'stone'; rchance = 25; debris = true; smoke = 2; @@ -827,38 +837,35 @@ states Class WallPart : SmallDebris { Default { + SmallDebris.removeonfall false; + SmallDebris.dbreak 0.8; -NOGRAVITY Renderstyle "Translucent"; alpha 1.0; - scale 0.1; + scale 0.16; smalldebris.dgravity 0.4; + translation "DebrisStone"; } override void PostBeginPlay() { super.PostBeginPlay(); wrot = random(8,14)*randompick(-1,1); - A_setScale(frandom(0.04,0.11),frandom(0.04,0.11)); - if (target && target is "EnBulletPuff") { - let puff = EnBulletPuff(target); - if (puff.dtype ~== "wood") { - A_SetTranslation("DebrisWood"); - A_setScale(frandom(0.07,0.18),frandom(0.04,0.08)); - } - else if (puff.dtype ~== "marble") { - if (random(0,1) == 1) - A_SetTranslation("DebrisMarble1"); - else - A_SetTranslation("DebrisMarble2"); - } - else if (puff.dtype ~== "brick") - A_SetTranslation("DebrisBrick"); - else if (puff.dtype ~== "bloody") - {} + scale*=frandom(0.8,1.2)*randompick(-1,1); + if (!target || !(target is "EnBulletPuff")) + return; + let puff = EnBulletPuff(target); + if (puff.dtype == 'wood') { + A_SetTranslation("DebrisWood"); + A_setScale(frandom(0.14,0.18),frandom(0.06,0.09)); + } + else if (puff.dtype == 'marble') { + if (random(0,1) == 1) + A_SetTranslation("DebrisMarble1"); else - A_SetTranslation("DebrisStone"); + A_SetTranslation("DebrisMarble2"); } - else - A_SetTranslation("DebrisStone"); + else if (puff.dtype == 'brick') + A_SetTranslation("DebrisBrick"); } states { @@ -866,15 +873,18 @@ states TNT1 A 0 NoDelay { if (target && target is "EnBulletPuff") { let puff = EnBulletPuff(target); - if (puff.dtype ~== "bloody") + if (puff.dtype == 'bloody') return ResolveState("Bloody"); } return ResolveState(null); } - BPRT AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 { - roll+=wrot; + BPRT AAAAAAAAAAAAAAAAAAAAAAAAA 1 { + A_FadeOut(0.005); + scale*=0.95; + if (pos.z > floorz) + roll+=wrot; } - stop; + wait; Bloody: TNT1 A 0 { A_SetScale(0.1,0.1); @@ -912,12 +922,8 @@ Default { Class RocketDebris : WallPart { Default { - smalldebris.dgravity 0.6; - } -override void PostBeginPlay() - { - super.PostBeginPlay(); - A_Setscale(frandom(0.19,0.22)*randompick(-1,1),frandom(0.19,0.22)*randompick(-1,1)); + smalldebris.dgravity 0.75; + scale 0.24; } } @@ -925,6 +931,8 @@ override void PostBeginPlay() Class RicochetSpark : SmallDebris { Default { + SmallDebris.removeonfall false; + SmallDebris.dbreak 0.9; renderstyle "Add"; alpha 1.0; radius 3; @@ -941,7 +949,10 @@ override Void PostBeginPlay() { states { Spawn: - SPRK A 1 bright NoDelay A_FadeOut(0.05); + SPRK A 1 bright { + A_FadeOut(0.03); + scale *= 0.95; + } loop; } } @@ -986,4 +997,37 @@ Default { inventory.amount 1; inventory.maxamount 9999; } +} + +Class SphereSpawner : Actor +{ +int langle; +int lpitch; +Default { + +NOINTERACTION + +FORCEXYBILLBOARD + } +override void PostBeginPlay() { + super.PostBeginPlay(); + langle = 0; + lpitch = -90; + } +states + { + Spawn: + TNT1 A 1 NoDelay { + while (langle <= 350) { + while (lpitch <= 90) { + FLineTraceData ltr; + LineTrace(langle,8,lpitch,TRF_THRUACTORS,data:ltr); + let vec = level.vec3diff (pos,ltr.hitlocation); + A_SpawnParticle("0000FF",SPF_FULLBRIGHT,100,1,0,vec.x,vec.y,vec.z); + lpitch+=10; + } + lpitch = -90; + langle+=10; + } + } + stop; + } } \ No newline at end of file diff --git a/Z_BDoom/m_Cacodemon.zc b/Z_BDoom/m_Cacodemon.zc index 29bbe92a..2f0228f0 100644 --- a/Z_BDoom/m_Cacodemon.zc +++ b/Z_BDoom/m_Cacodemon.zc @@ -171,11 +171,9 @@ states } } -Class CacoBlueTrail : Actor +Class CacoBlueTrail : Flare_General { Default { - +NOINTERACTION - +NOBLOCKMAP renderstyle "Add"; alpha 0.8; scale 0.1; @@ -201,7 +199,8 @@ Default { decal "Scorch"; renderstyle "Add"; alpha 1.0; - scale 0.2; + scale 0.17; + //seesound ""; } override void PostBeginPlay () { super.PostBeginPlay(); @@ -209,6 +208,7 @@ override void PostBeginPlay () { scale.y*= randompick(-1,1); roll = random(0,360); broll = random(6,8)*randompick(1,-1); + A_PlaySound("electric/hum",6,1.0,true,4); if (bdoom_debris) { let f = BD_ProjFlare(Spawn("BD_ProjFlare",pos)); f.fcolor = 'blue'; @@ -216,11 +216,15 @@ override void PostBeginPlay () { f.alpha = 0.3; f.master = self; - /*let f1 = BD_ProjFlare(Spawn("BD_ProjFlare",pos)); - f1.fcolor = 'red'; - f1.scale = (0.1,0.1); - f1.alpha = 0.85; - f1.master = self;*/ + let lt = CacoBallLightning(Spawn("CacoBallLightning",pos)); + if (!lt) return; + lt.master = self; + + let lt1 = CacoBallLightning(Spawn("CacoBallLightning",pos)); + if (!lt1) return; + lt1.master = self; + lt1.upward = true; + } } override void Tick () { @@ -244,32 +248,130 @@ States Spawn: ELBA ABCDEFGHIJKLMNO 2 bright NoDelay { roll+=broll; - /*if (bdoom_debris) { - A_SpawnItemEx("FirePiece_Cacodemon",frandom(-3,-6),frandom(-5,5),frandom(-5,5),0,0,0,failchance:96); - A_SpawnItemEx("FirePiece_Cacodemon",frandom(-3,-6),frandom(-5,5),frandom(-5,5),0,0,0,failchance:96); - }*/ } loop; Death: - TNT1 a 0 A_SetScale(1.0,1.0); - CABX ABCDEF 3 A_FadeOut(0.1); + TNT1 a 0 { + A_StopSound(6); + A_RemoveChildren(true,RMVF_EVERYTHING ); + if (bdoom_debris) { + for (int i = 8; i > 0; i--) + A_SpawnItemEx("CacoBallPiece",frandom(-6,6),frandom(-6,6),frandom(-6,6),frandom(-2,2),frandom(-2,2),frandom(2,4),failchance:16); + //for (int i = 12; i > 0; i--) + //A_CustomRailGun(0,0,"","0",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ,0,4,"NullPuff",random(0,360),random(0,360),range:24,sparsity:3.0,spawnclass:"CacoballRay"); + let f = BD_BaseFlare(Spawn("BD_BaseFlare",pos)); + f.fcolor = 'blue'; + f.scale = (0.24,0.24); + f.alpha = 0.8; + tracer = f; + } + } + ELBX ABCDEFGHIJK 2 bright NoDelay { + A_FadeOut(0.01); + if (tracer) { + tracer.scale*=0.9; + tracer.A_FadeOut(0.1); + } + roll+=broll; + } + TNT1 A 0 { + if(tracer) + tracer.destroy(); + } stop; } } -Class FirePiece_Cacodemon : Flare_General +Class CacoballRay : Flare_General { Default { - alpha 0.5; - scale 0.1; + alpha 0.8; + scale 0.02; + } +states + { + Spawn: + PEXP ABCDEF 1 bright A_FadeOut(0.0025); + PEXP GHIJKLM 2 bright A_FadeOut(0.0025); + stop; + } +} + +Class CacoBallLightning : Flare_General +{ +bool upward; +double ceilz; +double flrz; +Default { + +BRIGHT + renderstyle "Add"; + scale 0.12; + alpha 0.0; + } +override void Tick() { + super.Tick(); + if (level.IsFrozen()) + return; + if (!master) { + destroy(); + return; + } + /*if (alpha > 0) + A_PlaySound("electric/hum",6,1.0,true,1); + else + A_StopSound(6);*/ + ceilz = master.ceilingz; + flrz = master.floorz; + if (upward) { + scale.y = (pos.z - ceilz) * 0.00375; + if (ceilz < pos.z || ceilz - pos.z > 72 || master.ceilingpic == skyflatnum || random(0,15) > 1) + alpha = Clamp(alpha-0.025,0,0.5); + else { + alpha = Clamp(alpha+0.1,0,0.5); + A_PlaySound("spark",volume:0.8,attenuation:2); + let piece = CacoBallPiece(Spawn("CacoBallPiece",(pos.x+frandom(-3,3),pos.y+frandom(-3,3),ceilz-0.5))); + piece.vel = (frandom(-3,3),frandom(-3,3),0); + } + } + else { + scale.y = (pos.z - flrz) * 0.00375; + if (flrz > pos.z || pos.z - flrz > 44 || master.floorpic == skyflatnum || random(0,15) > 1) + alpha = Clamp(alpha-0.025,0,0.5); + else { + alpha = Clamp(alpha+0.1,0,0.5); + A_PlaySound("spark",volume:0.8,attenuation:2); + let piece = CacoBallPiece(Spawn("CacoBallPiece",(pos.x+frandom(-3,3),pos.y+frandom(-3,3),flrz+0.5))); + piece.vel = (frandom(-2,2),frandom(-2,2),frandom(2,4)); + } + } + } +states + { + Spawn: + TNT1 A 0 NoDelay { + if (master) { + SetOrigin(master.pos,false); + vel = master.vel; + } + } + Idle: + CLTN ABCDEFGH 2; + loop; + } +} + +Class CacoBallPiece : RicochetSpark +{ +Default { + alpha 1.0; + scale 0.08; } states { Spawn: - TNT1 A 2 NoDelay; - SPRK C 1 bright { - A_FadeOut(0.04); - scale*=0.9; + SPRK C 1 bright { + A_FadeOut(0.03); + scale *= 0.92; } wait; } diff --git a/Z_BDoom/m_ChaingunGuy.zc b/Z_BDoom/m_ChaingunGuy.zc index fa86f622..20fd5e9d 100644 --- a/Z_BDoom/m_ChaingunGuy.zc +++ b/Z_BDoom/m_ChaingunGuy.zc @@ -4,7 +4,7 @@ bool attacking; Default { Health 70; - gibhealth 50; + gibhealth 40; Radius 20; Height 56; Mass 100; diff --git a/Z_BDoom/o_DeadBodies.zc b/Z_BDoom/o_DeadBodies.zc index 81422e2a..f436b3bb 100644 --- a/Z_BDoom/o_DeadBodies.zc +++ b/Z_BDoom/o_DeadBodies.zc @@ -1,16 +1,18 @@ -Class BD_DeadBody : Actor +Class BD_DeadBody : Actor abstract { Default { - +NOINTERACTION - +MOVEWITHSECTOR + +NOBLOCKMAP } override void PostBeginPlay() { super.PostBeginPlay(); scale.x *= randompick(-1,1); if (!bdoom_blood) return; - for (int i = 0; i < 5; i++) - A_SpawnItemEx("BD_Bloodpool",random(-48,48),random(-48,48),floorz,flags:SXF_SETTARGET,failchance:32); + let a = AniBloodPool(Spawn("AniBloodPool",(pos.x,pos.y,floorz))); + if (a) { + a.instant = true; + a.translation = BloodTranslation; + } } } diff --git a/Z_BDoom/o_lightsources.zc b/Z_BDoom/o_lightsources.zc index 12b8a364..1de3e2c2 100644 --- a/Z_BDoom/o_lightsources.zc +++ b/Z_BDoom/o_lightsources.zc @@ -1,7 +1,12 @@ // Universal flare used by light sources Class BD_LightFlare : BD_BaseFlare { -private int timer; +private int timer; //used to perform flickering +bool flicker; //whether to flicker +property flicker : flicker; +Default { + BD_LightFlare.flicker true; + } override void Tick() { if (!master) { destroy(); @@ -10,18 +15,19 @@ override void Tick() { super.tick(); if (level.IsFrozen()) return; - timer++; + if (flicker) + timer++; if (timer >= 5) { timer = 0; - if (bdoom_flames) { + if (bdoom_flames) { //falpha and scale are used as a base to make sure they stay close to original values while changing randomly if (fcolor != 'tech') - alpha = falpha*frandom(0.7,1.0); + alpha = falpha*frandom(0.7,1.0); //for torches I do flickering by changing the alpha else - A_SetScale(fscale*frandom(0.9,1.0)); + A_SetScale(fscale*frandom(0.9,1.0)); //for lamps I change the size of the flare instead (due to different graphics of the flare this looks better) } } } -override void SetColor() { +override void SetColor() { //see bd.main.zc super.SetColor(); A_SetScale(fscale); A_SetRenderStyle(falpha,Style_ADD); @@ -38,7 +44,7 @@ Class BD_LightSource : Actor abstract { BD_LightFlare flare; double fspawnheight; //flare actor spawn height -name fcolor; //flare actor color (red, green, blue, yellow) +name fcolor; //torch color and flare actor color (red, green, blue, yellow) double fscale; //flare actor scale double falpha; //flare actor alpha @@ -108,12 +114,6 @@ void SpawnParticle() { } states { - Spawn: - TNT1 A 0 NoDelay SetLightSprite(); - #### A 0 A_Jump(256,random(1,25)); - Idle: - #### ABCDEFGHIJKLMNOPQRSTUVWXYZ random(2,3) SpawnParticle; - loop; Loadsprites: TTRG ABCDEFGHIJKLMNOPQRSTUVWXYZ 0; TTRB ABCDEFGHIJKLMNOPQRSTUVWXYZ 0; @@ -121,7 +121,12 @@ states STRG ABCDEFGHIJKLMNOPQRSTUVWXYZ 0; STRB ABCDEFGHIJKLMNOPQRSTUVWXYZ 0; STRR ABCDEFGHIJKLMNOPQRSTUVWXYZ 0; - stop; + Spawn: + TNT1 A 0 NoDelay SetLightSprite(); + #### A 0 A_Jump(256,random(1,25)); + Idle: + #### ABCDEFGHIJKLMNOPQRSTUVWXYZ random(2,3) SpawnParticle; + loop; } } @@ -166,7 +171,7 @@ Default { } override void PostBeginPlay() { super.PostBeginPlay(); - pspawnheight = fspawnheight-7; + pspawnheight = fspawnheight-7; //due to different shape of the flame on small torches the particles need to spawn a bit lower } override void SetLightSprite() { if (fcolor == 'green') @@ -226,7 +231,7 @@ Default BD_LightSource.fspawnheight 55.5; BD_LightSource.fscale 0.045; BD_LightSource.falpha 0.6; - BD_LightSource.fcolor "cbra"; + BD_LightSource.fcolor "cbra"; //candelabra uses special graphics with three flares; easier than actually spawning three and rotating them Radius 16; Height 60; scale 0.19; @@ -290,7 +295,7 @@ Default { +VULNERABLE +NOBLOOD +DONTTHRUST - BD_LightSource.fcolor "tech"; + BD_LightSource.fcolor "tech"; //lamps also use a separate type of flare with a lens effect BD_LightSource.falpha 1.0; BD_LightSource.fscale 0.5; health 100; @@ -302,7 +307,11 @@ Default { } override void PostBeginPlay() { super.PostBeginPlay(); - A_PlaySound("lamp/hum",looping:true,attenuation:5); + A_PlaySound("lamp/hum",looping:true,attenuation:4); + } +override void Tick() { + super.Tick(); + bVULNERABLE = bdoom_killableobjects; } void LampBreak() { if (flare) @@ -334,10 +343,10 @@ states return ResolveState(null); } loop; - Spark: + Spark: //lamps destroyed by explosions still flicker, which spawns some sparks, the dynamic light and the flare returns for a bit as well #### Y random(5,30) { if (flare) { - flare.A_SetRenderStyle(falpha,Style_Add); + flare.A_SetRenderStyle(falpha,Style_Add); //the flare isn't removed/respawned, only its alpha is set to none when the lamp is off A_PlaySound("spark",volume:0.5,attenuation:3); for (int i = 7; i > 0; i--) A_SpawnItemEx("ElectroSpark",frandom(-1.5,1.5),frandom(-1.5,1.5),fspawnheight+frandom(-1.5,1.5),frandom(-1,1),frandom(-1,1),frandom(1,3),failchance:48); diff --git a/Z_BDoom/o_misc.zc b/Z_BDoom/o_misc.zc index 81c8fa8c..4d9292dc 100644 --- a/Z_BDoom/o_misc.zc +++ b/Z_BDoom/o_misc.zc @@ -1,10 +1,50 @@ -//***************************\\ -//***************************\\ -//****** O B J E C T S ******\\ -//***************************\\ -//***************************\\ +////////////////// +// MISC OBJECTS +////////////////// -//// EXPLOSIVE BARREL +//****** +// TECH +//****** + +// TELEPORT FOG + +Class BD_TeleportFog : TeleportFog replaces TeleportFog +{ +BD_BaseFlare flare; +Default { + +FORCEXYBILLBOARD + +BRIGHT + renderstyle "Add"; + alpha 0.8; + } +override void PostBeginPlay() { + super.PostBeginPlay(); + scale.x*=randompick(-1,1); + if (bdoom_flames) { + flare = BD_BaseFlare(Spawn("BD_BaseFlare",(pos.x,pos.y,pos.z+32))); + flare.A_SetScale(0.3); + flare.A_SetRenderstyle(0.4,Style_ADD); + flare.fcolor = 'green'; + } + } +override void Tick() { + super.Tick(); + if (level.isFrozen()) + return; + if (flare) + flare.A_SetScale(0.3 - 0.03*frame); + } +states + { + Spawn: + TFOG ABCDCBAABABCDCDEFGHIJ 3; + TNT1 A 0 { if (flare) flare.destroy(); } + stop; + } +} + + +// Explosive Barrel Class EBarrelPiece : SmallDebris { @@ -151,200 +191,214 @@ states } } -/* + //****** // HELL //****** +// Eye floating over a candle - -Actor BD_EvilEye replaces EvilEye +Class BD_EvilEye : EvilEye replaces EvilEye { -+NOINTERACTION states { Spawn: - TNT1 A 0 NoDelay A_spawnitem("BD_Candlestick") - TNT1 A 0 A_spawnitem("FloatingEye",0,10) - stop + TNT1 A -1 NoDelay { + Spawn("BD_Candlestick",pos); + Spawn("FloatingEye",(pos.x,pos.y,pos.z+10)); + } + stop; } } -Actor FloatingEye +Class FloatingEye : Actor { -renderstyle translucent -+VISIBILITYPULSE -+FORCEXYBILLBOARD -+SOLID -+NOGRAVITY -+RELATIVETOFLOOR -+FLOATBOB -floatbobstrength .75 -states - { - Spawn: - SEYE ABCDEF 4 bright - loop +BD_BaseFlare flare; +Default { + renderstyle "Translucent"; + +NOINTERACTION + +VISIBILITYPULSE + +FORCEXYBILLBOARD + +NOGRAVITY + +RELATIVETOFLOOR +MOVEWITHSECTOR + +FLOATBOB + +BRIGHT + floatbobstrength 0.5; } -} - -Actor BD_FloatingSkull : FloatingSkull replaces FloatingSkull -{ -+FLOATBOB -floatbobstrength 0.5 -states - { - Spawn: - TNT1 A 0 NoDelay A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX A 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX B 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX C 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX D 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX E 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX F 4 bright - TNT1 A 0 A_CheckSight(3) - TNT1 A 0 A_JumpIf(GetCVAR("bdoom_Flames")==0,2) - TNT1 A 0 A_SpawnItemEx("FirePiece",random(-10,10),random(-10,10),random(56,60), 0,0,1,0) - FSKX A 4 bright - goto Spawn +override void Tick() { + super.Tick(); + if (level.isFrozen()) + return; + if (!flare && bdoom_flames) { + flare = BD_BaseFlare(Spawn("BD_BaseFlare",(pos.x,pos.y,pos.z+32))); + flare.fcolor = 'green'; + flare.A_SetRenderstyle(0.4,Style_ADD); + flare.A_SetScale(0.3); + flare.bFLOATBOB = true; + flare.FloatBobPhase = FloatBobPhase; + flare.floatbobstrength = floatbobstrength; + } + if (!bdoom_flames && flare) + flare.destroy(); } -} - -Actor SkullSmoke : DebrisGeneral -{ -bouncetype None -+NOGRAVITY -+DONTSPLASH -+NOINTERACTION -renderstyle ADD -alpha 0.5 -scale .04 states { Spawn: - SPRK A 1 bright A_FadeOut(0.03) - TNT1 A 0 A_SetScale(scalex*0.9,scaley*0.9) - loop + SEYE ABCDEF 4; + loop; } } -actor BD_HeartColumn : HeartColumn replaces HeartColumn +// Floating glowing rock with a skull + +Class BD_FloatingSkull : FloatingSkull replaces FloatingSkull { +Default { + +FLOATBOB + floatbobstrength 0.3; + } states { Spawn: - COL5 B 14 - TNT1 A 0 A_CheckSight(2) - TNT1 A 0 A_SpawnItemEx("DecorativeBloodDrop",0,0,random(32,36), random(1,2),0,random(1,3), random(-0,360), 0,200) - COL5 A 9 - loop + FSKX ABCDEF random(4,5) { + if (bdoom_flames && random(0,10) > 3) { + let fpart = BD_FireParticle(Spawn("BD_FireParticle",(pos.x+frandom(-8,8),pos.y+frandom(-8,8),pos.z+frandom(54,57)))); + fpart.vel = (frandom(-0.15,0.15),frandom(-0.15,0.15),frandom(0.2,0.5)); + fpart.fcolor = 'red'; + } + } + loop; } } -Actor DecorativeBloodDrop : BD_Blood -{ -states - { - Death: - stop - } -} +// Column with a beating heart on it -Actor BD_BigTree : BigTree replaces BigTree +Class BD_HeartColumn : HeartColumn replaces HeartColumn { +BD_LightFlare flare; +override void PostBeginPlay() { + super.PostBeginPlay(); + let a = AniBloodPool(Spawn("AniBloodPool",(pos.x,pos.y,floorz))); + if (a) a.instant = true; + } +override void Tick() { + super.Tick(); + if (level.isFrozen()) + return; + if (!flare && bdoom_flames) { + flare = BD_LightFlare(Spawn("BD_LightFlare",(pos.x,pos.y,pos.z+38))); + flare.master = self; + flare.fcolor = 'red'; + flare.falpha = 0.3; + flare.fscale = 0.1; + flare.flicker = false; + } + if (bdoom_flames && flare) + flare.SetOrigin((pos.x,pos.y,pos.z+38),true); + if (!bdoom_flames && flare) + flare.destroy(); + } states { Spawn: - TNT1 A 0 NoDelay A_SetScale(scalex*randompick(-1,1),scaley) - TNT1 A 0 A_Jump(256,1,2,3,4) - TRE2 A -1 - stop - TRE2 B -1 - stop - TRE2 C -1 - stop - TRE2 D -1 - stop + TNT1 A 0 NoDelay A_jump(256,1,12); + Idle: + BHAC ABCD 3; + BHAC E 3 A_PlaySound("world/heartbeat",5,0.8,attenuation:3); + BHAC FGHIJKL 3; + loop; } } -Actor BD_TorchTree : TorchTree replaces TorchTree +// Big brown tree + +Class BD_BigTree : BigTree replaces BigTree { +override void PostBeginPlay() { + super.PostBeginPlay(); + scale.x*=randompick(-1,1); + } states { Spawn: - TNT1 A 0 NoDelay A_SetScale(scalex*randompick(-1,1),scaley) - TNT1 A 0 A_Jump(256,1,2) - TRE1 A -1 - stop - TRE1 B -1 - stop + BTR2 A 0 noDelay { frame = random(0,3); } + BTR2 # 20 { + if (bdoom_debris && frame != 0 && random(0,10) > 9) + A_SpawnItemEx("BigTreeLeaf",frandom(-20,20),frandom(-20,20),height+frandom(-4,4),frandom(-2,2),frandom(-2,2),0); + } + wait; + load: + BTR2 ABCD 0; + stop; } } - -//// TELEPORT FOG - -Actor BD_TeleportFog : TeleportFog replaces TeleportFog +Class BigTreeLeaf : SmallDebris { -+FORCEXYBILLBOARD -renderstyle Add -alpha .8 +Default { + scale 0.5; + +NOINTERACTION + SmallDebris.Removeonfall false; + SmallDebris.dbreak 0.95; + } +override void PostBeginPlay() { + super.PostBeginPlay(); + scale*=frandom(0.9,1.1); + scale.x*=randompick(-1,1); + scale.y*=randompick(-1,1); + dgravity = frandom(0.002,0.005); + } +override void Tick() { + if (!level.isFrozen()) { + vel.x*=0.99; + vel.y*=0.99; + } + super.Tick(); + } states { Spawn: - TNT1 A 0 NoDelay A_SetScale(scalex*randompick(-1,1),scaley) - TNT1 A 0 A_SpawnItem("TeleportGreenFlare", 0, 28) - TFOG ABCDCBABABCDCDEFGHIJ 3 bright - stop + LEFB ABCDEFGHI 4 { + if (abs(vel.x) < 0.5 && abs(vel.y) < 0.5 && random(1,3) > 2) { + vel.x = Clamp (frandom(-1.5,1.5),-1.5,1.5); + vel.y = Clamp (frandom(-1.5,1.5),-1.5,1.5); + } + if (pos.z <= floorz+1) + return ResolveState("Land"); + return ResolveState(null); + } + loop; + Land: + LEFB ABCDEFGHI 5 { + if (vel.length() < 0.03) { + bFLATSPRITE = true; + return ResolveState("End"); + } + return ResolveState(null); + } + loop; + End: + LEFB # 10 A_FadeOut(0.05); + loop; } } + -Actor TeleportGreenFlare : Flare_General +// Small burnt tree + +Class BD_TorchTree : TorchTree replaces TorchTree { -+FORCEXYBILLBOARD states { + Load: + TRE1 AB 0; Spawn: - TNT1 A 0 NoDelay A_JumpIf(GetCVAR("bdoom_Flames")==0,"Null") - TNT1 A 0 A_Jump(256,1,2,3) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright - LENG A 3 bright A_SetScale(0.37,0.37) - LENG A 3 bright A_SetScale(0.35,0.35) - LENG A 3 bright A_SetScale(0.3,0.3) - LENG A 3 bright A_SetScale(0.25,0.25) - LENG A 3 bright A_SetScale(0.2,0.2) - LENG A 3 bright A_SetScale(0.1,0.1) - stop + TRE1 A 0 NoDelay { + scale.x*=randompick(-1,1); + frame = random(0,1); + } + TRE1 # -1; + stop; } } \ No newline at end of file diff --git a/DECORATE/Objects/BD_DEAD.txt b/Z_BDoom/o_victims.zc similarity index 96% rename from DECORATE/Objects/BD_DEAD.txt rename to Z_BDoom/o_victims.zc index 28f2a305..54e69d68 100644 --- a/DECORATE/Objects/BD_DEAD.txt +++ b/Z_BDoom/o_victims.zc @@ -4,19 +4,33 @@ //***************************\\ //***************************\\ -Actor BD_SmallBloodpool : BD_Bloodpool replaces SmallBloodPool + +Class BD_BaseVictim : Actor { -scale .35 +Default { + +DONTTHRUST + +DONTFALL + } +override void PostBeginPlay() { + super.PostBeginPlay(); + scale.x *= randompick(-1,1); + if (!bdoom_blood) + return; + let a = AniBloodPool(Spawn("AniBloodPool",(pos.x,pos.y,floorz))); + if (a) a.instant = true; + } +override void Tick() { + super.Tick(); + bSHOOTABLE = bdoom_killableobjects; + } } - - - +/* // ******************** // A head impaled on a stick // ******************** -Actor BD_HeadOnAStick : HeadOnAStick replaces HeadOnAStick +Class BD_HeadOnAStick : BD_BaseVictim replaces HeadOnAStick { +SHOOTABLE +DONTBLAST diff --git a/Z_BDoom/w_BFG.zc b/Z_BDoom/w_BFG.zc index cb54d136..1e339b1d 100644 --- a/Z_BDoom/w_BFG.zc +++ b/Z_BDoom/w_BFG.zc @@ -346,17 +346,11 @@ states } -Class BD_BFGBall : FastProjectile //replaces BFGBall +Class BD_BFGBall : BFGBall //replaces BFGBall { -Default { - Radius 13; - Height 8; - Speed 25; - Damage 100; - Projectile; +Class trailactor; +Default { damagetype "BFGSplash"; - missiletype "BFGTrail"; - missileheight 8; +BLOODLESSIMPACT +FORCEXYBILLBOARD renderstyle "ADD"; @@ -366,18 +360,57 @@ Default { DeathSound "none"; scale 0.4; } +override void PostBeginPlay() { + super.PostBeginPlay(); + trailactor = "BFGTrail"; + A_PlaySound("weapons/bfg/fly",6,1.0,TRUE,1); + } +override void Tick () { + Vector3 oldPos = self.pos; + Super.Tick(); + if (!bdoom_debris || level.isFrozen()) + return; + Vector3 path = level.vec3Diff( self.pos, oldPos ); + double distance = path.length() / 3; //this determines how far apart the particles are + Vector3 direction = path / distance; + int steps = int( distance ); + + for( int i = 0; i < steps; i++ ) { + actor mo = Spawn(trailactor, oldPos ); + //mo.vel = (frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5)); + mo.target = self; + mo.angle = angle; + oldPos = level.vec3Offset( oldPos, direction ); + } + + if (pos.z <= floorz+80 && floorpic != skyflatnum && random(0,32) > 28) { + let lt = BFGLightningSpawner(Spawn("BFGLightningSpawner",pos)); + if (!lt) return; + lt.master = self; + } + if (pos.z >= ceilingz-128 && ceilingpic != skyflatnum && random(0,32) > 28) { + let lt = BFGLightningSpawner(Spawn("BFGLightningSpawner",pos)); + if (!lt) return; + lt.master = self; + lt.upward = true; + } + } States { Spawn: TNT1 A 0 NoDelay { - A_PlaySound("weapons/bfg/fly",6,1.0,TRUE,1); - if (bdoom_debris) - A_SpawnItemEx("BFGFlare",0,0,0,vel.x,vel.y,vel.z,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_ABSOLUTEVELOCITY); + if(bdoom_debris) { + let f = BD_ProjFlare(Spawn("BD_ProjFlare",pos)); + f.fcolor = 'green'; + f.vel = vel; + f.master = self; + f.scale = scale; + } } Spawn1: BFGB ABCDEFGH 1 bright { - if (bdoom_debris) - A_CustomRailGun(0,0,"","FFFFFF",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING,0,4,"NullPuff",random(0,360),random(0,360),64,20,0,4,"BFGBallRay"); + //if (bdoom_debris) + //A_CustomRailGun(0,0,"","FFFFFF",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING,0,4,"NullPuff",random(0,360),random(0,360),64,20,0,4,"BFGBallRay"); } loop; Death.Sky: @@ -402,74 +435,57 @@ States } } -/* -//stationary ball to test visuals -Class BD_BFGBallTest : BD_BFGBall -{ -Default { speed 0; } -} - -//experimental sprite lightning. not fun -Class BFGLightning : Flare_General +//flare-like trail behind the orb +Class BFGTrail : Flare_General { -Default { - alpha 0.4; - scale 0.38; - +WALLSPRITE - +ROLLSPRITE - +ROLLCENTER +default { + alpha 0.2; + scale 0.16; } states - { + { Spawn: - TNT1 A 0 NoDelay { - if (!master) { - self.destroy(); - return; - } - SetOrigin(master.pos,0); - if (angle == 0) { - //Console.Printf("True"); - bWALLSPRITE = false; - bFLATSPRITE = true; - } - roll = random(0,359); - } - Spawn1: - BLIT ABCDEFGHIJKLMNO 3 bright { - angle+=12; - roll+=6; + LENG A 1 bright { + A_FadeOut(0.04); + scale*=0.95; } loop; } -}*/ - -//flare around the bfg orb -Class BFGFlare : BD_ProjFlare -{ -default { - Flare_General.fcolor "Green"; - alpha 0.25; - scale 0.9; - } } -//flare-like trail behind the orb -Class BFGTrail : Flare_General +Class BFGLightningSpawner : Actor { -default { - alpha 0.07; - scale 0.2; +bool upward; +double broll; +Default { + +NOINTERACTION + } +override void PostBeginPlay() { + super.PostBeginPlay(); + broll = frandom(3,6); + angle = random(0,360); + pitch = frandom(78,89); + if (upward) { + broll*=-1; + pitch*=-1; + } } states - { + { Spawn: - LENG A 1 NoDelay bright { - A_FadeOut(0.007); - scale.x*=0.99; - scale.y*=0.99; + TNT1 A 0 NoDelay { + if (master) { + SetOrigin(master.pos,false); + vel = master.vel; + } } - loop; + TNT1 AAAAAAAAAA 2 { + pitch -= broll; + if (bdoom_debris && master) + A_CustomRailGun(0,0,"","FFFFFF",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING,0,4,"NullPuff",0,0,160,20,0,4,"BFGBallRay"); + } + stop; + } } @@ -484,13 +500,13 @@ states { Spawn: TNT1 A 0 Nodelay { - if (bdoom_debris) - A_SpawnItemEx("BFGBallRayFlare",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS); + //if (bdoom_debris) + //A_SpawnItemEx("BFGBallRayFlare",flags:SXF_TRANSFERPOINTERS); //did you know that the actor that fires the railgun is also the target of the railgun particles? phantombeta knew //transfer velocity so that the lightning is always next to the bfg orb and not lagging behind if (target) vel = target.vel; - } + } PEXP ABCDEFGHIJKLM 1 bright A_FadeOut(0.08); stop; } @@ -522,7 +538,7 @@ Class BD_BFGExtra : BFGExtra //replaces BFGExtra Default { translation "GreenPlasma"; damagetype "BFGSplash"; - scale 0.35; + scale 0.3; renderstyle "Add"; alpha 0.6; } @@ -531,15 +547,31 @@ states Spawn: TNT1 A 0 NoDelay { If(bdoom_debris) { - for (int i = 16; i > 0; i--) - A_SpawnItemEx("BFGPlasmaPiece",0,0,0,frandom(-2.5,2.5),frandom(-2.5,2.5),frandom(-2.5,2.5),random(0,360)); + for (int i = 24; i > 0; i--) + A_SpawnItemEx("BFGExtraParticle",frandom(-10,10),frandom(-10,10),frandom(-2,10),frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(0,0.5),failchance:64); } } - PEXP AABBCCDDEEFFGGHHIIJJKKLLMM 1 bright; + PEXP AABBCCDDEEFFGGHHIIJJKKLLMM 1 bright A_FadeOut(0.005); stop; } } +Class BFGExtraParticle : Flare_General +{ +Default { + scale 0.07; + } +states + { + Spawn: + SPRK B 1 { + A_FadeOut(0.004); + scale*=0.96; + } + wait; + } +} + //small particles spawned by BFG hits Class BFGPlasmaPiece : BluePlasmaPiece { @@ -652,7 +684,7 @@ states } -Class ModernBFGBall : BFGBall +Class ModernBFGBall : BD_BFGBall { //wcharge just transfers the charge value from the weapon. 1-8 is normal shot, 9-12 is overcharge (12 leads to self-destruct) double wcharge; @@ -660,12 +692,8 @@ double wcharge; (because overcharging isn't meant to increase power, it just lets you hold off the shot)*/ double wpower; Default { - +FORCEXYBILLBOARD +ROLLSPRITE +DONTTHRUST - damagetype "BFGSplash"; - seesound "none"; - DeathSound "none"; speed 15; renderstyle "Add"; scale 0.15; @@ -687,6 +715,7 @@ Override void PostBeginPlay() { A_SetScale (0.06 + wcharge * 0.03); } } + trailactor = "MBFGTrail"; } States { @@ -695,11 +724,15 @@ States if (wcharge >= 12) return ResolveState("SelfDestruct"); A_PlaySound("weapons/bfg/fly",6,1.0,TRUE); - if(bdoom_debris) - A_SpawnItemEx("ModernBFGFlare",0,0,0,vel.x,vel.y,vel.z,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_ABSOLUTEVELOCITY|SXF_TRANSFERSCALE); + if(bdoom_debris) { + let f = BD_ProjFlare(Spawn("BD_ProjFlare",pos)); + f.fcolor = 'green'; + f.vel = vel; + f.master = self; + f.scale = scale; + } return ResolveState(null); } - goto spawnDo; SpawnDo: COIR ABCDEFGHIJKLMNOPQRSTUV 2 bright; loop; @@ -708,6 +741,7 @@ States stop; Death: TNT1 A 0 { + A_RemoveChildren(1,RMVF_EVERYTHING); if (wcharge >= 12) return ResolveState("SelfDestruct"); //A_StopSound(6); @@ -717,12 +751,19 @@ States return ResolveState(null); } - COIX AAAAAAAA 1 bright { + COIX AAAAAAAAAA 1 bright { //visuals roll+=10; - A_CustomRailGun(0,0,"","FFFFFF",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING,0,15,"NullPuff",random(0,360),random(0,360),random(64,128),duration:56,sparsity:3.0,spawnclass:"MBFGRailParticle"); - A_CustomRailGun(0,0,"","FFFFFF",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING,0,15,"NullPuff",random(0,360),random(0,360),random(64,128),duration:56,sparsity:3.0,spawnclass:"MBFGRailParticle"); + if (bdoom_debris) { + A_CustomRailGun(0,0,"","FFFFFF",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING,maxdiff:15,pufftype:"NullPuff",random(0,360),random(0,360),range:random(48,80),sparsity:1.0,spawnclass:"MBFGRailParticle"); + A_CustomRailGun(0,0,"","FFFFFF",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING,maxdiff:15,pufftype:"NullPuff",random(0,360),random(0,360),range:random(48,80),sparsity:1.0,spawnclass:"MBFGRailParticle"); + } + else { + A_CustomRailGun(0,0,"","CCFFCC",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING|RGF_FULLBRIGHT,maxdiff:15,pufftype:"NullPuff",random(0,360),random(0,360),range:random(48,80),duration:random(100,150),sparsity:0.15,driftspeed:0.3); + A_CustomRailGun(0,0,"","CCFFCC",RGF_CENTERZ|RGF_SILENT|RGF_NOPIERCING|RGF_FULLBRIGHT,maxdiff:15,pufftype:"NullPuff",random(0,360),random(0,360),range:random(48,80),duration:random(100,150),sparsity:0.15,driftspeed:0.3); + } + //iterator double closestDist = double.infinity; double rdistance = 144*wpower; //effective distance depends on charge actor targetActor = null; // This HAS to be initialized here, as local variables aren't implicitly initialized. @@ -754,7 +795,10 @@ States if (targetActor != null) { A_Face(targetActor,0,0,flags: FAF_MIDDLE); - A_CustomRailGun(30 + 22*wpower,0,"","FFFFFF",RGF_NOPIERCING|RGF_FULLBRIGHT|RGF_CENTERZ|RGF_SILENT,aim:0,maxdiff:15,"MBFGRailPuff",range:rdistance,duration:64,sparsity:6.5,spawnclass:"MBFGRailParticle"); + + A_CustomRailGun(30 + 22*wpower,0,"","40FF40",RGF_NOPIERCING|RGF_FULLBRIGHT|RGF_CENTERZ|RGF_SILENT ,maxdiff:10,pufftype:"MBFGRailPuff",range:rdistance,duration:random(100,150),sparsity:0.15,driftspeed:0.3); + + //A_CustomRailGun(30 + 22*wpower,0,"","FFFFFF",RGF_NOPIERCING|RGF_FULLBRIGHT|RGF_CENTERZ|RGF_SILENT,aim:0,maxdiff:15,"MBFGRailPuff",range:rdistance,duration:512,sparsity:6.5,spawnclass:"MBFGRailParticle"); } } COIX ABCDEFGHIJKLM 1 bright; @@ -777,19 +821,22 @@ Class MBFGTrail : Flare_General { Default { alpha 0.6; + +ROLLSPRITE } override void PostBeginPlay() { super.PostBeginPlay(); - if (target) - scale = target.scale*0.5; + if (!target) + return; + scale = target.scale*0.9; + roll = target.roll; + SetOrigin((pos.x+frandom(-2.5,2.5),pos.y+frandom(-2.5,2.5),pos.z+frandom(-2.5,2.5)),false); } states { Spawn: - TNT1 A 2 Nodelay; COIR ABCDEFGHIJKLMNOPQRSTUV 1 bright { - scale*=0.9; - A_Fadeout(0.1); + A_FadeOut(0.05); + scale*=0.95; } stop; } @@ -805,29 +852,44 @@ Default { } } -Class ModernBFGFlare : BD_ProjFlare +Class MBFGRailParticle : Flare_General { Default { - Flare_General.fcolor "green"; - alpha 0.4; + scale 0.07; } -override void PostBeginPlay() { +override Void PostBeginPlay() { super.PostBeginPlay(); - scale *= 3; + vel = (frandom(-0.1,0.1),frandom(-0.1,0.1),frandom(-0.1,0.1)); + } +states + { + Spawn: + SPRK B 1 { + A_FadeOut(0.002); + scale*=0.98; + } + wait; } } + -Class MBFGRailParticle : Flare_General +/* +Class RBFGRailParticle : Flare_General { Default { alpha 0.6; scale 0.03; translation "GreenPlasma"; } +override void PostBeginPlay () { + super.PostBeginPlay(); + if (bdoom_debris) + A_SpawnItemEx("BFGBallRayFlare",flags:SXF_TRANSFERPOINTERS); + } states { Spawn: - PEXP ABCDEFGHIJKLM 3 bright; + PEXP ABCDEFGHIJKL 5 bright; stop; } } diff --git a/Z_BDoom/w_PlasmaRifle.zc b/Z_BDoom/w_PlasmaRifle.zc index 9236fbab..bfbc5740 100644 --- a/Z_BDoom/w_PlasmaRifle.zc +++ b/Z_BDoom/w_PlasmaRifle.zc @@ -380,12 +380,12 @@ States Death: TNT1 A 0 { A_RemoveChildren(1,RMVF_EVERYTHING); - if (bdoom_debris) + if (bdoom_debris) { A_SpawnItem("WeaponSmoke"); - } - TNT1 AAAAAAAAAAAA 0 { - if (bdoom_debris) - A_spawnItemEx("BluePlasmaPiece",0,0,0,frandom(-3,3),frandom(-3,3),frandom(3,6),random(0,360),SXF_TRANSFERTRANSLATION); + for (int i = 12; i > 0; i --) { + A_spawnItemEx("BluePlasmaPiece",0,0,0,frandom(-3,3),frandom(-3,3),frandom(3,6),flags:SXF_TRANSFERTRANSLATION,failchance:48); + } + } } TNT1 A 0 A_SetScale(0.2*randompick(-1,1),0.2*randompick(-1,1)); PEXP ABCDEFGHIJKLM 2 bright A_FadeOut(0.05); @@ -421,7 +421,7 @@ Default { states { Spawn: - PLBS A 1 bright NoDelay A_FadeOut(0.03); + PLBS A 1 bright A_FadeOut(0.03); loop; } } @@ -462,7 +462,6 @@ states // used as a particle of the railgun Class PlasmaRailBall : Flare_General { -//int fcounter; Default { renderstyle "Add"; alpha 0.8; @@ -562,13 +561,21 @@ States A_RemoveChildren(1,RMVF_EVERYTHING); A_Explode(30,40,0,0,40,0,0,"none"); A_SetScale(0.14*randompick(-1,1),0.14*randompick(-1,1)); - for (int i = 0; i <= 8; i++) - A_SpawnItemEx("ModernPlasmaPiece",0,0,0,frandom(-3,3),frandom(-3,3),frandom(3,8),0,0,32); + if (bdoom_debris) { + for (int i = 0; i <= 8; i++) + A_SpawnItemEx("ModernPlasmaPiece",0,0,0,frandom(-3,3),frandom(-3,3),frandom(3,8),0,0,32); + } } PEXP CDEFGH 1 bright { - A_CustomRailGun(0,0,"","0",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ,0,4,"NullPuff",random(0,360),random(0,360),32,64,0,0,"MPlasmaBallRay"); - A_CustomRailGun(0,0,"","0",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ,0,4,"NullPuff",random(0,360),random(0,360),32,64,0,0,"MPlasmaBallRay"); - A_CustomRailGun(0,0,"","0",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ,0,4,"NullPuff",random(0,360),random(0,360),32,64,0,0,"MPlasmaBallRay"); + if (bdoom_debris) { + A_CustomRailGun(0,0,"","0",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ,0,4,"NullPuff",random(0,360),random(0,360),range:32,spawnclass:"MPlasmaBallRay"); + A_CustomRailGun(0,0,"","0",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ,0,4,"NullPuff",random(0,360),random(0,360),range:32,spawnclass:"MPlasmaBallRay"); + A_CustomRailGun(0,0,"","0",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ,0,4,"NullPuff",random(0,360),random(0,360),range:32,spawnclass:"MPlasmaBallRay"); + } + else { + A_CustomRailGun(0,0,"","BBFFBB",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ|RGF_FULLBRIGHT,maxdiff:15,pufftype:"NullPuff",random(0,360),random(0,360),range:32,duration:16,sparsity:0.2,driftspeed:0.1); + A_CustomRailGun(0,0,"","BBFFBB",RGF_SILENT|RGF_NOPIERCING|RGF_CENTERZ|RGF_FULLBRIGHT,maxdiff:15,pufftype:"NullPuff",random(0,360),random(0,360),range:32,duration:16,sparsity:0.2,driftspeed:0.1); + } } PEXP IJKLM 1 bright; stop; diff --git a/Z_BDoom/w_chainsaw.zc b/Z_BDoom/w_chainsaw.zc index 67140c60..63dca192 100644 --- a/Z_BDoom/w_chainsaw.zc +++ b/Z_BDoom/w_chainsaw.zc @@ -136,11 +136,11 @@ states TNT1 A 0 A_JumpIf(bdoom_weapons ==1,"Fire.Enhanced"); TNT1 A 0 A_JumpIf(bdoom_weapons ==2,"Fire.Modern"); //fake chargeup, attack begins to coincide with vanilla speed - TNT1 A 0 A_Saw("","weapons/sawhit",2,"ChainsawPuff") ; + TNT1 A 0 A_Saw("","weapons/sawhit",2,"BD_ChainsawPuff") ; SAWN AABC 1; TNT1 A 0 { A_playsound("weapons/sawfull",4,1.0,TRUE); - A_Saw("","weapons/sawhit",2,"ChainsawPuff"); + A_Saw("","weapons/sawhit",2,"BD_ChainsawPuff"); } SAWF AB 2 A_WeaponOffset(frandom(-2.0,2.0),frandom(32.0,34.0),WOF_INTERPOLATE); TNT1 A 0 A_Refire(); @@ -150,9 +150,9 @@ states Hold: TNT1 A 0 A_JumpIf(bdoom_weapons ==1,"Hold.Enhanced"); TNT1 A 0 A_JumpIf(bdoom_weapons ==2,"Hold.Modern"); - TNT1 A 0 A_Saw("","weapons/sawhit",2,"ChainsawPuff"); + TNT1 A 0 A_Saw("","weapons/sawhit",2,"BD_ChainsawPuff"); SAWF AB 2 A_WeaponOffset(frandom(-2.0,2.0),frandom(32.0,34.0),WOF_INTERPOLATE); - TNT1 A 0 A_Saw("","weapons/sawhit",2,"ChainsawPuff"); + TNT1 A 0 A_Saw("","weapons/sawhit",2,"BD_ChainsawPuff"); SAWF AB 2 A_WeaponOffset(frandom(-2.0,2.0),frandom(32.0,34.0),WOF_INTERPOLATE); TNT1 A 0 A_Refire(); TNT1 A 0 A_Stopsound(4); @@ -167,12 +167,12 @@ states Fire.Enhanced: TNT1 A 0 { A_PlaySound("weapons/chainsaw/start",4); - A_CustomPunch(2*random(1,10),1,0,"ChainsawPuff"); + A_CustomPunch(2*random(1,10),1,0,"BD_ChainsawPuff"); } SAWN AABC 1 ; TNT1 A 0 { A_playsound("weapons/chainsaw/loop",4,1.0,TRUE); - A_CustomPunch(2*random(1,10),1,0,"ChainsawPuff"); + A_CustomPunch(2*random(1,10),1,0,"BD_ChainsawPuff"); } SAWF AB 2 A_WeaponOffset(frandom(-2.0,2.0),frandom(32.0,34.0),WOF_INTERPOLATE); TNT1 A 0 A_Refire("Hold.Enhanced"); @@ -180,9 +180,9 @@ states SAWN CBA 1 A_WeaponReady(); goto ready; Hold.Enhanced: - TNT1 A 0 A_CustomPunch(2*random(1,10),1,0,"ChainsawPuff"); + TNT1 A 0 A_CustomPunch(2*random(1,10),1,0,"BD_ChainsawPuff"); SAWF AB 2 A_WeaponOffset(frandom(-2.0,2.0),frandom(32.0,34.0),WOF_INTERPOLATE); - TNT1 A 0 A_CustomPunch(2*random(1,10),1,0,"ChainsawPuff"); + TNT1 A 0 A_CustomPunch(2*random(1,10),1,0,"BD_ChainsawPuff"); SAWF AB 2 A_WeaponOffset(frandom(-2.0,2.0),frandom(32.0,34.0),WOF_INTERPOLATE); TNT1 A 0 A_Refire("Hold.Enhanced"); TNT1 A 0 A_PlaySound("weapons/chainsaw/stop",4); @@ -410,7 +410,7 @@ states -Class ChainsawPuff : BDoomPuff +Class BD_ChainsawPuff : BDoomPuff { Default { +PUFFONACTORS @@ -431,10 +431,10 @@ states A_SpawnItemEx("WallSmoke",0,0,0,0,0,frandom(0.2,0.5)); } if (random(1,100) <= 70) { - if (bdoom_sparks == 1) + if (bdoom_sparks) A_PlaySound("weapons/chainsaw/hitwall"); for (int i = 15; i > 0; i--) - A_SpawnItemEx("RicochetSpark",0,0,0, random(1,2),0,random(5,10),random(0,360),0,160); + A_SpawnItemEx("RicochetSpark",0,0,0, frandom(-2,2),frandom(-2,2),frandom(5,10),failchance:160); } } CPUF ABCD 1 bright; @@ -442,7 +442,7 @@ states } } -Class ModernsawPuff : ChainsawPuff +Class ModernsawPuff : BD_ChainsawPuff { Default { +HITTRACER diff --git a/Z_BDoom/w_rocketlauncher.zc b/Z_BDoom/w_rocketlauncher.zc index c638b1cb..28a6aeac 100644 --- a/Z_BDoom/w_rocketlauncher.zc +++ b/Z_BDoom/w_rocketlauncher.zc @@ -495,7 +495,7 @@ override void Tick () { if (target && distance3d(target) > 128) { //give us some distance so that the smoke doesn't spawn right in the players face actor mo = Spawn(trailactor, oldPos ); mo.vel = (frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5)); - mo.target = target; + //mo.target = target; } oldPos = level.vec3Offset( oldPos, direction ); } @@ -515,6 +515,7 @@ states BrainExplode: Death: TNT1 A 0 { + A_RemoveChildren(1,RMVF_EVERYTHING); A_StopSound(4); bFORCEXYBILLBOARD = true; A_SetRenderStyle(0.5,STYLE_Add); @@ -528,11 +529,11 @@ states for (int i = 20; i > 0; i--) A_SpawnItemEx("RicochetSpark",0,0,0, frandom(-6,6),frandom(-6,6),frandom(3,10),0,0,92); if (pos.z <= floorz+10) { - for (int i = 14; i > 0; i--) - A_SpawnItemEx("RocketDebris",0,0,0, frandom(-2,2),frandom(-2,2),frandom(9,12),0,0,92); + for (int i = 20; i > 0; i--) + A_SpawnItemEx("RocketDebris",0,0,0, frandom(-3,3),frandom(-3,3),frandom(9,12),0,0,92); } else - for (int i = 10; i > 0; i--) + for (int i = 15; i > 0; i--) A_SpawnItemEx("RocketDebris",0,0,0, frandom(-4,4),frandom(-4,4),frandom(2,7),0,0,92); } A_Explode(); diff --git a/brightmaps/auto/FSKXa0.png b/brightmaps/auto/FSKXa0.png new file mode 100644 index 00000000..e9c65c1b Binary files /dev/null and b/brightmaps/auto/FSKXa0.png differ diff --git a/brightmaps/auto/FSKXb0.png b/brightmaps/auto/FSKXb0.png new file mode 100644 index 00000000..a7f2f2a7 Binary files /dev/null and b/brightmaps/auto/FSKXb0.png differ diff --git a/brightmaps/auto/FSKXc0.png b/brightmaps/auto/FSKXc0.png new file mode 100644 index 00000000..fb876790 Binary files /dev/null and b/brightmaps/auto/FSKXc0.png differ diff --git a/brightmaps/auto/FSKXd0.png b/brightmaps/auto/FSKXd0.png new file mode 100644 index 00000000..24e1a0c5 Binary files /dev/null and b/brightmaps/auto/FSKXd0.png differ diff --git a/brightmaps/auto/FSKXe0.png b/brightmaps/auto/FSKXe0.png new file mode 100644 index 00000000..e35ba5f2 Binary files /dev/null and b/brightmaps/auto/FSKXe0.png differ diff --git a/brightmaps/auto/FSKXf0.png b/brightmaps/auto/FSKXf0.png new file mode 100644 index 00000000..fc795b65 Binary files /dev/null and b/brightmaps/auto/FSKXf0.png differ diff --git a/models/bloodpool/bpool1_1.png b/models/bloodpool/bpool1_1.png index fe68f500..629b79c5 100644 Binary files a/models/bloodpool/bpool1_1.png and b/models/bloodpool/bpool1_1.png differ diff --git a/models/bloodpool/bpool1_10.png b/models/bloodpool/bpool1_10.png index d3891da4..afbda5b1 100644 Binary files a/models/bloodpool/bpool1_10.png and b/models/bloodpool/bpool1_10.png differ diff --git a/models/bloodpool/bpool1_11.png b/models/bloodpool/bpool1_11.png index 04934253..0e42a716 100644 Binary files a/models/bloodpool/bpool1_11.png and b/models/bloodpool/bpool1_11.png differ diff --git a/models/bloodpool/bpool1_12.png b/models/bloodpool/bpool1_12.png index 3be81906..4e381617 100644 Binary files a/models/bloodpool/bpool1_12.png and b/models/bloodpool/bpool1_12.png differ diff --git a/models/bloodpool/bpool1_13.png b/models/bloodpool/bpool1_13.png index add2b797..e8ed24f5 100644 Binary files a/models/bloodpool/bpool1_13.png and b/models/bloodpool/bpool1_13.png differ diff --git a/models/bloodpool/bpool1_14.png b/models/bloodpool/bpool1_14.png index f6dbd9a2..8543ea2a 100644 Binary files a/models/bloodpool/bpool1_14.png and b/models/bloodpool/bpool1_14.png differ diff --git a/models/bloodpool/bpool1_15.png b/models/bloodpool/bpool1_15.png index bb4bcc05..6c66a91a 100644 Binary files a/models/bloodpool/bpool1_15.png and b/models/bloodpool/bpool1_15.png differ diff --git a/models/bloodpool/bpool1_16.png b/models/bloodpool/bpool1_16.png index c32b9e50..027e309d 100644 Binary files a/models/bloodpool/bpool1_16.png and b/models/bloodpool/bpool1_16.png differ diff --git a/models/bloodpool/bpool1_17.png b/models/bloodpool/bpool1_17.png index 71ba915d..86a140c0 100644 Binary files a/models/bloodpool/bpool1_17.png and b/models/bloodpool/bpool1_17.png differ diff --git a/models/bloodpool/bpool1_18.png b/models/bloodpool/bpool1_18.png index 6ff130f9..f94b1143 100644 Binary files a/models/bloodpool/bpool1_18.png and b/models/bloodpool/bpool1_18.png differ diff --git a/models/bloodpool/bpool1_19.png b/models/bloodpool/bpool1_19.png index 1ad57a29..de61e31f 100644 Binary files a/models/bloodpool/bpool1_19.png and b/models/bloodpool/bpool1_19.png differ diff --git a/models/bloodpool/bpool1_2.png b/models/bloodpool/bpool1_2.png index 698bc024..b4c233a6 100644 Binary files a/models/bloodpool/bpool1_2.png and b/models/bloodpool/bpool1_2.png differ diff --git a/models/bloodpool/bpool1_20.png b/models/bloodpool/bpool1_20.png index 5387b2eb..206d936e 100644 Binary files a/models/bloodpool/bpool1_20.png and b/models/bloodpool/bpool1_20.png differ diff --git a/models/bloodpool/bpool1_21.png b/models/bloodpool/bpool1_21.png index fc8bbf54..2377f6e3 100644 Binary files a/models/bloodpool/bpool1_21.png and b/models/bloodpool/bpool1_21.png differ diff --git a/models/bloodpool/bpool1_22.png b/models/bloodpool/bpool1_22.png index 296aa5e5..d33bbf95 100644 Binary files a/models/bloodpool/bpool1_22.png and b/models/bloodpool/bpool1_22.png differ diff --git a/models/bloodpool/bpool1_23.png b/models/bloodpool/bpool1_23.png index b6f9dfa2..1d0f5aa6 100644 Binary files a/models/bloodpool/bpool1_23.png and b/models/bloodpool/bpool1_23.png differ diff --git a/models/bloodpool/bpool1_24.png b/models/bloodpool/bpool1_24.png index a358137f..d4c0264e 100644 Binary files a/models/bloodpool/bpool1_24.png and b/models/bloodpool/bpool1_24.png differ diff --git a/models/bloodpool/bpool1_25.png b/models/bloodpool/bpool1_25.png index 1137ebf3..89ec2eb9 100644 Binary files a/models/bloodpool/bpool1_25.png and b/models/bloodpool/bpool1_25.png differ diff --git a/models/bloodpool/bpool1_26.png b/models/bloodpool/bpool1_26.png index bc6ff728..0bcfca2c 100644 Binary files a/models/bloodpool/bpool1_26.png and b/models/bloodpool/bpool1_26.png differ diff --git a/models/bloodpool/bpool1_27.png b/models/bloodpool/bpool1_27.png index 52f4a709..998e7824 100644 Binary files a/models/bloodpool/bpool1_27.png and b/models/bloodpool/bpool1_27.png differ diff --git a/models/bloodpool/bpool1_28.png b/models/bloodpool/bpool1_28.png index 95e0ef57..d52eafba 100644 Binary files a/models/bloodpool/bpool1_28.png and b/models/bloodpool/bpool1_28.png differ diff --git a/models/bloodpool/bpool1_29.png b/models/bloodpool/bpool1_29.png index 8da6f166..1967364b 100644 Binary files a/models/bloodpool/bpool1_29.png and b/models/bloodpool/bpool1_29.png differ diff --git a/models/bloodpool/bpool1_3.png b/models/bloodpool/bpool1_3.png index 4f8cb61e..d5de0884 100644 Binary files a/models/bloodpool/bpool1_3.png and b/models/bloodpool/bpool1_3.png differ diff --git a/models/bloodpool/bpool1_30.png b/models/bloodpool/bpool1_30.png index 6f96cd89..6996f9f4 100644 Binary files a/models/bloodpool/bpool1_30.png and b/models/bloodpool/bpool1_30.png differ diff --git a/models/bloodpool/bpool1_4.png b/models/bloodpool/bpool1_4.png index 8b3535c9..602eccff 100644 Binary files a/models/bloodpool/bpool1_4.png and b/models/bloodpool/bpool1_4.png differ diff --git a/models/bloodpool/bpool1_5.png b/models/bloodpool/bpool1_5.png index 5b8fa197..d5713b00 100644 Binary files a/models/bloodpool/bpool1_5.png and b/models/bloodpool/bpool1_5.png differ diff --git a/models/bloodpool/bpool1_6.png b/models/bloodpool/bpool1_6.png index dde7382b..a4627d8d 100644 Binary files a/models/bloodpool/bpool1_6.png and b/models/bloodpool/bpool1_6.png differ diff --git a/models/bloodpool/bpool1_7.png b/models/bloodpool/bpool1_7.png index 6a1ed481..dd933b9b 100644 Binary files a/models/bloodpool/bpool1_7.png and b/models/bloodpool/bpool1_7.png differ diff --git a/models/bloodpool/bpool1_8.png b/models/bloodpool/bpool1_8.png index f10df8f9..7958cbc3 100644 Binary files a/models/bloodpool/bpool1_8.png and b/models/bloodpool/bpool1_8.png differ diff --git a/models/bloodpool/bpool1_9.png b/models/bloodpool/bpool1_9.png index 6686e12f..90e77b30 100644 Binary files a/models/bloodpool/bpool1_9.png and b/models/bloodpool/bpool1_9.png differ diff --git a/models/bloodpool/bpool2_1.png b/models/bloodpool/bpool2_1.png index 65baea40..8d1c0f03 100644 Binary files a/models/bloodpool/bpool2_1.png and b/models/bloodpool/bpool2_1.png differ diff --git a/models/bloodpool/bpool2_10.png b/models/bloodpool/bpool2_10.png index e320789d..3d646fc8 100644 Binary files a/models/bloodpool/bpool2_10.png and b/models/bloodpool/bpool2_10.png differ diff --git a/models/bloodpool/bpool2_11.png b/models/bloodpool/bpool2_11.png index a6b8c43d..69dc3187 100644 Binary files a/models/bloodpool/bpool2_11.png and b/models/bloodpool/bpool2_11.png differ diff --git a/models/bloodpool/bpool2_12.png b/models/bloodpool/bpool2_12.png index c70d40d8..e045960c 100644 Binary files a/models/bloodpool/bpool2_12.png and b/models/bloodpool/bpool2_12.png differ diff --git a/models/bloodpool/bpool2_13.png b/models/bloodpool/bpool2_13.png index 7888c74c..19cff001 100644 Binary files a/models/bloodpool/bpool2_13.png and b/models/bloodpool/bpool2_13.png differ diff --git a/models/bloodpool/bpool2_14.png b/models/bloodpool/bpool2_14.png index 186bb447..8c0900ee 100644 Binary files a/models/bloodpool/bpool2_14.png and b/models/bloodpool/bpool2_14.png differ diff --git a/models/bloodpool/bpool2_15.png b/models/bloodpool/bpool2_15.png index 761e1699..4c4b0ce9 100644 Binary files a/models/bloodpool/bpool2_15.png and b/models/bloodpool/bpool2_15.png differ diff --git a/models/bloodpool/bpool2_16.png b/models/bloodpool/bpool2_16.png index b1438a2c..d513ff22 100644 Binary files a/models/bloodpool/bpool2_16.png and b/models/bloodpool/bpool2_16.png differ diff --git a/models/bloodpool/bpool2_17.png b/models/bloodpool/bpool2_17.png index 7f7f636a..a857ca5a 100644 Binary files a/models/bloodpool/bpool2_17.png and b/models/bloodpool/bpool2_17.png differ diff --git a/models/bloodpool/bpool2_18.png b/models/bloodpool/bpool2_18.png index de2c04e8..d2f6ac0d 100644 Binary files a/models/bloodpool/bpool2_18.png and b/models/bloodpool/bpool2_18.png differ diff --git a/models/bloodpool/bpool2_19.png b/models/bloodpool/bpool2_19.png index b1992013..83afcac5 100644 Binary files a/models/bloodpool/bpool2_19.png and b/models/bloodpool/bpool2_19.png differ diff --git a/models/bloodpool/bpool2_2.png b/models/bloodpool/bpool2_2.png index eeac8ae8..62837f96 100644 Binary files a/models/bloodpool/bpool2_2.png and b/models/bloodpool/bpool2_2.png differ diff --git a/models/bloodpool/bpool2_20.png b/models/bloodpool/bpool2_20.png index 8baa27ec..33893f47 100644 Binary files a/models/bloodpool/bpool2_20.png and b/models/bloodpool/bpool2_20.png differ diff --git a/models/bloodpool/bpool2_21.png b/models/bloodpool/bpool2_21.png index 7af29d89..1de93083 100644 Binary files a/models/bloodpool/bpool2_21.png and b/models/bloodpool/bpool2_21.png differ diff --git a/models/bloodpool/bpool2_22.png b/models/bloodpool/bpool2_22.png index 22c26ffb..f974853a 100644 Binary files a/models/bloodpool/bpool2_22.png and b/models/bloodpool/bpool2_22.png differ diff --git a/models/bloodpool/bpool2_23.png b/models/bloodpool/bpool2_23.png index 714e7898..89f9ee72 100644 Binary files a/models/bloodpool/bpool2_23.png and b/models/bloodpool/bpool2_23.png differ diff --git a/models/bloodpool/bpool2_24.png b/models/bloodpool/bpool2_24.png index ab2aa6e9..96945b73 100644 Binary files a/models/bloodpool/bpool2_24.png and b/models/bloodpool/bpool2_24.png differ diff --git a/models/bloodpool/bpool2_25.png b/models/bloodpool/bpool2_25.png index 57b624bd..58316f70 100644 Binary files a/models/bloodpool/bpool2_25.png and b/models/bloodpool/bpool2_25.png differ diff --git a/models/bloodpool/bpool2_26.png b/models/bloodpool/bpool2_26.png index f8cdfb2e..0a8cfb46 100644 Binary files a/models/bloodpool/bpool2_26.png and b/models/bloodpool/bpool2_26.png differ diff --git a/models/bloodpool/bpool2_27.png b/models/bloodpool/bpool2_27.png index 3bf046cd..aa47b039 100644 Binary files a/models/bloodpool/bpool2_27.png and b/models/bloodpool/bpool2_27.png differ diff --git a/models/bloodpool/bpool2_28.png b/models/bloodpool/bpool2_28.png index d324fda5..1b79c552 100644 Binary files a/models/bloodpool/bpool2_28.png and b/models/bloodpool/bpool2_28.png differ diff --git a/models/bloodpool/bpool2_29.png b/models/bloodpool/bpool2_29.png index 27bd8dad..d28778ef 100644 Binary files a/models/bloodpool/bpool2_29.png and b/models/bloodpool/bpool2_29.png differ diff --git a/models/bloodpool/bpool2_3.png b/models/bloodpool/bpool2_3.png index db18d236..8f1244f8 100644 Binary files a/models/bloodpool/bpool2_3.png and b/models/bloodpool/bpool2_3.png differ diff --git a/models/bloodpool/bpool2_30.png b/models/bloodpool/bpool2_30.png index a5ba37a5..3d6df0d4 100644 Binary files a/models/bloodpool/bpool2_30.png and b/models/bloodpool/bpool2_30.png differ diff --git a/models/bloodpool/bpool2_4.png b/models/bloodpool/bpool2_4.png index afcb9b1c..1ac9528e 100644 Binary files a/models/bloodpool/bpool2_4.png and b/models/bloodpool/bpool2_4.png differ diff --git a/models/bloodpool/bpool2_5.png b/models/bloodpool/bpool2_5.png index 8d3d8e40..2e689ef7 100644 Binary files a/models/bloodpool/bpool2_5.png and b/models/bloodpool/bpool2_5.png differ diff --git a/models/bloodpool/bpool2_6.png b/models/bloodpool/bpool2_6.png index 1fd6548e..203bbc70 100644 Binary files a/models/bloodpool/bpool2_6.png and b/models/bloodpool/bpool2_6.png differ diff --git a/models/bloodpool/bpool2_7.png b/models/bloodpool/bpool2_7.png index be61014f..b5be2913 100644 Binary files a/models/bloodpool/bpool2_7.png and b/models/bloodpool/bpool2_7.png differ diff --git a/models/bloodpool/bpool2_8.png b/models/bloodpool/bpool2_8.png index 05f0be65..87be4bb8 100644 Binary files a/models/bloodpool/bpool2_8.png and b/models/bloodpool/bpool2_8.png differ diff --git a/models/bloodpool/bpool2_9.png b/models/bloodpool/bpool2_9.png index dc1302cd..32631249 100644 Binary files a/models/bloodpool/bpool2_9.png and b/models/bloodpool/bpool2_9.png differ