Mercurial > mm7
diff mm7_5.cpp @ 828:0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
author | Nomad |
---|---|
date | Wed, 27 Mar 2013 00:27:38 +0200 |
parents | fe4c8b113548 |
children | dfd683c4f538 |
line wrap: on
line diff
--- a/mm7_5.cpp Tue Mar 26 20:06:51 2013 +0200 +++ b/mm7_5.cpp Wed Mar 27 00:27:38 2013 +0200 @@ -5680,44 +5680,32 @@ //----- (0043A97E) -------------------------------------------------------- void __fastcall sub_43A97E(unsigned int uLayingItemID, signed int a2) { - unsigned int v2; // esi@1 - unsigned int v3; // ebx@1 - int v4; // edi@1 - int v5; // edx@1 - unsigned int v6; // [sp+10h] [bp-4h]@1 - - v6 = uLayingItemID; - v2 = uLayingItemID; - v3 = a2 >> 3; - v4 = pSpriteObjects[uLayingItemID].spell_caster_pid & 7; - v5 = (a2 & 7) - 3; - if ( v5 ) - { - if ( v5 == 1 ) - { - layingitem_vel_50FDFC.x = pSpriteObjects[v2].vVelocity.x; - layingitem_vel_50FDFC.y = pSpriteObjects[v2].vVelocity.y; - layingitem_vel_50FDFC.z = pSpriteObjects[v2].vVelocity.z; - Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z); - DamagePlayerFromMonster(8 * v6 | 2, pSpriteObjects[v2].field_61, &layingitem_vel_50FDFC, 0xFFFFFFFFu); - } - } - else - { - layingitem_vel_50FDFC.x = pSpriteObjects[v2].vVelocity.x; - layingitem_vel_50FDFC.y = pSpriteObjects[v2].vVelocity.y; - layingitem_vel_50FDFC.z = pSpriteObjects[v2].vVelocity.z; + if ( PID_TYPE(a2) == OBJECT_BLVDoor) + { + layingitem_vel_50FDFC.x = pSpriteObjects[uLayingItemID].vVelocity.x; + layingitem_vel_50FDFC.y = pSpriteObjects[uLayingItemID].vVelocity.y; + layingitem_vel_50FDFC.z = pSpriteObjects[uLayingItemID].vVelocity.z; + Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z); - switch ( v4 ) + DamagePlayerFromMonster(PID(OBJECT_Item, uLayingItemID), pSpriteObjects[uLayingItemID].field_61, &layingitem_vel_50FDFC, 0xFFFFFFFFu); + } + else if (PID_TYPE(a2) == OBJECT_Actor) + { + layingitem_vel_50FDFC.x = pSpriteObjects[uLayingItemID].vVelocity.x; + layingitem_vel_50FDFC.y = pSpriteObjects[uLayingItemID].vVelocity.y; + layingitem_vel_50FDFC.z = pSpriteObjects[uLayingItemID].vVelocity.z; + + Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z); + switch (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid)) { case OBJECT_Actor: - sub_43B1B0(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC, pSpriteObjects[v2].field_61); + sub_43B1B0(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC, pSpriteObjects[uLayingItemID].field_61); break; case OBJECT_Player: - DamageMonsterFromParty(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC); + DamageMonsterFromParty(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC); break; case OBJECT_Item: - sub_43B057(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC); + sub_43B057(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC); break; } } @@ -6894,8 +6882,8 @@ _404544(); v2 = v1->pQueue; v3 = 0; - if ( (v1->pQueue[0].uPackedID & 7) == OBJECT_Player) - uActiveCharacter = (v1->pQueue[0].uPackedID >> 3) + 1; + if (PID_TYPE(v1->pQueue[0].uPackedID) == OBJECT_Player) + uActiveCharacter = PID_ID(v1->pQueue[0].uPackedID) + 1; else uActiveCharacter = 0; viewparams->bRedrawGameUI = 1; @@ -6913,9 +6901,9 @@ goto LABEL_27; do { - if ( (v2->uPackedID & 7) != OBJECT_Player) - { - v5 = &pActors[v2->uPackedID >> 3]; + if (PID_TYPE(v2->uPackedID) != OBJECT_Player) + { + v5 = &pActors[PID_ID(v2->uPackedID)]; LOWORD(v6) = v5->uAIState; if ( (short)v6 == 4 || (short)v6 == 8 @@ -6971,9 +6959,9 @@ v9 = v1->pQueue; do { - if ( (v9->uPackedID & 7) != OBJECT_Player) - { - v10 = v9->uPackedID >> 3; + if (PID_TYPE(v9->uPackedID) != OBJECT_Player) + { + v10 = PID_ID(v9->uPackedID); v11 = pActors[v10].uAIState; if ( v11 != 5 ) { @@ -7023,7 +7011,7 @@ v4 = v1->pQueue[0].field_4; if ( v4 ) { - if ( (v1->pQueue[0].uPackedID & 7) == OBJECT_Player) + if (PID_TYPE(v1->pQueue[0].uPackedID) == OBJECT_Player) { v5 = v1->uActorQueueSize; while ( 1 ) @@ -7122,8 +7110,8 @@ } v2->pQueue[a2].field_4 = v6; v2->_404544(); - if ( (v2->pQueue[0].uPackedID & 7) == OBJECT_Player) - uActiveCharacter = (v2->pQueue[0].uPackedID >> 3) + 1; + if (PID_TYPE(v2->pQueue[0].uPackedID) == OBJECT_Player) + uActiveCharacter = PID_ID(v2->pQueue[0].uPackedID) + 1; else uActiveCharacter = 0; result = (int)&v2->pQueue[0].field_4; @@ -7201,7 +7189,7 @@ v1 = this; LOWORD(v2) = _404544(); if ( v1->pQueue[0].field_4 <= 0 - || ((_4063A1(), v2 = v1->pQueue[0].uPackedID, (v1->pQueue[0].uPackedID & 7) != OBJECT_Player) ? (uActiveCharacter = 0) : (v2 = (v2 >> 3) + 1, uActiveCharacter = v2), + || ((_4063A1(), v2 = v1->pQueue[0].uPackedID, PID_TYPE(v1->pQueue[0].uPackedID) != OBJECT_Player) ? (uActiveCharacter = 0) : (v2 = (v2 >> 3) + 1, uActiveCharacter = v2), viewparams->bRedrawGameUI = 1, v1->pQueue[0].field_4 <= 0) ) { @@ -7269,13 +7257,13 @@ v1 = (TurnBased_QueueElem *)((char *)this + 16 * (a2 + 2)); v28 = v1; v3 = v1->uPackedID; - if ( (v1->uPackedID & 7) != OBJECT_Player) - { - v4 = v3 >> 3; // turn based only stuff - a2a = ai_near_actors_targets_pid[v3 >> 3]; - memcpy(&a3, Actor::GetDirectionInfo(v1->uPackedID, ai_near_actors_targets_pid[v3 >> 3], &a3, 0), sizeof(a3)); + if (PID_TYPE(v1->uPackedID) != OBJECT_Player) + { + v4 = PID_ID(v3); + a2a = ai_near_actors_targets_pid[PID_ID(v3)]; + memcpy(&a3, Actor::GetDirectionInfo(v1->uPackedID, ai_near_actors_targets_pid[PID_ID(v3)], &a3, 0), sizeof(a3)); memcpy(&a4, &a3, sizeof(a4)); - v5 = &pActors[v3 >> 3]; + v5 = &pActors[PID_ID(v3 >> 3)]; LOWORD(v3) = v5->uAIState; if ( (short)v3 != Dead ) { @@ -7433,11 +7421,8 @@ v9 = 0; v20 = 0; } - if ( (v22 & 7) == OBJECT_Actor) - v10 = (unsigned __int8)*(&byte_5C8D1A[89 - * (pMonsterStats->pInfos[pActors[v22 >> 3].pMonsterInfo.uID].uID - 1) - / 3] - + (v5->pMonsterInfo.uID - 1) / 3); + if (PID_TYPE(v22) == OBJECT_Actor) + v10 = (unsigned __int8)*(&byte_5C8D1A[89 * (pMonsterStats->pInfos[pActors[v22 >> 3].pMonsterInfo.uID].uID - 1) / 3] + (v5->pMonsterInfo.uID - 1) / 3); else v10 = 4; if ( v10 == 1 ) @@ -7566,9 +7551,9 @@ while ( 1 ) { v5 = v10->uPackedID; - if ( (v10->uPackedID & 7) == OBJECT_Actor) - { - v8 = ai_near_actors_targets_pid[v5 >> 3]; + if (PID_TYPE(v10->uPackedID) == OBJECT_Actor) + { + v8 = ai_near_actors_targets_pid[PID_ID(v5)]; memcpy(&v7, Actor::GetDirectionInfo(v5, v8, &a3, v2), sizeof(v7)); if ( !v1->_406D10(a2) ) Actor::AI_Stand(v10->uPackedID >> 3, v8, 0x20u, &v7); @@ -7605,9 +7590,9 @@ v2 = this->pQueue; do { - if ( (v2->uPackedID & 7) == OBJECT_Actor) - { - v3 = v2->uPackedID >> 3; + if (PID_TYPE(v2->uPackedID) == OBJECT_Actor) + { + v3 = PID_ID(v2->uPackedID); v8 = v3; if ( pActors[v3].CanAct() ) { @@ -7660,7 +7645,7 @@ { v4 = v14->uPackedID; a1 = v14->uPackedID; - if ( (a1 & 7) != OBJECT_Player) + if (PID_TYPE(a1) != OBJECT_Player) { v5 = v4 >> 3; v12 = v5; @@ -7743,10 +7728,11 @@ unsigned int uActorID; // [sp+50h] [bp-4h]@2 unsigned int a2a; // [sp+5Ch] [bp+8h]@7 + __debugbreak(); v2 = *(&this->field_0 + 4 * (a2 + 2)); - if ( (v2 & 7) == OBJECT_Player) + if (PID_TYPE(v2) == OBJECT_Player) return 0; - v3 = v2 >> 3; + v3 = PID_ID(v2); uActorID = v3; v4 = &pActors[v3]; v5 = v4->uAIState; @@ -7938,9 +7924,9 @@ v14 = this->pQueue; do { - if ( (v3->uPackedID & 7) != OBJECT_Player) - { - v4 = v3->uPackedID >> 3; + if (PID_TYPE(v3->uPackedID) != OBJECT_Player) + { + v4 = PID_ID(v3->uPackedID); uActorID = v4; v5 = &pActors[v4]; v6 = v5->uAIState; @@ -11620,9 +11606,9 @@ else v5 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]]; v6 = (unsigned __int16)v5; - if ( (v5 & 7) == OBJECT_Actor + if (PID_TYPE(v5) == OBJECT_Actor && uActiveCharacter - && v5 < 33554432 + && v5 < 0x2000000 && pPlayers[uActiveCharacter]->CanAct() && pPlayers[uActiveCharacter]->CanSteal() ) { @@ -11633,7 +11619,7 @@ *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0; ++pMessageQueue_50CBD0->uNumMessages; }*/ - pMessageQueue_50CBD0->AddMessage(UIMSG_1B, v6 >> 3, 0); + pMessageQueue_50CBD0->AddMessage(UIMSG_1B, PID_ID(v6), 0); if ( pParty->bTurnBasedModeOn == 1 ) {