Mercurial > mm7
changeset 1456:5c95f2246c2a
TE mostly working
author | Gloval |
---|---|
date | Wed, 14 Aug 2013 00:40:23 +0400 |
parents | 8ff3c675a726 |
children | 9dc33590f93e |
files | Actor.cpp Actor.h Monsters.cpp Monsters.h TurnEngine.cpp TurnEngine.h mm7_2.cpp |
diffstat | 7 files changed, 75 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/Actor.cpp Wed Aug 07 08:55:34 2013 +0400 +++ b/Actor.cpp Wed Aug 14 00:40:23 2013 +0400 @@ -1955,7 +1955,7 @@ v3 = &pActors[uActorID]; //a2 = edx0; - v4 = v3->pMonsterInfo.uMovementType == 5; + v4 = v3->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY; v24 = uActorID; if ( v4 && v3->pMonsterInfo.uAIType == 1 ) { @@ -2736,8 +2736,8 @@ } //----- (004032B2) -------------------------------------------------------- -void Actor::AI_4032B2(unsigned int a1, unsigned int a2, int a3, int uActionLength) -{ +void Actor::AI_RandomMove( unsigned int uActor_id, unsigned int uTarget_id, int radius, int uActionLength ) + { unsigned int v4; // edi@1 Actor *v5; // esi@1 int v6; // ebx@1 @@ -2757,10 +2757,10 @@ //v14 never filled, maybe it is passed to function but optimized away as local variable - uActorID = a1; - v4 = a1; - v5 = &pActors[a1]; - v16 = a2; + uActorID = uActor_id; + v4 = uActor_id; + v5 = &pActors[uActor_id]; + v16 = uTarget_id; v6 = v5->vInitialPosition.x - v5->vPosition.x; v7 = v5->vInitialPosition.x - v5->vPosition.x; y = v5->vInitialPosition.y - v5->vPosition.y; @@ -2779,13 +2779,11 @@ } if ( pActors[v4].pMonsterInfo.uMovementType == 3 && v19 < 128 ) { - v13 = &v14; - v12 = 256; - Actor::AI_Stand(uActorID, v16, v12, v13); + Actor::AI_Stand(uActorID, uTarget_id, 256, &v14); return; } v15 = (rand() & 0xF) << 12; - v19 += (unsigned __int64)(v15 * (signed __int64)a3) >> 16; + v19 += (unsigned __int64)(v15 * (signed __int64)radius) >> 16; v9 = (stru_5C6E00->uIntegerDoublePi - 1) & stru_5C6E00->Atan2(v6, y); if ( rand() % 100 < 25 ) { @@ -2793,17 +2791,14 @@ return; } v10 = v9 + rand() % 256 - 128; - if ( abs(v10 - v5->uYawAngle) > 256 && !(BYTE2(v5->uAttributes) & 0x20) ) + if ( abs(v10 - v5->uYawAngle) > 256 && !(v5->uAttributes & 0x200000) ) { - v13 = &v14; - v12 = 256; - Actor::AI_Stand(uActorID, v16, v12, v13); + Actor::AI_Stand(uActorID, uTarget_id, 256, &v14); return; } - v11 = v5->uMovementSpeed; v5->uYawAngle = v10; - if ( v11 ) - v5->uCurrentActionLength = 32 * v19 / v11; + if ( v5->uMovementSpeed) + v5->uCurrentActionLength = 32 * v19 / v5->uMovementSpeed; else v5->uCurrentActionLength = 0; v5->uCurrentActionTime = 0; @@ -2858,7 +2853,7 @@ v10 = v5->vPos.z; v4->vInitialPosition.z = v10; LOBYTE(v5) = v5->uAction; - v4->pMonsterInfo.uMovementType = (unsigned __int8)v5; + v4->pMonsterInfo.uMovementType = MONSTER_MOVEMENT_TYPE_STAIONARY; if ( a3 == 1 ) { v4->vPosition.x = v4->vInitialPosition.x; @@ -4417,7 +4412,7 @@ { if ( (signed int)v36 >= 10240 ) { - Actor::AI_4032B2(actor_id, target_pid, 1024, 0); + Actor::AI_RandomMove(actor_id, target_pid, 1024, 0); } else { @@ -4433,7 +4428,7 @@ if ( pActor->pMonsterInfo.uAIType == 1 ) { - if ( pActor->pMonsterInfo.uMovementType == 5 ) + if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { Actor::AI_Stand(actor_id, target_pid, (signed __int64)((double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333), &pDir); } @@ -4480,7 +4475,7 @@ { Actor::AI_MissileAttack1(actor_id, target_pid, &pDir); } - else if ( pActor->pMonsterInfo.uMovementType == 5 ) + else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4506,7 +4501,7 @@ { if ( v81 >= 1024 ) { - if ( pActor->pMonsterInfo.uMovementType == 5 ) + if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4518,7 +4513,7 @@ Actor::AI_Pursue3(actor_id, target_pid, 0, &pDir); } } - else if ( pActor->pMonsterInfo.uMovementType == 5 ) + else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4562,7 +4557,7 @@ else Actor::AI_SpellAttack2(actor_id, target_pid, &pDir); } - else if ( v80 * 307.2 > (double)v81 || pActor->pMonsterInfo.uMovementType == 5 ) + else if ( v80 * 307.2 > (double)v81 || pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4580,7 +4575,7 @@ { if ( v81 >= 1024 ) { - if ( pActor->pMonsterInfo.uMovementType == 5 ) + if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4591,7 +4586,7 @@ Actor::AI_Pursue3(actor_id, target_pid, 256, &pDir); } } - else if ( pActor->pMonsterInfo.uMovementType == 5 ) + else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4621,23 +4616,23 @@ if ( pActor->pMonsterInfo.uHostilityType != MonsterInfo::Hostility_Long || !target_pid || v81 >= 5120 || v45 != 1 ) { - if ( !pActor->pMonsterInfo.uMovementType ) + if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_SHORT ) { - Actor::AI_4032B2(actor_id, 4, 1024, 0); + Actor::AI_RandomMove(actor_id, 4, 1024, 0); } else if ( pActor->pMonsterInfo.uMovementType == 1 ) { - Actor::AI_4032B2(actor_id, 4, 2560, 0); + Actor::AI_RandomMove(actor_id, 4, 2560, 0); } else if ( pActor->pMonsterInfo.uMovementType == 2 ) { - Actor::AI_4032B2(actor_id, 4, 5120, 0); + Actor::AI_RandomMove(actor_id, 4, 5120, 0); } else if ( pActor->pMonsterInfo.uMovementType == 4 ) { - Actor::AI_4032B2(actor_id, 4, 10240, 0); + Actor::AI_RandomMove(actor_id, 4, 10240, 0); } - else if ( pActor->pMonsterInfo.uMovementType == 5 ) + else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v57 = Actor::GetDirectionInfo(a1, 4u, &v72, 0); v58 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; @@ -4653,7 +4648,7 @@ { if ( v81 >= 1024 ) { - if ( pActor->pMonsterInfo.uMovementType == 5 ) + if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4664,7 +4659,7 @@ Actor::AI_Pursue3(actor_id, target_pid, 256, &pDir); } } - else if ( pActor->pMonsterInfo.uMovementType == 5 ) + else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; v64 = (signed __int64)v47; @@ -4690,7 +4685,7 @@ else if ( (signed int)pActor->pMonsterInfo.uRecoveryTime > 0 ) { v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333; - if ( v80 * 307.2 > (double)v81 || pActor->pMonsterInfo.uMovementType == 5 ) + if ( v80 * 307.2 > (double)v81 || pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) { v64 = (signed __int64)v47; Actor::AI_Stand(actor_id, target_pid, v64, &pDir);
--- a/Actor.h Wed Aug 07 08:55:34 2013 +0400 +++ b/Actor.h Wed Aug 14 00:40:23 2013 +0400 @@ -201,7 +201,7 @@ static void AI_Bored(unsigned int uActorID, unsigned int uObjID, struct AIDirection *a4); static void AI_Stun(unsigned int uActorID, signed int edx0, int arg0); static char __fastcall _4031C1_update_job(unsigned int uActorID, signed int a2, int a3); - static void AI_4032B2(unsigned int a1, unsigned int a2, int a3, int uActionLength); + static void AI_RandomMove(unsigned int uActor_id, unsigned int uTarget_id, int radius, int uActionLength); static void AI_MissileAttack1(unsigned int uActorID, signed int sTargetPid, struct AIDirection *pDir); static void AI_MissileAttack2(unsigned int uActorID, signed int sTargetPid, struct AIDirection *pDir); static void AI_SpellAttack1(unsigned int uActorID, signed int sTargetPid, struct AIDirection *pDir);
--- a/Monsters.cpp Wed Aug 07 08:55:34 2013 +0400 +++ b/Monsters.cpp Wed Aug 14 00:40:23 2013 +0400 @@ -800,9 +800,9 @@ { switch(tolower(test_string[0])) { - case 's': pInfos[curr_rec_num].uMovementType=0;// short + case 's': pInfos[curr_rec_num].uMovementType=MONSTER_MOVEMENT_TYPE_SHORT;// short if (tolower(test_string[1])!='h') - pInfos[curr_rec_num].uMovementType=5; //stationary? + pInfos[curr_rec_num].uMovementType=MONSTER_MOVEMENT_TYPE_STAIONARY; //stationary break; //short case 'l': pInfos[curr_rec_num].uMovementType=2; break; //long case 'm': pInfos[curr_rec_num].uMovementType=1; break; //med
--- a/Monsters.h Wed Aug 07 08:55:34 2013 +0400 +++ b/Monsters.h Wed Aug 14 00:40:23 2013 +0400 @@ -58,6 +58,17 @@ MONSTER_SPECIAL_ABILITY_EXPLODE = 0x3, }; +enum MONSTER_MOVEMENT_TYPE + { + MONSTER_MOVEMENT_TYPE_SHORT = 0x0, + MONSTER_MOVEMENT_TYPE_MEDIUM = 0x1, + MONSTER_MOVEMENT_TYPE_LONG = 0x2, + MONSTER_MOVEMENT_TYPE_GLOBAL = 0x3, + MONSTER_MOVEMENT_TYPE_FREE = 0x4, + MONSTER_MOVEMENT_TYPE_STAIONARY = 0x5, + }; + + /* 336 */ enum MONSTER_SUPERTYPE {
--- a/TurnEngine.cpp Wed Aug 07 08:55:34 2013 +0400 +++ b/TurnEngine.cpp Wed Aug 14 00:40:23 2013 +0400 @@ -357,7 +357,7 @@ } else if ( turn_stage == 2 ) { - if ( field_18 == TE_FLAG_1) + if ( !(field_18 &TE_FLAG_1)) { if ( turn_initiative == 100 ) { @@ -375,7 +375,7 @@ } else if ( turn_stage == 3 ) { - if ( (uActionPointsLeft > 0) && (field_18 == TE_FLAG_8) ) + if ( (uActionPointsLeft > 0) && (!(field_18 & TE_FLAG_8)) ) ActorAIChooseNewTargets(); else { @@ -625,18 +625,16 @@ else uActiveCharacter = 0; viewparams->bRedrawGameUI = 1; - if (pQueue[0].actor_initiative > 0) + + while ( (pQueue[0].actor_initiative > 0)&&(turn_initiative > 0) ) { - while(turn_initiative > 0) + for (i=0; i<uActorQueueSize; ++i) { - for (i=0; i<uActorQueueSize; ++i) - { - --pQueue[i].actor_initiative; - if (pQueue[i].actor_initiative==0) - pQueue[i].uActionLength=0; - } - --turn_initiative; + --pQueue[i].actor_initiative; + if (pQueue[i].actor_initiative==0) + pQueue[i].uActionLength=0; } + --turn_initiative; } } @@ -1072,7 +1070,7 @@ } else { - Actor::AI_4032B2(uActorID, a2a, 1024, 0); + Actor::AI_RandomMove(uActorID, a2a, 1024, 0); v29->AI_action_type = TE_AI_PURSUE; } @@ -1086,11 +1084,11 @@ { if ( actor->pMonsterInfo.uAIType == 1 ) { - if ( actor->pMonsterInfo.uMovementType == 5 ) + if ( actor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) Actor::AI_Stand(uActorID, a2a, 32, 0); else Actor::AI_Flee(uActorID, a2a, 32, 0); - v29->AI_action_type = 4; + v29->AI_action_type = TE_AI_FLEE; v29->uActionLength = actor->uCurrentActionLength; return 1; } @@ -1099,11 +1097,11 @@ if (((double)actor->pMonsterInfo.uHP * 0.2) > (double)actor->sCurrentHP && (v11 < 10240 ) ) { - if ( actor->pMonsterInfo.uMovementType == 5 ) + if ( actor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) Actor::AI_Stand(uActorID, a2a, 32, 0); else Actor::AI_Flee(uActorID, a2a, 32, 0); - v29->AI_action_type = 4; + v29->AI_action_type = TE_AI_FLEE; v29->uActionLength = actor->uCurrentActionLength; return 1; } @@ -1113,11 +1111,11 @@ if ( ((double)actor->pMonsterInfo.uHP * 0.1) > (double)actor->sCurrentHP && (v11 < 10240 )) { - if ( actor->pMonsterInfo.uMovementType == 5 ) + if ( actor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY ) Actor::AI_Stand(uActorID, a2a, 32, 0); else Actor::AI_Flee(uActorID, a2a, 32, 0); - v29->AI_action_type = 4; + v29->AI_action_type = TE_AI_FLEE; v29->uActionLength = actor->uCurrentActionLength; return 1; } @@ -1140,19 +1138,19 @@ } switch(actor->pMonsterInfo.uMovementType) { - case 0: - Actor::AI_4032B2(uActorID, a2a, 1024, 32); + case MONSTER_MOVEMENT_TYPE_SHORT: + Actor::AI_RandomMove(uActorID, a2a, 1024, 32); break; - case 1: - Actor::AI_4032B2(uActorID, a2a, 2560, 32); + case MONSTER_MOVEMENT_TYPE_MEDIUM: + Actor::AI_RandomMove(uActorID, a2a, 2560, 32); break; - case 2: - Actor::AI_4032B2(uActorID, a2a, 5120, 32); + case MONSTER_MOVEMENT_TYPE_LONG: + Actor::AI_RandomMove(uActorID, a2a, 5120, 32); break; - case 4: - Actor::AI_4032B2(uActorID, a2a, 10240, 32); + case MONSTER_MOVEMENT_TYPE_FREE: + Actor::AI_RandomMove(uActorID, a2a, 10240, 32); break; - case 5: + case MONSTER_MOVEMENT_TYPE_STAIONARY: Actor::AI_Stand(uActorID, a2a, 32, 0); break; default:
--- a/TurnEngine.h Wed Aug 07 08:55:34 2013 +0400 +++ b/TurnEngine.h Wed Aug 14 00:40:23 2013 +0400 @@ -82,7 +82,7 @@ int uActionPointsLeft; //14 int field_18; int pending_actions; - TurnBased_QueueElem pQueue[504]; //20 + TurnBased_QueueElem pQueue[530]; //20 }; #pragma pack(pop)
--- a/mm7_2.cpp Wed Aug 07 08:55:34 2013 +0400 +++ b/mm7_2.cpp Wed Aug 14 00:40:23 2013 +0400 @@ -6766,7 +6766,7 @@ v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; v124 = 8 * v153; LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; pAudioPlayer->PlaySound((SoundID)v125, v124, v9, -1, v9, v16, v9, v9); return 0; } @@ -6823,7 +6823,7 @@ v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; v124 = 8 * v153; LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; pAudioPlayer->PlaySound((SoundID)v125, v124, v9, -1, v9, v16, v9, v9); return 0; } @@ -6924,7 +6924,7 @@ v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; v124 = 8 * v153; LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id-1] + 1; pAudioPlayer->PlaySound((SoundID)v125, v124, v9, -1, v9, v16, v9, v9); return 0; } @@ -7058,7 +7058,7 @@ v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; v124 = 8 * v153; LOBYTE(v124) = v124 | 2; - v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; + v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); return 0; }