mirror of
https://gitlab.com/hashborgir/d2tweaks-rnd2k.git
synced 2024-11-30 20:55:59 +00:00
4358 lines
118 KiB
C
4358 lines
118 KiB
C
#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 |