Browse Source

🚚 Move structures to there respective headers

pull/1013/merge
Anders Jenbo 5 years ago
parent
commit
6f1498d315
  1. 40
      3rdParty/Storm/Source/storm.h
  2. 22
      DiabloUI/diabloui.h
  3. 2
      Source/capture.cpp
  4. 1
      Source/control.h
  5. 17
      Source/drlg_l2.h
  6. 8
      Source/effects.h
  7. 32
      Source/gendung.h
  8. 6
      Source/gmenu.h
  9. 5
      Source/inv.h
  10. 2
      Source/loadsave.cpp
  11. 1
      Source/monster.cpp
  12. 7
      Source/monster.h
  13. 300
      Source/objdat.cpp
  14. 185
      Source/objdat.h
  15. 47
      Source/objects.cpp
  16. 37
      Source/objects.h
  17. 1
      Source/pfile.cpp
  18. 1
      Source/pfile.h
  19. 9
      Source/sound.h
  20. 106
      Source/spelldat.cpp
  21. 196
      Source/spelldat.h
  22. 2
      Source/spells.cpp
  23. 784
      Source/textdat.cpp
  24. 6
      Source/textdat.h
  25. 31
      Source/themes.cpp
  26. 5
      Source/themes.h
  27. 2
      SourceX/storm/storm.cpp
  28. 346
      enums.h
  29. 299
      structs.h
  30. 1
      types.h

40
3rdParty/Storm/Source/storm.h vendored

