ApplyMonsterGeoset
Jump to navigation
Jump to search
Supposedly used for filtering geosets when there is no DB/CreatureDisplayInfoExtra available?
int __usercall CCharacterComponent::ApplyMonsterGeosets@<eax>(CM2Model *this_m2model@<rdi>, CreatureModelData_Rec *cmd@<rax>, int a3@<edx>, int a4@<ecx>, CreatureDisplayInfoRec_C *cdi@<rsi>, int a6@<r8d>) { char v6; // r12@5 unsigned int v7; // ebx@5 signed int v8; // er14@6 unsigned int v9; // er13@6 unsigned int v10; // ebx@8 if ( this_m2model ) { if ( cdi ) { cmd = WowClientDB_Base::GetRecordDataUnsafe(&g_creatureModelDataDB, cdi->ModelID, a3, a4, a6); if ( cmd ) { if ( cmd->CreatureGetosetDataID ) { // packed mask of active geosets // if (cmd->CreatureGeosetDataID != 0) // { // std::vector<int> activeGeosets; // for (int i = 0; i < 8; ++i) // activeGeosets.push_back(((cdi.CreatureGeosetData >> (4 * i)) & 0xF) + i * 100); // } // v6 = 0; CM2Model::SetGeometryVisible(this_m2model, 1u, 899u, 0); v7 = cdi->CreatureGeosetData; if ( v7 ) { v8 = 8; v9 = 100; while ( 1 ) { v10 = v7 >> v6; if ( v10 & 15 ) { CM2Model::SetGeometryVisible(this_m2model, v9, v9 + 99, 0); CM2Model::SetGeometryVisible(this_m2model, v9 + (v10 & 15), v9 + (v10 & 15), 1); } if ( !--v8 ) break; v6 += 4; v9 += 100; v7 = cdi->CreatureGeosetData; } } LODWORD(cmd) = CM2Model::OptimizeVisibleGeometry(this_m2model); } } } } return cmd; }