#BH - ItemData->prefix/suffix lookup

1 messages · Page 1 of 1 (latest)

calm cedar
#
D2Structs.h

struct ItemData {
    ...
    WORD wRarePrefix;                //0x32
    WORD wRareSuffix;                //0x34
    WORD wAutoPrefix;                //0x36
    WORD wPrefix[3];                //0x38
    WORD wSuffix[3];                //0x3E
    ...
};

It's used here for instance:

item/ItemDisplay.cpp

line 2903: if ((itemData->wPrefix[0] - PREFIX_OFFSET > 0) ? IntegerCompare(itemData->wPrefix[0] - PREFIX_OFFSET, operation, prefixID1, prefixID2) : false)

The PREFIX_OFFSET is initialised here:

item/Item.cpp

line 637
void GetAffixOffsets()
 {
     D2MagicAffixDataTbl* pMagicAffixInfo = D2COMMON_10492_DATATBLS_GetMagicAffixDataTables();
     PREFIX_OFFSET = ((int)pMagicAffixInfo->pMagicPrefix - (int)pMagicAffixInfo->pMagicAffixTxt) / sizeof(AutoMagicTxt);
     AUTOMOD_OFFSET = ((int)pMagicAffixInfo->pAutoMagic - (int)pMagicAffixInfo->pMagicAffixTxt) / sizeof(AutoMagicTxt);
 }
D2DataTables.h

struct D2MagicAffixDataTbl                        //sgptDataTable + 0xEC8
{
    int nMagicAffixTxtRecordCount;                //0x00
    AutoMagicTxt* pMagicAffixTxt;                //0x04
    AutoMagicTxt* pMagicSuffix;                    //0x08
    AutoMagicTxt* pMagicPrefix;                    //0x0C
    AutoMagicTxt* pAutoMagic;                    //0x10
};
elder heron
#

D2COMMON_10492_DATATBLS_GetMagicAffixDataTables is from FUNCPTR(D2COMMON, 10492_DATATBLS_GetMagicAffixDataTables, D2MagicAffixDataTbl* __stdcall, (), -10492); in D2Ptrs.h:353, these are static locations reverse engineered from the game dlls

#

if you want to see the affix tables in human readable form you need to extract MagicPrefix.txt and MagicSuffix.txt in pd2data.mpq using an mpq editor/extractor