/** * @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; 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; typedef struct MonsterData { int width; int mImage; const char *GraphicType; BOOL has_special; const char *sndfile; BOOL snd_special; BOOL has_trans; const char *TransFile; int Frames[6]; int Rate[6]; const char *mName; char mMinDLvl; char mMaxDLvl; char mLevel; int mMinHP; int mMaxHP; char mAi; int mFlags; unsigned char mInt; unsigned short mHit; // BUGFIX: Some monsters overflow this value on high difficultys (fixed) unsigned char mAFNum; unsigned char mMinDamage; unsigned char mMaxDamage; unsigned short mHit2; // BUGFIX: Some monsters overflow this value on high difficulty (fixed) unsigned char mAFNum2; unsigned char mMinDamage2; unsigned char mMaxDamage2; unsigned char mArmorClass; char mMonstClass; unsigned short mMagicRes; unsigned short mMagicRes2; unsigned short mTreasure; char mSelFlag; unsigned short mExp; } MonsterData; typedef struct CMonster { int mtype; // TODO: Add enum for place flags unsigned char mPlaceFlags; AnimStruct Anims[6]; TSnd *Snds[4][2]; int width; int width2; unsigned char mMinHP; unsigned char mMaxHP; BOOL has_special; unsigned char mAFNum; char mdeadval; const MonsterData *MData; // A TRN file contains a sequence of color transitions, represented // as indexes into a palette. (a 256 byte array of palette indices) BYTE *trans_file; } CMonster; typedef struct MonsterStruct { // note: missing field _mAFNum int _mMTidx; int _mmode; /* MON_MODE */ unsigned char _mgoal; int _mgoalvar1; int _mgoalvar2; int _mgoalvar3; int field_18; unsigned char _pathcount; int _mx; // Tile X-position of monster int _my; // Tile Y-position of monster int _mfutx; // Future tile X-position of monster. Set at start of walking animation int _mfuty; // Future tile Y-position of monster. Set at start of walking animation int _moldx; // Most recent X-position in dMonster. int _moldy; // Most recent Y-position in dMonster. int _mxoff; // Monster sprite's pixel X-offset from tile. int _myoff; // Monster sprite's pixel Y-offset from tile. int _mxvel; // Pixel X-velocity while walking. Applied to _mxoff int _myvel; // Pixel Y-velocity while walking. Applied to _myoff int _mdir; // Direction faced by monster (direction enum) int _menemy; // The current target of the mosnter. An index in to either the plr or monster array based on the _meflag value. unsigned char _menemyx; // X-coordinate of enemy (usually correspond's to the enemy's futx value) unsigned char _menemyy; // Y-coordinate of enemy (usually correspond's to the enemy's futy value) short falign_52; // probably _mAFNum (unused) unsigned char *_mAnimData; int _mAnimDelay; // Tick length of each frame in the current animation int _mAnimCnt; // Increases by one each game tick, counting how close we are to _pAnimDelay int _mAnimLen; // Number of frames in current animation int _mAnimFrame; // Current frame of animation. BOOL _meflag; BOOL _mDelFlag; int _mVar1; int _mVar2; int _mVar3; int _mVar4; int _mVar5; int _mVar6; // Used as _mxoff but with a higher range so that we can correctly apply velocities of a smaller number int _mVar7; // Used as _myoff but with a higher range so that we can correctly apply velocities of a smaller number int _mVar8; // Value used to measure progress for moving from one tile to another int _mmaxhp; int _mhitpoints; unsigned char _mAi; unsigned char _mint; short falign_9A; int _mFlags; BYTE _msquelch; int falign_A4; int _lastx; int _lasty; int _mRndSeed; int _mAISeed; int falign_B8; unsigned char _uniqtype; unsigned char _uniqtrans; char _udeadval; char mWhoHit; char mLevel; unsigned short mExp; unsigned short mHit; unsigned char mMinDamage; unsigned char mMaxDamage; unsigned short mHit2; unsigned char mMinDamage2; unsigned char mMaxDamage2; unsigned char mArmorClass; char falign_CB; unsigned short mMagicRes; int mtalkmsg; unsigned char leader; unsigned char leaderflag; unsigned char packsize; Sint8 mlid; // BUGFIX -1 is used when not emitting light this should be signed (fixed) const char *mName; CMonster *MType; const MonsterData *MData; } MonsterStruct; typedef struct UniqMonstStruct { int mtype; const char *mName; const char *mTrnName; unsigned char mlevel; unsigned short mmaxhp; unsigned char mAi; unsigned char mint; unsigned char mMinDamage; unsigned char mMaxDamage; unsigned short mMagicRes; unsigned short mUnqAttr; unsigned char mUnqVar1; unsigned char mUnqVar2; int mtalkmsg; } UniqMonstStruct; ////////////////////////////////////////////////// // 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; int _oLight; int _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; int _oVar7; int _oVar8; } ObjectStruct; ////////////////////////////////////////////////// // portal ////////////////////////////////////////////////// typedef struct PortalStruct { BOOL open; int x; int y; int level; int ltype; BOOL setlvl; } PortalStruct; ////////////////////////////////////////////////// // 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; BYTE 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 typedef struct _SNETPLAYERDATA { int size; char *playername; char *playerdescription; } _SNETPLAYERDATA; typedef struct _SNETVERSIONDATA { int size; const char *versionstring; } _SNETVERSIONDATA; typedef struct _SNETUIDATA { int size; void (*selectedcallback)(); void (*statuscallback)(); void (*categorylistcallback)(); void (*newaccountcallback)(); const char **profilefields; int (*selectnamecallback)( const struct _SNETPROGRAMDATA *, const struct _SNETPLAYERDATA *, const struct _SNETUIDATA *, const struct _SNETVERSIONDATA *, DWORD provider, /* e.g. 'BNET', 'IPXN', 'MODM', 'SCBL' */ char *, DWORD, /* character name will be copied here */ char *, DWORD, /* character "description" will be copied here (used to advertise games) */ BOOL * /* new character? - unsure about this */ ); void (*changenamecallback)(); } _SNETUIDATA; // 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