mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-12 15:44:24 +00:00
063c85b157
with an FString now. - Fixed: The music strings in the default level info were never freed and caused memory leaks when used repeatedly. - Fixed: The intermusic string in the level info was never freed. - Fixed: The default fire obituary should only be printed if the damage came from the environment. If it comes from a monster the monster specific obituary should be used instead. - Added custom damage types from the floating point test release. - Changed Pain Elemental's massacre check. Now A_PainDie checks for the damage type and doesn't spawn anything if it is NAME_Massacre. A_PainDie can also be used by other actors so a more generalized approach is needed than hard coding it into the Pain Elemental. - Converted a few of Doom's monsters to DECORATE because I couldn't test the first version of the custom state code with the corpses inheriting from them. - Added custom states from last year's floating point test release and fixed some bugs I found in that code. Unfortunately it wasn't all salvageable and it was easier to recreate some parts from scratch. SVN r368 (trunk)
200 lines
4.3 KiB
C++
200 lines
4.3 KiB
C++
#ifndef __A_ARTIFACTS_H__
|
|
#define __A_ARTIFACTS_H__
|
|
|
|
#include "farchive.h"
|
|
#include "a_pickups.h"
|
|
|
|
#define INVERSECOLOR 0x00345678
|
|
#define GOLDCOLOR 0x009abcde
|
|
|
|
#define STREAM_ENUM(e) \
|
|
inline FArchive &operator<< (FArchive &arc, e &i) \
|
|
{ \
|
|
BYTE val = (BYTE)i; \
|
|
arc << val; \
|
|
i = (e)val; \
|
|
return arc; \
|
|
}
|
|
|
|
class player_s;
|
|
|
|
// A powerup is a pseudo-inventory item that applies an effect to its
|
|
// owner while it is present.
|
|
class APowerup : public AInventory
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerup, AInventory)
|
|
public:
|
|
virtual void Tick ();
|
|
virtual void Destroy ();
|
|
virtual bool HandlePickup (AInventory *item);
|
|
virtual AInventory *CreateCopy (AActor *other);
|
|
virtual AInventory *CreateTossable ();
|
|
virtual void Serialize (FArchive &arc);
|
|
virtual void OwnerDied ();
|
|
virtual PalEntry GetBlend ();
|
|
virtual bool DrawPowerup (int x, int y);
|
|
|
|
int EffectTics;
|
|
PalEntry BlendColor;
|
|
|
|
protected:
|
|
virtual void InitEffect ();
|
|
virtual void DoEffect ();
|
|
virtual void EndEffect ();
|
|
};
|
|
|
|
// An artifact is an item that gives the player a powerup when activated.
|
|
class APowerupGiver : public AInventory
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerupGiver, AInventory)
|
|
public:
|
|
virtual bool Use (bool pickup);
|
|
virtual void Serialize (FArchive &arc);
|
|
|
|
const PClass *PowerupType;
|
|
int EffectTics; // Non-0 to override the powerup's default tics
|
|
PalEntry BlendColor; // Non-0 to override the powerup's default blend
|
|
};
|
|
|
|
class APowerInvulnerable : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerInvulnerable, APowerup)
|
|
protected:
|
|
void InitEffect ();
|
|
void DoEffect ();
|
|
void EndEffect ();
|
|
void AlterWeaponSprite (vissprite_t *vis);
|
|
};
|
|
|
|
class APowerStrength : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerStrength, APowerup)
|
|
public:
|
|
PalEntry GetBlend ();
|
|
protected:
|
|
void InitEffect ();
|
|
void DoEffect ();
|
|
bool HandlePickup (AInventory *item);
|
|
};
|
|
|
|
class APowerInvisibility : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerInvisibility, APowerup)
|
|
protected:
|
|
void InitEffect ();
|
|
void EndEffect ();
|
|
void AlterWeaponSprite (vissprite_t *vis);
|
|
};
|
|
|
|
class APowerGhost : public APowerInvisibility
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerGhost, APowerInvisibility)
|
|
protected:
|
|
void InitEffect ();
|
|
};
|
|
|
|
class APowerShadow : public APowerInvisibility
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerShadow, APowerInvisibility)
|
|
protected:
|
|
void InitEffect ();
|
|
};
|
|
|
|
class APowerIronFeet : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerIronFeet, APowerup)
|
|
public:
|
|
void AbsorbDamage (int damage, FName damageType, int &newdamage);
|
|
};
|
|
|
|
class APowerMask : public APowerIronFeet
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerMask, APowerIronFeet)
|
|
public:
|
|
void AbsorbDamage (int damage, FName damageType, int &newdamage);
|
|
void DoEffect ();
|
|
};
|
|
|
|
class APowerLightAmp : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerLightAmp, APowerup)
|
|
protected:
|
|
void DoEffect ();
|
|
void EndEffect ();
|
|
};
|
|
|
|
class APowerTorch : public APowerLightAmp
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerTorch, APowerLightAmp)
|
|
public:
|
|
void Serialize (FArchive &arc);
|
|
protected:
|
|
void DoEffect ();
|
|
int NewTorch, NewTorchDelta;
|
|
};
|
|
|
|
class APowerFlight : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerFlight, APowerup)
|
|
public:
|
|
bool DrawPowerup (int x, int y);
|
|
void Serialize (FArchive &arc);
|
|
|
|
protected:
|
|
void InitEffect ();
|
|
void DoEffect ();
|
|
void EndEffect ();
|
|
|
|
bool HitCenterFrame;
|
|
};
|
|
|
|
class APowerWeaponLevel2 : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerWeaponLevel2, APowerup)
|
|
protected:
|
|
void InitEffect ();
|
|
void EndEffect ();
|
|
};
|
|
|
|
class APowerSpeed : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerSpeed, APowerup)
|
|
protected:
|
|
void InitEffect ();
|
|
void DoEffect ();
|
|
void EndEffect ();
|
|
};
|
|
|
|
class APowerMinotaur : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerMinotaur, APowerup)
|
|
};
|
|
|
|
class APowerScanner : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerScanner, APowerup)
|
|
};
|
|
|
|
class APowerTargeter : public APowerup
|
|
{
|
|
DECLARE_ACTOR (APowerTargeter, APowerup)
|
|
protected:
|
|
void InitEffect ();
|
|
void DoEffect ();
|
|
void EndEffect ();
|
|
void PositionAccuracy ();
|
|
void Travelled ();
|
|
};
|
|
|
|
class APowerFrightener : public APowerup
|
|
{
|
|
DECLARE_STATELESS_ACTOR (APowerFrightener, APowerup)
|
|
protected:
|
|
void InitEffect ();
|
|
void EndEffect ();
|
|
};
|
|
|
|
|
|
class player_s;
|
|
|
|
#endif //__A_ARTIFACTS_H__
|