# HG changeset patch # User zipi # Date 1360189963 0 # Node ID d61f6bc04bf20ffa3bbe67577c528b2d9faa5ed8 # Parent 98cd93e14777a1f4ae2da2d44bb1da8a061b4412 more pointer fixes diff -r 98cd93e14777 -r d61f6bc04bf2 Party.cpp --- a/Party.cpp Wed Feb 06 21:19:42 2013 +0000 +++ b/Party.cpp Wed Feb 06 22:32:43 2013 +0000 @@ -774,7 +774,7 @@ //----- (0043AD34) -------------------------------------------------------- void Party::Yell() { - void *v0; // esi@5 + Actor *v0; // esi@5 int v1; // edi@9 int v2; // ebx@9 int v3; // eax@9 @@ -787,19 +787,19 @@ v4 = 0; if ( (signed int)uNumActors > 0 ) { - v0 = &pActors[0].pMonsterInfo.uMovementType; + v0 = pActors;//[0].pMonsterInfo.uMovementType; do { - if ( ((Actor *)((char *)v0 - 59))->Actor::CanAct() && *((char *)v0 + 2) != 4 && *(char *)v0 != 5 ) + if ( v0->Actor::CanAct() && v0->pMonsterInfo.uHostilityType != 4 && v0->pMonsterInfo.uMovementType != 5 ) { - v1 = abs(*(short *)((char *)v0 + 83) - pParty->vPosition.x); - v2 = abs(*(short *)((char *)v0 + 85) - pParty->vPosition.y); - v3 = abs(*(short *)((char *)v0 + 87) - pParty->vPosition.z); + v1 = abs(v0->vPosition.x - pParty->vPosition.x); + v2 = abs(v0->vPosition.y - pParty->vPosition.y); + v3 = abs(v0->vPosition.z - pParty->vPosition.z); if ( (double)sub_4621DA(v1, v2, v3) < 512.0 ) Actor::_402968(v4, 4, 0, 0); } ++v4; - v0 = (char *)v0 + 836; + ++v0; } while ( (signed int)v4 < (signed int)uNumActors ); } diff -r 98cd93e14777 -r d61f6bc04bf2 mm7_2.cpp --- a/mm7_2.cpp Wed Feb 06 21:19:42 2013 +0000 +++ b/mm7_2.cpp Wed Feb 06 22:32:43 2013 +0000 @@ -3225,7 +3225,7 @@ void __cdecl sub_4BBCDD() { signed int v0; // ebp@3 - char *v1; // eax@4 + Actor *v1; // eax@4 __int16 v2; // cx@5 int v3; // esi@8 Player *v4; // esi@14 @@ -3242,22 +3242,22 @@ else { v0 = 0; - if ( (signed int)uNumActors <= 0 ) - goto LABEL_23; - v1 = (char *)&pActors[0].uAIState; - v7 = uNumActors; - do - { - v2 = *(short *)v1; - if ( *(short *)v1 == 5 || v2 == 11 || v2 == 19 || (v3 = *((int *)v1 + 159)) != 0 && (v3 & 7) == 4 ) - ++v0; - v1 += 836; - --v7; - } - while ( v7 ); - if ( v0 >= (signed int)uNumActors ) - { -LABEL_23: + if ( (signed int)uNumActors > 0 ) + { + v1 = pActors;//[0].uAIState; + v7 = uNumActors; + do + { + v2 = v1->uAIState; + if ( v1->uAIState == 5 || v2 == 11 || v2 == 19 || (v3 = v1->uSummonerID) != 0 && (v3 & 7) == 4 ) + ++v0; + ++v1; + --v7; + } + while ( v7 ); + } + if ( v0 >= (signed int)uNumActors || (signed int)uNumActors <= 0) + { uDialogueType = 91; v4 = pParty->pPlayers; ++*((char *)&pParty->field_75A[3] + (unsigned __int8)pParty->field_7B5_in_arena_quest + 1); @@ -7781,7 +7781,7 @@ signed int __fastcall sub_44FA4C_spawn_light_elemental(int a1, int a2, int a3) { signed int v3; // ecx@6 - char *v4; // edx@7 + Actor *v4; // edx@7 signed int result; // eax@13 Actor *v6; // esi@16 char *v7; // ebx@16 @@ -7820,17 +7820,17 @@ v20 = uNumActors; if ( (signed int)uNumActors > 0 ) { - v4 = (char *)&pActors[0].uAIState; - while ( *(short *)v4 != Removed ) + v4 = pActors;//[0].uAIState; + while ( v4->uAIState != Removed ) { ++v3; - v4 += 836; + ++v4; if ( v3 >= (signed int)uNumActors ) - goto LABEL_12; - } - v20 = v3; - } -LABEL_12: + break; + } + if( v3 < (signed int)uNumActors ) + v20 = v3; + } if ( v20 != uNumActors || (result = uNumActors + 1, (signed int)(uNumActors + 1) < 500) ) { v21 = 0; @@ -15982,7 +15982,7 @@ int __fastcall sub_46A89E(int a1, int a2, signed int a3) { signed int v3; // edi@1 - char *v4; // esi@2 + Actor *v4; // esi@2 int v5; // ebx@3 int v6; // eax@3 int v7; // ebx@3 @@ -16004,12 +16004,12 @@ v19 = 0; if ( (signed int)uNumActors > 0 ) { - v4 = (char *)&pActors[0].uAIState; + v4 = pActors;//[0].uAIState; do { - v5 = abs(*((short *)v4 - 17) - pParty->vPosition.x); - v17 = abs(*((short *)v4 - 16) - pParty->vPosition.y); - v18 = abs(*((short *)v4 - 15) - pParty->vPosition.z); + v5 = abs(v4->vPosition.x - pParty->vPosition.x); + v17 = abs(v4->vPosition.y - pParty->vPosition.y); + v18 = abs(v4->vPosition.z - pParty->vPosition.z); v6 = v5; v7 = v17; v8 = v18; @@ -16033,8 +16033,8 @@ } if ( (signed int)(((unsigned int)(11 * v7) >> 5) + (v8 >> 2) + v6) <= a3 ) { - v12 = *(short *)v4; - if ( *(short *)v4 != 5 ) + v12 = v4->uAIState; + if ( v4->uAIState != 5 ) { if ( v12 != 4 ) { @@ -16055,7 +16055,7 @@ } } ++v3; - v4 += 836; + ++v4; } while ( v3 < (signed int)uNumActors ); } @@ -16353,7 +16353,7 @@ void LayingItem::_46BEF1_apply_spells() { LayingItem *v1; // edi@1 - char *v2; // esi@2 + Actor *v2; // esi@2 __int16 v3; // fps@4 unsigned __int8 v4; // c0@4 unsigned __int8 v5; // c3@4 @@ -16363,28 +16363,28 @@ v1 = this; if ( (signed int)uNumActors > 0 ) { - v2 = (char *)&pActors[0].vPosition.y; + v2 = pActors;//[0].vPosition.y; do { - if ( ((Actor *)(v2 - 144))->CanAct() ) + if ( v2->CanAct() ) { //UNDEF(v3); if ( !(v4 | v5) ) { - if ( stru_50C198.GetMagicalResistance((Actor *)(v2 - 144), 0xAu) ) - { - ((SpellBuff *)&v2[16 * v1->field_48 + 68])->Apply( + if ( stru_50C198.GetMagicalResistance(v2, 0xAu) ) + { + v2->pActorBuffs[v1->field_48].Apply( pParty->uTimePlayed + (signed int)(signed __int64)((double)(v1->field_4C << 7) * 0.033333335), v1->field_50, 4u, 0, 0); - *(v2 - 106) |= 8u; + HIWORD(v2->uAttributes) |= 8u; } } } ++v6; - v2 += 836; + ++v2; } while ( v6 < (signed int)uNumActors ); } @@ -16730,7 +16730,7 @@ pActors[v108].uAIState = Standing; pActors[v108].UpdateAnimation(); } - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[v136] + v108 * 836))->Apply( + pActors[v108].pActorBuffs[v136].Apply( pParty->uTimePlayed + (signed int)(signed __int64)((double)(v137 << 7) * 0.033333335), v152, v150, diff -r 98cd93e14777 -r d61f6bc04bf2 mm7_4.cpp --- a/mm7_4.cpp Wed Feb 06 21:19:42 2013 +0000 +++ b/mm7_4.cpp Wed Feb 06 22:32:43 2013 +0000 @@ -14436,7 +14436,7 @@ AIDirection a3; // [sp+4h] [bp-68h]@21 AIDirection v14; // [sp+20h] [bp-4Ch]@21 AIDirection v15; // [sp+3Ch] [bp-30h]@21 - SpellBuff *v16; // [sp+58h] [bp-14h]@2 + Actor *v16; // [sp+58h] [bp-14h]@2 int v17; // [sp+5Ch] [bp-10h]@6 stru262_TurnBased *v18; // [sp+60h] [bp-Ch]@1 int v19; // [sp+64h] [bp-8h]@8 @@ -14448,12 +14448,13 @@ v20 = 0; if ( (signed int)uNumActors > 0 ) { - v3 = pActors[0].pActorBuffs; - v16 = pActors[0].pActorBuffs; + //v3 = pActors;//[0].pActorBuffs; + v16 = pActors;//[0].pActorBuffs; + v3 = v16->pActorBuffs; do { - v4 = (Actor *)((char *)&v3[-13] - 4); - if ( SHIDWORD(v3[3].uExpireTime) < v2 || SHIDWORD(v3[3].uExpireTime) <= v2 && LODWORD(v3[3].uExpireTime) <= v2 ) + v4 = v16; + if ( SHIDWORD(v3[3].uExpireTime) < v2 || SHIDWORD(v3[3].uExpireTime) <= v2 && LODWORD(v3[3].uExpireTime) <= v2 ) v17 = v2; else v17 = 1; @@ -14516,8 +14517,8 @@ } } ++v20; - v3 = (SpellBuff *)((char *)v16 + 836); - v16 = (SpellBuff *)((char *)v16 + 836); + v3 = v16[1].pActorBuffs; + ++v16; } while ( (signed int)v20 < (signed int)uNumActors ); } diff -r 98cd93e14777 -r d61f6bc04bf2 mm7_5.cpp --- a/mm7_5.cpp Wed Feb 06 21:19:42 2013 +0000 +++ b/mm7_5.cpp Wed Feb 06 22:32:43 2013 +0000 @@ -4948,7 +4948,7 @@ Vec3_int_ v25; // ST04_12@19 unsigned int v26; // ebx@20 Player *v27; // edi@20 - char *v28; // edi@27 + Actor *v28; // edi@27 int v29; // ebx@29 int v30; // eax@29 int v31; // edx@29 @@ -5087,25 +5087,25 @@ uActorID = 0; if ( (signed int)uNumActors > 0 ) { - v28 = (char *)&pActors[0].vPosition.z; + v28 = pActors;//[0].vPosition.z; do { if ( ((Actor *)(v28 - 146))->CanAct() ) { v29 = *(short *)v1; - v30 = *((short *)v28 - 1) - *((short *)v1 - 100); - a1 = *((short *)v28 - 2) - *((short *)v1 - 200); - v31 = *(short *)v28; + v30 = *(&v28->vPosition.y - *((short *)v1 - 100); + a1 = *(&v28->vPosition.x - *((short *)v1 - 200); + v31 = v28->vPosition.z; v48 = v30; v44 = v31; - v32 = ((signed int)*((short *)v28 - 4) >> 1) - v29; - v33 = *((short *)v28 - 5) + *((short *)v1 + 100); + v32 = (v28->uActorHeight >> 1) - v29; + v33 = *(&v28->uActorRadius + *((short *)v1 + 100); if ( a1 * a1 + v48 * v48 + (v31 + v32) * (v31 + v32) < (unsigned int)(v33 * v33) ) { v34.z = *(short *)v1; v34.y = *((short *)v1 - 100); v34.x = *((short *)v1 - 200); - if ( sub_407A1C(*((short *)v28 - 2), *((short *)v28 - 1), *(short *)v28 + 50, v34) ) + if ( sub_407A1C(v28->vPosition.x, v28->vPosition.y, v28->vPosition.z + 50, v34) ) { Vec3_int_::Normalize(&a1, &v48, &v44); v35 = pVelocity; @@ -5118,7 +5118,7 @@ DamageMonsterFromParty(*((short *)v1 - 300), uActorID, v35); break; case 3: - if ( v36 && pActors[v37].GetActorsRelation((Actor *)(v28 - 146)) ) + if ( v36 && pActors[v37].GetActorsRelation(v28) ) sub_43B1B0(*((short *)v1 - 300), uActorID, pVelocity, v36->field_61); break; case 2: @@ -5129,7 +5129,7 @@ } } ++uActorID; - v28 += 836; + ++v28; } while ( (signed int)uActorID < (signed int)uNumActors ); } diff -r 98cd93e14777 -r d61f6bc04bf2 mm7_6.cpp --- a/mm7_6.cpp Wed Feb 06 21:19:42 2013 +0000 +++ b/mm7_6.cpp Wed Feb 06 22:32:43 2013 +0000 @@ -3063,7 +3063,7 @@ int v515; // ecx@951 int v516; // eax@953 int v517; // eax@956 - char *v518; // edx@957 + Actor *v518; // edx@957 __int16 v519; // cx@958 int v520; // ecx@968 int v521; // ecx@969 @@ -3272,6 +3272,7 @@ ItemGen *_this; // [sp+E50h] [bp-34h]@23 float v725; // [sp+E54h] [bp-30h]@23 Player *v726; // [sp+E58h] [bp-2Ch]@131 + int v726b; float v727; // [sp+E5Ch] [bp-28h]@1 unsigned int uRequiredMana; // [sp+E60h] [bp-24h]@53 Player *pPlayer; // [sp+E64h] [bp-20h]@8 @@ -3708,9 +3709,9 @@ goto LABEL_83; v726 = (Player *)(a2 >> 3); HIDWORD(v733) = 836 * (a2 >> 3); - if ( !stru_50C198.GetMagicalResistance((Actor *)((char *)pActors + HIDWORD(v733)), 3u) ) + if ( !stru_50C198.GetMagicalResistance(&pActors[a2 >> 3], 3u) ) goto LABEL_1056; - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[10] + HIDWORD(v733)))->Apply( + pActors[a2 >> 3].pActorBuffs[10].Apply( pMiscTimer->uTotalGameTimeElapsed + 128, v1, v1, @@ -3898,8 +3899,8 @@ goto LABEL_83; if ( (a2 & 7) != 3 || (v721 = 836 * (a2 >> 3), - LODWORD(v718) = (int)(char *)pActors + v721, - !stru_50C198.GetMagicalResistance((Actor *)((char *)pActors + v721), 3u)) ) + LODWORD(v718) = (int)&pActors[a2 >> 3], + !stru_50C198.GetMagicalResistance(&pActors[a2 >> 3], 3u)) ) goto LABEL_1056; v726 = (Player *)(23040 * v2); v58 = (signed __int64)((double)(23040 * v2) * 0.033333335); @@ -3918,7 +3919,7 @@ if ( !pPlayer->CanCastSpell(uRequiredMana) ) goto LABEL_83; v730 = 836 * (a2 >> 3); - if ( !stru_50C198.GetMagicalResistance((Actor *)((char *)pActors + v730), 7u) ) + if ( !stru_50C198.GetMagicalResistance(&pActors[a2>>3], 7u) ) goto LABEL_1056; LODWORD(v733) = 300 * v2; if ( v731 == 2 ) @@ -3944,7 +3945,7 @@ a1.field_4C = v2; a1.field_50 = v731; v60 = pObjectList->ObjectIDByItemID(a1.uItemType); - v61 = v730; + v61 = a2 >> 3; goto LABEL_1086; case 92: if ( !pPlayer->CanCastSpell(uRequiredMana) ) @@ -6307,23 +6308,23 @@ v730 = 836 * v426; if ( stru_50C198.GetMagicalResistance(&pActors[v426], 7u) ) { - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[1] + v730))->Reset(); - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[12] + v730))->Reset(); + pActors[v426].pActorBuffs[1].Reset(); + pActors[v426].pActorBuffs[12].Reset(); v732 = amount << 7; - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[9] + v730))->Apply( + pActors[v426].pActorBuffs[9].Apply( pParty->uTimePlayed + (signed __int64)((double)(amount << 7) * 0.033333335), v731, v1, v1, v1); - *(&pActors[0].pMonsterInfo.uHostilityType + v730) = MonsterInfo::Hostility_Long; + pActors[v426].pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Long; } a1.stru_24.Reset(); a1.field_48 = v3->spellnum; a1.field_4C = v2; a1.field_50 = v731; v60 = pObjectList->ObjectIDByItemID(a1.uItemType); - v61 = v730; + v61 = v426; goto LABEL_1086; case 66: if ( !pPlayer->CanCastSpell(uRequiredMana) ) @@ -6335,12 +6336,12 @@ v730 = 836 * v427; if ( MonsterStats::BelongsToSupertype(pActors[v427].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) ) goto LABEL_83; - if ( stru_50C198.GetMagicalResistance((Actor *)((char *)pActors + v730), 7u) ) - { - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[9] + v730))->Reset(); - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[1] + v730))->Reset(); + if ( stru_50C198.GetMagicalResistance(&pActors[v427], 7u) ) + { + pActors[v427].pActorBuffs[9].Reset(); + pActors[v427].pActorBuffs[1].Reset(); v732 = amount << 7; - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[12] + v730))->Apply( + pActors[v427].pActorBuffs[12].Apply( pParty->uTimePlayed + (signed __int64)((double)(amount << 7) * 0.033333335), v731, v1, @@ -6352,7 +6353,7 @@ a1.field_4C = v2; a1.field_50 = v731; v60 = pObjectList->ObjectIDByItemID(a1.uItemType); - v61 = v730; + v61 = v427; goto LABEL_1086; case 63: v428 = v12 - 2; @@ -6916,17 +6917,17 @@ LOBYTE(v517) = v517 | 4; if ( (signed int)uNumActors > v1 ) { - v518 = (char *)&pActors[0].uAIState; - v726 = (Player *)uNumActors; + v518 = pActors;//[0].uAIState; + v726b = uNumActors; do { - v519 = *(short *)v518; - if ( *(short *)v518 != 5 && v519 != 11 && v519 != 19 && v517 == *((int *)v518 + 159) ) + v519 = v518->uAIState; + if ( v518->uAIState != 5 && v519 != 11 && v519 != 19 && v517 == v518->uSummonerID ) ++HIDWORD(v733); - v518 += 836; - v726 = (Player *)((char *)v726 - 1); + ++v518; + --v726; } - while ( *(float *)&v726 != 0.0 ); + while ( v726 != 0 ); } if ( SHIDWORD(v733) >= amount ) { @@ -7437,12 +7438,12 @@ v730 = 836 * v599; if ( !MonsterStats::BelongsToSupertype(pActors[v599].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) ) goto LABEL_83; - if ( !stru_50C198.GetMagicalResistance((Actor *)((char *)pActors + v730), 0xAu) ) + if ( !stru_50C198.GetMagicalResistance(&pActors[v599], 0xAu) ) goto LABEL_200; - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[9] + v730))->Reset(); - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[1] + v730))->Reset(); + pActors[v599].pActorBuffs[9].Reset(); + pActors[v599].pActorBuffs[1].Reset(); v732 = (int)v733 << 7; - ((SpellBuff *)((char *)&pActors[0].pActorBuffs[12] + v730))->Apply( + pActors[v599].pActorBuffs[12].Apply( pParty->uTimePlayed + (signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335), v731, v1, @@ -7453,14 +7454,14 @@ a1.field_4C = v2; a1.field_50 = v731; v60 = pObjectList->ObjectIDByItemID(a1.uItemType); - v61 = v730; + v61 = v599; LABEL_1086: - v600 = *(__int16 *)((char *)&pActors[0].vPosition.y + v61); - v601 = *(__int16 *)((char *)&pActors[0].vPosition.x + v61); + v600 = pActors[v61].vPosition.y; + v601 = pActors[v61].vPosition.x; a1.uObjectDescID = v60; a1.vPosition.x = v601; - v602 = *(unsigned __int16 *)((char *)&pActors[0].uActorHeight + v61); - v603 = *(__int16 *)((char *)&pActors[0].vPosition.z + v61); + v602 = pActors[v61].uActorHeight; + v603 = pActors[v61].vPosition.z; a1.vPosition.y = v600; v676 = v603 + v602; v665 = v600;