@ -5,6 +5,46 @@
#include <string>
namespace dvl {
typedef struct PCXHeader {
Uint8 Manufacturer;
Uint8 Version;
Uint8 Encoding;
Uint8 BitsPerPixel;
Uint16 Xmin;
Uint16 Ymin;
Uint16 Xmax;
Uint16 Ymax;
Uint16 HDpi;
Uint16 VDpi;
Uint8 Colormap[48];
Uint8 Reserved;
Uint8 NPlanes;
Uint16 BytesPerLine;
Uint16 PaletteInfo;
Uint16 HscreenSize;
Uint16 VscreenSize;
Uint8 Filler[54];
} PCXHeader;
typedef struct _SNETCAPS {
Uint32 size;
Uint32 flags;
Uint32 maxmessagesize;
Uint32 maxqueuesize;
Uint32 maxplayers;
Uint32 bytessec;
Uint32 latencyms;
Uint32 defaultturnssec;
Uint32 defaultturnsintransit;
} _SNETCAPS;
typedef struct _SNETEVENT {
Uint32 eventid;
Uint32 playerid;
void *data;
Uint32 databytes;
} _SNETEVENT;
// Note to self: Linker error => forgot a return value in cpp
// Storm API definition

22
DiabloUI/diabloui.h

@ -4,6 +4,28 @@
namespace dvl {
typedef struct _uidefaultstats {
Uint16 strength;
Uint16 magic;
Uint16 dexterity;
Uint16 vitality;
} _uidefaultstats;
typedef struct _uiheroinfo {
struct _uiheroinfo *next;
char name[16];
Uint16 level;
plr_class heroclass;
Uint8 herorank;
Uint16 strength;
Uint16 magic;
Uint16 dexterity;
Uint16 vitality;
Sint32 gold;
Sint32 hassaved;
bool spawned;
} _uiheroinfo;
void UiDestroy();
void UiTitleDialog();
void UiSetSpawned(BOOL bSpawned);

2
Source/capture.cpp

@ -21,7 +21,7 @@ DEVILUTION_BEGIN_NAMESPACE
*/
static BOOL CaptureHdr(short width, short height, std::ofstream *out)
{
PCXHEADER Buffer;
PCXHeader Buffer;
memset(&Buffer, 0, sizeof(Buffer));
Buffer.Manufacturer = 10;

1
Source/control.h

@ -7,6 +7,7 @@
#define __CONTROL_H__
#include "engine.h"
#include "spelldat.h"
DEVILUTION_BEGIN_NAMESPACE

17
Source/drlg_l2.h

@ -12,6 +12,23 @@ DEVILUTION_BEGIN_NAMESPACE
extern "C" {
#endif
typedef struct HALLNODE {
Sint32 nHallx1;
Sint32 nHally1;
Sint32 nHallx2;
Sint32 nHally2;
Sint32 nHalldir;
struct HALLNODE *pNext;
} HALLNODE;
typedef struct ROOMNODE {
Sint32 nRoomx1;
Sint32 nRoomy1;
Sint32 nRoomx2;
Sint32 nRoomy2;
Sint32 nRoomDest;
} ROOMNODE;
extern BYTE predungeon[DMAXX][DMAXY];
void InitDungeon();

8
Source/effects.h

@ -6,12 +6,20 @@
#ifndef __EFFECTS_H__
#define __EFFECTS_H__
#include "sound.h"
DEVILUTION_BEGIN_NAMESPACE
#ifdef __cplusplus
extern "C" {
#endif
typedef struct TSFX {
Uint8 bFlags;
const char *pszName;
TSnd *pSnd;
} TSFX;
extern int sfxdelay;
extern int sfxdnum;

32
Source/gendung.h

@ -13,25 +13,37 @@ extern "C" {
#endif
typedef struct ScrollStruct {
int _sxoff; // X-offset of camera position. This usually corresponds to a negative version of plr[myplr]._pxoff
int _syoff; // Y-offset of camera position. This usually corresponds to a negative version of plr[myplr]._pyoff
int _sdx;
int _sdy;
int _sdir;
/** @brief X-offset of camera position. This usually corresponds to a negative version of plr[myplr]._pxoff */
Sint32 _sxoff;
/** @brief Y-offset of camera position. This usually corresponds to a negative version of plr[myplr]._pyoff */
Sint32 _syoff;
Sint32 _sdx;
Sint32 _sdy;
Sint32 _sdir;
} ScrollStruct;
typedef struct THEME_LOC {
int x;
int y;
int ttval;
int width;
int height;
Sint32 x;
Sint32 y;
Sint32 ttval;
Sint32 width;
Sint32 height;
} THEME_LOC;
typedef struct MICROS {
Uint16 mt[16];
} MICROS;
typedef struct ShadowStruct {
Uint8 strig;
Uint8 s1;
Uint8 s2;
Uint8 s3;
Uint8 nv1;
Uint8 nv2;
Uint8 nv3;
} ShadowStruct;
extern BYTE dungeon[DMAXX][DMAXY];
extern BYTE pdungeon[DMAXX][DMAXY];
extern char dflags[DMAXX][DMAXY];

6
Source/gmenu.h

@ -14,6 +14,12 @@ DEVILUTION_BEGIN_NAMESPACE
extern "C" {
#endif
typedef struct TMenuItem {
Uint32 dwFlags;
const char *pszStr;
void (*fnMenu)(BOOL);
} TMenuItem;
extern TMenuItem *sgpCurrentMenu;
void gmenu_draw_pause(CelOutputBuffer out);

5
Source/inv.h

@ -23,6 +23,11 @@ typedef enum item_color {
// clang-format on
} item_color;
typedef struct InvXY {
Sint32 X;
Sint32 Y;
} InvXY;
extern BOOL invflag;
extern BOOL drawsbarflag;
extern const InvXY InvRect[73];

2
Source/loadsave.cpp

@ -677,7 +677,7 @@ static void LoadObject(LoadHelper *file, int i)
{
ObjectStruct *pObject = &object[i];
pObject->_otype = file->nextLE<Sint32>();
pObject->_otype = (_object_id)file->nextLE<Sint32>();
pObject->_ox = file->nextLE<Sint32>();
pObject->_oy = file->nextLE<Sint32>();
pObject->_oLight = file->nextBool32();

1
Source/monster.cpp

@ -340,7 +340,6 @@ void InitMonsterGFX(int monst)
}
}
// TODO: either the AnimStruct members have wrong naming or the MonsterData ones it seems
Monsters[monst].Anims[anim].Frames = frames;
Monsters[monst].Anims[anim].Rate = monsterdata[mtype].Rate[anim];
}

7
Source/monster.h

@ -36,6 +36,13 @@ typedef enum MON_MODE {
MM_TALK,
} MON_MODE;
typedef struct AnimStruct {
Uint8 *CMem;
Uint8 *Data[8];
Sint32 Frames;
Sint32 Rate;
} AnimStruct;
typedef struct CMonster {
_monster_id mtype;
/** placeflag enum as a flags*/

300
Source/objdat.cpp

@ -8,8 +8,8 @@
DEVILUTION_BEGIN_NAMESPACE
/** Maps from dun_object_id to object_id. */
const int ObjTypeConv[] = {
0,
const _object_id ObjTypeConv[] = {
OBJ_NULL,
OBJ_LEVER,
OBJ_CRUX1,
OBJ_CRUX2,
@ -18,33 +18,33 @@ const int ObjTypeConv[] = {
OBJ_BANNERL,
OBJ_BANNERM,
OBJ_BANNERR,
0,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_BOOK2L,
OBJ_BOOK2R,
OBJ_BCROSS,
0,
OBJ_NULL,
OBJ_CANDLE1,
OBJ_CANDLE2,
OBJ_CANDLEO,
OBJ_CAULDRON,
0,
0,
0,
0,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_FLAMEHOLE,
0,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_MCIRCLE1,
OBJ_MCIRCLE2,
OBJ_SKFIRE,
@ -54,14 +54,14 @@ const int ObjTypeConv[] = {
OBJ_SKSTICK3,
OBJ_SKSTICK4,
OBJ_SKSTICK5,
0,
0,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_SWITCHSKL,
0,
OBJ_NULL,
OBJ_TRAPL,
OBJ_TRAPR,
OBJ_TORTURE1,
@ -69,16 +69,16 @@ const int ObjTypeConv[] = {
OBJ_TORTURE3,
OBJ_TORTURE4,
OBJ_TORTURE5,
0,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NUDEW2R,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_TNUDEM1,
OBJ_TNUDEM2,
OBJ_TNUDEM3,
@ -95,28 +95,28 @@ const int ObjTypeConv[] = {
OBJ_CHEST3,
OBJ_CHEST3,
OBJ_CHEST3,
0,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_PEDISTAL,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_NULL,
OBJ_ALTBOY,
0,
0,
OBJ_NULL,
OBJ_NULL,
OBJ_WARARMOR,
OBJ_WARWEAP,
OBJ_TORCHR2,
@ -154,106 +154,106 @@ const int ObjTypeConv[] = {
const ObjDataStruct AllObjects[] = {
// clang-format off
// oload, ofindex, ominlvl, omaxlvl, olvltype, otheme, oquest, oAnimFlag, oAnimDelay, oAnimLen, oAnimWidth, oSolidFlag, oMissFlag, oLightFlag, oBreak, oSelFlag, oTrapFlag
{ 1, OFILE_L1BRAZ, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 1, 1, 26, 64, TRUE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_L1DOORS, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_L1DOORS, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 3, OFILE_SKULFIRE, 0, 0, 0, THEME_SKELROOM, -1, 1, 2, 11, 96, TRUE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_LEVER, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 1, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST1, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST2, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST3, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 3, OFILE_CANDLE2, 0, 0, 0, THEME_SHRINE, -1, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 3, OFILE_BANNER, 0, 0, 0, THEME_SKELROOM, -1, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 3, OFILE_BANNER, 0, 0, 0, THEME_SKELROOM, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 3, OFILE_BANNER, 0, 0, 0, THEME_SKELROOM, -1, 0, 3, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_SKULPILE, 1, 4, 0, THEME_NONE, -1, 0, 1, 1, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_CRUXSK1, 0, 0, 0, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE },
{ 2, OFILE_CRUXSK2, 0, 0, 0, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE },
{ 2, OFILE_CRUXSK3, 0, 0, 0, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE },
{ 1, OFILE_ROCKSTAN, 5, 5, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_ANGEL, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 2, OFILE_BOOK2, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 2, OFILE_BURNCROS, 0, 0, 0, THEME_NONE, -1, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_NUDE2, 0, 0, 0, THEME_NONE, -1, 1, 3, 6, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_SWITCH4, 16, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_TNUDEM, 13, 16, 0, THEME_NONE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEM, 13, 16, 0, THEME_TORTURE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEM, 13, 16, 0, THEME_TORTURE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEM, 13, 16, 0, THEME_TORTURE, Q_BUTCHER, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEW, 13, 16, 0, THEME_TORTURE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEW, 13, 16, 0, THEME_TORTURE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEW, 13, 16, 0, THEME_TORTURE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, Q_BUTCHER, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, Q_BUTCHER, 0, 5, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BOOK2, 6, 6, 0, THEME_NONE, -1, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_L2DOORS, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_L2DOORS, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_WTORCH4, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_WTORCH3, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_WTORCH1, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_WTORCH2, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_SARC, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 5, 128, TRUE, TRUE, TRUE, 0, 3, TRUE },
{ 2, OFILE_FLAME1, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 20, 96, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_LEVER, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 2, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 2, OFILE_MINIWATR, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 1, 1, 10, 64, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BOOK1, 3, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_TRAPHOLE, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TRAPHOLE, 1, 16, 0, THEME_NONE, -1, 0, 2, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_BCASE, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 2, OFILE_WEAPSTND, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BARREL, 1, 16, 0, THEME_NONE, -1, 0, 1, 9, 96, TRUE, TRUE, TRUE, 1, 3, FALSE },
{ 1, OFILE_BARRELEX, 1, 16, 0, THEME_NONE, -1, 0, 1, 10, 96, TRUE, TRUE, TRUE, 1, 3, FALSE },
{ 3, OFILE_LSHRINEG, 0, 0, 0, THEME_SHRINE, -1, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_RSHRINEG, 0, 0, 0, THEME_SHRINE, -1, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BOOK2, 0, 0, 0, THEME_SKELROOM, -1, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BCASE, 0, 0, 0, THEME_LIBRARY, -1, 0, 3, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BCASE, 0, 0, 0, THEME_LIBRARY, -1, 0, 4, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BOOK2, 0, 0, 0, THEME_LIBRARY, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_CANDLE2, 0, 0, 0, THEME_LIBRARY, -1, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 3, OFILE_BLOODFNT, 0, 0, 0, THEME_BLOODFOUNTAIN, -1, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_DECAP, 13, 16, 0, THEME_DECAPITATED, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE },
{ 1, OFILE_CHEST1, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST2, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST3, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_L1BRAZ, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 1, 1, 26, 64, TRUE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_L1DOORS, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_L1DOORS, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 3, OFILE_SKULFIRE, 0, 0, DTYPE_NONE, THEME_SKELROOM, Q_INVALID, 1, 2, 11, 96, TRUE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_LEVER, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 0, 1, 1, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST1, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST2, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST3, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 2, OFILE_L1BRAZ, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 3, OFILE_CANDLE2, 0, 0, DTYPE_NONE, THEME_SHRINE, Q_INVALID, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 3, OFILE_BANNER, 0, 0, DTYPE_NONE, THEME_SKELROOM, Q_INVALID, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 3, OFILE_BANNER, 0, 0, DTYPE_NONE, THEME_SKELROOM, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 3, OFILE_BANNER, 0, 0, DTYPE_NONE, THEME_SKELROOM, Q_INVALID, 0, 3, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_SKULPILE, 1, 4, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 1, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_L1BRAZ, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_CRUXSK1, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE },
{ 2, OFILE_CRUXSK2, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE },
{ 2, OFILE_CRUXSK3, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE },
{ 1, OFILE_ROCKSTAN, 5, 5, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_ANGEL, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 2, OFILE_BOOK2, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 2, OFILE_BURNCROS, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_NUDE2, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 1, 3, 6, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_SWITCH4, 16, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_TNUDEM, 13, 16, DTYPE_NONE, THEME_NONE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEM, 13, 16, DTYPE_NONE, THEME_TORTURE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEM, 13, 16, DTYPE_NONE, THEME_TORTURE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEM, 13, 16, DTYPE_NONE, THEME_TORTURE, Q_BUTCHER, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEW, 13, 16, DTYPE_NONE, THEME_TORTURE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEW, 13, 16, DTYPE_NONE, THEME_TORTURE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TNUDEW, 13, 16, DTYPE_NONE, THEME_TORTURE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, DTYPE_NONE, THEME_NONE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, DTYPE_NONE, THEME_NONE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, DTYPE_NONE, THEME_NONE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, DTYPE_NONE, THEME_NONE, Q_BUTCHER, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TSOUL, 13, 16, DTYPE_NONE, THEME_NONE, Q_BUTCHER, 0, 5, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BOOK2, 6, 6, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_L2DOORS, 5, 8, DTYPE_CATACOMBS, THEME_NONE, Q_INVALID, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_L2DOORS, 5, 8, DTYPE_CATACOMBS, THEME_NONE, Q_INVALID, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_WTORCH4, 5, 8, DTYPE_CATACOMBS, THEME_NONE, Q_INVALID, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_WTORCH3, 5, 8, DTYPE_CATACOMBS, THEME_NONE, Q_INVALID, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_WTORCH1, 5, 8, DTYPE_CATACOMBS, THEME_NONE, Q_INVALID, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_WTORCH2, 5, 8, DTYPE_CATACOMBS, THEME_NONE, Q_INVALID, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE },
{ 1, OFILE_SARC, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 0, 1, 5, 128, TRUE, TRUE, TRUE, 0, 3, TRUE },
{ 2, OFILE_FLAME1, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 0, 1, 20, 96, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_LEVER, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 0, 1, 2, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 2, OFILE_MINIWATR, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 1, 1, 10, 64, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BOOK1, 3, 4, DTYPE_CATHEDRAL, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_TRAPHOLE, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 1, OFILE_TRAPHOLE, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 2, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 2, OFILE_BCASE, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 2, OFILE_WEAPSTND, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BARREL, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 9, 96, TRUE, TRUE, TRUE, 1, 3, FALSE },
{ 1, OFILE_BARRELEX, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 10, 96, TRUE, TRUE, TRUE, 1, 3, FALSE },
{ 3, OFILE_LSHRINEG, 0, 0, DTYPE_NONE, THEME_SHRINE, Q_INVALID, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_RSHRINEG, 0, 0, DTYPE_NONE, THEME_SHRINE, Q_INVALID, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BOOK2, 0, 0, DTYPE_NONE, THEME_SKELROOM, Q_INVALID, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BCASE, 0, 0, DTYPE_NONE, THEME_LIBRARY, Q_INVALID, 0, 3, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BCASE, 0, 0, DTYPE_NONE, THEME_LIBRARY, Q_INVALID, 0, 4, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_BOOK2, 0, 0, DTYPE_NONE, THEME_LIBRARY, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_CANDLE2, 0, 0, DTYPE_NONE, THEME_LIBRARY, Q_INVALID, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 3, OFILE_BLOODFNT, 0, 0, DTYPE_NONE, THEME_BLOODFOUNTAIN, Q_INVALID, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_DECAP, 13, 16, DTYPE_NONE, THEME_DECAPITATED, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE },
{ 1, OFILE_CHEST1, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST2, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_CHEST3, 1, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 1, OFILE_BOOK1, 7, 7, DTYPE_CATACOMBS, THEME_NONE, Q_BLIND, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_BOOK1, 5, 5, DTYPE_CATACOMBS, THEME_NONE, Q_BLOOD, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_PEDISTL, 5, 5, DTYPE_CATACOMBS, THEME_NONE, Q_BLOOD, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_L3DOORS, 9, 12, DTYPE_CAVES, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_L3DOORS, 9, 12, DTYPE_CAVES, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 3, OFILE_PFOUNTN, 0, 0, 0, THEME_PURIFYINGFOUNTAIN, -1, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_ARMSTAND, 0, 0, 0, THEME_ARMORSTAND, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_ARMSTAND, 0, 0, 0, THEME_ARMORSTAND, -1, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 3, OFILE_GOATSHRN, 0, 0, 0, THEME_GOATSHRINE, -1, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_CAULDREN, 13, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_MFOUNTN, 0, 0, 0, THEME_MURKYFOUNTAIN, -1, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_TFOUNTN, 0, 0, 0, THEME_TEARFOUNTAIN, -1, 1, 2, 4, 128, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_L3DOORS, 9, 12, DTYPE_CAVES, THEME_NONE, Q_INVALID, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 1, OFILE_L3DOORS, 9, 12, DTYPE_CAVES, THEME_NONE, Q_INVALID, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE },
{ 3, OFILE_PFOUNTN, 0, 0, DTYPE_NONE, THEME_PURIFYINGFOUNTAIN, Q_INVALID, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_ARMSTAND, 0, 0, DTYPE_NONE, THEME_ARMORSTAND, Q_INVALID, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_ARMSTAND, 0, 0, DTYPE_NONE, THEME_ARMORSTAND, Q_INVALID, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 3, OFILE_GOATSHRN, 0, 0, DTYPE_NONE, THEME_GOATSHRINE, Q_INVALID, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_CAULDREN, 13, 16, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 3, OFILE_MFOUNTN, 0, 0, DTYPE_NONE, THEME_MURKYFOUNTAIN, Q_INVALID, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 3, OFILE_TFOUNTN, 0, 0, DTYPE_NONE, THEME_TEARFOUNTAIN, Q_INVALID, 1, 2, 4, 128, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_ALTBOY, 0, 0, DTYPE_CATHEDRAL, THEME_NONE, Q_BETRAYER, 0, 1, 0, 128, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 1, OFILE_MCIRL, 0, 0, DTYPE_CATHEDRAL, THEME_NONE, Q_BETRAYER, 0, 1, 0, 96, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 1, OFILE_MCIRL, 0, 0, DTYPE_CATHEDRAL, THEME_NONE, Q_BETRAYER, 0, 1, 0, 96, FALSE, TRUE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BKSLBRNT, 1, 12, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, // BUGFIX should only be loaded on level 1-12 (crypt masks as 1-4) (fixed)
{ 1, OFILE_CANDLE2, 2, 12, 0, THEME_NONE, Q_BETRAYER, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BKSLBRNT, 1, 12, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, // BUGFIX should only be loaded on level 1-12 (crypt masks as 1-4) (fixed)
{ 1, OFILE_CANDLE2, 2, 12, DTYPE_NONE, THEME_NONE, Q_BETRAYER, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE },
{ 1, OFILE_BOOK1, 13, 13, DTYPE_HELL, THEME_NONE, Q_WARLORD, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE },
{ 1, OFILE_ARMSTAND, 13, 13, 0, THEME_NONE, Q_WARLORD, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 2, OFILE_WEAPSTND, 13, 13, 0, THEME_NONE, Q_WARLORD, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 2, OFILE_BURNCROS, 0, 0, 0, THEME_BRNCROSS, -1, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_WEAPSTND, 0, 0, 0, THEME_WEAPONRACK, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 2, OFILE_WEAPSTND, 0, 0, 0, THEME_WEAPONRACK, -1, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 2, OFILE_MUSHPTCH, 0, 0, 0, THEME_NONE, Q_MUSHROOM, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, TRUE },
{ 2, OFILE_LZSTAND, 0, 0, 0, THEME_NONE, Q_BETRAYER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 1, OFILE_DECAP, 9, 9, DTYPE_CAVES, THEME_NONE, -1, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE },
{ 2, OFILE_CHEST3, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 2, OFILE_BCASE, 0, 0, 0, THEME_NONE, -1, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ -1, 0, 0, 0, -1, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }
{ 1, OFILE_ARMSTAND, 13, 13, DTYPE_NONE, THEME_NONE, Q_WARLORD, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 2, OFILE_WEAPSTND, 13, 13, DTYPE_NONE, THEME_NONE, Q_WARLORD, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 2, OFILE_BURNCROS, 0, 0, DTYPE_NONE, THEME_BRNCROSS, Q_INVALID, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE },
{ 2, OFILE_WEAPSTND, 0, 0, DTYPE_NONE, THEME_WEAPONRACK, Q_INVALID, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 2, OFILE_WEAPSTND, 0, 0, DTYPE_NONE, THEME_WEAPONRACK, Q_INVALID, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ 2, OFILE_MUSHPTCH, 0, 0, DTYPE_NONE, THEME_NONE, Q_MUSHROOM, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, TRUE },
{ 2, OFILE_LZSTAND, 0, 0, DTYPE_NONE, THEME_NONE, Q_BETRAYER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 3, FALSE },
{ 1, OFILE_DECAP, 9, 9, DTYPE_CAVES, THEME_NONE, Q_INVALID, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE },
{ 2, OFILE_CHEST3, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE },
{ 2, OFILE_BCASE, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE },
{ -1, OFILE_NULL, 0, 0, DTYPE_NONE, THEME_NONE, Q_INVALID, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE },
// clang-format on
};

185
Source/objdat.h

@ -12,7 +12,190 @@ DEVILUTION_BEGIN_NAMESPACE
extern "C" {
#endif
extern const int ObjTypeConv[];
typedef enum object_graphic_id {
OFILE_L1BRAZ,
OFILE_L1DOORS,
OFILE_LEVER,
OFILE_CHEST1,
OFILE_CHEST2,
OFILE_BANNER,
OFILE_SKULPILE,
OFILE_SKULFIRE,
OFILE_SKULSTIK,
OFILE_CRUXSK1,
OFILE_CRUXSK2,
OFILE_CRUXSK3,
OFILE_BOOK1,
OFILE_BOOK2,
OFILE_ROCKSTAN,
OFILE_ANGEL,
OFILE_CHEST3,
OFILE_BURNCROS,
OFILE_CANDLE2,
OFILE_NUDE2,
OFILE_SWITCH4,
OFILE_TNUDEM,
OFILE_TNUDEW,
OFILE_TSOUL,
OFILE_L2DOORS,
OFILE_WTORCH4,
OFILE_WTORCH3,
OFILE_SARC,
OFILE_FLAME1,
OFILE_PRSRPLT1,
OFILE_TRAPHOLE,
OFILE_MINIWATR,
OFILE_WTORCH2,
OFILE_WTORCH1,
OFILE_BCASE,
OFILE_BSHELF,
OFILE_WEAPSTND,
OFILE_BARREL,
OFILE_BARRELEX,
OFILE_LSHRINEG,
OFILE_RSHRINEG,
OFILE_BLOODFNT,
OFILE_DECAP,
OFILE_PEDISTL,
OFILE_L3DOORS,
OFILE_PFOUNTN,
OFILE_ARMSTAND,
OFILE_GOATSHRN,
OFILE_CAULDREN,
OFILE_MFOUNTN,
OFILE_TFOUNTN,
OFILE_ALTBOY,
OFILE_MCIRL,
OFILE_BKSLBRNT,
OFILE_MUSHPTCH,
OFILE_LZSTAND,
OFILE_NULL = -1,
} object_graphic_id;
typedef enum _object_id {
OBJ_L1LIGHT,
OBJ_L1LDOOR,
OBJ_L1RDOOR,
OBJ_SKFIRE,
OBJ_LEVER,
OBJ_CHEST1,
OBJ_CHEST2,
OBJ_CHEST3,
OBJ_CANDLE1,
OBJ_CANDLE2,
OBJ_CANDLEO,
OBJ_BANNERL,
OBJ_BANNERM,
OBJ_BANNERR,
OBJ_SKPILE,
OBJ_SKSTICK1,
OBJ_SKSTICK2,
OBJ_SKSTICK3,
OBJ_SKSTICK4,
OBJ_SKSTICK5,
OBJ_CRUX1,
OBJ_CRUX2,
OBJ_CRUX3,
OBJ_STAND,
OBJ_ANGEL,
OBJ_BOOK2L,
OBJ_BCROSS,
OBJ_NUDEW2R,
OBJ_SWITCHSKL,
OBJ_TNUDEM1,
OBJ_TNUDEM2,
OBJ_TNUDEM3,
OBJ_TNUDEM4,
OBJ_TNUDEW1,
OBJ_TNUDEW2,
OBJ_TNUDEW3,
OBJ_TORTURE1,
OBJ_TORTURE2,
OBJ_TORTURE3,
OBJ_TORTURE4,
OBJ_TORTURE5,
OBJ_BOOK2R,
OBJ_L2LDOOR,
OBJ_L2RDOOR,
OBJ_TORCHL,
OBJ_TORCHR,
OBJ_TORCHL2,
OBJ_TORCHR2,
OBJ_SARC,
OBJ_FLAMEHOLE,
OBJ_FLAMELVR,
OBJ_WATER,
OBJ_BOOKLVR,
OBJ_TRAPL,
OBJ_TRAPR,
OBJ_BOOKSHELF,
OBJ_WEAPRACK,
OBJ_BARREL,
OBJ_BARRELEX,
OBJ_SHRINEL,
OBJ_SHRINER,
OBJ_SKELBOOK,
OBJ_BOOKCASEL,
OBJ_BOOKCASER,
OBJ_BOOKSTAND,
OBJ_BOOKCANDLE,
OBJ_BLOODFTN,
OBJ_DECAP,
OBJ_TCHEST1,
OBJ_TCHEST2,
OBJ_TCHEST3,
OBJ_BLINDBOOK,
OBJ_BLOODBOOK,
OBJ_PEDISTAL,
OBJ_L3LDOOR,
OBJ_L3RDOOR,
OBJ_PURIFYINGFTN,
OBJ_ARMORSTAND,
OBJ_ARMORSTANDN,
OBJ_GOATSHRINE,
OBJ_CAULDRON,
OBJ_MURKYFTN,
OBJ_TEARFTN,
OBJ_ALTBOY,
OBJ_MCIRCLE1,
OBJ_MCIRCLE2,
OBJ_STORYBOOK,
OBJ_STORYCANDLE,
OBJ_STEELTOME,
OBJ_WARARMOR,
OBJ_WARWEAP,
OBJ_TBCROSS,
OBJ_WEAPONRACK,
OBJ_WEAPONRACKN,
OBJ_MUSHPATCH,
OBJ_LAZSTAND,
OBJ_SLAINHERO,
OBJ_SIGNCHEST,
OBJ_BOOKSHELFR,
OBJ_NULL = -1,
} _object_id;
typedef struct ObjDataStruct {
Sint8 oload; // Todo create enum
object_graphic_id ofindex;
Sint8 ominlvl;
Sint8 omaxlvl;
dungeon_type olvltype;
theme_id otheme;
quest_id oquest;
Sint32 oAnimFlag; // TODO Create enum
Sint32 oAnimDelay; // Tick length of each frame in the current animation
Sint32 oAnimLen; // Number of frames in current animation
Sint32 oAnimWidth;
bool oSolidFlag;
bool oMissFlag;
bool oLightFlag;
Sint8 oBreak; // TODO Create enum
Sint8 oSelFlag; // TODO Create enum
bool oTrapFlag;
} ObjDataStruct;
extern const _object_id ObjTypeConv[];
extern const ObjDataStruct AllObjects[];
extern const char *const ObjMasterLoadList[];
extern const char *ObjCryptLoadList[];

47
Source/objects.cpp

@ -11,7 +11,7 @@ DEVILUTION_BEGIN_NAMESPACE
int trapid;
int trapdir;
BYTE *pObjCels[40];
char ObjFileList[40];
object_graphic_id ObjFileList[40];
int objectactive[MAXOBJECTS];
/** Specifies the number of active objects. */
int nobjects;
@ -239,9 +239,9 @@ void InitObjectGFX()
}
}
for (i = 0; i < 56; i++) {
for (int i = OFILE_L1BRAZ; i <= OFILE_LZSTAND; i++) {
if (fileload[i]) {
ObjFileList[numobjfiles] = i;
ObjFileList[numobjfiles] = (object_graphic_id)i;
sprintf(filestr, "Objects\\%s.CEL", ObjMasterLoadList[i]);
if (currlevel >= 17 && currlevel < 21)
sprintf(filestr, "Objects\\%s.CEL", ObjHiveLoadList[i]);
@ -291,7 +291,7 @@ static bool WallTrapLocOkK(int xp, int yp)
return FALSE;
}
void InitRndLocObj(int min, int max, int objtype)
void InitRndLocObj(int min, int max, _object_id objtype)
{
int i, xp, yp, numobjs;
@ -317,7 +317,7 @@ void InitRndLocObj(int min, int max, int objtype)
}
}
void InitRndLocBigObj(int min, int max, int objtype)
void InitRndLocBigObj(int min, int max, _object_id objtype)
{
int i, xp, yp, numobjs;
@ -345,7 +345,7 @@ void InitRndLocBigObj(int min, int max, int objtype)
}
}
void InitRndLocObj5x5(int min, int max, int objtype)
void InitRndLocObj5x5(int min, int max, _object_id objtype)
{
bool exit;
int xp, yp, numobjs, i, cnt, m, n;
@ -670,7 +670,17 @@ void AddChestTraps()
if (dObject[i][j] > 0) {
oi = dObject[i][j] - 1;
if (object[oi]._otype >= OBJ_CHEST1 && object[oi]._otype <= OBJ_CHEST3 && !object[oi]._oTrapFlag && random_(0, 100) < 10) {
object[oi]._otype += OBJ_TCHEST1 - OBJ_CHEST1;
switch (object[oi]._otype) {
case OBJ_CHEST1:
object[oi]._otype = OBJ_TCHEST1;
break;
case OBJ_CHEST2:
object[oi]._otype = OBJ_TCHEST2;
break;
case OBJ_CHEST3:
object[oi]._otype = OBJ_TCHEST3;
break;
}
object[oi]._oTrapFlag = TRUE;
if (leveltype == DTYPE_CATACOMBS) {
object[oi]._oVar4 = random_(0, 2);
@ -1136,11 +1146,11 @@ void SetMapObjects(BYTE *pMap, int startx, int starty)
}
}
for (i = 0; i < 56; i++) {
for (i = OFILE_L1BRAZ; i <= OFILE_LZSTAND; i++) {
if (!fileload[i])
continue;
ObjFileList[numobjfiles] = i;
ObjFileList[numobjfiles] = (object_graphic_id)i;
sprintf(filestr, "Objects\\%s.CEL", ObjMasterLoadList[i]);
pObjCels[numobjfiles] = LoadFileInMem(filestr, NULL);
numobjfiles++;
@ -1170,16 +1180,13 @@ void DeleteObject_(int oi, int i)
objectactive[i] = objectactive[nobjects];
}
void SetupObject(int i, int x, int y, int ot)
void SetupObject(int i, int x, int y, _object_id ot)
{
int ofi;
int j;
object[i]._otype = ot;
ofi = AllObjects[ot].ofindex;
object_graphic_id ofi = AllObjects[ot].ofindex;
object[i]._ox = x;
object[i]._oy = y;
j = 0;
int j = 0;
while (ObjFileList[j] != ofi) {
j++;
}
@ -1574,7 +1581,7 @@ void AddSlainHero()
AddObject(OBJ_SLAINHERO, x + 2, y + 2);
}
void objects_44D8C5(int ot, int v2, int ox, int oy)
void objects_44D8C5(_object_id ot, int v2, int ox, int oy)
{
int oi;
@ -1660,7 +1667,7 @@ void objects_44DA68(int i, int a2)
}
}
void AddObject(int ot, int ox, int oy)
void AddObject(_object_id ot, int ox, int oy)
{
int oi;
@ -5006,10 +5013,8 @@ void SyncL3Doors(int i)
void SyncObjectAnim(int o)
{
int i, index;
index = AllObjects[object[o]._otype].ofindex;
i = 0;
object_graphic_id index = AllObjects[object[o]._otype].ofindex;
int i = 0;
while (ObjFileList[i] != index) {
i++;
}

37
Source/objects.h

@ -12,6 +12,39 @@ DEVILUTION_BEGIN_NAMESPACE
extern "C" {
#endif
typedef struct ObjectStruct {
_object_id _otype;
Sint32 _ox;
Sint32 _oy;
bool _oLight;
Uint32 _oAnimFlag;
unsigned char *_oAnimData;
Sint32 _oAnimDelay; // Tick length of each frame in the current animation
Sint32 _oAnimCnt; // Increases by one each game tick, counting how close we are to _pAnimDelay
Sint32 _oAnimLen; // Number of frames in current animation
Sint32 _oAnimFrame; // Current frame of animation.
Sint32 _oAnimWidth;
Sint32 _oAnimWidth2;
bool _oDelFlag;
Uint8 _oBreak;
bool _oSolidFlag;
bool _oMissFlag;
Uint8 _oSelFlag;
bool _oPreFlag;
bool _oTrapFlag;
bool _oDoorFlag;
Sint32 _olid;
Sint32 _oRndSeed;
Sint32 _oVar1;
Sint32 _oVar2;
Sint32 _oVar3;
Sint32 _oVar4;
Sint32 _oVar5;
Sint32 _oVar6;
_speech_id _oVar7;
Sint32 _oVar8;
} ObjectStruct;
extern int objectactive[MAXOBJECTS];
extern int nobjects;
extern int objectavail[MAXOBJECTS];
@ -30,10 +63,10 @@ void SetBookMsg(int i, _speech_id msg);
void GetRndObjLoc(int randarea, int *xx, int *yy);
void AddMushPatch();
void AddSlainHero();
void objects_44D8C5(int ot, int v2, int ox, int oy);
void objects_44D8C5(_object_id ot, int v2, int ox, int oy);
void objects_44DA68(int a1, int a2);
void objects_454AF0(int a1, int a2, int a3);
void AddObject(int ot, int ox, int oy);
void AddObject(_object_id ot, int ox, int oy);
void Obj_Trap(int i);
void ProcessObjects();
void ObjSetMicro(int dx, int dy, int pn);

1
Source/pfile.cpp

@ -8,7 +8,6 @@
#include "all.h"
#include "paths.h"
#include "../3rdParty/Storm/Source/storm.h"
#include "../DiabloUI/diabloui.h"
#include "file_util.h"
DEVILUTION_BEGIN_NAMESPACE

1
Source/pfile.h

@ -7,6 +7,7 @@
#define __PFILE_H__
#include "player.h"
#include "../DiabloUI/diabloui.h"
DEVILUTION_BEGIN_NAMESPACE

9
Source/sound.h

@ -11,6 +11,15 @@ DEVILUTION_BEGIN_NAMESPACE
#ifdef __cplusplus
extern "C" {
#endif
typedef struct TSnd {
const char *sound_path;
/** Used for streamed audio */
HANDLE file_handle;
SoundSample *DSB;
Uint32 start_tc;
} TSnd;
extern BOOLEAN gbSndInited;
void snd_update(BOOL bStopAll);

106
Source/spelldat.cpp

@ -10,59 +10,59 @@ DEVILUTION_BEGIN_NAMESPACE
/** Data related to each spell ID. */
SpellData spelldata[] = {
// clang-format off
// sName, sManaCost, sType, sNameText, sSkillText, sBookLvl, sStaffLvl, sTargeted, sTownSpell, sMinInt, sSFX, sMissiles[3], sManaAdj, sMinMana, sStaffMin, sStaffMax, sBookCost, sStaffCost
{ SPL_NULL, 0, 0, NULL, NULL, 0, 0, FALSE, FALSE, 0, 0, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 },
{ SPL_FIREBOLT, 6, STYPE_FIRE, "Firebolt", "Firebolt", 1, 1, TRUE, FALSE, 15, IS_CAST2, { MIS_FIREBOLT, 0, 0 }, 1, 3, 40, 80, 1000, 50 },
{ SPL_HEAL, 5, STYPE_MAGIC, "Healing", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEAL, 0, 0 }, 3, 1, 20, 40, 1000, 50 },
{ SPL_LIGHTNING, 10, STYPE_LIGHTNING, "Lightning", NULL, 4, 3, TRUE, FALSE, 20, IS_CAST4, { MIS_LIGHTCTRL, 0, 0 }, 1, 6, 20, 60, 3000, 150 },
{ SPL_FLASH, 30, STYPE_LIGHTNING, "Flash", NULL, 5, 4, FALSE, FALSE, 33, IS_CAST4, { MIS_FLASH, MIS_FLASH2, 0 }, 2, 16, 20, 40, 7500, 500 },
{ SPL_IDENTIFY, 13, STYPE_MAGIC, "Identify", "Identify", -1, -1, FALSE, TRUE, 23, IS_CAST6, { MIS_IDENTIFY, 0, 0 }, 2, 1, 8, 12, 0, 100 },
{ SPL_FIREWALL, 28, STYPE_FIRE, "Fire Wall", NULL, 3, 2, TRUE, FALSE, 27, IS_CAST2, { MIS_FIREWALLC, 0, 0 }, 2, 16, 8, 16, 6000, 400 },
{ SPL_TOWN, 35, STYPE_MAGIC, "Town Portal", NULL, 3, 3, TRUE, FALSE, 20, IS_CAST6, { MIS_TOWN, 0, 0 }, 3, 18, 8, 12, 3000, 200 },
{ SPL_STONE, 60, STYPE_MAGIC, "Stone Curse", NULL, 6, 5, TRUE, FALSE, 51, IS_CAST2, { MIS_STONE, 0, 0 }, 3, 40, 8, 16, 12000, 800 },
{ SPL_INFRA, 40, STYPE_MAGIC, "Infravision", NULL, -1, -1, FALSE, FALSE, 36, IS_CAST8, { MIS_INFRA, 0, 0 }, 5, 20, 0, 0, 0, 600 },
{ SPL_RNDTELEPORT, 12, STYPE_MAGIC, "Phasing", NULL, 7, 6, FALSE, FALSE, 39, IS_CAST2, { MIS_RNDTELEPORT, 0, 0 }, 2, 4, 40, 80, 3500, 200 },
{ SPL_MANASHIELD, 33, STYPE_MAGIC, "Mana Shield", NULL, 6, 5, FALSE, FALSE, 25, IS_CAST2, { MIS_MANASHIELD, 0, 0 }, 0, 33, 4, 10, 16000, 1200 },
{ SPL_FIREBALL, 16, STYPE_FIRE, "Fireball", NULL, 8, 7, TRUE, FALSE, 48, IS_CAST2, { MIS_FIREBALL, 0, 0 }, 1, 10, 40, 80, 8000, 300 },
{ SPL_GUARDIAN, 50, STYPE_FIRE, "Guardian", NULL, 9, 8, TRUE, FALSE, 61, IS_CAST2, { MIS_GUARDIAN, 0, 0 }, 2, 30, 16, 32, 14000, 950 },
{ SPL_CHAIN, 30, STYPE_LIGHTNING, "Chain Lightning", NULL, 8, 7, FALSE, FALSE, 54, IS_CAST2, { MIS_CHAIN, 0, 0 }, 1, 18, 20, 60, 11000, 750 },
{ SPL_WAVE, 35, STYPE_FIRE, "Flame Wave", NULL, 9, 8, TRUE, FALSE, 54, IS_CAST2, { MIS_WAVE, 0, 0 }, 3, 20, 20, 40, 10000, 650 },
{ SPL_DOOMSERP, 0, STYPE_LIGHTNING, "Doom Serpents", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 },
{ SPL_BLODRIT, 0, STYPE_MAGIC, "Blood Ritual", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 },
{ SPL_NOVA, 60, STYPE_MAGIC, "Nova", NULL, 14, 10, FALSE, FALSE, 87, IS_CAST4, { MIS_NOVA, 0, 0 }, 3, 35, 16, 32, 21000, 1300 },
{ SPL_INVISIBIL, 0, STYPE_MAGIC, "Invisibility", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 },
{ SPL_FLAME, 11, STYPE_FIRE, "Inferno", NULL, 3, 2, TRUE, FALSE, 20, IS_CAST2, { MIS_FLAMEC, 0, 0 }, 1, 6, 20, 40, 2000, 100 },
{ SPL_GOLEM, 100, STYPE_FIRE, "Golem", NULL, 11, 9, FALSE, FALSE, 81, IS_CAST2, { MIS_GOLEM, 0, 0 }, 6, 60, 16, 32, 18000, 1100 },
{ SPL_BLODBOIL, 15, STYPE_MAGIC, "Rage", "Rage", -1, -1, FALSE, FALSE, 0, IS_CAST8, { MIS_BLODBOIL, 0, 0 }, 1, 1, 0, 0, 0, 0 },
{ SPL_TELEPORT, 35, STYPE_MAGIC, "Teleport", NULL, 14, 12, TRUE, FALSE, 105, IS_CAST6, { MIS_TELEPORT, 0, 0 }, 3, 15, 16, 32, 20000, 1250 },
{ SPL_APOCA, 150, STYPE_FIRE, "Apocalypse", NULL, 19, 15, FALSE, FALSE, 149, IS_CAST2, { MIS_APOCA, 0, 0 }, 6, 90, 8, 12, 30000, 2000 },
{ SPL_ETHEREALIZE, 100, STYPE_MAGIC, "Etherealize", NULL, -1, -1, FALSE, FALSE, 93, IS_CAST2, { MIS_ETHEREALIZE, 0, 0 }, 0, 100, 2, 6, 26000, 1600 },
{ SPL_REPAIR, 0, STYPE_MAGIC, "Item Repair", "Item Repair", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_REPAIR, 0, 0 }, 0, 0, 40, 80, 0, 0 },
{ SPL_RECHARGE, 0, STYPE_MAGIC, "Staff Recharge", "Staff Recharge", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_RECHARGE, 0, 0 }, 0, 0, 40, 80, 0, 0 },
{ SPL_DISARM, 0, STYPE_MAGIC, "Trap Disarm", "Trap Disarm", -1, -1, FALSE, FALSE, -1, IS_CAST6, { MIS_DISARM, 0, 0 }, 0, 0, 40, 80, 0, 0 },
{ SPL_ELEMENT, 35, STYPE_FIRE, "Elemental", NULL, 8, 6, FALSE, FALSE, 68, IS_CAST2, { MIS_ELEMENT, 0, 0 }, 2, 20, 20, 60, 10500, 700 },
{ SPL_CBOLT, 6, STYPE_LIGHTNING, "Charged Bolt", NULL, 1, 1, TRUE, FALSE, 25, IS_CAST2, { MIS_CBOLT, 0, 0 }, 1, 6, 40, 80, 1000, 50 },
{ SPL_HBOLT, 7, STYPE_MAGIC, "Holy Bolt", NULL, 1, 1, TRUE, FALSE, 20, IS_CAST2, { MIS_HBOLT, 0, 0 }, 1, 3, 40, 80, 1000, 50 },
{ SPL_RESURRECT, 20, STYPE_MAGIC, "Resurrect", NULL, -1, 5, FALSE, TRUE, 30, IS_CAST8, { MIS_RESURRECT, 0, 0 }, 0, 20, 4, 10, 4000, 250 },
{ SPL_TELEKINESIS, 15, STYPE_MAGIC, "Telekinesis", NULL, 2, 2, FALSE, FALSE, 33, IS_CAST2, { MIS_TELEKINESIS, 0, 0 }, 2, 8, 20, 40, 2500, 200 },
{ SPL_HEALOTHER, 5, STYPE_MAGIC, "Heal Other", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEALOTHER, 0, 0 }, 3, 1, 20, 40, 1000, 50 },
{ SPL_FLARE, 25, STYPE_MAGIC, "Blood Star", NULL, 14, 13, FALSE, FALSE, 70, IS_CAST2, { MIS_FLARE, 0, 0 }, 2, 14, 20, 60, 27500, 1800 },
{ SPL_BONESPIRIT, 24, STYPE_MAGIC, "Bone Spirit", NULL, 9, 7, FALSE, FALSE, 34, IS_CAST2, { MIS_BONESPIRIT, 0, 0 }, 1, 12, 20, 60, 11500, 800 },
{ SPL_MANA, 255, STYPE_MAGIC, "Mana", NULL, -1, 5, FALSE, TRUE, 17, IS_CAST8, { MIS_MANA, 0, 0 }, 3, 1, 12, 24, 1000, 50 },
{ SPL_MAGI, 255, STYPE_MAGIC, "the Magi", NULL, -1, 20, FALSE, TRUE, 45, IS_CAST8, { MIS_MAGI, 0, 0 }, 3, 1, 15, 30, 100000, 200 },
{ SPL_JESTER, 255, STYPE_MAGIC, "the Jester", NULL, -1, 4, TRUE, FALSE, 30, IS_CAST8, { MIS_JESTER, 0, 0 }, 3, 1, 15, 30, 100000, 200 },
{ SPL_LIGHTWALL, 28, STYPE_LIGHTNING, "Lightning Wall", NULL, 3, 2, TRUE, FALSE, 27, IS_CAST4, { MIS_LIGHTNINGWALL, 0, 0 }, 2, 16, 8, 16, 6000, 400 },
{ SPL_IMMOLAT, 60, STYPE_FIRE, "Immolation", NULL, 14, 10, FALSE, FALSE, 87, IS_CAST2, { MIS_IMMOLATION, 0, 0 }, 3, 35, 16, 32, 21000, 1300 },
{ SPL_WARP, 35, STYPE_MAGIC, "Warp", NULL, 3, 3, FALSE, FALSE, 25, IS_CAST6, { MIS_WARP, 0, 0 }, 3, 18, 8, 12, 3000, 200 },
{ SPL_REFLECT, 35, STYPE_MAGIC, "Reflect", NULL, 3, 3, FALSE, FALSE, 25, IS_CAST6, { MIS_REFLECT, 0, 0 }, 3, 15, 8, 12, 3000, 200 },
{ SPL_BERSERK, 35, STYPE_MAGIC, "Berserk", NULL, 3, 3, TRUE, FALSE, 35, IS_CAST6, { MIS_BERSERK, 0, 0 }, 3, 15, 8, 12, 3000, 200 },
{ SPL_FIRERING, 28, STYPE_FIRE, "Ring of Fire", NULL, 5, 5, FALSE, FALSE, 27, IS_CAST2, { MIS_FIRERING, 0, 0 }, 2, 16, 8, 16, 6000, 400 },
{ SPL_SEARCH, 15, STYPE_MAGIC, "Search", "Search", 1, 3, FALSE, FALSE, 25, IS_CAST6, { MIS_SEARCH, 0, 0 }, 1, 1, 8, 12, 3000, 200 },
{ SPL_RUNEFIRE, 255, STYPE_MAGIC, "Rune of Fire", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNEFIRE, 0, 0 }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNELIGHT, 255, STYPE_MAGIC, "Rune of Light", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNELIGHT, 0, 0 }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNENOVA, 255, STYPE_MAGIC, "Rune of Nova", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNENOVA, 0, 0 }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNEIMMOLAT, 255, STYPE_MAGIC, "Rune of Immolation", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNEIMMOLAT, 0, 0 }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNESTONE, 255, STYPE_MAGIC, "Rune of Stone", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNESTONE, 0, 0 }, 1, 10, 40, 80, 8000, 300 },
// sName, sManaCost, sType, sNameText, sSkillText, sBookLvl, sStaffLvl, sTargeted, sTownSpell, sMinInt, sSFX, sMissiles[3], sManaAdj, sMinMana, sStaffMin, sStaffMax, sBookCost, sStaffCost
{ SPL_NULL, 0, STYPE_FIRE, NULL, NULL, 0, 0, FALSE, FALSE, 0, SFX_NONE, { MIS_NULL, MIS_NULL, MIS_NULL }, 0, 0, 40, 80, 0, 0 },
{ SPL_FIREBOLT, 6, STYPE_FIRE, "Firebolt", "Firebolt", 1, 1, TRUE, FALSE, 15, IS_CAST2, { MIS_FIREBOLT, MIS_NULL, MIS_NULL }, 1, 3, 40, 80, 1000, 50 },
{ SPL_HEAL, 5, STYPE_MAGIC, "Healing", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEAL, MIS_NULL, MIS_NULL }, 3, 1, 20, 40, 1000, 50 },
{ SPL_LIGHTNING, 10, STYPE_LIGHTNING, "Lightning", NULL, 4, 3, TRUE, FALSE, 20, IS_CAST4, { MIS_LIGHTCTRL, MIS_NULL, MIS_NULL }, 1, 6, 20, 60, 3000, 150 },
{ SPL_FLASH, 30, STYPE_LIGHTNING, "Flash", NULL, 5, 4, FALSE, FALSE, 33, IS_CAST4, { MIS_FLASH, MIS_FLASH2, MIS_NULL }, 2, 16, 20, 40, 7500, 500 },
{ SPL_IDENTIFY, 13, STYPE_MAGIC, "Identify", "Identify", -1, -1, FALSE, TRUE, 23, IS_CAST6, { MIS_IDENTIFY, MIS_NULL, MIS_NULL }, 2, 1, 8, 12, 0, 100 },
{ SPL_FIREWALL, 28, STYPE_FIRE, "Fire Wall", NULL, 3, 2, TRUE, FALSE, 27, IS_CAST2, { MIS_FIREWALLC, MIS_NULL, MIS_NULL }, 2, 16, 8, 16, 6000, 400 },
{ SPL_TOWN, 35, STYPE_MAGIC, "Town Portal", NULL, 3, 3, TRUE, FALSE, 20, IS_CAST6, { MIS_TOWN, MIS_NULL, MIS_NULL }, 3, 18, 8, 12, 3000, 200 },
{ SPL_STONE, 60, STYPE_MAGIC, "Stone Curse", NULL, 6, 5, TRUE, FALSE, 51, IS_CAST2, { MIS_STONE, MIS_NULL, MIS_NULL }, 3, 40, 8, 16, 12000, 800 },
{ SPL_INFRA, 40, STYPE_MAGIC, "Infravision", NULL, -1, -1, FALSE, FALSE, 36, IS_CAST8, { MIS_INFRA, MIS_NULL, MIS_NULL }, 5, 20, 0, 0, 0, 600 },
{ SPL_RNDTELEPORT, 12, STYPE_MAGIC, "Phasing", NULL, 7, 6, FALSE, FALSE, 39, IS_CAST2, { MIS_RNDTELEPORT, MIS_NULL, MIS_NULL }, 2, 4, 40, 80, 3500, 200 },
{ SPL_MANASHIELD, 33, STYPE_MAGIC, "Mana Shield", NULL, 6, 5, FALSE, FALSE, 25, IS_CAST2, { MIS_MANASHIELD, MIS_NULL, MIS_NULL }, 0, 33, 4, 10, 16000, 1200 },
{ SPL_FIREBALL, 16, STYPE_FIRE, "Fireball", NULL, 8, 7, TRUE, FALSE, 48, IS_CAST2, { MIS_FIREBALL, MIS_NULL, MIS_NULL }, 1, 10, 40, 80, 8000, 300 },
{ SPL_GUARDIAN, 50, STYPE_FIRE, "Guardian", NULL, 9, 8, TRUE, FALSE, 61, IS_CAST2, { MIS_GUARDIAN, MIS_NULL, MIS_NULL }, 2, 30, 16, 32, 14000, 950 },
{ SPL_CHAIN, 30, STYPE_LIGHTNING, "Chain Lightning", NULL, 8, 7, FALSE, FALSE, 54, IS_CAST2, { MIS_CHAIN, MIS_NULL, MIS_NULL }, 1, 18, 20, 60, 11000, 750 },
{ SPL_WAVE, 35, STYPE_FIRE, "Flame Wave", NULL, 9, 8, TRUE, FALSE, 54, IS_CAST2, { MIS_WAVE, MIS_NULL, MIS_NULL }, 3, 20, 20, 40, 10000, 650 },
{ SPL_DOOMSERP, 0, STYPE_LIGHTNING, "Doom Serpents", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { MIS_NULL, MIS_NULL, MIS_NULL }, 0, 0, 40, 80, 0, 0 },
{ SPL_BLODRIT, 0, STYPE_MAGIC, "Blood Ritual", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { MIS_NULL, MIS_NULL, MIS_NULL }, 0, 0, 40, 80, 0, 0 },
{ SPL_NOVA, 60, STYPE_MAGIC, "Nova", NULL, 14, 10, FALSE, FALSE, 87, IS_CAST4, { MIS_NOVA, MIS_NULL, MIS_NULL }, 3, 35, 16, 32, 21000, 1300 },
{ SPL_INVISIBIL, 0, STYPE_MAGIC, "Invisibility", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { MIS_NULL, MIS_NULL, MIS_NULL }, 0, 0, 40, 80, 0, 0 },
{ SPL_FLAME, 11, STYPE_FIRE, "Inferno", NULL, 3, 2, TRUE, FALSE, 20, IS_CAST2, { MIS_FLAMEC, MIS_NULL, MIS_NULL }, 1, 6, 20, 40, 2000, 100 },
{ SPL_GOLEM, 100, STYPE_FIRE, "Golem", NULL, 11, 9, FALSE, FALSE, 81, IS_CAST2, { MIS_GOLEM, MIS_NULL, MIS_NULL }, 6, 60, 16, 32, 18000, 1100 },
{ SPL_BLODBOIL, 15, STYPE_MAGIC, "Rage", "Rage", -1, -1, FALSE, FALSE, 0, IS_CAST8, { MIS_BLODBOIL, MIS_NULL, MIS_NULL }, 1, 1, 0, 0, 0, 0 },
{ SPL_TELEPORT, 35, STYPE_MAGIC, "Teleport", NULL, 14, 12, TRUE, FALSE, 105, IS_CAST6, { MIS_TELEPORT, MIS_NULL, MIS_NULL }, 3, 15, 16, 32, 20000, 1250 },
{ SPL_APOCA, 150, STYPE_FIRE, "Apocalypse", NULL, 19, 15, FALSE, FALSE, 149, IS_CAST2, { MIS_APOCA, MIS_NULL, MIS_NULL }, 6, 90, 8, 12, 30000, 2000 },
{ SPL_ETHEREALIZE, 100, STYPE_MAGIC, "Etherealize", NULL, -1, -1, FALSE, FALSE, 93, IS_CAST2, { MIS_ETHEREALIZE, MIS_NULL, MIS_NULL }, 0, 100, 2, 6, 26000, 1600 },
{ SPL_REPAIR, 0, STYPE_MAGIC, "Item Repair", "Item Repair", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_REPAIR, MIS_NULL, MIS_NULL }, 0, 0, 40, 80, 0, 0 },
{ SPL_RECHARGE, 0, STYPE_MAGIC, "Staff Recharge", "Staff Recharge", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_RECHARGE, MIS_NULL, MIS_NULL }, 0, 0, 40, 80, 0, 0 },
{ SPL_DISARM, 0, STYPE_MAGIC, "Trap Disarm", "Trap Disarm", -1, -1, FALSE, FALSE, -1, IS_CAST6, { MIS_DISARM, MIS_NULL, MIS_NULL }, 0, 0, 40, 80, 0, 0 },
{ SPL_ELEMENT, 35, STYPE_FIRE, "Elemental", NULL, 8, 6, FALSE, FALSE, 68, IS_CAST2, { MIS_ELEMENT, MIS_NULL, MIS_NULL }, 2, 20, 20, 60, 10500, 700 },
{ SPL_CBOLT, 6, STYPE_LIGHTNING, "Charged Bolt", NULL, 1, 1, TRUE, FALSE, 25, IS_CAST2, { MIS_CBOLT, MIS_NULL, MIS_NULL }, 1, 6, 40, 80, 1000, 50 },
{ SPL_HBOLT, 7, STYPE_MAGIC, "Holy Bolt", NULL, 1, 1, TRUE, FALSE, 20, IS_CAST2, { MIS_HBOLT, MIS_NULL, MIS_NULL }, 1, 3, 40, 80, 1000, 50 },
{ SPL_RESURRECT, 20, STYPE_MAGIC, "Resurrect", NULL, -1, 5, FALSE, TRUE, 30, IS_CAST8, { MIS_RESURRECT, MIS_NULL, MIS_NULL }, 0, 20, 4, 10, 4000, 250 },
{ SPL_TELEKINESIS, 15, STYPE_MAGIC, "Telekinesis", NULL, 2, 2, FALSE, FALSE, 33, IS_CAST2, { MIS_TELEKINESIS, MIS_NULL, MIS_NULL }, 2, 8, 20, 40, 2500, 200 },
{ SPL_HEALOTHER, 5, STYPE_MAGIC, "Heal Other", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEALOTHER, MIS_NULL, MIS_NULL }, 3, 1, 20, 40, 1000, 50 },
{ SPL_FLARE, 25, STYPE_MAGIC, "Blood Star", NULL, 14, 13, FALSE, FALSE, 70, IS_CAST2, { MIS_FLARE, MIS_NULL, MIS_NULL }, 2, 14, 20, 60, 27500, 1800 },
{ SPL_BONESPIRIT, 24, STYPE_MAGIC, "Bone Spirit", NULL, 9, 7, FALSE, FALSE, 34, IS_CAST2, { MIS_BONESPIRIT, MIS_NULL, MIS_NULL }, 1, 12, 20, 60, 11500, 800 },
{ SPL_MANA, 255, STYPE_MAGIC, "Mana", NULL, -1, 5, FALSE, TRUE, 17, IS_CAST8, { MIS_MANA, MIS_NULL, MIS_NULL }, 3, 1, 12, 24, 1000, 50 },
{ SPL_MAGI, 255, STYPE_MAGIC, "the Magi", NULL, -1, 20, FALSE, TRUE, 45, IS_CAST8, { MIS_MAGI, MIS_NULL, MIS_NULL }, 3, 1, 15, 30, 100000, 200 },
{ SPL_JESTER, 255, STYPE_MAGIC, "the Jester", NULL, -1, 4, TRUE, FALSE, 30, IS_CAST8, { MIS_JESTER, MIS_NULL, MIS_NULL }, 3, 1, 15, 30, 100000, 200 },
{ SPL_LIGHTWALL, 28, STYPE_LIGHTNING, "Lightning Wall", NULL, 3, 2, TRUE, FALSE, 27, IS_CAST4, { MIS_LIGHTNINGWALL, MIS_NULL, MIS_NULL }, 2, 16, 8, 16, 6000, 400 },
{ SPL_IMMOLAT, 60, STYPE_FIRE, "Immolation", NULL, 14, 10, FALSE, FALSE, 87, IS_CAST2, { MIS_IMMOLATION, MIS_NULL, MIS_NULL }, 3, 35, 16, 32, 21000, 1300 },
{ SPL_WARP, 35, STYPE_MAGIC, "Warp", NULL, 3, 3, FALSE, FALSE, 25, IS_CAST6, { MIS_WARP, MIS_NULL, MIS_NULL }, 3, 18, 8, 12, 3000, 200 },
{ SPL_REFLECT, 35, STYPE_MAGIC, "Reflect", NULL, 3, 3, FALSE, FALSE, 25, IS_CAST6, { MIS_REFLECT, MIS_NULL, MIS_NULL }, 3, 15, 8, 12, 3000, 200 },
{ SPL_BERSERK, 35, STYPE_MAGIC, "Berserk", NULL, 3, 3, TRUE, FALSE, 35, IS_CAST6, { MIS_BERSERK, MIS_NULL, MIS_NULL }, 3, 15, 8, 12, 3000, 200 },
{ SPL_FIRERING, 28, STYPE_FIRE, "Ring of Fire", NULL, 5, 5, FALSE, FALSE, 27, IS_CAST2, { MIS_FIRERING, MIS_NULL, MIS_NULL }, 2, 16, 8, 16, 6000, 400 },
{ SPL_SEARCH, 15, STYPE_MAGIC, "Search", "Search", 1, 3, FALSE, FALSE, 25, IS_CAST6, { MIS_SEARCH, MIS_NULL, MIS_NULL }, 1, 1, 8, 12, 3000, 200 },
{ SPL_RUNEFIRE, 255, STYPE_MAGIC, "Rune of Fire", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNEFIRE, MIS_NULL, MIS_NULL }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNELIGHT, 255, STYPE_MAGIC, "Rune of Light", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNELIGHT, MIS_NULL, MIS_NULL }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNENOVA, 255, STYPE_MAGIC, "Rune of Nova", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNENOVA, MIS_NULL, MIS_NULL }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNEIMMOLAT, 255, STYPE_MAGIC, "Rune of Immolation", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNEIMMOLAT, MIS_NULL, MIS_NULL }, 1, 10, 40, 80, 8000, 300 },
{ SPL_RUNESTONE, 255, STYPE_MAGIC, "Rune of Stone", NULL, -1, -1, TRUE, FALSE, 48, IS_CAST8, { MIS_RUNESTONE, MIS_NULL, MIS_NULL }, 1, 10, 40, 80, 8000, 300 },
// clang-format on
};

196
Source/spelldat.h

@ -12,6 +12,202 @@ DEVILUTION_BEGIN_NAMESPACE
extern "C" {
#endif
typedef enum spell_id {
SPL_NULL,
SPL_FIREBOLT,
SPL_HEAL,
SPL_LIGHTNING,
SPL_FLASH,
SPL_IDENTIFY,
SPL_FIREWALL,
SPL_TOWN,
SPL_STONE,
SPL_INFRA,
SPL_RNDTELEPORT,
SPL_MANASHIELD,
SPL_FIREBALL,
SPL_GUARDIAN,
SPL_CHAIN,
SPL_WAVE,
SPL_DOOMSERP,
SPL_BLODRIT,
SPL_NOVA,
SPL_INVISIBIL,
SPL_FLAME,
SPL_GOLEM,
SPL_BLODBOIL,
SPL_TELEPORT,
SPL_APOCA,
SPL_ETHEREALIZE,
SPL_REPAIR,
SPL_RECHARGE,
SPL_DISARM,
SPL_ELEMENT,
SPL_CBOLT,
SPL_HBOLT,
SPL_RESURRECT,
SPL_TELEKINESIS,
SPL_HEALOTHER,
SPL_FLARE,
SPL_BONESPIRIT,
SPL_LASTDIABLO = SPL_BONESPIRIT,
SPL_MANA,
SPL_MAGI,
SPL_JESTER,
SPL_LIGHTWALL,
SPL_IMMOLAT,
SPL_WARP,
SPL_REFLECT,
SPL_BERSERK,
SPL_FIRERING,
SPL_SEARCH,
SPL_RUNEFIRE,
SPL_RUNELIGHT,
SPL_RUNENOVA,
SPL_RUNEIMMOLAT,
SPL_RUNESTONE,
SPL_INVALID = -1,
} spell_id;
typedef enum magic_type {
STYPE_FIRE,
STYPE_LIGHTNING,
STYPE_MAGIC,
} magic_type;
typedef enum missile_id {
MIS_ARROW,
MIS_FIREBOLT,
MIS_GUARDIAN,
MIS_RNDTELEPORT,
MIS_LIGHTBALL,
MIS_FIREWALL,
MIS_FIREBALL,
MIS_LIGHTCTRL,
MIS_LIGHTNING,
MIS_MISEXP,
MIS_TOWN,
MIS_FLASH,
MIS_FLASH2,
MIS_MANASHIELD,
MIS_FIREMOVE,
MIS_CHAIN,
MIS_SENTINAL,
MIS_BLODSTAR,
MIS_BONE,
MIS_METLHIT,
MIS_RHINO,
MIS_MAGMABALL,
MIS_LIGHTCTRL2,
MIS_LIGHTNING2,
MIS_FLARE,
MIS_MISEXP2,
MIS_TELEPORT,
MIS_FARROW,
MIS_DOOMSERP,
MIS_FIREWALLA,
MIS_STONE,
MIS_NULL_1F,
MIS_INVISIBL,
MIS_GOLEM,
MIS_ETHEREALIZE,
MIS_BLODBUR,
MIS_BOOM,
MIS_HEAL,
MIS_FIREWALLC,
MIS_INFRA,
MIS_IDENTIFY,
MIS_WAVE,
MIS_NOVA,
MIS_BLODBOIL,
MIS_APOCA,
MIS_REPAIR,
MIS_RECHARGE,
MIS_DISARM,
MIS_FLAME,
MIS_FLAMEC,
MIS_FIREMAN,
MIS_KRULL,
MIS_CBOLT,
MIS_HBOLT,
MIS_RESURRECT,
MIS_TELEKINESIS,
MIS_LARROW,
MIS_ACID,
MIS_MISEXP3,
MIS_ACIDPUD,
MIS_HEALOTHER,
MIS_ELEMENT,
MIS_RESURRECTBEAM,
MIS_BONESPIRIT,
MIS_WEAPEXP,
MIS_RPORTAL,
MIS_BOOM2,
MIS_DIABAPOCA,
MIS_MANA,
MIS_MAGI,
MIS_LIGHTWALL,
MIS_LIGHTNINGWALL,
MIS_IMMOLATION,
MIS_SPECARROW,
MIS_FIRENOVA,
MIS_LIGHTARROW,
MIS_CBOLTARROW,
MIS_HBOLTARROW,
MIS_WARP,
MIS_REFLECT,
MIS_BERSERK,
MIS_FIRERING,
MIS_STEALPOTS,
MIS_MANATRAP,
MIS_LIGHTRING,
MIS_SEARCH,
MIS_FLASHFR,
MIS_FLASHBK,
MIS_IMMOLATION2,
MIS_RUNEFIRE,
MIS_RUNELIGHT,
MIS_RUNENOVA,
MIS_RUNEIMMOLAT,
MIS_RUNESTONE,
MIS_HIVEEXP,
MIS_HORKDMN,
MIS_JESTER,
MIS_HIVEEXP2,
MIS_LICH,
MIS_PSYCHORB,
MIS_NECROMORB,
MIS_ARCHLICH,
MIS_BONEDEMON,
MIS_EXYEL2,
MIS_EXRED3,
MIS_EXBL2,
MIS_EXBL3,
MIS_EXORA1,
MIS_NULL = -1,
} missile_id;
typedef struct SpellData {
spell_id sName;
Uint8 sManaCost;
magic_type sType;
const char *sNameText;
const char *sSkillText;
Sint32 sBookLvl;
Sint32 sStaffLvl;
bool sTargeted;
bool sTownSpell;
Sint32 sMinInt;
_sfx_id sSFX;
missile_id sMissiles[3];
Uint8 sManaAdj;
Uint8 sMinMana;
Sint32 sStaffMin;
Sint32 sStaffMax;
Sint32 sBookCost;
Sint32 sStaffCost;
} SpellData;
extern SpellData spelldata[];
#ifdef __cplusplus

2
Source/spells.cpp

@ -190,7 +190,7 @@ void CastSpell(int id, int spl, int sx, int sy, int dx, int dy, int spllvl)
dir = plr[id]._pVar3;
}
for (int i = 0; spelldata[spl].sMissiles[i] != 0 && i < 3; i++) {
for (int i = 0; spelldata[spl].sMissiles[i] != MIS_NULL && i < 3; i++) {
AddMissile(sx, sy, dx, dy, dir, spelldata[spl].sMissiles[i], TARGET_MONSTERS, id, 0, spllvl);
}

784
Source/textdat.cpp

File diff suppressed because it is too large Load Diff

6
Source/textdat.h

@ -12,6 +12,12 @@ DEVILUTION_BEGIN_NAMESPACE
extern "C" {
#endif
typedef struct TextDataStruct {
const char *txtstr;
bool scrlltxt;
_sfx_id sfxnr;
} TextDataStruct;
extern const TextDataStruct alltext[];
#ifdef __cplusplus

31
Source/themes.cpp

@ -25,7 +25,7 @@ BOOL bFountainFlag;
BOOL bCrossFlag;
/** Specifies the set of special theme IDs from which one will be selected at random. */
int ThemeGood[4] = { THEME_GOATSHRINE, THEME_SHRINE, THEME_SKELROOM, THEME_LIBRARY };
theme_id ThemeGood[4] = { THEME_GOATSHRINE, THEME_SHRINE, THEME_SKELROOM, THEME_LIBRARY };
/** Specifies a 5x5 area to fit theme objects. */
int trm5x[] = {
-2, -1, 0, 1, 2,
@ -218,7 +218,7 @@ BOOL TFit_Obj3(int t)
return FALSE;
}
BOOL CheckThemeReqs(int t)
BOOL CheckThemeReqs(theme_id t)
{
BOOL rv;
@ -271,7 +271,7 @@ BOOL CheckThemeReqs(int t)
return rv;
}
BOOL SpecialThemeFit(int i, int t)
static BOOL SpecialThemeFit(int i, theme_id t)
{
BOOL rv;
@ -397,7 +397,7 @@ BOOL CheckThemeRoom(int tv)
void InitThemes()
{
int i, j;
int i;
zharlib = -1;
numthemes = 0;
@ -421,10 +421,9 @@ void InitThemes()
for (i = 0; i < 256 && numthemes < MAXTHEMES; i++) {
if (CheckThemeRoom(i)) {
themes[numthemes].ttval = i;
for (j = ThemeGood[random_(0, 4)];; j = random_(0, 17)) {
if (SpecialThemeFit(numthemes, j)) {
break;
}
theme_id j = ThemeGood[random_(0, 4)];
while (!SpecialThemeFit(numthemes, j)) {
j = (theme_id)random_(0, 17);
}
themes[numthemes].ttype = j;
numthemes++;
@ -435,7 +434,7 @@ void InitThemes()
for (i = 0; i < themeCount; i++)
themes[i].ttype = THEME_NONE;
if (QuestStatus(Q_ZHAR)) {
for (j = 0; j < themeCount; j++) {
for (int j = 0; j < themeCount; j++) {
themes[j].ttval = themeLoc[j].ttval;
if (SpecialThemeFit(j, THEME_LIBRARY)) {
themes[j].ttype = THEME_LIBRARY;
@ -447,10 +446,9 @@ void InitThemes()
for (i = 0; i < themeCount; i++) {
if (themes[i].ttype == THEME_NONE) {
themes[i].ttval = themeLoc[i].ttval;
for (j = ThemeGood[random_(0, 4)];; j = random_(0, 17)) {
if (SpecialThemeFit(i, j)) {
break;
}
theme_id j = ThemeGood[random_(0, 4)];
while (!SpecialThemeFit(i, j)) {
j = (theme_id)random_(0, 17);
}
themes[i].ttype = j;
}
@ -523,7 +521,7 @@ void PlaceThemeMonsts(int t, int f)
*/
void Theme_Barrel(int t)
{
int xp, yp, r;
int xp, yp;
char barrnd[4] = { 2, 6, 4, 8 };
char monstrnd[4] = { 5, 7, 3, 9 };
@ -531,9 +529,8 @@ void Theme_Barrel(int t)
for (xp = 0; xp < MAXDUNX; xp++) {
if (dTransVal[xp][yp] == themes[t].ttval && !nSolidTable[dPiece[xp][yp]]) {
if (random_(0, barrnd[leveltype - 1]) == 0) {
if (random_(0, barrnd[leveltype - 1]) == 0) {
r = OBJ_BARREL;
} else {
_object_id r = OBJ_BARREL;
if (random_(0, barrnd[leveltype - 1]) != 0) {
r = OBJ_BARRELEX;
}
AddObject(r, xp, yp);

5
Source/themes.h

@ -12,6 +12,11 @@ DEVILUTION_BEGIN_NAMESPACE
extern "C" {
#endif
typedef struct ThemeStruct {
theme_id ttype;
Sint32 ttval;
} ThemeStruct;
extern int numthemes;
extern BOOL armorFlag;
extern BOOL weaponFlag;

2
SourceX/storm/storm.cpp

@ -131,7 +131,7 @@ BOOL SBmpLoadImage(const char *pszFileName, SDL_Color *pPalette, BYTE *pBuffer,
{
HANDLE hFile;
size_t size;
PCXHEADER pcxhdr;
PCXHeader pcxhdr;
BYTE paldata[256][3];
BYTE *dataPtr, *fileBuffer;
BYTE byte;

346
enums.h

@ -1035,6 +1035,7 @@ typedef enum _sfx_id {
TSFX_TRADER1,
IS_CROPEN,
IS_CRCLOS,
SFX_NONE = -1,
} _sfx_id;
typedef enum sfx_flag {
@ -1048,117 +1049,6 @@ typedef enum sfx_flag {
sfx_HELLFIRE = 0x80,
} sfx_flag;
typedef enum missile_id {
MIS_ARROW = 0x0,
MIS_FIREBOLT = 0x1,
MIS_GUARDIAN = 0x2,
MIS_RNDTELEPORT = 0x3,
MIS_LIGHTBALL = 0x4,
MIS_FIREWALL = 0x5,
MIS_FIREBALL = 0x6,
MIS_LIGHTCTRL = 0x7,
MIS_LIGHTNING = 0x8,
MIS_MISEXP = 0x9,
MIS_TOWN = 0xA,
MIS_FLASH = 0xB,
MIS_FLASH2 = 0xC,
MIS_MANASHIELD = 0xD,
MIS_FIREMOVE = 0xE,
MIS_CHAIN = 0xF,
MIS_SENTINAL = 0x10, // TODO: Check beta
MIS_BLODSTAR = 0x11, // TODO: Check beta
MIS_BONE = 0x12, // TODO: Check beta
MIS_METLHIT = 0x13, // TODO: Check beta
MIS_RHINO = 0x14,
MIS_MAGMABALL = 0x15,
MIS_LIGHTCTRL2 = 0x16,
MIS_LIGHTNING2 = 0x17,
MIS_FLARE = 0x18,
MIS_MISEXP2 = 0x19,
MIS_TELEPORT = 0x1A,
MIS_FARROW = 0x1B,
MIS_DOOMSERP = 0x1C,
MIS_FIREWALLA = 0x1D, // TODO: Check beta
MIS_STONE = 0x1E,
MIS_NULL_1F = 0x1F,
MIS_INVISIBL = 0x20,
MIS_GOLEM = 0x21,
MIS_ETHEREALIZE = 0x22,
MIS_BLODBUR = 0x23, // TODO: Check beta
MIS_BOOM = 0x24,
MIS_HEAL = 0x25,
MIS_FIREWALLC = 0x26,
MIS_INFRA = 0x27,
MIS_IDENTIFY = 0x28,
MIS_WAVE = 0x29,
MIS_NOVA = 0x2A,
MIS_BLODBOIL = 0x2B,
MIS_APOCA = 0x2C,
MIS_REPAIR = 0x2D,
MIS_RECHARGE = 0x2E,
MIS_DISARM = 0x2F,
MIS_FLAME = 0x30,
MIS_FLAMEC = 0x31,
MIS_FIREMAN = 0x32, // TODO: Check beta
MIS_KRULL = 0x33, // TODO: Check beta
MIS_CBOLT = 0x34,
MIS_HBOLT = 0x35,
MIS_RESURRECT = 0x36,
MIS_TELEKINESIS = 0x37,
MIS_LARROW = 0x38,
MIS_ACID = 0x39,
MIS_MISEXP3 = 0x3A,
MIS_ACIDPUD = 0x3B,
MIS_HEALOTHER = 0x3C,
MIS_ELEMENT = 0x3D,
MIS_RESURRECTBEAM = 0x3E,
MIS_BONESPIRIT = 0x3F,
MIS_WEAPEXP = 0x40,
MIS_RPORTAL = 0x41,
MIS_BOOM2 = 0x42,
MIS_DIABAPOCA = 0x43,
MIS_MANA = 0x44,
MIS_MAGI = 0x45,
MIS_LIGHTWALL = 0x46,
MIS_LIGHTNINGWALL = 0x47,
MIS_IMMOLATION = 0x48,
MIS_SPECARROW = 0x49,
MIS_FIRENOVA = 0x4A,
MIS_LIGHTARROW = 0x4B,
MIS_CBOLTARROW = 0x4C,
MIS_HBOLTARROW = 0x4D,
MIS_WARP = 0x4E,
MIS_REFLECT = 0x4F,
MIS_BERSERK = 0x50,
MIS_FIRERING = 0x51,
MIS_STEALPOTS = 0x52,
MIS_MANATRAP = 0x53,
MIS_LIGHTRING = 0x54,
MIS_SEARCH = 0x55,
MIS_FLASHFR = 0x56,
MIS_FLASHBK = 0x57,
MIS_IMMOLATION2 = 0x58,
MIS_RUNEFIRE = 0x59,
MIS_RUNELIGHT = 0x5A,
MIS_RUNENOVA = 0x5B,
MIS_RUNEIMMOLAT = 0x5C,
MIS_RUNESTONE = 0x5D,
MIS_HIVEEXP = 0x5E,
MIS_HORKDMN = 0x5F,
MIS_JESTER = 0x60,
MIS_HIVEEXP2 = 0x61,
MIS_LICH = 0x62,
MIS_PSYCHORB = 0x63,
MIS_NECROMORB = 0x64,
MIS_ARCHLICH = 0x65,
MIS_BONEDEMON = 0x66,
MIS_EXYEL2 = 0x67,
MIS_EXRED3 = 0x68,
MIS_EXBL2 = 0x69,
MIS_EXBL3 = 0x6A,
MIS_EXORA1 = 0x6B,
} missile_id;
typedef enum missile_graphic_id {
MFILE_ARROWS,
MFILE_FIREBA,
@ -1678,65 +1568,6 @@ typedef enum _speech_id {
TEXT_NONE = -1,
} _speech_id;
typedef enum object_graphic_id {
OFILE_L1BRAZ = 0x0,
OFILE_L1DOORS = 0x1,
OFILE_LEVER = 0x2,
OFILE_CHEST1 = 0x3,
OFILE_CHEST2 = 0x4,
OFILE_BANNER = 0x5,
OFILE_SKULPILE = 0x6,
OFILE_SKULFIRE = 0x7,
OFILE_SKULSTIK = 0x8,
OFILE_CRUXSK1 = 0x9,
OFILE_CRUXSK2 = 0xA,
OFILE_CRUXSK3 = 0xB,
OFILE_BOOK1 = 0xC,
OFILE_BOOK2 = 0xD,
OFILE_ROCKSTAN = 0xE,
OFILE_ANGEL = 0xF,
OFILE_CHEST3 = 0x10,
OFILE_BURNCROS = 0x11,
OFILE_CANDLE2 = 0x12,
OFILE_NUDE2 = 0x13,
OFILE_SWITCH4 = 0x14,
OFILE_TNUDEM = 0x15,
OFILE_TNUDEW = 0x16,
OFILE_TSOUL = 0x17,
OFILE_L2DOORS = 0x18,
OFILE_WTORCH4 = 0x19,
OFILE_WTORCH3 = 0x1A,
OFILE_SARC = 0x1B,
OFILE_FLAME1 = 0x1C,
OFILE_PRSRPLT1 = 0x1D,
OFILE_TRAPHOLE = 0x1E,
OFILE_MINIWATR = 0x1F,
OFILE_WTORCH2 = 0x20,
OFILE_WTORCH1 = 0x21,
OFILE_BCASE = 0x22,
OFILE_BSHELF = 0x23,
OFILE_WEAPSTND = 0x24,
OFILE_BARREL = 0x25,
OFILE_BARRELEX = 0x26,
OFILE_LSHRINEG = 0x27,
OFILE_RSHRINEG = 0x28,
OFILE_BLOODFNT = 0x29,
OFILE_DECAP = 0x2A,
OFILE_PEDISTL = 0x2B,
OFILE_L3DOORS = 0x2C,
OFILE_PFOUNTN = 0x2D,
OFILE_ARMSTAND = 0x2E,
OFILE_GOATSHRN = 0x2F,
OFILE_CAULDREN = 0x30,
OFILE_MFOUNTN = 0x31,
OFILE_TFOUNTN = 0x32,
OFILE_ALTBOY = 0x33,
OFILE_MCIRL = 0x34,
OFILE_BKSLBRNT = 0x35,
OFILE_MUSHPTCH = 0x36,
OFILE_LZSTAND = 0x37,
} object_graphic_id;
typedef enum dungeon_type {
DTYPE_TOWN = 0x0,
DTYPE_CATHEDRAL = 0x1,
@ -1745,7 +1576,7 @@ typedef enum dungeon_type {
DTYPE_HELL = 0x4,
DTYPE_NEST = 0x5,
DTYPE_CRYPT = 0x6,
DTYPE_NONE = 0xFF,
DTYPE_NONE = -1,
} dungeon_type;
typedef enum dflag {
@ -1843,12 +1674,6 @@ typedef enum diablo_message {
EMSG_SHRINE_MURPHYS = 54,
} diablo_message;
typedef enum magic_type {
STYPE_FIRE = 0x0,
STYPE_LIGHTNING = 0x1,
STYPE_MAGIC = 0x2,
} magic_type;
typedef enum theme_id {
THEME_BARREL = 0x0,
THEME_SHRINE = 0x1,
@ -1987,63 +1812,6 @@ typedef enum game_info {
GAMEINFO_PLAYERS = 6,
} game_info;
typedef enum spell_id {
SPL_NULL = 0x0,
SPL_FIREBOLT = 0x1,
SPL_HEAL = 0x2,
SPL_LIGHTNING = 0x3,
SPL_FLASH = 0x4,
SPL_IDENTIFY = 0x5,
SPL_FIREWALL = 0x6,
SPL_TOWN = 0x7,
SPL_STONE = 0x8,
SPL_INFRA = 0x9,
SPL_RNDTELEPORT = 0xA,
SPL_MANASHIELD = 0xB,
SPL_FIREBALL = 0xC,
SPL_GUARDIAN = 0xD,
SPL_CHAIN = 0xE,
SPL_WAVE = 0xF,
SPL_DOOMSERP = 0x10,
SPL_BLODRIT = 0x11,
SPL_NOVA = 0x12,
SPL_INVISIBIL = 0x13,
SPL_FLAME = 0x14,
SPL_GOLEM = 0x15,
SPL_BLODBOIL = 0x16,
SPL_TELEPORT = 0x17,
SPL_APOCA = 0x18,
SPL_ETHEREALIZE = 0x19,
SPL_REPAIR = 0x1A,
SPL_RECHARGE = 0x1B,
SPL_DISARM = 0x1C,
SPL_ELEMENT = 0x1D,
SPL_CBOLT = 0x1E,
SPL_HBOLT = 0x1F,
SPL_RESURRECT = 0x20,
SPL_TELEKINESIS = 0x21,
SPL_HEALOTHER = 0x22,
SPL_FLARE = 0x23,
SPL_BONESPIRIT = 0x24,
SPL_LASTDIABLO = SPL_BONESPIRIT,
SPL_MANA = 0x25,
SPL_MAGI = 0x26,
SPL_JESTER = 0x27,
SPL_LIGHTWALL = 0x28,
SPL_IMMOLAT = 0x29,
SPL_WARP = 0x2A,
SPL_REFLECT = 0x2B,
SPL_BERSERK = 0x2C,
SPL_FIRERING = 0x2D,
SPL_SEARCH = 0x2E,
SPL_RUNEFIRE = 0x2F,
SPL_RUNELIGHT = 0x30,
SPL_RUNENOVA = 0x31,
SPL_RUNEIMMOLAT = 0x32,
SPL_RUNESTONE = 0x33,
SPL_INVALID = -1,
} spell_id;
typedef enum _cmd_id {
CMD_STAND,
CMD_WALKXY,
@ -2197,114 +1965,12 @@ typedef enum panel_button_id {
} panel_button_id;
typedef enum attribute_id {
ATTRIB_STR = 0,
ATTRIB_MAG = 1,
ATTRIB_DEX = 2,
ATTRIB_VIT = 3,
ATTRIB_STR,
ATTRIB_MAG,
ATTRIB_DEX,
ATTRIB_VIT,
} attribute_id;
typedef enum _object_id {
OBJ_L1LIGHT = 0x0,
OBJ_L1LDOOR = 0x1,
OBJ_L1RDOOR = 0x2,
OBJ_SKFIRE = 0x3,
OBJ_LEVER = 0x4,
OBJ_CHEST1 = 0x5,
OBJ_CHEST2 = 0x6,
OBJ_CHEST3 = 0x7,
OBJ_CANDLE1 = 0x8,
OBJ_CANDLE2 = 0x9,
OBJ_CANDLEO = 0xA,
OBJ_BANNERL = 0xB,
OBJ_BANNERM = 0xC,
OBJ_BANNERR = 0xD,
OBJ_SKPILE = 0xE,
OBJ_SKSTICK1 = 0xF,
OBJ_SKSTICK2 = 0x10,
OBJ_SKSTICK3 = 0x11,
OBJ_SKSTICK4 = 0x12,
OBJ_SKSTICK5 = 0x13,
OBJ_CRUX1 = 0x14,
OBJ_CRUX2 = 0x15,
OBJ_CRUX3 = 0x16,
OBJ_STAND = 0x17,
OBJ_ANGEL = 0x18,
OBJ_BOOK2L = 0x19,
OBJ_BCROSS = 0x1A,
OBJ_NUDEW2R = 0x1B,
OBJ_SWITCHSKL = 0x1C,
OBJ_TNUDEM1 = 0x1D,
OBJ_TNUDEM2 = 0x1E,
OBJ_TNUDEM3 = 0x1F,
OBJ_TNUDEM4 = 0x20,
OBJ_TNUDEW1 = 0x21,
OBJ_TNUDEW2 = 0x22,
OBJ_TNUDEW3 = 0x23,
OBJ_TORTURE1 = 0x24,
OBJ_TORTURE2 = 0x25,
OBJ_TORTURE3 = 0x26,
OBJ_TORTURE4 = 0x27,
OBJ_TORTURE5 = 0x28,
OBJ_BOOK2R = 0x29,
OBJ_L2LDOOR = 0x2A,
OBJ_L2RDOOR = 0x2B,
OBJ_TORCHL = 0x2C,
OBJ_TORCHR = 0x2D,
OBJ_TORCHL2 = 0x2E,
OBJ_TORCHR2 = 0x2F,
OBJ_SARC = 0x30,
OBJ_FLAMEHOLE = 0x31,
OBJ_FLAMELVR = 0x32,
OBJ_WATER = 0x33,
OBJ_BOOKLVR = 0x34,
OBJ_TRAPL = 0x35,
OBJ_TRAPR = 0x36,
OBJ_BOOKSHELF = 0x37,
OBJ_WEAPRACK = 0x38,
OBJ_BARREL = 0x39,
OBJ_BARRELEX = 0x3A,
OBJ_SHRINEL = 0x3B,
OBJ_SHRINER = 0x3C,
OBJ_SKELBOOK = 0x3D,
OBJ_BOOKCASEL = 0x3E,
OBJ_BOOKCASER = 0x3F,
OBJ_BOOKSTAND = 0x40,
OBJ_BOOKCANDLE = 0x41,
OBJ_BLOODFTN = 0x42,
OBJ_DECAP = 0x43,
OBJ_TCHEST1 = 0x44,
OBJ_TCHEST2 = 0x45,
OBJ_TCHEST3 = 0x46,
OBJ_BLINDBOOK = 0x47,
OBJ_BLOODBOOK = 0x48,
OBJ_PEDISTAL = 0x49,
OBJ_L3LDOOR = 0x4A,
OBJ_L3RDOOR = 0x4B,
OBJ_PURIFYINGFTN = 0x4C,
OBJ_ARMORSTAND = 0x4D,
OBJ_ARMORSTANDN = 0x4E,
OBJ_GOATSHRINE = 0x4F,
OBJ_CAULDRON = 0x50,
OBJ_MURKYFTN = 0x51,
OBJ_TEARFTN = 0x52,
OBJ_ALTBOY = 0x53,
OBJ_MCIRCLE1 = 0x54,
OBJ_MCIRCLE2 = 0x55,
OBJ_STORYBOOK = 0x56,
OBJ_STORYCANDLE = 0x57,
OBJ_STEELTOME = 0x58,
OBJ_WARARMOR = 0x59,
OBJ_WARWEAP = 0x5A,
OBJ_TBCROSS = 0x5B,
OBJ_WEAPONRACK = 0x5C,
OBJ_WEAPONRACKN = 0x5D,
OBJ_MUSHPATCH = 0x5E,
OBJ_LAZSTAND = 0x5F,
OBJ_SLAINHERO = 0x60,
OBJ_SIGNCHEST = 0x61,
OBJ_BOOKSHELFR = 0x62,
} _object_id;
typedef enum _item_indexes {
IDI_GOLD,
IDI_WARRIOR,

299
structs.h

@ -1,299 +0,0 @@
/**
* @file structs.h
*
* Various global structures.
*/
DEVILUTION_BEGIN_NAMESPACE
//////////////////////////////////////////////////
// textdat
//////////////////////////////////////////////////
typedef struct TextDataStruct {
const char *txtstr;
int scrlltxt;
int txtspd; /* calculated dynamically, 01/23/21 */
int sfxnr;
} TextDataStruct;
//////////////////////////////////////////////////
// effects/sound
//////////////////////////////////////////////////
typedef struct TSnd {
const char *sound_path;
HANDLE file_handle; // for streamed audio
SoundSample *DSB;
int start_tc;
} TSnd;
typedef struct TSFX {
unsigned char bFlags;
const char *pszName;
TSnd *pSnd;
} TSFX;
//////////////////////////////////////////////////
// monster
//////////////////////////////////////////////////
typedef struct AnimStruct {
BYTE *CMem;
BYTE *Data[8];
int Frames;
int Rate;
} AnimStruct;
//////////////////////////////////////////////////
// objects
//////////////////////////////////////////////////
typedef struct ObjDataStruct {
char oload;
char ofindex;
char ominlvl;
char omaxlvl;
char olvltype;
char otheme;
char oquest;
int oAnimFlag;
int oAnimDelay; // Tick length of each frame in the current animation
int oAnimLen; // Number of frames in current animation
int oAnimWidth;
BOOL oSolidFlag;
BOOL oMissFlag;
BOOL oLightFlag;
char oBreak;
char oSelFlag;
BOOL oTrapFlag;
} ObjDataStruct;
typedef struct ObjectStruct {
int _otype;
int _ox;
int _oy;
bool _oLight;
Uint32 _oAnimFlag;
unsigned char *_oAnimData;
int _oAnimDelay; // Tick length of each frame in the current animation
int _oAnimCnt; // Increases by one each game tick, counting how close we are to _pAnimDelay
int _oAnimLen; // Number of frames in current animation
int _oAnimFrame; // Current frame of animation.
int _oAnimWidth;
int _oAnimWidth2;
BOOL _oDelFlag;
char _oBreak; // check
BOOL _oSolidFlag;
BOOL _oMissFlag;
char _oSelFlag; // check
BOOL _oPreFlag;
BOOL _oTrapFlag;
BOOL _oDoorFlag;
int _olid;
int _oRndSeed;
int _oVar1;
int _oVar2;
int _oVar3;
int _oVar4;
int _oVar5;
int _oVar6;
_speech_id _oVar7;
int _oVar8;
} ObjectStruct;
//////////////////////////////////////////////////
// gamemenu/gmenu
//////////////////////////////////////////////////
// TPDEF PTR FCN VOID TMenuFcn
typedef struct TMenuItem {
DWORD dwFlags;
const char *pszStr;
void (*fnMenu)(BOOL); /* fix, should have one arg */
} TMenuItem;
// TPDEF PTR FCN VOID TMenuUpdateFcn
//////////////////////////////////////////////////
// spells
//////////////////////////////////////////////////
typedef struct SpellData {
unsigned char sName;
unsigned char sManaCost;
unsigned char sType;
const char *sNameText;
const char *sSkillText;
int sBookLvl;
int sStaffLvl;
BOOL sTargeted;
BOOL sTownSpell;
int sMinInt;
unsigned char sSFX;
unsigned char sMissiles[3];
unsigned char sManaAdj;
unsigned char sMinMana;
int sStaffMin;
int sStaffMax;
int sBookCost;
int sStaffCost;
} SpellData;
//////////////////////////////////////////////////
// drlg
//////////////////////////////////////////////////
typedef struct ShadowStruct {
unsigned char strig;
unsigned char s1;
unsigned char s2;
unsigned char s3;
unsigned char nv1;
unsigned char nv2;
unsigned char nv3;
} ShadowStruct;
typedef struct HALLNODE {
int nHallx1;
int nHally1;
int nHallx2;
int nHally2;
int nHalldir;
struct HALLNODE *pNext;
} HALLNODE;
typedef struct ROOMNODE {
int nRoomx1;
int nRoomy1;
int nRoomx2;
int nRoomy2;
int nRoomDest;
} ROOMNODE;
//////////////////////////////////////////////////
// themes
//////////////////////////////////////////////////
typedef struct ThemeStruct {
char ttype; /* aligned 4 */
int ttval;
} ThemeStruct;
//////////////////////////////////////////////////
// inv
//////////////////////////////////////////////////
typedef struct InvXY {
int X;
int Y;
} InvXY;
//////////////////////////////////////////////////
// diabloui
//////////////////////////////////////////////////
// TPDEF PTR FCN VOID PLAYSND
typedef struct _uidefaultstats {
WORD strength;
WORD magic;
WORD dexterity;
WORD vitality;
} _uidefaultstats;
typedef struct _uiheroinfo {
struct _uiheroinfo *next;
char name[16];
WORD level;
plr_class heroclass;
BYTE herorank;
WORD strength;
WORD magic;
WORD dexterity;
WORD vitality;
int gold;
int hassaved;
BOOL spawned;
} _uiheroinfo;
// TPDEF PTR FCN UCHAR ENUMHEROPROC
// TPDEF PTR FCN UCHAR ENUMHEROS
// TPDEF PTR FCN UCHAR CREATEHERO
// TPDEF PTR FCN UCHAR DELETEHERO
// TPDEF PTR FCN UCHAR GETDEFHERO
// TPDEF PTR FCN INT PROGRESSFCN
//////////////////////////////////////////////////
// storm
//////////////////////////////////////////////////
// TPDEF PTR FCN UCHAR SMSGIDLEPROC
// TPDEF PTR FCN VOID SMSGHANDLER
typedef struct _SNETCAPS {
DWORD size;
DWORD flags;
DWORD maxmessagesize;
DWORD maxqueuesize;
DWORD maxplayers;
DWORD bytessec;
DWORD latencyms;
DWORD defaultturnssec;
DWORD defaultturnsintransit;
} _SNETCAPS;
typedef struct _SNETEVENT {
DWORD eventid;
DWORD playerid;
void *data;
DWORD databytes;
} _SNETEVENT;
// TPDEF PTR FCN UCHAR SNETABORTPROC
// TPDEF PTR FCN UCHAR SNETCATEGORYPROC
// TPDEF PTR FCN UCHAR SNETCHECKAUTHPROC
// TPDEF PTR FCN UCHAR SNETCREATEPROC
// TPDEF PTR FCN UCHAR SNETDRAWDESCPROC
// TPDEF PTR FCN UCHAR SNETENUMDEVICESPROC
// TPDEF PTR FCN UCHAR SNETENUMGAMESPROC
// TPDEF PTR FCN UCHAR SNETENUMPROVIDERSPROC
// TPDEF PTR FCN VOID SNETEVENTPROC
// TPDEF PTR FCN UCHAR SNETGETARTPROC
// TPDEF PTR FCN UCHAR SNETGETDATAPROC
// TPDEF PTR FCN INT SNETMESSAGEBOXPROC
// TPDEF PTR FCN UCHAR SNETPLAYSOUNDPROC
// TPDEF PTR FCN UCHAR SNETSELECTEDPROC
// TPDEF PTR FCN UCHAR SNETSTATUSPROC
// TPDEF PTR FCN UCHAR SNETSPIBIND
// TPDEF PTR FCN UCHAR SNETSPIQUERY
//////////////////////////////////////////////////
// capture
//////////////////////////////////////////////////
typedef struct _PcxHeader {
BYTE Manufacturer;
BYTE Version;
BYTE Encoding;
BYTE BitsPerPixel;
WORD Xmin;
WORD Ymin;
WORD Xmax;
WORD Ymax;
WORD HDpi;
WORD VDpi;
BYTE Colormap[48];
BYTE Reserved;
BYTE NPlanes;
WORD BytesPerLine;
WORD PaletteInfo;
WORD HscreenSize;
WORD VscreenSize;
BYTE Filler[54];
} PCXHEADER;
DEVILUTION_END_NAMESPACE

1
types.h

@ -17,6 +17,5 @@
#include <limits.h>
#include "defs.h"
#include "enums.h"
#include "structs.h"
#endif

Loading…
Cancel
Save