May 3, 2006 (Changes by Graf Zahl)

- Removed doom.x, heretic.x and strife.x from the SVN repository. These
  are generated files.
- Fixed: A_PainDie has to check whether a valid target exists before 
  calling IsFriend.
- Fixed: FDecalLib::FindAnimator needs a signed counter to work properly.

May 1, 2006 (Changes by Graf Zahl)
- Added support for game specific pickup messages, if only to be able
  to define Raven's invulnerability item in DECORATE.
- Removed A_TreeDeath because it is no longer used.
- Fixed: When picking up a PowerupGiver for an active powerup the
  blend color and the duration were transferred to a temorary item
  and never took effect. They have to be trnasferred to the newly created
  powerup item before trying to give it to the player, not afterward.
- Made the colormap of the InvulnerabilitySphere item specific. 
  The base power class still needs to have its color adjusted
  per game though and since Raven's invulnerability item is used in both
  Hexen and Heretic it can't define its own colormap/blend.
- Separated the invulnerability colormaps from the game being played
  and made them item specific. They can also be specified as regular
  blend colors in DECORATE now.
- Converted a_hereticarmor.cpp and most of a_doomartifacts.cpp,
  a_hereticartifacts.cpp and a_heretickeys.cpp to DECORATE.
- Changed the Soulsphere to be a real health item with the Dehacked
  modifications made in d_dehacked.cpp as for most other items which
  need to be adjusted.
- Added IF_BIGPOWERUP flag to AInventory to expose the RESPAWN_SUPER
  dmflag to DECORATE. Also removed the now obsolete ShouldRespawn methods
  from AInvulnerabilitySphere and ABlurSphere.
- Converted a_splashes.cpp to DECORATE.
- Converted most of a_debris.cpp to DECORATE.


SVN r73 (trunk)
This commit is contained in:
Christoph Oelckers 2006-05-03 14:54:48 +00:00
parent 01a41a6f13
commit 0e69196370
59 changed files with 1430 additions and 1533 deletions

View file

@ -160,26 +160,26 @@ ${COMPILER} "autostart.cpp a.nas blocks.nas misc.nas tmap.nas tmap2.nas tmap3.na
v_video.cpp vectors.cpp name.cpp zstring.cpp zstringpool.cpp zstrformat.cpp \
w_wad.cpp wi_stuff.cpp a_arachnotron.cpp a_archvile.cpp a_bossbrain.cpp \
a_bruiser.cpp a_cacodemon.cpp a_cyberdemon.cpp a_demon.cpp \
a_doomarmor.cpp a_doomartifacts.cpp a_doomdecorations.cpp a_doomhealth.cpp \
a_doomimp.cpp a_doomkeys.cpp a_doommisc.cpp a_doomplayer.cpp a_doomweaps.cpp \
a_doomartifacts.cpp a_doomhealth.cpp \
a_doomimp.cpp a_doommisc.cpp a_doomplayer.cpp a_doomweaps.cpp \
a_fatso.cpp a_keen.cpp a_lostsoul.cpp a_painelemental.cpp a_possessed.cpp \
a_revenant.cpp a_scriptedmarine.cpp a_spidermaster.cpp doom_sbar.cpp a_beast.cpp \
a_chicken.cpp a_clink.cpp a_dsparil.cpp a_hereticarmor.cpp \
a_hereticartifacts.cpp a_hereticdecorations.cpp a_hereticimp.cpp a_heretickeys.cpp \
a_chicken.cpp a_clink.cpp a_dsparil.cpp \
a_hereticartifacts.cpp a_hereticimp.cpp a_heretickeys.cpp \
a_hereticmisc.cpp a_hereticplayer.cpp a_hereticweaps.cpp a_ironlich.cpp \
a_knight.cpp a_mummy.cpp a_snake.cpp a_wizard.cpp heretic_sbar.cpp a_bats.cpp \
a_bishop.cpp a_blastradius.cpp a_boostarmor.cpp a_centaur.cpp a_clericboss.cpp \
a_clericflame.cpp a_clericholy.cpp a_clericmace.cpp a_clericplayer.cpp \
a_clericstaff.cpp a_demons.cpp a_dragon.cpp a_ettin.cpp a_fighteraxe.cpp \
a_fighterboss.cpp a_fighterhammer.cpp a_fighterplayer.cpp a_fighterquietus.cpp \
a_firedemon.cpp a_flame.cpp a_flechette.cpp a_fog.cpp a_healingradius.cpp \
a_firedemon.cpp a_flechette.cpp a_fog.cpp a_healingradius.cpp \
a_heresiarch.cpp a_hexenarmor.cpp a_hexendecorations.cpp a_hexenkeys.cpp \
a_hexenspecialdecs.cpp a_iceguy.cpp a_korax.cpp a_mageboss.cpp a_magecone.cpp \
a_magelightning.cpp a_mageplayer.cpp a_magestaff.cpp a_magewand.cpp a_mana.cpp \
a_pig.cpp a_puzzleitems.cpp a_scriptprojectiles.cpp a_serpent.cpp a_speedboots.cpp \
a_spike.cpp a_summon.cpp a_teleportother.cpp a_weaponpieces.cpp a_wraith.cpp \
hexen_sbar.cpp a_artiegg.cpp a_artitele.cpp a_minotaur.cpp a_ravenambient.cpp \
a_ravenartifacts.cpp a_ravenhealth.cpp a_acolyte.cpp a_alienspectres.cpp \
a_acolyte.cpp a_alienspectres.cpp \
a_beggars.cpp a_coin.cpp a_crusader.cpp a_entityboss.cpp a_inquisitor.cpp \
a_loremaster.cpp a_macil.cpp a_merchants.cpp a_oracle.cpp a_peasant.cpp \
a_programmer.cpp a_questitems.cpp a_ratbuddy.cpp a_reaver.cpp a_rebels.cpp \
@ -190,7 +190,7 @@ ${COMPILER} "autostart.cpp a.nas blocks.nas misc.nas tmap.nas tmap2.nas tmap3.na
a_camera.cpp a_debris.cpp a_decals.cpp a_flashfader.cpp a_fountain.cpp \
a_hatetarget.cpp a_keys.cpp a_lightning.cpp a_movingcamera.cpp a_pickups.cpp \
a_quake.cpp a_secrettrigger.cpp a_sectoraction.cpp a_sharedmisc.cpp a_skies.cpp \
a_soundenvironment.cpp a_soundsequence.cpp a_spark.cpp a_splashes.cpp a_waterzone.cpp a_weaponpiece.cpp a_weapons.cpp \
a_soundenvironment.cpp a_soundsequence.cpp a_spark.cpp a_waterzone.cpp a_weaponpiece.cpp a_weapons.cpp \
hudmessages.cpp shared_sbar.cpp fmopl.cpp mlkernel.cpp mlopl.cpp mlopl_io.cpp \
opl_mus_player.cpp fmodsound.cpp i_music.cpp i_sound.cpp music_cd.cpp \
music_flac.cpp music_midi_midiout.cpp music_midi_stream.cpp music_midi_timidity.cpp \

View file

@ -1,3 +1,36 @@
May 3, 2006 (Changes by Graf Zahl)
- Removed doom.x, heretic.x and strife.x from the SVN repository. These
are generated files.
- Fixed: A_PainDie has to check whether a valid target exists before
calling IsFriend.
- Fixed: FDecalLib::FindAnimator needs a signed counter to work properly.
May 1, 2006 (Changes by Graf Zahl)
- Added support for game specific pickup messages, if only to be able
to define Raven's invulnerability item in DECORATE.
- Removed A_TreeDeath because it is no longer used.
- Fixed: When picking up a PowerupGiver for an active powerup the
blend color and the duration were transferred to a temorary item
and never took effect. They have to be trnasferred to the newly created
powerup item before trying to give it to the player, not afterward.
- Made the colormap of the InvulnerabilitySphere item specific.
The base power class still needs to have its color adjusted
per game though and since Raven's invulnerability item is used in both
Hexen and Heretic it can't define its own colormap/blend.
- Separated the invulnerability colormaps from the game being played
and made them item specific. They can also be specified as regular
blend colors in DECORATE now.
- Converted a_hereticarmor.cpp and most of a_doomartifacts.cpp,
a_hereticartifacts.cpp and a_heretickeys.cpp to DECORATE.
- Changed the Soulsphere to be a real health item with the Dehacked
modifications made in d_dehacked.cpp as for most other items which
need to be adjusted.
- Added IF_BIGPOWERUP flag to AInventory to expose the RESPAWN_SUPER
dmflag to DECORATE. Also removed the now obsolete ShouldRespawn methods
from AInvulnerabilitySphere and ABlurSphere.
- Converted a_splashes.cpp to DECORATE.
- Converted most of a_debris.cpp to DECORATE.
May 1, 2006
- Made loading of Build's palette.dat automatic if it's found inside a loaded
group file, but the -bpal parameter remains for now.

View file

@ -588,7 +588,7 @@ public:
BYTE frame; // sprite frame to draw
BYTE xscale, yscale; // Scaling values; 63 is normal size
BYTE RenderStyle; // Style to draw this actor with
WORD renderflags; // Different rendering flags
DWORD renderflags; // Different rendering flags
WORD picnum; // Draw this instead of sprite if != 0xffff
SWORD TIDtoHate; // TID of things to hate (0 if none)
DWORD effects; // [RH] see p_effect.h

View file

