diff --git a/default.cbd b/default.cbd index 55d477e79..b32f4102b 100644 --- a/default.cbd +++ b/default.cbd @@ -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 \ diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 7eeb37833..b9d01f3b5 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -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. diff --git a/src/actor.h b/src/actor.h index 48f898c8b..2c6a6123d 100644 --- a/src/actor.h +++ b/src/actor.h @@ -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 diff --git a/src/c_cmds.cpp b/src/c_cmds.cpp index cc0c26507..23c21d995 100644 --- a/src/c_cmds.cpp +++ b/src/c_cmds.cpp @@ -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); } /* diff --git a/src/d_dehacked.cpp b/src/d_dehacked.cpp index db5c29437..ac4cd1bf2 100644 --- a/src/d_dehacked.cpp +++ b/src/d_dehacked.cpp @@ -1628,19 +1628,38 @@ static int PatchMisc (int dummy) ABasicArmorPickup *armor; armor = static_cast (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 (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 (GetDefaultByName ("ArmorBonus")); - barmor->MaxSaveAmount = deh.MaxArmor; + if (barmor!=NULL) + { + barmor->MaxSaveAmount = deh.MaxArmor; + } AHealth *health; health = static_cast (GetDefaultByName ("HealthBonus")); - if (deh.MaxHealth != -1) health->MaxAmount = deh.MaxHealth; + if (deh.MaxHealth != -1 && health!=NULL) + { + health->MaxAmount = deh.MaxHealth; + } + + health = static_cast (GetDefaultByName ("Soulsphere")); + if (health!=NULL) + { + health->Amount = deh.SoulsphereHealth; + health->MaxAmount = deh.MaxSoulsphere; + } // 0xDD means "enable infighting" if (infighting == 0xDD) diff --git a/src/d_main.cpp b/src/d_main.cpp index 503d09144..79556b44e 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -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; } //========================================================================== diff --git a/src/decallib.cpp b/src/decallib.cpp index bf53705c4..f6f9fa907 100644 --- a/src/decallib.cpp +++ b/src/decallib.cpp @@ -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) { diff --git a/src/g_doom/a_arachnotron.cpp b/src/g_doom/a_arachnotron.cpp index ae2f2fd53..27fb0ef1d 100644 --- a/src/g_doom/a_arachnotron.cpp +++ b/src/g_doom/a_arachnotron.cpp @@ -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 diff --git a/src/g_doom/a_doomartifacts.cpp b/src/g_doom/a_doomartifacts.cpp index 63673f5c5..308664dc9 100644 --- a/src/g_doom/a_doomartifacts.cpp +++ b/src/g_doom/a_doomartifacts.cpp @@ -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 diff --git a/src/g_doom/a_painelemental.cpp b/src/g_doom/a_painelemental.cpp index e397b36f9..f8ced5858 100644 --- a/src/g_doom/a_painelemental.cpp +++ b/src/g_doom/a_painelemental.cpp @@ -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; } diff --git a/src/g_game.cpp b/src/g_game.cpp index 1ae89f1e1..e8d76d5b8 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -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(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; } diff --git a/src/g_heretic/a_hereticarmor.cpp b/src/g_heretic/a_hereticarmor.cpp deleted file mode 100644 index 7052581d7..000000000 --- a/src/g_heretic/a_hereticarmor.cpp +++ /dev/null @@ -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 diff --git a/src/g_heretic/a_hereticartifacts.cpp b/src/g_heretic/a_hereticartifacts.cpp index efca9c302..4caf8ad54 100644 --- a/src/g_heretic/a_hereticartifacts.cpp +++ b/src/g_heretic/a_hereticartifacts.cpp @@ -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 diff --git a/src/g_heretic/a_heretickeys.cpp b/src/g_heretic/a_heretickeys.cpp index 3231bf369..c8f83bea6 100644 --- a/src/g_heretic/a_heretickeys.cpp +++ b/src/g_heretic/a_heretickeys.cpp @@ -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 ----------------------------------------------------------- diff --git a/src/g_heretic/a_hereticmisc.cpp b/src/g_heretic/a_hereticmisc.cpp index 0ffb03fba..ad543de0d 100644 --- a/src/g_heretic/a_hereticmisc.cpp +++ b/src/g_heretic/a_hereticmisc.cpp @@ -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 *); diff --git a/src/g_hexen/a_flame.cpp b/src/g_hexen/a_flame.cpp deleted file mode 100644 index 449c73ace..000000000 --- a/src/g_hexen/a_flame.cpp +++ /dev/null @@ -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 diff --git a/src/g_hexen/a_hexenspecialdecs.cpp b/src/g_hexen/a_hexenspecialdecs.cpp index 191a132d3..b0bd013da 100644 --- a/src/g_hexen/a_hexenspecialdecs.cpp +++ b/src/g_hexen/a_hexenspecialdecs.cpp @@ -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 ------------------------------------------------------------ diff --git a/src/g_raven/a_ravenartifacts.cpp b/src/g_raven/a_ravenartifacts.cpp deleted file mode 100644 index a11f36211..000000000 --- a/src/g_raven/a_ravenartifacts.cpp +++ /dev/null @@ -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"); -} diff --git a/src/g_raven/a_ravenhealth.cpp b/src/g_raven/a_ravenhealth.cpp deleted file mode 100644 index e58e49cee..000000000 --- a/src/g_raven/a_ravenhealth.cpp +++ /dev/null @@ -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 diff --git a/src/g_shared/a_artifacts.cpp b/src/g_shared/a_artifacts.cpp index 2bf099d5b..3f4721834 100644 --- a/src/g_shared/a_artifacts.cpp +++ b/src/g_shared/a_artifacts.cpp @@ -44,17 +44,18 @@ bool APowerupGiver::Use (bool pickup) { APowerup *power = static_cast (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(); + 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; - } - } } //=========================================================================== diff --git a/src/g_shared/a_artifacts.h b/src/g_shared/a_artifacts.h index cb2bb044d..24c6b6e49 100644 --- a/src/g_shared/a_artifacts.h +++ b/src/g_shared/a_artifacts.h @@ -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) \ { \ diff --git a/src/g_shared/a_debris.cpp b/src/g_shared/a_debris.cpp index 76a584d0f..2a7550d25 100644 --- a/src/g_shared/a_debris.cpp +++ b/src/g_shared/a_debris.cpp @@ -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; + } } } diff --git a/src/g_shared/a_keys.h b/src/g_shared/a_keys.h index 99ae97d14..df01b7a93 100644 --- a/src/g_shared/a_keys.h +++ b/src/g_shared/a_keys.h @@ -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) diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index 10cd7fd47..bd4ea65c0 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -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); } diff --git a/src/g_shared/a_pickups.h b/src/g_shared/a_pickups.h index 89e6ac9d6..2ee2adeb9 100644 --- a/src/g_shared/a_pickups.h +++ b/src/g_shared/a_pickups.h @@ -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; diff --git a/src/g_shared/a_sharedglobal.h b/src/g_shared/a_sharedglobal.h index 40ea81e3e..f992b6070 100644 --- a/src/g_shared/a_sharedglobal.h +++ b/src/g_shared/a_sharedglobal.h @@ -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) diff --git a/src/g_shared/a_splashes.cpp b/src/g_shared/a_splashes.cpp deleted file mode 100644 index 6e24826ac..000000000 --- a/src/g_shared/a_splashes.cpp +++ /dev/null @@ -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(); - 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 diff --git a/src/r_main.cpp b/src/r_main.cpp index 76f67bb1d..64f265218 100644 --- a/src/r_main.cpp +++ b/src/r_main.cpp @@ -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) { diff --git a/src/r_main.h b/src/r_main.h index f15ea0797..dbce68da2 100644 --- a/src/r_main.h +++ b/src/r_main.h @@ -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 diff --git a/src/r_segs.cpp b/src/r_segs.cpp index 93ca55c05..319b675d9 100644 --- a/src/r_segs.cpp +++ b/src/r_segs.cpp @@ -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) { diff --git a/src/sc_man.cpp b/src/sc_man.cpp index 1ce575d0c..60c0bfc7e 100644 --- a/src/sc_man.cpp +++ b/src/sc_man.cpp @@ -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; diff --git a/src/thingdef.cpp b/src/thingdef.cpp index 7954f5938..42e559e9d 100644 --- a/src/thingdef.cpp +++ b/src/thingdef.cpp @@ -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(alpha, 0, 255); - defaults->BlendColor = MAKEARGB(alpha, r, g, b); + if (alpha!=0) defaults->BlendColor = MAKEARGB(alpha, r, g, b); + else defaults->BlendColor = 0; } //========================================================================== diff --git a/src/thingdef_codeptr.cpp b/src/thingdef_codeptr.cpp index 1c4fd0c04..cf9d9f06d 100644 --- a/src/thingdef_codeptr.cpp +++ b/src/thingdef_codeptr.cpp @@ -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 (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); + } + +} + diff --git a/src/v_palette.cpp b/src/v_palette.cpp index ca4921fc0..4700dfd6d 100644 --- a/src/v_palette.cpp +++ b/src/v_palette.cpp @@ -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); } } diff --git a/src/v_palette.h b/src/v_palette.h index c103b2a96..ffa36a8a1 100644 --- a/src/v_palette.h +++ b/src/v_palette.h @@ -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; diff --git a/wadsrc/decorate/decorate.txt b/wadsrc/decorate/decorate.txt index db44a787b..cd7172355 100644 --- a/wadsrc/decorate/decorate.txt +++ b/wadsrc/decorate/decorate.txt @@ -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" diff --git a/wadsrc/decorate/doom/doomartifacts.txt b/wadsrc/decorate/doom/doomartifacts.txt new file mode 100644 index 000000000..4262d68e9 --- /dev/null +++ b/wadsrc/decorate/doom/doomartifacts.txt @@ -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 + } +} + diff --git a/wadsrc/decorate/doom/doomdecorations.txt b/wadsrc/decorate/doom/doomdecorations.txt index b31098ad2..4dcdc885f 100644 --- a/wadsrc/decorate/doom/doomdecorations.txt +++ b/wadsrc/decorate/doom/doomdecorations.txt @@ -688,7 +688,7 @@ ACTOR HangTSkull 76 // Hanging from top without a brain ---------------------------------------- -ACTOR AHangTNoBrain 78 +ACTOR HangTNoBrain 78 { Game Doom Radius 16 diff --git a/wadsrc/decorate/heretic/hereticarmor.txt b/wadsrc/decorate/heretic/hereticarmor.txt new file mode 100644 index 000000000..e027f4f47 --- /dev/null +++ b/wadsrc/decorate/heretic/hereticarmor.txt @@ -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 + } +} + diff --git a/wadsrc/decorate/heretic/hereticartifacts.txt b/wadsrc/decorate/heretic/hereticartifacts.txt new file mode 100644 index 000000000..04c7afee7 --- /dev/null +++ b/wadsrc/decorate/heretic/hereticartifacts.txt @@ -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 + } +} + + diff --git a/wadsrc/decorate/heretic/heretickeys.txt b/wadsrc/decorate/heretic/heretickeys.txt new file mode 100644 index 000000000..073fc3248 --- /dev/null +++ b/wadsrc/decorate/heretic/heretickeys.txt @@ -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 + } +} + + diff --git a/wadsrc/decorate/hexen/flame.txt b/wadsrc/decorate/hexen/flame.txt new file mode 100644 index 000000000..276e55768 --- /dev/null +++ b/wadsrc/decorate/hexen/flame.txt @@ -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 +} + diff --git a/wadsrc/decorate/hexen/hexenarmor.txt b/wadsrc/decorate/hexen/hexenarmor.txt new file mode 100644 index 000000000..2cf8925e9 --- /dev/null +++ b/wadsrc/decorate/hexen/hexenarmor.txt @@ -0,0 +1 @@ +// diff --git a/wadsrc/decorate/hexen/hexendecorations.txt b/wadsrc/decorate/hexen/hexendecorations.txt new file mode 100644 index 000000000..2cf8925e9 --- /dev/null +++ b/wadsrc/decorate/hexen/hexendecorations.txt @@ -0,0 +1 @@ +// diff --git a/wadsrc/decorate/hexen/hexenkeys.txt b/wadsrc/decorate/hexen/hexenkeys.txt new file mode 100644 index 000000000..2cf8925e9 --- /dev/null +++ b/wadsrc/decorate/hexen/hexenkeys.txt @@ -0,0 +1 @@ +// diff --git a/wadsrc/decorate/hexen/hexenspecialdecs.txt b/wadsrc/decorate/hexen/hexenspecialdecs.txt new file mode 100644 index 000000000..2cf8925e9 --- /dev/null +++ b/wadsrc/decorate/hexen/hexenspecialdecs.txt @@ -0,0 +1 @@ +// diff --git a/wadsrc/decorate/hexen/puzzleitems.txt b/wadsrc/decorate/hexen/puzzleitems.txt new file mode 100644 index 000000000..2cf8925e9 --- /dev/null +++ b/wadsrc/decorate/hexen/puzzleitems.txt @@ -0,0 +1 @@ +// diff --git a/wadsrc/decorate/hexen/scriptprojectiles.txt b/wadsrc/decorate/hexen/scriptprojectiles.txt new file mode 100644 index 000000000..2cf8925e9 --- /dev/null +++ b/wadsrc/decorate/hexen/scriptprojectiles.txt @@ -0,0 +1 @@ +// diff --git a/wadsrc/decorate/hexen/speedboots.txt b/wadsrc/decorate/hexen/speedboots.txt new file mode 100644 index 000000000..2cf8925e9 --- /dev/null +++ b/wadsrc/decorate/hexen/speedboots.txt @@ -0,0 +1 @@ +// diff --git a/wadsrc/decorate/raven/ravenartifacts.txt b/wadsrc/decorate/raven/ravenartifacts.txt new file mode 100644 index 000000000..05190bb6d --- /dev/null +++ b/wadsrc/decorate/raven/ravenartifacts.txt @@ -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 + } +} diff --git a/wadsrc/decorate/raven/ravenhealth.txt b/wadsrc/decorate/raven/ravenhealth.txt new file mode 100644 index 000000000..af951be1b --- /dev/null +++ b/wadsrc/decorate/raven/ravenhealth.txt @@ -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 + } +} + diff --git a/wadsrc/decorate/shared/debris.txt b/wadsrc/decorate/shared/debris.txt new file mode 100644 index 000000000..7e788dd6e --- /dev/null +++ b/wadsrc/decorate/shared/debris.txt @@ -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 + } +} + diff --git a/wadsrc/decorate/shared/splashes.txt b/wadsrc/decorate/shared/splashes.txt new file mode 100644 index 000000000..f82cc80f0 --- /dev/null +++ b/wadsrc/decorate/shared/splashes.txt @@ -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 + } +} + diff --git a/wadsrc/wadsrc.vcproj b/wadsrc/wadsrc.vcproj index c0d6d9e1b..e5566e5aa 100644 --- a/wadsrc/wadsrc.vcproj +++ b/wadsrc/wadsrc.vcproj @@ -241,6 +241,9 @@ + + @@ -248,6 +251,74 @@ RelativePath=".\decorate\doom\doomkeys.txt"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - @@ -3290,21 +3245,6 @@ AdditionalOptions="" /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" "/> - - - - - - - - - - - - - - - -