From 748c6648a125a542eb20651d5a03631029f6943d Mon Sep 17 00:00:00 2001 From: Ambroise Garel <47314805+akaAgar@users.noreply.github.com> Date: Thu, 5 Oct 2023 09:41:12 +0200 Subject: [PATCH 1/3] Changed V_IndexColourToRGB to use custom damage RGB value instead of palettes --- source_files/edge/r_colormap.cc | 24 +++++++++++++++++------- source_files/edge/r_colormap.h | 2 +- source_files/edge/r_effects.cc | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/source_files/edge/r_colormap.cc b/source_files/edge/r_colormap.cc index dba0623da..5e89d7e6b 100644 --- a/source_files/edge/r_colormap.cc +++ b/source_files/edge/r_colormap.cc @@ -210,9 +210,10 @@ void V_SetPalette(int type, float amount) switch (type) { - case PALETTE_PAIN: - palette = (int)(PAIN_PALS + amount * NUM_PAIN_PALS); - break; + // Pain color fading is now handled differently in V_IndexColourToRGB + // case PALETTE_PAIN: + // palette = (int)(PAIN_PALS + amount * NUM_PAIN_PALS); + // break; case PALETTE_BONUS: palette = (int)(BONUS_PALS + amount * NUM_BONUS_PALS); @@ -549,11 +550,20 @@ void V_ColourNewFrame(void) // Returns an RGB value from an index value - used the current // palette. The byte pointer is assumed to point a 3-byte array. // -void V_IndexColourToRGB(int indexcol, byte *returncol) +void V_IndexColourToRGB(int indexcol, byte *returncol, float damageAmount) { - returncol[0] = playpal_data[cur_palette][indexcol][0]; - returncol[1] = playpal_data[cur_palette][indexcol][1]; - returncol[2] = playpal_data[cur_palette][indexcol][2]; + if ((cur_palette == PALETTE_NORMAL) || (cur_palette == PALETTE_PAIN)) + { + returncol[0] = (byte)MAX(0, MIN(255, damageAmount * 2.5)); + returncol[1] = 0; + returncol[2] = 0; + } + else + { + returncol[0] = playpal_data[cur_palette][indexcol][0]; + returncol[1] = playpal_data[cur_palette][indexcol][1]; + returncol[2] = playpal_data[cur_palette][indexcol][2]; + } } rgbcol_t V_LookupColour(int col) diff --git a/source_files/edge/r_colormap.h b/source_files/edge/r_colormap.h index ffd85a976..c08d2ef27 100644 --- a/source_files/edge/r_colormap.h +++ b/source_files/edge/r_colormap.h @@ -40,7 +40,7 @@ void V_InitPalette(void); void V_InitColour(void); // -ACB- 1999/10/11 Gets an RGB colour from the current palette -void V_IndexColourToRGB(int indexcol, byte *returncol); +void V_IndexColourToRGB(int indexcol, byte *returncol, float damageAmount); rgbcol_t V_LookupColour(int col); diff --git a/source_files/edge/r_effects.cc b/source_files/edge/r_effects.cc index 7fa9e1393..704e34cf3 100644 --- a/source_files/edge/r_effects.cc +++ b/source_files/edge/r_effects.cc @@ -240,7 +240,7 @@ void RGL_PaletteEffect(player_t *player) } else { - V_IndexColourToRGB(pal_black, rgb_data); + V_IndexColourToRGB(pal_black, rgb_data, player->damagecount); int rgb_max = MAX(rgb_data[0], MAX(rgb_data[1], rgb_data[2])); From 93a31601a572f407aecd7353398e396db67bf0ea Mon Sep 17 00:00:00 2001 From: Ambroise Garel <47314805+akaAgar@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:11:24 +0200 Subject: [PATCH 2/3] Added custom damage flash colour to attacks --- autoload/doom2/attacks.ddf | 1026 +++++++++++++++++++++++++++++++ source_files/ddf/attack.cc | 1 + source_files/ddf/main.cc | 4 + source_files/ddf/thing.h | 3 + source_files/edge/e_player.cc | 2 + source_files/edge/e_player.h | 3 + source_files/edge/p_inter.cc | 6 + source_files/edge/r_colormap.cc | 12 +- source_files/edge/r_colormap.h | 2 +- source_files/edge/r_effects.cc | 2 +- 10 files changed, 1055 insertions(+), 6 deletions(-) create mode 100644 autoload/doom2/attacks.ddf diff --git a/autoload/doom2/attacks.ddf b/autoload/doom2/attacks.ddf new file mode 100644 index 000000000..6b55691d3 --- /dev/null +++ b/autoload/doom2/attacks.ddf @@ -0,0 +1,1026 @@ +// +// EDGE ATTACKS.DDF -redefine or add new attacks. +// For documentation, see https://edge-classic.github.io/ +// + + + +#VERSION 1.30 + +//------------------ Player Attacks ------------------ + +[PLAYER_PUNCH] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=2; +DAMAGE.MAX=20; +DAMAGE.OBITUARY="OB_Punch"; +ATTACK_HEIGHT=32; +ATTACKRANGE=96; +ACCURACY_ANGLE=0; +ACCURACY_SLOPE=0; +BERSERK_MULTIPLY=10; +ATTACK_SPECIAL=FACE_TARGET,FORCE_AIM,SILENT_TO_MONSTERS; +ENGAGED_SOUND=PUNCH; +PUFF=PUFF; + +[PLAYER_SAW] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=2; +DAMAGE.MAX=20; +DAMAGE.OBITUARY="OB_Saw"; +ATTACK_HEIGHT=28; +X_OFFSET=4; +ACCURACY_ANGLE=12; +ACCURACY_SLOPE=6; +ENGAGED_SOUND=SAWHIT; +ATTACK_SPECIAL=FACE_TARGET,FORCE_AIM; +ATTACKRANGE=63.9; +PUFF=PUFF; + +[PLAYER_PISTOL] +ATTACKTYPE=SHOT; +SHOTCOUNT=1; +DAMAGE.VAL=5; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_Pistol"; +ATTACK_HEIGHT=32; +ACCURACY_ANGLE=3; +ACCURACY_SLOPE=1.5; +ENGAGED_SOUND=PISTOL; +ATTACKRANGE=2048; +PUFF=PUFF; + +[PLAYER_SHOTGUN] +ATTACKTYPE=SHOT; +SHOTCOUNT=7; +DAMAGE.VAL=5; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_Shotgun"; +ATTACK_HEIGHT=32; +ACCURACY_ANGLE=6; +ACCURACY_SLOPE=0; +ENGAGED_SOUND=SHOTGN; +ATTACKRANGE=2048; +PUFF=PUFF; + +[PLAYER_SHOTGUN2] +ATTACKTYPE=SHOT; +SHOTCOUNT=20; +DAMAGE.VAL=5; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_Shotgun"; +ATTACK_HEIGHT=32; +ACCURACY_ANGLE=12; +ACCURACY_SLOPE=6; +ENGAGED_SOUND=DSHTGN; +ATTACKRANGE=2048; +PUFF=PUFF; + +[PLAYER_CHAINGUN] +ATTACKTYPE=SHOT; +SHOTCOUNT=1; +DAMAGE.VAL=5; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_Chaingun"; +ATTACK_HEIGHT=32; +ACCURACY_ANGLE=6; +ACCURACY_SLOPE=3; +ATTACKRANGE=2048; +ENGAGED_SOUND=CHGUN; +PUFF=PUFF; + +[PLAYER_MISSILE] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=11; +SPEED=20; +DAMAGE.VAL=20; +DAMAGE.MAX=160; +DAMAGE.OBITUARY="OB_Missile"; +ATTACKRANGE=2048; +ATTACK_SPECIAL=KILL_FAILED_SPAWN; +PROJECTILE_SPECIAL=NOBLOCKMAP,DROPOFF,NOGRAVITY,MISSILE,NOSHADOW; +ATTACK_HEIGHT=32; +EXPLODE_DAMAGE.VAL=128; +EXPLODE_DAMAGE.OBITUARY="OB_EXPLODE"; +LAUNCH_SOUND=RLAUNC; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=100; +DLIGHT.COLOUR=#990000; +DLIGHT.LEAKY=TRUE; + +STATES(IDLE)=MISL:A:10:BRIGHT:NOTHING; + +STATES(DEATH)=MISL:B:0:BRIGHT:DLIGHT_SET(150), + MISL:B:0:BRIGHT:DLIGHT_FADE(0), + MISL:B:0:BRIGHT:TRANS_FADE(0%), + MISL:B:0:BRIGHT:KILLSOUND, + MISL:B:0:BRIGHT:PLAYSOUND(BAREXP), + MISL:B:8:BRIGHT:EXPLOSIONDAMAGE, + MISL:C:6:BRIGHT:NOTHING, + MISL:D:4:BRIGHT:NOTHING, + #REMOVE; + +[PLAYER_PLASMA] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=13; +DAMAGE.VAL=5; +DAMAGE.MAX=40; +DAMAGE.OBITUARY="OB_Plasma"; +ATTACK_HEIGHT=32; +SPEED=25; +KEEP_FIRING_CHANCE=3.92%; +ATTACKRANGE=2048; +ATTACK_SPECIAL=KILL_FAILED_SPAWN; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; +LAUNCH_SOUND=PLASMA; +TRANSLUCENCY=55%; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=150; +DLIGHT.COLOUR=#4080FF; + +STATES(IDLE)=PLSS:A:6:LIT88:NOTHING, + PLSS:B:6:LIT88:NOTHING; + +STATES(DEATH)=PLSE:A:0:LIT88:DLIGHT_FADE(0), + PLSE:A:0:LIT88:TRANS_FADE(0%), + PLSE:A:0:LIT88:KILLSOUND, + PLSE:A:4:LIT88:PLAYSOUND(FIRXPL), + PLSE:B:4:LIT88:NOTHING, + PLSE:C:4:LIT88:NOTHING, + PLSE:D:4:LIT88:NOTHING, + PLSE:E:4:LIT88:NOTHING, + #REMOVE; + +[BFG9000_SPRAY] +ATTACKTYPE=SPRAY; +HEIGHT=16; +RADIUS=20; +TRANSLUCENCY=50%; +DAMAGE.VAL=15; +DAMAGE.MAX=120; +DAMAGE.OBITUARY="OB_BFG"; +ATTACKRANGE=2048; +PROJECTILE_SPECIAL=NOGRAVITY,NOSHADOW; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=100; +DLIGHT.COLOUR=#00CC00; + +STATES(SPAWN)=BFE2:A:0:BRIGHT:DLIGHT_FADE(0), + BFE2:A:0:BRIGHT:TRANS_FADE(0%), + BFE2:A:8:BRIGHT:NOTHING, + BFE2:B:8:BRIGHT:NOTHING, + BFE2:C:8:BRIGHT:NOTHING, + BFE2:D:8:BRIGHT:NOTHING, + #REMOVE; + +[PLAYER_BFG9000] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=13; +SPEED=25; +DAMAGE.VAL=100; +DAMAGE.MAX=800; +DAMAGE.OBITUARY="OB_BFG"; +ATTACK_HEIGHT=32; +ATTACKRANGE=2048; +TRANSLUCENCY=66%; +SPARE_ATTACK=BFG9000_SPRAY; +ATTACK_SPECIAL=KILL_FAILED_SPAWN; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=150; +DLIGHT.COLOUR=#008800; + +STATES(IDLE)=BFS1:A:4:BRIGHT:NOTHING, + BFS1:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=BFE1:A:0:BRIGHT:DLIGHT_SET(300), + BFE1:A:0:BRIGHT:DLIGHT_FADE(0), + BFE1:A:0:BRIGHT:TRANS_FADE(0%), + BFE1:A:0:BRIGHT:KILLSOUND, + BFE1:A:8:BRIGHT:PLAYSOUND(RXPLOD), + BFE1:B:8:BRIGHT:NOTHING, + BFE1:C:8:BRIGHT:SPARE_ATTACK, + BFE1:D:8:BRIGHT:NOTHING, + BFE1:E:8:BRIGHT:NOTHING, + BFE1:F:8:BRIGHT:NOTHING, + #REMOVE; + + +//------------------ Monster Attacks ------------------ + +[FORMER_HUMAN_PISTOL] +ATTACKTYPE=SHOT; +SHOTCOUNT=1; +DAMAGE.VAL=6; +DAMAGE.MAX=30; +DAMAGE.OBITUARY="OB_Zombie"; +DAMAGE.FLASH_COLOUR=#00FF00; +ACCURACY_ANGLE=22; +ACCURACY_SLOPE=12; +ENGAGED_SOUND=PISTOL; +ATTACK_SPECIAL=FACE_TARGET; +PUFF=PUFF; + +[FORMER_HUMAN_SHOTGUN] +ATTACKTYPE=SHOT; +SHOTCOUNT=3; +DAMAGE.VAL=3; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_ShotgunGuy"; +ACCURACY_ANGLE=14; +ACCURACY_SLOPE=0; +ENGAGED_SOUND=SHOTGN; +KEEP_FIRING_CHANCE=3.92%; +ATTACK_SPECIAL=FACE_TARGET; +PUFF=PUFF; + +[FORMER_HUMAN_CHAINGUN] +ATTACKTYPE=SHOT; +SHOTCOUNT=1; +DAMAGE.VAL=3; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_ChaingunGuy"; +ACCURACY_ANGLE=22; +ACCURACY_SLOPE=12; +ENGAGED_SOUND=SHOTGN; +KEEP_FIRING_CHANCE=15.68%; +ATTACK_SPECIAL=FACE_TARGET; +PUFF=PUFF; + +[IMP_CLOSECOMBAT] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=3; +DAMAGE.MAX=24; +DAMAGE.OBITUARY="OB_ImpClaw"; +ENGAGED_SOUND=CLAW; +ATTACKRANGE=64; +ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; + +[IMP_FIREBALL] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +DAMAGE.VAL=3; +DAMAGE.MAX=24; +DAMAGE.OBITUARY="OB_Imp"; +ATTACK_HEIGHT=32; +SPEED=10; +FAST=2; +ATTACK_SPECIAL=FACE_TARGET; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; +LAUNCH_SOUND=FIRSHT; +TRANSLUCENCY=65%; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=150; +DLIGHT.COLOUR=#FF0000; + +STATES(IDLE)=BAL1:A:4:BRIGHT:NOTHING, + BAL1:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=BAL1:C:0:BRIGHT:DLIGHT_SET(200), + BAL1:C:0:BRIGHT:DLIGHT_FADE(0), + BAL1:C:0:BRIGHT:TRANS_FADE(0%), + BAL1:C:0:BRIGHT:KILLSOUND, + BAL1:C:6:BRIGHT:PLAYSOUND(FIRXPL), + BAL1:D:6:BRIGHT:NOTHING, + BAL1:E:6:BRIGHT:NOTHING, + #REMOVE; + +[DEMON_CLOSECOMBAT] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=4; +DAMAGE.MAX=40; +DAMAGE.OBITUARY="OB_Demon"; +ATTACKRANGE=64; +ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; + +[DOG_BITE] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=4; +DAMAGE.MAX=40; +DAMAGE.OBITUARY="OB_Dog"; +ATTACKRANGE=64; +ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; + +[SKULL_ASSAULT] +ATTACKTYPE=SKULLFLY; +DAMAGE.VAL=3; +DAMAGE.MAX=24; +DAMAGE.OBITUARY="OB_Skull"; +ASSAULT_SPEED=20; +ATTEMPT_SOUND=SKLATK; +ATTACK_SPECIAL=FACE_TARGET; + +[CACO_CLOSECOMBAT] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=10; +DAMAGE.MAX=60; +DAMAGE.OBITUARY="OB_CacoBite"; +ATTACKRANGE=64; +ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; + +[CACO_FIREBALL] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +DAMAGE.VAL=5; +DAMAGE.MAX=40; +DAMAGE.OBITUARY="OB_Cacodemon"; +ATTACK_HEIGHT=32; +LAUNCH_SOUND=FIRSHT; +SPEED=10; +FAST=2; +ATTACK_SPECIAL=FACE_TARGET; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; +TRANSLUCENCY=75%; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=150; +DLIGHT.COLOUR=#FF0000; + +STATES(IDLE)=BAL2:A:4:BRIGHT:NOTHING, + BAL2:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=BAL2:C:0:BRIGHT:DLIGHT_SET(200), + BAL2:C:0:BRIGHT:DLIGHT_FADE(0), + BAL2:C:0:BRIGHT:TRANS_FADE(0%), + BAL2:C:0:BRIGHT:KILLSOUND, + BAL2:C:6:BRIGHT:PLAYSOUND(FIRXPL), + BAL2:D:6:BRIGHT:NOTHING, + BAL2:E:6:BRIGHT:NOTHING, + #REMOVE; + +[REVENANT_CLOSECOMBAT] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=6; +DAMAGE.MAX=60; +DAMAGE.OBITUARY="OB_RevPunch"; +ATTEMPT_SOUND=SKESWG; +ENGAGED_SOUND=SKEPCH; +ATTACKRANGE=64; + +[REVENANT_MISSILE] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=11; +DAMAGE.VAL=10; +DAMAGE.MAX=80; +DAMAGE.OBITUARY="OB_Revenant"; +ATTACK_HEIGHT=48; +SPEED=10; +NO_TRACE_CHANCE=50%; +TRACE_ANGLE=16.8; +TOO_CLOSE_RANGE=196; +ATTACK_SPECIAL=FACE_TARGET,SMOKING_TRACER; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; +LAUNCH_SOUND=SKEATK; +PUFF=SMOKE; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=100; +DLIGHT.COLOUR=#FF8000; + +STATES(IDLE)=FATB:A:2:BRIGHT:RANDOM_TRACER, + FATB:B:2:BRIGHT:NOTHING; + +STATES(DEATH)=FBXP:A:0:BRIGHT:DLIGHT_FADE(0), + FBXP:A:0:BRIGHT:TRANS_FADE(0%), + FBXP:A:0:BRIGHT:KILLSOUND, + FBXP:A:8:BRIGHT:PLAYSOUND(BAREXP), + FBXP:B:6:BRIGHT:NOTHING, + FBXP:C:4:BRIGHT:NOTHING, + #REMOVE; + +[BARON_CLOSECOMBAT] +ATTACKTYPE=CLOSECOMBAT; +DAMAGE.VAL=10; +DAMAGE.MAX=80; +DAMAGE.OBITUARY="OB_BaronClaw"; +ENGAGED_SOUND=CLAW; +ATTACKRANGE=64; +ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; + +[BARON_FIREBALL] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +DAMAGE.VAL=8; +DAMAGE.MAX=64; +DAMAGE.OBITUARY="OB_Baron"; +ATTACK_HEIGHT=32; +SPEED=15; +FAST=1.33333; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; +LAUNCH_SOUND=FIRSHT; +ATTACK_SPECIAL=FACE_TARGET; +TRANSLUCENCY=65%; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=100; +DLIGHT.COLOUR=#00FF00; + +STATES(IDLE)=BAL7:A:4:BRIGHT:NOTHING, + BAL7:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=BAL7:C:0:BRIGHT:DLIGHT_SET(200), + BAL7:C:0:BRIGHT:DLIGHT_FADE(0), + BAL7:C:0:BRIGHT:TRANS_FADE(0%), + BAL7:C:0:BRIGHT:KILLSOUND, + BAL7:C:7:BRIGHT:PLAYSOUND(FIRXPL), + BAL7:D:7:BRIGHT:NOTHING, + BAL7:E:7:BRIGHT:NOTHING, + #REMOVE; + +[ELEMENTAL_SPAWNER] +ATTACKTYPE=SPAWNER; +ATTACK_HEIGHT=8; +ATTACK_SPECIAL=PRESTEP_SPAWN; +SPAWNED_OBJECT=LOST_SOUL; +SPAWN_OBJECT_STATE=MISSILE:2; +SPAWN_LIMIT=21; +ATTACK_SPECIAL=FACE_TARGET; + +[ELEMENTAL_DEATHSPAWN] +ATTACKTYPE=TRIPLE_SPAWNER; +ATTACK_HEIGHT=8; +ATTACK_SPECIAL=PRESTEP_SPAWN,FACE_TARGET; +SPAWNED_OBJECT=LOST_SOUL; +SPAWN_OBJECT_STATE=MISSILE:2; + +[MANCUBUS_FIREBALL] +ATTACKTYPE=FIXED_SPREADER; +HEIGHT=8; +RADIUS=6; +DAMAGE.VAL=8; +DAMAGE.MAX=64; +DAMAGE.OBITUARY="OB_Mancubus"; +ATTACK_HEIGHT=32; +SPEED=20; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; +ATTEMPT_SOUND=MANATK; +LAUNCH_SOUND=FIRSHT; +DEATH_SOUND=FIRXPL; +TRANSLUCENCY=80%; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=100; +DLIGHT.COLOUR=#FF0000; + +STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, + MANF:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=MISL:B:0:BRIGHT:DLIGHT_SET(200), + MISL:B:0:BRIGHT:DLIGHT_FADE(0), + MISL:B:0:BRIGHT:TRANS_FADE(0%), + MISL:B:0:BRIGHT:KILLSOUND, + MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), + MISL:C:6:BRIGHT:NOTHING, + MISL:D:4:BRIGHT:NOTHING, + #REMOVE; + +[ARACHNOTRON_PLASMA] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=13; +DAMAGE.VAL=5; +DAMAGE.MAX=40; +DAMAGE.OBITUARY="OB_Arachnotron"; +ATTACK_HEIGHT=16; +SPEED=25; +KEEP_FIRING_CHANCE=3.92%; +LAUNCH_SOUND=PLASMA; +ATTACK_SPECIAL=FACE_TARGET; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; +TRANSLUCENCY=45%; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=150; +DLIGHT.COLOUR=#C0FF00; + +STATES(IDLE)=APLS:A:5:BRIGHT:NOTHING, + APLS:B:5:BRIGHT:NOTHING; + +STATES(DEATH)=APBX:A:0:BRIGHT:DLIGHT_SET(200), + APBX:A:0:BRIGHT:DLIGHT_FADE(0), + APBX:A:5:BRIGHT:KILLSOUND, + APBX:A:5:BRIGHT:PLAYSOUND(FIRXPL), + APBX:A:5:BRIGHT:TRANS_FADE(0%), + APBX:B:5:BRIGHT:NOTHING, + APBX:C:5:BRIGHT:NOTHING, + APBX:D:5:BRIGHT:NOTHING, + APBX:E:5:BRIGHT:NOTHING, + #REMOVE; + +[ARCHVILE_FIRE] +ATTACKTYPE=TRACKER; +RADIUS=20; +HEIGHT=16; +DAMAGE.VAL=20; +DAMAGE.OBITUARY="OB_Archvile"; +EXPLODE_DAMAGE.VAL=70; +ATTEMPT_SOUND=VILATK; +ENGAGED_SOUND=BAREXP; +LAUNCH_SOUND=FLAMST; +ACTIVE_SOUND=FLAME; +ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; +TRANSLUCENCY=80%; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=150; +DLIGHT.COLOUR=#FFFF40; + +STATES(SPAWN)=FIRE:A:2:BRIGHT:DLIGHT_FADE(0), + FIRE:A:2:BRIGHT:TRANS_FADE(0%), + FIRE:A:2:BRIGHT:TRACKERSTART, + FIRE:B:2:BRIGHT:TRACKERFOLLOW, + FIRE:A:2:BRIGHT:TRACKERFOLLOW, + FIRE:B:2:BRIGHT:TRACKERFOLLOW, + FIRE:C:2:BRIGHT:TRACKERACTIVE, + FIRE:B:2:BRIGHT:TRACKERFOLLOW, + FIRE:C:2:BRIGHT:TRACKERFOLLOW, + FIRE:B:2:BRIGHT:TRACKERFOLLOW, + FIRE:C:2:BRIGHT:TRACKERFOLLOW, + FIRE:D:2:BRIGHT:TRACKERFOLLOW, + FIRE:C:2:BRIGHT:TRACKERFOLLOW, + FIRE:D:2:BRIGHT:TRACKERFOLLOW, + FIRE:C:2:BRIGHT:TRACKERFOLLOW, + FIRE:D:2:BRIGHT:TRACKERFOLLOW, + FIRE:E:2:BRIGHT:TRACKERFOLLOW, + FIRE:D:2:BRIGHT:TRACKERFOLLOW, + FIRE:E:2:BRIGHT:TRACKERFOLLOW, + FIRE:D:2:BRIGHT:TRACKERFOLLOW, + FIRE:E:2:BRIGHT:TRACKERACTIVE, + FIRE:F:2:BRIGHT:TRACKERFOLLOW, + FIRE:E:2:BRIGHT:TRACKERFOLLOW, + FIRE:F:2:BRIGHT:TRACKERFOLLOW, + FIRE:E:2:BRIGHT:TRACKERFOLLOW, + FIRE:F:2:BRIGHT:TRACKERFOLLOW, + FIRE:G:2:BRIGHT:TRACKERFOLLOW, + FIRE:H:2:BRIGHT:TRACKERFOLLOW, + FIRE:G:2:BRIGHT:TRACKERFOLLOW, + FIRE:H:2:BRIGHT:TRACKERFOLLOW, + FIRE:G:2:BRIGHT:TRACKERFOLLOW, + FIRE:H:2:BRIGHT:TRACKERFOLLOW, + #REMOVE; + +[WOLFENSTEIN_CHAINGUN] +ATTACKTYPE=SHOT; +SHOTCOUNT=1; +DAMAGE.VAL=3; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_WolfSS"; +ACCURACY_ANGLE=22; +ACCURACY_SLOPE=12; +ENGAGED_SOUND=SHOTGN; +KEEP_FIRING_CHANCE=15.68%; +ATTACK_SPECIAL=FACE_TARGET; +PUFF=PUFF; + +[MASTERMIND_CHAINGUN] +ATTACKTYPE=SHOT; +SHOTCOUNT=3; +DAMAGE.VAL=3; +DAMAGE.MAX=15; +DAMAGE.OBITUARY="OB_Mastermind"; +ACCURACY_ANGLE=14; +ACCURACY_SLOPE=0; +ENGAGED_SOUND=SHOTGN; +KEEP_FIRING_CHANCE=3.92%; +ATTACK_SPECIAL=FACE_TARGET; +PUFF=PUFF; + +[CYBERDEMON_MISSILE] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=11; +DAMAGE.VAL=20; +DAMAGE.MAX=160; +DAMAGE.OBITUARY="OB_Cyberdemon"; +SPEED=20; +ACCURACY_ANGLE=0; +ACCURACY_SLOPE=0; +ATTACK_HEIGHT=44; +X_OFFSET=20; +EXPLODE_DAMAGE.VAL=128; +EXPLODE_DAMAGE.OBITUARY="OB_Cyberdemon"; +ATTACK_SPECIAL=FACE_TARGET; +PROJECTILE_SPECIAL=NOBLOCKMAP,DROPOFF,NOGRAVITY,MISSILE,NOSHADOW; +LAUNCH_SOUND=RLAUNC; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=100; +DLIGHT.COLOUR=#CC4400; + +STATES(IDLE)=MISL:A:1:BRIGHT:NOTHING; + +STATES(DEATH)=MISL:B:0:BRIGHT:DLIGHT_SET(300), + MISL:B:0:BRIGHT:DLIGHT_FADE(0), + MISL:B:0:BRIGHT:TRANS_FADE(0%), + MISL:B:0:BRIGHT:KILLSOUND, + MISL:B:0:BRIGHT:PLAYSOUND(BAREXP), + MISL:B:8:BRIGHT:EXPLOSIONDAMAGE, + MISL:C:6:BRIGHT:NOTHING, + MISL:D:4:BRIGHT:NOTHING, + #REMOVE; + + +// ------------------ Boss Brain Stuff ------------------ + +[BRAIN_CUBE] +ATTACKTYPE=SHOOTTOSPOT; +RADIUS=6; +HEIGHT=8; +SPAWNHEALTH=1000; +DAMAGE.VAL=8; +DAMAGE.MAX=64; +ATTACK_HEIGHT=16; +SPEED=9; +MASS=100; +REACTIONTIME=8T; +PROJECTILE_SPECIAL=NOBLOCKMAP,NOCLIP,MISSILE,DROPOFF,NOGRAVITY,BOSSMAN; +LAUNCH_SOUND=BOSPIT; +ACTIVE_SOUND=BOSCUB; +DEATH_SOUND=TELEPT; // FIRXPL +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=5; +DLIGHT.COLOUR=#FFFF40; + +STATES(IDLE)=BOSF:A:3:BRIGHT:CUBETRACER, + BOSF:B:3:BRIGHT:NOTHING, + BOSF:C:3:BRIGHT:CUBETRACER, + BOSF:D:3:BRIGHT:MAKEACTIVESOUND; + +STATES(DEATH)=FIRE:A:0:BRIGHT:DLIGHT_SET(200), + FIRE:A:0:BRIGHT:DLIGHT_FADE(0), + FIRE:A:4:BRIGHT:TRANS_FADE(10%), + FIRE:B:4:BRIGHT:NOTHING, + FIRE:C:4:BRIGHT:NOTHING, + FIRE:D:4:BRIGHT:NOTHING, + FIRE:E:4:BRIGHT:NOTHING, + FIRE:F:4:BRIGHT:NOTHING, + FIRE:G:4:BRIGHT:NOTHING, + FIRE:H:4:BRIGHT:CUBESPAWN, + #REMOVE; + + +// ------------------ Experimental Stuff ------------------ + +[TRACER_MISSILE_L] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=11; +DAMAGE.VAL=10; +DAMAGE.MAX=80; +ATTACK_HEIGHT=50; +X_OFFSET=-16; +SPEED=10; +NO_TRACE_CHANCE=1.56%; +TOO_CLOSE_RANGE=196; +ATTACK_SPECIAL=SMOKING_TRACER; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; +LAUNCH_SOUND=SKEATK; +DEATH_SOUND=BAREXP; +PUFF=SMOKE; + +STATES(IDLE)=FATB:A:2:BRIGHT:TRACER, + FATB:B:2:BRIGHT:TRACER; + +STATES(DEATH)=FBXP:A:8:BRIGHT:TRANS_FADE(10%), + FBXP:B:6:BRIGHT:NOTHING, + FBXP:C:4:BRIGHT:NOTHING, + #REMOVE; + +[TRACER_MISSILE_R] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=11; +DAMAGE.VAL=10; +DAMAGE.MAX=80; +X_OFFSET=16; +ATTACK_HEIGHT=50; +SPEED=10; +NO_TRACE_CHANCE=1.56%; +TOO_CLOSE_RANGE=196; +ATTACK_SPECIAL=SMOKING_TRACER; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; +LAUNCH_SOUND=SKEATK; +DEATH_SOUND=BAREXP; +PUFF=SMOKE; + +STATES(IDLE)=FATB:A:2:BRIGHT:TRACER, + FATB:B:2:BRIGHT:TRACER; + +STATES(DEATH)=FBXP:A:8:BRIGHT:TRANS_FADE(10%), + FBXP:B:6:BRIGHT:NOTHING, + FBXP:C:4:BRIGHT:NOTHING, + #REMOVE; + +[IMP_SPAWNER] +ATTACKTYPE=SPAWNER; +ATTACK_HEIGHT=0; +SPAWNED_OBJECT=IMP; +SPAWN_OBJECT_STATE=CHASE:1; +ENGAGED_SOUND=TELEPT; + +[MANCUBUS_FIREBALL_L] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +DAMAGE.VAL=8; +DAMAGE.MAX=64; +DAMAGE.OBITUARY="OB_Mancubus"; +ATTACK_HEIGHT=24; +X_OFFSET=-24; +SPEED=20; +ACCURACY_ANGLE=17; +ACCURACY_SLOPE=9; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; +ATTEMPT_SOUND=MANATK; +LAUNCH_SOUND=FIRSHT; +TRANSLUCENCY=80%; + +STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, + MANF:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=MISL:B:0:BRIGHT:TRANS_FADE(10%), + MISL:B:0:BRIGHT:KILLSOUND, + MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), + MISL:C:6:BRIGHT:NOTHING, + MISL:D:4:BRIGHT:NOTHING, + #REMOVE; + +[MANCUBUS_FIREBALL_R] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +DAMAGE.VAL=8; +DAMAGE.MAX=64; +DAMAGE.OBITUARY="OB_Mancubus"; +ATTACK_HEIGHT=24; +X_OFFSET=24; +SPEED=20; +ACCURACY_ANGLE=17; +ACCURACY_SLOPE=9; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; +ATTEMPT_SOUND=MANATK; +LAUNCH_SOUND=FIRSHT; +TRANSLUCENCY=80%; + +STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, + MANF:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=MISL:B:0:BRIGHT:TRANS_FADE(10%), + MISL:B:0:BRIGHT:KILLSOUND, + MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), + MISL:C:6:BRIGHT:NOTHING, + MISL:D:4:BRIGHT:NOTHING, + #REMOVE; + + + +[Y_PARTICLE] +ATTACKTYPE=FIXED_SPREADER; +HEIGHT=4; +RADIUS=4; +ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; +PROJECTILE_SPECIAL=CROSSLINES,BOUNCE,DROPOFF,MISSILE,NOSHADOW; +DAMAGE.VAL=0; +DAMAGE.MAX=0; +ATTACK_HEIGHT=32; +SPEED=10; +ACCURACY_SLOPE=15; +ACCURACY_ANGLE=25; +BOUNCE_SPEED=0.5; +SLOPE_OFFSET=8; +STEP_SIZE=0.2; +SPRITE_SCALE=0.5; +PUFF=Y_PARTICLE; + +STATES(SPAWN)=PRT1:A:1:BRIGHT:SMOKING, + PRT1:A:0:BRIGHT:NOTHING; + +STATES(BOUNCE)=PRT1:A:1:BRIGHT:SMOKING, + PRT1:A:1:BRIGHT:NOTHING, + PRT1:A:1:BRIGHT:NOTHING, + #DEATH; + +STATES(DEATH)=PRT1:A:2:BRIGHT:TRANS_FADE(0%), + PRT1:A:10:BRIGHT:NOTHING, + PRT1:A:5:NORMAL:NOTHING, + #REMOVE; + +[B_PARTICLE] +ATTACKTYPE=FIXED_SPREADER; +HEIGHT=4; +RADIUS=4; +ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; +PROJECTILE_SPECIAL=CROSSLINES,BOUNCE,DROPOFF,MISSILE,NOSHADOW; +DAMAGE.VAL=0; +DAMAGE.MAX=0; +ATTACK_HEIGHT=32; +SPEED=10; +ACCURACY_SLOPE=15; +ACCURACY_ANGLE=25; +BOUNCE_SPEED=0.5; +SLOPE_OFFSET=8; +STEP_SIZE=0.2; +SPRITE_SCALE=0.5; +PUFF=B_PARTICLE; + +STATES(SPAWN)=PRT2:A:1:BRIGHT:SMOKING, + PRT2:A:0:BRIGHT:NOTHING; + +STATES(BOUNCE)=PRT2:A:1:BRIGHT:SMOKING, + PRT2:A:1:BRIGHT:NOTHING, + PRT2:A:1:BRIGHT:NOTHING, + #DEATH; + +STATES(DEATH)=PRT2:A:2:BRIGHT:TRANS_FADE(0%), + PRT2:A:10:BRIGHT:NOTHING, + PRT2:A:5:NORMAL:NOTHING, + #REMOVE; + + +[G_PARTICLE] +ATTACKTYPE=FIXED_SPREADER; +HEIGHT=2; +RADIUS=2; +ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; +PROJECTILE_SPECIAL=CROSSLINES,BOUNCE,DROPOFF,MISSILE,NOSHADOW; +DAMAGE.VAL=0; +DAMAGE.MAX=0; +ATTACK_HEIGHT=2; +SPEED=10; +ACCURACY_SLOPE=15; +ACCURACY_ANGLE=25; +SLOPE_OFFSET=8; +STEP_SIZE=0.2; +SPRITE_SCALE=0.5; +PUFF=G_PARTICLE; + +STATES(SPAWN)=PRT3:A:1:NORMAL:SMOKING, + PRT3:A:0:NORMAL:NOTHING,#DEATH; + +//STATES(BOUNCE)=PRT2:A:1:NORMAL:SMOKING, +// PRT2:A:1:NORMAL:NOTHING, +// PRT2:A:1:NORMAL:NOTHING, +// #DEATH; + +STATES(DEATH)=PRT3:A:2:NORMAL:TRANS_FADE(0%), + PRT3:A:10:NORMAL:SMOKING, + PRT3:A:5:NORMAL:NOTHING, + #REMOVE; + + + +[EDGE_DEBRIS_SHOT] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; +PROJECTILE_SPECIAL=NOSHADOW,NOBLOCKMAP,SLIDER,CROSSLINES,DROPOFF,BARE_MISSILE,CORPSE,NOZBUFFER; +ACCURACY_ANGLE=359; //makes the shots go all around +ACCURACY_SLOPE=65; +ATTACK_HEIGHT=0;//32; +SPEED=5;//10; +BOUNCE_SPEED=0.6; +SLOPE_OFFSET=22; +ANGLE_OFFSET=45; +Y_OFFSET=4; + +TRANSLUCENCY=40%; + +STATES(SPAWN)=GLS1:A:3:NORMAL:NOTHING, + GLS2:A:3:NORMAL:NOTHING, + GLS3:A:3:NORMAL:NOTHING, + GLS4:A:3:NORMAL:NOTHING, + GLS5:A:3:NORMAL:NOTHING, + GLS6:A:3:NORMAL:NOTHING, + GLS7:A:3:NORMAL:NOTHING, + GLS8:A:3:NORMAL:NOTHING, + GLS9:A:3:NORMAL:NOTHING; + +STATES(DEATH)=GLS1:A:3:NORMAL:NOTHING, + GLS2:A:3:NORMAL:NOTHING, + GLS3:A:3:NORMAL:NOTHING, + GLS4:A:3:NORMAL:NOTHING, + GLS5:A:3:NORMAL:NOTHING, + GLS6:A:6:NORMAL:NOTHING, + GLS7:A:6:NORMAL:NOTHING, + GLS8:A:6:NORMAL:NOTHING, + GLS9:A:35:NORMAL:TRANSFADE(0%), + #REMOVE; + + + + +[MUSHROOM_FIREBALL] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +DAMAGE.VAL=8; +DAMAGE.MAX=64; +SPEED=20; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF; +LAUNCH_SOUND=FIRSHT; +TRANSLUCENCY=80%; + +STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, + MANF:B:4:BRIGHT:NOTHING; + +STATES(DEATH)=MISL:B:0:BRIGHT:TRANS_FADE(10%), + MISL:B:0:BRIGHT:KILLSOUND, + MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), + MISL:C:6:BRIGHT:NOTHING, + MISL:D:4:BRIGHT:NOTHING, + #REMOVE; + +// These are named INTERNAL_ to try to avoid conflicting with existing mods +// They are the default attacks used by the A_FireOldBFG and A_BetaSkullAttack pointers + +[INTERNAL_BETA_BFG_1] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +ACCURACY_ANGLE=14; +ACCURACY_SLOPE=14; +DAMAGE.VAL=5; +DAMAGE.MAX=40; +DAMAGE.OBITUARY="OB_BFG"; +ATTACK_HEIGHT=32; +SPEED=20; +FAST=2; +TRANSLUCENCY=50%; +ATTACK_SPECIAL=FACE_TARGET; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=80; +DLIGHT.COLOUR=#008800; + +STATES(IDLE)=PLS1:A:3:LIT88:NOTHING, + PLS1:B:3:LIT88:NOTHING, + PLS1:C:3:LIT88:NOTHING, + PLS1:D:3:LIT88:NOTHING; + +STATES(DEATH)=PLS1:E:0:LIT88:DLIGHT_FADE(0), + PLS1:E:0:LIT88:TRANS_FADE(0%), + PLS1:E:2:LIT88:PLAYSOUND(FIRXPL), + PLS1:F:2:LIT88:NOTHING, + PLS1:F:2:LIT88:NOTHING, + PLS1:F:2:LIT88:NOTHING, + PLS1:G:2:LIT88:NOTHING, + PLS1:G:2:LIT88:NOTHING, + #REMOVE; + +[INTERNAL_BETA_BFG_2] +ATTACKTYPE=PROJECTILE; +HEIGHT=8; +RADIUS=6; +ACCURACY_ANGLE=14; +ACCURACY_SLOPE=14; +DAMAGE.VAL=5; +DAMAGE.MAX=40; +DAMAGE.OBITUARY="OB_BFG"; +ATTACK_HEIGHT=32; +SPEED=20; +FAST=2; +ATTACK_SPECIAL=FACE_TARGET; +TRANSLUCENCY=50%; +PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; +DLIGHT.TYPE=MODULATE; +DLIGHT.RADIUS=80; +DLIGHT.COLOUR=#880000; + +STATES(IDLE)=PLS2:A:3:LIT88:NOTHING, + PLS2:B:3:LIT88:NOTHING, + PLS2:A:3:LIT88:NOTHING, + PLS2:B:3:LIT88:NOTHING; + +STATES(DEATH)=PLS2:C:0:LIT88:DLIGHT_FADE(0), + PLS2:C:0:LIT88:TRANS_FADE(0%), + PLS2:C:2:LIT88:PLAYSOUND(FIRXPL), + PLS2:D:2:LIT88:NOTHING, + PLS2:D:2:LIT88:NOTHING, + PLS2:D:2:LIT88:NOTHING, + PLS2:E:2:LIT88:NOTHING, + PLS2:E:2:LIT88:NOTHING, + #REMOVE; + +[INTERNAL_FIRE_OLD_BFG] +ATTACKTYPE=DUALATTACK; +DUALATTACK1=INTERNAL_BETA_BFG_1; +DUALATTACK2=INTERNAL_BETA_BFG_2; + +[INTERNAL_BETA_LOST_SOUL_ATTACK] +ATTACKTYPE=PSYCHIC; +DAMAGE.VAL=3; +DAMAGE.MAX=24; +ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; + + + + + + + + + + + + diff --git a/source_files/ddf/attack.cc b/source_files/ddf/attack.cc index 4cb9dcfb0..4adc9d2b1 100644 --- a/source_files/ddf/attack.cc +++ b/source_files/ddf/attack.cc @@ -57,6 +57,7 @@ const commandlist_t damage_commands[] = DF("DAMAGE_IF_BENEFIT", damage_if, DDF_MobjGetBenefit), DF("ALL_PLAYERS", all_players, DDF_MainGetBoolean), // Doesn't do anything (yet) DF("GROUNDED_MONSTERS_ONLY", grounded_monsters, DDF_MainGetBoolean), + DF("FLASH_COLOUR", damage_flash_colour, DDF_MainGetRGB), DF("OBITUARY", obituary, DDF_MainGetString), DF("PAIN_STATE", pain, DDF_AtkGetLabel), diff --git a/source_files/ddf/main.cc b/source_files/ddf/main.cc index 81a96ac68..d89dddd0b 100644 --- a/source_files/ddf/main.cc +++ b/source_files/ddf/main.cc @@ -1913,6 +1913,7 @@ void damage_c::Copy(damage_c &src) overkill = src.overkill; no_armour = src.no_armour; + damage_flash_colour = src.damage_flash_colour; bypass_all = src.bypass_all; instakill = src.instakill; @@ -1953,6 +1954,7 @@ void damage_c::Default(damage_c::default_e def) damage_unless = nullptr; damage_if = nullptr; grounded_monsters = false; + damage_flash_colour = T_RED; all_players = false; break; } @@ -1969,6 +1971,7 @@ void damage_c::Default(damage_c::default_e def) damage_unless = nullptr; damage_if = nullptr; grounded_monsters = false; + damage_flash_colour = T_RED; all_players = false; break; } @@ -1987,6 +1990,7 @@ void damage_c::Default(damage_c::default_e def) damage_unless = nullptr; damage_if = nullptr; grounded_monsters = false; + damage_flash_colour = T_RED; all_players = false; break; } diff --git a/source_files/ddf/thing.h b/source_files/ddf/thing.h index f61b00742..746c2386f 100644 --- a/source_files/ddf/thing.h +++ b/source_files/ddf/thing.h @@ -746,6 +746,9 @@ class damage_c // armour -- and vice versa. bool no_armour; + // Color of the flash when player is hit by this damage type + rgbcol_t damage_flash_colour; + // Apply damange unconditionally bool bypass_all; // Damage is always health+1 with no resistances applied diff --git a/source_files/edge/e_player.cc b/source_files/edge/e_player.cc index 5c9d0a87e..ff68a84ac 100644 --- a/source_files/edge/e_player.cc +++ b/source_files/edge/e_player.cc @@ -144,6 +144,7 @@ void G_PlayerFinishLevel(player_t *p, bool keep_cards) p->damage_pain = 0; p->bonuscount = 0; p->grin_count = 0; + p->last_damage_colour = T_RED; //Lobo 2023: uncomment if still getting // "INTERNAL ERROR: player has a removed attacker" @@ -198,6 +199,7 @@ void player_s::Reborn() damage_pain = 0; extralight = 0; flash = false; + last_damage_colour = T_RED; attacker = NULL; diff --git a/source_files/edge/e_player.h b/source_files/edge/e_player.h index b4c50567b..8bbec2983 100644 --- a/source_files/edge/e_player.h +++ b/source_files/edge/e_player.h @@ -278,6 +278,9 @@ typedef struct player_s // how much damage was done (used for status bar) float damage_pain; + // damage flash colour of last damage type inflicted + rgbcol_t last_damage_colour; + // So gun flashes light up the screen. int extralight; bool flash; diff --git a/source_files/edge/p_inter.cc b/source_files/edge/p_inter.cc index d2898bc5e..334fa0a3f 100644 --- a/source_files/edge/p_inter.cc +++ b/source_files/edge/p_inter.cc @@ -1541,6 +1541,12 @@ void P_DamageMobj(mobj_t * target, mobj_t * inflictor, mobj_t * source, // add damage after armour / invuln detection if (damage > 0) { + // Change damage color if new inflicted damage is greater than current processed damage + if (damage >= player->damagecount) + { + player->last_damage_colour = damtype->damage_flash_colour; + } + player->damagecount += (int)MAX(damage, DAMAGE_ADD_MIN); player->damage_pain += damage; } diff --git a/source_files/edge/r_colormap.cc b/source_files/edge/r_colormap.cc index 5e89d7e6b..be4b1b7bf 100644 --- a/source_files/edge/r_colormap.cc +++ b/source_files/edge/r_colormap.cc @@ -550,13 +550,17 @@ void V_ColourNewFrame(void) // Returns an RGB value from an index value - used the current // palette. The byte pointer is assumed to point a 3-byte array. // -void V_IndexColourToRGB(int indexcol, byte *returncol, float damageAmount) +void V_IndexColourToRGB(int indexcol, byte *returncol, rgbcol_t last_damage_colour, float damageAmount) { if ((cur_palette == PALETTE_NORMAL) || (cur_palette == PALETTE_PAIN)) { - returncol[0] = (byte)MAX(0, MIN(255, damageAmount * 2.5)); - returncol[1] = 0; - returncol[2] = 0; + float r = (float)RGB_RED(last_damage_colour) / 255.0; + float g = (float)RGB_GRN(last_damage_colour) / 255.0; + float b = (float)RGB_BLU(last_damage_colour) / 255.0; + + returncol[0] = (byte)MAX(0, MIN(255, r * damageAmount * 2.5)); + returncol[1] = (byte)MAX(0, MIN(255, g * damageAmount * 2.5)); + returncol[2] = (byte)MAX(0, MIN(255, b * damageAmount * 2.5)); } else { diff --git a/source_files/edge/r_colormap.h b/source_files/edge/r_colormap.h index c08d2ef27..1d56916dd 100644 --- a/source_files/edge/r_colormap.h +++ b/source_files/edge/r_colormap.h @@ -40,7 +40,7 @@ void V_InitPalette(void); void V_InitColour(void); // -ACB- 1999/10/11 Gets an RGB colour from the current palette -void V_IndexColourToRGB(int indexcol, byte *returncol, float damageAmount); +void V_IndexColourToRGB(int indexcol, byte *returncol, rgbcol_t last_damage_colour, float damageAmount); rgbcol_t V_LookupColour(int col); diff --git a/source_files/edge/r_effects.cc b/source_files/edge/r_effects.cc index 704e34cf3..47ef1847c 100644 --- a/source_files/edge/r_effects.cc +++ b/source_files/edge/r_effects.cc @@ -240,7 +240,7 @@ void RGL_PaletteEffect(player_t *player) } else { - V_IndexColourToRGB(pal_black, rgb_data, player->damagecount); + V_IndexColourToRGB(pal_black, rgb_data, player->last_damage_colour, player->damagecount); int rgb_max = MAX(rgb_data[0], MAX(rgb_data[1], rgb_data[2])); From 645c3c418db2306460a65aebd1449d9caf99ab10 Mon Sep 17 00:00:00 2001 From: Ambroise Garel <47314805+akaAgar@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:31:15 +0200 Subject: [PATCH 3/3] Removed test DDF file --- autoload/doom2/attacks.ddf | 1026 ------------------------------------ 1 file changed, 1026 deletions(-) delete mode 100644 autoload/doom2/attacks.ddf diff --git a/autoload/doom2/attacks.ddf b/autoload/doom2/attacks.ddf deleted file mode 100644 index 6b55691d3..000000000 --- a/autoload/doom2/attacks.ddf +++ /dev/null @@ -1,1026 +0,0 @@ -// -// EDGE ATTACKS.DDF -redefine or add new attacks. -// For documentation, see https://edge-classic.github.io/ -// - - - -#VERSION 1.30 - -//------------------ Player Attacks ------------------ - -[PLAYER_PUNCH] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=2; -DAMAGE.MAX=20; -DAMAGE.OBITUARY="OB_Punch"; -ATTACK_HEIGHT=32; -ATTACKRANGE=96; -ACCURACY_ANGLE=0; -ACCURACY_SLOPE=0; -BERSERK_MULTIPLY=10; -ATTACK_SPECIAL=FACE_TARGET,FORCE_AIM,SILENT_TO_MONSTERS; -ENGAGED_SOUND=PUNCH; -PUFF=PUFF; - -[PLAYER_SAW] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=2; -DAMAGE.MAX=20; -DAMAGE.OBITUARY="OB_Saw"; -ATTACK_HEIGHT=28; -X_OFFSET=4; -ACCURACY_ANGLE=12; -ACCURACY_SLOPE=6; -ENGAGED_SOUND=SAWHIT; -ATTACK_SPECIAL=FACE_TARGET,FORCE_AIM; -ATTACKRANGE=63.9; -PUFF=PUFF; - -[PLAYER_PISTOL] -ATTACKTYPE=SHOT; -SHOTCOUNT=1; -DAMAGE.VAL=5; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_Pistol"; -ATTACK_HEIGHT=32; -ACCURACY_ANGLE=3; -ACCURACY_SLOPE=1.5; -ENGAGED_SOUND=PISTOL; -ATTACKRANGE=2048; -PUFF=PUFF; - -[PLAYER_SHOTGUN] -ATTACKTYPE=SHOT; -SHOTCOUNT=7; -DAMAGE.VAL=5; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_Shotgun"; -ATTACK_HEIGHT=32; -ACCURACY_ANGLE=6; -ACCURACY_SLOPE=0; -ENGAGED_SOUND=SHOTGN; -ATTACKRANGE=2048; -PUFF=PUFF; - -[PLAYER_SHOTGUN2] -ATTACKTYPE=SHOT; -SHOTCOUNT=20; -DAMAGE.VAL=5; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_Shotgun"; -ATTACK_HEIGHT=32; -ACCURACY_ANGLE=12; -ACCURACY_SLOPE=6; -ENGAGED_SOUND=DSHTGN; -ATTACKRANGE=2048; -PUFF=PUFF; - -[PLAYER_CHAINGUN] -ATTACKTYPE=SHOT; -SHOTCOUNT=1; -DAMAGE.VAL=5; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_Chaingun"; -ATTACK_HEIGHT=32; -ACCURACY_ANGLE=6; -ACCURACY_SLOPE=3; -ATTACKRANGE=2048; -ENGAGED_SOUND=CHGUN; -PUFF=PUFF; - -[PLAYER_MISSILE] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=11; -SPEED=20; -DAMAGE.VAL=20; -DAMAGE.MAX=160; -DAMAGE.OBITUARY="OB_Missile"; -ATTACKRANGE=2048; -ATTACK_SPECIAL=KILL_FAILED_SPAWN; -PROJECTILE_SPECIAL=NOBLOCKMAP,DROPOFF,NOGRAVITY,MISSILE,NOSHADOW; -ATTACK_HEIGHT=32; -EXPLODE_DAMAGE.VAL=128; -EXPLODE_DAMAGE.OBITUARY="OB_EXPLODE"; -LAUNCH_SOUND=RLAUNC; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=100; -DLIGHT.COLOUR=#990000; -DLIGHT.LEAKY=TRUE; - -STATES(IDLE)=MISL:A:10:BRIGHT:NOTHING; - -STATES(DEATH)=MISL:B:0:BRIGHT:DLIGHT_SET(150), - MISL:B:0:BRIGHT:DLIGHT_FADE(0), - MISL:B:0:BRIGHT:TRANS_FADE(0%), - MISL:B:0:BRIGHT:KILLSOUND, - MISL:B:0:BRIGHT:PLAYSOUND(BAREXP), - MISL:B:8:BRIGHT:EXPLOSIONDAMAGE, - MISL:C:6:BRIGHT:NOTHING, - MISL:D:4:BRIGHT:NOTHING, - #REMOVE; - -[PLAYER_PLASMA] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=13; -DAMAGE.VAL=5; -DAMAGE.MAX=40; -DAMAGE.OBITUARY="OB_Plasma"; -ATTACK_HEIGHT=32; -SPEED=25; -KEEP_FIRING_CHANCE=3.92%; -ATTACKRANGE=2048; -ATTACK_SPECIAL=KILL_FAILED_SPAWN; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; -LAUNCH_SOUND=PLASMA; -TRANSLUCENCY=55%; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=150; -DLIGHT.COLOUR=#4080FF; - -STATES(IDLE)=PLSS:A:6:LIT88:NOTHING, - PLSS:B:6:LIT88:NOTHING; - -STATES(DEATH)=PLSE:A:0:LIT88:DLIGHT_FADE(0), - PLSE:A:0:LIT88:TRANS_FADE(0%), - PLSE:A:0:LIT88:KILLSOUND, - PLSE:A:4:LIT88:PLAYSOUND(FIRXPL), - PLSE:B:4:LIT88:NOTHING, - PLSE:C:4:LIT88:NOTHING, - PLSE:D:4:LIT88:NOTHING, - PLSE:E:4:LIT88:NOTHING, - #REMOVE; - -[BFG9000_SPRAY] -ATTACKTYPE=SPRAY; -HEIGHT=16; -RADIUS=20; -TRANSLUCENCY=50%; -DAMAGE.VAL=15; -DAMAGE.MAX=120; -DAMAGE.OBITUARY="OB_BFG"; -ATTACKRANGE=2048; -PROJECTILE_SPECIAL=NOGRAVITY,NOSHADOW; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=100; -DLIGHT.COLOUR=#00CC00; - -STATES(SPAWN)=BFE2:A:0:BRIGHT:DLIGHT_FADE(0), - BFE2:A:0:BRIGHT:TRANS_FADE(0%), - BFE2:A:8:BRIGHT:NOTHING, - BFE2:B:8:BRIGHT:NOTHING, - BFE2:C:8:BRIGHT:NOTHING, - BFE2:D:8:BRIGHT:NOTHING, - #REMOVE; - -[PLAYER_BFG9000] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=13; -SPEED=25; -DAMAGE.VAL=100; -DAMAGE.MAX=800; -DAMAGE.OBITUARY="OB_BFG"; -ATTACK_HEIGHT=32; -ATTACKRANGE=2048; -TRANSLUCENCY=66%; -SPARE_ATTACK=BFG9000_SPRAY; -ATTACK_SPECIAL=KILL_FAILED_SPAWN; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=150; -DLIGHT.COLOUR=#008800; - -STATES(IDLE)=BFS1:A:4:BRIGHT:NOTHING, - BFS1:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=BFE1:A:0:BRIGHT:DLIGHT_SET(300), - BFE1:A:0:BRIGHT:DLIGHT_FADE(0), - BFE1:A:0:BRIGHT:TRANS_FADE(0%), - BFE1:A:0:BRIGHT:KILLSOUND, - BFE1:A:8:BRIGHT:PLAYSOUND(RXPLOD), - BFE1:B:8:BRIGHT:NOTHING, - BFE1:C:8:BRIGHT:SPARE_ATTACK, - BFE1:D:8:BRIGHT:NOTHING, - BFE1:E:8:BRIGHT:NOTHING, - BFE1:F:8:BRIGHT:NOTHING, - #REMOVE; - - -//------------------ Monster Attacks ------------------ - -[FORMER_HUMAN_PISTOL] -ATTACKTYPE=SHOT; -SHOTCOUNT=1; -DAMAGE.VAL=6; -DAMAGE.MAX=30; -DAMAGE.OBITUARY="OB_Zombie"; -DAMAGE.FLASH_COLOUR=#00FF00; -ACCURACY_ANGLE=22; -ACCURACY_SLOPE=12; -ENGAGED_SOUND=PISTOL; -ATTACK_SPECIAL=FACE_TARGET; -PUFF=PUFF; - -[FORMER_HUMAN_SHOTGUN] -ATTACKTYPE=SHOT; -SHOTCOUNT=3; -DAMAGE.VAL=3; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_ShotgunGuy"; -ACCURACY_ANGLE=14; -ACCURACY_SLOPE=0; -ENGAGED_SOUND=SHOTGN; -KEEP_FIRING_CHANCE=3.92%; -ATTACK_SPECIAL=FACE_TARGET; -PUFF=PUFF; - -[FORMER_HUMAN_CHAINGUN] -ATTACKTYPE=SHOT; -SHOTCOUNT=1; -DAMAGE.VAL=3; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_ChaingunGuy"; -ACCURACY_ANGLE=22; -ACCURACY_SLOPE=12; -ENGAGED_SOUND=SHOTGN; -KEEP_FIRING_CHANCE=15.68%; -ATTACK_SPECIAL=FACE_TARGET; -PUFF=PUFF; - -[IMP_CLOSECOMBAT] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=3; -DAMAGE.MAX=24; -DAMAGE.OBITUARY="OB_ImpClaw"; -ENGAGED_SOUND=CLAW; -ATTACKRANGE=64; -ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; - -[IMP_FIREBALL] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -DAMAGE.VAL=3; -DAMAGE.MAX=24; -DAMAGE.OBITUARY="OB_Imp"; -ATTACK_HEIGHT=32; -SPEED=10; -FAST=2; -ATTACK_SPECIAL=FACE_TARGET; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; -LAUNCH_SOUND=FIRSHT; -TRANSLUCENCY=65%; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=150; -DLIGHT.COLOUR=#FF0000; - -STATES(IDLE)=BAL1:A:4:BRIGHT:NOTHING, - BAL1:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=BAL1:C:0:BRIGHT:DLIGHT_SET(200), - BAL1:C:0:BRIGHT:DLIGHT_FADE(0), - BAL1:C:0:BRIGHT:TRANS_FADE(0%), - BAL1:C:0:BRIGHT:KILLSOUND, - BAL1:C:6:BRIGHT:PLAYSOUND(FIRXPL), - BAL1:D:6:BRIGHT:NOTHING, - BAL1:E:6:BRIGHT:NOTHING, - #REMOVE; - -[DEMON_CLOSECOMBAT] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=4; -DAMAGE.MAX=40; -DAMAGE.OBITUARY="OB_Demon"; -ATTACKRANGE=64; -ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; - -[DOG_BITE] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=4; -DAMAGE.MAX=40; -DAMAGE.OBITUARY="OB_Dog"; -ATTACKRANGE=64; -ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; - -[SKULL_ASSAULT] -ATTACKTYPE=SKULLFLY; -DAMAGE.VAL=3; -DAMAGE.MAX=24; -DAMAGE.OBITUARY="OB_Skull"; -ASSAULT_SPEED=20; -ATTEMPT_SOUND=SKLATK; -ATTACK_SPECIAL=FACE_TARGET; - -[CACO_CLOSECOMBAT] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=10; -DAMAGE.MAX=60; -DAMAGE.OBITUARY="OB_CacoBite"; -ATTACKRANGE=64; -ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; - -[CACO_FIREBALL] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -DAMAGE.VAL=5; -DAMAGE.MAX=40; -DAMAGE.OBITUARY="OB_Cacodemon"; -ATTACK_HEIGHT=32; -LAUNCH_SOUND=FIRSHT; -SPEED=10; -FAST=2; -ATTACK_SPECIAL=FACE_TARGET; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; -TRANSLUCENCY=75%; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=150; -DLIGHT.COLOUR=#FF0000; - -STATES(IDLE)=BAL2:A:4:BRIGHT:NOTHING, - BAL2:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=BAL2:C:0:BRIGHT:DLIGHT_SET(200), - BAL2:C:0:BRIGHT:DLIGHT_FADE(0), - BAL2:C:0:BRIGHT:TRANS_FADE(0%), - BAL2:C:0:BRIGHT:KILLSOUND, - BAL2:C:6:BRIGHT:PLAYSOUND(FIRXPL), - BAL2:D:6:BRIGHT:NOTHING, - BAL2:E:6:BRIGHT:NOTHING, - #REMOVE; - -[REVENANT_CLOSECOMBAT] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=6; -DAMAGE.MAX=60; -DAMAGE.OBITUARY="OB_RevPunch"; -ATTEMPT_SOUND=SKESWG; -ENGAGED_SOUND=SKEPCH; -ATTACKRANGE=64; - -[REVENANT_MISSILE] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=11; -DAMAGE.VAL=10; -DAMAGE.MAX=80; -DAMAGE.OBITUARY="OB_Revenant"; -ATTACK_HEIGHT=48; -SPEED=10; -NO_TRACE_CHANCE=50%; -TRACE_ANGLE=16.8; -TOO_CLOSE_RANGE=196; -ATTACK_SPECIAL=FACE_TARGET,SMOKING_TRACER; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; -LAUNCH_SOUND=SKEATK; -PUFF=SMOKE; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=100; -DLIGHT.COLOUR=#FF8000; - -STATES(IDLE)=FATB:A:2:BRIGHT:RANDOM_TRACER, - FATB:B:2:BRIGHT:NOTHING; - -STATES(DEATH)=FBXP:A:0:BRIGHT:DLIGHT_FADE(0), - FBXP:A:0:BRIGHT:TRANS_FADE(0%), - FBXP:A:0:BRIGHT:KILLSOUND, - FBXP:A:8:BRIGHT:PLAYSOUND(BAREXP), - FBXP:B:6:BRIGHT:NOTHING, - FBXP:C:4:BRIGHT:NOTHING, - #REMOVE; - -[BARON_CLOSECOMBAT] -ATTACKTYPE=CLOSECOMBAT; -DAMAGE.VAL=10; -DAMAGE.MAX=80; -DAMAGE.OBITUARY="OB_BaronClaw"; -ENGAGED_SOUND=CLAW; -ATTACKRANGE=64; -ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; - -[BARON_FIREBALL] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -DAMAGE.VAL=8; -DAMAGE.MAX=64; -DAMAGE.OBITUARY="OB_Baron"; -ATTACK_HEIGHT=32; -SPEED=15; -FAST=1.33333; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; -LAUNCH_SOUND=FIRSHT; -ATTACK_SPECIAL=FACE_TARGET; -TRANSLUCENCY=65%; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=100; -DLIGHT.COLOUR=#00FF00; - -STATES(IDLE)=BAL7:A:4:BRIGHT:NOTHING, - BAL7:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=BAL7:C:0:BRIGHT:DLIGHT_SET(200), - BAL7:C:0:BRIGHT:DLIGHT_FADE(0), - BAL7:C:0:BRIGHT:TRANS_FADE(0%), - BAL7:C:0:BRIGHT:KILLSOUND, - BAL7:C:7:BRIGHT:PLAYSOUND(FIRXPL), - BAL7:D:7:BRIGHT:NOTHING, - BAL7:E:7:BRIGHT:NOTHING, - #REMOVE; - -[ELEMENTAL_SPAWNER] -ATTACKTYPE=SPAWNER; -ATTACK_HEIGHT=8; -ATTACK_SPECIAL=PRESTEP_SPAWN; -SPAWNED_OBJECT=LOST_SOUL; -SPAWN_OBJECT_STATE=MISSILE:2; -SPAWN_LIMIT=21; -ATTACK_SPECIAL=FACE_TARGET; - -[ELEMENTAL_DEATHSPAWN] -ATTACKTYPE=TRIPLE_SPAWNER; -ATTACK_HEIGHT=8; -ATTACK_SPECIAL=PRESTEP_SPAWN,FACE_TARGET; -SPAWNED_OBJECT=LOST_SOUL; -SPAWN_OBJECT_STATE=MISSILE:2; - -[MANCUBUS_FIREBALL] -ATTACKTYPE=FIXED_SPREADER; -HEIGHT=8; -RADIUS=6; -DAMAGE.VAL=8; -DAMAGE.MAX=64; -DAMAGE.OBITUARY="OB_Mancubus"; -ATTACK_HEIGHT=32; -SPEED=20; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; -ATTEMPT_SOUND=MANATK; -LAUNCH_SOUND=FIRSHT; -DEATH_SOUND=FIRXPL; -TRANSLUCENCY=80%; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=100; -DLIGHT.COLOUR=#FF0000; - -STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, - MANF:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=MISL:B:0:BRIGHT:DLIGHT_SET(200), - MISL:B:0:BRIGHT:DLIGHT_FADE(0), - MISL:B:0:BRIGHT:TRANS_FADE(0%), - MISL:B:0:BRIGHT:KILLSOUND, - MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), - MISL:C:6:BRIGHT:NOTHING, - MISL:D:4:BRIGHT:NOTHING, - #REMOVE; - -[ARACHNOTRON_PLASMA] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=13; -DAMAGE.VAL=5; -DAMAGE.MAX=40; -DAMAGE.OBITUARY="OB_Arachnotron"; -ATTACK_HEIGHT=16; -SPEED=25; -KEEP_FIRING_CHANCE=3.92%; -LAUNCH_SOUND=PLASMA; -ATTACK_SPECIAL=FACE_TARGET; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; -TRANSLUCENCY=45%; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=150; -DLIGHT.COLOUR=#C0FF00; - -STATES(IDLE)=APLS:A:5:BRIGHT:NOTHING, - APLS:B:5:BRIGHT:NOTHING; - -STATES(DEATH)=APBX:A:0:BRIGHT:DLIGHT_SET(200), - APBX:A:0:BRIGHT:DLIGHT_FADE(0), - APBX:A:5:BRIGHT:KILLSOUND, - APBX:A:5:BRIGHT:PLAYSOUND(FIRXPL), - APBX:A:5:BRIGHT:TRANS_FADE(0%), - APBX:B:5:BRIGHT:NOTHING, - APBX:C:5:BRIGHT:NOTHING, - APBX:D:5:BRIGHT:NOTHING, - APBX:E:5:BRIGHT:NOTHING, - #REMOVE; - -[ARCHVILE_FIRE] -ATTACKTYPE=TRACKER; -RADIUS=20; -HEIGHT=16; -DAMAGE.VAL=20; -DAMAGE.OBITUARY="OB_Archvile"; -EXPLODE_DAMAGE.VAL=70; -ATTEMPT_SOUND=VILATK; -ENGAGED_SOUND=BAREXP; -LAUNCH_SOUND=FLAMST; -ACTIVE_SOUND=FLAME; -ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; -TRANSLUCENCY=80%; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=150; -DLIGHT.COLOUR=#FFFF40; - -STATES(SPAWN)=FIRE:A:2:BRIGHT:DLIGHT_FADE(0), - FIRE:A:2:BRIGHT:TRANS_FADE(0%), - FIRE:A:2:BRIGHT:TRACKERSTART, - FIRE:B:2:BRIGHT:TRACKERFOLLOW, - FIRE:A:2:BRIGHT:TRACKERFOLLOW, - FIRE:B:2:BRIGHT:TRACKERFOLLOW, - FIRE:C:2:BRIGHT:TRACKERACTIVE, - FIRE:B:2:BRIGHT:TRACKERFOLLOW, - FIRE:C:2:BRIGHT:TRACKERFOLLOW, - FIRE:B:2:BRIGHT:TRACKERFOLLOW, - FIRE:C:2:BRIGHT:TRACKERFOLLOW, - FIRE:D:2:BRIGHT:TRACKERFOLLOW, - FIRE:C:2:BRIGHT:TRACKERFOLLOW, - FIRE:D:2:BRIGHT:TRACKERFOLLOW, - FIRE:C:2:BRIGHT:TRACKERFOLLOW, - FIRE:D:2:BRIGHT:TRACKERFOLLOW, - FIRE:E:2:BRIGHT:TRACKERFOLLOW, - FIRE:D:2:BRIGHT:TRACKERFOLLOW, - FIRE:E:2:BRIGHT:TRACKERFOLLOW, - FIRE:D:2:BRIGHT:TRACKERFOLLOW, - FIRE:E:2:BRIGHT:TRACKERACTIVE, - FIRE:F:2:BRIGHT:TRACKERFOLLOW, - FIRE:E:2:BRIGHT:TRACKERFOLLOW, - FIRE:F:2:BRIGHT:TRACKERFOLLOW, - FIRE:E:2:BRIGHT:TRACKERFOLLOW, - FIRE:F:2:BRIGHT:TRACKERFOLLOW, - FIRE:G:2:BRIGHT:TRACKERFOLLOW, - FIRE:H:2:BRIGHT:TRACKERFOLLOW, - FIRE:G:2:BRIGHT:TRACKERFOLLOW, - FIRE:H:2:BRIGHT:TRACKERFOLLOW, - FIRE:G:2:BRIGHT:TRACKERFOLLOW, - FIRE:H:2:BRIGHT:TRACKERFOLLOW, - #REMOVE; - -[WOLFENSTEIN_CHAINGUN] -ATTACKTYPE=SHOT; -SHOTCOUNT=1; -DAMAGE.VAL=3; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_WolfSS"; -ACCURACY_ANGLE=22; -ACCURACY_SLOPE=12; -ENGAGED_SOUND=SHOTGN; -KEEP_FIRING_CHANCE=15.68%; -ATTACK_SPECIAL=FACE_TARGET; -PUFF=PUFF; - -[MASTERMIND_CHAINGUN] -ATTACKTYPE=SHOT; -SHOTCOUNT=3; -DAMAGE.VAL=3; -DAMAGE.MAX=15; -DAMAGE.OBITUARY="OB_Mastermind"; -ACCURACY_ANGLE=14; -ACCURACY_SLOPE=0; -ENGAGED_SOUND=SHOTGN; -KEEP_FIRING_CHANCE=3.92%; -ATTACK_SPECIAL=FACE_TARGET; -PUFF=PUFF; - -[CYBERDEMON_MISSILE] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=11; -DAMAGE.VAL=20; -DAMAGE.MAX=160; -DAMAGE.OBITUARY="OB_Cyberdemon"; -SPEED=20; -ACCURACY_ANGLE=0; -ACCURACY_SLOPE=0; -ATTACK_HEIGHT=44; -X_OFFSET=20; -EXPLODE_DAMAGE.VAL=128; -EXPLODE_DAMAGE.OBITUARY="OB_Cyberdemon"; -ATTACK_SPECIAL=FACE_TARGET; -PROJECTILE_SPECIAL=NOBLOCKMAP,DROPOFF,NOGRAVITY,MISSILE,NOSHADOW; -LAUNCH_SOUND=RLAUNC; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=100; -DLIGHT.COLOUR=#CC4400; - -STATES(IDLE)=MISL:A:1:BRIGHT:NOTHING; - -STATES(DEATH)=MISL:B:0:BRIGHT:DLIGHT_SET(300), - MISL:B:0:BRIGHT:DLIGHT_FADE(0), - MISL:B:0:BRIGHT:TRANS_FADE(0%), - MISL:B:0:BRIGHT:KILLSOUND, - MISL:B:0:BRIGHT:PLAYSOUND(BAREXP), - MISL:B:8:BRIGHT:EXPLOSIONDAMAGE, - MISL:C:6:BRIGHT:NOTHING, - MISL:D:4:BRIGHT:NOTHING, - #REMOVE; - - -// ------------------ Boss Brain Stuff ------------------ - -[BRAIN_CUBE] -ATTACKTYPE=SHOOTTOSPOT; -RADIUS=6; -HEIGHT=8; -SPAWNHEALTH=1000; -DAMAGE.VAL=8; -DAMAGE.MAX=64; -ATTACK_HEIGHT=16; -SPEED=9; -MASS=100; -REACTIONTIME=8T; -PROJECTILE_SPECIAL=NOBLOCKMAP,NOCLIP,MISSILE,DROPOFF,NOGRAVITY,BOSSMAN; -LAUNCH_SOUND=BOSPIT; -ACTIVE_SOUND=BOSCUB; -DEATH_SOUND=TELEPT; // FIRXPL -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=5; -DLIGHT.COLOUR=#FFFF40; - -STATES(IDLE)=BOSF:A:3:BRIGHT:CUBETRACER, - BOSF:B:3:BRIGHT:NOTHING, - BOSF:C:3:BRIGHT:CUBETRACER, - BOSF:D:3:BRIGHT:MAKEACTIVESOUND; - -STATES(DEATH)=FIRE:A:0:BRIGHT:DLIGHT_SET(200), - FIRE:A:0:BRIGHT:DLIGHT_FADE(0), - FIRE:A:4:BRIGHT:TRANS_FADE(10%), - FIRE:B:4:BRIGHT:NOTHING, - FIRE:C:4:BRIGHT:NOTHING, - FIRE:D:4:BRIGHT:NOTHING, - FIRE:E:4:BRIGHT:NOTHING, - FIRE:F:4:BRIGHT:NOTHING, - FIRE:G:4:BRIGHT:NOTHING, - FIRE:H:4:BRIGHT:CUBESPAWN, - #REMOVE; - - -// ------------------ Experimental Stuff ------------------ - -[TRACER_MISSILE_L] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=11; -DAMAGE.VAL=10; -DAMAGE.MAX=80; -ATTACK_HEIGHT=50; -X_OFFSET=-16; -SPEED=10; -NO_TRACE_CHANCE=1.56%; -TOO_CLOSE_RANGE=196; -ATTACK_SPECIAL=SMOKING_TRACER; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; -LAUNCH_SOUND=SKEATK; -DEATH_SOUND=BAREXP; -PUFF=SMOKE; - -STATES(IDLE)=FATB:A:2:BRIGHT:TRACER, - FATB:B:2:BRIGHT:TRACER; - -STATES(DEATH)=FBXP:A:8:BRIGHT:TRANS_FADE(10%), - FBXP:B:6:BRIGHT:NOTHING, - FBXP:C:4:BRIGHT:NOTHING, - #REMOVE; - -[TRACER_MISSILE_R] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=11; -DAMAGE.VAL=10; -DAMAGE.MAX=80; -X_OFFSET=16; -ATTACK_HEIGHT=50; -SPEED=10; -NO_TRACE_CHANCE=1.56%; -TOO_CLOSE_RANGE=196; -ATTACK_SPECIAL=SMOKING_TRACER; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; -LAUNCH_SOUND=SKEATK; -DEATH_SOUND=BAREXP; -PUFF=SMOKE; - -STATES(IDLE)=FATB:A:2:BRIGHT:TRACER, - FATB:B:2:BRIGHT:TRACER; - -STATES(DEATH)=FBXP:A:8:BRIGHT:TRANS_FADE(10%), - FBXP:B:6:BRIGHT:NOTHING, - FBXP:C:4:BRIGHT:NOTHING, - #REMOVE; - -[IMP_SPAWNER] -ATTACKTYPE=SPAWNER; -ATTACK_HEIGHT=0; -SPAWNED_OBJECT=IMP; -SPAWN_OBJECT_STATE=CHASE:1; -ENGAGED_SOUND=TELEPT; - -[MANCUBUS_FIREBALL_L] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -DAMAGE.VAL=8; -DAMAGE.MAX=64; -DAMAGE.OBITUARY="OB_Mancubus"; -ATTACK_HEIGHT=24; -X_OFFSET=-24; -SPEED=20; -ACCURACY_ANGLE=17; -ACCURACY_SLOPE=9; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; -ATTEMPT_SOUND=MANATK; -LAUNCH_SOUND=FIRSHT; -TRANSLUCENCY=80%; - -STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, - MANF:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=MISL:B:0:BRIGHT:TRANS_FADE(10%), - MISL:B:0:BRIGHT:KILLSOUND, - MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), - MISL:C:6:BRIGHT:NOTHING, - MISL:D:4:BRIGHT:NOTHING, - #REMOVE; - -[MANCUBUS_FIREBALL_R] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -DAMAGE.VAL=8; -DAMAGE.MAX=64; -DAMAGE.OBITUARY="OB_Mancubus"; -ATTACK_HEIGHT=24; -X_OFFSET=24; -SPEED=20; -ACCURACY_ANGLE=17; -ACCURACY_SLOPE=9; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY; -ATTEMPT_SOUND=MANATK; -LAUNCH_SOUND=FIRSHT; -TRANSLUCENCY=80%; - -STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, - MANF:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=MISL:B:0:BRIGHT:TRANS_FADE(10%), - MISL:B:0:BRIGHT:KILLSOUND, - MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), - MISL:C:6:BRIGHT:NOTHING, - MISL:D:4:BRIGHT:NOTHING, - #REMOVE; - - - -[Y_PARTICLE] -ATTACKTYPE=FIXED_SPREADER; -HEIGHT=4; -RADIUS=4; -ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; -PROJECTILE_SPECIAL=CROSSLINES,BOUNCE,DROPOFF,MISSILE,NOSHADOW; -DAMAGE.VAL=0; -DAMAGE.MAX=0; -ATTACK_HEIGHT=32; -SPEED=10; -ACCURACY_SLOPE=15; -ACCURACY_ANGLE=25; -BOUNCE_SPEED=0.5; -SLOPE_OFFSET=8; -STEP_SIZE=0.2; -SPRITE_SCALE=0.5; -PUFF=Y_PARTICLE; - -STATES(SPAWN)=PRT1:A:1:BRIGHT:SMOKING, - PRT1:A:0:BRIGHT:NOTHING; - -STATES(BOUNCE)=PRT1:A:1:BRIGHT:SMOKING, - PRT1:A:1:BRIGHT:NOTHING, - PRT1:A:1:BRIGHT:NOTHING, - #DEATH; - -STATES(DEATH)=PRT1:A:2:BRIGHT:TRANS_FADE(0%), - PRT1:A:10:BRIGHT:NOTHING, - PRT1:A:5:NORMAL:NOTHING, - #REMOVE; - -[B_PARTICLE] -ATTACKTYPE=FIXED_SPREADER; -HEIGHT=4; -RADIUS=4; -ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; -PROJECTILE_SPECIAL=CROSSLINES,BOUNCE,DROPOFF,MISSILE,NOSHADOW; -DAMAGE.VAL=0; -DAMAGE.MAX=0; -ATTACK_HEIGHT=32; -SPEED=10; -ACCURACY_SLOPE=15; -ACCURACY_ANGLE=25; -BOUNCE_SPEED=0.5; -SLOPE_OFFSET=8; -STEP_SIZE=0.2; -SPRITE_SCALE=0.5; -PUFF=B_PARTICLE; - -STATES(SPAWN)=PRT2:A:1:BRIGHT:SMOKING, - PRT2:A:0:BRIGHT:NOTHING; - -STATES(BOUNCE)=PRT2:A:1:BRIGHT:SMOKING, - PRT2:A:1:BRIGHT:NOTHING, - PRT2:A:1:BRIGHT:NOTHING, - #DEATH; - -STATES(DEATH)=PRT2:A:2:BRIGHT:TRANS_FADE(0%), - PRT2:A:10:BRIGHT:NOTHING, - PRT2:A:5:NORMAL:NOTHING, - #REMOVE; - - -[G_PARTICLE] -ATTACKTYPE=FIXED_SPREADER; -HEIGHT=2; -RADIUS=2; -ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; -PROJECTILE_SPECIAL=CROSSLINES,BOUNCE,DROPOFF,MISSILE,NOSHADOW; -DAMAGE.VAL=0; -DAMAGE.MAX=0; -ATTACK_HEIGHT=2; -SPEED=10; -ACCURACY_SLOPE=15; -ACCURACY_ANGLE=25; -SLOPE_OFFSET=8; -STEP_SIZE=0.2; -SPRITE_SCALE=0.5; -PUFF=G_PARTICLE; - -STATES(SPAWN)=PRT3:A:1:NORMAL:SMOKING, - PRT3:A:0:NORMAL:NOTHING,#DEATH; - -//STATES(BOUNCE)=PRT2:A:1:NORMAL:SMOKING, -// PRT2:A:1:NORMAL:NOTHING, -// PRT2:A:1:NORMAL:NOTHING, -// #DEATH; - -STATES(DEATH)=PRT3:A:2:NORMAL:TRANS_FADE(0%), - PRT3:A:10:NORMAL:SMOKING, - PRT3:A:5:NORMAL:NOTHING, - #REMOVE; - - - -[EDGE_DEBRIS_SHOT] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -ATTACK_SPECIAL=SILENT_TO_MONSTERS,NO_TRIGGER_LINES,NOTARGET; -PROJECTILE_SPECIAL=NOSHADOW,NOBLOCKMAP,SLIDER,CROSSLINES,DROPOFF,BARE_MISSILE,CORPSE,NOZBUFFER; -ACCURACY_ANGLE=359; //makes the shots go all around -ACCURACY_SLOPE=65; -ATTACK_HEIGHT=0;//32; -SPEED=5;//10; -BOUNCE_SPEED=0.6; -SLOPE_OFFSET=22; -ANGLE_OFFSET=45; -Y_OFFSET=4; - -TRANSLUCENCY=40%; - -STATES(SPAWN)=GLS1:A:3:NORMAL:NOTHING, - GLS2:A:3:NORMAL:NOTHING, - GLS3:A:3:NORMAL:NOTHING, - GLS4:A:3:NORMAL:NOTHING, - GLS5:A:3:NORMAL:NOTHING, - GLS6:A:3:NORMAL:NOTHING, - GLS7:A:3:NORMAL:NOTHING, - GLS8:A:3:NORMAL:NOTHING, - GLS9:A:3:NORMAL:NOTHING; - -STATES(DEATH)=GLS1:A:3:NORMAL:NOTHING, - GLS2:A:3:NORMAL:NOTHING, - GLS3:A:3:NORMAL:NOTHING, - GLS4:A:3:NORMAL:NOTHING, - GLS5:A:3:NORMAL:NOTHING, - GLS6:A:6:NORMAL:NOTHING, - GLS7:A:6:NORMAL:NOTHING, - GLS8:A:6:NORMAL:NOTHING, - GLS9:A:35:NORMAL:TRANSFADE(0%), - #REMOVE; - - - - -[MUSHROOM_FIREBALL] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -DAMAGE.VAL=8; -DAMAGE.MAX=64; -SPEED=20; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF; -LAUNCH_SOUND=FIRSHT; -TRANSLUCENCY=80%; - -STATES(IDLE)=MANF:A:4:BRIGHT:NOTHING, - MANF:B:4:BRIGHT:NOTHING; - -STATES(DEATH)=MISL:B:0:BRIGHT:TRANS_FADE(10%), - MISL:B:0:BRIGHT:KILLSOUND, - MISL:B:8:BRIGHT:PLAYSOUND(FIRXPL), - MISL:C:6:BRIGHT:NOTHING, - MISL:D:4:BRIGHT:NOTHING, - #REMOVE; - -// These are named INTERNAL_ to try to avoid conflicting with existing mods -// They are the default attacks used by the A_FireOldBFG and A_BetaSkullAttack pointers - -[INTERNAL_BETA_BFG_1] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -ACCURACY_ANGLE=14; -ACCURACY_SLOPE=14; -DAMAGE.VAL=5; -DAMAGE.MAX=40; -DAMAGE.OBITUARY="OB_BFG"; -ATTACK_HEIGHT=32; -SPEED=20; -FAST=2; -TRANSLUCENCY=50%; -ATTACK_SPECIAL=FACE_TARGET; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=80; -DLIGHT.COLOUR=#008800; - -STATES(IDLE)=PLS1:A:3:LIT88:NOTHING, - PLS1:B:3:LIT88:NOTHING, - PLS1:C:3:LIT88:NOTHING, - PLS1:D:3:LIT88:NOTHING; - -STATES(DEATH)=PLS1:E:0:LIT88:DLIGHT_FADE(0), - PLS1:E:0:LIT88:TRANS_FADE(0%), - PLS1:E:2:LIT88:PLAYSOUND(FIRXPL), - PLS1:F:2:LIT88:NOTHING, - PLS1:F:2:LIT88:NOTHING, - PLS1:F:2:LIT88:NOTHING, - PLS1:G:2:LIT88:NOTHING, - PLS1:G:2:LIT88:NOTHING, - #REMOVE; - -[INTERNAL_BETA_BFG_2] -ATTACKTYPE=PROJECTILE; -HEIGHT=8; -RADIUS=6; -ACCURACY_ANGLE=14; -ACCURACY_SLOPE=14; -DAMAGE.VAL=5; -DAMAGE.MAX=40; -DAMAGE.OBITUARY="OB_BFG"; -ATTACK_HEIGHT=32; -SPEED=20; -FAST=2; -ATTACK_SPECIAL=FACE_TARGET; -TRANSLUCENCY=50%; -PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW; -DLIGHT.TYPE=MODULATE; -DLIGHT.RADIUS=80; -DLIGHT.COLOUR=#880000; - -STATES(IDLE)=PLS2:A:3:LIT88:NOTHING, - PLS2:B:3:LIT88:NOTHING, - PLS2:A:3:LIT88:NOTHING, - PLS2:B:3:LIT88:NOTHING; - -STATES(DEATH)=PLS2:C:0:LIT88:DLIGHT_FADE(0), - PLS2:C:0:LIT88:TRANS_FADE(0%), - PLS2:C:2:LIT88:PLAYSOUND(FIRXPL), - PLS2:D:2:LIT88:NOTHING, - PLS2:D:2:LIT88:NOTHING, - PLS2:D:2:LIT88:NOTHING, - PLS2:E:2:LIT88:NOTHING, - PLS2:E:2:LIT88:NOTHING, - #REMOVE; - -[INTERNAL_FIRE_OLD_BFG] -ATTACKTYPE=DUALATTACK; -DUALATTACK1=INTERNAL_BETA_BFG_1; -DUALATTACK2=INTERNAL_BETA_BFG_2; - -[INTERNAL_BETA_LOST_SOUL_ATTACK] -ATTACKTYPE=PSYCHIC; -DAMAGE.VAL=3; -DAMAGE.MAX=24; -ATTACK_SPECIAL=NEED_SIGHT,FACE_TARGET; - - - - - - - - - - - -