@ -67,6 +67,7 @@
#include "r_sky.h"
extern FILE *Logfile;
extern bool insave;
CVAR (Bool, sv_cheats, false, CVAR_SERVERINFO | CVAR_LATCH)
@ -90,12 +91,12 @@ BOOL CheckCheatmode ()
CCMD (quit)
{
exit (0);
if (!insave) exit (0);
}
CCMD (exit)
{
exit (0);
if (!insave) exit (0);
}
/*

View file

@ -1628,19 +1628,38 @@ static int PatchMisc (int dummy)
ABasicArmorPickup *armor;
armor = static_cast<ABasicArmorPickup *> (GetDefaultByName ("GreenArmor"));
armor->SaveAmount = 100 * deh.GreenAC;
armor->SavePercent = deh.GreenAC == 1 ? FRACUNIT/3 : FRACUNIT/2;
if (armor!=NULL)
{
armor->SaveAmount = 100 * deh.GreenAC;
armor->SavePercent = deh.GreenAC == 1 ? FRACUNIT/3 : FRACUNIT/2;
}
armor = static_cast<ABasicArmorPickup *> (GetDefaultByName ("BlueArmor"));
armor->SaveAmount = 100 * deh.BlueAC;
armor->SavePercent = deh.BlueAC == 1 ? FRACUNIT/3 : FRACUNIT/2;
if (armor!=NULL)
{
armor->SaveAmount = 100 * deh.BlueAC;
armor->SavePercent = deh.BlueAC == 1 ? FRACUNIT/3 : FRACUNIT/2;
}
ABasicArmorBonus *barmor;
barmor = static_cast<ABasicArmorBonus *> (GetDefaultByName ("ArmorBonus"));
barmor->MaxSaveAmount = deh.MaxArmor;
if (barmor!=NULL)
{
barmor->MaxSaveAmount = deh.MaxArmor;
}
AHealth *health;
health = static_cast<AHealth *> (GetDefaultByName ("HealthBonus"));
if (deh.MaxHealth != -1) health->MaxAmount = deh.MaxHealth;
if (deh.MaxHealth != -1 && health!=NULL)
{
health->MaxAmount = deh.MaxHealth;
}
health = static_cast<AHealth *> (GetDefaultByName ("Soulsphere"));
if (health!=NULL)
{
health->Amount = deh.SoulsphereHealth;
health->MaxAmount = deh.MaxSoulsphere;
}
// 0xDD means "enable infighting"
if (infighting == 0xDD)

View file

@ -149,6 +149,7 @@ EXTERN_CVAR (Bool, st_scale)
extern BOOL gameisdead;
extern bool demorecording;
extern bool M_DemoNoPlay; // [RH] if true, then skip any demos in the loop
extern bool insave;
extern cycle_t WallCycles, PlaneCycles, MaskedCycles, WallScanCycles;
@ -690,6 +691,7 @@ void D_ErrorCleanup ()
players[0].playerstate = PST_LIVE;
gameaction = ga_fullconsole;
menuactive = MENU_Off;
insave=false;
}
//==========================================================================

View file

@ -1324,9 +1324,9 @@ DThinker *FDecalCombinerAnim::CreateThinker (DBaseDecal *actor, side_t *wall) co
FDecalAnimator *FDecalLib::FindAnimator (const char *name)
{
unsigned int i;
int i;
for (i = Animators.Size ()-1; i >= 0; --i)
for (i = (int)Animators.Size ()-1; i >= 0; --i)
{
if (stricmp (name, Animators[i]->Name) == 0)
{

View file

@ -148,12 +148,6 @@ void A_BspiAttack (AActor *self)
if (!self->target)
return;
// [RH] Andy Baker's stealth monsters
if (self->flags & MF_STEALTH)
{
self->visdir = 1;
}
A_FaceTarget (self);
// launch a missile

View file

@ -12,86 +12,6 @@
#include "p_enemy.h"
#include "p_effect.h"
// Invulnerability Sphere ---------------------------------------------------
class AInvulnerabilitySphere : public APowerupGiver
{
DECLARE_ACTOR (AInvulnerabilitySphere, APowerupGiver)
public:
bool ShouldRespawn ();
protected:
const char *PickupMessage ();
};
FState AInvulnerabilitySphere::States[] =
{
S_BRIGHT (PINV, 'A', 6, NULL , &States[1]),
S_BRIGHT (PINV, 'B', 6, NULL , &States[2]),
S_BRIGHT (PINV, 'C', 6, NULL , &States[3]),
S_BRIGHT (PINV, 'D', 6, NULL , &States[0])
};
IMPLEMENT_ACTOR (AInvulnerabilitySphere, Doom, 2022, 133)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_SpawnState (0)
PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP)
PROP_Inventory_MaxAmount (0)
PROP_PowerupGiver_Powerup ("PowerInvulnerable")
END_DEFAULTS
const char *AInvulnerabilitySphere::PickupMessage ()
{
return GStrings("GOTINVUL");
}
bool AInvulnerabilitySphere::ShouldRespawn ()
{
return Super::ShouldRespawn () && (dmflags & DF_RESPAWN_SUPER);
}
// Soulsphere --------------------------------------------------------------
class ASoulsphere : public AInventory
{
DECLARE_ACTOR (ASoulsphere, AInventory)
public:
virtual bool Use (bool pickup)
{
player_t *player = Owner->player;
if (player->health < deh.MaxSoulsphere)
{
player->health += deh.SoulsphereHealth;
if (player->health > deh.MaxSoulsphere)
player->health = deh.MaxSoulsphere;
player->mo->health = player->health;
}
return true;
}
protected:
virtual const char *PickupMessage ()
{
return GStrings("GOTSUPER");
}
};
FState ASoulsphere::States[] =
{
S_BRIGHT (SOUL, 'A', 6, NULL , &States[1]),
S_BRIGHT (SOUL, 'B', 6, NULL , &States[2]),
S_BRIGHT (SOUL, 'C', 6, NULL , &States[3]),
S_BRIGHT (SOUL, 'D', 6, NULL , &States[4]),
S_BRIGHT (SOUL, 'C', 6, NULL , &States[5]),
S_BRIGHT (SOUL, 'B', 6, NULL , &States[0])
};
IMPLEMENT_ACTOR (ASoulsphere, Doom, 2013, 25)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP|IF_FANCYPICKUPSOUND)
PROP_Inventory_MaxAmount (0)
PROP_SpawnState (0)
PROP_Inventory_PickupSound ("misc/p_pkup")
END_DEFAULTS
// Mega sphere --------------------------------------------------------------
class AMegasphere : public APowerupGiver
@ -181,124 +101,3 @@ IMPLEMENT_ACTOR (ABerserk, Doom, 2023, 134)
PROP_PowerupGiver_Powerup ("PowerStrength")
END_DEFAULTS
// Invisibility -------------------------------------------------------------
class ABlurSphere : public APowerupGiver
{
DECLARE_ACTOR (ABlurSphere, APowerupGiver)
public:
virtual void PostBeginPlay ()
{
Super::PostBeginPlay ();
effects |= FX_VISIBILITYPULSE;
visdir = -1;
}
virtual bool ShouldRespawn ()
{
return Super::ShouldRespawn () && (dmflags & DF_RESPAWN_SUPER);
}
protected:
virtual const char *PickupMessage ()
{
return GStrings("GOTINVIS");
}
};
FState ABlurSphere::States[] =
{
S_BRIGHT (PINS, 'A', 6, NULL , &States[1]),
S_BRIGHT (PINS, 'B', 6, NULL , &States[2]),
S_BRIGHT (PINS, 'C', 6, NULL , &States[3]),
S_BRIGHT (PINS, 'D', 6, NULL , &States[0])
};
IMPLEMENT_ACTOR (ABlurSphere, Doom, 2024, 135)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_RenderStyle (STYLE_Translucent)
PROP_SpawnState (0)
PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP)
PROP_Inventory_MaxAmount (0)
PROP_PowerupGiver_Powerup ("PowerInvisibility")
END_DEFAULTS
// Radiation suit (aka iron feet) -------------------------------------------
class ARadSuit : public APowerupGiver
{
DECLARE_ACTOR (ARadSuit, APowerupGiver)
protected:
virtual const char *PickupMessage ()
{
return GStrings("GOTSUIT");
}
};
FState ARadSuit::States[] =
{
S_BRIGHT (SUIT, 'A', -1, NULL , NULL)
};
IMPLEMENT_ACTOR (ARadSuit, Doom, 2025, 136)
PROP_HeightFixed (46)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP)
PROP_Inventory_MaxAmount (0)
PROP_PowerupGiver_Powerup ("PowerIronFeet")
END_DEFAULTS
// infrared -----------------------------------------------------------------
class AInfrared : public APowerupGiver
{
DECLARE_ACTOR (AInfrared, APowerupGiver)
protected:
virtual const char *PickupMessage ()
{
return GStrings("GOTVISOR");
}
};
FState AInfrared::States[] =
{
S_BRIGHT (PVIS, 'A', 6, NULL , &States[1]),
S_NORMAL (PVIS, 'B', 6, NULL , &States[0])
};
IMPLEMENT_ACTOR (AInfrared, Doom, 2045, 138)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_SpawnState (0)
PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP)
PROP_Inventory_MaxAmount (0)
PROP_PowerupGiver_Powerup ("PowerLightAmp")
END_DEFAULTS
// Allmap -------------------------------------------------------------------
class AAllmap : public AMapRevealer
{
DECLARE_ACTOR (AAllmap, AMapRevealer)
protected:
const char *PickupMessage ()
{
return GStrings("GOTMAP");
}
};
FState AAllmap::States[] =
{
S_BRIGHT (PMAP, 'A', 6, NULL , &States[1]),
S_BRIGHT (PMAP, 'B', 6, NULL , &States[2]),
S_BRIGHT (PMAP, 'C', 6, NULL , &States[3]),
S_BRIGHT (PMAP, 'D', 6, NULL , &States[4]),
S_BRIGHT (PMAP, 'C', 6, NULL , &States[5]),
S_BRIGHT (PMAP, 'B', 6, NULL , &States[0])
};
IMPLEMENT_ACTOR (AAllmap, Doom, 2026, 137)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Inventory_FlagsSet (IF_ALWAYSPICKUP|IF_FANCYPICKUPSOUND)
PROP_Inventory_MaxAmount (0)
PROP_SpawnState (0)
PROP_Inventory_PickupSound ("misc/p_pkup")
END_DEFAULTS

View file

@ -222,7 +222,7 @@ void A_DualPainAttack (AActor *self)
void A_PainDie (AActor *self)
{
if (self->IsFriend (self->target))
if (self->target != NULL && self->IsFriend (self->target))
{ // And I thought you were my friend!
self->flags &= ~MF_FRIENDLY;
}

View file

@ -113,6 +113,7 @@ bool sendpause; // send a pause event next tic
bool sendsave; // send a save event next tic
bool sendturn180; // [RH] send a 180 degree turn next tic
bool usergame; // ok to save / end game
bool insave; // Game is saving - used to block exit commands
BOOL timingdemo; // if true, exit with report on completion
BOOL nodrawers; // for comparative timing purposes
@ -1153,6 +1154,7 @@ void G_PlayerReborn (int player)
{
APowerup *invul = static_cast<APowerup*>(actor->GiveInventoryType (RUNTIME_CLASS(APowerInvulnerable)));
invul->EffectTics = 2*TICRATE;
invul->BlendColor = 0; // don't mess with the view
actor->effects |= FX_RESPAWNINVUL; // [RH] special effect
}
}
@ -1959,6 +1961,7 @@ void G_DoSaveGame (bool okForQuicksave)
return;
}
insave=true;
G_SnapshotLevel ();
FILE *stdfile = fopen (savegamefile.GetChars(), "wb");
@ -1968,6 +1971,7 @@ void G_DoSaveGame (bool okForQuicksave)
Printf ("Could not create savegame '%s'\n", savegamefile.GetChars());
savegamefile = "";
gameaction = ga_nothing;
insave = false;
return;
}
@ -2038,6 +2042,7 @@ void G_DoSaveGame (bool okForQuicksave)
BackupSaveName = savegamefile;
savegamefile = "";
insave = false;
}

View file

@ -1,58 +0,0 @@
#include "info.h"
#include "a_pickups.h"
#include "d_player.h"
#include "gstrings.h"
#include "p_local.h"
#include "gi.h"
// Silver Shield (Shield1) --------------------------------------------------
class ASilverShield : public ABasicArmorPickup
{
DECLARE_ACTOR (ASilverShield, ABasicArmorPickup)
protected:
virtual const char *PickupMessage ()
{
return GStrings("TXT_ITEMSHIELD1");
}
};
FState ASilverShield::States[] =
{
S_NORMAL (SHLD, 'A', -1, NULL, NULL)
};
IMPLEMENT_ACTOR (ASilverShield, Heretic, 85, 68)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_BasicArmorPickup_SavePercent (FRACUNIT/2)
PROP_BasicArmorPickup_SaveAmount (100)
PROP_SpawnState (0)
PROP_Inventory_Icon ("SHLDA0")
END_DEFAULTS
// Enchanted shield (Shield2) -----------------------------------------------
class AEnchantedShield : public ABasicArmorPickup
{
DECLARE_ACTOR (AEnchantedShield, ABasicArmorPickup)
protected:
virtual const char *PickupMessage ()
{
return GStrings("TXT_ITEMSHIELD2");
}
};
FState AEnchantedShield::States[] =
{
S_NORMAL (SHD2, 'A', -1, NULL, NULL)
};
IMPLEMENT_ACTOR (AEnchantedShield, Heretic, 31, 69)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_BasicArmorPickup_SavePercent (FRACUNIT*3/4)
PROP_BasicArmorPickup_SaveAmount (200)
PROP_SpawnState (0)
PROP_Inventory_Icon ("SHD2A0")
END_DEFAULTS

View file

@ -6,37 +6,6 @@
#include "p_enemy.h"
#include "s_sound.h"
// Invisibility -------------------------------------------------------------
class AArtiInvisibility : public APowerupGiver
{
DECLARE_ACTOR (AArtiInvisibility, APowerupGiver)
public:
const char *PickupMessage ();
};
FState AArtiInvisibility::States[] =
{
S_BRIGHT (INVS, 'A', 350, NULL, &States[0])
};
IMPLEMENT_ACTOR (AArtiInvisibility, Heretic, 75, 135)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (0)
PROP_Inventory_RespawnTics (30+4200)
PROP_Inventory_FlagsSet (IF_PICKUPFLASH)
PROP_Inventory_Icon ("ARTIINVS")
PROP_PowerupGiver_Powerup ("PowerGhost")
END_DEFAULTS
const char *AArtiInvisibility::PickupMessage ()
{
return GStrings("TXT_ARTIINVISIBILITY");
}
// Tome of power ------------------------------------------------------------
class AArtiTomeOfPower : public APowerupGiver

View file

@ -5,106 +5,6 @@
#include "p_local.h"
#include "a_keys.h"
IMPLEMENT_STATELESS_ACTOR (AHereticKey, Heretic, -1, 0)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_RadiusFixed (20)
PROP_HeightFixed (16)
END_DEFAULTS
// Green key ------------------------------------------------------------
class AKeyGreen : public AHereticKey
{
DECLARE_ACTOR (AKeyGreen, AHereticKey)
public:
const char *PickupMessage ();
};
FState AKeyGreen::States[] =
{
S_BRIGHT (AKYY, 'A', 3, NULL , &States[1]),
S_BRIGHT (AKYY, 'B', 3, NULL , &States[2]),
S_BRIGHT (AKYY, 'C', 3, NULL , &States[3]),
S_BRIGHT (AKYY, 'D', 3, NULL , &States[4]),
S_BRIGHT (AKYY, 'E', 3, NULL , &States[5]),
S_BRIGHT (AKYY, 'F', 3, NULL , &States[6]),
S_BRIGHT (AKYY, 'G', 3, NULL , &States[7]),
S_BRIGHT (AKYY, 'H', 3, NULL , &States[8]),
S_BRIGHT (AKYY, 'I', 3, NULL , &States[9]),
S_BRIGHT (AKYY, 'J', 3, NULL , &States[0])
};
IMPLEMENT_ACTOR (AKeyGreen, Heretic, 73, 86)
PROP_SpawnState (0)
END_DEFAULTS
const char *AKeyGreen::PickupMessage ()
{
return GStrings("TXT_GOTGREENKEY");
}
// Blue key -----------------------------------------------------------------
class AKeyBlue : public AHereticKey
{
DECLARE_ACTOR (AKeyBlue, AHereticKey)
public:
const char *PickupMessage ();
};
FState AKeyBlue::States[] =
{
S_BRIGHT (BKYY, 'A', 3, NULL , &States[1]),
S_BRIGHT (BKYY, 'B', 3, NULL , &States[2]),
S_BRIGHT (BKYY, 'C', 3, NULL , &States[3]),
S_BRIGHT (BKYY, 'D', 3, NULL , &States[4]),
S_BRIGHT (BKYY, 'E', 3, NULL , &States[5]),
S_BRIGHT (BKYY, 'F', 3, NULL , &States[6]),
S_BRIGHT (BKYY, 'G', 3, NULL , &States[7]),
S_BRIGHT (BKYY, 'H', 3, NULL , &States[8]),
S_BRIGHT (BKYY, 'I', 3, NULL , &States[9]),
S_BRIGHT (BKYY, 'J', 3, NULL , &States[0])
};
IMPLEMENT_ACTOR (AKeyBlue, Heretic, 79, 85)
PROP_SpawnState (0)
END_DEFAULTS
const char *AKeyBlue::PickupMessage ()
{
return GStrings("TXT_GOTBLUEKEY");
}
// Yellow key ---------------------------------------------------------------
class AKeyYellow : public AHereticKey
{
DECLARE_ACTOR (AKeyYellow, AHereticKey)
public:
const char *PickupMessage ();
};
FState AKeyYellow::States[] =
{
S_BRIGHT (CKYY, 'A', 3, NULL , &States[1]),
S_BRIGHT (CKYY, 'B', 3, NULL , &States[2]),
S_BRIGHT (CKYY, 'C', 3, NULL , &States[3]),
S_BRIGHT (CKYY, 'D', 3, NULL , &States[4]),
S_BRIGHT (CKYY, 'E', 3, NULL , &States[5]),
S_BRIGHT (CKYY, 'F', 3, NULL , &States[6]),
S_BRIGHT (CKYY, 'G', 3, NULL , &States[7]),
S_BRIGHT (CKYY, 'H', 3, NULL , &States[8]),
S_BRIGHT (CKYY, 'I', 3, NULL , &States[0])
};
IMPLEMENT_ACTOR (AKeyYellow, Heretic, 80, 87)
PROP_SpawnState (0)
END_DEFAULTS
const char *AKeyYellow::PickupMessage ()
{
return GStrings("TXT_GOTYELLOWKEY");
}
// --- Key gizmos -----------------------------------------------------------

View file

@ -357,31 +357,6 @@ void A_AccTeleGlitter (AActor *actor)
}
}
// Super map ----------------------------------------------------------------
class ASuperMap : public AMapRevealer
{
DECLARE_ACTOR (ASuperMap, AMapRevealer)
protected:
const char *PickupMessage ()
{
return GStrings("TXT_ITEMSUPERMAP");
}
};
FState ASuperMap::States[] =
{
#define S_ITEM_SPMP 0
S_NORMAL (SPMP, 'A', -1, NULL , NULL)
};
IMPLEMENT_ACTOR (ASuperMap, Heretic, 35, 137)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
// --- Volcano --------------------------------------------------------------
void A_VolcanoSet (AActor *);

View file

@ -1,207 +0,0 @@
#include "actor.h"
#include "info.h"
#include "a_action.h"
#include "s_sound.h"
void A_FlameCheck (AActor *);
// Temp Small Flame --------------------------------------------------------
class AFlameSmallTemp : public AActor
{
DECLARE_ACTOR (AFlameSmallTemp, AActor)
};
FState AFlameSmallTemp::States[] =
{
S_BRIGHT (FFSM, 'A', 3, NULL , &States[1]),
S_BRIGHT (FFSM, 'B', 3, NULL , &States[2]),
S_BRIGHT (FFSM, 'C', 2, A_FlameCheck , &States[3]),
S_BRIGHT (FFSM, 'C', 2, NULL , &States[4]),
S_BRIGHT (FFSM, 'D', 3, NULL , &States[5]),
S_BRIGHT (FFSM, 'E', 3, A_FlameCheck , &States[0]),
};
IMPLEMENT_ACTOR (AFlameSmallTemp, Hexen, 10500, 96)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (0)
END_DEFAULTS
// Temp Large Flame ---------------------------------------------------------
class AFlameLargeTemp : public AActor
{
DECLARE_ACTOR (AFlameLargeTemp, AActor)
};
FState AFlameLargeTemp::States[] =
{
S_BRIGHT (FFLG, 'A', 4, NULL , &States[1]),
S_BRIGHT (FFLG, 'B', 4, A_FlameCheck , &States[2]),
S_BRIGHT (FFLG, 'C', 4, NULL , &States[3]),
S_BRIGHT (FFLG, 'D', 4, A_FlameCheck , &States[4]),
S_BRIGHT (FFLG, 'E', 4, NULL , &States[5]),
S_BRIGHT (FFLG, 'F', 4, A_FlameCheck , &States[6]),
S_BRIGHT (FFLG, 'G', 4, NULL , &States[7]),
S_BRIGHT (FFLG, 'H', 4, A_FlameCheck , &States[8]),
S_BRIGHT (FFLG, 'I', 4, NULL , &States[9]),
S_BRIGHT (FFLG, 'J', 4, A_FlameCheck , &States[10]),
S_BRIGHT (FFLG, 'K', 4, NULL , &States[11]),
S_BRIGHT (FFLG, 'L', 4, A_FlameCheck , &States[12]),
S_BRIGHT (FFLG, 'M', 4, NULL , &States[13]),
S_BRIGHT (FFLG, 'N', 4, A_FlameCheck , &States[14]),
S_BRIGHT (FFLG, 'O', 4, NULL , &States[15]),
S_BRIGHT (FFLG, 'P', 4, A_FlameCheck , &States[4]),
};
IMPLEMENT_ACTOR (AFlameLargeTemp, Hexen, 10502, 98)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (0)
END_DEFAULTS
// Small Flame --------------------------------------------------------------
class AFlameSmall : public AActor
{
DECLARE_ACTOR (AFlameSmall, AActor)
public:
void Activate (AActor *activator);
void Deactivate (AActor *activator);
};
FState AFlameSmall::States[] =
{
#define S_FLAME_SMALL1 0
S_BRIGHT (FFSM, 'A', 3, NULL , &States[S_FLAME_SMALL1+1]),
S_BRIGHT (FFSM, 'A', 3, A_UnHideThing , &States[S_FLAME_SMALL1+2]),
S_BRIGHT (FFSM, 'A', 3, NULL , &States[S_FLAME_SMALL1+3]),
S_BRIGHT (FFSM, 'B', 3, NULL , &States[S_FLAME_SMALL1+4]),
S_BRIGHT (FFSM, 'C', 3, NULL , &States[S_FLAME_SMALL1+5]),
S_BRIGHT (FFSM, 'D', 3, NULL , &States[S_FLAME_SMALL1+6]),
S_BRIGHT (FFSM, 'E', 3, NULL , &States[S_FLAME_SMALL1+2]),
#define S_FLAME_SDORM1 (S_FLAME_SMALL1+7)
S_NORMAL (FFSM, 'A', 2, NULL , &States[S_FLAME_SDORM1+1]),
S_NORMAL (FFSM, 'B', 2, A_HideThing , &States[S_FLAME_SDORM1+2]),
S_NORMAL (FFSM, 'C', 200, NULL , &States[S_FLAME_SDORM1+2]),
};
IMPLEMENT_ACTOR (AFlameSmall, Hexen, 10501, 97)
PROP_Flags2 (MF2_NOTELEPORT|RF_INVISIBLE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_FLAME_SMALL1)
END_DEFAULTS
void AFlameSmall::Activate (AActor *activator)
{
Super::Activate (activator);
S_Sound (this, CHAN_BODY, "Ignite", 1, ATTN_NORM);
SetState (&States[S_FLAME_SMALL1]);
}
void AFlameSmall::Deactivate (AActor *activator)
{
Super::Deactivate (activator);
SetState (&States[S_FLAME_SDORM1]);
}
// Large Flame --------------------------------------------------------------
class AFlameLarge : public AActor
{
DECLARE_ACTOR (AFlameLarge, AActor)
public:
void Activate (AActor *activator);
void Deactivate (AActor *activator);
};
FState AFlameLarge::States[] =
{
#define S_FLAME_LARGE1 0
S_BRIGHT (FFLG, 'A', 2, NULL , &States[S_FLAME_LARGE1+1]),
S_BRIGHT (FFLG, 'A', 2, A_UnHideThing , &States[S_FLAME_LARGE1+2]),
S_BRIGHT (FFLG, 'A', 4, NULL , &States[S_FLAME_LARGE1+3]),
S_BRIGHT (FFLG, 'B', 4, NULL , &States[S_FLAME_LARGE1+4]),
S_BRIGHT (FFLG, 'C', 4, NULL , &States[S_FLAME_LARGE1+5]),
S_BRIGHT (FFLG, 'D', 4, NULL , &States[S_FLAME_LARGE1+6]),
S_BRIGHT (FFLG, 'E', 4, NULL , &States[S_FLAME_LARGE1+7]),
S_BRIGHT (FFLG, 'F', 4, NULL , &States[S_FLAME_LARGE1+8]),
S_BRIGHT (FFLG, 'G', 4, NULL , &States[S_FLAME_LARGE1+9]),
S_BRIGHT (FFLG, 'H', 4, NULL , &States[S_FLAME_LARGE1+10]),
S_BRIGHT (FFLG, 'I', 4, NULL , &States[S_FLAME_LARGE1+11]),
S_BRIGHT (FFLG, 'J', 4, NULL , &States[S_FLAME_LARGE1+12]),
S_BRIGHT (FFLG, 'K', 4, NULL , &States[S_FLAME_LARGE1+13]),
S_BRIGHT (FFLG, 'L', 4, NULL , &States[S_FLAME_LARGE1+14]),
S_BRIGHT (FFLG, 'M', 4, NULL , &States[S_FLAME_LARGE1+15]),
S_BRIGHT (FFLG, 'N', 4, NULL , &States[S_FLAME_LARGE1+16]),
S_BRIGHT (FFLG, 'O', 4, NULL , &States[S_FLAME_LARGE1+17]),
S_BRIGHT (FFLG, 'P', 4, NULL , &States[S_FLAME_LARGE1+6]),
#define S_FLAME_LDORM1 (S_FLAME_LARGE1+18)
S_NORMAL (FFLG, 'D', 2, NULL , &States[S_FLAME_LDORM1+1]),
S_NORMAL (FFLG, 'C', 2, NULL , &States[S_FLAME_LDORM1+2]),
S_NORMAL (FFLG, 'B', 2, NULL , &States[S_FLAME_LDORM1+3]),
S_NORMAL (FFLG, 'A', 2, A_HideThing , &States[S_FLAME_LDORM1+4]),
S_NORMAL (FFLG, 'A', 200, NULL , &States[S_FLAME_LDORM1+4]),
};
IMPLEMENT_ACTOR (AFlameLarge, Hexen, 10503, 99)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderFlags (RF_INVISIBLE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_FLAME_LARGE1)
END_DEFAULTS
void AFlameLarge::Activate (AActor *activator)
{
Super::Activate (activator);
S_Sound (this, CHAN_BODY, "Ignite", 1, ATTN_NORM);
SetState (&States[S_FLAME_LARGE1]);
}
void AFlameLarge::Deactivate (AActor *activator)
{
Super::Deactivate (activator);
SetState (&States[S_FLAME_LDORM1]);
}
//===========================================================================
//
// A_FlameCheck
//
//===========================================================================
void A_FlameCheck (AActor *actor)
{
if (!actor->args[0]--) // Called every 8 tics
{
actor->Destroy ();
}
}
//===========================================================================
//
// Hexen uses 2 different spawn IDs for these actors
//
//===========================================================================
class AFlameSmall2 : public AFlameSmall
{
DECLARE_ACTOR (AFlameSmall2, AFlameSmall)
};
IMPLEMENT_STATELESS_ACTOR (AFlameSmall2, Hexen, -1, 66)
END_DEFAULTS
class AFlameLarge2 : public AFlameLarge
{
DECLARE_ACTOR (AFlameLarge2, AFlameLarge)
};
IMPLEMENT_STATELESS_ACTOR (AFlameLarge2, Hexen, -1, 67)
END_DEFAULTS

View file

@ -870,27 +870,6 @@ void AZShrub2::GetExplodeParms (int &damage, int &distance, bool &hurtSrc)
distance = 64;
}
//===========================================================================
//
// A_TreeDeath
//
//===========================================================================
void A_TreeDeath (AActor *actor)
{
if (actor->DamageType != MOD_FIRE)
{
actor->height <<= 2;
actor->flags |= MF_SHOOTABLE;
actor->flags &= ~(MF_CORPSE+MF_DROPOFF);
actor->health = 35;
return;
}
else
{
actor->SetState (actor->MeleeState);
}
}
// Poison Shroom ------------------------------------------------------------

View file

@ -1,168 +0,0 @@
#include "info.h"
#include "a_pickups.h"
#include "a_artifacts.h"
#include "gstrings.h"
#include "p_local.h"
#include "s_sound.h"
#include "gi.h"
// Health -------------------------------------------------------------------
class AArtiHealth : public AHealthPickup
{
DECLARE_ACTOR (AArtiHealth, AHealthPickup)
public:
const char *PickupMessage ();
};
FState AArtiHealth::States[] =
{
S_NORMAL (PTN2, 'A', 4, NULL, &States[1]),
S_NORMAL (PTN2, 'B', 4, NULL, &States[2]),
S_NORMAL (PTN2, 'C', 4, NULL, &States[0])
};
IMPLEMENT_ACTOR (AArtiHealth, Raven, 82, 24)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnHealth (25)
PROP_SpawnState (0)
PROP_Inventory_FlagsSet (IF_PICKUPFLASH|IF_FANCYPICKUPSOUND)
PROP_Inventory_Icon ("ARTIPTN2")
PROP_Inventory_PickupSound ("misc/p_pkup")
END_DEFAULTS
const char *AArtiHealth::PickupMessage ()
{
return GStrings("TXT_ARTIHEALTH");
}
// Super health -------------------------------------------------------------
class AArtiSuperHealth : public AHealthPickup
{
DECLARE_ACTOR (AArtiSuperHealth, AHealthPickup)
public:
const char *PickupMessage ();
};
FState AArtiSuperHealth::States[] =
{
S_NORMAL (SPHL, 'A', 350, NULL, &States[0])
};
IMPLEMENT_ACTOR (AArtiSuperHealth, Raven, 32, 25)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_SpawnHealth (100)
PROP_Inventory_FlagsSet (IF_PICKUPFLASH|IF_FANCYPICKUPSOUND)
PROP_Inventory_Icon ("ARTISPHL")
PROP_Inventory_PickupSound ("misc/p_pkup")
END_DEFAULTS
const char *AArtiSuperHealth::PickupMessage ()
{
return GStrings("TXT_ARTISUPERHEALTH");
}
// Flight -------------------------------------------------------------------
class AArtiFly : public APowerupGiver
{
DECLARE_ACTOR (AArtiFly, APowerupGiver)
public:
const char *PickupMessage ();
};
FState AArtiFly::States[] =
{
S_NORMAL (SOAR, 'A', 5, NULL, &States[1]),
S_NORMAL (SOAR, 'B', 5, NULL, &States[2]),
S_NORMAL (SOAR, 'C', 5, NULL, &States[3]),
S_NORMAL (SOAR, 'B', 5, NULL, &States[0])
};
IMPLEMENT_ACTOR (AArtiFly, Raven, 83, 15)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_Inventory_RespawnTics (30+4200)
PROP_Inventory_FlagsSet (IF_INTERHUBSTRIP|IF_PICKUPFLASH)
PROP_Inventory_Icon ("ARTISOAR")
PROP_PowerupGiver_Powerup ("PowerFlight")
END_DEFAULTS
const char *AArtiFly::PickupMessage ()
{
return GStrings("TXT_ARTIFLY");
}
// Invulnerability ----------------------------------------------------------
class AArtiInvulnerability : public APowerupGiver
{
DECLARE_ACTOR (AArtiInvulnerability, APowerupGiver)
public:
const char *PickupMessage ();
};
FState AArtiInvulnerability::States[] =
{
S_NORMAL (INVU, 'A', 3, NULL, &States[1]),
S_NORMAL (INVU, 'B', 3, NULL, &States[2]),
S_NORMAL (INVU, 'C', 3, NULL, &States[3]),
S_NORMAL (INVU, 'D', 3, NULL, &States[0])
};
IMPLEMENT_ACTOR (AArtiInvulnerability, Raven, 84, 133)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_Inventory_RespawnTics (30+4200)
PROP_Inventory_FlagsSet (IF_PICKUPFLASH)
PROP_Inventory_Icon ("ARTIINVU")
PROP_PowerupGiver_Powerup ("PowerInvulnerable")
END_DEFAULTS
const char *AArtiInvulnerability::PickupMessage ()
{
if (gameinfo.gametype == GAME_Hexen)
{
return GStrings("TXT_ARTIINVULNERABILITY2");
}
else
{
return GStrings("TXT_ARTIINVULNERABILITY");
}
}
// Torch --------------------------------------------------------------------
class AArtiTorch : public APowerupGiver
{
DECLARE_ACTOR (AArtiTorch, APowerupGiver)
public:
const char *PickupMessage ();
};
FState AArtiTorch::States[] =
{
S_BRIGHT (TRCH, 'A', 3, NULL, &States[1]),
S_BRIGHT (TRCH, 'B', 3, NULL, &States[2]),
S_BRIGHT (TRCH, 'C', 3, NULL, &States[0])
};
IMPLEMENT_ACTOR (AArtiTorch, Raven, 33, 73)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_Inventory_FlagsSet (IF_PICKUPFLASH)
PROP_Inventory_Icon ("ARTITRCH")
PROP_PowerupGiver_Powerup ("PowerTorch")
END_DEFAULTS
const char *AArtiTorch::PickupMessage ()
{
return GStrings("TXT_ARTITORCH");
}

View file

@ -1,31 +0,0 @@
#include "info.h"
#include "a_pickups.h"
#include "d_player.h"
#include "gstrings.h"
#include "p_local.h"
// Crystal vial -------------------------------------------------------------
class ACrystalVial : public AHealth
{
DECLARE_ACTOR (ACrystalVial, AHealth)
protected:
virtual const char *PickupMessage ()
{
return GStrings("TXT_ITEMHEALTH");
}
};
FState ACrystalVial::States[] =
{
S_NORMAL (PTN1, 'A', 3, NULL , &States[1]),
S_NORMAL (PTN1, 'B', 3, NULL , &States[2]),
S_NORMAL (PTN1, 'C', 3, NULL , &States[0])
};
IMPLEMENT_ACTOR (ACrystalVial, Raven, 81, 23)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_Inventory_Amount (10)
PROP_SpawnState (0)
END_DEFAULTS

View file

@ -44,17 +44,18 @@ bool APowerupGiver::Use (bool pickup)
{
APowerup *power = static_cast<APowerup *> (Spawn (PowerupType, 0, 0, 0));
if (EffectTics != 0)
{
power->EffectTics = EffectTics;
}
if (BlendColor != 0)
{
power->BlendColor = BlendColor;
}
power->ItemFlags |= ItemFlags & IF_ALWAYSPICKUP;
if (power->TryPickup (Owner))
{
if (EffectTics != 0)
{
power->EffectTics = EffectTics;
}
if (BlendColor != 0)
{
power->BlendColor = BlendColor;
}
return true;
}
power->GoAwayAndDie ();
@ -91,6 +92,14 @@ void APowerup::Tick ()
else if (EffectTics > 0)
{
DoEffect ();
if (EffectTics > BLINKTHRESHOLD || (EffectTics & 8))
{
if (BlendColor == INVERSECOLOR) Owner->player->fixedcolormap = INVERSECOLORMAP;
else if (BlendColor == GOLDCOLOR) Owner->player->fixedcolormap = GOLDCOLORMAP;
}
else Owner->player->fixedcolormap = 0;
if (--EffectTics == 0)
{
Destroy ();
@ -118,7 +127,10 @@ void APowerup::Serialize (FArchive &arc)
PalEntry APowerup::GetBlend ()
{
if (EffectTics <= 4*32 && !(EffectTics & 8))
if (EffectTics <= BLINKTHRESHOLD && !(EffectTics & 8))
return 0;
if (BlendColor == INVERSECOLOR || BlendColor == GOLDCOLOR)
return 0;
return BlendColor;
@ -213,7 +225,12 @@ bool APowerup::HandlePickup (AInventory *item)
return true;
}
// Only increase the EffectTics, not decrease it.
EffectTics = MAX (EffectTics, power->EffectTics);
// Color also gets transferred only when the new item has an effect.
if (power->EffectTics > EffectTics)
{
EffectTics = power->EffectTics;
BlendColor = power->BlendColor;
}
power->ItemFlags |= IF_PICKUPGOOD;
return true;
}
@ -259,6 +276,25 @@ IMPLEMENT_STATELESS_ACTOR (APowerInvulnerable, Any, -1, 0)
PROP_Inventory_Icon ("SPSHLD0")
END_DEFAULTS
// Need to set the default for each game here
AT_GAME_SET(PowerInvulnerable)
{
APowerInvulnerable * invul = GetDefault<APowerInvulnerable>();
switch (gameinfo.gametype)
{
case GAME_Doom:
case GAME_Strife:
invul->BlendColor = INVERSECOLOR;
break;
case GAME_Heretic:
invul->BlendColor = GOLDCOLOR;
break;
default:
break;
}
}
//===========================================================================
//
// APowerInvulnerable :: InitEffect
@ -281,19 +317,6 @@ void APowerInvulnerable::InitEffect ()
void APowerInvulnerable::DoEffect ()
{
Owner->player->mo->SpecialInvulnerabilityHandling (APlayerPawn::INVUL_Active);
if (gameinfo.gametype != GAME_Hexen)
{
if ((EffectTics > BLINKTHRESHOLD || (EffectTics & 8)) &&
!(Owner->player->mo->effects & FX_RESPAWNINVUL) &&
0 == BlendColor.a) // [RH] No special colormap if there is a blend
{
Owner->player->fixedcolormap = NUMCOLORMAPS;
}
else
{
Owner->player->fixedcolormap = 0;
}
}
}
//===========================================================================

View file

@ -4,6 +4,9 @@
#include "farchive.h"
#include "a_pickups.h"
#define INVERSECOLOR 0x00345678
#define GOLDCOLOR 0x009abcde
#define STREAM_ENUM(e) \
inline FArchive &operator<< (FArchive &arc, e &i) \
{ \

View file

@ -4,115 +4,6 @@
static FRandom pr_dirt ("SpawnDirt");
// Convenient macros --------------------------------------------------------
#define _DEBCOMMON(cls,parent,ns,dstate,sid) \
class cls : public parent { DECLARE_STATELESS_ACTOR (cls, parent) static FState States[ns]; }; \
IMPLEMENT_ACTOR (cls, Any, -1, sid) \
PROP_DeathState (dstate) \
PROP_SpawnState (0)
#define _DEBSTARTSTATES(cls,ns) \
END_DEFAULTS FState cls::States[ns] =
#define DEBRIS(cls,spawnnum,ns,dstate) \
_DEBCOMMON(cls,AActor,ns,dstate,spawnnum) \
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE) \
PROP_Flags2 (MF2_NOTELEPORT) \
_DEBSTARTSTATES(cls,ns)
#define SHARD(cls,spawnnum,ns,dstate) \
_DEBCOMMON(cls,AGlassShard,ns,dstate,spawnnum) \
PROP_RadiusFixed (5) \
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE|MF_NOGRAVITY) \
PROP_Flags2 (MF2_NOTELEPORT|MF2_HEXENBOUNCE) \
_DEBSTARTSTATES(cls,ns)
// Rocks --------------------------------------------------------------------
#define S_ROCK1 0
#define S_ROCK1_D (S_ROCK1+1)
DEBRIS (ARock1, 41, 2, S_ROCK1_D)
{
S_NORMAL (ROKK, 'A', 20, NULL, &States[S_ROCK1]),
S_NORMAL (ROKK, 'A', 10, NULL, NULL)
};
#define S_ROCK2 0
#define S_ROCK2_D (S_ROCK2+1)
DEBRIS (ARock2, 42, 2, S_ROCK2_D)
{
S_NORMAL (ROKK, 'B', 20, NULL, &States[S_ROCK2]),
S_NORMAL (ROKK, 'B', 10, NULL, NULL)
};
#define S_ROCK3 0
#define S_ROCK3_D (S_ROCK3+1)
DEBRIS (ARock3, 43, 2, S_ROCK3_D)
{
S_NORMAL (ROKK, 'C', 20, NULL, &States[S_ROCK3+0]),
S_NORMAL (ROKK, 'C', 10, NULL, NULL)
};
// Dirt ---------------------------------------------------------------------
#define S_DIRT1 0
#define S_DIRT1_D (S_DIRT1+1)
DEBRIS (ADirt1, 44, 2, S_DIRT1_D)
{
S_NORMAL (ROKK, 'D', 20, NULL, &States[S_DIRT1]),
S_NORMAL (ROKK, 'D', 10, NULL, NULL)
};
#define S_DIRT2 0
#define S_DIRT2_D (S_DIRT2+1)
DEBRIS (ADirt2, 45, 2, S_DIRT2_D)
{
S_NORMAL (ROKK, 'E', 20, NULL, &States[S_DIRT2]),
S_NORMAL (ROKK, 'E', 10, NULL, NULL)
};
#define S_DIRT3 0
#define S_DIRT3_D (S_DIRT3+1)
DEBRIS (ADirt3, 46, 2, S_DIRT3_D)
{
S_NORMAL (ROKK, 'F', 20, NULL, &States[S_DIRT3]),
S_NORMAL (ROKK, 'F', 10, NULL, NULL)
};
#define S_DIRT4 0
#define S_DIRT4_D (S_DIRT4+1)
DEBRIS (ADirt4, 47, 2, S_DIRT4_D)
{
S_NORMAL (ROKK, 'G', 20, NULL, &States[S_DIRT4]),
S_NORMAL (ROKK, 'G', 10, NULL, NULL)
};
#define S_DIRT5 0
#define S_DIRT5_D (S_DIRT5+1)
DEBRIS (ADirt5, 48, 2, S_DIRT5_D)
{
S_NORMAL (ROKK, 'H', 20, NULL, &States[S_DIRT5]),
S_NORMAL (ROKK, 'H', 10, NULL, NULL)
};
#define S_DIRT6 0
#define S_DIRT6_D (S_DIRT6+1)
DEBRIS (ADirt6, 49, 2, S_DIRT6_D)
{
S_NORMAL (ROKK, 'I', 20, NULL, &States[S_DIRT6]),
S_NORMAL (ROKK, 'I', 10, NULL, NULL)
};
// Stained glass ------------------------------------------------------------
class AGlassShard : public AActor
@ -121,140 +12,19 @@ class AGlassShard : public AActor
public:
bool FloorBounceMissile (secplane_t &plane)
{
fixed_t bouncemomz = FixedMul (momz, (fixed_t)(-0.3*FRACUNIT));
if (abs (bouncemomz) < (FRACUNIT/2))
if (!Super::FloorBounceMissile (plane))
{
Destroy ();
}
else
{
if (!Super::FloorBounceMissile (plane))
if (abs (momz) < (FRACUNIT/2))
{
momz = bouncemomz;
return false;
Destroy ();
}
return false;
}
return true;
}
};
IMPLEMENT_ABSTRACT_ACTOR (AGlassShard)
#define S_SGSHARD1 0
#define S_SGSHARD1_D (S_SGSHARD1+5)
SHARD (ASGShard1, 54, 6, S_SGSHARD1_D)
{
S_NORMAL (SGSA, 'A', 4, NULL , &States[S_SGSHARD1+1]),
S_NORMAL (SGSA, 'B', 4, NULL , &States[S_SGSHARD1+2]),
S_NORMAL (SGSA, 'C', 4, NULL , &States[S_SGSHARD1+3]),
S_NORMAL (SGSA, 'D', 4, NULL , &States[S_SGSHARD1+4]),
S_NORMAL (SGSA, 'E', 4, NULL , &States[S_SGSHARD1+0]),
S_NORMAL (SGSA, 'E', 30, NULL , NULL)
};
#define S_SGSHARD2 0
#define S_SGSHARD2_D (S_SGSHARD2+5)
SHARD (ASGShard2, 55, 6, S_SGSHARD2_D)
{
S_NORMAL (SGSA, 'F', 4, NULL , &States[S_SGSHARD2+1]),
S_NORMAL (SGSA, 'G', 4, NULL , &States[S_SGSHARD2+2]),
S_NORMAL (SGSA, 'H', 4, NULL , &States[S_SGSHARD2+3]),
S_NORMAL (SGSA, 'I', 4, NULL , &States[S_SGSHARD2+4]),
S_NORMAL (SGSA, 'J', 4, NULL , &States[S_SGSHARD2+0]),
S_NORMAL (SGSA, 'J', 30, NULL , NULL)
};
#define S_SGSHARD3 0
#define S_SGSHARD3_D (S_SGSHARD3+5)
SHARD (ASGShard3, 56, 6, S_SGSHARD3_D)
{
S_NORMAL (SGSA, 'K', 4, NULL , &States[S_SGSHARD3+1]),
S_NORMAL (SGSA, 'L', 4, NULL , &States[S_SGSHARD3+2]),
S_NORMAL (SGSA, 'M', 4, NULL , &States[S_SGSHARD3+3]),
S_NORMAL (SGSA, 'N', 4, NULL , &States[S_SGSHARD3+4]),
S_NORMAL (SGSA, 'O', 4, NULL , &States[S_SGSHARD3+0]),
S_NORMAL (SGSA, 'O', 30, NULL , NULL)
};
#define S_SGSHARD4 0
#define S_SGSHARD4_D (S_SGSHARD4+5)
SHARD (ASGShard4, 57, 6, S_SGSHARD4_D)
{
S_NORMAL (SGSA, 'P', 4, NULL , &States[S_SGSHARD4+1]),
S_NORMAL (SGSA, 'Q', 4, NULL , &States[S_SGSHARD4+2]),
S_NORMAL (SGSA, 'R', 4, NULL , &States[S_SGSHARD4+3]),
S_NORMAL (SGSA, 'S', 4, NULL , &States[S_SGSHARD4+4]),
S_NORMAL (SGSA, 'T', 4, NULL , &States[S_SGSHARD4+0]),
S_NORMAL (SGSA, 'T', 30, NULL , NULL)
};
#define S_SGSHARD5 0
#define S_SGSHARD5_D (S_SGSHARD5+5)
SHARD (ASGShard5, 58, 6, S_SGSHARD5_D)
{
S_NORMAL (SGSA, 'U', 4, NULL , &States[S_SGSHARD5+1]),
S_NORMAL (SGSA, 'V', 4, NULL , &States[S_SGSHARD5+2]),
S_NORMAL (SGSA, 'W', 4, NULL , &States[S_SGSHARD5+3]),
S_NORMAL (SGSA, 'X', 4, NULL , &States[S_SGSHARD5+4]),
S_NORMAL (SGSA, 'Y', 4, NULL , &States[S_SGSHARD5+0]),
S_NORMAL (SGSA, 'Y', 30, NULL , NULL)
};
#define S_SGSHARD6 0
#define S_SGSHARD6_D (S_SGSHARD6+1)
SHARD (ASGShard6, 59, 2, S_SGSHARD6_D)
{
S_NORMAL (SGSB, 'A', 4, NULL , &States[S_SGSHARD6+0]),
S_NORMAL (SGSB, 'A', 30, NULL , NULL)
};
#define S_SGSHARD7 0
#define S_SGSHARD7_D (S_SGSHARD7+1)
SHARD (ASGShard7, 60, 2, S_SGSHARD7_D)
{
S_NORMAL (SGSB, 'B', 4, NULL , &States[S_SGSHARD7+0]),
S_NORMAL (SGSB, 'B', 30, NULL , NULL)
};
#define S_SGSHARD8 0
#define S_SGSHARD8_D (S_SGSHARD8+1)
SHARD (ASGShard8, 61, 2, S_SGSHARD8_D)
{
S_NORMAL (SGSB, 'C', 4, NULL , &States[S_SGSHARD8+0]),
S_NORMAL (SGSB, 'C', 30, NULL , NULL)
};
#define S_SGSHARD9 0
#define S_SGSHARD9_D (S_SGSHARD9+1)
SHARD (ASGShard9, 62, 2, S_SGSHARD9_D)
{
S_NORMAL (SGSB, 'D', 4, NULL , &States[S_SGSHARD9+0]),
S_NORMAL (SGSB, 'D', 30, NULL , NULL)
};
#define S_SGSHARD0 0
#define S_SGSHARD0_D (S_SGSHARD0+1)
SHARD (ASGShard0, 63, 2, S_SGSHARD0_D)
{
S_NORMAL (SGSB, 'E', 4, NULL , &States[S_SGSHARD0+0]),
S_NORMAL (SGSB, 'E', 30, NULL , NULL)
};
IMPLEMENT_ABSTRACT_ACTOR(AGlassShard)
// Dirt stuff
@ -269,30 +39,16 @@ void P_SpawnDirt (AActor *actor, fixed_t radius)
x = actor->x + FixedMul(radius,finecosine[angle]);
y = actor->y + FixedMul(radius,finesine[angle]);
z = actor->z + (pr_dirt()<<9) + FRACUNIT;
switch (pr_dirt()%6)
char fmt[8];
sprintf(fmt, "Dirt%d", 1 + pr_dirt()%6);
dtype = TypeInfo::FindType(fmt);
if (dtype)
{
case 0:
dtype = RUNTIME_CLASS(ADirt1);
break;
case 1:
dtype = RUNTIME_CLASS(ADirt2);
break;
case 2:
dtype = RUNTIME_CLASS(ADirt3);
break;
case 3:
dtype = RUNTIME_CLASS(ADirt4);
break;
case 4:
dtype = RUNTIME_CLASS(ADirt5);
break;
case 5:
dtype = RUNTIME_CLASS(ADirt6);
break;
}
mo = Spawn (dtype, x, y, z);
if (mo)
{
mo->momz = pr_dirt()<<10;
mo = Spawn (dtype, x, y, z);
if (mo)
{
mo->momz = pr_dirt()<<10;
}
}
}

View file

@ -15,16 +15,6 @@ protected:
virtual bool ShouldStay ();
};
class ADoomKey : public AKey
{
DECLARE_STATELESS_ACTOR (ADoomKey, AKey)
};
class AHereticKey : public AKey
{
DECLARE_STATELESS_ACTOR (AHereticKey, AKey)
};
class AHexenKey : public AKey
{
DECLARE_STATELESS_ACTOR (AHexenKey, AKey)

View file

@ -498,6 +498,7 @@ bool AInventory::SpecialDropAction (AActor *dropper)
bool AInventory::ShouldRespawn ()
{
if ((ItemFlags & IF_BIGPOWERUP) && !(dmflags & DF_RESPAWN_SUPER)) return false;
return !!(dmflags & DF_ITEMS_RESPAWN);
}

View file

@ -85,6 +85,7 @@ enum
IF_PICKUPFLASH = 1<<9, // Item "flashes" when picked up
IF_ALWAYSPICKUP = 1<<10, // For IF_AUTOACTIVATE, MaxAmount=0 items: Always "pick up", even if it doesn't do anything
IF_FANCYPICKUPSOUND = 1<<11, // Play pickup sound in "surround" mode
IF_BIGPOWERUP = 1<<12, // Affected by RESPAWN_SUPER dmflag
};
struct vissprite_t;

View file

@ -80,7 +80,7 @@ public:
DWORD AlphaColor;
WORD Translation;
WORD PicNum;
WORD RenderFlags;
DWORD RenderFlags;
BYTE RenderStyle;
protected:
@ -116,36 +116,6 @@ private:
DImpactDecal();
};
class AWaterSplashBase : public AActor
{
DECLARE_ACTOR (AWaterSplashBase, AActor)
};
class AWaterSplash : public AActor
{
DECLARE_ACTOR (AWaterSplash, AActor)
};
class ALavaSplash : public AActor
{
DECLARE_ACTOR (ALavaSplash, AActor)
};
class ALavaSmoke : public AActor
{
DECLARE_ACTOR (ALavaSmoke, AActor)
};
class ASludgeSplash : public AActor
{
DECLARE_ACTOR (ASludgeSplash, AActor)
};
class ASludgeChunk : public AActor
{
DECLARE_ACTOR (ASludgeChunk, AActor)
};
class AAmbientSound : public AActor
{
DECLARE_STATELESS_ACTOR (AAmbientSound, AActor)

View file

@ -1,229 +0,0 @@
#include "actor.h"
#include "a_sharedglobal.h"
#include "m_random.h"
#include "gi.h"
// Water --------------------------------------------------------------------
FState AWaterSplash::States[] =
{
#define S_SPLASH 0
S_NORMAL (SPSH, 'A', 8, NULL, &States[1]),
S_NORMAL (SPSH, 'B', 8, NULL, &States[2]),
S_NORMAL (SPSH, 'C', 8, NULL, &States[3]),
S_NORMAL (SPSH, 'D', 16, NULL, NULL),
#define S_SPLASHX (S_SPLASH+4)
S_NORMAL (SPSH, 'D', 10, NULL, NULL)
};
IMPLEMENT_ACTOR (AWaterSplash, Any, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH)
PROP_Flags3 (MF3_DONTSPLASH|MF3_DONTBLAST)
PROP_SpawnState (S_SPLASH)
PROP_DeathState (S_SPLASHX)
END_DEFAULTS
FState AWaterSplashBase::States[] =
{
S_NORMAL (SPSH, 'E', 5, NULL, &States[1]),
S_NORMAL (SPSH, 'F', 5, NULL, &States[2]),
S_NORMAL (SPSH, 'G', 5, NULL, &States[3]),
S_NORMAL (SPSH, 'H', 5, NULL, &States[4]),
S_NORMAL (SPSH, 'I', 5, NULL, &States[5]),
S_NORMAL (SPSH, 'J', 5, NULL, &States[6]),
S_NORMAL (SPSH, 'K', 5, NULL, NULL)
};
IMPLEMENT_ACTOR (AWaterSplashBase, Any, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY)
PROP_Flags3 (MF3_DONTSPLASH|MF3_DONTBLAST)
PROP_SpawnState (0)
END_DEFAULTS
// Lava ---------------------------------------------------------------------
FState ALavaSplash::States[] =
{
S_BRIGHT (LVAS, 'A', 5, NULL, &States[1]),
S_BRIGHT (LVAS, 'B', 5, NULL, &States[2]),
S_BRIGHT (LVAS, 'C', 5, NULL, &States[3]),
S_BRIGHT (LVAS, 'D', 5, NULL, &States[4]),
S_BRIGHT (LVAS, 'E', 5, NULL, &States[5]),
S_BRIGHT (LVAS, 'F', 5, NULL, NULL)
};
IMPLEMENT_ACTOR (ALavaSplash, Any, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_SpawnState (0)
END_DEFAULTS
FState ALavaSmoke::States[] =
{
S_BRIGHT (LVAS, 'G', 5, NULL, &States[1]),
S_BRIGHT (LVAS, 'H', 5, NULL, &States[2]),
S_BRIGHT (LVAS, 'I', 5, NULL, &States[3]),
S_BRIGHT (LVAS, 'J', 5, NULL, &States[4]),
S_BRIGHT (LVAS, 'K', 5, NULL, NULL)
};
IMPLEMENT_ACTOR (ALavaSmoke, Any, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP)
PROP_RenderStyle (STYLE_Translucent)
PROP_SpawnState (0)
END_DEFAULTS
AT_GAME_SET (LavaSmoke)
{
ALavaSmoke *def = GetDefault<ALavaSmoke>();
def->alpha = (gameinfo.gametype == GAME_Heretic ? HR_SHADOW : HX_SHADOW);
}
// Sludge -------------------------------------------------------------------
FState ASludgeChunk::States[] =
{
#define S_SLUDGECHUNK 0
S_NORMAL (SLDG, 'A', 8, NULL, &States[1]),
S_NORMAL (SLDG, 'B', 8, NULL, &States[2]),
S_NORMAL (SLDG, 'C', 8, NULL, &States[3]),
S_NORMAL (SLDG, 'D', 8, NULL, NULL),
#define S_SLUDGECHUNKX (S_SLUDGECHUNK+4)
S_NORMAL (SLDG, 'D', 6, NULL, NULL)
};
IMPLEMENT_ACTOR (ASludgeChunk, Any, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_SpawnState (S_SLUDGECHUNK)
PROP_DeathState (S_SLUDGECHUNKX)
END_DEFAULTS
FState ASludgeSplash::States[] =
{
S_NORMAL (SLDG, 'E', 6, NULL, &States[1]),
S_NORMAL (SLDG, 'F', 6, NULL, &States[2]),
S_NORMAL (SLDG, 'G', 6, NULL, &States[3]),
S_NORMAL (SLDG, 'H', 6, NULL, NULL)
};
IMPLEMENT_ACTOR (ASludgeSplash, Any, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_SpawnState (0)
END_DEFAULTS
/*
* These next four classes are not used by me anywhere.
* They are for people who want to use them in a TERRAIN lump.
*/
class ABloodSplash : public AActor
{
DECLARE_ACTOR (ABloodSplash, AActor);
};
class ABloodSplashBase : public AActor
{
DECLARE_ACTOR (ABloodSplashBase, AActor);
};
class ASlimeSplash : public AActor
{
DECLARE_ACTOR (ASlimeSplash, AActor)
};
class ASlimeChunk : public AActor
{
DECLARE_ACTOR (ASlimeChunk, AActor)
};
// Blood (water with a different sprite) ------------------------------------
FState ABloodSplash::States[] =
{
S_NORMAL (BSPH, 'A', 8, NULL, &States[1]),
S_NORMAL (BSPH, 'B', 8, NULL, &States[2]),
S_NORMAL (BSPH, 'C', 8, NULL, &States[3]),
S_NORMAL (BSPH, 'D', 16, NULL, NULL),
S_NORMAL (BSPH, 'D', 10, NULL, NULL)
};
IMPLEMENT_ACTOR (ABloodSplash, Any, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_SpawnState (0)
PROP_DeathState (4)
END_DEFAULTS
FState ABloodSplashBase::States[] =
{
S_NORMAL (BSPH, 'E', 5, NULL, &States[1]),
S_NORMAL (BSPH, 'F', 5, NULL, &States[2]),
S_NORMAL (BSPH, 'G', 5, NULL, &States[3]),
S_NORMAL (BSPH, 'H', 5, NULL, &States[4]),
S_NORMAL (BSPH, 'I', 5, NULL, &States[5]),
S_NORMAL (BSPH, 'J', 5, NULL, &States[6]),
S_NORMAL (BSPH, 'K', 5, NULL, NULL)
};
IMPLEMENT_ACTOR (ABloodSplashBase, Any, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_SpawnState (0)
END_DEFAULTS
// Slime (sludge with a different sprite) -----------------------------------
FState ASlimeChunk::States[] =
{
S_NORMAL (SLIM, 'A', 8, NULL, &States[1]),
S_NORMAL (SLIM, 'B', 8, NULL, &States[2]),
S_NORMAL (SLIM, 'C', 8, NULL, &States[3]),
S_NORMAL (SLIM, 'D', 8, NULL, NULL),
S_NORMAL (SLIM, 'D', 6, NULL, NULL)
};
IMPLEMENT_ACTOR (ASlimeChunk, Any, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_SpawnState (0)
PROP_DeathState (4)
END_DEFAULTS
FState ASlimeSplash::States[] =
{
S_NORMAL (SLIM, 'E', 6, NULL, &States[1]),
S_NORMAL (SLIM, 'F', 6, NULL, &States[2]),
S_NORMAL (SLIM, 'G', 6, NULL, &States[3]),
S_NORMAL (SLIM, 'H', 6, NULL, NULL)
};
IMPLEMENT_ACTOR (ASlimeSplash, Any, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_SpawnState (0)
END_DEFAULTS

View file

@ -1124,15 +1124,24 @@ void R_SetupFrame (AActor *actor)
fixedlightlev = player->fixedcolormap*256;
fixedcolormap = NormalLight.Maps;
}
else
else switch (player->fixedcolormap)
{
fixedcolormap = InvulnerabilityColormap;
case INVERSECOLORMAP:
fixedcolormap = InverseColormap;
break;
case GOLDCOLORMAP:
fixedcolormap = GoldColormap;
break;
default:
break;
}
}
// [RH] Inverse light for shooting the Sigil
else if (extralight == INT_MIN)
{
fixedcolormap = InvulnerabilityColormap;
fixedcolormap = InverseColormap;
extralight = 0;
}
@ -1419,7 +1428,7 @@ void R_RenderActorView (AActor *actor)
R_FindParticleSubsectors ();
clock (WallCycles);
WORD savedflags = camera->renderflags;
DWORD savedflags = camera->renderflags;
// Never draw the player unless in chasecam mode
if (!r_showviewer)
{

View file

@ -86,6 +86,8 @@ extern int r_Yaspect;
// Number of diminishing brightness levels.
// There a 0-31, i.e. 32 LUT in the COLORMAP lump.
#define NUMCOLORMAPS 32
#define INVERSECOLORMAP 32
#define GOLDCOLORMAP 33
// The size of a single colormap, in bits
#define COLORMAPSHIFT 8

View file

@ -1824,7 +1824,7 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
yscale = decal->ScaleY;
WallSpriteTile = TexMan(decal->PicNum);
flipx = decal->RenderFlags & RF_XFLIP;
flipx = (byte)(decal->RenderFlags & RF_XFLIP);
if (WallSpriteTile->UseType == FTexture::TEX_Null)
{

View file

@ -836,7 +836,7 @@ void SC_RestoreScriptState()
sc_Crossed = ss.sc_Crossed;
sc_FileScripts = ss.sc_FileScripts;
ScriptName = *ss.ScriptName;
delete ss.ScriptName;
::delete ss.ScriptName;
ScriptBuffer = ss.ScriptBuffer;
ScriptPtr = ss.ScriptPtr;
ScriptEndPtr = ss.ScriptEndPtr;

View file

@ -225,6 +225,7 @@ static flagdef ActorFlags[]=
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
DEFINE_FLAG2(FX_ROCKET, ROCKETTRAIL, AActor, effects),
DEFINE_FLAG2(FX_GRENADE, GRENADETRAIL, AActor, effects),
DEFINE_FLAG(RF, INVISIBLE, AActor, renderflags),
};
static flagdef InventoryFlags[] =
@ -239,6 +240,7 @@ static flagdef InventoryFlags[] =
DEFINE_FLAG(IF, PICKUPFLASH, AInventory, ItemFlags),
DEFINE_FLAG(IF, ALWAYSPICKUP, AInventory, ItemFlags),
DEFINE_FLAG(IF, FANCYPICKUPSOUND, AInventory, ItemFlags),
DEFINE_FLAG(IF, BIGPOWERUP, AInventory, ItemFlags),
};
static flagdef WeaponFlags[] =
@ -496,6 +498,7 @@ ACTOR(DualPainAttack)
ACTOR(GiveToTarget)
ACTOR(TakeFromTarget)
ACTOR(JumpIfInTargetInventory)
ACTOR(CountdownArg)
#include "d_dehackedactions.h"
@ -679,6 +682,7 @@ AFuncDesc AFTable[]=
FUNC(A_JumpIfInTargetInventory, "MXL" )
FUNC(A_GiveToTarget, "Mx" )
FUNC(A_TakeFromTarget, "Mx" )
FUNC(A_CountdownArg, "X")
};
//==========================================================================
@ -2502,8 +2506,15 @@ static void ActorRenderStyle (AActor *defaults, Baggage &bag)
//==========================================================================
static void ActorAlpha (AActor *defaults, Baggage &bag)
{
SC_MustGetFloat();
defaults->alpha=fixed_t(sc_Float*FRACUNIT);
if (SC_CheckString("DEFAULT"))
{
defaults->alpha = gameinfo.gametype==GAME_Heretic? HR_SHADOW : HX_SHADOW;
}
else
{
SC_MustGetFloat();
defaults->alpha=fixed_t(sc_Float*FRACUNIT);
}
}
//==========================================================================
@ -2955,7 +2966,18 @@ static void InventoryDefMaxAmount (AInventory *defaults, Baggage &bag)
//==========================================================================
static void InventoryPickupmsg (AInventory *defaults, Baggage &bag)
{
// allow game specific pickup messages
const char * games[] = {"Doom", "Heretic", "Hexen", "Raven", "Strife", NULL};
int gamemode[]={GAME_Doom, GAME_Heretic, GAME_Hexen, GAME_Raven, GAME_Strife};
SC_MustGetString();
int game = SC_MatchString(games);
if (game!=-1)
{
SC_MustGetString();
if (!(gameinfo.gametype&gamemode[game])) return;
}
bag.Info->Class->Meta.SetMetaString(AIMETA_PickupMessage, sc_String);
}
@ -3167,6 +3189,18 @@ static void PowerupColor (APowerupGiver *defaults, Baggage &bag)
else
{
SC_MustGetString();
if (SC_Compare("INVERSEMAP"))
{
defaults->BlendColor = INVERSECOLOR;
return;
}
else if (SC_Compare("GOLDMAP"))
{
defaults->BlendColor = GOLDCOLOR;
return;
}
int c = V_GetColor(NULL, sc_String);
r=RPART(c);
g=GPART(c);
@ -3175,7 +3209,8 @@ static void PowerupColor (APowerupGiver *defaults, Baggage &bag)
SC_MustGetFloat();
alpha=int(sc_Float*255);
alpha=clamp<int>(alpha, 0, 255);
defaults->BlendColor = MAKEARGB(alpha, r, g, b);
if (alpha!=0) defaults->BlendColor = MAKEARGB(alpha, r, g, b);
else defaults->BlendColor = 0;
}
//==========================================================================

View file

@ -1373,6 +1373,7 @@ void A_DoChase(AActor * actor, bool fastchase, FState * meleestate, FState * mis
void A_ExtChase(AActor * self)
{
int index=CheckIndex(4, &CallingState);
if (index<0) return;
A_DoChase(self, false,
EvalExpressionI (StateParameters[index], self) ? self->MeleeState:NULL,
@ -1390,6 +1391,7 @@ void A_ExtChase(AActor * self)
void A_Jiggle(AActor * self)
{
int index=CheckIndex(2, &CallingState);
if (index<0) return;
int xmax = EvalExpressionI (StateParameters[index], self);
int ymax = EvalExpressionI (StateParameters[index+1], self);
@ -1412,6 +1414,7 @@ void A_Jiggle(AActor * self)
void A_DropInventory(AActor * self)
{
int index=CheckIndex(1, &CallingState);
if (index<0) return;
const TypeInfo * ti = TypeInfo::FindType((const char*)StateParameters[index]);
if (ti)
{
@ -1432,6 +1435,7 @@ void A_DropInventory(AActor * self)
void A_SetBlend(AActor * self)
{
int index=CheckIndex(3);
if (index<0) return;
PalEntry color = StateParameters[index];
float alpha = clamp<float> (EvalExpressionF (StateParameters[index+1], self), 0, 1);
int tics = EvalExpressionI (StateParameters[index+2], self);
@ -1455,6 +1459,7 @@ void A_JumpIf(AActor * self)
{
FState * CallingState;
int index=CheckIndex(2, &CallingState);
if (index<0) return;
int expression = EvalExpressionI (StateParameters[index], self);
if (index>=0 && expression) DoJump(self, CallingState, StateParameters[index+1]);
@ -1492,3 +1497,22 @@ void A_KillChildren(AActor * self)
}
}
//===========================================================================
//
// A_CountdownArg
//
//===========================================================================
void A_CountdownArg(AActor * self)
{
int index=CheckIndex(1);
if (index<0) return;
index = EvalExpressionI (StateParameters[index], self);
if (index<=0 || index>5) return;
if (!self->args[index]--)
{
self->SetState(self->DeathState);
}
}

View file

@ -59,7 +59,8 @@ extern "C" {
FDynamicColormap NormalLight;
}
FPalette GPalette;
BYTE *InvulnerabilityColormap;
BYTE *InverseColormap;
BYTE *GoldColormap;
int Near255;
FColorMatcher ColorMatcher;
@ -384,35 +385,34 @@ void InitPalette ()
NormalLight.Color = PalEntry (255, 255, 255);
NormalLight.Fade = 0;
InvulnerabilityColormap = new BYTE[NUMCOLORMAPS*256];
// build special maps (e.g. invulnerability)
shade = InvulnerabilityColormap;
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
{ // Doom invulnerability is an inverted grayscale
// Strife uses it when firing the Sigil
int grayint;
for (c = 0; c < 256; c++)
{
grayint = (65535 -
(GPalette.BaseColors[c].r * 77 +
GPalette.BaseColors[c].g * 143 +
GPalette.BaseColors[c].b * 37)) >> 8;
*shade++ = ColorMatcher.Pick (grayint, grayint, grayint);
}
}
else
{ // Heretic invulnerability is a golden shade
int intensity;
int intensity;
for (c = 0; c < 256; c++)
{
intensity = GPalette.BaseColors[c].r * 77 +
GPalette.BaseColors[c].g * 143 +
GPalette.BaseColors[c].b * 37;
*shade++ = ColorMatcher.Pick (
MIN (255, (intensity+intensity/2)>>8), intensity>>8, 0);
}
// Doom invulnerability is an inverted grayscale
// Strife uses it when firing the Sigil
InverseColormap = new BYTE[NUMCOLORMAPS*256];
shade = InverseColormap;
for (c = 0; c < 256; c++)
{
intensity = (65535 -
(GPalette.BaseColors[c].r * 77 +
GPalette.BaseColors[c].g * 143 +
GPalette.BaseColors[c].b * 37)) >> 8;
*shade++ = ColorMatcher.Pick (intensity, intensity, intensity);
}
// Heretic invulnerability is a golden shade
GoldColormap = new BYTE[NUMCOLORMAPS*256];
shade = GoldColormap;
for (c = 0; c < 256; c++)
{
intensity = GPalette.BaseColors[c].r * 77 +
GPalette.BaseColors[c].g * 143 +
GPalette.BaseColors[c].b * 37;
*shade++ = ColorMatcher.Pick (
MIN (255, (intensity+intensity/2)>>8), intensity>>8, 0);
}
}

View file

@ -77,7 +77,8 @@ struct FDynamicColormap
FDynamicColormap *Next;
};
extern BYTE *InvulnerabilityColormap;
extern BYTE *InverseColormap;
extern BYTE *GoldColormap;
extern FPalette GPalette;
extern "C" {
extern FDynamicColormap NormalLight;

View file

@ -1,5 +1,17 @@
#include "actors/shared/debris.txt"
#include "actors/shared/splashes.txt"
#include "actors/doom/doomarmor.txt"
#include "actors/doom/doomartifacts.txt"
#include "actors/doom/doomkeys.txt"
#include "actors/doom/doomdecorations.txt"
#include "actors/raven/ravenartifacts.txt"
#include "actors/raven/ravenhealth.txt"
#include "actors/heretic/hereticarmor.txt"
#include "actors/heretic/hereticartifacts.txt"
#include "actors/heretic/heretickeys.txt"
#include "actors/heretic/hereticdecorations.txt"
#include "actors/hexen/flame.txt"

View file

@ -0,0 +1,127 @@
// Invulnerability Sphere ---------------------------------------------------
ACTOR InvulnerabilitySphere : PowerupGiver 2022
{
Game Doom
SpawnID 133
+COUNTITEM
+INVENTORY.AUTOACTIVATE
+INVENTORY.ALWAYSPICKUP
+INVENTORY.BIGPOWERUP
Inventory.MaxAmount 0
Powerup.Type Invulnerable
Powerup.Color InverseMap
Inventory.PickupMessage "$GOTINVUL"
States
{
Spawn:
PINV ABCD 6 Bright
Loop
}
}
// Soulsphere --------------------------------------------------------------
ACTOR Soulsphere : Health 2013
{
Game Doom
SpawnID 25
+COUNTITEM
+INVENTORY.AUTOACTIVATE
+INVENTORY.ALWAYSPICKUP
+INVENTORY.FANCYPICKUPSOUND
Inventory.Amount 100
Inventory.MaxAmount 200
Inventory.PickupMessage "$GOTSUPER"
Inventory.PickupSound "misc/p_pkup"
States
{
Spawn:
SOUL ABCDCB 6 Bright
Loop
}
}
// Invisibility -------------------------------------------------------------
ACTOR BlurSphere : PowerupGiver 2024
{
Game Doom
SpawnID 135
+COUNTITEM
+VISIBILITYPULSE
+INVENTORY.AUTOACTIVATE
+INVENTORY.ALWAYSPICKUP
+INVENTORY.BIGPOWERUP
Inventory.MaxAmount 0
Powerup.Type Invisibility
RenderStyle Translucent
Inventory.PickupMessage "$GOTINVIS"
States
{
Spawn:
PINS ABCD 6 Bright
Loop
}
}
// Radiation suit (aka iron feet) -------------------------------------------
ACTOR RadSuit : PowerupGiver 2025
{
Game Doom
SpawnID 136
Height 46
+INVENTORY.AUTOACTIVATE
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
Powerup.Type IronFeet
States
{
Spawn:
SUIT A -1 Bright
Stop
}
}
// infrared -----------------------------------------------------------------
ACTOR Infrared : PowerupGiver 2045
{
Game Doom
SpawnID 138
+COUNTITEM
+INVENTORY.AUTOACTIVATE
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
Powerup.Type LightAmp
Inventory.PickupMessage "$GOTVISOR"
States
{
Spawn:
PVIS A 6 Bright
PVIS B 6
Loop
}
}
// Allmap -------------------------------------------------------------------
ACTOR Allmap : MapRevealer 2026
{
Game Doom
SpawnID 137
+COUNTITEM
+INVENTORY.FANCYPICKUPSOUND
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
Inventory.PickupSound "misc/p_pkup"
Inventory.PickupMessage "$GOTMAP"
States
{
Spawn:
PMAP ABCDCB 6 Bright
Loop
}
}

View file

@ -688,7 +688,7 @@ ACTOR HangTSkull 76
// Hanging from top without a brain ----------------------------------------
ACTOR AHangTNoBrain 78
ACTOR HangTNoBrain 78
{
Game Doom
Radius 16

View file

@ -0,0 +1,39 @@
// Silver Shield (Shield1) --------------------------------------------------
Actor SilverShield : BasicArmorPickup 85
{
Game Heretic
SpawnID 68
+FLOATBOB
Inventory.Pickupmessage "$TXT_ITEMSHIELD1"
Inventory.Icon "SHLDA0"
Armor.Savepercent 50
Armor.Saveamount 100
States
{
Spawn:
SHLD A -1
stop
}
}
// Enchanted shield (Shield2) -----------------------------------------------
Actor EnchantedShield : BasicArmorPickup 31
{
Game Heretic
SpawnID 69
+FLOATBOB
Inventory.Pickupmessage "$TXT_ITEMSHIELD2"
Inventory.Icon "SHD2A0"
Armor.Savepercent 75
Armor.Saveamount 200
States
{
Spawn:
SHD2 A -1
stop
}
}

View file

@ -0,0 +1,44 @@
// Super map ----------------------------------------------------------------
ACTOR SuperMap : MapRevealer 35
{
Game Heretic
SpawnID 137
+COUNTITEM
+INVENTORY.ALWAYSPICKUP
+FLOATBOB
Inventory.MaxAmount 0
Inventory.PickupMessage "$TXT_ITEMSUPERMAP"
States
{
Spawn:
SPMP A -1
Stop
}
}
// Invisibility -------------------------------------------------------------
ACTOR ArtiInvisibility : PowerupGiver 75
{
Game Heretic
SpawnID 135
+COUNTITEM
+FLOATBOB
+INVENTORY.PICKUPFLASH
RenderStyle Translucent
Alpha 0.4
Inventory.RespawnTics 4230
Inventory.Icon ARTIINVS
Powerup.Type Ghost
Inventory.PickupMessage "$TXT_ARTIINVISIBILITY"
States
{
Spawn:
INVS A 350 Bright
Loop
}
}

View file

@ -0,0 +1,54 @@
ACTOR HereticKey : Key
{
+NOTDMATCH
Radius 20
Height 16
}
// Green key ------------------------------------------------------------
ACTOR KeyGreen : HereticKey 73
{
Game Heretic
SpawnID 86
Inventory.PickupMessage "$TXT_GOTGREENKEY"
States
{
Spawn:
AKYY ABCDEFGHIJ 3 Bright
Loop
}
}
// Blue key -----------------------------------------------------------------
ACTOR KeyBlue : HereticKey 79
{
Game Heretic
SpawnID 85
Inventory.PickupMessage "$TXT_GOTBLUEKEY"
States
{
Spawn:
BKYY ABCDEFGHIJ 3 Bright
Loop
}
}
// Yellow key ---------------------------------------------------------------
ACTOR KeyYellow : HereticKey 80
{
Game Heretic
SpawnID 87
Inventory.PickupMessage "$TXT_GOTYELLOWKEY"
States
{
Spawn:
CKYY ABCDEFGHI 3 Bright
Loop
}
}

View file

@ -0,0 +1,116 @@
// Temp Small Flame --------------------------------------------------------
ACTOR AFlameSmallTemp 10500
{
Game Hexen
SpawnID 96
+NOTELEPORT
RenderStyle Add
States
{
Spawn:
FFSM AB 3 Bright
FFSM C 2 Bright A_CountdownArg(1)
FFSM C 2 Bright
FFSM D 3 Bright
FFSM E 3 Bright A_CountdownArg(1)
Loop
}
}
// Temp Large Flame ---------------------------------------------------------
ACTOR AFlameLargeTemp 10502
{
Game Hexen
SpawnID 98
+NOTELEPORT
RenderStyle Add
States
{
Spawn:
FFLG A 4 Bright
FFLG B 4 Bright A_CountdownArg(1)
FFLG C 4 Bright
FFLG D 4 Bright A_CountdownArg(1)
FFLG E 4 Bright
FFLG F 4 Bright A_CountdownArg(1)
FFLG G 4 Bright
FFLG H 4 Bright A_CountdownArg(1)
FFLG I 4 Bright
FFLG J 4 Bright A_CountdownArg(1)
FFLG K 4 Bright
FFLG L 4 Bright A_CountdownArg(1)
FFLG M 4 Bright
FFLG N 4 Bright A_CountdownArg(1)
FFLG O 4 Bright
FFLG P 4 Bright A_CountdownArg(1)
Goto Spawn+4
}
}
// Small Flame --------------------------------------------------------------
ACTOR FlameSmall : SwitchableDecoration 10501
{
Game Hexen
SpawnID 97
+NOTELEPORT
+INVISIBLE
RenderStyle Add
States
{
Active:
FFSM A 0 Bright A_PlaySound("Ignite")
Spawn:
FFSM A 3 Bright
FFSM A 3 Bright A_UnHideThing
FFSM ABCDE 3 Bright
Goto Spawn+2
Inactive:
FFSM A 2
FFSM B 2 A_HideThing
FFSM C 200
Wait
}
}
ACTOR FlameSmall2 : FlameSmall
{
Game Hexen
SpawnID 66
}
// Large Flame --------------------------------------------------------------
ACTOR FlameLarge : SwitchableDecoration 10503
{
Game Hexen
SpawnID 99
+NOTELEPORT
+INVISIBLE
RenderStyle Add
States
{
Active:
FFLG A 0 Bright A_PlaySound("Ignite")
Spawn:
FFLG A 2 Bright
FFLG A 2 Bright A_UnHideThing
FFLG ABCDEFGHIJKLMNOP 4 Bright
Goto Spawn+6
Inactive:
FFLG DCB 2
FFLG A 2 A_HideThing
FFLG A 200
Wait
}
}
ACTOR FlameLarge2 : FlameLarge
{
Game Hexen
SpawnID 67
}

View file

@ -0,0 +1 @@
//

View file

@ -0,0 +1 @@
//

View file

@ -0,0 +1 @@
//

View file

@ -0,0 +1 @@
//

View file

@ -0,0 +1 @@
//

View file

@ -0,0 +1 @@
//

View file

@ -0,0 +1 @@
//

View file

@ -0,0 +1,108 @@
// Health -------------------------------------------------------------------
ACTOR ArtiHealth : HealthPickup 82
{
Game Raven
SpawnID 24
Health 25
+COUNTITEM
+FLOATBOB
+INVENTORY.PICKUPFLASH
+INVENTORY.FANCYPICKUPSOUND
Inventory.Icon ARTIPTN2
Inventory.PickupSound "misc/p_pkup"
Inventory.PickupMessage "$TXT_ARTIHEALTH"
States
{
Spawn:
PTN2 ABC 4
Loop
}
}
// Super health -------------------------------------------------------------
ACTOR ArtiSuperHealth : HealthPickup 32
{
Game Raven
SpawnID 25
Health 100
+COUNTITEM
+FLOATBOB
+INVENTORY.PICKUPFLASH
+INVENTORY.FANCYPICKUPSOUND
Inventory.Icon ARTISPHL
Inventory.PickupSound "misc/p_pkup"
Inventory.PickupMessage "$TXT_ARTISUPERHEALTH"
States
{
Spawn:
SPHL A 350
Loop
}
}
// Flight -------------------------------------------------------------------
ACTOR ArtiFly : PowerupGiver 83
{
Game Raven
SpawnID 15
+COUNTITEM
+FLOATBOB
+INVENTORY.PICKUPFLASH
+INVENTORY.INTERHUBSTRIP
Inventory.RespawnTics 4230
Inventory.Icon ARTISOAR
Inventory.PickupMessage "$TXT_ARTIFLY"
Powerup.Type Flight
States
{
Spawn:
SOAR ABCB 5
Loop
}
}
// Invulnerability ----------------------------------------------------------
ACTOR ArtiInvulnerability : PowerupGiver 84
{
Game Raven
SpawnID 133
+COUNTITEM
+FLOATBOB
+INVENTORY.PICKUPFLASH
Inventory.RespawnTics 4230
Inventory.Icon ARTIINVU
Inventory.PickupMessage "$TXT_ARTIINVULNERABILITY"
Inventory.PickupMessage Hexen "$TXT_ARTIINVULNERABILITY2"
Powerup.Type Invulnerable
States
{
Spawn:
INVU ABCD 3
Loop
}
}
// Torch --------------------------------------------------------------------
ACTOR ArtiTorch : PowerupGiver 33
{
Game Raven
SpawnID 73
+COUNTITEM
+FLOATBOB
+INVENTORY.PICKUPFLASH
Inventory.Icon ARTITRCH
Inventory.PickupMessage "$TXT_ARTITORCH"
Powerup.Type Torch
States
{
Spawn:
TRCH ABC 3 Bright
Loop
}
}

View file

@ -0,0 +1,15 @@
ACTOR CrystalVial : Health 81
{
Game Raven
SpawnID 23
+FLOATBOB
Inventory.Amount 10
Inventory.PickupMessage "$TXT_ITEMHEALTH"
States
{
Spawn:
PTN1 ABC 3
Loop
}
}

View file

@ -0,0 +1,362 @@
// Rocks --------------------------------------------------------------------
ACTOR Rock1
{
SpawnID 41
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK A 20
Loop
Death:
ROKK A 10
Stop
}
}
ACTOR Rock2
{
SpawnID 42
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK B 20
Loop
Death:
ROKK B 10
Stop
}
}
ACTOR Rock3
{
SpawnID 43
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK C 20
Loop
Death:
ROKK C 10
Stop
}
}
// Dirt --------------------------------------------------------------------
ACTOR Dirt1
{
SpawnID 44
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK D 20
Loop
Death:
ROKK D 10
Stop
}
}
ACTOR Dirt2
{
SpawnID 45
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK E 20
Loop
Death:
ROKK E 10
Stop
}
}
ACTOR Dirt3
{
SpawnID 46
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK F 20
Loop
Death:
ROKK F 10
Stop
}
}
ACTOR Dirt4
{
SpawnID 47
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK G 20
Loop
Death:
ROKK G 10
Stop
}
}
ACTOR Dirt5
{
SpawnID 48
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK H 20
Loop
Death:
ROKK H 10
Stop
}
}
ACTOR Dirt6
{
SpawnID 49
+NOBLOCKMAP
+DROPOFF
+MISSILE
+NOTELEPORT
States
{
Spawn:
ROKK I 20
Loop
Death:
ROKK I 10
Stop
}
}
// Stained glass ------------------------------------------------------------
ACTOR SGShard1 : GlassShard
{
SpawnID 54
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSA ABCDE 4
Loop
Death:
SGSA E 30
Stop
}
}
ACTOR SGShard2 : GlassShard
{
SpawnID 55
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSA FGHIJ 4
Loop
Death:
SGSA J 30
Stop
}
}
ACTOR SGShard3 : GlassShard
{
SpawnID 56
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSA KLMNO 4
Loop
Death:
SGSA O 30
Stop
}
}
ACTOR SGShard4 : GlassShard
{
SpawnID 57
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSA PQRST 4
Loop
Death:
SGSA T 30
Stop
}
}
ACTOR SGShard5 : GlassShard
{
SpawnID 58
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSA UVWXY 4
Loop
Death:
SGSA Y 30
Stop
}
}
ACTOR SGShard6 : GlassShard
{
SpawnID 59
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSB A 4
Loop
Death:
SGSB A 30
Stop
}
}
ACTOR SGShard7 : GlassShard
{
SpawnID 60
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSB B 4
Loop
Death:
SGSB B 30
Stop
}
}
ACTOR SGShard8 : GlassShard
{
SpawnID 61
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSB C 4
Loop
Death:
SGSB C 30
Stop
}
}
ACTOR SGShard9 : GlassShard
{
SpawnID 62
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSB D 4
Loop
Death:
SGSB D 30
Stop
}
}
ACTOR SGShard0 : GlassShard
{
SpawnID 63
Radius 5
Projectile
-ACTIVATEMCROSS
-ACTIVATEIMPACT
BounceFactor 0.3
States
{
Spawn:
SGSB E 4
Loop
Death:
SGSB E 30
Stop
}
}

