Дошло дело до перебора объектов в игре (поиск ближайшей заправочной колонки). Использованы строки кода:
static CPool<CObject> *& pObjectPool;
CPool<CObject> *& CPools::pObjectPool = *(CPool<CObject> **)0x094DBE0;
CObject * pObject;
for (int i = 0; i < CPools::pObjectPool->size; i++) {
pObject = &CPools::pObjectPool->objects[i];
if (!CPools::pObjectPool->flags[i].bIsFreeSlot) {
if (pObject->id == OBJECT_PETROLPUMP) {
// Нашли объект, но не тут-то было
}
}
}
Первый объект находится правильно, а дальше происходит сдвиг на 12 байт с каждым новым объектом. Возникает вопрос, либо шаблон пула не подходит для CObject, либо в основе не класс CObject с размером 0x194. То есть если создать расширенный класс CObject с размером 0x1A0, то все становится правильно. Хочется понять, почему так, если кому-то еще это интересно.