Files
Hellfire/MISSILES.H
T
Justin Marshall 101266ab72 Initial commit.
2026-04-27 10:35:40 -07:00

221 lines
6.5 KiB
C++

/*-----------------------------------------------------------------------**
** Diablo
**
** Constants and Variables
**
** (C)1995 Condor, Inc. All rights reserved.
**-----------------------------------------------------------------------**
** $Header: /Diablo/MISSILES.H 2 1/23/97 12:21p Jmorin $
**-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------**
** Defines
**-----------------------------------------------------------------------*/
#define MAXMISSILES 125
#define MIT_ARROW 0
#define MIT_FIREBOLT 1
#define MIT_GUARDIAN 2
#define MIT_PHASE 3
#define MIT_LIGHTBALL 4
#define MIT_FIREWALL 5
#define MIT_FIREBALL 6
#define MIT_LIGHTCTRL 7
#define MIT_LIGHTNING 8
#define MIT_MISEXP 9
#define MIT_TOWN 10
#define MIT_FLASH 11
#define MIT_FLASH2 12
#define MIT_MANASHIELD 13
#define MIT_FIREMOVE 14
#define MIT_CHAIN 15
#define MIT_CHAINBALL 16
#define MIT_BLOOD 17
#define MIT_BONE 18
#define MIT_METAL 19
#define MIT_RHINO 20
#define MIT_MAGMABALL 21
#define MIT_THINLIGHTCTRL 22
#define MIT_THINLIGHT 23
#define MIT_FLARE 24
#define MIT_FLAREXP 25
#define MIT_TELE 26
#define MIT_FARROW 27
#define MIT_DOOM 28
#define MIT_FIREONLY 29
#define MIT_STONE 30
#define MIT_BLOODR 31
#define MIT_INVIS 32
#define MIT_GOLEM 33
#define MIT_ETHER 34
#define MIT_SPURT 35
#define MIT_BOOM 36
#define MIT_HEAL 37
#define MIT_FIREWALLC 38
#define MIT_INFRA 39
#define MIT_IDENTIFY 40
#define MIT_WAVE 41
#define MIT_NOVA 42
//#define MIT_BLDBOIL 43
#define MIT_RAGE 43
#define MIT_APOCA 44
#define MIT_REPAIR 45
#define MIT_RECHARGE 46
#define MIT_DISARM 47
#define MIT_FLAME 48
#define MIT_FLAMEC 49
#define MIT_FIREMAN 50
#define MIT_KRULL 51
#define MIT_CBOLT 52
#define MIT_HBOLT 53
#define MIT_RESURRECT 54
#define MIT_TELEKINESIS 55
#define MIT_LARROW 56
#define MIT_ACID 57
#define MIT_ACIDSPLAT 58
#define MIT_ACIDPUD 59
#define MIT_HEALOTHER 60
#define MIT_ELEMENT 61
#define MIT_RESURRECTBEAM 62
#define MIT_BONESPIRIT 63
#define MIT_WEAPEXP 64
#define MIT_RPORTAL 65
#define MIT_FIREPLAR 66
#define MIT_DIABAPOCA 67
#define MIT_MANA 68
#define MIT_FMANA 69
#define MIT_LIGHTWALL 70
#define MIT_LIGHTWALLC 71
#define MIT_IMMOLATION 72
#define MIT_SPECARROW 73
#define MIT_FBARROW 74
#define MIT_LTARROW 75
#define MIT_CBARROW 76
#define MIT_HBARROW 77
#define MIT_TELESTAIRS 78
#define MIT_REFLECT 79
#define MIT_BERSERK 80
#define MIT_FLAMEBOX 81
#define MIT_DISENCHANT 82
#define MIT_MANAREMOVE 83
#define MIT_LIGHTBOX 84
#define MIT_SHOWMAGITEMS 85
#define MIT_AURA 86
#define MIT_AURA2 87
#define MIT_SPIRALFIREBALL 88
#define MIT_RUNEOFFIRE 89
#define MIT_RUNEOFLIGHT 90
#define MIT_RUNEOFNOVA 91
#define MIT_RUNEOFIMMOLATION 92
#define MIT_RUNEOFSTONE 93
#define MIT_BIGEXPLOSION 94
#define MIT_HORKSPAWN 95
#define MIT_RANDOM 96
#define MIT_OPENNEST 97
#define MIT_ORANGEFLARE 98
#define MIT_BLUEFLARE 99
#define MIT_REDFLARE 100
#define MIT_YELLOWFLARE 101
#define MIT_BLUE2FLARE 102
#define MIT_YELLOWEXPLOSION 103
#define MIT_REDEXPLOSION 104
#define MIT_BLUEEXPLOSION 105
#define MIT_BLUE2EXPLOSION 106
#define MIT_ORANGEEXPLOSION 107
#define NUMBER_OF_MISSILE_TYPES (1 + MIT_ORANGEEXPLOSION)
#define MI_ENEMYMONST 0
#define MI_ENEMYPLR 1
#define MI_ENEMYBOTH 2
/*-----------------------------------------------------------------------**
** Structures
**-----------------------------------------------------------------------*/
typedef struct {
int _mitype; // missile type
int _mix; // missile map x
int _miy; // missile map y
long _mixoff; // offset x from left of map tile
long _miyoff; // offset y from bottom of map tile
long _mixvel; // current x rate
long _miyvel; // current y rate
int _misx; // missile map start x
int _misy; // missile map start y
long _mitxoff; // missile total offset from start x
long _mityoff; // missile total offset from start y
int _mimfnum; // current facing direction
int _mispllvl; // level of missile
BOOL _miDelFlag; // delete flag
BYTE _miAnimType; // data pointer to anim tables
BOOL _miAnimFlags; // various animation related flags
BYTE *_miAnimData; // Data pointer to anim tables
int _miAnimDelay; // anim delay amount
int _miAnimLen; // number of anim frames
long _miAnimWidth; // anim width
long _miAnimWidth2; // anim width2
int _miAnimCnt; // current anim delay value
int _miAnimAdd; // anim number to add to next frame (-1 backwards)
int _miAnimFrame; // current anim frame
BOOL _miDrawFlag; // draw missile at all
BOOL _miLightFlag; // draw with light sourcing?
BOOL _miPreFlag; // draw missile behind plr,monsters,objects
BOOL _miUniqTrans; // draw missile with special palette translation
int _mirange; // max range of missile
int _misource; // which monster/plr shot me
int _micaster; // monst/plr/damages both.
int _midam; // missile damage
BOOL _miHitFlag; // did it hit a monster or plr?
int _midist; // how long have I been traveling
int _mlid; // light id
int _mirnd; // random seed
long _miVar1; // scratch var 1
long _miVar2; // scratch var 2
long _miVar3; // scratch var 3
long _miVar4; // scratch var 4
long _miVar5; // scratch var 5
long _miVar6; // scratch var 6
long _miVar7; // scratch var 7
long _miVar8; // scratch var 8
} MissileStruct;
#define SAVE_MISSILE_SIZE sizeof(MissileStruct)
/*-----------------------------------------------------------------------**
** Externs
**-----------------------------------------------------------------------*/
extern int nummissiles;
extern int missileactive[MAXMISSILES];
extern int missileavail[MAXMISSILES];
extern BOOL MissilePreFlag;
extern MissileStruct missile[MAXMISSILES];
extern int XDirAdd[8];
extern int YDirAdd[8];
/*-----------------------------------------------------------------------**
** Prototypes
**-----------------------------------------------------------------------*/
void InitMissileGFX();
void FreeMissileGFX();
void ILoadMissileGFX(BYTE);
void IFreeMissileGFX();
void InitMissiles();
void ProcessMissiles();
int AddMissile(int, int, int, int, int, int, char, int, int, int);
//void RndBlood (int, int, int, int, int);
BOOL MonsterTrapHit(int, int, int, int, int, byte);
BOOL PlayerMHit(int, int, int, int, int, int, byte, BOOL, bool *);
int GetSpellLevel(int, int);
void GetDamageAmt(int, int *, int *);
void SyncMissAnim();
void ClearMissileSpot(int mi);