View file

@ -0,0 +1,199 @@
// Water --------------------------------------------------------------------
ACTOR WaterSplash
{
Radius 2
Height 4
+NOBLOCKMAP
+MISSILE
+DROPOFF
+NOTELEPORT
+LOWGRAVITY
+CANNOTPUSH
+DONTSPLASH
+DONTBLAST
States
{
Spawn:
SPSH ABC 8
SPSH D 16
Stop
Death:
SPSH D 10
Stop
}
}
ACTOR WaterSplashBase
{
+NOBLOCKMAP
+NOCLIP
+NOGRAVITY
+DONTSPLASH
+DONTBLAST
States
{
Spawn:
SPSH EFGHIJK 5
Stop
}
}
// Lava ---------------------------------------------------------------------
ACTOR LavaSplash
{
+NOBLOCKMAP
+NOCLIP
+NOGRAVITY
+DONTSPLASH
+DONTBLAST
States
{
Spawn:
LVAS ABCDEF 5 Bright
Stop
}
}
ACTOR LavaSmoke
{
+NOBLOCKMAP
+NOCLIP
+NOGRAVITY
+DONTSPLASH
RenderStyle Translucent
Alpha Default
States
{
Spawn:
LVAS GHIJK 5 Bright
Stop
}
}
// Sludge -------------------------------------------------------------------
ACTOR SludgeChunk
{
Radius 2
Height 4
+NOBLOCKMAP
+MISSILE
+DROPOFF
+NOTELEPORT
+LOWGRAVITY
+CANNOTPUSH
+DONTSPLASH
States
{
Spawn:
SLDG ABCD 8
Stop
Death:
SLDG D 6
Stop
}
}
ACTOR SludgeSplash
{
+NOBLOCKMAP
+NOCLIP
+NOGRAVITY
+DONTSPLASH
States
{
Spawn:
SLDG EFGH 6
Stop
}
}
/*
* These next four classes are not used by me anywhere.
* They are for people who want to use them in a TERRAIN lump.
*/
// Blood (water with a different sprite) ------------------------------------
ACTOR BloodSplash
{
Radius 2
Height 4
+NOBLOCKMAP
+MISSILE
+DROPOFF
+NOTELEPORT
+LOWGRAVITY
+CANNOTPUSH
+DONTSPLASH
+DONTBLAST
States
{
Spawn:
BSPH ABC 8
BSPH D 16
Stop
Death:
BSPH D 10
Stop
}
}
ACTOR BloodSplashBase
{
+NOBLOCKMAP
+NOCLIP
+NOGRAVITY
+DONTSPLASH
+DONTBLAST
States
{
Spawn:
BSPH EFGHIJK 5
Stop
}
}
// Slime (sludge with a different sprite) -----------------------------------
ACTOR SlimeChunk
{
Radius 2
Height 4
+NOBLOCKMAP
+MISSILE
+DROPOFF
+NOTELEPORT
+LOWGRAVITY
+CANNOTPUSH
+DONTSPLASH
States
{
Spawn:
SLIM ABCD 8
Stop
Death:
SLIM D 6
Stop
}
}
ACTOR SlimeSplash
{
+NOBLOCKMAP
+NOCLIP
+NOGRAVITY
+DONTSPLASH
States
{
Spawn:
SLIM EFGH 6
Stop
}
}

