Mercurial > mm7
changeset 853:7ada14f991f5
Слияние
author | Ritor1 |
---|---|
date | Sat, 30 Mar 2013 09:40:15 +0600 |
parents | e3609dd06c15 (current diff) 39503542470c (diff) |
children | 06fc66ceecd6 |
files | mm7_3.cpp |
diffstat | 1 files changed, 430 insertions(+), 564 deletions(-) [+] |
line wrap: on
line diff
--- a/mm7_3.cpp Sat Mar 30 09:40:05 2013 +0600 +++ b/mm7_3.cpp Sat Mar 30 09:40:15 2013 +0600 @@ -862,15 +862,15 @@ void __cdecl UpdateActors_ODM() { Actor *v0; // esi@2 - unsigned __int16 v1; // ax@2 - unsigned int v2; // ecx@6 + AIState uAIState; // ax@2 + //unsigned int v2; // ecx@6 int v3; // ebx@6 - int v4; // eax@8 + //int v4; // eax@8 int v5; // eax@10 int v6; // ecx@10 - signed int v7; // ebx@10 + //signed int v7; // ebx@10 signed int v8; // ebx@17 - unsigned __int8 v9; // zf@17 + //unsigned __int8 v9; // zf@17 unsigned __int8 v10; // sf@17 unsigned __int16 v11; // ax@21 int v12; // eax@29 @@ -878,7 +878,7 @@ int v14; // eax@30 unsigned __int64 v15; // qax@30 int v16; // eax@33 - int v17; // edi@34 + //int v17; // edi@34 int v18; // edx@42 int v19; // ecx@42 __int16 v20; // ax@42 @@ -895,7 +895,7 @@ int v31; // edi@57 signed int i; // ebx@57 unsigned int v33; // ecx@58 - int v34; // ebx@64 + //int v34; // ebx@64 int v35; // edi@64 int v36; // eax@64 unsigned __int16 v37; // cx@66 @@ -915,7 +915,7 @@ unsigned __int64 v51; // qax@85 unsigned __int8 v52; // zf@87 unsigned __int8 v53; // sf@87 - unsigned __int8 v54; // of@104 + // unsigned __int8 v54; // of@104 int v55; // eax@107 unsigned int v56; // edi@107 int v57; // ST10_4@107 @@ -929,71 +929,64 @@ int v65; // [sp+20h] [bp-30h]@2 int v66; // [sp+24h] [bp-2Ch]@2 bool v67; // [sp+28h] [bp-28h]@10 - unsigned int v68; // [sp+2Ch] [bp-24h]@10 + //unsigned int v68; // [sp+2Ch] [bp-24h]@10 unsigned int v69; // [sp+30h] [bp-20h]@6 unsigned int v70; // [sp+34h] [bp-1Ch]@10 int v71; // [sp+38h] [bp-18h]@62 - int v72; // [sp+3Ch] [bp-14h]@10 + int uIsAboveFloor; // [sp+3Ch] [bp-14h]@10 + int v72b; int v73; // [sp+40h] [bp-10h]@17 - int v74; // [sp+44h] [bp-Ch]@8 + int uIsFlying; // [sp+44h] [bp-Ch]@8 unsigned int v75; // [sp+48h] [bp-8h]@1 - int v76; // [sp+4Ch] [bp-4h]@10 - - v75 = 0; - if ( (signed int)uNumActors <= 0 ) - return; - do + int uIsOnWater; // [sp+4Ch] [bp-4h]@10 + + for(v75=0;(signed int)v75 < (signed int)uNumActors;++v75) { v0 = &pActors[v75]; v66 = v0->vPosition.x; v65 = v0->vPosition.y; - v1 = v0->uAIState; - if ( v1 == 11 || v1 == 19 || v1 == 17 || !v0->uMovementSpeed ) - goto LABEL_121; - v2 = v0->pMonsterInfo.uID; + uAIState = v0->uAIState; + if ( uAIState == Removed || uAIState == Disabled || uAIState == Summoned || !v0->uMovementSpeed ) + { + continue; + } v3 = 0; v69 = 0; - if ( MonsterStats::BelongsToSupertype(v2, MONSTER_SUPERTYPE_WATER_ELEMENTAL) ) + if ( MonsterStats::BelongsToSupertype(v0->pMonsterInfo.uID, MONSTER_SUPERTYPE_WATER_ELEMENTAL) ) v3 = 1; - v4 = v0->pMonsterInfo.uFlying; v0->uSectorID = 0; - v74 = v4; + uIsFlying = v0->pMonsterInfo.uFlying; if ( !v0->CanAct() ) - v74 = 0; + uIsFlying = 0; v70 = IsTerrainSlopeTooHigh(v0->vPosition.x, v0->vPosition.y); v5 = ODM_GetFloorLevel( v0->vPosition.x, v0->vPosition.y, v0->vPosition.z, v0->uActorHeight, - &v76, + &uIsOnWater, (int *)&v69, v3); v6 = v0->vPosition.z; - v7 = v5; - v68 = v5; - v72 = 0; + uIsAboveFloor = 0; v67 = v69 == 0; if ( v6 > v5 + 1 ) - v72 = 1; - if ( v0->uAIState == 5 && v76 && !v72 ) + uIsAboveFloor = 1; + if ( uAIState == Dead && uIsOnWater && !uIsAboveFloor ) { v0->uAIState = Removed; - goto LABEL_121; + continue; } if ( v0->uCurrentActionAnimation == ANIM_Walking ) { v8 = v0->uMovementSpeed; - v9 = HIDWORD(v0->pActorBuffs[7].uExpireTime) == 0; - v10 = SHIDWORD(v0->pActorBuffs[7].uExpireTime) < 0; v73 = v0->uMovementSpeed; - if ( !v10 && (!(v10 | v9) || LODWORD(v0->pActorBuffs[7].uExpireTime) > 0) ) + if ( (signed __int64)v0->pActorBuffs[7].uExpireTime > 0 ) { v8 = (signed __int64)((double)v73 * 0.5); v73 = (signed __int64)((double)v73 * 0.5); } - v11 = v0->uAIState; - if ( v11 == 7 || v11 == 6 ) + if ( uAIState == Fleeing || uAIState == Pursuing ) { v8 *= 2; v73 = v8; @@ -1003,15 +996,13 @@ if ( v8 > 1000 ) v8 = 1000; v12 = stru_5C6E00->Cos(v0->uYawAngle); - v69 = v12; v13 = v12 * (signed __int64)v8; v73 = v13 >> 16; v0->vVelocity.x = WORD1(v13); v69 = stru_5C6E00->Sin(v0->uYawAngle); v73 = (unsigned __int64)((signed int)v69 * (signed __int64)v8) >> 16; - v9 = v74 == 0; v0->vVelocity.y = v69 * v8 >> 16; - if ( !v9 ) + if ( uIsFlying ) { v14 = stru_5C6E00->Sin(v0->uPitchAngle); v69 = v14; @@ -1019,7 +1010,7 @@ v73 = v15 >> 16; v0->vVelocity.z = WORD1(v15); } - v7 = v68; + //v7 = v68; } else { @@ -1029,9 +1020,8 @@ v0->vVelocity.x = v73; v73 = v0->vVelocity.y; v73 = (unsigned __int64)((signed int)v69 * (signed __int64)v73) >> 16; - v9 = v74 == 0; v0->vVelocity.y = v73; - if ( !v9 ) + if ( uIsFlying ) { v69 = 55000; v73 = v0->vVelocity.z; @@ -1039,20 +1029,20 @@ v0->vVelocity.z = v73; } } - if ( v0->vPosition.z < v7 ) - { - v16 = v74; - v0->vPosition.z = v7; + if ( v0->vPosition.z < v5 ) + { + v16 = uIsFlying; + v0->vPosition.z = v5; v0->vVelocity.z = v16 != 0 ? 0x14 : 0; } - v17 = 0; - if ( !v72 || v74 ) - { - if ( v70 && !v72 && v67 ) + //v17 = 0; + if ( !uIsAboveFloor || uIsFlying ) + { + if ( v70 && !uIsAboveFloor && v67 ) { v18 = v0->vPosition.y; v19 = v0->vPosition.x; - v0->vPosition.z = v7; + v0->vPosition.z = v5; ODM_GetTerrainNormalAt(v19, v18, &v62); v20 = GetGravityStrength(); v21 = v62.y; @@ -1060,22 +1050,22 @@ v23 = v62.y * v0->vVelocity.y; v0->vVelocity.z += -8 * LOWORD(pEventTimer->uTimeElapsed) * v20; v73 = abs(v62.x * v0->vVelocity.x + v22 * v0->vVelocity.z + v23) >> 16; - v72 = v21; + v72b = v21; v0->vVelocity.x += (unsigned int)(v73 * v62.x) >> 16; - v72 = (unsigned __int64)(v73 * (signed __int64)v72) >> 16; - v24 = v72; - v72 = v22; + v72b = (unsigned __int64)(v73 * (signed __int64)v72b) >> 16; + v24 = v72b; + v72b = v22; v0->vVelocity.y += v24; - v72 = (unsigned __int64)(v73 * (signed __int64)v72) >> 16; - v0->vVelocity.z += v72; - v17 = 0; + v72b = (unsigned __int64)(v73 * (signed __int64)v72b) >> 16; + v0->vVelocity.z += v72b; + //v17 = 0; } } else { v0->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); } - if ( pParty->armageddon_timer != v17 && v0->CanAct() ) + if ( pParty->armageddon_timer != 0 && v0->CanAct() ) { v0->vVelocity.x += rand() % 100 - 50; v0->vVelocity.y += rand() % 100 - 50; @@ -1085,14 +1075,13 @@ v0->uYawAngle += v25 % 32 - 16; v0->UpdateAnimation(); } - if ( v0->vVelocity.x * v0->vVelocity.x + v0->vVelocity.y * v0->vVelocity.y < 400 && v70 == v17 ) - { - v0->vVelocity.y = v17; - v0->vVelocity.x = v17; - } - v9 = v0->pMonsterInfo.uFlying == 0; + if ( v0->vVelocity.x * v0->vVelocity.x + v0->vVelocity.y * v0->vVelocity.y < 400 && v70 == 0 ) + { + v0->vVelocity.y = 0; + v0->vVelocity.x = 0; + } stru_721530.field_0 = 1; - if ( v9 ) + if ( !uIsFlying ) v26 = 40; else v26 = v0->uActorRadius; @@ -1101,8 +1090,8 @@ stru_721530.field_8 = v26; stru_721530.prolly_normal_d = v26; stru_721530.field_C = v27; - stru_721530.field_70 = v17; - v69 = v17; + stru_721530.field_70 = 0; + v69 = 0; while ( 1 ) { stru_721530.field_34.x = v0->vPosition.x; @@ -1136,7 +1125,7 @@ v71 = i > 1; if ( stru_721530.field_7C < stru_721530.field_6C ) v70 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16; - v34 = 0; + //v34 = 0; v35 = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; v36 = ODM_GetFloorLevel( stru_721530.normal2.x, @@ -1146,7 +1135,7 @@ (int *)&v63, &v64, 0); - if ( v76 ) + if ( uIsOnWater ) { if ( v35 < v36 + 60 ) { @@ -1156,7 +1145,7 @@ if ( v64 ) v61 = v36 + 30; else - v61 = v68 + 60; + v61 = v5 + 60; sub_42F960_create_object(v0->vPosition.x, v0->vPosition.y, v61); v0->uAIState = Removed; return; @@ -1170,60 +1159,64 @@ v0->vPosition.z = LOWORD(stru_721530.normal2.z) - LOWORD(stru_721530.prolly_normal_d) - 1; break; } - v72 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16; + v72b = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16; v0->vPosition.x += (unsigned int)(stru_721530.field_7C * stru_721530.field_58.x) >> 16; - v72 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16; + v72b = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16; v0->vPosition.y += (unsigned int)(stru_721530.field_7C * stru_721530.field_58.y) >> 16; - v72 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16; + v72b = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16; v38 = stru_721530.uFaceID; v0->vPosition.z += (unsigned int)(stru_721530.field_7C * stru_721530.field_58.z) >> 16; stru_721530.field_70 += stru_721530.field_7C; v39 = v38 >> 3; - switch ( v38 & 7 ) - { - case 3: - if ( pParty->bTurnBasedModeOn != 1 ) - goto LABEL_97; - if ( pTurnEngine->field_4 != 2 && pTurnEngine->field_4 != 3 ) - { - v34 = 0; -LABEL_97: + switch ( PID_TYPE(v38) ) + { + case OBJECT_Actor: + if ( pTurnEngine->field_4 != 2 && pTurnEngine->field_4 != 3 || pParty->bTurnBasedModeOn != 1 ) + { + //if(pParty->bTurnBasedModeOn == 1) + //v34 = 0; if ( v0->pMonsterInfo.uHostilityType ) { - if ( v71 == v34 ) - goto LABEL_99; -LABEL_101: - Actor::AI_StandOrBored(v75, 4, v34, (AIDirection *)v34); - break; + if ( v71 == 0 ) + { + Actor::_402968(v75, v38, 0, (AIDirection *)0); + } + else + { + Actor::AI_StandOrBored(v75, 4, 0, (AIDirection *)0); + } } - if ( v71 != v34 ) - goto LABEL_101; - if ( pActors[v39].pMonsterInfo.uHostilityType ) + else if ( v71 != 0 ) + { + Actor::AI_StandOrBored(v75, 4, 0, (AIDirection *)0); + } + else if ( pActors[v39].pMonsterInfo.uHostilityType == MonsterInfo::Hostility_Friendly ) { -LABEL_99: - Actor::_402968(v75, v38, v34, (AIDirection *)v34); - break; + Actor::_402968(v75, v38, 0, (AIDirection *)0); } -LABEL_103: - Actor::FaceObject(v75, v38, v34, (AIDirection *)v34); - break; + else + { + Actor::FaceObject(v75, v38, 0, (AIDirection *)0); + } } break; - case 4: + case OBJECT_Player: if ( !v0->GetActorsRelation(0) ) { v38 = stru_721530.uFaceID; - goto LABEL_103; + Actor::FaceObject(v75, v38, 0, (AIDirection *)0); + break; } v52 = HIDWORD(pParty->pPartyBuffs[11].uExpireTime) == 0; v53 = SHIDWORD(pParty->pPartyBuffs[11].uExpireTime) < 0; v0->vVelocity.y = 0; v0->vVelocity.x = 0; - if ( !v53 && (!(v53 | v52) || LODWORD(pParty->pPartyBuffs[11].uExpireTime) > 0) ) + //if ( !v53 && (!(v53 | v52) || LODWORD(pParty->pPartyBuffs[11].uExpireTime) > 0) ) + if ( (signed __int64)pParty->pPartyBuffs[11].uExpireTime < 0) pParty->pPartyBuffs[11].Reset(); viewparams->bRedrawGameUI = 1; break; - case 5: + case OBJECT_Decoration: v47 = integer_sqrt(v0->vVelocity.x * v0->vVelocity.x + v0->vVelocity.y * v0->vVelocity.y); v48 = stru_5C6E00->Atan2( v0->vPosition.x - pLevelDecorations[v39].vPosition.x, @@ -1238,7 +1231,7 @@ v70 = v51 >> 16; v0->vVelocity.y = WORD1(v51); break; - case 6: + case OBJECT_BModel: v40 = &pOutdoor->pBModels[v38 >> 9]; v41 = &v40->pFaces[v39 & 0x3F]; if ( !(BYTE3(v41->uAttributes) & 0x20) ) @@ -1258,16 +1251,16 @@ } else { - v72 = abs(v41->pFacePlane.vNormal.y * v0->vVelocity.y + v41->pFacePlane.vNormal.z * v0->vVelocity.z + v72b = abs(v41->pFacePlane.vNormal.y * v0->vVelocity.y + v41->pFacePlane.vNormal.z * v0->vVelocity.z + v41->pFacePlane.vNormal.x * v0->vVelocity.x) >> 16; - if ( stru_721530.field_64 >> 3 > v72 ) - v72 = stru_721530.field_64 >> 3; + if ( stru_721530.field_64 >> 3 > v72b ) + v72b = stru_721530.field_64 >> 3; v73 = v41->pFacePlane.vNormal.x; - v73 = (unsigned __int64)(v72 * (signed __int64)v73) >> 16; + v73 = (unsigned __int64)(v72b * (signed __int64)v73) >> 16; v71 = v41->pFacePlane.vNormal.y; - v71 = (unsigned __int64)(v72 * (signed __int64)v71) >> 16; + v71 = (unsigned __int64)(v72b * (signed __int64)v71) >> 16; v70 = v41->pFacePlane.vNormal.z; - v70 = (unsigned __int64)(v72 * (signed __int64)(signed int)v70) >> 16; + v70 = (unsigned __int64)(v72b * (signed __int64)(signed int)v70) >> 16; v0->vVelocity.x += v73; v0->vVelocity.y += v71; v0->vVelocity.z += v70; @@ -1302,35 +1295,26 @@ v70 = v0->vVelocity.z; v70 = (unsigned __int64)(v71 * (signed __int64)(signed int)v70) >> 16; ++v69; - v54 = v69 < 100; - v10 = (v69 - 100) < 0; + //v54 = v69 < 100; + //v10 = (v69 - 100) < 0; v0->vVelocity.z = v70; - if ( !(v10 ^ v54) ) + if ( v69 >= 100 ) break; v26 = stru_721530.prolly_normal_d; } - v69 = WorldPosToGridCellX(v66); - v55 = WorldPosToGridCellZ(v65); - v56 = v55 - 1; - v57 = v0->vPosition.x; - v71 = v55 - 1; - v68 = WorldPosToGridCellX(v57); - v70 = WorldPosToGridCellZ(v0->vPosition.y) - 1; - v58 = ((unsigned int)~pOutdoor->ActuallyGetSomeOtherTileInfo(v69, v56) >> 1) & 1; - v59 = ((unsigned int)~pOutdoor->ActuallyGetSomeOtherTileInfo(v68, v70) >> 1) & 1; - v60 = 0; - if ( v69 == v68 && v71 == v70 && v58 ) - v60 = 1; - if ( !v67 ) - v60 = 1; - if ( !v60 ) + v58 = ((unsigned int)~pOutdoor->ActuallyGetSomeOtherTileInfo(WorldPosToGridCellX(v66), WorldPosToGridCellZ(v65) - 1) >> 1) & 1; + v59 = ((unsigned int)~pOutdoor->ActuallyGetSomeOtherTileInfo(WorldPosToGridCellX(v0->vPosition.x), WorldPosToGridCellZ(v0->vPosition.y) - 1) >> 1) & 1; + if ( WorldPosToGridCellX(v66) == WorldPosToGridCellX(v0->vPosition.x) + && WorldPosToGridCellZ(v65) == WorldPosToGridCellZ(v0->vPosition.y) + && v58 + || v67 != 0 ) { if ( MonsterStats::BelongsToSupertype(v0->pMonsterInfo.uID, MONSTER_SUPERTYPE_WATER_ELEMENTAL) ) { v58 = v58 == 0; v59 = v59 == 0; } - if ( !v74 && v58 && !v59 ) + if ( !uIsFlying && v58 && !v59 ) { v0->vPosition.x = v66; v0->vPosition.y = v65; @@ -1343,10 +1327,7 @@ } } } -LABEL_121: - ++v75; - } - while ( (signed int)v75 < (signed int)uNumActors ); + } } //----- (0047253E) -------------------------------------------------------- @@ -15112,14 +15093,14 @@ unsigned __int16 v22; // ax@86 //signed int v23; // eax@94 //unsigned int v24; // eax@102 - signed int v25; // edi@102 - SpellBuff *v26; // esi@102 + //signed int v25; // edi@102 + //SpellBuff *v26; // esi@102 unsigned int v27; // ecx@123 unsigned int v28; // eax@123 - unsigned int v29; // eax@127 + //unsigned int v29; // eax@127 AIDirection *v30; // eax@129 unsigned __int16 v31; // ax@132 - unsigned int v32; // esi@142 + //unsigned int v32; // esi@142 int v33; // eax@144 int v34; // eax@147 char v35; // al@150 @@ -15127,57 +15108,58 @@ signed int v37; // eax@154 unsigned __int8 v38; // sf@158 unsigned __int8 v39; // of@158 - signed int v40; // edx@166 - unsigned int v41; // ecx@166 + //signed int v40; // edx@166 + //unsigned int v41; // ecx@166 double v42; // st7@176 double v43; // st6@176 - bool v44; // eax@189 + //bool v44; // eax@189 bool v45; // eax@192 unsigned __int8 v46; // cl@197 double v47; // st7@206 double v48; // st7@207 - char v49; // zf@208 - char v50; // zf@214 - signed int v51; // edx@219 - unsigned int v52; // ecx@219 + //char v49; // zf@208 + //char v50; // zf@214 + //signed int v51; // edx@219 + //unsigned int v52; // ecx@219 __int16 v53; // fps@224 unsigned __int8 v54; // c0@224 unsigned __int8 v55; // c3@224 double v56; // st7@226 AIDirection *v57; // eax@246 double v58; // st7@246 - signed int v59; // [sp-18h] [bp-C8h]@213 - int v60; // [sp-14h] [bp-C4h]@144 - int v61; // [sp-14h] [bp-C4h]@168 - AIDirection *v62; // [sp-14h] [bp-C4h]@213 - signed int v63; // [sp-14h] [bp-C4h]@216 + //signed int v59; // [sp-18h] [bp-C8h]@213 + //int v60; // [sp-14h] [bp-C4h]@144 + //int v61; // [sp-14h] [bp-C4h]@168 + //AIDirection *v62; // [sp-14h] [bp-C4h]@213 + //signed int v63; // [sp-14h] [bp-C4h]@216 unsigned int v64; // [sp-14h] [bp-C4h]@219 unsigned int v65; // [sp-10h] [bp-C0h]@144 char v66; // [sp-10h] [bp-C0h]@147 - AIDirection *v67; // [sp-10h] [bp-C0h]@167 - int v68; // [sp-10h] [bp-C0h]@168 - AIDirection *v69; // [sp-10h] [bp-C0h]@206 + //AIDirection *v67; // [sp-10h] [bp-C0h]@167 + //int v68; // [sp-10h] [bp-C0h]@168 + //AIDirection *v69; // [sp-10h] [bp-C0h]@206 int v70; // [sp-10h] [bp-C0h]@213 - AIDirection *v71; // [sp-10h] [bp-C0h]@216 + //AIDirection *v71; // [sp-10h] [bp-C0h]@216 AIDirection v72; // [sp+0h] [bp-B0h]@246 AIDirection a3; // [sp+1Ch] [bp-94h]@129 AIDirection v74; // [sp+38h] [bp-78h]@246 AIDirection v75; // [sp+54h] [bp-5Ch]@129 - int v76; // [sp+70h] [bp-40h]@83 + int actor_pid_type; // [sp+70h] [bp-40h]@83 signed int a1; // [sp+74h] [bp-3Ch]@129 int v78; // [sp+78h] [bp-38h]@79 AIDirection pDir; // [sp+7Ch] [bp-34h]@129 float v80; // [sp+98h] [bp-18h]@33 int v81; // [sp+9Ch] [bp-14h]@100 - int v82; // [sp+A0h] [bp-10h]@45 + //int v82; // [sp+A0h] [bp-10h]@45 //unsigned int uActorID; // [sp+A4h] [bp-Ch]@32 unsigned int v84; // [sp+A8h] [bp-8h]@11 - signed int a2; // [sp+ACh] [bp-4h]@83 + signed int actor_pid; // [sp+ACh] [bp-4h]@83 + AIState uAIState; if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor) - MakeActorAIList_ODM(); + MakeActorAIList_ODM(); else - MakeActorAIList_BLV(); + MakeActorAIList_BLV(); //v0 = 0; if ( uCurrentlyLoadedLevelType != LEVEL_Indoor && pParty->armageddon_timer > 0 ) @@ -15194,7 +15176,7 @@ v3 = pParty->sRotationX + v1 % 16 - 8; pParty->sRotationX = v3; if ( v3 > 128 || (v2 = -128, v3 < -128) ) - pParty->sRotationX = v2; + pParty->sRotationX = v2; pParty->uFlags |= 2u; pParty->armageddon_timer -= pMiscTimer->uTimeElapsed; v4 = pParty->field_16140 + 50; @@ -15222,7 +15204,7 @@ { Actor::Die(v84); if ( v5->pMonsterInfo.uExp ) - GivePartyExp(pMonsterStats->pInfos[v5->pMonsterInfo.uID].uExp); + GivePartyExp(pMonsterStats->pInfos[v5->pMonsterInfo.uID].uExp); } } } @@ -15236,14 +15218,14 @@ { pPlayer = *v8; if ( !(*v8)->pConditions[14] && !pPlayer->pConditions[15] && !pPlayer->pConditions[16] ) - pPlayer->ReceiveDamage(v4, 5); + pPlayer->ReceiveDamage(v4, 5); ++v8; } while ( (signed int)v8 <= (signed int)&pPlayers[4] ); //v0 = 0; } if (pTurnEngine->field_1C) - --pTurnEngine->field_1C; + --pTurnEngine->field_1C; } } @@ -15266,10 +15248,10 @@ //v49 = *(unsigned int *)LODWORD(v80) == 5; ai_near_actors_targets_pid[i] = OBJECT_Player; if (actor->uAIState == Dead || actor->uAIState == Removed || actor->uAIState == Disabled || actor->uAttributes & 0x0400) - continue; + continue; if (!actor->sCurrentHP && actor->uAIState != Dying) - Actor::Die(i); + Actor::Die(i); //v84 = *(_QWORD *)(LODWORD(v80) + 84) <= 0i64 ? 0 : 1; //v82 = *(_QWORD *)(LODWORD(v80) + 52) <= 0i64 ? 0 : 1; @@ -15292,18 +15274,19 @@ ++v14; } while ( v13 < 22 );*/ - if (!actor->pActorBuffs[ACTOR_BUFF_SHRINK].uExpireTime) + if ( (signed __int64)actor->pActorBuffs[ACTOR_BUFF_SHRINK].uExpireTime < 0 ) //&& SHIDWORD(pActor->pActorBuffs[3].uExpireTime) <= (signed int)v12 && (SHIDWORD(pActor->pActorBuffs[3].uExpireTime) < (signed int)v12 // || LODWORD(pActor->pActorBuffs[3].uExpireTime) <= v12) ) - actor->uActorHeight = pMonsterList->pMonsters[actor->pMonsterInfo.uID - 1].uMonsterHeight; - if (actor->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime) - actor->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; - else - actor->pMonsterInfo.uHostilityType = pMonsterStats->pInfos[actor->pMonsterInfo.uID].uHostilityType; + actor->uActorHeight = pMonsterList->pMonsters[actor->pMonsterInfo.uID - 1].uMonsterHeight; + if ( (signed __int64)actor->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime > 0 ) + actor->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; + // not sure + else // if ( (signed __int64)v21->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime < 0 ) + actor->pMonsterInfo.uHostilityType = pMonsterStats->pInfos[actor->pMonsterInfo.uID].uHostilityType; - if (actor->pActorBuffs[ACTOR_BUFF_PARALYZED].uExpireTime || - actor->pActorBuffs[ACTOR_BUFF_STONED].uExpireTime) - continue; + if ((signed __int64)actor->pActorBuffs[ACTOR_BUFF_PARALYZED].uExpireTime > 0 + || (signed __int64)actor->pActorBuffs[ACTOR_BUFF_STONED].uExpireTime > 0) + continue; //v15 = pMiscTimer->uTimeElapsed; //v16 = (char *)&pActor->pMonsterInfo.uRecoveryTime; @@ -15312,17 +15295,18 @@ if (actor->pMonsterInfo.uRecoveryTime) { if (actor->pMonsterInfo.uRecoveryTime < pMiscTimer->uTimeElapsed) - actor->pMonsterInfo.uRecoveryTime = 0; - else actor->pMonsterInfo.uRecoveryTime -= pMiscTimer->uTimeElapsed; + actor->pMonsterInfo.uRecoveryTime = 0; + else + actor->pMonsterInfo.uRecoveryTime -= pMiscTimer->uTimeElapsed; } actor->uCurrentActionTime += pMiscTimer->uTimeElapsed; if (actor->uCurrentActionTime < actor->uCurrentActionLength) - continue; + continue; //v19 = actor->uAIState; if (actor->uAIState == Dying) - actor->uAIState = Dead; + actor->uAIState = Dead; else { if (actor->uAIState != Summoned) @@ -15358,150 +15342,125 @@ v21 = &pActors[actor_id]; Actor::_SelectTarget(actor_id, &ai_near_actors_targets_pid[actor_id], true); if (v21->pMonsterInfo.uHostilityType && !ai_near_actors_targets_pid[actor_id]) - v21->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; - a2 = ai_near_actors_targets_pid[actor_id]; - v76 = a2 & 7; - if ( (a2 & 7) == OBJECT_Actor) - v80 = 0.5; + v21->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; + actor_pid = ai_near_actors_targets_pid[actor_id]; + actor_pid_type = PID_TYPE(actor_pid); + if ( actor_pid_type == OBJECT_Actor) + v80 = 0.5; else - v80 = 1.0; + v80 = 1.0; v22 = v21->uAIState; if ( v22 == Dying || v22 == Dead || v22 == Removed || v22 == Disabled || v22 == Summoned) { continue; } - else - { - if ( !v21->sCurrentHP ) + if ( !v21->sCurrentHP ) Actor::Die(actor_id); - v25 = 0; - v26 = v21->pActorBuffs; - do + for(int i=0;i<22;i++) + { + if ( i != 10 ) { - if ( v25 != 10 ) - { - v26->_4585CA(pParty->uTimePlayed); - //v24 = 0; - } - ++v25; - ++v26; + v21->pActorBuffs[i]._4585CA(pParty->uTimePlayed); } - while ( v25 < 22 ); - if ( (signed __int64)v21->pActorBuffs[3].uExpireTime > 0 - && SHIDWORD(v21->pActorBuffs[3].uExpireTime) <= 0 - && (SHIDWORD(v21->pActorBuffs[3].uExpireTime) < 0 - || LODWORD(v21->pActorBuffs[3].uExpireTime) <= 0) ) + } + if ( (signed __int64)v21->pActorBuffs[ACTOR_BUFF_SHRINK].uExpireTime < 0 ) v21->uActorHeight = pMonsterList->pMonsters[v21->pMonsterInfo.uID - 1].uMonsterHeight; - if ( (signed __int64)v21->pActorBuffs[1].uExpireTime > 0 ) + if ( (signed __int64)v21->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime > 0 ) + v21->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; + // not sure + else // if ( (signed __int64)v21->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime < 0 ) + v21->pMonsterInfo.uHostilityType = pMonsterStats->pInfos[v21->pMonsterInfo.uID].uHostilityType; + if ( (signed __int64)v21->pActorBuffs[2].uExpireTime < 0 ) + { + v21->uAIState = Removed; + continue; + } + if ( (signed __int64)v21->pActorBuffs[5].uExpireTime > 0 + || (signed __int64)v21->pActorBuffs[6].uExpireTime > 0) + { + continue; + } + v27 = pMiscTimer->uTimeElapsed; + v28 = v21->pMonsterInfo.uRecoveryTime; + v21->uCurrentActionTime += pMiscTimer->uTimeElapsed; + if ( (signed int)v28 > 0 ) + v21->pMonsterInfo.uRecoveryTime = v28 - v27; + if ( v21->pMonsterInfo.uRecoveryTime< 0 ) + v21->pMonsterInfo.uRecoveryTime = 0; + if ( !(v21->uAttributes & 0x8000) ) + v21->uAttributes |= 0x8000; + a1 = 8 * actor_id | OBJECT_Actor; + v30 = Actor::GetDirectionInfo(8 * actor_id | OBJECT_Actor, actor_pid, &a3, 0); + memcpy(&v75, v30, sizeof(v75)); + memcpy(&pDir, &v75, sizeof(pDir)); + uAIState = v21->uAIState; + /*if ( v21->pMonsterInfo.uHostilityType != MonsterInfo::Hostility_Friendly + && (signed int)v21->pMonsterInfo.uRecoveryTime <= 0 + && v80 * 307.2 >= (double)(signed int)v75.uDistance + && (uAIState == Pursuing || uAIState == Standing || uAIState == Tethered || uAIState == Fidgeting) + || ( v21->pMonsterInfo.uMissleAttack1Type && uAIState == Stunned ) ) + { + v32 = actor_id; + }*/ + if ( v21->pMonsterInfo.uHostilityType == MonsterInfo::Hostility_Friendly + || (signed int)v21->pMonsterInfo.uRecoveryTime > 0 + || v80 * 307.2 < (double)(signed int)v75.uDistance + || uAIState != Pursuing && uAIState != Standing && uAIState != Tethered && uAIState != Fidgeting + && !v21->pMonsterInfo.uMissleAttack1Type || uAIState != Stunned ) + //else + { + if ( (signed int)v21->uCurrentActionTime < v21->uCurrentActionLength ) { - v21->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; - if ( SHIDWORD(v21->pActorBuffs[1].uExpireTime) <= 0 ) - { - if ( SHIDWORD(v21->pActorBuffs[1].uExpireTime) < 0 - || LODWORD(v21->pActorBuffs[1].uExpireTime) <= 0 ) - v21->pMonsterInfo.uHostilityType = pMonsterStats->pInfos[v21->pMonsterInfo.uID].uHostilityType; - } - } - if ( (signed __int64)v21->pActorBuffs[2].uExpireTime > 0 - && SHIDWORD(v21->pActorBuffs[2].uExpireTime) <= 0 - && (SHIDWORD(v21->pActorBuffs[2].uExpireTime) < 0 - || LODWORD(v21->pActorBuffs[2].uExpireTime) <= 0) ) - { - v21->uAIState = Removed; continue; } - else if ( v21->pActorBuffs[5].uExpireTime || v21->pActorBuffs[6].uExpireTime ) + else if ( v21->uAIState == AttackingMelee ) { - continue; + v35 = stru_50C198.special_ability_use_check(v21, actor_id); + stru_50FE08.Add( + a1, + 5120, + v21->vPosition.x, + v21->vPosition.y, + v21->vPosition.z + ((signed int)v21->uActorHeight >> 1), + v35, + 1 + ); + } + else if ( v21->uAIState == AttackingRanged1 ) + { + v34 = v21->pMonsterInfo.uMissleAttack1Type; + Actor::_404874(actor_id, &pDir, v34, 0); + } + else if ( v21->uAIState == AttackingRanged2 ) + { + v34 = v21->pMonsterInfo.uMissleAttack2Type; + Actor::_404874(actor_id, &pDir, v34, 1); } else { - v27 = pMiscTimer->uTimeElapsed; - v28 = v21->pMonsterInfo.uRecoveryTime; - v21->uCurrentActionTime += pMiscTimer->uTimeElapsed; - if ( (signed int)v28 > 0 ) - v21->pMonsterInfo.uRecoveryTime = v28 - v27; - if ( v21->pMonsterInfo.uRecoveryTime< 0 ) - v21->pMonsterInfo.uRecoveryTime = 0; - v29 = v21->uAttributes; - if ( !(v29 & 0x8000) ) - v21->uAttributes = v29 | 0x8000; - a1 = 8 * actor_id | OBJECT_Actor; - v30 = Actor::GetDirectionInfo(8 * actor_id | OBJECT_Actor, a2, &a3, 0); - v49 = v21->pMonsterInfo.uHostilityType == 0; - memcpy(&v75, v30, sizeof(v75)); - memcpy(&pDir, &v75, sizeof(pDir)); - if ( !v49 - && (signed int)v21->pMonsterInfo.uRecoveryTime <= 0 - && v80 * 307.2 >= (double)(signed int)v75.uDistance - && ((v31 = v21->uAIState, v31 == 6) || !v31 || v31 == 1 || v31 == 9) - || v21->pMonsterInfo.uMissleAttack1Type && v21->uAIState == 8 ) - { - v32 = actor_id; - } - else + if ( v21->uAIState == AttackingRanged3 ) { - if ( (signed int)v21->uCurrentActionTime < v21->uCurrentActionLength ) - { - continue; - } - else if ( v21->uAIState == 2 ) - { - v32 = actor_id; - v35 = stru_50C198.special_ability_use_check(v21, actor_id); - stru_50FE08.Add( - a1, - 5120, - v21->vPosition.x, - v21->vPosition.y, - v21->vPosition.z + ((signed int)v21->uActorHeight >> 1), - v35, - 1 - ); - } - else if ( v21->uAIState == 3 ) - { - v34 = v21->pMonsterInfo.uMissleAttack1Type; - v66 = 0; - v32 = actor_id; - Actor::_404874(actor_id, &pDir, v34, v66); - } - else if ( v21->uAIState == 12 ) - { - v34 = v21->pMonsterInfo.uMissleAttack2Type; - v66 = 1; - v32 = actor_id; - Actor::_404874(actor_id, &pDir, v34, v66); - } - else - { - v32 = actor_id; - if ( v21->uAIState == 13 ) - { - v65 = v21->pMonsterInfo.uSpellSkillAndMastery1; - v60 = 2; - v33 = v21->pMonsterInfo.uSpell1ID; - Actor::_404AC7(actor_id, &pDir, v33, v60, v65); - } - else if ( v21->uAIState == 18 ) - { - v65 = v21->pMonsterInfo.uSpellSkillAndMastery2; - v60 = 3; - v33 = v21->pMonsterInfo.uSpell2ID; - Actor::_404AC7(actor_id, &pDir, v33, v60, v65); - } - } + v65 = v21->pMonsterInfo.uSpellSkillAndMastery1; + v33 = v21->pMonsterInfo.uSpell1ID; + Actor::_404AC7(actor_id, &pDir, v33, 2, v65); + } + else if ( v21->uAIState == AttackingRanged4 ) + { + v65 = v21->pMonsterInfo.uSpellSkillAndMastery2; + v33 = v21->pMonsterInfo.uSpell2ID; + Actor::_404AC7(actor_id, &pDir, v33, 3, v65); } } } + v36 = v75.uDistance; - if ( !v21->pMonsterInfo.uHostilityType ) + if ( v21->pMonsterInfo.uHostilityType == MonsterInfo::Hostility_Friendly) { - if ( v76 == 3 ) + if ( actor_pid_type == OBJECT_Actor ) { v36 = v75.uDistance; v37 = (unsigned __int8)*(&byte_5C8D1A[89 * (v21->pMonsterInfo.uID - 1) / 3] - + (pActors[a2 >> 3].pMonsterInfo.uID - 1) / 3); + + (pActors[actor_pid >> 3].pMonsterInfo.uID - 1) / 3); } else { @@ -15523,394 +15482,301 @@ v38 = ((v36 - 5120) & 0x80000000u) != 0; } if ( v37 >= 1 && v37 <= 4 && v38 ^ v39 || v37 == 1 ) - v21->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Long; + v21->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Long; } + if ( (signed __int64)v21->pActorBuffs[4].uExpireTime > 0 ) { - v40 = a2; - v41 = v32; if ( (signed int)v36 >= 10240 ) { - v68 = 0; - v61 = 1024; - Actor::_4032B2(v41, v40, v61, v68); - continue; + Actor::_4032B2(actor_id, actor_pid, 1024, 0); } - v67 = &pDir; - Actor::_402968(v41, v40, 0, v67); + else + { + //peasents after attacked + //guard after attacked + Actor::_402968(actor_id, actor_pid, 0, &pDir); + } continue; } - if ( v21->pMonsterInfo.uHostilityType == 4 && a2 ) + + if ( v21->pMonsterInfo.uHostilityType == MonsterInfo::Hostility_Long && actor_pid ) { - if ( !(v21->uAttributes & 0x020000) || v21->pMonsterInfo.uAIType == 1 ) + + if ( v21->pMonsterInfo.uAIType == 1 ) { - if ( v21->pMonsterInfo.uAIType == 1 ) + if ( v21->pMonsterInfo.uMovementType == 5 ) { - v67 = &pDir; - if ( v21->pMonsterInfo.uMovementType != 5 ) - { - v40 = a2; - v41 = v32; - Actor::_402968(v41, v40, 0, v67); - continue; - } - Actor::AI_Stand( - v32, - a2, - (signed __int64)((double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333), - &pDir); + Actor::AI_Stand(actor_id, actor_pid, (signed __int64)((double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333), &pDir); } else { + Actor::_402968(actor_id, actor_pid, 0, &pDir); + continue; + } + + } + if ( !(v21->uAttributes & 0x020000) ) + { + if ( v21->pMonsterInfo.uAIType == 2 || v21->pMonsterInfo.uAIType == 3) + { if ( v21->pMonsterInfo.uAIType == 2 ) - { - v84 = v21->sCurrentHP; - v42 = (double)(signed int)v84; v43 = (double)(signed int)v21->pMonsterInfo.uHP * 0.2; - } - else - { - v84 = v21->sCurrentHP; - v42 = (double)(signed int)v84; + if ( v21->pMonsterInfo.uAIType == 3 ) v43 = (double)(signed int)v21->pMonsterInfo.uHP * 0.1; - } - if ( v21->pMonsterInfo.uAIType == 2 || v21->pMonsterInfo.uAIType == 3 ) + v84 = v21->sCurrentHP; + v42 = (double)(signed int)v84; if ( v43 > v42 && (signed int)v36 < 10240 ) { - v67 = &pDir; - v40 = a2; - v41 = v32; - Actor::_402968(v41, v40, 0, v67); + Actor::_402968(actor_id, actor_pid, 0, &pDir); continue; } } } + v81 = v36 - v21->uActorRadius; - if ( v76 == 3 ) - v81 -= pActors[a2 >> 3].uActorRadius; + if ( actor_pid_type == OBJECT_Actor ) + v81 -= pActors[actor_pid >> 3].uActorRadius; if ( v81 < 0 ) - v81 = 0; + v81 = 0; rand(); - v44 = (signed int)v21->pMonsterInfo.uRecoveryTime <= 0; v21->uAttributes &= 0xFBFFFF; - v82 = 0; - v49 = v21->pMonsterInfo.uMovementType == 5; - v84 = v44; - if ( v49 ) - v82 = 1; if ( v81 < 5120 ) { - v45 = stru_50C198.special_ability_use_check(v21, v32); - if ( !v45 ) + v45 = stru_50C198.special_ability_use_check(v21, actor_id); + if ( v45 == 0 ) { if ( v21->pMonsterInfo.uMissleAttack1Type ) { - if ( v84 ) - { - Actor::_403476(v32, a2, &pDir); - continue; - - } - if ( v82 ) + if ( (signed int)v21->pMonsterInfo.uRecoveryTime <= 0 ) { - v69 = &pDir; - v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; - v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::_403476(actor_id, actor_pid, &pDir); } - v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - //UNDEF(v53); - v69 = &pDir; - if ( !(v54 | v55) ) + else if ( v21->pMonsterInfo.uMovementType == 5 ) { - v51 = a2; + v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); } - Actor::_402AD7(v32, a2, v32, (signed __int64)v47, v69); - continue; - } - v56 = v80 * 307.2; - if ( (double)v81 >= v56 ) - { - if ( v81 >= 1024 ) + else { - if ( v82 ) + v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; + if ( !(v54 | v55) ) { - v69 = &pDir; - v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); continue; } - v71 = &pDir; - v63 = 0; - - Actor::_402686(v32, a2, v63, v71); - continue; - } - if ( v82 ) - { - v69 = &pDir; - v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; - v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::_402AD7(actor_id, actor_pid, actor_id, (signed __int64)v47, &pDir); } - v70 = (signed __int64)v56; - v62 = &pDir; - v59 = 0; - Actor::_40281C(v32, a2, v59, v62, v70); - continue; } - v49 = v84 == 0; - v69 = &pDir; - if ( v49 ) + else { - v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; - v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + v56 = v80 * 307.2; + if ( (double)v81 >= v56 ) + { + if ( v81 >= 1024 ) + { + if ( v21->pMonsterInfo.uMovementType == 5 ) + { + v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; + v64 = (signed __int64)v47; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); + } + else + { + //monsters + Actor::_402686(actor_id, actor_pid, 0, &pDir); + } + } + else if ( v21->pMonsterInfo.uMovementType == 5 ) + { + v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; + v64 = (signed __int64)v47; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); + } + else + { + v70 = (signed __int64)v56; + //monsters + //guard after player runs away + // follow player + Actor::_40281C(actor_id, actor_pid, 0, &pDir, v70); + } + } + else if ( (signed int)v21->pMonsterInfo.uRecoveryTime > 0 ) + { + v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; + v64 = (signed __int64)v47; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); + } + else + { + //monsters + Actor::_403C6C(actor_id, actor_pid, &pDir); + } } - Actor::_403C6C(v32, a2, &pDir); continue; } - if ( v45 != 1 ) + else if ( v45 == 2 || v45 == 3 ) { - if ( v45 > 1 && v45 <= 3 ) + if ( v45 == 2 ) + v46 = v21->pMonsterInfo.uSpell1ID; + else + v46 = v21->pMonsterInfo.uSpell2ID; + if ( v46 ) { - if ( v45 == 2 ) - v46 = v21->pMonsterInfo.uSpell1ID; - else - v46 = v21->pMonsterInfo.uSpell2ID; - if ( v46 ) + if ( (signed int)v21->pMonsterInfo.uRecoveryTime <= 0 ) { - if ( v84 ) - { - if ( v45 == 2 ) - Actor::_403854(v32, a2, &pDir); - else - Actor::_403A60(v32, a2, &pDir); - continue; - } - if ( v80 * 307.2 > (double)v81 || v82 ) - { - v69 = &pDir; - v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; - v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; - - } - v69 = &pDir; + if ( v45 == 2 ) + Actor::_403854(actor_id, actor_pid, &pDir); + else + Actor::_403A60(actor_id, actor_pid, &pDir); + } + else if ( v80 * 307.2 > (double)v81 || v21->pMonsterInfo.uMovementType == 5 ) + { v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - Actor::_402AD7(v32, a2, v32, (signed __int64)v47, v69); - continue; + v64 = (signed __int64)v47; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); } + else + { + v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; + Actor::_402AD7(actor_id, actor_pid, actor_id, (signed __int64)v47, &pDir); + } + } + else + { v48 = v80 * 307.2; if ( (double)v81 >= v48 ) { if ( v81 >= 1024 ) { - v50 = v82 == 0; - if ( !v50 ) + if ( v21->pMonsterInfo.uMovementType == 5 ) { - v69 = &pDir; v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); } - v71 = &pDir; - v63 = 256; - Actor::_402686(v32, a2, v63, v71); - continue; - + else + { + Actor::_402686(actor_id, actor_pid, 256, &pDir); + } } - if ( v82 ) + else if ( v21->pMonsterInfo.uMovementType == 5 ) { - v69 = &pDir; v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); } - v70 = (signed __int64)v48; - v62 = &pDir; - v59 = 0; - Actor::_40281C(v32, a2, v59, v62, v70); - continue; + else + { + v70 = (signed __int64)v48; + Actor::_40281C(actor_id, actor_pid, 0, &pDir, v70); + } } - v49 = v84 == 0; - v69 = &pDir; - if ( v49 ) + else if ( (signed int)v21->pMonsterInfo.uRecoveryTime > 0 ) { v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); } - Actor::_403C6C(v32, a2, &pDir); - continue; + else + { + Actor::_403C6C(actor_id, actor_pid, &pDir); + } } + continue; } } } - if ( v21->pMonsterInfo.uHostilityType != 4 || !a2 || v81 >= 5120 || v45 != 1 ) + + if ( v21->pMonsterInfo.uHostilityType != MonsterInfo::Hostility_Long || !actor_pid || v81 >= 5120 || v45 != 1 ) { if ( !v21->pMonsterInfo.uMovementType ) { - v68 = 0; - v61 = 1024; - v41 = v32; - v40 = 4; - Actor::_4032B2(v41, v40, v61, v68); - continue; - + Actor::_4032B2(actor_id, 4, 1024, 0); } - if ( v21->pMonsterInfo.uMovementType == 1 ) + else if ( v21->pMonsterInfo.uMovementType == 1 ) { - v68 = 0; - v61 = 2560; - v41 = v32; - v40 = 4; - Actor::_4032B2(v41, v40, v61, v68); - continue; + Actor::_4032B2(actor_id, 4, 2560, 0); } - if ( v21->pMonsterInfo.uMovementType == 2 ) + else if ( v21->pMonsterInfo.uMovementType == 2 ) { - v68 = 0; - v61 = 5120; - v41 = v32; - v40 = 4; - Actor::_4032B2(v41, v40, v61, v68); - continue; + Actor::_4032B2(actor_id, 4, 5120, 0); } - if ( v21->pMonsterInfo.uMovementType == 4 ) + else if ( v21->pMonsterInfo.uMovementType == 4 ) { - v68 = 0; - v61 = 10240; - v41 = v32; - v40 = 4; - Actor::_4032B2(v41, v40, v61, v68); - continue; + Actor::_4032B2(actor_id, 4, 10240, 0); } - if ( v21->pMonsterInfo.uMovementType == 5 ) + else if ( v21->pMonsterInfo.uMovementType == 5 ) { v57 = Actor::GetDirectionInfo(a1, 4u, &v72, 0); v58 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; memcpy(&v74, v57, sizeof(v74)); memcpy(&pDir, &v74, sizeof(pDir)); - v69 = &pDir; - v52 = actor_id; v64 = (signed __int64)v58; - v51 = 4; - Actor::AI_Stand(v52, v51, v64, v69); - continue; - } - continue; - + Actor::AI_Stand(actor_id, 4, v64, &pDir); + } } - if ( !v21->pMonsterInfo.uMissleAttack2Type ) + else if ( !v21->pMonsterInfo.uMissleAttack2Type ) { v56 = v80 * 307.2; if ( (double)v81 >= v56 ) { if ( v81 >= 1024 ) { - v50 = v82 == 0; - if ( !v50 ) + if ( v21->pMonsterInfo.uMovementType == 5 ) { - v69 = &pDir; v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); } - v71 = &pDir; - v63 = 256; - Actor::_402686(v32, a2, v63, v71); - continue; + else + { + Actor::_402686(actor_id, actor_pid, 256, &pDir); + } } - if ( v82 ) + else if ( v21->pMonsterInfo.uMovementType == 5 ) { - v69 = &pDir; v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); } - v70 = (signed __int64)v56; - v62 = &pDir; - v59 = 0; - Actor::_40281C(v32, a2, v59, v62, v70); - continue; - + else + { + v70 = (signed __int64)v56; + Actor::_40281C(actor_id, actor_pid, 0, &pDir, v70); + } } - v49 = v84 == 0; - v69 = &pDir; - if ( v49 ) + else if ( (signed int)v21->pMonsterInfo.uRecoveryTime > 0 ) { v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; - v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; - } - Actor::_403C6C(v32, a2, &pDir); - continue; - } - if ( !v84 ) - { - if ( v82 ) - { - v69 = &pDir; - v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); + } + else + { + Actor::_403C6C(actor_id, actor_pid, &pDir); } + } + else if ( (signed int)v21->pMonsterInfo.uRecoveryTime > 0 ) + { v47 = (double)(signed int)v21->pMonsterInfo.uRecoveryTime * 2.133333333333333; - //UNDEF(v53); - v69 = &pDir; - if ( !(v54 | v55) ) + if ( !(v54 | v55) || v21->pMonsterInfo.uMovementType == 5 ) { - v51 = a2; v64 = (signed __int64)v47; - v52 = v32; - Actor::AI_Stand(v52, v51, v64, v69); - continue; + Actor::AI_Stand(actor_id, actor_pid, v64, &pDir); + } + else + { + Actor::_402AD7(actor_id, actor_pid, actor_id, (signed __int64)v47, &pDir); } - Actor::_402AD7(v32, a2, v32, (signed __int64)v47, v69); - continue; } - Actor::_40368B(v32, a2, &pDir); + else + { + Actor::_40368B(actor_id, actor_pid, &pDir); + } } } }