# HG changeset patch # User Grumpy7 # Date 1381996857 -7200 # Node ID 7efa09ddb8b4e422070e5bceb2cb20ede1c74894 # Parent 6ffa3228eaf7dd62924f6f5b14c7ce5a8a2c194f Actor::AI_SpellAttack1 cleaned up diff -r 6ffa3228eaf7 -r 7efa09ddb8b4 Actor.cpp --- a/Actor.cpp Thu Oct 17 09:50:25 2013 +0200 +++ b/Actor.cpp Thu Oct 17 10:00:57 2013 +0200 @@ -1504,10 +1504,8 @@ int16_t v5; // edi@3 signed int v6; // eax@4 Vec3_int_ v7; // ST04_12@6 - //unsigned int result; // eax@7 AIDirection *v9; // eax@8 __int16 v13; // ax@10 - signed int v16; // ecx@17 AIDirection a3; // [sp+Ch] [bp-48h]@9 AIDirection v18; // [sp+28h] [bp-2Ch]@9 int v19; // [sp+44h] [bp-10h]@6 @@ -1564,11 +1562,10 @@ v3->pMonsterInfo.uRecoveryTime = pDira; else v3->pMonsterInfo.uRecoveryTime = v3->uCurrentActionLength + (int)(flt_6BE3A8_debug_recmod2 * pDira * 2.133333333333333); - v16 = v3->pMonsterInfo.uSpell2ID; v3->vVelocity.z = 0; v3->vVelocity.y = 0; v3->vVelocity.x = 0; - if ( _42FB5C_check_spell(v16) ) + if ( _42FB5C_check_spell(v3->pMonsterInfo.uSpell2ID) ) { v3->uCurrentActionLength = 64; v3->uCurrentActionTime = 0; @@ -1587,97 +1584,75 @@ void Actor::AI_SpellAttack1(unsigned int uActorID, signed int sTargetPid, AIDirection *pDir) { Actor *v3; // ebx@1 - AIDirection *v4; // esi@3 - AIDirection *v5; // edi@3 + int16_t v4; // esi@3 + int16_t v5; // edi@3 signed int v6; // eax@4 Vec3_int_ v7; // ST04_12@6 - //unsigned int result; // eax@7 AIDirection *v9; // eax@8 - unsigned int v10; // esi@8 - AIDirection *v11; // esi@9 - SpriteFrame *v12; // ecx@10 __int16 v13; // ax@10 - unsigned int v14; // ecx@10 - unsigned int v15; // eax@10 signed int v16; // ecx@17 AIDirection a3; // [sp+Ch] [bp-48h]@9 AIDirection v18; // [sp+28h] [bp-2Ch]@9 int v19; // [sp+44h] [bp-10h]@6 - //signed int a2; // [sp+48h] [bp-Ch]@1 int v21; // [sp+4Ch] [bp-8h]@3 - unsigned int v22; // [sp+50h] [bp-4h]@1 unsigned int pDira; // [sp+5Ch] [bp+8h]@10 - v22 = uActorID; v3 = &pActors[uActorID]; - //a2 = edx0; if ( PID_TYPE(sTargetPid) == OBJECT_Actor) { v6 = PID_ID(sTargetPid); - v4 = (AIDirection *)pActors[v6].vPosition.x; - v5 = (AIDirection *)pActors[v6].vPosition.y; - v21 = (signed __int64)((double)pActors[v6].uActorHeight * 0.75 + (double)pActors[v6].vPosition.z); + v4 = pActors[v6].vPosition.x; + v5 = pActors[v6].vPosition.y; + v21 = (int)(pActors[v6].uActorHeight * 0.75 + pActors[v6].vPosition.z); + } + else if ( PID_TYPE(sTargetPid) == OBJECT_Player) + { + v4 = pParty->vPosition.x; + v5 = pParty->vPosition.y; + v21 = pParty->vPosition.z + pParty->sEyelevel; } else { - if ( PID_TYPE(sTargetPid) == OBJECT_Player) - { - v4 = (AIDirection *)pParty->vPosition.x; - v5 = (AIDirection *)pParty->vPosition.y; - v21 = pParty->vPosition.z + pParty->sEyelevel; - } - else - { - v4 = pDir; - v5 = pDir; - } + Error("Should not get here"); + return; } v19 = v3->uActorHeight; v7.z = v3->vPosition.z - (unsigned int)(signed __int64)((double)v19 * -0.75); v7.y = v3->vPosition.y; v7.x = v3->vPosition.x; - if ( sub_407A1C((int)v4, (int)v5, v21, v7) ) + if ( sub_407A1C(v4, v5, v21, v7) ) { - v9 = pDir; - v10 = 0; - if ( !pDir ) + if ( pDir == nullptr ) { - v11 = Actor::GetDirectionInfo(PID(OBJECT_Actor,v22), sTargetPid, &a3, 0); - v9 = &v18; - memcpy(&v18, v11, sizeof(v18)); - v10 = 0; + v9 = Actor::GetDirectionInfo(PID(OBJECT_Actor,uActorID), sTargetPid, &a3, 0); } - v12 = pSpriteFrameTable->pSpriteSFrames; + else + { + v9 = pDir; + } v3->uYawAngle = LOWORD(v9->uYawAngle); - v13 = v12[v3->pSpriteIDs[ANIM_AtkRanged]].uAnimLength; - v14 = v22; + v13 = pSpriteFrameTable->pSpriteSFrames[v3->pSpriteIDs[ANIM_AtkRanged]].uAnimLength; v3->uCurrentActionLength = 8 * v13; - v3->uCurrentActionTime = v10; + v3->uCurrentActionTime = 0; v3->uAIState = AttackingRanged3; - Actor::PlaySound(v14, 0); - v15 = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime; + Actor::PlaySound(uActorID, 0); pDira = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime; - if ( SHIDWORD(v3->pActorBuffs[7].uExpireTime) >= (signed int)v10 - && (SHIDWORD(v3->pActorBuffs[7].uExpireTime) > (signed int)v10 || LODWORD(v3->pActorBuffs[7].uExpireTime) > v10) ) + if (v3->pActorBuffs[7].uExpireTime > 0) { - v15 *= 2; - pDira = v15; + pDira *= 2; } if ( pParty->bTurnBasedModeOn == 1 ) - v3->pMonsterInfo.uRecoveryTime = v15; + v3->pMonsterInfo.uRecoveryTime = pDira; else - v3->pMonsterInfo.uRecoveryTime = v3->uCurrentActionLength - - (unsigned int)(signed __int64)(flt_6BE3A8_debug_recmod2 - * (double)(signed int)pDira - * -2.133333333333333); + v3->pMonsterInfo.uRecoveryTime = v3->uCurrentActionLength + (int)(flt_6BE3A8_debug_recmod2 * pDira * 2.133333333333333); v16 = v3->pMonsterInfo.uSpell1ID; - v3->vVelocity.z = v10; - v3->vVelocity.y = v10; - v3->vVelocity.x = v10; + v3->vVelocity.z = 0; + v3->vVelocity.y = 0; + v3->vVelocity.x = 0; if ( _42FB5C_check_spell(v16) ) { v3->uCurrentActionLength = 64; - v3->uCurrentActionTime = v10; + v3->uCurrentActionTime = 0; v3->uAIState = Fidgeting; v3->UpdateAnimation(); v3->uAIState = AttackingRanged3; @@ -1686,7 +1661,7 @@ v3->UpdateAnimation(); } else - Actor::AI_Pursue1(v22, sTargetPid, v22, 64, pDir); + Actor::AI_Pursue1(uActorID, sTargetPid, uActorID, 64, pDir); } //----- (0040368B) --------------------------------------------------------