View file

@ -241,6 +241,9 @@
<File
RelativePath=".\decorate\doom\doomarmor.txt">
</File>
<File
RelativePath=".\decorate\doom\doomartifacts.txt">
</File>
<File
RelativePath=".\decorate\doom\doomdecorations.txt">
</File>
@ -248,6 +251,74 @@
RelativePath=".\decorate\doom\doomkeys.txt">
</File>
</Filter>
<Filter
Name="Heretic"
Filter="">
<File
RelativePath=".\decorate\heretic\hereticarmor.txt">
</File>
<File
RelativePath=".\decorate\heretic\hereticartifacts.txt">
</File>
<File
RelativePath=".\decorate\heretic\hereticdecorations.txt">
</File>
<File
RelativePath=".\decorate\heretic\heretickeys.txt">
</File>
</Filter>
<Filter
Name="Hexen"
Filter="">
<File
RelativePath=".\decorate\hexen\flame.txt">
</File>
<File
RelativePath=".\decorate\hexen\hexenarmor.txt">
</File>
<File
RelativePath=".\decorate\hexen\hexendecorations.txt">
</File>
<File
RelativePath=".\decorate\hexen\hexenkeys.txt">
</File>
<File
RelativePath=".\decorate\hexen\hexenspecialdecs.txt">
</File>
<File
RelativePath=".\decorate\hexen\puzzleitems.txt">
</File>
<File
RelativePath=".\decorate\hexen\scriptprojectiles.txt">
</File>
<File
RelativePath=".\decorate\hexen\speedboots.txt">
</File>
</Filter>
<Filter
Name="Strife"
Filter="">
</Filter>
<Filter
Name="Raven"
Filter="">
<File
RelativePath=".\decorate\raven\ravenartifacts.txt">
</File>
<File
RelativePath=".\decorate\raven\ravenhealth.txt">
</File>
</Filter>
<Filter
Name="Shared"
Filter="">
<File
RelativePath=".\shared\debris.txt">
</File>
<File
RelativePath=".\decorate\shared\splashes.txt">
</File>
</Filter>
</Filter>
</Filter>
<File

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -178,13 +178,33 @@ strfinfo.txt mapinfo/strife.txt
acs/strfhelp.o strfhelp.o
========
========
# Decorate stuff
decorate.txt decorate/decorate.txt
actors/shared/debris.txt decorate/shared/debris.txt
actors/shared/splashes.txt decorate/shared/splashes.txt
actors/doom/doomarmor.txt decorate/doom/doomarmor.txt
actors/doom/doomartifacts.txt decorate/doom/doomartifacts.txt
actors/doom/doomkeys.txt decorate/doom/doomkeys.txt
actors/doom/doomdecorations.txt decorate/doom/doomdecorations.txt
actors/raven/ravenartifacts.txt decorate/raven/ravenartifacts.txt
actors/raven/ravenhealth.txt decorate/raven/ravenhealth.txt
actors/heretic/hereticarmor.txt decorate/heretic/hereticarmor.txt
actors/heretic/hereticartifacts.txt decorate/heretic/hereticartifacts.txt
actors/heretic/heretickeys.txt decorate/heretic/heretickeys.txt
actors/heretic/hereticdecorations.txt decorate/heretic/hereticdecorations.txt
actors/hexen/flame.txt decorate/hexen/flame.txt
actors/hexen/hexenarmor.txt decorate/hexen/hexenarmor.txt
actors/hexen/hexendecorations.txt decorate/hexen/hexendecorations.txt
actors/hexen/hexenkeys.txt decorate/hexen/hexenkeys.txt
actors/hexen/hexenspecialdecs.txt decorate/hexen/hexenspecialdecs.txt
actors/hexen/puzzleitems.txt decorate/hexen/puzzleitems.txt
actors/hexen/scriptprojectiles.txt decorate/hexen/scriptprojectiles.txt
actors/hexen/speedboots.txt decorate/hexen/speedboots.txt

View file

@ -2708,21 +2708,6 @@
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_shared\a_splashes.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_shared\a_waterzone.cpp">
<FileConfiguration
@ -3193,36 +3178,6 @@
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_raven\a_ravenartifacts.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_raven\a_ravenhealth.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_raven\ravenshared.h">
</File>
@ -3290,21 +3245,6 @@
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_heretic\a_hereticarmor.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_heretic\a_hereticartifacts.cpp">
<FileConfiguration
@ -3756,21 +3696,6 @@
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_hexen\a_flame.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="&quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; &quot; /I /fmod/api/inc&quot; "/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\g_hexen\a_flechette.cpp">
<FileConfiguration