#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 // 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 //}; // //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