2018-08-19 09:46:58 +02:00
|
|
|
#pragma once
|
2020-05-30 15:55:23 +02:00
|
|
|
#include "phd_global.h"
|
|
|
|
#include "items.h"
|
2018-08-19 09:46:58 +02:00
|
|
|
|
2020-05-30 15:55:23 +02:00
|
|
|
enum RIPPLE_TYPE
|
|
|
|
{
|
|
|
|
RIPPLE_FLAG_NONE = 0x0,
|
|
|
|
RIPPLE_FLAG_SHORT_LIFE = 0x1,
|
|
|
|
RIPPLE_FLAG_RAND_ROT = 0x20,
|
|
|
|
RIPPLE_FLAG_RAND_POS = 0x40,
|
2020-06-18 14:24:52 +02:00
|
|
|
RIPPLE_FLAG_BLOOD = 0x80,
|
|
|
|
RIPPLE_FLAG_LOW_OPACITY = 0x02
|
2020-05-30 15:55:23 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
enum SpriteEnumFlag
|
|
|
|
{
|
|
|
|
SP_NONE = 0x0000,
|
|
|
|
SP_FLAT = 0x0001,
|
|
|
|
SP_SCALE = 0x0002,
|
|
|
|
SP_BLOOD = 0x0004,
|
|
|
|
SP_DEF = 0x0008,
|
|
|
|
SP_ROTATE = 0x0010,
|
|
|
|
SP_EXPLOSION = 0x0020,
|
|
|
|
SP_FX = 0x0040,
|
|
|
|
SP_ITEM = 0x0080,
|
|
|
|
SP_WIND = 0x0100,
|
|
|
|
SP_EXPDEF = 0x0200,
|
|
|
|
SP_USEFXOBJPOS = 0x0400,
|
|
|
|
SP_UNDERWEXP = 0x0800,
|
|
|
|
SP_NODEATTACH = 0x1000,
|
|
|
|
SP_PLASMAEXP = 0x2000
|
|
|
|
};
|
|
|
|
|
|
|
|
enum TransTypeEnum
|
|
|
|
{
|
|
|
|
NOTRANS,
|
|
|
|
SEMITRANS,
|
|
|
|
COLADD,
|
|
|
|
COLSUB,
|
|
|
|
WEIRD
|
|
|
|
};
|
2020-03-29 17:41:34 +02:00
|
|
|
|
2020-05-30 15:55:23 +02:00
|
|
|
struct NODEOFFSET_INFO
|
|
|
|
{
|
|
|
|
short x;
|
|
|
|
short y;
|
|
|
|
short z;
|
|
|
|
char meshNum;
|
|
|
|
unsigned char gotIt;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct SPLASH_SETUP
|
|
|
|
{
|
|
|
|
float x;
|
|
|
|
float y;
|
|
|
|
float z;
|
|
|
|
float splashPower;
|
|
|
|
float innerRadius;
|
2020-06-16 19:13:41 +02:00
|
|
|
int room;
|
2020-05-30 15:55:23 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct RIPPLE_STRUCT
|
2020-03-29 17:41:34 +02:00
|
|
|
{
|
|
|
|
Vector4 currentColor;
|
|
|
|
Vector4 initialColor;
|
|
|
|
Vector3 worldPos;
|
|
|
|
unsigned int SpriteID;
|
|
|
|
float rotation;
|
|
|
|
float size;
|
|
|
|
float sizeRate;
|
|
|
|
float life; //max life
|
|
|
|
float lifeTime; // current life
|
|
|
|
float lifeRate; // life change rate
|
|
|
|
bool active;
|
|
|
|
bool isBillboard; //used for Blood
|
|
|
|
};
|
2019-12-02 09:11:21 +01:00
|
|
|
|
2020-05-30 15:55:23 +02:00
|
|
|
typedef struct SPARKS
|
|
|
|
{
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
int z;
|
|
|
|
short xVel;
|
|
|
|
short yVel;
|
|
|
|
short zVel;
|
|
|
|
short gravity;
|
|
|
|
short rotAng;
|
|
|
|
unsigned short flags; // SP_enum
|
|
|
|
unsigned char sSize;
|
|
|
|
unsigned char dSize;
|
|
|
|
unsigned char size;
|
|
|
|
unsigned char friction;
|
|
|
|
unsigned char scalar;
|
|
|
|
unsigned char def;
|
|
|
|
signed char rotAdd;
|
|
|
|
signed char maxYvel;
|
|
|
|
bool on;
|
|
|
|
byte sR;
|
|
|
|
byte sG;
|
|
|
|
byte sB;
|
|
|
|
byte dR;
|
|
|
|
byte dG;
|
|
|
|
byte dB;
|
|
|
|
byte r;
|
|
|
|
byte g;
|
|
|
|
byte b;
|
|
|
|
unsigned char colFadeSpeed;
|
|
|
|
unsigned char fadeToBlack;
|
|
|
|
unsigned char sLife;
|
|
|
|
unsigned char life;
|
|
|
|
TransTypeEnum transType;
|
|
|
|
unsigned char extras;
|
|
|
|
signed char dynamic;
|
|
|
|
unsigned char fxObj;
|
|
|
|
unsigned char roomNumber;
|
|
|
|
unsigned char nodeNumber;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct SPLASH_STRUCT
|
2020-03-29 17:41:34 +02:00
|
|
|
{
|
|
|
|
float x;
|
|
|
|
float y;
|
|
|
|
float z;
|
2020-05-30 15:55:23 +02:00
|
|
|
float innerRad;
|
|
|
|
float innerRadVel;
|
|
|
|
float heightVel;
|
|
|
|
float heightSpeed;
|
|
|
|
float height;
|
|
|
|
float outerRad;
|
|
|
|
float outerRadVel;
|
|
|
|
float animationSpeed;
|
|
|
|
float animationPhase;
|
|
|
|
short spriteSequenceStart;
|
|
|
|
short spriteSequenceEnd;
|
|
|
|
unsigned short life;
|
|
|
|
bool isRipple;
|
|
|
|
bool isActive;
|
2020-03-29 17:41:34 +02:00
|
|
|
};
|
2020-05-30 15:55:23 +02:00
|
|
|
|
|
|
|
typedef struct DYNAMIC
|
|
|
|
{
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
int z;
|
|
|
|
byte on;
|
|
|
|
byte r;
|
|
|
|
byte g;
|
|
|
|
byte b;
|
|
|
|
short falloff;
|
|
|
|
byte used;
|
|
|
|
byte pad1[1];
|
|
|
|
int FalloffScale;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct SP_DYNAMIC
|
|
|
|
{
|
|
|
|
byte On;
|
|
|
|
byte Falloff;
|
|
|
|
byte R;
|
|
|
|
byte G;
|
|
|
|
byte B;
|
|
|
|
byte Flags;
|
|
|
|
byte Pad[2];
|
|
|
|
};
|
|
|
|
|
|
|
|
constexpr auto SD_EXPLOSION = 1;
|
|
|
|
constexpr auto SD_UWEXPLOSION = 2;
|
|
|
|
|
|
|
|
#define MAX_NODE 23
|
|
|
|
#define MAX_DYNAMICS 64
|
|
|
|
#define MAX_SPARKS 1024
|
2020-06-18 14:24:52 +02:00
|
|
|
#define MAX_RIPPLES 256
|
2020-05-30 15:55:23 +02:00
|
|
|
#define MAX_SPLASHES 8
|
|
|
|
#define MAX_SPARKS_DYNAMICS 8
|
|
|
|
|
|
|
|
extern int NextSpark;
|
2019-12-22 00:20:10 +01:00
|
|
|
extern int DeadlyBounds[6];
|
|
|
|
extern SPLASH_SETUP SplashSetup;
|
2020-05-30 15:55:23 +02:00
|
|
|
extern SPLASH_STRUCT Splashes[MAX_SPLASHES];
|
|
|
|
extern RIPPLE_STRUCT Ripples[MAX_RIPPLES];
|
|
|
|
extern DYNAMIC Dynamics[MAX_DYNAMICS];
|
|
|
|
extern SPARKS Sparks[MAX_SPARKS];
|
|
|
|
extern SP_DYNAMIC SparkDynamics[MAX_SPARKS_DYNAMICS];
|
2019-12-22 00:20:10 +01:00
|
|
|
extern int SmokeWeapon;
|
2020-05-30 15:55:23 +02:00
|
|
|
extern byte SmokeCountL;
|
|
|
|
extern byte SmokeCountR;
|
|
|
|
extern int SplashCount;
|
2020-05-14 18:39:17 +02:00
|
|
|
extern PHD_VECTOR NodeVectors[MAX_NODE];
|
|
|
|
extern NODEOFFSET_INFO NodeOffsets[MAX_NODE];
|
2019-12-22 00:20:10 +01:00
|
|
|
|
2020-05-30 15:55:23 +02:00
|
|
|
void DetatchSpark(int num, SpriteEnumFlag type);
|
2019-12-22 00:20:10 +01:00
|
|
|
int GetFreeSpark();
|
|
|
|
void UpdateSparks();
|
|
|
|
void TriggerRicochetSpark(GAME_VECTOR* pos, short angle, int num, int unk);
|
|
|
|
void TriggerCyborgSpark(int x, int y, int z, short xv, short yv, short zv);
|
|
|
|
void TriggerExplosionSparks(int x, int y, int z, int extraTrig, int dynamic, int uw, int roomNumber);
|
|
|
|
void TriggerExplosionSmokeEnd(int x, int y, int z, int uw);
|
|
|
|
void TriggerExplosionSmoke(int x, int y, int z, int uw);
|
|
|
|
void TriggerFireFlame(int x, int y, int z, int fxObj, int type);
|
|
|
|
void TriggerSuperJetFlame(ITEM_INFO* item, int yvel, int deadly);
|
2020-06-16 19:13:41 +02:00
|
|
|
void SetupSplash(const SPLASH_SETUP* const setup,int room);
|
2019-12-22 00:20:10 +01:00
|
|
|
void UpdateSplashes();
|
|
|
|
void SetupRipple(int x, int y, int z, char size, char flags);
|
|
|
|
void TriggerUnderwaterBlood(int x, int y, int z, int sizeme);
|
|
|
|
void TriggerWaterfallMist(int x, int y, int z, int angle);
|
|
|
|
void TriggerDartSmoke(int x, int y, int z, int xv, int zv, int hit);
|
|
|
|
void KillAllCurrentItems(short itemNumber);
|
2019-12-02 14:49:19 +01:00
|
|
|
void TriggerDynamicLight(int x, int y, int z, short falloff, byte r, byte g, byte b);
|
2019-12-22 00:20:10 +01:00
|
|
|
void ClearDynamicLights();
|
2019-12-02 14:49:19 +01:00
|
|
|
void TriggerRocketFlame(int x, int y, int z, int xv, int yv, int zv, int itemNumber);
|
|
|
|
void TriggerRocketSmoke(int x, int y, int z, int bodyPart);
|
|
|
|
void GrenadeLauncherSpecialEffect1(int x, int y, int z, int flag1, int flag2);
|
|
|
|
void GrenadeExplosionEffects(int x, int y, int z, short roomNumber);
|
|
|
|
void TriggerMetalSparks(int x, int y, int z, int xv, int yv, int zv, int additional);
|
2019-12-22 00:20:10 +01:00
|
|
|
void WadeSplash(ITEM_INFO* item, int wh, int wd);
|
2020-04-24 19:15:05 +02:00
|
|
|
void Splash(ITEM_INFO* item);
|