Я имею ввиду, когда в .cpp файл будем переносить, нужно перенести без shifter pointers.
А они и не нужны будут. Будут прямые указатели, а не сдвинутые. Это уже компилятор оптимизирует, ему всё равно, откуда мерить смещения.
Вот этот цикл заполняет AI_ArmyInfo_C;
- Код: Выделить всё
do
{
pArmyInfo_C = &ADJ(pC)->AI_ArmyInfo_C:
ADJ(pC)->AI_ArmyInfo_C.Army = ADJ(pC)->AI_ArmyInfo_A.Army;
ADJ(pC)->AI_ArmyInfo_C.average_damage = ADJ(pC)->AI_ArmyInfo_A.average_damage;
ADJ(pC)->AI_ArmyInfo_C.field_8 = ADJ(pC)->AI_ArmyInfo_A.field_8;
ADJ(pC)->AI_ArmyInfo_C.average_damage_0 = ADJ(pC)->AI_ArmyInfo_A.average_damage_0;
if ( ADJ(pC)->AI_ArmyInfo_B.average_damage > ADJ(pC)->AI_ArmyInfo_C.average_damage )
{
pArmyInfo_C->Army = ADJ(pC)->AI_ArmyInfo_B.Army;
ADJ(pC)->AI_ArmyInfo_C.average_damage = ADJ(pC)->AI_ArmyInfo_B.average_damage;
pArmyInfo_C->field_8 = ADJ(pC)->AI_ArmyInfo_B.field_8;
pArmyInfo_C->average_damage_0 = ADJ(pC)->AI_ArmyInfo_B.average_damage_0;
}
pC += 4;
++iArmy_C;
}
while ( iArmy_C < gpCombatManager->ArmyNum[this->Side[AI_CASTER]] );
Тут сразу видно, что С является копией A, когда ADJ(pC)->AI_ArmyInfo_B.average_damage <= ADJ(pC)->AI_ArmyInfo_C.average_damage и копией B в противном случае.
ADJ(pC) в нормальной программе на С++ будет обычным указателем. Это компилятор взял смещённый и начал работать с ним. На низком уровне нет понятия начала чего-либо, т.е. возможны и отрицательные смещения, например.