#pragma once

#ifndef _D2STRUCTS_H
#define _D2STRUCTS_H
#include "D2TemplateDataTables.h"
#include "D2TemplatePacketDef.h"
//
//struct D2ShrinesTXT
//{
//	  BYTE     Code;                         //+00
//	 BYTE     NotUsed1[3];               //+01
//	 DWORD     Arg1;                         //+04
//	DWORD     Arg2;                         //+08
//	DWORD     DurInFrames;               //+0C
//	  BYTE     ResetTimeInMinutes;          //+10
//	 BYTE     Rarity;                         //+11
//	 char     ViewName[0x1F];               //+12
//	 char     NiftyPhrase[0x7F];          //+32
//	 BYTE     EffectClass;               //+B2
//	 BYTE     NotUsed2;                    //+B3
//	  DWORD     LevelMin;                    //+B4
// };*/
//
//enum D2CubeItemFlag
//{
//	CUBE_COWPORTAL = 1,
//	CUBE_USEITEM = 0xFF,
//	CUBE_USETYPE = 0xFE,
//	CUBE_TYPE = 0xFD,
//	CUBE_ITEM = 0xFC
//};
//
//
//struct CubeOutput//size: 0x54=84 (source total : fct of dll)
//{
//	union {
//		WORD flag;				//+00
//		struct {
//			WORD	keepModifiers : 1;			//",mod"
//			WORD	haveSockets : 1;				//",sock=#nbsocket"
//			WORD	isEthereal : 1;				//",eth"
//			WORD	isSpecificItem : 1;			//"#itemUniqueName" or "#itemSetName" (set byItemID too)
//			WORD	destroysFillers : 1;			//",uns"
//			WORD	removeFillers : 1;			//",rem"
//			WORD	regeneratesUnique : 1;		//",reg"
//			WORD	upgradeToExceptional : 1;		//",exc"
//			WORD	upgradeToElite : 1;			//",eli"
//			WORD	repair : 1;					//",rep"
//			WORD	recharge : 1;					//",rch"
//		};
//	};
//	WORD	ID;					//+02
//	WORD	specificID;			//+04
//	BYTE	quality;			//+06	1=",low"; 2=",nor"; 3=",hiq"; 4=",mag"; 5=",set"; 6=",rar"; 7=",uni"; 8=",crf"; 9=",tmp"
//	BYTE	quantityOrNbSockets;//+07	",qty=#quantity" Or ",sock=#nbsocket"
//	BYTE	outputType;			//+08	02="Pand. Portal" 01="Cow Portal" FF="usetype"; FE="useitem" FC="#item4Code" FD="#type4Code"
//	BYTE	lvl;				//+09	//+55
//	BYTE	plvl;				//+0A	//+56
//	BYTE	ilvl;				//+0B	//+57
//	WORD	Prefix;				//+0C
//	WORD	PrefixMin;			//+0E (always 0)
//	WORD	PrefixMax;			//+10 (always 0)
//	WORD	Suffix;				//+12
//	WORD	SuffixMin;			//+14 (always 0)
//	WORD	SuffixMax;			//+16 (always 0)
//	DWORD	mod1;				//+18	//+64(13)
//	WORD	mod1param;			//+1C	//+68
//	WORD	mod1min;			//+1E	//+6A
//	WORD	mod1max;			//+20	//+6C
//	BYTE	mod1chance;			//+22	//+6E
//	DWORD	mod2;				//+24	//+70
//	WORD	mod2param;			//+28	//+74
//	WORD	mod2min;			//+2A	//+76
//	WORD	mod2max;			//+2C	//+78
//	BYTE	mod2chance;			//+2E	//+7A
//	DWORD	mod3;				//+30	//+7C
//	WORD	mod3param;			//+34	//+80
//	WORD	mod3min;			//+36	//+82
//	WORD	mod3max;			//+38	//+84
//	BYTE	mod3chance;			//+3A	//+86
//	DWORD	mod4;				//+3C	//+88
//	WORD	mod41param;			//+40	//+8C
//	WORD	mod4min;			//+42	//+8E
//	WORD	mod4max;			//+44	//+90
//	BYTE	mod4chance;			//+46	//+92
//	DWORD	mod5;				//+48	//+94
//	WORD	mod5param;			//+4C	//+98
//	WORD	mod5min;			//+4E	//+9A
//	WORD	mod5max;			//+50	//+9C
//	BYTE	mod5chance;			//+52	//+9E
//};
//
//
//struct CubeInput//size: 8 (source total : fct of dll)
//{
//	union {
//		WORD flag;			//+00
//		struct {
//			WORD	byItemID : 1;					//"#item4Code" or "any"
//			WORD	byItemTypeID : 1;				//"#itemType4Code"
//			WORD	haveNoSocket : 1;				//",nos"
//			WORD	haveSockets : 1;				//",sock"
//			WORD	isEthereal : 1;				//",eth"
//			WORD	isNotEthereal : 1;			//",noe"
//			WORD	isSpecificItem : 1;			//"#itemUniqueName" or "#itemSetName" (set byItemID too)
//			WORD	includeUpgradedVersions : 1;	//",upg"
//			WORD	isBasic : 1;					//",bas"
//			WORD	isExceptional : 1;			//",exc"
//			WORD	isElite : 1;					//",eli"
//			WORD	isNotRuneword : 1;			//",nru"
//		};
//	};
//	WORD	ID;				//+02	FFFF = any items
//	WORD	specificID;		//+04
//	BYTE	quality;		//+06	1=",low"; 2=",nor"; 3=",hiq"; 4=",mag"; 5=",set"; 6=",rar"; 7=",uni"; 8=",crf"; 9=",tmp"
//	BYTE	quantity;		//+07	",qty=#quantity"
//};
//
//
//struct CubeMainBIN//size: 0x148=328  (source total : fct of dll) (total size in LoD1.10 : BDA0)
//{
//	BYTE		enabled;	//+00
//	BYTE		ladder;		//+01
//	BYTE		minDiff;	//+02
//	BYTE		playerClass;//+03 FF=all classes
//	BYTE		op;			//+04
//	DWORD		param;		//+08
//	DWORD		value;		//+0C
//	BYTE		numinputs;	//+10
//	WORD		version;	//+12
//	CubeInput	input1;		//+14
//	CubeInput	input2;		//+1C
//	CubeInput	input3;		//+24
//	CubeInput	input4;		//+2C
//	CubeInput	input5;		//+34
//	CubeInput	input6;		//+3C
//	CubeInput	input7;		//+44
//	CubeOutput	output1;	//+4C
//	CubeOutput	output2;	//+A0
//	CubeOutput	output3;	//+F4
//};
//
//struct TreasureClassBIN
//{
//
//};
//
//struct ObjectsBIN
//{
//
//};
//
//struct ExperienceBIN//size=0x20
//{
//	DWORD Amazon;
//	DWORD Sorceress;
//	DWORD Necromancer;
//	DWORD Paladin;
//	DWORD Barbarian;
//	DWORD Druid;
//	DWORD Assassin;
//	DWORD ExpRatio;
//};
//
//struct LevelsBIN//size=0x220
//{
//};
//
//struct GemsBIN //size: 0xC0=192 (source : fct of dll)
//{
//	char	name[0x20];		//+00
//	char	letter[6];		//+20
//	BYTE	uk1[2];			//+26
//	DWORD	code;			//+28
//	BYTE	uk2[2];			//+2C
//	BYTE	nummods;		//+2E
//	BYTE	transform;		//+2F
//	int		weaponmod1code;	//+30
//	DWORD	weaponmod1param;//+34
//	DWORD	weaponmod1min;	//+38
//	DWORD	weaponmod1max;	//+3C
//	int		weaponmod2code;	//+40
//	DWORD	weaponmod2param;//+44
//	DWORD	weaponmod2min;	//+48
//	DWORD	weaponmod2max;	//+4C
//	int		weaponmod3code;	//+50
//	DWORD	weaponmod3param;//+54
//	DWORD	weaponmod3min;	//+58
//	DWORD	weaponmod3max;	//+5C
//	int		helmmod1code;	//+60
//	DWORD	helmmod1param;	//+64
//	DWORD	helmmod1min;	//+68
//	DWORD	helmmod1max;	//+6C
//	int		helmmod2code;	//+70
//	DWORD	helmmod2param;	//+74
//	DWORD	helmmod2min;	//+78
//	DWORD	helmmod2max;	//+7C
//	int		helmmod3code;	//+80
//	DWORD	helmmod3param;	//+84
//	DWORD	helmmod3min;	//+88
//	DWORD	helmmod3max;	//+8C
//	int		shieldmod1code;	//+90
//	DWORD	shieldmod1param;//+94
//	DWORD	shieldmod1min;	//+98
//	DWORD	shieldmod1max;	//+9C
//	int		shieldmod2code;	//+A0
//	DWORD	shieldmod2param;//+A4
//	DWORD	shieldmod2min;	//+A8
//	DWORD	shieldmod2max;	//+AC
//	int		shieldmod3code;	//+B0
//	DWORD	shieldmod3param;//+B4
//	DWORD	shieldmod3min;	//+B8
//	DWORD	shieldmod3max;	//+BC
//};
//
//struct ItemsBIN //size: 0x1A8=424 (source : fct of dll)
//{
//	char	FlippyFile[0x20];		//+00
//	char	InvFile[0x20];			//+20
//	char	UniqueInvFile[0x20];	//+40
//	char	SetInvFile[0x20];		//+60
//	DWORD	ItemCode;				//+80
//	DWORD	NormCode;				//+84
//	DWORD	UberCode;				//+88
//	DWORD	HellCode;				//+8C
//	DWORD	AlternateGfx;			//+90
//	DWORD	pSpell;					//+94
//	WORD	State;					//+98
//	WORD	cState1;				//+9A
//	WORD	cState2;				//+9C
//	WORD	Stat1;					//+9E
//	WORD	Stat2;					//+A0
//	WORD	Stat3;					//+A2
//	DWORD	Calc1;					//+A4
//	DWORD	Calc2;					//+A8
//	DWORD	Calc3;					//+AC
//	DWORD	Len;					//+B0
//	WORD	SpellDesc;				//+B4
//	WORD	SpellDescStr;			//+B6
//	DWORD	SpellDescCalc;			//+B8
//	DWORD	BetterGem;				//+BC
//	DWORD	WClass;					//+C0
//	DWORD	TwoHandedWClass;		//+C4
//	DWORD	TMogType;				//+C8
//	DWORD	MinAC;					//+CC
//	DWORD	MaxAC;					//+D0
//	DWORD	GambleCost;				//+D4
//	DWORD	Speed;					//+D8
//	DWORD	BitField;				//+DC
//	DWORD	Cost;					//+E0
//	DWORD	MinStack;				//+E4
//	DWORD	MaxStack;				//+E8
//	DWORD	SpawnStack;				//+EC
//	DWORD	GemOffset;				//+F0
//	WORD	NameStr;				//+F4
//	WORD	Version;				//+F6
//	WORD	AutoPrefix;				//+F8
//	WORD	MissileType;			//+FA
//	BYTE	Rarity;					//+FC
//	BYTE	Level;					//+FD
//	BYTE	MinDam;					//+FE
//	BYTE	MaxDam;					//+FF
//	BYTE	MinMisDam;				//+100
//	BYTE	MaxMisDam;				//+101
//	BYTE	TwoHandMinDam;			//+102
//	BYTE	TwoHandMaxDam;			//+103
//	BYTE	RangeAdder;				//+104
//	BYTE	NotUsed1;				//+105
//	WORD	StrBonus;				//+106
//	WORD	DexBonus;				//+108
//	WORD	RegStr;					//+10A
//	WORD	RegDex;					//+10C
//	BYTE	Absorbs;				//+10E
//	BYTE	InvWidth;				//+10F
//	BYTE	InvHeight;				//+110
//	BYTE	Block;					//+111
//	BYTE	Durability;				//+112
//	BYTE	NoDurability;			//+113
//	BYTE	Missile;				//+114
//	BYTE	Component;				//+115
//	BYTE	RArm;					//+116
//	BYTE	LArm;					//+117
//	BYTE	Torso;					//+118
//	BYTE	Legs;					//+119
//	BYTE	RSpad;					//+11A
//	BYTE	LSpad;					//+11B
//	BYTE	TwoHanded;				//+11C
//	BYTE	Usable;					//+11D
//	WORD	Type;					//+11E
//	WORD	Type2;					//+120
//	BYTE	SubType;				//+122
//	BYTE	NotUsed2;				//+123
//	WORD	DropSound;				//+124
//	WORD	UseSound;				//+126
//	BYTE	DropSfxFrame;			//+128
//	BYTE	Unique;					//+129
//	BYTE	Quest;					//+12A
//	BYTE	QuestDiffCheck;			//+12B
//	BYTE	Transparent;			//+12C
//	BYTE	TransTbl;				//+12D
//	BYTE	NotUsed3;				//+12E
//	BYTE	LightRadius;			//+12F
//	BYTE	Belt;					//+130
//	BYTE	AutoBelt;				//+131
//	BYTE	Stackable;				//+132
//	BYTE	Spawnable;				//+133
//	BYTE	SpellIcon;				//+134
//	BYTE	DurWarning;				//+135
//	BYTE	QntWaning;				//+136
//	BYTE	HasInv;					//+137
//	BYTE	GemSockets;				//+138
//	BYTE	TransmoGrify;			//+139
//	BYTE	TMogMin;				//+13A
//	BYTE	TMogMax;				//+13B
//	BYTE	HitClass;				//+13C
//	BYTE	OneOrTwoHanded;			//+13D
//	BYTE	GemApplyType;			//+13E
//	BYTE	LevelReq;				//+13F
//	BYTE	MagicLvl;				//+140
//	BYTE	Transform;				//+141
//	BYTE	InvTrans;				//+142
//	BYTE	CompactSave;			//+143
//	BYTE	SkipName;				//+144
//	BYTE	NotUsed4;				//+145
//	BYTE	VendorMin[17];			//+146
//	BYTE	VendorMax[17];			//+157
//	BYTE	VendorMagicMin[17];		//+168
//	BYTE	VendorMagicMax[17];		//+179
//	BYTE	VendorMagicLvl[17];		//+18A
//	BYTE	NotUsed5;				//+19B
//	DWORD	NightmareUpgrade;		//+19C
//	DWORD	HellUpgrade;			//+1A0
//	BYTE	PermStoreItem;			//+1A4
//	BYTE	Multibuy;				//+1A5
//	WORD	zeros;					//+1A6
//};
//
//struct RunesBIN	//size: 0x120=288 (1.10 ok)
//{
//	char	Name[0x40];		//+00
//	char	RuneName[0x40];	//+40
//	BYTE	Complete;		//+80
//	BYTE	Server;			//+81
//	WORD	RuneNameID;		//+82
//	WORD	zero;			//+84 (=0x0000)
//	WORD	Itypes[6];		//+86
//	WORD	Etypes[3];		//+92
//	int		Runes[6];		//+98
//	DWORD	t1code1;		//+B0
//	DWORD	t1param1;		//+B4
//	DWORD	t1min1;			//+B8
//	DWORD	t1max1;			//+BC
//	DWORD	t1code2;		//+C0
//	DWORD	t1param2;		//+C4
//	DWORD	t1min2;			//+C8
//	DWORD	t1max2;			//+CC
//	DWORD	t1code3;		//+D0
//	DWORD	t1param3;		//+D4
//	DWORD	t1min3;			//+D8
//	DWORD	t1max3;			//+DC
//	DWORD	t1code4;		//+E0
//	DWORD	t1param4;		//+E4
//	DWORD	t1min4;			//+E8
//	DWORD	t1max4;			//+EC
//	DWORD	t1code5;		//+F0
//	DWORD	t1param5;		//+F4
//	DWORD	t1min5;			//+F8
//	DWORD	t1max5;			//+FC
//	DWORD	t1code6;		//+100
//	DWORD	t1param6;		//+104
//	DWORD	t1min6;			//+108
//	DWORD	t1max6;			//+10C
//	DWORD	t1code7;		//+110
//	DWORD	t1param7;		//+114
//	DWORD	t1min7;			//+118
//	DWORD	t1max7;			//+11C
//};
//
///*struct ItemStatsBIN	//size: 0x234=564
//{
//	BYTE	uk1[0x80];			//+00
//	DWORD	code;				//+80		// ou 0x90
//	BYTE	uk2[0xB3];			//+84
//	BYTE	itemStat137;		//+137
//};*/
//
//
//struct CharStatsBIN //size= 0xC4=196
//{
//	WCHAR	nameU[0x10];		//+00
//	char	name[0x10];			//+20
//	BYTE	baseSTR;			//+30
//	BYTE	baseDEX;			//+31
//	BYTE	baseENE;			//+32
//	BYTE	baseVIT;			//+33
//	BYTE	baseStamina;		//+34
//	BYTE	hpadd;				//+35
//	BYTE	percentStr;			//+36
//	BYTE	percentInt;			//+37
//	BYTE	percentDex;			//+38
//	BYTE	percentVit;			//+39
//	BYTE	manaRegen;			//+3A
//	BYTE	__3B;				//+3B
//	DWORD	toHitFactor;		//+3C
//	BYTE	walkVelocity;		//+40
//	BYTE	runVelocity;		//+41
//	BYTE	runDrain;			//+42
//	BYTE	lifePerLevel;		//+43
//	BYTE	staminaPerLevel;	//+44
//	BYTE	manaPerLevel;		//+45
//	BYTE	lifePerVitality;	//+46
//	BYTE	staminaPerVitality;	//+47
//	BYTE	manaPerMagic;		//+48
//	BYTE	blockFactor;		//+49
//	WORD	__4A_startSkill;	//+4A
//	DWORD	baseWClass;			//+4C
//	BYTE	StatPerLevel;		//+50
//	BYTE	__51;				//+51
//	WORD	StrAllSkills;		//+52
//	WORD	StrSkillTab1;		//+54
//	WORD	StrSkillTab2;		//+56
//	WORD	StrSkillTab3;		//+58
//	WORD	StrClassOnly;		//+5A
//	DWORD	item1;
//	BYTE	item1Loc;
//	BYTE	item1Count;
//	WORD	item1Unknown;
//	DWORD	item2;
//	BYTE	item2Loc;
//	BYTE	item2Count;
//	WORD	item2Unknown;
//	DWORD	item3;
//	BYTE	item3Loc;
//	BYTE	item3Count;
//	WORD	item3Unknown;
//	DWORD	item4;
//	BYTE	item4Loc;
//	BYTE	item4Count;
//	WORD	item4Unknown;
//	DWORD	item5;
//	BYTE	item5Loc;
//	BYTE	item5Count;
//	WORD	item5Unknown;
//	DWORD	item6;
//	BYTE	item6Loc;
//	BYTE	item6Count;
//	WORD	item6Unknown;
//	DWORD	item7;
//	BYTE	item7Loc;
//	BYTE	item7Count;
//	WORD	item7Unknown;
//	DWORD	item8;
//	BYTE	item8Loc;
//	BYTE	item8Count;
//	WORD	item8Unknown;
//	DWORD	item9;
//	BYTE	item9Loc;
//	BYTE	item9Count;
//	WORD	item9Unknown;
//	DWORD	item10;
//	BYTE	item10Loc;
//	BYTE	item10Count;
//	WORD	item10Unknown;
//	BYTE	unknown2[0x18];
//};
///*
//struct D2CharStats
//{
//	 wchar_t     Class_t[0x10];               //+00
//	 char     Class[0x10];               //+20
//	 BYTE     Str;                         //+30
//	 BYTE     Dex;                         //+31
//	 BYTE     Int;                         //+32
//	 BYTE     Vit;                         //+33
//	 BYTE     Stamina;                    //+34
//	 BYTE     HpAdd;                         //+35
//	 BYTE     PercentStr;                    //+36
//	 BYTE     PercentInt;                    //+37
//	 BYTE     PercentDex;                    //+38
//	 BYTE     PercentVit;                    //+39
//	 BYTE     ManaRegen;                    //+3A
//	 BYTE     NotUsed1;                    //+3B
//	 DWORD     ToHitFactor;               //+3C
//	 BYTE     WalkVelocity;               //+40
//	 BYTE     RunVelocity;               //+41
//	 BYTE     RunDrain;                    //+42
//	 BYTE     LifePerLevel;               //+43
//	 BYTE     StamianPerLevel;          //+44
//	 BYTE     ManaPerLevel;               //+45
//	 BYTE     LifePerVitality;          //+46
//	 BYTE     StaminaPerVitality;          //+47
//	 BYTE     ManaPerMagic;               //+48
//	 BYTE     BlockFactor;               //+49
//	 BYTE     NotUsed2[2];               //+4A
//	 DWORD     BaseWClass;                    //+4C
//	 BYTE     StatPerLevel;               //+50
//	 BYTE     NotUsed3;                    //+51
//	 WORD     StrAllSkills;               //+52
//	 WORD     StrSkillTab1;               //+54
//	 WORD     StrSkillTab2;               //+56
//	 WORD     StrSkillTab3;               //+58
//	 WORD     StrClassOnly;               //+5A
//	 DWORD     Item1;                         //+5C
//	 BYTE     Item1Loc;                    //+60
//	 BYTE     Item1Count;                    //+61
//	 BYTE     NotUsed4[2];               //+62
//	 DWORD     Item2;                         //+64
//	 BYTE     Item2Loc;                    //+68
//	 BYTE     Item2Count;                    //+69
//	 BYTE     NotUsed5[2];               //+6A
//	 DWORD     Item3;                         //+6C
//	 BYTE     Item3Loc;                    //+70
//	 BYTE     Item3Count;                    //+71
//	 BYTE     NotUsed6[2];               //+72
//	 DWORD     Item4;                         //+74
//	 BYTE     Item4Loc;                    //+78
//	 BYTE     Item4Count;                    //+79
//	 BYTE     NotUsed7[2];               //+7A
//	 DWORD     Item5;                         //+7C
//	 BYTE     Item5Loc;                    //+80
//	 BYTE     Item5Count;                    //+81
//	 BYTE     NotUsed8[2];               //+82
//	 DWORD     Item6;                         //+84
//	 BYTE     Item6Loc;                    //+88
//	 BYTE     Item6Count;                    //+89
//	 BYTE     NotUsed9[2];               //+8A
//	 DWORD     Item7;                         //+8C
//	 BYTE     Item7Loc;                    //+90
//	 BYTE     Item7Count;                    //+91
//	 BYTE     NotUsed10[2];               //+92
//	 DWORD     Item8;                         //+94
//	 BYTE     Item8Loc;                    //+98
//	 BYTE     Item8Count;                    //+99
//	 BYTE     NotUsed11[2];               //+9A
//	 DWORD     Item9;                         //+9C
//	 BYTE     Item9Loc;                    //+A0
//	 BYTE     Item9Count;                    //+A1
//	 BYTE     NotUsed12[2];               //+A2
//	 DWORD     Item10;                         //+A4
//	 BYTE     Item10Loc;                    //+A8
//	 BYTE     Item10Count;               //+A9
//	 BYTE     NotUsed13[2];               //+AA
//	 WORD     StartSkill;                    //+AC
//	 WORD     Skill1;                         //+AE
//	 WORD     Skill2;                         //+B0
//	 WORD     Skill3;                         //+B2
//	 WORD     Skill4;                         //+B4
//	 WORD     Skill5;                         //+B6
//	 WORD     Skill6;                         //+B8
//	 WORD     Skill7;                         //+BA
//	 WORD     Skill8;                         //+BC
//	 WORD     Skill9;                         //+BE
//	 WORD     Skill10;                    //+C0
//	 BYTE     NotUSed14[2];               //+C2
//};
//
//*/
//
//struct UniqueItemsBIN //size=0x14C (332)
//{
//	WORD	uniqueId;		//+00
//	BYTE	uk1[0x20];		//+02
//	WORD	uniqueNameId;	//+22
//	BYTE	uk2[0x08];		//+24
//	union {
//		BYTE	flag;		//+2C
//		struct {
//			BYTE ukf : 2;
//			BYTE carry1 : 1;
//			BYTE ladder : 1;
//		};
//	};
//	BYTE	uk3[0x11F];		//+2D
//};
//
//struct SetsBIN //size=0x128 (source : fct of dll)
//{
//	WORD	setNum;			//+00
//	WORD	setNameIndex;	//+02
//	BYTE	uk3[0x124];		//+04
//};
//
//struct SetItemsBIN //size=0x1B8 (source : fct of dll)
//{
//	WORD	setNum;			//+00
//	char	index[0x20];	//+02
//	BYTE	uk1;			//+04
//	WORD	setNameId;		//+24
//	BYTE	uk2[0x6];		//+26
//	WORD	setId;			//+2C
//	BYTE	uk3[0x18A];		//+2E
//};
//
//
//struct SkillDescBIN //size=0x120=288  (source : fct of dll)
//{
//	BYTE	uk1[0x08];		//+00
//	WORD	strNameID;		//+08
//	WORD	strShortID;		//+0A
//	WORD	strLongID;		//+0C
//	WORD	strAltID;		//+0E
//	BYTE	uk2[0x110];		//+10
//};
//
//
//struct SkillsBIN //size=0x23C (572)
//{
//	WORD	skillID;		//+00
//	BYTE	uk1[0x0A];		//+02
//	BYTE	charclass;		//+0C
//	BYTE	uk2[0x08];		//+10
//	WORD	itypea1;		//+18
//	WORD	itypea2;		//+1A
//	WORD	itypea3;		//+1C
//	WORD	itypeb1;		//+1E
//	WORD	itypeb2;		//+20
//	WORD	itypeb3;		//+22
//	WORD	etypea1;		//+24
//	WORD	etypea2;		//+26
//	WORD	etypeb1;		//+28
//	WORD	etypeb2;		//+2A
//	BYTE	uk3[0x100];		//+2C
//	WORD	maxlvl;			//+12C
//	BYTE	uk4[0x42];		//+12E
//	int		skpoints;		//+170
//	WORD	reqlevel;		//+174
//	BYTE	uk5[0x1E];		//+176
//	DWORD	skilldesc;		//+194 (DWORD ?)
//	BYTE	uk6[0xA4];		//+198
//};
//
///*
//struct D2SkillsTXT
//{
//	 WORD     SkillID;               //+000
//	 BYTE     Mask1;                    //+002
//	 BYTE     Mask2;                    //+003
//	 BYTE     Unknown[8];               //+004
//	 BYTE     CharClass;               //+00C
//	 BYTE     unknown_1[0x17D];     //+00D
//	 WORD     Mana;                    //+18A
//	 short     LvlMana;               //+18C
//	 BYTE     Attackrank;               //+18E
//	 BYTE     LineOfSight;          //+18F
//	 DWORD     Delay;                    //+190
//	 WORD     SkillDesc;               //+194
//	 BYTE     unknown_2[0xA6];     //+196
//};
//
//struct D2SkillsTXT
//{
//	WORD     SkillID;               //+000
//	BYTE     Mask1;                    //+002
//	BYTE     Mask2;                    //+003
//	BYTE     Unknown[8];               //+004
//	BYTE     CharClass;               //+00C
//	BYTE    Unknown2[3];          //+00D
//	BYTE     anim;                    //+010
//	BYTE     monanim;               //+011
//	BYTE     seqtrans;               //+012
//	BYTE     seqnum;                    //+013
//	BYTE     Unknown7;               //+014
//	BYTE     SelectProc;               //+015
//	BYTE     seqinput;               //+016
//	BYTE     Unknown3;               //+017
//	WORD     itypea1;               //+018
//	WORD     itypea2;               //+01A
//	WORD     itypea3;               //+01C
//	WORD     itypeb1;               //+01E
//	WORD     itypeb2;               //+020
//	WORD     itypeb3;               //+022
//	WORD     etypea1;               //+024
//	WORD     etypea2;               //+026
//	WORD     etypeb1;               //+028
//	WORD     etypeb2;               //+02A
//	WORD     srvstfunc;               //+02C
//	WORD     srvdofunc;               //+02E
//	WORD     srvprgfunc1;          //+030
//	WORD     srvprgfunc2;          //+032
//	WORD     srvprgfunc3;          //+034
//	WORD     Unknown8;               //+036
//	DWORD     prgcalc1;               //+038
//	DWORD     prgcalc2;               //+03C
//	DWORD     prgcalc3;               //+040
//	WORD     prgdam;                    //+044
//	WORD     srvmissile;               //+046
//	WORD     srvmissilea;          //+048
//	WORD     srvmissileb;          //+04A
//	WORD     srvmissilec;          //+04C
//	WORD     srvoverlay;               //+04E
//	DWORD     aurafilter;               //+050
//	WORD     aurastat1;               //+054
//	WORD     aurastat2;               //+056
//	WORD     aurastat3;               //+058
//	WORD     aurastat4;               //+05A
//	WORD     aurastat5;               //+05C
//	WORD     aurastat6;               //+05E
//	DWORD     auralencalc;          //+060
//	DWORD     aurarangecalc;          //+064
//	DWORD     aurastatcalc1;          //+068
//	DWORD     aurastatcalc2;          //+06C
//	DWORD     aurastatcalc3;          //+070
//	DWORD     aurastatcalc4;          //+074
//	DWORD     aurastatcalc5;          //+078
//	DWORD     aurastatcalc6;          //+07C
//	WORD     aurastate;               //+080
//	WORD     auratargetstate;     //+082
//	WORD     auraevent1;               //+084
//	WORD     auraevent2;               //+086
//	WORD     auraevent3;               //+088
//	WORD     auraeventfunc1;          //+08A
//	WORD     auraeventfunc2;          //+08C
//	WORD     auraeventfunc3;          //+08E
//	WORD     auratgtevent;          //+090
//	WORD     auratgteventfunc;     //+092
//	WORD     passivestate;          //+094
//	WORD     passiveitype;          //+096
//	WORD     passivestat1;          //+098
//	WORD     passivestat2;          //+09A
//	WORD     passivestat3;          //+09C
//	WORD     passivestat4;          //+09E
//	WORD     passivestat5;          //+0A0
//	DWORD     passivecalc1;          //+0A4
//	DWORD     passivecalc2;          //+0A8
//	DWORD     passivecalc3;          //+0AC
//	DWORD     passivecalc4;          //+0B0
//	DWORD     passivecalc5;          //+0B4
//	WORD     passiveevent;          //+0B8
//	WORD     passiveeventfunc;     //+0BA
//	WORD     summon;                    //+0BC
//	BYTE     pettype;               //+0BE
//	BYTE     summode;               //+0BF
//	DWORD     petmax;                    //+0C0
//	WORD     sumskill1;               //+0C4
//	WORD     sumskill2;               //+0C6
//	WORD     sumskill3;               //+0C8
//	WORD     sumskill4;               //+0CA
//	WORD     sumskill5;               //+0CC
//	DWORD     sumskcalc1;               //+0D0
//	DWORD     sumskcalc2;               //+0D4
//	DWORD     sumskcalc3;               //+0D8
//	DWORD     sumskcalc4;               //+0DC
//	DWORD     sumskcalc5;               //+0E0
//	WORD     sumumod;               //+0E4
//	WORD     sumoverlay;               //+0E6
//	WORD     cltmissile;               //+0E8
//	WORD     cltmissilea;          //+0EA
//	WORD     cltmissileb;          //+0EC
//	WORD     cltmissilec;          //+0EE
//	WORD     cltmissiled;          //+0F0
//	WORD     cltstfunc;               //+0F2
//	WORD     cltdofunc;               //+0F4
//	WORD     cltprgfunc1;          //+0F6
//	WORD     cltprgfunc2;          //+0F8
//	WORD     cltprgfunc3;          //+0FA
//	WORD     stsound;               //+0FC
//	WORD     stsoundclass;          //+0FE
//	WORD     dosound;               //+100
//	WORD     dosounda;               //+102
//	WORD     dosoundb;               //+104
//	WORD     castoverlay;          //+106
//	WORD     tgtoverlay;               //+108
//	WORD     tgtsound;               //+10A
//	WORD     prgoverlay;               //+10C
//	WORD     prgsound;               //+10E
//	WORD     cltoverlaya;          //+110
//	WORD     cltoverlayb;          //+112
//	DWORD     cltcalc1;               //+114
//	DWORD     cltcalc2;               //+118
//	DWORD     cltcalc3;               //+11C
//	WORD     ItemTarget;               //+120
//	WORD     ItemCastSound;          //+122
//	WORD     ItemCastOverlay;     //+124
//	WORD     Unknown4;               //+126
//	DWORD     perdelay;               //+128
//	WORD     maxlvl;                    //+12C
//	WORD     ResultFlags;          //+12E
//	DWORD     HitFlags;               //+130
//	DWORD     HitClass;               //+134
//	DWORD     calc1;                    //+138
//	DWORD     calc2;                    //+13C
//	DWORD     calc3;                    //+140
//	DWORD     calc4;                    //+144
//	DWORD     Param1;                    //+148
//	DWORD     Param2;                    //+14C
//	DWORD     Param3;                    //+150
//	DWORD     Param4;                    //+154
//	DWORD     Param5;                    //+158
//	DWORD     Param6;                    //+15C
//	DWORD     Param7;                    //+160
//	DWORD     Param8;                    //+164
//	WORD     weapsel;               //+168
//	WORD     ItemEffect;               //+16A
//	BYTE     ItemCltEffect;          //+16C
//	BYTE     ItemTgtDo;               //+16D
//	BYTE     ItemCheckStart;          //+16E
//	BYTE     ItemCltCheckStart;     //+16F
//	DWORD     skpoints;               //+170
//	WORD     reqlevel;               //+174
//	WORD     reqstr;                    //+176
//	WORD     reqdex;                    //+178
//	WORD     reqint;                    //+17A
//	WORD     reqvit;                    //+17C
//	WORD     reqskill1;               //+17E
//	WORD     reqskill2;               //+180
//	WORD     reqskill3;               //+182
//	WORD     startmana;               //+184
//	WORD     minmana;               //+186
//	WORD     manashift;               //+188
//	WORD     Mana;                    //+18A
//	short     LvlMana;               //+18C
//	BYTE     Attackrank;               //+18E
//	BYTE     LineOfSight;          //+18F
//	DWORD     Delay;                    //+190
//	WORD     SkillDesc;               //+194
//	WORD     Unknown5;               //+196
//	DWORD     ToHit;                    //+198
//	DWORD     LevToHit;               //+19C
//	DWORD     ToHitCalc;               //+1A0
//	BYTE     HitShift;               //+1A4
//	WORD     SrcDam;                    //+1A5
//	BYTE     Unknown6;               //+1A7
//	DWORD     MinDam;                    //+1A8
//	DWORD     MaxDam;                    //+1AC
//	DWORD     MinLevDam1;               //+1B0
//	DWORD     MinLevDam2;               //+1B4
//	DWORD     MinLevDam3;               //+1B8
//	DWORD     MinLevDam4;               //+1BC
//	DWORD     MinLevDam5;               //+1C0
//	DWORD     MaxLevDam1;               //+1C4
//	DWORD     MaxLevDam2;               //+1C8
//	DWORD     MaxLevDam3;               //+1CC
//	DWORD     MaxLevDam4;               //+1D0
//	DWORD     MaxLevDam5;               //+1D4
//	DWORD     DmgSymPerCalc;          //+1D8
//	DWORD     EType;                    //+1DC
//	DWORD     Emin;                    //+1E0
//	DWORD     Emax;                    //+1E4
//	DWORD     EMinLev1;               //+1E8
//	DWORD     EMinLev2;               //+1EC
//	DWORD     EMinLev3;               //+1F0
//	DWORD     EMinLev4;               //+1F4
//	DWORD     EMinLev5;               //+1F8
//	DWORD     EMaxLev1;               //+1FC
//	DWORD     EMaxLev2;               //+200
//	DWORD     EMaxLev3;               //+204
//	DWORD     EMaxLev4;               //+208
//	DWORD     EMaxLev5;               //+20C
//	DWORD     EDmgSymPerCalc;          //+210
//	DWORD     ELen;                    //+214
//	DWORD     ELevLen1;               //+218
//	DWORD     ELevLen2;               //+21C
//	DWORD     ELevLen3;               //+220
//	DWORD     ELenSymPerCalc;          //+224
//	WORD     restrict;               //+228
//	WORD     state1;                    //+22A
//	WORD     state2;                    //+22C
//	WORD     state3;                    //+22E
//	WORD     aitype;                    //+230
//	WORD     aibonus;               //+232
//	DWORD     CostMult;               //+234
//	DWORD     CostAdd;               //+238
//};
//Yohann: thx
//Kingpin: /*
//usemanaondo
//repeat
//TgtPlaceCheck
//interrupt
//leftskill
//AttackNoMana
//TargetItem
//TargetAlly
//TargetPet
//TargetCorpse
//SearchOpenXY
//SearchEnemyNear
//SearchEnemyXY
//TargetableOnly
//UseAttackRate
//durability
//enhanceable
//noammo
//InGame
//scroll
//general
//periodic
//aura
//passive
//Kick
//InTown
//prgstack
//finishing
//progressive
//range
//warp
//weaponsnd
//stsounddelay
//stsuccessonly
//lob
//decquant
//immediate
//
//Kingpin: those columns should be there also
//*/
//
//struct DifficultyLevelsBIN
//{
//	DWORD	resistPenalty;	//+00
//	BYTE	uk1[1];			//+04
//};
//
//struct SuperUniqueBIN
//{
//};
//
//struct MonStatsBIN	//size=0x1A8 (424)
//{
//	BYTE	uk1[0x6];		//+00
//	WORD	monsterNameID;	//+06
//	BYTE	uk2[0x168];		//+08
//	WORD	skill[8];		//+170
//	BYTE	skillArg[8];	//+180
//	BYTE	uk3[0x20];		//+188
//};							//+1A8
//
//struct ItemTypesBIN //size=0xE4 (228) (source : fct of dll)
//{
//	DWORD	code;			//+00
//	BYTE	uk1[0x11];		//+04
//	BYTE	rare;			//+15
//	BYTE	uk2[0x09];		//+16
//	BYTE	staffmods;		//+1F
//	BYTE	uk3[0xC4];		//+20
//};							//+E4
//
//struct AffixBIN //size=0x90 (144) (source : fct of dll) magicsuffix + magicprefix + automagic
//{
//	char	name[0x20];		//+00
//	WORD	nameCode;		//+20
//	WORD	version;		//+22
//	DWORD	mod1code;		//+24
//	DWORD	mod1param;		//+28
//	DWORD	mod1min;		//+2C
//	DWORD	mod1max;		//+30
//	DWORD	mod2code;		//+34
//	DWORD	mod2param;		//+38
//	DWORD	mod2min;		//+3C
//	DWORD	mod2max;		//+40
//	DWORD	mod3code;		//+44
//	DWORD	mod3param;		//+48
//	DWORD	mod3min;		//+4C
//	DWORD	mod3max;		//+50
//	BYTE	spawnable;		//+54
//	BYTE	uk1[0x1];		//+55
//	WORD	transformcolor;	//+56
//	DWORD	level;			//+58
//	DWORD	group;			//+5C
//	DWORD	maxlevel;		//+60
//	BYTE	rare;			//+64
//	BYTE	levelreq;		//+65
//	BYTE	classspecific;	//+66
//	BYTE	classf;			//+67
//	BYTE	classlevelreq;	//+68
//	BYTE	uk2[0x1];		//+69
//	WORD	itype1;			//+6A
//	WORD	itype2;			//+6C
//	WORD	itype3;			//+6E
//	WORD	itype4;			//+70
//	WORD	itype5;			//+72
//	WORD	itype6;			//+74
//	WORD	itype7;			//+76
//	WORD	etype1;			//+78
//	WORD	etype2;			//+7A
//	WORD	etype3;			//+7C
//	WORD	etype4;			//+7E
//	WORD	etype5;			//+80
//	BYTE	frequency;		//+82
//	BYTE	uk3[0x1];		//+83
//	DWORD	divide;			//+84
//	DWORD	multiply;		//+88
//	DWORD	add;			//+8C
//};
//
//struct PropertiesBIN // size=0x2E (46) (source total : fct of dll)
//{
//	WORD	modcode;		//+00
//	BYTE	set1;			//+02
//	BYTE	set2;			//+03
//	BYTE	set3;			//+04
//	BYTE	set4;			//+05
//	BYTE	set5;			//+06
//	BYTE	set6;			//+07
//	BYTE	set7;			//+08
//	BYTE	uk1[0x1];		//+09
//
//	WORD	val1;			//+0A
//	WORD	val2;			//+0C
//	WORD	val3;			//+0E
//	WORD	val4;			//+10
//	WORD	val5;			//+12
//	WORD	val6;			//+14
//	WORD	val7;			//+16
//
//	BYTE	func1;			//+18
//	BYTE	func2;			//+19
//	BYTE	func3;			//+1A
//	BYTE	func4;			//+1B
//	BYTE	func5;			//+1C
//	BYTE	func6;			//+1D
//	BYTE	func7;			//+1E
//	BYTE	uk2[0x1];		//+1F
//
//	WORD	stat1;			//+20
//	WORD	stat2;			//+22
//	WORD	stat3;			//+24
//	WORD	stat4;			//+26
//	WORD	stat5;			//+28
//	WORD	stat6;			//+2A
//	WORD	stat7;			//+2C
//};
//
//
//struct ItemStatCostBIN // size=0x144 (324) (source total : fct of dll) maxline = 0x1FF = 511
//{
//	DWORD	statID;			//+00
//	union					//+04
//	{
//		DWORD	flags;
//		struct
//		{
//			DWORD sendOther : 1;			//0x00000001
//			DWORD signedf : 1;			//0x00000002
//			DWORD damagerelated : 1;		//0x00000004
//			DWORD itemspecific : 1;		//0x00000008
//			DWORD direct : 1;				//0x00000010
//			DWORD fuk1 : 4;				//0x000001E0
//			DWORD updateanimrate : 1;		//0x00000200
//			DWORD fmin : 1;				//0x00000400
//			DWORD fcallback : 1;			//0x00000800
//			DWORD saved : 1;				//0x00001000
//			DWORD cvssigned : 1;			//0x00002000
//			DWORD fuk2 : 18;				//0xFFFFC000
//		};
//	};
//	BYTE	sendBits;		//+08
//	BYTE	sendParamBits;	//+09
//	BYTE	csvbits;		//+0A
//	BYTE	csvparam;		//+0B
//	DWORD	divide;			//+0C
//	DWORD	multiply;		//+10
//	DWORD	add;			//+14
//	BYTE	valshift;		//+18
//	BYTE	saveBits;		//+19
//	BYTE	saveBits109;	//+1A	//are only for conversion
//	BYTE	uk2[0x1];		//+1B
//	DWORD	saveAdd;		//+1C
//	DWORD	saveAdd109;		//+20	//are only for conversion
//	DWORD	saveParamBits;	//+24
//	BYTE	uk3[0x4];		//+28
//	DWORD	minaccr;		//+2C
//	BYTE	encode;			//+30
//	BYTE	uk4[0x1];		//+31
//	WORD	maxstat;		//+32
//	WORD	descpriority;	//+34
//	BYTE	descfunc;		//+36
//	BYTE	descval;		//+37
//	WORD	descstrpos;		//+38
//	WORD	descstrneg;		//+3A
//	WORD	descstr2;		//+3C
//	WORD	dgrp;			//+3E
//	BYTE	dgrpfunc;		//+40
//	BYTE	dgrpval;		//+41
//	WORD	dgrpstrpos;		//+42
//	WORD	dgrpstrneg;		//+44
//	WORD	dgrpstr2;		//+46
//	WORD	itemevent1;		//+48
//	WORD	itemevent2;		//+4A
//	WORD	itemeventfunc1;	//+4C
//	WORD	itemeventfunc2;	//+4E
//	BYTE	keepzero;		//+50
//	BYTE	uk5[0x3];		//+51
//	BYTE	op;				//+54
//	BYTE	opParam;		//+55
//	WORD	opStat1;		//+58
//	WORD	opStat2;		//+5A
//	WORD	opStat3;		//+5C
//	BYTE	uk6[0xE2];		//+5E
//	DWORD	stuff;			//+140
//};
//
//struct InventoryBIN // size=0xF0 (240) (source total : fct of dll)
//{
//	DWORD	invLeft;		//+00
//	DWORD	invRight;		//+04
//	DWORD	invTop;			//+08
//	DWORD	invBottom;		//+0C
//	BYTE	gridX;			//+10
//	BYTE	gridY;			//+11
//	BYTE	uk1[2];			//+12
//	DWORD	gridLeft;		//+14
//	DWORD	gridRight;		//+18
//	DWORD	gridTop;		//+1C
//	DWORD	gridBottom;		//+20
//	BYTE	gridBoxWidth;	//+24
//	BYTE	gridBoxHeight;	//+25
//	BYTE	uk2[2];			//+26
//	DWORD	rArmLeft;		//+28
//	DWORD	rArmRight;		//+2C
//	DWORD	rArmTop;		//+30
//	DWORD	rArmBottom;		//+34
//	BYTE	rArmWidth;		//+38
//	BYTE	rArmHeight;		//+39
//	BYTE	uk3[2];			//+3A
//	DWORD	torsoLeft;		//+3C
//	DWORD	torsoRight;		//+40
//	DWORD	torsoTop;		//+44
//	DWORD	torsoBottom;	//+48
//	BYTE	torsoWidth;		//+4C
//	BYTE	torsoHeight;	//+4D
//	BYTE	uk4[2];			//+4E
//	DWORD	lArmLeft;		//+50
//	DWORD	lArmRight;		//+54
//	DWORD	lArmTop;		//+58
//	DWORD	lArmBottom;		//+5C
//	BYTE	lArmWidth;		//+60
//	BYTE	lArmHeight;		//+61
//	BYTE	uk5[2];			//+62
//	DWORD	headLeft;		//+64
//	DWORD	headRight;		//+68
//	DWORD	headTop;		//+6C
//	DWORD	headBottom;		//+70
//	BYTE	headWidth;		//+74
//	BYTE	headHeight;		//+75
//	BYTE	uk6[2];			//+76
//	DWORD	neckLeft;		//+78
//	DWORD	neckRight;		//+7C
//	DWORD	neckTop;		//+80
//	DWORD	neckBottom;		//+84
//	BYTE	neckWidth;		//+88
//	BYTE	neckHeight;		//+89
//	BYTE	uk7[2];			//+8A
//	DWORD	rHandLeft;		//+8C
//	DWORD	rHandRight;		//+90
//	DWORD	rHandTop;		//+94
//	DWORD	rHandBottom;	//+98
//	BYTE	rHandWidth;		//+9C
//	BYTE	rHandHeight;	//+9D
//	BYTE	uk8[2];			//+9E
//	DWORD	lHandLeft;		//+A0
//	DWORD	lHandRight;		//+A4
//	DWORD	lHandTop;		//+A8
//	DWORD	lHandBottom;	//+AC
//	BYTE	lHandWidth;		//+B0
//	BYTE	lHandHeight;	//+B1
//	BYTE	uk9[2];			//+B2
//	DWORD	beltLeft;		//+B4
//	DWORD	beltRight;		//+B8
//	DWORD	beltTop;		//+BC
//	DWORD	beltBottom;		//+C0
//	BYTE	beltWidth;		//+C4
//	BYTE	beltHeight;		//+C5
//	BYTE	uk10[2];		//+C6
//	DWORD	feetLeft;		//+C8
//	DWORD	feetRight;		//+CC
//	DWORD	feetTop;		//+D0
//	DWORD	feetBottom;		//+D4
//	BYTE	feetWidth;		//+D8
//	BYTE	feetHeight;		//+D9
//	BYTE	uk11[2];		//+DA
//	DWORD	glovesLeft;		//+DC
//	DWORD	glovesRight;	//+E0
//	DWORD	glovesTop;		//+E4
//	DWORD	glovesBottom;	//+E8
//	BYTE	glovesWidth;	//+EC
//	BYTE	glovesHeight;	//+ED
//	BYTE	uk12[2];		//+EE
//};
//
//
//struct DataTables//01EE6A20 * 01FDA2D0 //second comments=1.11
//{
//	BYTE			uk1[0xA78];			//+000
//	MonStatsBIN* monStats;			//+A78 //1.11 and 1.10
//	BYTE			uk2[0x4];			//+A7C
//	DWORD			nbMonStats;			//+A80 //1.11 and 1.10
//	BYTE			uk3[0x108];			//+A84
//	SkillDescBIN* skilldesc;			//+B8C
//	BYTE			uk4[0x4];			//+B90
//	DWORD			nbSkilldesc;		//+B94
//	SkillsBIN* skills;				//+B98
//	BYTE			uk5[0x4];			//+B9C
//	DWORD			nbSkills;			//+BA0
//	int* nbSkillsPerPlayer;	//+BA4
//	int				maxSkillsPerPlayer;	//+BA8
//	WORD* playerSkills;		//+BAC
//	BYTE			uk6[0x14];			//+BB0
//	CharStatsBIN* charStats;			//+BC4
//	DWORD			nbCharStats;		//+BC8
//	ItemStatCostBIN* itemStatCost;		//+BCC
//	BYTE			uk7[4];				//+BD0
//	DWORD			nbItemStatCosts;	//+BD4
//	WORD* statsDescPriority;	//+BD8
//	DWORD			nbStatsDescPriority;//+BDC
//	BYTE			uk8[0x18];			//+BE0
//	ItemTypesBIN* itemTypes;			//+BF8
//	DWORD			nbItemTypes;		//+BFC
//	BYTE			uk9[0x0C];			//+C00
//	SetsBIN* sets;				//+C0C //1.11 and 1.10
//	DWORD			nbSets;				//+C10 //1.11 and 1.10
//	BYTE			uk9b[0x4];			//+C14
//	SetItemsBIN* setItems;			//+C18 //1.11 and 1.10
//	DWORD			nbSetItems;			//+C1C //1.11 and 1.10
//	BYTE			uk10[0x4];			//+C20
//	UniqueItemsBIN* uniqueItems;		//+C24 //1.11 and 1.10
//	DWORD			nbUniqueItems;		//+C28 //1.11 and 1.10
//	BYTE			uk11[0x2C];			//+C2C
//	LevelsBIN* levels;				//+C58
//	DWORD			nbLevels;			//+C5C
//	BYTE			uk12[0x64];			//+C60
//	CubeMainBIN* cubemain;			//+CC4 //14C0 by 148 for 1.11
//	DWORD			nbCubemain;			//+CC8 //14C4 for 1.11
//	DWORD			nbInventory;		//+CCC
//	InventoryBIN* inventory;			//+CD0
//	BYTE			uk13[0x04];			//+CD4
//	DWORD			nbItems;			//+CD8
//	ItemsBIN* items;				//+CDC
//	ItemsBIN* itemsBis;			//+CE0
//	BYTE			uk14[0x1F8];		//+CDC
//	DWORD			nbRunes;			//+EDC
//	RunesBIN* runes;				//+EE0
//};
//
//
///* NEXT NOT TESTED IN 1.10 (1.09b)
//
//struct AffixTxt
//{
//	BYTE    mName[0x21];     // +00
//	WORD    mVersion;        // +22
//	DWORD   mMod1code;       // +24
//	DWORD   mMod1param;      // +28
//	DWORD   mMod1min;        // +2c
//	DWORD   mMod1max;        // +30
//	DWORD   mMod2code;       // +34
//	DWORD   mMod2param;      // +38
//	DWORD   mMod2min;        // +3c
//	DWORD   mMod2max;        // +40
//	DWORD   mMod3code;       // +44
//	DWORD   mMod3param;      // +48
//	DWORD   mMod3min;        // +4c
//	DWORD   mMod3max;        // +50
//	WORD    mSpawnable;      // +54
//	WORD    mTransformcolor; // +56
//	DWORD   mLevel;          // +58
//	DWORD   mGroup;          // +5c
//	DWORD   mMaxlevel;       // +60
//	BYTE    mRare;           // +64
//	BYTE    mLevelreq;       // +65
//	BYTE    mClassspecific;  // +66
//	BYTE    mClass;          // +67
//	BYTE    classlevelreq;   // +68
//	BYTE    itype1;          // +69
//	BYTE    itype2;          // +6a
//	BYTE    itype3;          // +6b
//	BYTE    itype4;          // +6c
//	BYTE    itype5;          // +6d
//	BYTE    itype6;          // +6e
//	BYTE    itype7;          // +6f
//	BYTE    etype1;          // +70
//	BYTE    etype2;          // +71
//	BYTE    etype3;          // +72
//	BYTE    etype4;          // +73
//	BYTE    etype5;          // +74
//	DWORD   frequency;       // +75
//	DWORD   mDivide;         // +79
//	DWORD   mMultiply;       // +7D
//	DWORD   mAdd;            // +81
//};
//
//struct AffixTxtTable
//{
//	DWORD       mNbAffix;           // +00 = total affixes
//	AffixTxt*   mStartTable;        // +04 = beginnig ptr
//	AffixTxt*   mSuffixTable;       // +08 = suffix.txt ptr
//	AffixTxt*   mPrefixTable;       // +0c = prefix.txt ptr
//	AffixTxt*   mAutomagicTable;    // +10 = automagic.txt ptr
//};
//*/
//
//struct SkillsBIN;
//struct SkillData;
//struct ObjectsBIN;
//
//#pragma pack(push, 1)
//
//struct CBPlayerData;
//struct CBItemData;
//
//struct NetClient;
//
//struct Game;
//struct Unit;
//struct ActMap;
//struct ActData;
//struct Level;
//struct RoomEx;
//struct Room;
//
//struct UnitAny;
//struct CellContext;
//
//
//struct DT1SubBlock
//{
//	WORD xPos;						//0x00
//	WORD yPos;						//0x02
//	WORD _1;						//0x04
//	BYTE gridX;						//0x06
//	BYTE gridY;						//0x07
//	WORD wTileFormat;				//0x08
//	DWORD dwSubLength;				//0x0A
//	WORD _2;						//0x0E
//	DWORD* pDataOffset;				//0x10
//};
//
//struct TileContext // *.dt1
//{
//	DWORD dwDirection;				//0x00
//	WORD wRoofIndex;				//0x04
//	BYTE bSound;					//0x06
//	BYTE bAnimated;					//0x07
//	DWORD dwSizeY;					//0x08
//	DWORD dwSizeX;					//0x0C
//	DWORD dwZeros1;					//0x10
//	DWORD dwOrientation;			//0x14
//	DWORD dwMainIndex;				//0x18
//	DWORD dwSubIndex;				//0x1C
//	DWORD dwFrame;					//0x20
//	BYTE  _1a;						//0x24 DT1's unknown_a ...
//	BYTE  _1c;						//0x25
//	BYTE  _1b;						//0x26
//	BYTE  _1d;						//0x27
//	BYTE  bFlags[25];				//0x28 For each tile <not sure>
//	BYTE  _2;						//0x39
//	WORD sCacheIndex;				//0x40
//	DWORD _18;						//0x44
//	DWORD dwDataPtr;				//0x48 pointer to sub-block headers
//	DWORD dwSize;					//0x4C length of the sub-blocks
//	DWORD dwSubBlocks;				//0x50
//	DT1SubBlock* pBlocks;			//0x54
//	char* szTileName;				//0x58
//	DWORD **ptBlock;				//0x5C <not sure - maybe its a struct>
//};
//
//struct GFXSettings // size 0x18
//{
//	DWORD bPerspectiveEnable; // 0
//	DWORD bPerspectiveCapable; // 1
//	DWORD bLowQuality; //2
//	DWORD dwGammaValue; //3
//	DWORD bVSync; //4
//	DWORD bBlendedShadows; // 5
//};
//
//struct GFXHelpers
//{
//	void(__fastcall *FillYBufferTable)(void *ppvBits, int nWidth, int nHeight, int aZero);
//	void(__fastcall *DrawVisTile)(int a1, int a2, int a3);
//	void(__fastcall *f3)(int a1, int a2, int a3, int a4);
//	void(__fastcall *DrawGroundTile)(TileContext* tc, int xPos, int yPos, int* pLight);
//	void(__fastcall *DrawWallTile)(int a1, int a2, int a3, int a4);
//	void(__fastcall *DrawBlendedVisTile)(int a1, int a2, int a3, int a4);
//	void(__fastcall *DrawRoofTile)(int a1, int a2, int a3, int a4, int a5);
//};
//
//struct D2RGB
//{
//	BYTE r;
//	BYTE g;
//	BYTE b;
//};
//
//struct fnRendererCallbacks
//{
//	BOOL(__fastcall *InitWindow)(HINSTANCE); // 0
//	BOOL(__fastcall *InitPerspective)(GFXSettings* pgfxSettings, GFXHelpers* pfnHelpers); // 1
//	BOOL(__fastcall *Release)(); // 2
//	BOOL(__fastcall *Init)(HANDLE hWnd, int nResolution); // 3
//	BOOL(__fastcall *Shutdown)(); // 4
//	BOOL(__fastcall *EndCutscene)(HANDLE hWnd, int nResolution, int); // 5
//	BOOL(__fastcall *BeginScene)(BOOL bClear, BYTE nRed, BYTE nGreen, BYTE nBlue); // 6
//	BOOL(__fastcall *EndScene1)(); // 7
//	BOOL(__fastcall *EndScene2)(); // 8
//	BOOL(__fastcall *ResizeWin)(HANDLE HWND, int bResolution); // 9
//	BOOL(__fastcall *GetBackBuffer)(D2RGB* pBuffer); // 10
//	BOOL(__fastcall *ActivateWindow)(int Unk, int Contrast); // 11
//	BOOL(__fastcall *SetOption)(int nOption, int nValue); // 12
//	BOOL(__fastcall *BeginCutscene)(); // 13
//	BOOL(__fastcall *PlayCutscene)(const char* szFile, int nResolution, void *pfframe); // 14
//	BOOL(__fastcall *CheckCutscene)(); // 15
//	BOOL(__fastcall *DecodeSmacker)(const char *szsmacker, BYTE *pbuffer, int nVersion); // 16
//	BOOL(__fastcall *PlaySmacker)(void *pcontext); // 17
//	BOOL(__fastcall *CloseSmacker)(void *pcontext); // 18
//	int(__fastcall *GetRenderStats)(); // 19
//	void(__fastcall *GetScreenSize)(int *pwidth, int *pheight); // 20
//	void(__fastcall *SetScaleFactor)(int nFactor); // 21
//	BOOL(__fastcall *SetGamma)(int nGamma); // 22
//	BOOL(__fastcall *CheckGamma)(); // 23
//	BOOL(__fastcall *SetPerspectiveScale)(); // 24
//	BOOL(__fastcall *AdjustPerspective)(int nXpos, int nYpos, int nBais, int *pxadjust, int *pyadjust); // 25
//	BOOL(__fastcall *ScalePerspectivepos)(int nXpos, int nYpos, int nAngle, int *pxpos, int *pypos, BOOL bOrder); // 26
//	BOOL(__fastcall *SetDefperspectivefactor)(); // 27
//	void(__fastcall *SetPalette)(BYTE* pPalette); // 28
//	BOOL(__fastcall *SetPalettetable)(BYTE** pPalette); // 29
//	BOOL(__fastcall *SetGlobalLight)(BYTE nRed, BYTE nGreen, BYTE nBlue); // 30
//	BOOL(__fastcall *DrawGroundTile)(TileContext* pTile, DWORD** pLight, int nXpos, int nYpos, int nWorldXpos, int nWorldYpos, BYTE nAlpha, int nScreenPanels, BOOL bOne); // 31
//	BOOL(__fastcall *DrawPerspectiveImage)(CellContext* pData, unsigned int nXpos, unsigned int nYpos, BYTE dwGamma, D2C_DrawModes nDrawMode, int nScreenMode, BYTE* pPalette); // 32
//	BOOL(__fastcall *DrawImage)(CellContext* pData, unsigned int nXpos, unsigned int nYpos, BYTE dwGamma, D2C_DrawModes nDrawMode, BYTE* pPalette); // 33
//	BOOL(__fastcall *DrawColouredImage)(CellContext* pData, int nXpos, int nYpos, BYTE dwGamma, D2C_DrawModes nDrawMode, int nColor); // 34
//	BOOL(__fastcall *DrawVerticalCropImage)(CellContext* pData, int nXpos, int nYpos, int nSkipLines, int nDrawLines, D2C_DrawModes nDrawMode); // 35
//	BOOL(__fastcall *DrawShadows)(CellContext* pData, int nXpos, int nYpos); // 36
//	BOOL(__fastcall *DrawImageFast)(CellContext* pData, int nXpos, int nYpos, BYTE nPaletteIndex); // 37
//	BOOL(__fastcall *DrawClippedImage)(CellContext* pData, int nXpos, int nYpos, void* pCropRect, D2C_DrawModes nDrawMode); // 38
//	BOOL(__fastcall *DrawWallTile)(TileContext* pTile, int nXpos, int nYpos, DWORD** pLight, int nScreenPanels); // 39
//	BOOL(__fastcall *DrawRoofTile)(TileContext* pTile, int nXpos, int nYpos, DWORD** pLight, int nScreenPanels, BYTE nAlpha); // 40
//	BOOL(__fastcall *DrawVisTile)(TileContext* pTile, int nXpos, int nYpos, D2C_DrawModes nDrawMode, int nScreenPanels); // 41
//	BOOL(__fastcall *DrawRect)(RECT *Prect, BYTE nColor); // 42
//	BOOL(__fastcall *DrawRectEx)(RECT *Prect, BYTE nColor); // 43
//	BOOL(__fastcall *DrawSolidRect)(RECT *Prect, BYTE nColor); // 44
//	BOOL(__fastcall *DrawSquare)(POINT *pos, int nSize, BYTE nColor); // 45
//	BOOL(__fastcall *DrawSolidRectEx)(int nXStart, int nYStart, int nXEnd, int nYEnd, BYTE nColor, D2C_DrawModes nDrawMode); // 46
//	BOOL(__fastcall *DrawSolidRectAlpha)(int nXStart, int nYStart, int nXEnd, int nYEnd, BYTE nColor, BYTE nAlpha); // 47
//	BOOL(__fastcall *DrawLine)(int nXStart, int nYStart, int nXEnd, int nYEnd, BYTE nColor, BYTE nAlpha); // 48
//	BOOL(__fastcall *ClearScreen)(BOOL bPartial); // 49
//	BOOL(__fastcall *DrawString)(int nXpos, int nYpos, const char *msg, ...); // 50
//	BOOL(__fastcall *DrawLight)(DWORD *plight, DWORD *pplayerlight, int nXpos, int nYpos); // 51
//	BOOL(__fastcall *DebugFillBackBuffer)(int xPos, int yPos); // 52
//	BOOL(__fastcall *ClearCaches)(); // 53
//};
//
////struct Room//size=0x80
////{
////	//ptRoom +48 0 = spawn new units (monster, objects e.tc), 1 = don't spawn any new units
////	DWORD	seed1;						//+00
////	DWORD	seed2;						//+04
////	BYTE	uk8[0x1C];					//+08
////	Room*	ptNearRooms;				//+24
////	DWORD	nbNearRooms;				//+28
////	Unit*	unit;						//+2C
////	BYTE	uk5[0x44];					//+30
////	Room*	ptNextRoom;					//+74
////	union
////	{
////		BYTE	flags;					//+78
////		struct
////		{
////			BYTE isGenerated:1;
////			BYTE isGenerated2:1;//???
////		};
////	};
////};
//
///****************************************************************************
//*                                                                           *
//* DEFINITIONS                                                               *
//*                                                                           *
//*****************************************************************************/
//
//
//
//#pragma pack(1)
//struct sWinMessage
//{
//	DWORD	msg;
//	DWORD	type;
//	DWORD	key;
//	WORD	x;
//	WORD	y;
//	DWORD	uk3;
//	DWORD	uk4;
//	DWORD	managed;
//	DWORD	unmanaged;
//};
//#pragma pack()
//
///*
//struct sDrawImageInfo//size = 0x48 (until 1.10)
//{
//	void* reserved;
//	void* image;
//	DWORD frame;
//	DWORD zero[0xF];
//};*/
//
//struct sDrawImageInfo//size = 0x48
//{
//	DWORD uk1;
//	DWORD uk2;
//	void* image;
//	DWORD uk3;
//	DWORD uk4;
//	void* reserved;
//	DWORD uk5[0xB];
//	DWORD frame;
//};
//
//
//struct saveBitField
//{
//	BYTE*	data;
//	DWORD	maxBits;
//	DWORD	currentByte;
//	DWORD	currentBit;
//	DWORD	overflaw;
//};
//
//struct BINField
//{
//   char*	fieldName;
//   int		type;
//   DWORD	strLength;
//   DWORD	offset;
//   void*	lookup;
//};
//
//struct ItemGenerationData //size=0x84
//{
//	Unit*	ptMonster;		//+00
//	BYTE	uk1[0x04];		//+04
//	Game*	ptGame;			//+08
//	DWORD	ilvl;			//+0C
//	BYTE	uk2[0x04];		//+10
//	DWORD	nTxtFileNo;		//+14
//	DWORD	unknow1;		//+18
//	DWORD	x;				//+1C
//	DWORD	y;				//+20
//	Room*	ptRoom;			//+24
//	WORD	unknow2;		//+28
//	WORD	gameUnknown2;	//+2A
//	BYTE	uk3[0x04];		//+2C
//	DWORD	quality;		//+30
//	BYTE	uk4[0x34];		//+34
//	int		prefixID[3];	//+68 (-1: no prefix; 0:random prefix)
//	int		suffixID[3];	//+74 (-1: no suffix; 0:random suffix)
//	union {					//+80
//		DWORD	flags;
//		struct {
//			DWORD	fuk1:5;		//0x0000001F
//			DWORD	unknow3:1;	//0x00000020
//		};
//	};
//};
//
//struct AIParam {
//	void*			control;            //+0x00
//	void*			u_0x04;             //+0x04
//	Unit*			target;				//+0x08
//	void*			u_0x0C;             //+0x0C
//	void*			u_0x10;             //+0x10
//	DWORD			distanceToTarget;   //+0x14
//	BOOL			engagedInCombat;    //+0x18
//	MonStatsBIN*	ptMonStatsBIN;		//+0x1C
//	void*			ptMonStats2BIN;		//+0x20
//};
//
///*=================================================================*/
///*   Data Structure to Update Client                               */
///*=================================================================*/
//struct DataPacket
//{
//	BYTE mType;			// +00 Packet Type
//	BYTE mFunc;			// +02 Function to Call
//	BYTE mSize;			// +04 Size of the Packet
//	DWORD mReserved;	// +06 Used with items
//	BYTE mUnitType;		// +0A Always '0'
//	DWORD mPlayerID;	// +0C The Player ID (ptUnit + 08h)
//	DWORD mItemID;		// +10 The Item ID
//	DWORD mMod1_ID;		// +14 The Stat/Mod ID
//	DWORD mParam1;		// +18 3 Paramters
//	DWORD mParam2;		// +1C
//	DWORD mParam3;		// +20
//};
//
///*=================================================================*/
///*  Skill Structure.                                               */
///*=================================================================*/
//
//struct SkillData
//{								//Offset from Code. (size = 0x3C or 0x40)
//	SkillsBIN* ptSkillBin;		//+00
//	SkillData* ptNextSkill;	//+04
//	DWORD	mode;           //+08
//	DWORD	uk1[3];         //+0C
//	DWORD	targetInfo;     //+18
//	DWORD	targetType;     //+1c
//	DWORD	targetUNID;     //+20
//	DWORD	uk2;            //+24
//	DWORD	slvl;           //+28
//	DWORD	slvlBonus;      //+2c
//	DWORD	uk3;            //+30
//	int		state;          //+34 (-1 if index exist)
//	DWORD	param1;			//+38 (nb current charge)
//	DWORD	param2;			//+3C
//};
//
//struct Skills
//{								//Offset from Code.
//	DWORD		gameRelated;	//+00
//	SkillData* ptFirstSkill;	//+04
//	SkillData* ptLeftSkill;	//+08
//	SkillData* ptRightSkill;	//+0c
//	SkillData* ptCurrentSkill;	//+10
//};
//
//
///*=================================================================*/
///*   Unit Data Structure.                                          */
///*=================================================================*/
//
//struct Position
//{
//	DWORD x;
//	DWORD y;
//};
//
///*struct Room//size=0x80
//{
////ptRoom +48 0 = spawn new units (monster, objects e.tc), 1 = don't spawn any new units
//	DWORD	seed1;						//+00
//	DWORD	seed2;						//+04
//	BYTE	uk8[0x1C];					//+08
//	Room*	ptNearRooms;				//+24
//	DWORD	nbNearRooms;				//+28
//	Unit*	unit;						//+2C
//	BYTE	uk5[0x44];					//+30
//	Room*	ptNextRoom;					//+74
//	union
//	{
//		BYTE	flags;					//+78
//		struct
//		{
//			BYTE isGenerated:1;
//			BYTE isGenerated2:1;//???
//		};
//	};
//};*/
//
//struct RoomEx //size=5C
//{
//	DWORD		__00[2];		//0x00
//	RoomEx**	roomExNear;		//0x08
//	DWORD		__0C[5];		//0x0C
//	struct {
//		INT32	roomNumber;		//0x00
//		void*	__04;			//0x04
//		PINT32	subNumber;		//0x08
//	} *pType2Info;				//0x20
//	RoomEx*		ptNextRoomEx;	//0x24
//	UINT32		roomFlags;		//0x28
//	UINT32		roomsNearCount;	//0x2C
//	Room*		ptRoom;			//0x30
//	INT32		posX;			//0x34
//	INT32		posY;			//0x38
//	INT32		sizeX;			//0x3C
//	INT32		sizeY;			//0x40
//	DWORD		__44;			//0x44
//	UINT32		presetType;		//0x48
//	void*		ptWarpTiles;	//0x4C
//	DWORD		__50[2];		//0x50
//	Level*		ptLevel;		//0x58
//};
//
//struct Room //size=0x80
//{
//	Room**		ptNearRooms;		//0x00
//	DWORD		__04[3];			//0x04
//	RoomEx*		ptRoomEx;			//0x10
//	DWORD		__14[3];			//0x14
//	void*		coll;				//0x20
//	INT32		nbNearRooms;		//0x24
//	DWORD		__28[9];			//0x28
//	DWORD		startX;				//0x4C
//	DWORD		startY;				//0x50
//	DWORD		sizeX;				//0x54
//	DWORD		sizeY;				//0x58
//	DWORD		__5C[6];			//0x5C
//	Unit*		ptFirstUnit;		//0x74
//	DWORD		__78;				//0x78
//	Room*		ptNextRoom;			//0x7C
//};
//
//struct items_line {
//	char flippy_file[32]; //0x00
//	char inv_file[32]; //0x20
//	char unique_inv_file[32]; //0x40
//	char setinv_file[32]; //0x60
//	union {
//		uint32_t number_code; //0x80
//		char string_code[4]; //0x80
//	};
//
//	uint32_t norm_code; //0x84
//	uint32_t uber_code; //0x88
//	uint32_t ultra_code; //0x8C
//	uint32_t alternate_gfx; //0x90
//	void* spell; //0x94
//	uint16_t state; //0x98
//	uint16_t cstate1; //0x9A
//	uint16_t cstate2; //0x9C
//	uint16_t stat1; //0x9E
//	uint16_t stat2; //0xA0
//	uint16_t stat3; //0xA2
//	uint32_t calc1; //0xA4
//	uint32_t calc2; //0xA8
//	uint32_t calc3; //0xAC
//	uint32_t len; //0xB0
//	uint16_t spell_desc; //0xB4
//	uint16_t spell_desc_str; //0xB6
//	uint32_t spell_desc_calc; //0xB8
//	uint32_t better_gem; //0xBC
//	uint32_t weapon_class; //0xC0
//	uint32_t two_handed_weapon_class; //0xC4
//	uint32_t transmog_type; //0xC8
//	uint32_t min_ac; //0xCC
//	uint32_t max_ac; //0xD0
//	uint32_t gamble_cost; //0xD4
//	uint32_t speed; //0xD8
//	uint32_t bit_field1; //0xDC
//	uint32_t cost; //0xE0
//	uint32_t min_stack; //0xE4
//	uint32_t max_stack; //0xE8
//	uint32_t spawn_stack; //0xEC
//	uint32_t gem_offset; //0xF0
//	uint16_t name_str; //0xF4
//	uint16_t version; //0xF6
//	uint16_t auto_prefix; //0xF8
//	uint16_t missile_type; //0xFA
//	uint8_t rarity; //0xFC
//	uint8_t level; //0xFD
//	uint8_t min_damage; //0xFE
//	uint8_t max_damage; //0xFF
//	uint8_t min_misdamage; //0x100
//	uint8_t max_misdamage; //0x101
//	uint8_t two_hand_min_damage; //0x102
//	uint8_t two_hand_max_damage; //0x103
//	uint16_t range_adder; //0x104
//	uint16_t str_bonus; //0x106
//	uint16_t dex_bonus; //0x108
//	uint16_t req_str; //0x10A
//	uint16_t req_dex; //0x10C
//	uint8_t absorbs; //0x10E
//	uint8_t inv_width; //0x10F
//	uint8_t inv_height; //0x110
//	uint8_t block; //0x111
//	uint8_t durability; //0x112
//	uint8_t no_durability; //0x11
//	uint8_t missile; //0x114
//	uint8_t component; //0x115
//	uint8_t right_arm; //0x116
//	uint8_t left_arm; //0x117
//	uint8_t torso; //0x118
//	uint8_t legs; //0x119
//	uint8_t right_spad; //0x11A
//	uint8_t left_spad; //0x11B
//	uint8_t two_handed; //0x11C
//	uint8_t useable; //0x11D
//	uint16_t type; //0x11E
//	uint16_t type2; //0x120
//	uint16_t subtype; //0x122
//	uint16_t drop_sound; //0x124
//	uint16_t use_sound; //0x126
//	uint8_t drop_sfx_frame; //0x128
//	uint8_t unique; //0x129
//	uint8_t quest; //0x12A
//	uint8_t quest_diff_check; //0x12B
//	uint8_t transparent; //0x12C
//	uint8_t trans_tbl; //0x12D
//	uint8_t pad0_x12_e; //0x12E
//	uint8_t light_radius; //0x12F
//	uint8_t belt; //0x130
//	uint8_t auto_belt; //0x131
//	uint8_t stackable; //0x132
//	uint8_t spawnable; //0x133
//	uint8_t spell_icon; //0x134
//	uint8_t dur_warning; //0x135
//	uint8_t quantity_warning; //0x136
//	uint8_t has_inv; //0x137
//	uint8_t gem_sockets; //0x138
//	uint8_t transmogrify; //0x139
//	uint8_t transmog_min; //0x13A
//	uint8_t transmog_max; //0x13B
//	uint8_t hit_class; //0x13C
//	uint8_t one_or_two_handed; //0x13D
//	uint8_t gem_apply_type; //0x13E
//	uint8_t level_req; //0x13F
//	uint8_t magic_lvl; //0x140
//	uint8_t transform; //0x141
//	uint8_t inv_trans; //0x142
//	uint8_t compact_save; //0x143
//	uint8_t skip_name; //0x144
//	uint8_t nameable; //0x145
//	uint8_t akara_min; //0x146
//	uint8_t gheed_min; //0x147
//	uint8_t charsi_min; //0x148
//	uint8_t fara_min; //0x149
//	uint8_t lysander_min; //0x14A
//	uint8_t drognan_min; //0x14B
//	uint8_t hralti_min; //0x14C
//	uint8_t alkor_min; //0x14D
//	uint8_t ormus_min; //0x14E
//	uint8_t elzix_min; //0x14F
//	uint8_t asheara_min; //0x150
//	uint8_t cain_min; //0x151
//	uint8_t halbu_min; //0x152
//	uint8_t jamella_min; //0x153
//	uint8_t malah_min; //0x154
//	uint8_t larzuk_min; //0x155
//	uint8_t drehya_min; //0x156
//	uint8_t akara_max; //0x157
//	uint8_t gheed_max; //0x158
//	uint8_t charsi_max; //0x159
//	uint8_t fara_max; //0x15A
//	uint8_t lysander_max; //0x15B
//	uint8_t drognan_max; //0x15C
//	uint8_t hralti_max; //0x15D
//	uint8_t alkor_max; //0x15E
//	uint8_t ormus_max; //0x15F
//	uint8_t elzix_max; //0x160
//	uint8_t asheara_max; //0x161
//	uint8_t cain_max; //0x162
//	uint8_t halbu_max; //0x163
//	uint8_t jamella_max; //0x164
//	uint8_t malah_max; //0x165
//	uint8_t larzuk_max; //0x166
//	uint8_t drehya_max; //0x167
//	uint8_t akara_magic_min; //0x168
//	uint8_t gheed_magic_min; //0x169
//	uint8_t charsi_magic_min; //0x16A
//	uint8_t fara_magic_min; //0x16B
//	uint8_t lysander_magic_min; //0x16C
//	uint8_t drognan_magic_min; //0x16D
//	uint8_t hralti_magic_min; //0x16E
//	uint8_t alkor_magic_min; //0x16F
//	uint8_t ormus_magic_min; //0x170
//	uint8_t elzix_magic_min; //0x171
//	uint8_t asheara_magic_min; //0x172
//	uint8_t cain_magic_min; //0x173
//	uint8_t halbu_magic_min; //0x174
//	uint8_t jamella_magic_min; //0x175
//	uint8_t malah_magic_min; //0x176
//	uint8_t larzuk_magic_min; //0x177
//	uint8_t drehya_magic_min; //0x178
//	uint8_t akara_magic_max; //0x179
//	uint8_t gheed_magic_max; //0x17A
//	uint8_t charsi_magic_max; //0x17B
//	uint8_t fara_magic_max; //0x17C
//	uint8_t lysander_magic_max; //0x17D
//	uint8_t drognan_magic_max; //0x17E
//	uint8_t hralti_magic_max; //0x17F
//	uint8_t alkor_magic_max; //0x180
//	uint8_t ormus_magic_max; //0x181
//	uint8_t elzix_magic_max; //0x182
//	uint8_t asheara_magic_max; //0x183
//	uint8_t cain_magic_max; //0x184
//	uint8_t halbu_magic_max; //0x185
//	uint8_t jamella_magic_max; //0x186
//	uint8_t malah_magic_max; //0x187
//	uint8_t larzuk_magic_max; //0x188
//	uint8_t drehya_magic_max; //0x189
//	uint8_t akara_magic_lvl; //0x18A
//	uint8_t gheed_magic_lvl; //0x18B
//	uint8_t charsi_magic_lvl; //0x18C
//	uint8_t fara_magic_lvl; //0x18D
//	uint8_t lysander_magic_lvl; //0x18E
//	uint8_t drognan_magic_lvl; //0x18F
//	uint8_t hralti_magic_lvl; //0x190
//	uint8_t alkor_magic_lvl; //0x191
//	uint8_t ormus_magic_lvl; //0x192
//	uint8_t elzix_magic_lvl; //0x193
//	uint8_t asheara_magic_lvl; //0x194
//	uint8_t cain_magic_lvl; //0x195
//	uint8_t halbu_magic_lvl; //0x196
//	uint8_t jamella_magic_lvl; //0x197
//	uint8_t malah_magic_lvl; //0x198
//	uint8_t larzuk_magic_lvl; //0x199
//	uint8_t drehya_magic_lvl; //0x19A
//	uint8_t pad0_x19_b; //0x19B
//	uint32_t nightmare_upgrade; //0x19C
//	uint32_t hell_upgrade; //0x1A0
//	uint8_t perm_store_item; //0x1A4
//	uint8_t multi_buy; //0x1A5
//	uint16_t pad0_x1_a6; //0x1A6
//};
//
//struct item_types_line {
//	char code[4];						//0x00
//	int16_t equiv1;						//0x04
//	int16_t equiv2;						//0x06
//	int8_t repair;						//0x08
//	int8_t body;							//0x09
//	int8_t body_loc1;						//0x0A
//	int8_t body_loc2;						//0x0B
//	int16_t shoots;						//0x0C
//	int16_t quiver;						//0x0E
//	int8_t throwable;					//0x10
//	int8_t reload;						//0x11
//	int8_t re_equip;						//0x12
//	int8_t auto_stack;					//0x13
//	int8_t magic;						//0x14
//	int8_t rare;							//0x15
//	int8_t normal;						//0x16
//	int8_t charm;						//0x17
//	int8_t gem;							//0x18
//	int8_t beltable;						//0x19
//	int8_t max_sock1;						//0x1A
//	int8_t max_sock25;					//0x1B
//	int8_t max_sock40;					//0x1C
//	int8_t treasure_class;				//0x1D
//	int8_t rarity;						//0x1E
//	int8_t staff_mods;					//0x1F
//	int8_t cost_formula;					//0x20
//	int8_t item_class;						//0x21
//	int8_t store_page;					//0x22
//	int8_t var_inv_gfx;					//0x23
//	char inv_gfx1[32];					//0x24
//	char inv_gfx2[32];					//0x44
//	char inv_gfx3[32];					//0x64
//	char inv_gfx4[32];					//0x84
//	char inv_gfx5[32];					//0xA4
//	char inv_gfx6[32];					//0xC4
//};
//
//
//enum unit_type_t : DWORD  {
//	UNIT_TYPE_PLAYER = 0,
//	UNIT_TYPE_MONSTER = 1,
//	UNIT_TYPE_OBJECT = 2,
//	UNIT_TYPE_MISSILE = 3,
//	UNIT_TYPE_ITEM = 4,
//	UNIT_TYPE_VIS_TILE = 5 //unused?
//};
//
//enum player_class_t : DWORD  {
//	PLAYER_CLASS_AMAZON = 0,
//	PLAYER_CLASS_SORCERESS = 1,
//	PLAYER_CLASS_NECROMANCER = 2,
//	PLAYER_CLASS_PALADIN = 3,
//	PLAYER_CLASS_BARBARIAN = 4,
//	PLAYER_CLASS_DRUID = 5,
//	PLAYER_CLASS_ASSASSIN = 6
//};
//
//struct unit3 {
//	unit_type_t type;
//
//	union {
//		player_class_t player_class;
//		DWORD data_record_index;
//	};
//
//	void* memory_pool;
//	DWORD guid;
//	DWORD mode;
//
//	union {
//		DWORD* player_data;
//		DWORD* monster_data;
//		DWORD* object_data;
//		//missile_data* missile_data;
//		DWORD* item_data;
//	};
//
//	BYTE act;
//	BYTE act_padding[0x03];
//	DWORD* drlg_act;
//
//	struct {
//		DWORD low_seed;
//		DWORD high_seed;
//	} seed;
//	DWORD init_seed;
//
//	DWORD* path;
//
//	DWORD* skill_sequence;
//	DWORD skill_sequence_frame_count;
//	DWORD skill_sequence_frame;
//
//	DWORD anim_speed;
//	DWORD skill_sequence_mode;
//
//	DWORD current_frame;
//	DWORD frame_count;
//	WORD anim_speed_w;
//
//	BYTE action_frame;
//	BYTE pad1;
//
//	DWORD* anim_data;
//
//	DWORD* gfxdata;
//	DWORD* gfxdata_copy;
//
//	DWORD* statslistex;
//	DWORD* inventory;
//
//	union {
//		struct {
//			DWORD interact_guid;
//			DWORD interact_type;
//			BYTE interacting;
//		} interaction;
//
//		struct {
//			void* light_map;
//			DWORD start_light_radius;
//			WORD p12_shift_index;
//		} lightning;
//	};
//
//	WORD update_type;
//	unit3* update_unit;
//
//	DWORD* quest_record;
//	DWORD sparky_chest;
//	void* timer_args;
//
//	union {
//		DWORD* game;
//		DWORD sound_sync;
//	};
//
//	char pad2[0x0C];
//
//	void* event;
//
//	unit_type_t owner_type;
//	DWORD owner_guid;
//
//	char pad3[8];
//
//	char* hover_text;
//
//	void* skills;
//
//	void* combat;
//	DWORD hit_class;
//
//	char pad4[4];
//
//	DWORD drop_code;
//
//	char pad5[8];
//
//	union {
//		struct {
//			DWORD unit_flags;
//			DWORD unit_flags_ex;
//		} flags;
//		unsigned long long flags64;
//	};
//
//	char pad6[4];
//
//	DWORD node_index;
//	DWORD get_tick_count;
//
//	union {
//		DWORD get_tick_count2;
//		void* particle_stream;
//	};
//
//	void* timer;
//
//	unit3* change_next_unit; //?
//	unit3* prev_unit;
//	unit3* prev_unit_in_room;
//
//	void* msg_first;
//	void* msg_last;
//
//	bool is_hireling() const {
//		if (type != unit_type_t::UNIT_TYPE_MONSTER)
//			return false;
//
//		return (flags.unit_flags & 0x00000200) == 0x00000200;
//	}
//
//	bool is_pet() const {
//		if (type != unit_type_t::UNIT_TYPE_MONSTER)
//			return false;
//
//		return (flags.unit_flags & 0x80000000) == 0x80000000;
//	}
//};
//
//struct room3//size=0x80
//{
//	//ptRoom +48 0 = spawn new units (monster, objects e.tc), 1 = don't spawn any new units
//	DWORD	seed1;						//+00
//	DWORD	seed2;						//+04
//	BYTE	uk8[0x1C];					//+08
//	room3* pt_near_rooms;				//+24
//	DWORD	nb_near_rooms;				//+28
//	unit3* unit;						//+2C
//	BYTE	uk5[0x44];					//+30
//	room3* pt_next_room;					//+74
//	union {
//		BYTE	flags;					//+78
//		struct {
//			BYTE is_generated : 1;
//			BYTE is_generated2 : 1;//???
//		};
//	};
//};
//
//
//struct Level //size=0x234
//{
//	DWORD		type;				//+000
//	DWORD		flags;				//+004
//	DWORD		__004_010[2];		//+008
//	RoomEx*		ptFirstRoomEx;		//+010
//	DWORD		__014_01C[2];		//+014
//	INT32		posX;				//+01C
//	INT32		posY;				//+020
//	INT32		sizeX;				//+024
//	INT32		sizeY;				//+028
//	DWORD		__0C2_1AC[96];		//+02C
//	Level*		ptNextLevel;		//+1AC
//	DWORD		__1B0;				//+1B0
//	ActData*	ptActData;			//+1B4
//	DWORD		__1B8_1C0[2];		//+1B8
//	DWORD		levelType;			//+1C0
//	DWORD		seed1;				//+1C4
//	DWORD		seed2;				//+1C8
//	DWORD		uk_1CC;				//+1CC
//	UINT32		levelNo;			//+1D0
//	DWORD		__1D4_234[96];		//+1D4
//};
//
//struct ActData //size=0x488
//{
//	DWORD		seed1;				//+000
//	DWORD		seed2;				//+004
//	DWORD		nbRooms;			//+008
//	DWORD		__00C_0094[34];		//+00C
//	DWORD		nTalRashaTombLevel;	//094
//	DWORD		__098;				//+098
//	Game*		ptGame;				//+09C
//	DWORD		__0A0_450[237];		//+0A0
//	BYTE		difficulty;			//+450
//	BYTE		__451_46C[27];		//+451
//	ActMap*		ptActMap;			//+46C
//	DWORD		__470_484[5];		//+470
//	DWORD		nBossMummyTombLevel;//+484
//};
//
//struct ActMap //size=0x60
//{
//	DWORD		isNotManaged;		//+00
//	DWORD		__04;				//+04
//	DWORD		townLevel;			//+08
//	DWORD		seed;				//+0C
//	Room*		ptFirstRoom;		//+10
//	DWORD		actNumber;			//+14
//	DWORD		__18_48[12];		//+18
//	ActData*	ptActData;			//+48
//	DWORD		__50_5C[4];			//+4C
//	void*		ptMemoryPool;		//+5C
//};
//
////ptGame : 04E4007C
//struct Game
//{										//Offset from Code.
//	BYTE	uk1[0x18];					//+00
//	DWORD	_ptLock;					//+18 Unknown
//	DWORD	memoryPool;					//+1C Memory Pool (??)
//	BYTE	uk2[0x4D];					//+20
//	BYTE	difficultyLevel;			//+6D (Difficulty 0,1 or 2)
//	WORD	unknown1;					//+6E Cube puts 4 here
//	DWORD	isLODGame;					//+70 (D2=0 LOD =1) (DWORD ?)
//	BYTE	uk3[0x04];					//+71
//	WORD	unknown2;					//+78
//	BYTE	uk4[0x0E];					//+7A
//	NetClient*	ptClient;				//+88
//	BYTE	__8C[0x1C];					//+8C
//	DWORD	gameFrame;					//+A8
//	BYTE	__AC[0x10];					//+AC
//	ActMap*	mapAct[5];					//+BC
//	BYTE	ukD0[0x1024];				//+D0
//	DWORD*	game10F4;					//+10F4
//	BYTE	uk6[0x28];					//+10F8
//	Unit*	units[0xA00];				//+1120
//	Unit*	roomtitles[0x200];			//+1B20
//};
////WORD ptGame+28 game ID ?
//
//
//
//struct Path //(8 dword)
//{										//Offset from Code.		Size: 20
//	WORD	uk1;						//+00
//	WORD	mapx;						//+02
//	WORD	uk2;						//+04
//	WORD	mapy;						//+06
//	DWORD	uk3;						//+08
//	DWORD	x;							//+0C
//	DWORD	y;							//+10
//	DWORD	uk6;						//+14
//	DWORD	uk7;						//+18
//	Room*	ptRoom;						//+1C
//};
//
//
//struct Inventory
//{										//Offset from Code.		Size: 30 to 40
//	DWORD	tag;						//+00	= 0x01020304
//	BYTE	uk1[0x04];					//+04	=? 0
//	Unit*	ptChar;						//+08
//	Unit*	ptItem;						//+0C
//	BYTE	uk2[0x10];					//+10
//	Unit*	inventory1;					//+20
//	BYTE	uk3[0x04];					//+24
//	DWORD	currentUsedSocket;			//+28 //Kingpin : a variable to know how many sockets that have added to item
//	DWORD	Inventory2C;				//+2C //one value
//	DWORD	Inventory30;				//+30
//	void*	ptCorpse;					//+34
//	BYTE	uk5[0x04];					//+38
//	DWORD	nextCorpseId;				//+3C //max = 15
//	BYTE	uk6[0x04];					//+40
//};
//
//struct D2Stat
//{
//	WORD	index;
//	WORD	id;
//	int		value;
//};
//
//
//struct Stats				//sizeof(Stats)=0x64
//{
//	DWORD	nUnitId;				//+00
//	Unit*	ptUnit;					//+04
//	DWORD	nUnitType;				//+08
//	DWORD	nItemNum;				//+0C
//	union
//	{
//		DWORD	flags;				//+10
//		struct
//		{
//			DWORD fuk1:13;			//0x00001FFF
//			DWORD isDisabled:1;		//0x00002000
//			DWORD fuk2:17;			//0x7FFFC000
//			DWORD dontUseBaseValue:1;//0x80000000
//		};
//	};
//	DWORD	id;						//+14
//	DWORD	uk18;					//+18
//	BYTE	uk2[0x08];				//+1C
//	D2Stat*	ptBaseStatsTable;		//+24
//	WORD	nbBaseStats;			//+28
//	WORD	sizeOfBaseStatsTable;	//+2A ??
//	Stats*	ptStats;				//+2C
//	BYTE	uk3[0x04];				//+30
//	Stats*	ptItemStats;			//+34
//	BYTE	uk4[0x04];				//+38
//	Stats*	ptAffixStats;			//+3C
//	Stats*	ptNextStats2;			//+40
//	union
//	{
//		Unit*	ptChar;				//+44
//		Unit*	ptItem;
//	};
//	D2Stat*	ptStatsTable;			//+48
//	WORD	nbStats;				//+4C
//	WORD	sizeOfStatsTable;		//+4E ??
//	BYTE	uk5[0x8];				//+50
//	BYTE*	unknow0;				//+58 (sizeof(*unknow0)=0x30 (calculated)
//	DWORD	unknow1;				//+5C (=0)
//	DWORD	unknow2;				//+60 (=0)
//};
//
//struct AIControl
//{
//	DWORD	specialState;		// +00 SpecialState - stuff like terror, confusion goes here
//	void*	aiFunction;			// +04 fpAiFunction(); - the primary ai function to call (void * __fastcall)(pGame,pUnit,pAiTickArgs);
//	DWORD	aiFlags;		    // +08 AiFlags
//	DWORD	ownerGUID;			// +0C OwnerGUID - the global unique identifier of the boss or minion owner
//	DWORD	ownerType;			// +10 eOwnerType - the unit type of the boss or minion owner
//	DWORD	args[3];			// +14 dwArgs[3] - three dwords holding custom data used by ai func to store counters (etc)
//	void*	cmdCurrent;			// +20 pCmdCurrents
//	void*	cmdLast;			// +24 pCmdLast
//	Game*	ptGame;				// +28 pGame
//	DWORD	ownerGUID2;			// +2C OwnerGUID - the same as +008
//	DWORD	ownerType2;			// +30 eOwnerType - the same as +00C
//	void*	minionList;			// +34 pMinionList - list of all minions, for boss units (SetBoss in MonStats, Unique, SuperUnique etc)
//	DWORD	trapNo;				// +3C eTrapNo - used by shadows for summoning traps (so they stick to one type usually)
//};
//
//struct MonsterData					// sizeof(MonsterData)=0x60
//{										//Offset from Code.
//	MonStatsBIN*	ptMonStats;			//+000 - pMonStats - record in monstats.txt
//	BYTE			components[0x10];	//+004 - Components[16] - bytes holding the component Ids for each component; Order: HD, TR, LG, RA, LA, RH, LH, SH, S1, S2, S3, S4, S5, S6, S7, S8
//	WORD			seed;				//+014 - NameSeed
//	union
//	{
//		BYTE		flags;				//+016 - TypeFlags
//		struct
//		{
//			BYTE	isOther:1;			// MONTYPE_OTHER(set for some champs, uniques)
//			BYTE	isSuperUnique:1;	// MONTYPE_SUPERUNIQUE
//			BYTE	isChampion:1;		// MONTYPE_CHAMPION
//			BYTE	isUnique:1;			// MONTYPE_UNIQUE
//			BYTE	isMinion:1;			// MONTYPE_MINION
//			BYTE	isPossessed:1;		// MONTYPE_POSSESSED
//			BYTE	isGhostly:1;		// MONTYPE_GHOSTLY
//			BYTE	isMultishot:1;		// MONTYPE_MULTISHOT
//		};
//	};
//	BYTE			lastMode;			//+017 - eLastMode
//	DWORD			duriel;				//+018 - dwDuriel - set only for duriel
//	BYTE			monUModList[10];	//+01C - MonUModList[9] - nine bytes holding the Ids for each MonUMod assigned to the unit
//	DWORD			superUniqueID;		//+026
//	AIControl*		ptAiGeneral;		//+02A
//	BYTE			uk2[0x32];			//+02E
//};
//
//struct ObjectData2
//{
//	ObjectsBIN*	ptObjectsBIN;
//	BYTE		levelID;
//};
///*
//Kingpin: struct MonsterData
//{
//     BYTE     uk1[0x13];          // +00
//     DWORD     Flags;               // +14
//     DWORD     uk2;               // +18
//     DWORD     MinionOwnerID;     // +1C
//     BYTE     uk3[0x5];          // +20
//     WORD     SuperUniqueID;     // +26 Superunique ID of monster
//     D2Game*     ptGame;               // +28 ptGame
//};
//*/
//
//#define F2_ITEM_IS_IDENTIFIED 0x10 //or F_IS_IDENTIFIED ?
//
//struct ItemData//size=0x74
//{										//Offset from Code.
//	DWORD	quality;					//+00
//	DWORD	seedLow;					//+04
//	DWORD	seedHi;						//+08
//	DWORD	playerID;					//+0C #10734 / #10735 (PCInventory->ptPlayer->0C)
//	DWORD	seedStarting;				//+10
//	DWORD	flags1;						//+14
//	union {
//		DWORD	flags2;					//+18
//		struct {
//			DWORD	fuk1:1;				//0x00000001
//			DWORD	isIndentified:1;	//0x00000002
//			DWORD	fuk2:2;				//0x0000000C
//			DWORD	isUnindentified:1;	//0x00000010
//			DWORD	fuk3:3;				//0x000000E0
//			DWORD	isBroken:1;			//0x00000100
//			DWORD	fuk4:2;				//0x00000600
//			DWORD	isSocketed:1;		//0x00000800
//			DWORD	fuk5:10;			//0x003FF000
//			DWORD	isEtheral:1;		//0x00400000
//			DWORD	fuk6:3;				//0x03800000
//			DWORD	isRuneword:1;		//0x04000000
//			DWORD	fuk7:1;				//0x08000000
//			DWORD	isPersonalized:1;	//0x10000000
//			DWORD	fuk8:3;				//0xE0000000
//		};
//	};
///*
//ITEMFLAG_NEWITEM               = 0x00000001,
//ITEMFLAG_TAGETING               = 0x00000004,
//ITEMFLAG_UNIDENTIFIED               = 0x00000010,
//ITEMFLAG_QUANTITY               = 0x00000020,
//ITEMFLAG_Durability               = 0x00000100,
//ITEMFLAG_UNKNOWN2               = 0x00000400,
//ITEMFLAG_SOCKETED               = 0x00000800,
//ITEMFLAG_NON_SELLABLE               = 0x00001000,
//ITEMFLAG_NEWITEM2               = 0x00002000,
//ITEMFLAG_UNKNOWN3               = 0x00004000,
//ITEMFLAG_CHECKSECPRICE               = 0x00010000,
//ITEMFLAG_CHECKGAMBLEPRICE          = 0x00020000,
//ITEMFLAG_UNKNOWN4               = 0x00080000,
//ITEMFLAG_INDESTRUCTIBLE(ETHERAL) = 0x00400000,
//ITEMFLAG_UNKNOWN5               = 0x00800000,
//ITEMFLAG_FROMPLAYER               = 0x01000000,
//ITEMFLAG_RUNEWORD               = 0x04000000
//*/
//	DWORD	guid1;						//+1C Global Unique ID 1
//	DWORD	guid2;						//+20 Global Unique ID 2
//	DWORD	guid3;						//+24 Global Unique ID 3
//	DWORD	uniqueID;					//+28
//	BYTE	ilvl;						//+2C
//	BYTE	uk1[0x03];					//+2D
//	WORD	version;					//+30
//	WORD	rarePrefix;					//+32
//	WORD	rareSuffix;					//+34
//	WORD	autoPref;					//+36
//	WORD	prefix[3];					//+38
//	WORD	suffix[3];					//+3E
//	BYTE	equipLoc;					//+44
//    /*	location if equipped
//	*	00 = noequip/inBelt
//	*   01 = head
//	*	02 = neck
//	*	03 = tors
//	*	04 = rarm
//	*	05 = larm
//	*	06 = lrin
//	*	07 = rrin
//	*	08 = belt
//	*	09 = feet
//	*	0A = glov
//	*	0B = ralt
//	*	0C = lalt
//*/
//	BYTE	page;						//+45
//    /*	page dans laquel se trouve l'item
//    *	FF = mouse/equip/onEarth
//    *	00 = inventory
//    *   01 = cube
//    *	04 = stash
//    */
//	BYTE	uk4[0x01];					//+46
//	BYTE	ItemData3;					//+47 //D2Common10854 D2Common10853
//	BYTE	pEarLevel;					//+48
//	BYTE	varGfx;						//+49
//	char	IName[0x12];				//+4A //inscribed/ear name
//	Inventory*	ptInventory;			//+5C
//	Unit*	ptPrevItem;					//+60
//	Unit*	ptNextItem;					//+64
//	BYTE	uk8[0x01];					//+68
//	BYTE	ItemData2;					//+69
//	BYTE	uk9[0x0A];					//+6A
//};
//
//
//struct NetClient
//{
//	DWORD	clientID;					//+00
//	BYTE	uk1[0x06];					//+04
//	union {								//+0A
//		WORD	flag;
//		struct {
//			WORD f1:1;
//			WORD f2:1;
//			WORD isHardCoreGame:1;
//		};
//	};
//	BYTE	uk2;						//+0C
//	char	name[0x10];					//+0D
//	BYTE	uk3[0x15F];					//+1D
//	BYTE*	savefile;					//+17C
//	DWORD	finalSize;					//+180
//	DWORD	counter;					//+184
//	DWORD	currentSize;				//+188
//	BYTE	uk4[0x1C];					//+18C
//	Game*	ptGame;						//+1A8
//	//+1A8 is ptGame
//	//+4A8 ptNextClient
///*
//Kingpin: ptPclient
//+16C is either act or unit type
//+170 Active UniqueID for player
//+174 Active ptPlayer on Client
//+1a8 ptGame
//+1b4 Current or next ptRoom
//*/
//};
///*
//struct PlayerData
//{
//	char		name[0x10];				//+00 (size min 0x08 max 0x11)
//	BYTE		uk1[0x8C];				//+10
//	NetClient*	ptNetClient;			//+9C
//};
//*/
//struct PlayerData
//{
//	char		name[0x10];				//+00	Player Name
//	void*		ptQuest[3];				//+10	Quest Pointers for each difficulty
//	BYTE		uk1[0x18];				//+1C		//before : 0x14
//	void*		ptArenaUnit;			//+34	ptArena for the Unit
//	BYTE		uk2[0x4];				//+38		//before : 0x7
//	WORD		MPSourcePortalUniqueID;	//+3C	Source Portal Unique_ID
//	BYTE		uk3[0x2];				//+3E
//	WORD		MPDestPortalUniqueID;	//+40	Destination Portal Unique_ID
//	BYTE		uk4[0x06];				//+42
//	BYTE		ptObjectUnID;			//+48	Object UniqueID for TownPortals
//	BYTE		uk5[0x53];				//+49
//	NetClient*	ptNetClient;			//+9C	ptClient
//};
//
//
//#define F1_IS_SPAWNED 0x10 //or F_IS_IDENTIFIED ?
//#define F2_IS_LOD 0x2000000
//struct Unit
//{										//Offset from Code.		Size: 0xF4+4
//	DWORD		nUnitType;				//+00
//	union {
//		DWORD			nPlayerClass;
//		DWORD			nTxtFileNo;
//	};									//+04
//	DWORD		nUnitId;				//+08
//	DWORD		nItemNum;				//+0C
//	DWORD		mode;					//+10
//	union {
//		MonsterData* ptMonsterData;
//		DWORD* ptObjectData;
//		ItemData* ptItemData;
//		PlayerData* ptPlayerData;
//	};									//+14
//	BYTE		act;					//+18
//	BYTE		uk12[3];				//+19
//	void* ptAct;					//+1C
//	DWORD		SeedLow;				//+20
//	DWORD		SeedHi;					//+24
//	DWORD		SeedStarting;			//+28
//	Path* path;					//+2C
//	BYTE		uk1[0x08];				//+30
//	Path* ptPos;					//+38
//	DWORD		animSpeed;				//+3C
//	BYTE		uk2[0x04];				//+40
//	DWORD		curFrame;				//+44
//	DWORD		remainingFrame;			//+48
//	WORD		animSpeedW;				//+4C
//	BYTE		actionFlag;				//+4E
//	BYTE		uk3[0x1];				//+4F
//	void* ptAnimData;				//+50
//	BYTE		uk4[0x08];				//+54
//	Stats* ptStats;				//+5C
//	Inventory* ptInventory;		    //+60
//	BYTE		uk5[0x1C];				//+64
//	Game* ptGame;					//+80
//	BYTE		uk6[0x24];				//+84
//	Skills* ptSkills;				//+A8
//	void* ptCombatData;			//+AC
//	BYTE		uk7[0x08];				//+B0
//	DWORD		itemCode;				//+B8 for an item being dropped by this unit
//	BYTE		uk8[0x08];				//+BC
//	DWORD		flags1;					//+C4
//	union {
//		DWORD		flags2;				//+C8	//flags
//		struct {
//			DWORD	ukf1 : 25;
//			DWORD	isLod : 1;
//		};
//	};
//	BYTE		uk9[0x04];				//+CC
//	DWORD		clientId;				//+D0
//	BYTE		uk10[0x0C];				//+D4
//	Unit* ptFirstMonster;			//+E0
//	Unit* Unit1;					//+E4
//	Unit* ptNextUnitInRoom;		//+E8
//	BYTE		uk11[0x08];				//+EC
//	union {
//		CBPlayerData* ptCBPlayerData;
//		CBItemData* ptCBItemData;
//		void* ptCBData;
//	};									//+F4
//};
//
//
//
///*
//struct D2Game
//{
//    DWORD unknown[19];
//    WORD  difficulty;
//};
//
//struct ItemMod
//{
//	DWORD mID;			// +00 Mod ID, get it from properties.txt
//	DWORD mParam;		// +04 First Property
//	DWORD mMinimum;		// +04 Second Property, Min Value
//	DWORD mMaximum;		// +04 Third Property, Max Value
//};
//
//struct AIStruct
//{
//	DWORD mSpawn;       // +00
//	void* mAIFunc;      // +04
//	DWORD mUnknown1[8]; // +08
//	D2Game* mGame;      // +28
//	DWORD mMinionOwner; // +2C
//	DWORD mOwnerType;   // +30
//};
//
//
//struct LocInfo
//{                       //Offset from Code
//	Unit* noneLoc;      //+00
//	Unit* headLoc;      //+04
//	Unit* neckLoc;      //+08
//	Unit* torsoLoc;     //+0c
//	Unit* rightArmLoc;  //+10
//	Unit* leftArmLoc;   //+14
//	Unit* rightRingLoc; //+18
//	Unit* leftRingLoc;  //+1c
//	Unit* beltLoc;      //+20
//	Unit* feetLoc;      //+24
//	Unit* glovesLoc;    //+28
//};
//
//struct ItemData
//{                        // Offset from Code
//	DWORD quality;       // +00.
//	DWORD lowSeed;       // +04.
//	DWORD highSeed;      // +08.
//	DWORD unknown1;      // +0c.
//	DWORD startLowSeed;  // +10.
//	DWORD cmdFlags;      // +14.
//	DWORD flags;         // +18.
//	DWORD unknown2[2];   // +1C
//	DWORD originID;      // +24.
//	DWORD iLvl;          // +28.
//	WORD  version;       // +2C.
//	WORD  prefix;        // +2E.
//	WORD  suffix;        // +30.
//	WORD  autoPrefix;    // +32.
//	WORD  prefix1;       // +34.
//	WORD  prefix2;       // +36.
//	WORD  prefix3;       // +38.
//	WORD  suffix1;       // +3A.
//	WORD  suffix2;       // +3C.
//	WORD  suffix3;       // +3E.
//	BYTE  bodyLoc;       // +40.	// 0=inv/stash 4=gaucheS 5=droiteS
//	BYTE  inPage;        // +41.	// FF=equip 00=inv 04=stash
//	BYTE  unknown3[3];   // +42
//	BYTE  picture[8];    // +45
//	DWORD ilvl;          // +4C
//};
//
//struct PresetUnit
//{                                   //Offset from Code
//	DWORD           unitType;       //+00
//	DWORD           txtFileNo;      //+04
//	DWORD           unknown1[1];    //Unkonwn Data at +08
//	DWORD           xPos;           //+0c
//	DWORD           yPos;           //+10
//	DWORD           unknown2[2];    //Unknown data at +14
//	PresetUnit*     pNext;          //+1c
//};
//
//struct MissileData
//{
//+04 flags
//+08 0 on start
//+0c -1 on start
//+20 nDirection
//+28 range?
//+2c range?
//+30 level
//+34 number of pierces (byte)
//+35 (byte)
//+36 (byte)
//+37 (byte)
//+38 range-activate
//};
//
//
//struct Combat
//{
//	DWORD mHeader;		// +00 : Always 0x32
//	DWORD mDisplayFlag;	// +04 : Affect critical hit etc ...
//	DWORD mPhysicalDmg; // +08 : Values are << 8
//	DWORD mUnknown1;    // +0C
//	DWORD mFireDmg;		// +10 : Values are << 8
//	DWORD mUnknown2;    // +14
//	DWORD mBurnLeng;    // +18
//	DWORD mLtngDmg;     // +1C : values are << 8
//	DWORD mMagDmg;      // +20 : values are << 8
//	DWORD mColdDmg;     // +24 : values are << 8
//	DWORD mPoisDmg;     // +28 : ??
//	DWORD mPoisLeng;    // +2C
//	DWORD mColdLeng;    // +30
//	DWORD mFreezeLeng;  // +34
//	DWORD mLifeSteal;   // +38
//	DWORD mManaSteal;   // +3C
//	DWORD mUnknwon3;    // +40
//	DWORD mStunLeng;    // +44
//	DWORD mUnknown4;    // +48
//	DWORD mTotalDamage; // +4C
//	DWORD mUnknown5[6]; // +50
//	DWORD mOverlay;     // +68
//	DWORD mUnknwon6;    // +6C
//};
//
//
//struct Node
//{                       //Offset from Code.
//	DWORD flag;         //+00 //Yoh : null->flag
//	Unit* ptItem;		//+04 //Yoh : ItemData=>Unit
//	DWORD unID;         //+08
//	DWORD page;         //+0c //Yoh plutot etat : inventory/stash=1; inv-belt=2; equip=3
//	Node* nextNode;     //+10
//};
//
//
//
//struct MonsterData				// size110 : 60
//{
//	AIStruct*     AIPtr;
//	void*         unkonwPtr1;
//	void*         uniqueInfo;
//	void*         spawnInfo;
//	void*         unknownPtr2;
//	DWORD         unkown[8];
//	void*         lvlPtr;
//	MonStatTxt*   monstatPtr;
//};
//
//
//struct Unit
//{                               //Offset from Code.
//	DWORD   nUnitType;          //+00
//	union
//	{
//		DWORD   nTxtFileNo;
//		DWORD   nPlayerClass;
//	};                          //+04
//
//	DWORD   nUnitId;            //+08
//	DWORD   eMode;              //+0c
//	DWORD*  unknow1;            //+10
//	DWORD   nAct;               //+14
//	DWORD   pActRelated;        //+18
//	DWORD   unknown2[4];        //Unknown Data at +1C
//	D2Seed  nSeed;              //+2C
//	DWORD   startSeed;          //+34
//	Path*   pPos;               //+38
//	DWORD   unknown3[6];        //Unknown Data at +3C
//	DWORD   animSpeed;          //+54
//	DWORD   unknown32[2];       //+58
//	BYTE    COFString[12];      //+60
//	Stats*  ptStats;            //+6C
//
//	union
//	{
//		PlayerData*     pPlayerData;
//		MonsterData*    pMonsterData;
//		ItemData*       pItemData;
//		MissileData*    pMissile;
//		ObjectData*     pObjectData;
//	};                          //+70
//
//	DWORD   unknown5[2];        //+74
//	BYTE    unknown6[2];        //+7C
//	BYTE    rndDmg[2];          //+7e
//	DWORD   unknown7;           //+80
//	Inventory*  ptInventory;    //+84
//	DWORD   unknown8[4];        //+88
//	DWORD   startNull;          //+98
//	DWORD   unknown9[2];        //+9c
//	D2Game* ptGame;             //+a4
//	DWORD   unknown10[4];       //+a8
//	DWORD   nOwnerType;         //+b8
//	DWORD   nOwnerId;           //+bc
//	DWORD   unknown11[3];       //+c0
//	D2Info* ptInfo;             //+cc
//	Combat* ptCombat;           //+d0
//	DWORD   unknown12[5];       //+d4
//	DWORD   flags;              //+e8
//	DWORD   LODflag;            //+ec
//	DWORD   unknown13[7];       //+f0
//	Unit*   pNext;              //+10c
//	DWORD	unknown14[2];		//+110	//YOH
//    union
//    {
//		ItemData*       ptItemData;
//		void*            ptData;
//	};                          //+118	//YOH
//};
//*/
//
//struct DrlgRoom2;
//struct DrlgLevel;
//struct DrlgMisc;
//struct DrlgAct;
//struct UnitAny;
//struct AutomapLayer;
//struct AutomapCell;
//
//struct D2Seed {
//	DWORD d1,d2;
//};
//
//struct PresetUnit {
//	DWORD nUnitType; //+00
//	DWORD nTxtFileNo; //+04
//	DWORD _1[1];
//	DWORD xPos; //+0c
//	DWORD yPos; //+10
//	DWORD _2[2];
//	PresetUnit *pNext; //+1c
//};
//
//struct RoomTile {
//	DrlgRoom2 *pRoom2; //+00
//	DWORD *nNum; //+04
//	DWORD _1[3];
//	RoomTile *pNext; //+14
//};
//
//struct DrlgRoom1 {
//	DWORD xpos1; //+00
//	DWORD ypos1; //+04
//	DWORD xsize1; //+08
//	DWORD ysize1; //+0c
//	DWORD xpos2; //+10
//	DWORD ypos2; //+14
//	DWORD xsize2; //+18
//	DWORD ysize2; //+1c
//	DWORD _1[1];
//	DrlgRoom1 **paRoomsNear; //+24
//	DWORD nRoomsNear; //+28;
//	UnitAny *pUnitFirst; //+2c
//	DWORD _2[2];
//	DrlgRoom2 *pRoom2; //+38
//	D2Seed seed; //+3c
//	DWORD _3[14];
//	DrlgRoom1 *pNext; // +7c
//};
//
//struct DrlgRoom2 {
//	DrlgLevel *pDrlgLevel; //+00
//	DWORD xPos; //+04
//	DWORD yPos; //+08
//	DWORD xPos1; // +0c
//	DWORD yPos1; // +10
//	DWORD _1[2];
//	DWORD nPresetType; //+1c
//	DWORD *nPresetType2No; //+20
//	DWORD _2[39];
//	DrlgRoom2 **paRoomsNear; //+c0
//	DWORD nRoomsNear; //+c4
//	RoomTile *pRoomTiles; //+c8
//	PresetUnit *pPresetUnits; //+cc
//	DWORD _3[1];
//	D2Seed seed; //+d4
//	DWORD _3b[2];
//	DrlgRoom1 *pRoom1; //+e4
//	DrlgRoom2 *pNext; //+e8
//};
//
//struct DrlgLevel {
//	DrlgMisc *pDrlgMisc; //+00
//	DWORD nLevelNo; //+04
//	DWORD _1[10];
//	DrlgRoom2 *pRoom2First; //+30
//};
//
////struct DrlgLevel { //sizeof(DrlgLevel) = 0x230
////													// +00 dwseed_l
////													// +04 dwseed_h
////	DWORD _1[5];
////	DWORD nLevelNo; //+14
////	DWORD _1a[120];
////	// +138 rand_step(4)
////	// +1B0 rand_step(1)
////	// +1EC LevelType
////	D2Seed seed; //+1f8
////													//+1FC	dwseed
////	DWORD _2[1];						// +200 RoomCounter
////	DrlgRoom2* pRoom2First; //+204
////	DrlgMisc* pDrlgMisc; //+208
////													//+20C	LevelFlag?
////													//+21C	DrlgType
////	DWORD _3[8];
////	DrlgLevel* pLevelNext; //+22c
////};
//
//struct DrlgMisc {
//	DrlgLevel *pLevelFirst; //+00
//	DWORD _1[2];
//	DrlgAct *pDrlgAct; //+0c
//	DWORD _2[250];
//	DWORD nStaffTombLvl; // +3f8
//	DWORD nBossTombLvl; //+3fc
//};
//
//struct DrlgMisc_109 {
//	DrlgLevel *pLevelFirst; //+00
//	DWORD _1[2];
//	DrlgAct *pDrlgAct; //+0c
//	DWORD _2[249];
//	DWORD nStaffTombLvl; //+3f4
//	DWORD nBossTombLvl; //+3f8
//};
//
//struct DrlgAct {
//	DWORD _1;
//	DrlgRoom1 *pRoom1; //+04
//	DrlgMisc *pDrlgMisc; //+08
//};
//
//struct DrlgAct_109 {
//	DWORD _1[2];
//	DrlgMisc *pDrlgMisc; //+08
//};
//
//struct AutomapCell {
//	DWORD fSaved; //+00
//	WORD nCellNo; //+04
//	WORD xPixel; //+06
//	WORD yPixel; //+08
//	WORD _1[1];
//	AutomapCell *pLess; //+0c
//	AutomapCell *pMore; //+10
//};
//
//struct AutomapLayer {
//	DWORD nLayerNo;
//	DWORD fSaved;
//	AutomapCell *pFloors; //+08
//	AutomapCell *pWalls; //+0c
//	AutomapCell *pObjects; //+10
//	AutomapCell *pExtras; //+14
//};
//
//struct AutomapCellNode {
//	DWORD _1[4];
//	AutomapCell *pAutomapCell; // +10
//	DWORD _2;
//	AutomapCellNode *pNext; // +18
//};
//
//struct ObjectTxt {
//	char szName[0x40];	// +00
//	wchar_t wszName[0x40]; // +40
//	BYTE _1[4]; // +c0
//	BYTE nSelectable0; //+c4
//	BYTE _2[0x87];
//	BYTE nOrientation; //+14c
//	BYTE _2b[0x19];
//	BYTE nSubClass; // +166
//	BYTE _3[0x11];
//	BYTE nParm0; //+178
//	BYTE _4[0x39];
//	BYTE nPopulateFn; //+1b2
//	BYTE nOperateFn; //+1b3
//	BYTE _5[8];
//	DWORD nAutoMap; // +1bb
//};
//
//struct ObjectTxt_109 {
//	BYTE _1[0xc4];
//	BYTE nSelectable0; //+c4
//	BYTE _2[0x87];
//	BYTE nOrientation; //+14c
//	BYTE _2b[0x2a];
//	BYTE nSubClass; //+177
//	BYTE _3[0x10];
//	BYTE nParm0; //+188
//	BYTE _4[0x39];
//	BYTE nPopulateFn; //+1c2
//	BYTE nOperateFn; //+1c3
//	BYTE _5[8];
//	DWORD nAutoMap; //+1cc
//};
//
//struct ObjgroupTxt {
//	DWORD nId[8]; //+00
//	BYTE nDensity[8]; //+20
//	BYTE nProb[8]; //+28
//};
//
//struct LevelTxt {
//	BYTE nLevelNo;
//	BYTE nflag0;
//	BYTE nPal;
//	BYTE nAct;
//	BYTE _0[0xb]; //+04
//	WORD nMonLv[3];//+0F
//	WORD nMonLvEx[3];//+15 Area Level
//	BYTE _1[0xd8];
//	char cszName[40]; //+f5
//	char cszName2[40]; //+11d
//	char szLvlDesc[41]; //+145
//	wchar_t szName[40]; //+16e
//	wchar_t szName2[40]; //+16e
//	BYTE nObjGrp[8]; // unk
//	BYTE nObjPrb[8]; // unk
//	BYTE _1b[0x79];
//};
//
//struct LevelTxt_109 {
//	BYTE _1[0x18d];
//	BYTE nObjGrp[8]; //+18d
//	BYTE nObjPrb[8]; //+195
//	BYTE _1b[0x79];
//	wchar_t szName[40]; //+216
//};
//
//struct ItemTxt {
//	wchar_t szName2[0x40]; //+00
//	union {
//		DWORD dwCode; // +80
//		char szCode[4];
//	};
//	BYTE _2[0x70]; // +84
//	WORD nLocaleTxtNo; // +f4
//	BYTE _2a[0x28]; // +f6
//	BYTE nType; // +11e
//	BYTE _3[0x0d];
//	BYTE fQuest; // +12a
//};
//
//struct ItemTxt_109 {
//	char szName[0x40]; //+00
//	wchar_t szName2[0x40]; //+40
//	BYTE _1[0x84];
//	union {
//		DWORD dwCode; //+144
//		char szCode[4];
//	};
//	BYTE _2[0x6b];
//	BYTE nType; //+1b3
//	BYTE _3[4];
//	BYTE fQuest; //+1b8
//};
//
//struct MonsterTxt {
//	BYTE _1[0x6];
//	WORD nLocaleTxtNo; // +06
//	WORD flag; // +08
//	WORD _1a;
//	union {
//		DWORD flag1; // +0c
//		struct {
//			BYTE flag1a; // +0c
//			BYTE flag1b; // +0d
//			BYTE flag1c[2]; // +0e
//		};
//	};
//	BYTE _2[0x22]; // +10
//	WORD velocity; // +32
//	BYTE _2a[0x52]; // +34
//	WORD tcs[3][4]; //+86
//	BYTE _2b[0x52]; // +9e
//	wchar_t szDescriptor[0x3c]; //+f0
//	BYTE _3[0x1a0];
//};
//
//struct MonsterTxt_109 {
//	BYTE _1[0xf0];
//	wchar_t szDescriptor[0x3c]; //+f0
//	BYTE _2[0x1a0];
//	DWORD tcs[3][4]; //+308
//};
//
//struct SuperuniqueTxt {
//	WORD nIndex; //+00
//	WORD nLocaleTxtNo; //+02
//	DWORD _1[9]; //+04
//	BYTE _1a[4]; //+28
//	WORD tcs[4]; //+2c
//};
//
//struct SuperuniqueTxt_109 {
//	BYTE _1[0xd8];
//	DWORD tcs[3]; //+d8
//};
//
////struct PlayerData {
////	wchar_t szName[1]; //+00
////};
////
////
////struct MonsterData {
////	BYTE _1[0x16];
////	struct {
////		BYTE fUnk:1;
////		BYTE fNormal:1;
////		BYTE fChamp:1;
////		BYTE fBoss:1;
////		BYTE fMinion:1;
////	}; //+16
////	BYTE _1aa;
////	wchar_t szName[1]; //+18
////	BYTE _1a[2]; // +1a
////	BYTE anEnchants[9]; // +1c
////	BYTE _2a; // +25
////	WORD uniqueno; // +26
////	BYTE _2[50*4-14];
////	struct {
////		DWORD _3[1];
////		WORD uniqueno; //+04
////		WORD _4[1];
////		DWORD anEnchants[9]; //+08
////	} *pEnchants; //+cc
////};
//
//struct MonsterData_109 {
//	struct {
//		WORD fBoss:1;
//		WORD fMinion:1;
//		WORD fChamp:1;
//	}; //+00
//	wchar_t szName[1]; //+02
//	DWORD _2[50];
//	struct {
//		DWORD _3[1];
//		WORD uniqueno; //+04
//		WORD _4[1];
//		DWORD anEnchants[9]; //+08
//	} *pEnchants; //+cc
//};
//
////struct ItemData {
////	DWORD nQuality;
////	BYTE _1[0x14]; // +04
////	DWORD nFlag; // +18
////	BYTE _2[0x10]; // +1c
////	DWORD nItemLevel; // +2c
////	BYTE _3[0x14]; // +30
////	BYTE nLocation1; // +44					// location on body = xpos of item (only if on body) (spread)
////	BYTE nLocation2; // +45					// 0 = inventory, 4=stash (spread)
////};
//
//struct ItemData_109 {
//	DWORD nQuality;
//};
//
//struct UnitInventory {
//	DWORD nFlag; // +00
//	DWORD _1[2];
//	DWORD nItem; // +0c
//};
//
//struct ObjectPath {
//	DWORD xpos1; //+00
//	DWORD ypos1; //+04
//	DWORD xpos2; //+08
//	DWORD ypos2; //+0c
//	WORD targetx; //+10
//	WORD targety; //+12
//	DWORD _1[2];
//	DrlgRoom1 *pRoom1; //+1c
//	DWORD _2[14];
//	UnitAny *pTargetUnit; //+58
//};
//
//struct ObjectData1 {
//	ObjectTxt *pTxtFile; //+00 ??
//	union {
//		BYTE nShrineNo;
//		struct {
//			BYTE _1:7;
//			BYTE fChestLocked:1;
//		};
//	}; //+04
//};
//
//struct ItemPath {
//	void * ptRoom;				// 0x00
//	DWORD _1[2];				// 0x04
//	DWORD xpos;				// 0x0C
//	DWORD ypos;				// 0x10
//	DWORD _2[5];				// 0x14
//	BYTE * ptUnk;				// 0x28
//	DWORD _3[5];				// 0x2C
//};
//struct Info;
//struct StatsList;
//struct GameEvent;
//
//struct UnitAny {
//	DWORD nUnitType; //+00
//	DWORD nTxtFileNo; //+04
//	DWORD _1;
//	DWORD nUnitId; // +0C
//	DWORD eMode; // +10
//	union {
//		PlayerData *pPlayerData; //+14
//		MonsterData *pMonsterData; //+14
//		ObjectData1 *pObjectData; //+14
//		ItemData *pItemData; //+14
//	};
//	DWORD _2;
//	UnitAny *pNext; //+1c
//	WORD _2a0;
//	WORD unkNo;
//	DWORD _2a[2];
//	union {
//		ObjectPath *pPos;
//		ItemPath *pItemPath;
//	};
//	//struct {
//	//	DWORD xpos1; //+00
//	//	DWORD ypos1; //+04
//	//	DWORD xpos2; //+08
//	//	DWORD ypos2; //+0c
//	//	WORD targetx; //+10
//	//	WORD targety; //+12
//	//	DWORD _1[2];
//	//	DrlgRoom1 *pRoom1; //+1c
//	//	DWORD _2[14];
//	//	UnitAny *pTargetUnit; //+58
//	//} *pPos; // +2c
//	DWORD _2b[11];
//	StatsList * ptStatsList;         // 0x5C
//	UnitInventory *pInventory; //+60
//	DWORD _4b[12];
//	DWORD nOwnerType; // +94
//	DWORD nOwnerId; // +98
//	BYTE _4c[42];
//	BYTE  fFlags0:1; //+0c6, new added
//	BYTE _4d;
//	DWORD _5[10];
//	DWORD fFlags; //+e8
//	DWORD fFlags2; //+ec
//	DWORD _6[7];
//};
//
//
//struct UnitAny_109 {
//	DWORD nUnitType; //+00
//	DWORD nTxtFileNo; //+04
//	DWORD nUnitId; //+08
//	DWORD eMode; //+0c
//	DWORD _1[10];
//	struct {
//		DWORD xpos1; //+00
//		DWORD ypos1; //+04
//		DWORD xpos2; //+08
//		DWORD ypos2; //+0c
//		WORD targetx; //+10
//		WORD targety; //+12
//		DWORD _1[2];
//		DrlgRoom1 *pRoom1; //+1c
//		DWORD _2[14];
//		UnitAny *pTargetUnit; //+58
//	} *pPos; //+38
//	DWORD _2[13];
//	union {
//		PlayerData *pPlayerData; //+70
//		MonsterData *pMonsterData; //+70
//		ObjectData1 *pObjectData; //+70
//		ItemData *pItemData; //+70
//	};
//	DWORD _4a[4];
//	UnitInventory *pInventory; //+84
//	DWORD _4b[12];
//	DWORD nOwnerType; //+b8
//	DWORD nOwnerId; //+bc
//	DWORD _5[10];
//	DWORD fFlags; //+e8
//	DWORD fFlags2; //+ec
//	DWORD _6[7];
//	UnitAny *pNext; //+10c
//};
//
//struct GfxCell {
//	DWORD flags; //+00 ??
//	DWORD width; //+04
//	DWORD height; //+08
//	DWORD xoffs; //+0c
//	DWORD yoffs; //+10
//	DWORD _2[1]; //0x14
//	DWORD lpParent; //+18
//	DWORD length; //+1c
//	BYTE cols[1]; //+20
//};
//
//struct CellFile {
//	DWORD dwVersion; //+00
//	struct {
//		WORD dwFlags;
//		BYTE mylastcol;
//		BYTE mytabno:1;
//	}; //+04
//	DWORD eFormat; //+08
//	DWORD termination; //+0c
//	DWORD numdirs; //+10
//	DWORD numcells; //+14
//	GfxCell *cells[1]; //+18
//};
//
////struct CellContext {
////	GfxCell *hCell; //+00
////	CellFile *pCellFile; //+04
////	DWORD nCellNo; //+08
////	DWORD direction; //+0c ??
////	DWORD _1[14];
////};
//
//struct CellContext
//{
//	GfxCell* pCellInit;    //+00
//	CellFile* pCellFile;   //+04
//	DWORD nCellNo;                //+08 // nFrame
//	DWORD nDirection;            //+0C
//	int nMaxDirections;            //+10
//	int nMaxFrames;                //+14
//	DWORD fFlags;                //+18
//	BYTE fState;                //+1C
//	union
//	{
//		BYTE nComponent;            //+1D
//		BYTE fItemFlags;            //+1D
//	};
//	BYTE bUnk1E;                //+1E - padding no doubt
//	BYTE bUnk1F;                //+1F
//	int nUnitType;                //+20
//	int nUnitIndex;                //+24
//	int nMode;                    //+28
//	int nOverlay;                //+2C
//	union
//	{
//		// [token][component][type][mode][hitclass]
//		struct
//		{
//			DWORD dwToken;                //+30
//			DWORD dwComponent;            //+34
//			DWORD dwArmorType;            //+38 - lit, med , hvy
//			DWORD dwMode;                //+3C
//			DWORD dwHitClass;            //+40
//		};
//		DWORD dwName[5];                //+30
//	};
//	const char* pName;                //+44
//};
//
//struct TreasureClassItem {
//	DWORD _1[2];
//	DWORD thingno; //+08
//	struct {
//		DWORD _3:2;
//		DWORD tcflag:1;
//	}; //+0c
//	DWORD _2[3];
//};
//
//struct TreasureClass {
//	DWORD _1a;
//	DWORD numitems; //+04
//	DWORD _1[8];
//	TreasureClassItem *items; //+28
//};
//
//struct TreasureClass_109 {
//	DWORD numitems; //+00
//	DWORD _1[8];
//	TreasureClassItem *items; //+24
//};
//
//struct D2EditBox2 {
//	DWORD _1;
//	DWORD _2[6];
//	void (__fastcall *func)(D2EditBox2*); // +1c
//	DWORD _3[0x0F];
//	wchar_t* text;		// +5c
//};
//struct D2EditBox {
//	DWORD _1;
//	DWORD _2[6];
//	void (__fastcall *func)(D2EditBox*); // +1c
//	DWORD _3[0x0D];
//	DWORD	dwSelectStart; // +54
//	DWORD	dwSelectEnd; // +58
//	wchar_t text[0x100];		// +5c
//	DWORD	dwCursorPos;		// 0x25C
//};
//
//struct GameStructInfo
//{
//	DWORD _1[6];
//	WORD _1a;
//	char szGameName[0x18];
//	char szGameServerIp[0x56];
//	char szAccountName[0x30];
//	char szCharName[0x18];
//	char szRealmName[0x18];
//	BYTE _2[0x102];//+E8
//	//BYTE nGameMode; //+1EA
//	struct
//	{
//		BYTE nCharStat:2;
//		BYTE nHardcore:2;
//		BYTE _unk1:1;
//		BYTE nExpansion:1;
//		BYTE nLadder:2;
//	};//+1EA
//	BYTE nReadyAct; //+1EB  quest info
//	BYTE _3[0x3B];
//	char szServerVersion[24];//227  battle net gameversion
//	char szGamePassword[0x18];//+23F
//};
//
//struct D2MSG {					// 0x20 bytes long
//	HWND hwnd;				// 0x00
//	DWORD message;				// 0x04
//	WPARAM wParam;				// 0x08
//	union {
//		DWORD lParam;
//		struct {
//			WORD xpos;
//			WORD ypos;
//		};
//	};
//	DWORD _1;					// 0x10
//	HWND hwnd2;				// 0x14
//	DWORD _2[2];				// 0x18
//};
//
//struct FontInfo_t {
//	DWORD hFontHandle;
//	DWORD hMemHandle1;
//	DWORD hMemHandle2;
//	DWORD hMemHandle3;
//	DWORD nLastTick;
//};
//
//// Add to check skills by marsgod
//
//struct SkillInfo {
//	WORD Id;				// 0x00
//	BYTE bUnks[0x32];		// 0x02
//	DWORD dwUnk;			// 0x34
//};
//
//struct Skill {				// 0x40 bytes long
//	SkillInfo * pSkillInfo;	// 0x00
//	Skill * pNextSkill;		// 0x04
//	DWORD dwUnk1;			// 0x08
//	DWORD dwUnk2[0x7];		// 0x0C
//	DWORD SkillLevel;		// 0x28
//	DWORD dwUnk3[2];		// 0x2C
//	DWORD Flags;			// 0x34
//	DWORD dwUnk5[2];		// 0x38
//};
//
//struct Info
//{
//	BYTE * ptGame_1C;              // 0x00
//	Skill * ptFirstSkill;          // 0x04
//	Skill * ptlSkill;             // 0x08
//	Skill * ptrSkill;             // 0x0C
//	Skill * ptCurrentSkill;				// 0x10
//
//};
//
//
//
////struct Stats {
////	WORD  Param;
////	WORD  StatID;
////	DWORD Value;
////};
//
//struct StatsInfo {
//	Stats *pStats; // pointer to an array of Stats structs.
//	WORD   nUsed;  // how many Stats in array
//	WORD   nSize;  // size allocated in Stats
//};
//
//struct StatsList {
//	DWORD _1[0x9];			// 0x00
//	StatsInfo sStats;		// 0x24
//	StatsList *pPrevLink;			// 0x2C
//	StatsList *pNextLink;		// 0x30
//	StatsList *pPrev;			// 0x34
//	DWORD _4;				// 0x38
//	StatsList *pNext;		// 0x3C
//
//	StatsList *pSetList;     // +40
//	DWORD _5;
//	StatsInfo sStats1;       // +48
//	StatsInfo sStats2;       // +50 unused ???
//	DWORD *ptStateFlags;  //+58 - get with 10487(ptUnit,id) return ptUnit->ptStatsList->ptStateFlags[id/32]&(1<<(id%31))
//};
//
//// end of file --------------------------------------------------------------
//#pragma pack(pop)
//
//
//
//
//
//
//
//struct monster_data;
//struct object_data;
//struct item_data;
//struct player_data;
//struct path_t;
//struct stats;
//struct inventory;
//struct game;
//struct skills;
//struct cb_player_data;
//struct cb_item_data;
//struct objects_bin;
//struct unit;
//
//struct client_packet_buffer {
//	char data[1976];
//	int32_t data_size;
//};
//
//struct packet_wrapper_sc {
//	char data[516];
//	int32_t data_size;
//	int32_t receive_time;
//	packet_wrapper_sc* next;
//};
//
//struct client_unit_list {
//	unit* unit_list[5][128]; //0x1120
//};
//
////struct unit {
////	uint32_t unit_type; //+00
////	uint32_t txt_file_no; //+04
////	uint32_t unit_id; //+08
////	uint32_t eMode; //+0c
////	uint32_t _1[10];
////	struct {
////		uint32_t xpos1; //+00
////		uint32_t ypos1; //+04
////		uint32_t xpos2; //+08
////		uint32_t ypos2; //+0c
////		uint16_t targetx; //+10
////		uint16_t targety; //+12
////		uint32_t _1[2];
////		uint32_t* pRoom1; //+1c
////		uint32_t _2[14];
////		unit* pTargetUnit; //+58
////	} *pPos; //+38
////	uint32_t _2[13];
////	union {
////		player_data* player_data; //+70
////		monster_data* monster_data; //+70
////		object_data* object_data; //+70
////		item_data* item_data; //+70
////	};
////	uint32_t _4a[4];
////	inventory* inventory; //+84
////	uint32_t _4b[12];
////	uint32_t nOwnerType; //+b8
////	uint32_t nOwnerId; //+bc
////	uint32_t _5[10];
////	uint32_t fFlags; //+e8
////	uint32_t fFlags2; //+ec
////	uint32_t _6[7];
////	unit* pNext; //+10c
////
////	unit* pt_first_monster;			//+E0
////	unit* unit1;					//+E4
////	unit* unit2;					//+E8
////};
//
//
////enum class unit_type_t : int32_t {
////	UNIT_TYPE_PLAYER = 0,
////	UNIT_TYPE_MONSTER = 1,
////	UNIT_TYPE_OBJECT = 2,
////	UNIT_TYPE_MISSILE = 3,
////	UNIT_TYPE_ITEM = 4,
////	UNIT_TYPE_VIS_TILE = 5 //unused?
////};
////
////enum player_class_t : int32_t {
////	PLAYER_CLASS_AMAZON = 0,
////	PLAYER_CLASS_SORCERESS = 1,
////	PLAYER_CLASS_NECROMANCER = 2,
////	PLAYER_CLASS_PALADIN = 3,
////	PLAYER_CLASS_BARBARIAN = 4,
////	PLAYER_CLASS_DRUID = 5,
////	PLAYER_CLASS_ASSASSIN = 6
////};
//
//struct unit {
//	unit_type_t type;
//
//	union {
//		player_class_t player_class;
//		int32_t data_record_index;
//	};
//
//	void* memory_pool;
//	uint32_t guid;
//	uint32_t mode;
//
//	union {
//		player_data* player_data;
//		monster_data* monster_data;
//		object_data* object_data;
//		//missile_data* missile_data;
//		item_data* item_data;
//	};
//
//	int8_t act;
//	int8_t act_padding[0x03];
//	void* drlg_act; // drlg_act*
//
//	struct {
//		uint32_t low_seed;
//		uint32_t high_seed;
//	} seed;
//	uint32_t init_seed;
//
//	void* path; //path*
//
//	void* skill_sequence; //skill_sequence*
//	uint32_t skill_sequence_frame_count;
//	uint32_t skill_sequence_frame;
//
//	uint32_t anim_speed;
//	uint32_t skill_sequence_mode;
//
//	uint32_t current_frame;
//	uint32_t frame_count;
//	uint16_t anim_speed_w;
//
//	uint8_t action_frame;
//	uint8_t pad1;
//
//	void* anim_data; // anim_data*
//
//	void* gfxdata; // unit_gfxdata*
//	void* gfxdata_copy; // unit_gfxdata*
//
//	void* statslistex; //statslistex*
//	inventory* inventory;
//
//	union {
//		struct {
//			uint32_t interact_guid;
//			uint32_t interact_type;
//			uint8_t interacting;
//		} interaction;
//
//		struct {
//			void* light_map;
//			uint32_t start_light_radius;
//			uint16_t p12_shift_index;
//		} lightning;
//	};
//
//	uint16_t update_type;
//	unit* update_unit;
//
//	void* quest_record; //quest_record*
//	uint32_t sparky_chest;
//	void* timer_args;
//
//	union {
//		game* game;
//		uint32_t sound_sync;
//	};
//
//	char pad2[0x0C];
//
//	void* event;
//
//	unit_type_t owner_type;
//	uint32_t owner_guid;
//
//	char pad3[8];
//
//	char* hover_text;
//
//	void* skills;
//
//	void* combat;
//	uint32_t hit_class;
//
//	char pad4[4];
//
//	uint32_t drop_code;
//
//	char pad5[8];
//
//	union {
//		struct {
//			uint32_t unit_flags;
//			uint32_t unit_flags_ex;
//		} flags;
//		uint64_t flags64;
//	};
//
//	char pad6[4];
//
//	uint32_t node_index;
//	uint32_t get_tick_count;
//
//	union {
//		uint32_t get_tick_count2;
//		void* particle_stream;
//	};
//
//	void* timer;
//
//	unit* change_next_unit; //?
//	unit* prev_unit;
//	unit* prev_unit_in_room;
//
//	void* msg_first;
//	void* msg_last;
//
//	bool is_hireling() const {
//		if (type != unit_type_t::UNIT_TYPE_MONSTER)
//			return false;
//
//		return (flags.unit_flags & 0x00000200) == 0x00000200;
//	}
//
//	bool is_pet() const {
//		if (type != unit_type_t::UNIT_TYPE_MONSTER)
//			return false;
//
//		return (flags.unit_flags & 0x80000000) == 0x80000000;
//	}
//};
//
//
////struct unit {										//Offset from Code.		Size: 0xF4+4
////	uint32_t		unit_type;				//+00
////	union {
////		uint32_t			player_class;
////		uint32_t			txt_file_no;
////	};									//+04
////	uint32_t		unit_id;				//+08
////	uint32_t		item_num;				//+0C
////	uint32_t		current_anim;			//+10
////	union {
////		monster_data* monster_data;
////		object_data* object_data;
////		item_data* item_data;
////		player_data* player_data;
////	};									//+14
////	uint8_t		act;					//+18
////	uint8_t		uk12[3];				//+19
////	void* pt_act;					//+1C
////	uint32_t		seed_low;				//+20
////	uint32_t		seed_hi;					//+24
////	uint32_t		seed_starting;			//+28
////	path_t* path;					//+2C
////	uint8_t		uk1[0x08];				//+30
////	path_t* pt_pos;					//+38
////	uint32_t		anim_speed;				//+3C
////	uint8_t		uk2[0x04];				//+40
////	uint32_t		cur_frame;				//+44
////	uint32_t		remaining_frame;			//+48
////	uint16_t		anim_speed_w;				//+4C
////	uint8_t		action_flag;				//+4E
////	uint8_t		uk3[0x1];				//+4F
////	void* pt_anim_data;				//+50
////	uint8_t		uk4[0x08];				//+54
////	stats* stats;				//+5C
////	uint8_t		pad1[0x24];
////	inventory* inventory;		 //+84  //+60
////	uint8_t		uk5[0x1C];				//+64
////	game* game;					//+80
////	uint8_t		uk6[0x24];				//+84
////	skills* skills;				//+A8
////	void* pt_combat_data;			//+AC
////	uint8_t		uk7[0x08];				//+B0
////	uint32_t		item_code;				//+B8 for an item being dropped by this unit
////	uint8_t		uk8[0x08];				//+BC
////	uint32_t		flags1;					//+C4
////	union {
////		uint32_t		flags2;				//+C8	//flags
////		struct {
////			uint32_t	ukf1 : 25;
////			uint32_t	is_lod : 1;
////		};
////	};
////	uint8_t		uk9[0x04];				//+CC
////	uint32_t		client_id;				//+D0
////	uint8_t		uk10[0x0C];				//+D4
////	unit* pt_first_monster;			//+E0
////	unit* unit1;					//+E4
////	unit* unit2;					//+E8
////	uint8_t		uk11[0x08];				//+EC
////	union {
////		cb_player_data* pt_cb_player_data;
////		cb_item_data* pt_cb_item_data;
////		void* pt_cb_data;
////	};									//+F4
////};
//
//struct monster_data					// sizeof(MonsterData)=0x60
//{										//Offset from Code.
//	uint8_t	uk[0x16];					//+00
//	union {
//		uint16_t	flags;					//+16
//		struct {
//			uint16_t	fuk1 : 1;
//			uint16_t	is_super_unique : 1;
//			uint16_t	is_champion : 1;
//			uint16_t	is_unique : 1;
//			uint16_t	fuk2 : 13;
//		};
//	};
//	uint8_t		uk1[0x0E];					//+18
//	uint16_t		super_unique_id;				//+26
//	void* unknow1;					//+28
//	uint8_t		uk2[0x38];					//+28
//};
//
//struct object_data {
//	objects_bin* pt_objects_bin;
//	uint8_t		level_id;
//};
//
//struct item_data
//{                        // Offset from Code
//	uint32_t quality;       // +00.
//	uint32_t lowSeed;       // +04.
//	uint32_t highSeed;      // +08.
//	uint32_t unknown1;      // +0c.
//	uint32_t startLowSeed;  // +10.
//	uint32_t cmdFlags;      // +14.
//	uint32_t flags;         // +18.
//	uint32_t unknown2[2];   // +1C
//	uint32_t originID;      // +24.
//	uint32_t iLvl;          // +28.
//	uint16_t  version;       // +2C.
//	uint16_t  prefix;        // +2E.
//	uint16_t  suffix;        // +30.
//	uint16_t  autoPrefix;    // +32.
//	uint16_t  prefix1;       // +34.
//	uint16_t  prefix2;       // +36.
//	uint16_t  prefix3;       // +38.
//	uint16_t  suffix1;       // +3A.
//	uint16_t  suffix2;       // +3C.
//	uint16_t  suffix3;       // +3E.
//	uint8_t  bodyLoc;       // +40.	// 0=inv/stash 4=gaucheS 5=droiteS
//	uint8_t  page;        // +41.	// FF=equip 00=inv 04=stash
//	uint8_t  unknown3[3];   // +42
//	uint8_t  picture[8];    // +45
//	uint32_t ilvl;          // +4C
//};
//
////struct item_data//size=0x74
////{										//Offset from Code.
////	uint32_t	quality;					//+00
////	uint32_t	seed_low;					//+04
////	uint32_t	seed_hi;						//+08
////	uint32_t	player_id;					//+0C #10734 / #10735 (PCInventory->ptPlayer->0C)
////	uint32_t	seed_starting;				//+10
////	uint32_t	flags1;						//+14
////	union {
////		uint32_t	flags2;					//+18
////		struct {
////			uint32_t	fuk1 : 1;				//0x00000001
////			uint32_t	is_indentified : 1;	//0x00000002
////			uint32_t	fuk2 : 2;				//0x0000000C
////			uint32_t	is_unindentified : 1;	//0x00000010
////			uint32_t	fuk3 : 3;				//0x000000E0
////			uint32_t	is_broken : 1;			//0x00000100
////			uint32_t	fuk4 : 2;				//0x00000600
////			uint32_t	is_socketed : 1;		//0x00000800
////			uint32_t	fuk5 : 10;			//0x003FF000
////			uint32_t	is_etheral : 1;		//0x00400000
////			uint32_t	fuk6 : 3;				//0x03800000
////			uint32_t	is_runeword : 1;		//0x04000000
////			uint32_t	fuk7 : 1;				//0x08000000
////			uint32_t	is_personalized : 1;	//0x10000000
////			uint32_t	fuk8 : 3;				//0xE0000000
////		};
////	};
////	/*
////ITEMFLAG_NEWITEM               = 0x00000001,
////ITEMFLAG_TAGETING               = 0x00000004,
////ITEMFLAG_UNIDENTIFIED               = 0x00000010,
////ITEMFLAG_QUANTITY               = 0x00000020,
////ITEMFLAG_Durability               = 0x00000100,
////ITEMFLAG_UNKNOWN2               = 0x00000400,
////ITEMFLAG_SOCKETED               = 0x00000800,
////ITEMFLAG_NON_SELLABLE               = 0x00001000,
////ITEMFLAG_NEWITEM2               = 0x00002000,
////ITEMFLAG_UNKNOWN3               = 0x00004000,
////ITEMFLAG_CHECKSECPRICE               = 0x00010000,
////ITEMFLAG_CHECKGAMBLEPRICE          = 0x00020000,
////ITEMFLAG_UNKNOWN4               = 0x00080000,
////ITEMFLAG_INDESTRUCTIBLE(ETHERAL) = 0x00400000,
////ITEMFLAG_UNKNOWN5               = 0x00800000,
////ITEMFLAG_FROMPLAYER               = 0x01000000,
////ITEMFLAG_RUNEuint16_t               = 0x04000000
////*/
////	uint32_t	guid1;						//+1C Global Unique ID 1
////	uint32_t	guid2;						//+20 Global Unique ID 2
////	uint32_t	guid3;						//+24 Global Unique ID 3
////	uint32_t	unique_id;					//+28
////	uint8_t	ilvl;						//+2C
////	uint8_t	uk1[0x03];					//+2D
////	uint16_t	version;					//+30
////	uint16_t	rare_prefix;					//+32
////	uint16_t	rare_suffix;					//+34
////	uint16_t	auto_pref;					//+36
////	uint16_t	prefix[3];					//+38
////	uint16_t	suffix[3];					//+3E
////	uint8_t	equip_loc;					//+44
////	/*	emplacement si équipé
////	*	00 = noequip/inBelt
////	*   01 = head
////	*	02 = neck
////	*	03 = tors
////	*	04 = rarm
////	*	05 = larm
////	*	06 = lrin
////	*	07 = rrin
////	*	08 = belt
////	*	09 = feet
////	*	0A = glov
////	*	0B = ralt
////	*	0C = lalt
////*/
////	uint8_t	page;						//+45
////	/*	page dans laquel se trouve l'item
////	*	FF = mouse/equip/onEarth
////	*	00 = inventory
////	*   01 = cube
////	*	04 = stash
////	*/
////	uint8_t	uk4[0x01];					//+46
////	uint8_t	item_data3;					//+47 //D2Common10854 D2Common10853
////	uint8_t	p_ear_level;					//+48
////	uint8_t	var_gfx;						//+49
////	char	i_name[0x12];				//+4A //inscribed/ear name
////	inventory* inventory;			//+5C
////	unit* pt_prev_item;					//+60
////	unit* pt_next_item;					//+64
////	uint8_t	uk8[0x01];					//+68
////	uint8_t	item_data2;					//+69
////	uint8_t	uk9[0x0A];					//+6A
////};
//
//struct net_client {
//	uint32_t	client_id;					//+00
//	uint8_t	uk1[0x06];					//+04
//	union {								//+0A
//		uint16_t	flag;
//		struct {
//			uint16_t f1 : 1;
//			uint16_t f2 : 1;
//			uint16_t is_hard_core_game : 1;
//		};
//	};
//	uint8_t	uk2;						//+0C
//	char	name[0x10];					//+0D
//	uint8_t	uk3[0x15F];					//+1D
//	uint8_t* savefile;					//+17C
//	uint32_t	final_size;					//+180
//	uint32_t	counter;					//+184
//	uint32_t	current_size;				//+188
//	uint8_t	uk4[0x1C];					//+18C
//	game* game;						//+1A8
//	//+1A8 is ptGame
//	//+4A8 ptNextClient
///*
//Kingpin: ptPclient
//+16C is either act or unit type
//+170 Active UniqueID for player
//+174 Active ptPlayer on Client
//+1a8 ptGame
//+1b4 Current or next ptRoom
//*/
//};
//
//struct player_data {
//	char		name[0x10];				//+00	Player Name
//	void* pt_quest[3];				//+10	Quest Pointers for each difficulty
//	uint8_t		uk1[0x18];				//+1C		//before : 0x14
//	void* pt_arena_unit;			//+34	ptArena for the Unit
//	uint8_t		uk2[0x4];				//+38		//before : 0x7
//	uint16_t		mp_source_portal_unique_id;	//+3C	Source Portal Unique_ID
//	uint8_t		uk3[0x2];				//+3E
//	uint16_t		mp_dest_portal_unique_id;	//+40	Destination Portal Unique_ID
//	uint8_t		uk4[0x06];				//+42
//	uint8_t		pt_object_un_id;			//+48	Object UniqueID for TownPortals
//	uint8_t		uk5[0x94B];//uk5[0x53];				//+49
//	net_client* net_client;			//+9C	ptClient
//};
//
//struct position {
//	uint32_t x;
//	uint32_t y;
//};
//
//struct room//size=0x80
//{
//	//ptRoom +48 0 = spawn new units (monster, objects e.tc), 1 = don't spawn any new units
//	uint32_t	seed1;						//+00
//	uint32_t	seed2;						//+04
//	uint8_t	uk8[0x1C];					//+08
//	room* pt_near_rooms;				//+24
//	uint32_t	nb_near_rooms;				//+28
//	unit* unit;						//+2C
//	uint8_t	uk5[0x44];					//+30
//	room* pt_next_room;					//+74
//	union {
//		uint8_t	flags;					//+78
//		struct {
//			uint8_t is_generated : 1;
//			uint8_t is_generated2 : 1;//???
//		};
//	};
//};
//
//struct act_map//ptGame+BC size=0x60
//{
//	uint32_t	is_not_managed;
//	uint32_t	uk4;
//	uint32_t	uk8;//size = 0x488
//	room* pt_first_room;
//};
//
//struct game {
//	char pad_0000[24]; //0x0000
//	void* critical_section; //0x0018
//	void* memory_pool; //0x001C
//	char pad_0020[74]; //0x0020
//	int8_t game_type; //0x006A
//	char pad_006_b[2]; //0x006B
//	int8_t difficulty_level; //0x006D
//	char pad_006_e[2]; //0x006E
//	int32_t expansion; //0x0070
//	int32_t game_type2; //0x0074
//	int32_t item_format; //0x0078
//	int32_t init_seed; //0x007C
//	int32_t object_seed; //0x0080
//	int32_t init_seed2; //0x0084
//	void* last_client; //0x0088 structure of last player that entered the game
//	int32_t clients_count; //0x008C
//	int32_t unit_counts[6]; //0x0090
//	int32_t game_frame; //0x00A8
//	char pad_00_ac[12]; //0x00AC
//	void* timer_queue; //0x00B8
//	void* drlg_act[5]; //0x00BC
//	int32_t lo_seed; //0x00D0
//	int32_t hi_seed; //0x00D4
//	char pad_00d8[20]; //0x00D8
//	int32_t monster_seed; //0x00EC
//	char pad_244[244];
//	unit* unit_list[5][128];//0x330
//	//void* monster_region[1024]; //0x00F0
//	//void* object_controller; //0x10F0
//	//void* quest_controller; //0x10F4
//	//void* unit_nodes[10]; //0x10F8
//	//unit* unit_list[5][128]; //0x1120
//	//void* tile_list; //0x1B20
//	//int32_t unique_flags[128]; //0x1B24
//	//void* npc_control; //0x1D24
//	//void* arena_control; //0x1D28
//	//void* party_control; //0x1D2C
//	//int8_t boss_flags[64]; //0x1D30
//	//int32_t monster_mode_data[17]; //0x1D70
//	//int32_t monster_mode_data_count; //0x1DB4
//	//char pad_1db8[12]; //0x1DB8
//	//int32_t sync_timer; //0x1DC4
//	//char pad_1dc8[32]; //0x1DC8
//	//int32_t uber_baal; //0x1DE8
//	//int32_t uber_diablo; //0x1DEC
//	//int32_t uber_mephisto; //0x1DF0
//}; //Size: 0x1DF4
////static_assert(sizeof(game) == 0x1DF4);
//
//struct path_t //(8 dword)
//{                              			//Offset from Code.		Size: 20
//	uint16_t	uk1;						//+00
//	uint16_t	mapx;						//+02
//	uint16_t	uk2;						//+04
//	uint16_t	mapy;						//+06
//	uint32_t	uk3;						//+08
//	uint32_t	x;							//+0C
//	uint32_t	y;							//+10
//	uint32_t	uk6;						//+14
//	uint32_t	uk7;						//+18
//	room* pt_room;						//+1C
//};
//
//struct inventory {                               		//Offset from Code.		Size: 30 à 40
//	uint32_t	tag;						//+00	= 0x01020304
//	uint8_t	uk1[0x04];					//+04	=? 0
//	unit* pt_char;						//+08
//	unit* pt_first_item;						//+0C
//	unit* pt_last_item; //+10
//	void* inv_info_ptr; //+14
//	uint32_t inv_info; //+18
//	uint32_t weapon_guid; //+1C
//	unit* inv_owner_item;					//+20
//	uint8_t	owner_guid;					//+24
//	uint32_t	current_used_socket;			//+28 //Kingpin : a variable to know how many sockets that have added to item
//	uint32_t	inventory2_c;				//+2C //one value
//	uint32_t	inventory30;				//+30
//	void* pt_corpse;					//+34
//	uint8_t	uk5[0x04];					//+38
//	uint32_t	next_corpse_id;				//+3C //max = 15
//	uint8_t	uk6[0x04];					//+40
//};
//
////https://phrozen-library.fandom.com/wiki/Items_line
////struct items_line {
////	char	szflippyfile[32];	//0x00
////	char	szinvfile[32];		//0x20
////	char	szuniqueinvfile[32];	//0x40
////	char	szsetinvfile[32];	//0x60
////	union {
////		uint32_t	dwcode;		//0x80
////		char	szcode[4];	//0x80
////	};
////	uint32_t	dwnormcode;		//0x84
////	uint32_t	dwubercode;		//0x88
////	uint32_t	dwultracode;		//0x8C
////	uint32_t	dwalternategfx;		//0x90
////	uint32_t	dwpSpell;		//0x94
////	uint16_t	wstate;			//0x98
////	uint16_t	wcstate1;		//0x9A
////	uint16_t	wcstate2;		//0x9C
////	uint16_t	wstat1;			//0x9E
////	uint16_t	wstat2;			//0xA0
////	uint16_t	wstat3;			//0xA2
////	uint32_t	dwcalc1;		//0xA4
////	uint32_t	dwcalc2;		//0xA8
////	uint32_t	dwcalc3;		//0xAC
////	uint32_t	dwLen;			//0xB0
////	uint16_t	bSpellDesc;		//0xB4
////	uint16_t	wSpellDescStr;		//0xB6
////	uint32_t	dwSpellDescCalc;	//0xB8
////	uint32_t	dwBetterGem;		//0xBC
////	uint32_t	dwwclass;		//0xC0
////	uint32_t	dw2handedwclass;	//0xC4
////	uint32_t	dwTMogType;		//0xC8
////	uint32_t	dwminac;		//0xCC
////	uint32_t	dwmaxac;		//0xD0
////	uint32_t	dwgamblecost;		//0xD4
////	uint32_t	dwspeed;		//0xD8
////	uint32_t	dwbitfield1;		//0xDC
////	uint32_t	dwcost;			//0xE0
////	uint32_t	dwminstack;		//0xE4
////	uint32_t	dwmaxstack;		//0xE8
////	uint32_t	dwspawnstack;		//0xEC
////	uint32_t	dwgemoffset;		//0xF0
////	uint16_t	wnamestr;		//0xF4
////	uint16_t	wversion;		//0xF6
////	uint16_t	wautoprefix;		//0xF8
////	uint16_t	wmissiletype;		//0xFA
////	uint8_t	brarity;		//0xFC
////	uint8_t	blevel;			//0xFD
////	uint8_t	bmindam;		//0xFE
////	uint8_t	bmaxdam;		//0xFF
////	uint8_t	bminmisdam;		//0x100
////	uint8_t	bmaxmisdam;		//0x101
////	uint8_t	b2handmindam;		//0x102
////	uint8_t	b2handmaxdam;		//0x103
////	uint16_t	brangeadder;		//0x104
////	uint16_t	wstrbonus;		//0x106
////	uint16_t	wdexbonus;		//0x108
////	uint16_t	wreqstr;		//0x10A
////	uint16_t	wreqdex;		//0x10C
////	uint8_t	babsorbs;		//0x10E
////	uint8_t	binvwidth;		//0x10F
////	uint8_t	binvheight;		//0x110
////	uint8_t	bblock;			//0x111
////	uint8_t	bdurability;		//0x112
////	uint8_t	bnodurability;		//0x113
////	uint8_t	bmissile;		//0x114
////	uint8_t	bcomponent;		//0x115
////	uint8_t	brArm;			//0x116
////	uint8_t	blArm;			//0x117
////	uint8_t	btorso;			//0x118
////	uint8_t	blegs;			//0x119
////	uint8_t	brspad;			//0x11A
////	uint8_t	blspad;			//0x11B
////	uint8_t	b2handed;		//0x11C
////	uint8_t	buseable;		//0x11D
////	uint16_t	wtype;			//0x11E
////	uint16_t	wtype2;			//0x120
////	uint16_t	bsubtype;		//0x122
////	uint16_t	wdropsound;		//0x124
////	uint16_t	wusesound;		//0x126
////	uint8_t	bdropsfxframe;		//0x128
////	uint8_t	bunique;		//0x129
////	uint8_t	bquest;			//0x12A
////	uint8_t	bquestdiffcheck;	//0x12B
////	uint8_t	btransparent;		//0x12C
////	uint8_t	btranstbl;		//0x12D
////	uint8_t 	pad0x12E;		//0x12E
////	uint8_t	blightradius;		//0x12F
////	uint8_t	bbelt;			//0x130
////	uint8_t	bautobelt;		//0x131
////	uint8_t	bstackable;		//0x132
////	uint8_t	bspawnable;		//0x133
////	uint8_t	bspellicon;		//0x134
////	uint8_t	bdurwarning;		//0x135
////	uint8_t	bqntwarning;		//0x136
////	uint8_t	bhasinv;		//0x137
////	uint8_t	bgemsockets;		//0x138
////	uint8_t	bTransmogrify;		//0x139
////	uint8_t	bTMogMin;		//0x13A
////	uint8_t	bTMogMax;		//0x13B
////	uint8_t	bhitclass;		//0x13C
////	uint8_t	b1or2handed;		//0x13D
////	uint8_t	bgemapplytype;		//0x13E
////	uint8_t	blevelreq;		//0x13F
////	uint8_t	bmagiclvl;		//0x140
////	uint8_t	bTransform;		//0x141
////	uint8_t	bInvTrans;		//0x142
////	uint8_t	bcompactsave;		//0x143
////	uint8_t	bSkipName;		//0x144
////	uint8_t	bNameable;		//0x145
////	uint8_t	bAkaraMin;		//0x146
////	uint8_t	bGheedMin;		//0x147
////	uint8_t	bCharsiMin;		//0x148
////	uint8_t	bFaraMin;		//0x149
////	uint8_t	bLysanderMin;		//0x14A
////	uint8_t	bDrognanMin;		//0x14B
////	uint8_t	bHraltiMin;		//0x14C
////	uint8_t	bAlkorMin;		//0x14D
////	uint8_t	bOrmusMin;		//0x14E
////	uint8_t	bElzixMin;		//0x14F
////	uint8_t	bAshearaMin;		//0x150
////	uint8_t	bCainMin;		//0x151
////	uint8_t	bHalbuMin;		//0x152
////	uint8_t	bJamellaMin;		//0x153
////	uint8_t	bMalahMin;		//0x154
////	uint8_t	bLarzukMin;		//0x155
////	uint8_t	bDrehyaMin;		//0x156
////	uint8_t	bAkaraMax;		//0x157
////	uint8_t	bGheedMax;		//0x158
////	uint8_t	bCharsiMax;		//0x159
////	uint8_t	bFaraMax;		//0x15A
////	uint8_t	bLysanderMax;		//0x15B
////	uint8_t	bDrognanMax;		//0x15C
////	uint8_t	bHraltiMax;		//0x15D
////	uint8_t	bAlkorMax;		//0x15E
////	uint8_t	bOrmusMax;		//0x15F
////	uint8_t	bElzixMax;		//0x160
////	uint8_t	bAshearaMax;		//0x161
////	uint8_t	bCainMax;		//0x162
////	uint8_t	bHalbuMax;		//0x163
////	uint8_t	bJamellaMax;		//0x164
////	uint8_t	bMalahMax;		//0x165
////	uint8_t	bLarzukMax;		//0x166
////	uint8_t	bDrehyaMax;		//0x167
////	uint8_t	bAkaraMagicMin;		//0x168
////	uint8_t	bGheedMagicMin;		//0x169
////	uint8_t	bCharsiMagicMin;	//0x16A
////	uint8_t	bFaraMagicMin;		//0x16B
////	uint8_t	bLysanderMagicMin;	//0x16C
////	uint8_t	bDrognanMagicMin;	//0x16D
////	uint8_t	bHraltiMagicMin;	//0x16E
////	uint8_t	bAlkorMagicMin;		//0x16F
////	uint8_t	bOrmusMagicMin;		//0x170
////	uint8_t	bElzixMagicMin;		//0x171
////	uint8_t	bAshearaMagicMin;	//0x172
////	uint8_t	bCainMagicMin;		//0x173
////	uint8_t	bHalbuMagicMin;		//0x174
////	uint8_t	bJamellaMagicMin;	//0x175
////	uint8_t	bMalahMagicMin;		//0x176
////	uint8_t	bLarzukMagicMin;	//0x177
////	uint8_t	bDrehyaMagicMin;	//0x178
////	uint8_t	bAkaraMagicMax;		//0x179
////	uint8_t	bGheedMagicMax;		//0x17A
////	uint8_t	bCharsiMagicMax;	//0x17B
////	uint8_t	bFaraMagicMax;		//0x17C
////	uint8_t	bLysanderMagicMax;	//0x17D
////	uint8_t	bDrognanMagicMax;	//0x17E
////	uint8_t	bHraltiMagicMax;	//0x17F
////	uint8_t	bAlkorMagicMax;		//0x180
////	uint8_t	bOrmusMagicMax;		//0x181
////	uint8_t	bElzixMagicMax;		//0x182
////	uint8_t	bAshearaMagicMax;	//0x183
////	uint8_t	bCainMagicMax;		//0x184
////	uint8_t	bHalbuMagicMax;		//0x185
////	uint8_t	bJamellaMagicMax;	//0x186
////	uint8_t	bMalahMagicMax;		//0x187
////	uint8_t	bLarzukMagicMax;	//0x188
////	uint8_t	bDrehyaMagicMax;	//0x189
////	uint8_t	bAkaraMagicLvl;		//0x18A
////	uint8_t	bGheedMagicLvl;		//0x18B
////	uint8_t	bCharsiMagicLvl;	//0x18C
////	uint8_t	bFaraMagicLvl;		//0x18D
////	uint8_t	bLysanderMagicLvl;	//0x18E
////	uint8_t	bDrognanMagicLvl;	//0x18F
////	uint8_t	bHraltiMagicLvl;	//0x190
////	uint8_t	bAlkorMagicLvl;		//0x191
////	uint8_t	bOrmusMagicLvl;		//0x192
////	uint8_t	bElzixMagicLvl;		//0x193
////	uint8_t	bAshearaMagicLvl;	//0x194
////	uint8_t	bCainMagicLvl;		//0x195
////	uint8_t	bHalbuMagicLvl;		//0x196
////	uint8_t	bJamellaMagicLvl;	//0x197
////	uint8_t	bMalahMagicLvl;		//0x198
////	uint8_t	bLarzukMagicLvl;	//0x199
////	uint8_t	bDrehyaMagicLvl;	//0x19A
////	uint8_t	pad0x19B;		//0x19B
////	uint32_t	dwNightmareUpgrade;	//0x19C
////	uint32_t	dwHellUpgrade;		//0x1A0
////	uint8_t	bPermStoreItem;		//0x1A4
////	uint8_t	bmultibuy;		//0x1A5
////	uint16_t	pad0x1A6;		//0x1A6
////};
//
//
//#pragma pack(push, 1)
//namespace d2_protocol {
//	enum message_types_t {
//		MESSAGE_TYPE_ITEM_MOVE,
//		MESSAGE_TYPE_COUNT
//	};
//
//	struct packet_header {
//		uint16_t d2_packet_type;
//		uint8_t message_type;
//
//		packet_header() : d2_packet_type(0xBB), message_type(0) {}
//	};
//
//	struct item_move_cs : packet_header {
//		uint32_t item_guid;
//		uint8_t target_page;
//		uint8_t source_page;
//
//		item_move_cs() : item_guid(0), target_page(0), source_page(0) {
//			message_type = MESSAGE_TYPE_ITEM_MOVE;
//		}
//	};
//
//
//	struct to_belt_cs : packet_header {
//		uint32_t item_guid;
//		to_belt_cs() : item_guid(0) {
//			message_type = MESSAGE_TYPE_ITEM_MOVE;
//		}
//	};
//
//
//	struct item_move_sc : packet_header {
//		uint32_t item_guid;
//		uint32_t tx;
//		uint32_t ty;
//		uint8_t target_page;
//		uint8_t source_page;
//
//		item_move_sc() : item_guid(0), tx(0), ty(0), target_page(0), source_page(0) {
//			message_type = MESSAGE_TYPE_ITEM_MOVE;
//		}
//	};
//}
//#pragma pack(pop, 1)

#endif