comparison mm7_5.cpp @ 515:cb0ad52d6a26

LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people) Some object-related subs moved to SpriteObject.cpp
author Nomad
date Fri, 01 Mar 2013 21:13:12 +0200
parents 3ee1e351e710
children 663c4f618f56
comparison
equal deleted inserted replaced
514:0bbc39457b25 515:cb0ad52d6a26
20 #include "Allocator.h" 20 #include "Allocator.h"
21 #include "Events.h" 21 #include "Events.h"
22 #include "Viewport.h" 22 #include "Viewport.h"
23 #include "FrameTableInc.h" 23 #include "FrameTableInc.h"
24 #include "Math.h" 24 #include "Math.h"
25 #include "LayingItem.h" 25 #include "SpriteObject.h"
26 #include "ObjectList.h" 26 #include "ObjectList.h"
27 #include "Chest.h" 27 #include "Chest.h"
28 #include "PaletteManager.h" 28 #include "PaletteManager.h"
29 #include "DecorationList.h" 29 #include "DecorationList.h"
30 #include "SaveLoad.h" 30 #include "SaveLoad.h"
1781 back_to_game(); 1781 back_to_game();
1782 continue; 1782 continue;
1783 } 1783 }
1784 if ( v45 == 2 ) 1784 if ( v45 == 2 )
1785 { 1785 {
1786 v47 = (pObjectList->pObjects[pLayingItems[v46].uObjectDescID].uFlags & 0x10) == 0; 1786 v47 = (pObjectList->pObjects[pSpriteObjects[v46].uObjectDescID].uFlags & 0x10) == 0;
1787 //LABEL_400: 1787 //LABEL_400:
1788 if ( !v47 ) 1788 if ( !v47 )
1789 continue; 1789 continue;
1790 //goto LABEL_415; 1790 //goto LABEL_415;
1791 v51 = pGUIWindow_Settings->ptr_1C; 1791 v51 = pGUIWindow_Settings->ptr_1C;
4677 { 4677 {
4678 int v0; // edx@1 4678 int v0; // edx@1
4679 char *v1; // esi@2 4679 char *v1; // esi@2
4680 int v2; // ecx@3 4680 int v2; // ecx@3
4681 signed int v3; // eax@3 4681 signed int v3; // eax@3
4682 LayingItem *v4; // eax@4 4682 SpriteObject *v4; // eax@4
4683 signed int v5; // eax@4 4683 signed int v5; // eax@4
4684 signed int v6; // eax@6 4684 signed int v6; // eax@6
4685 unsigned int v7; // edi@6 4685 unsigned int v7; // edi@6
4686 int v8; // eax@6 4686 int v8; // eax@6
4687 __int16 v9; // bx@8 4687 __int16 v9; // bx@8
4709 int v31; // edx@29 4709 int v31; // edx@29
4710 int v32; // eax@29 4710 int v32; // eax@29
4711 int v33; // ST24_4@29 4711 int v33; // ST24_4@29
4712 Vec3_int_ v34; // ST04_12@30 4712 Vec3_int_ v34; // ST04_12@30
4713 Vec3_int_ *v35; // eax@31 4713 Vec3_int_ *v35; // eax@31
4714 LayingItem *v36; // [sp+0h] [bp-28h]@0 4714 SpriteObject *v36; // [sp+0h] [bp-28h]@0
4715 signed int v37; // [sp+4h] [bp-24h]@5 4715 signed int v37; // [sp+4h] [bp-24h]@5
4716 int v38; // [sp+4h] [bp-24h]@15 4716 int v38; // [sp+4h] [bp-24h]@15
4717 signed int v39; // [sp+8h] [bp-20h]@3 4717 signed int v39; // [sp+8h] [bp-20h]@3
4718 int v40; // [sp+8h] [bp-20h]@15 4718 int v40; // [sp+8h] [bp-20h]@15
4719 int v41; // [sp+Ch] [bp-1Ch]@5 4719 int v41; // [sp+Ch] [bp-1Ch]@5
4736 v2 = *((short *)v1 - 300) & 7; 4736 v2 = *((short *)v1 - 300) & 7;
4737 v3 = (signed int)*((short *)v1 - 300) >> 3; 4737 v3 = (signed int)*((short *)v1 - 300) >> 3;
4738 v39 = (signed int)*((short *)v1 - 300) >> 3; 4738 v39 = (signed int)*((short *)v1 - 300) >> 3;
4739 if ( v2 == 2 ) 4739 if ( v2 == 2 )
4740 { 4740 {
4741 v4 = &pLayingItems[v3]; 4741 v4 = &pSpriteObjects[v3];
4742 v36 = v4; 4742 v36 = v4;
4743 v5 = v4->field_58_pid; 4743 v5 = v4->field_58_pid;
4744 v2 = v5 & 7; 4744 v2 = v5 & 7;
4745 v3 = v5 >> 3; 4745 v3 = v5 >> 3;
4746 } 4746 }
4902 4902
4903 //----- (00439474) -------------------------------------------------------- 4903 //----- (00439474) --------------------------------------------------------
4904 void DamageMonsterFromParty(signed int a1, unsigned int uActorID_Monster, Vec3_int_ *pVelocity) 4904 void DamageMonsterFromParty(signed int a1, unsigned int uActorID_Monster, Vec3_int_ *pVelocity)
4905 { 4905 {
4906 //signed int v3; // eax@1 4906 //signed int v3; // eax@1
4907 LayingItem *v4; // ebx@1 4907 SpriteObject *v4; // ebx@1
4908 //int v5; // edx@3 4908 //int v5; // edx@3
4909 //bool uPlayerID; // eax@3 4909 //bool uPlayerID; // eax@3
4910 //Player *pPlayer; // edi@4 4910 //Player *pPlayer; // edi@4
4911 Actor *pMonster; // esi@7 4911 Actor *pMonster; // esi@7
4912 LayingItem *v9; // ebx@12 4912 SpriteObject *v9; // ebx@12
4913 int v10; // eax@12 4913 int v10; // eax@12
4914 int v11; // ebx@12 4914 int v11; // ebx@12
4915 unsigned int v12; // ecx@12 4915 unsigned int v12; // ecx@12
4916 int v13; // edx@15 4916 int v13; // edx@15
4917 int v14; // edx@17 4917 int v14; // edx@17
4976 v61 = 0; 4976 v61 = 0;
4977 v59 = 0; 4977 v59 = 0;
4978 v62 = 0; 4978 v62 = 0;
4979 if ( (a1 & 7) == OBJECT_Item) 4979 if ( (a1 & 7) == OBJECT_Item)
4980 { 4980 {
4981 v4 = &pLayingItems[a1 >> 3]; 4981 v4 = &pSpriteObjects[a1 >> 3];
4982 //uDamageAmount = (int)v4; 4982 //uDamageAmount = (int)v4;
4983 v61 = v4->field_60_distance_related_prolly_lod; 4983 v61 = v4->field_60_distance_related_prolly_lod;
4984 a1 = v4->field_58_pid; 4984 a1 = v4->field_58_pid;
4985 //v54 = v4->field_58_pid; 4985 //v54 = v4->field_58_pid;
4986 } 4986 }
5052 5052
5053 v19 = v4->field_48 == 99; 5053 v19 = v4->field_48 == 99;
5054 v61 = v4->field_60_distance_related_prolly_lod; 5054 v61 = v4->field_60_distance_related_prolly_lod;
5055 if ( !v19 ) 5055 if ( !v19 )
5056 { 5056 {
5057 v9 = (LayingItem *)uDamageAmount; 5057 v9 = (SpriteObject *)uDamageAmount;
5058 v50 = pParty->vPosition.x - *(int *)(uDamageAmount + 4); 5058 v50 = pParty->vPosition.x - *(int *)(uDamageAmount + 4);
5059 //v55 = abs(v50); 5059 //v55 = abs(v50);
5060 pMonsterName = (char *)(pParty->vPosition.y - v9->vPosition.y); 5060 pMonsterName = (char *)(pParty->vPosition.y - v9->vPosition.y);
5061 //v51 = (unsigned __int64 *)abs((int)pMonsterName); 5061 //v51 = (unsigned __int64 *)abs((int)pMonsterName);
5062 pPlayerName = (char *)(pParty->vPosition.z - v9->vPosition.z); 5062 pPlayerName = (char *)(pParty->vPosition.z - v9->vPosition.z);
5092 } 5092 }
5093 else 5093 else
5094 { 5094 {
5095 v61 = 1; 5095 v61 = 1;
5096 } 5096 }
5097 v4 = (LayingItem *)uDamageAmount; 5097 v4 = (SpriteObject *)uDamageAmount;
5098 } 5098 }
5099 5099
5100 v15 = v4->field_48; 5100 v15 = v4->field_48;
5101 if ( v15 == 102 ) 5101 if ( v15 == 102 )
5102 { 5102 {
5407 float v32; // ST04_4@58 5407 float v32; // ST04_4@58
5408 float v33; // ST00_4@58 5408 float v33; // ST00_4@58
5409 int v34; // edi@61 5409 int v34; // edi@61
5410 int v35; // eax@70 5410 int v35; // eax@70
5411 double v36; // st7@70 5411 double v36; // st7@70
5412 LayingItem *v37; // ebx@77 5412 SpriteObject *v37; // ebx@77
5413 int v38; // edi@77 5413 int v38; // edi@77
5414 int v39; // esi@77 5414 int v39; // esi@77
5415 int v40; // eax@77 5415 int v40; // eax@77
5416 int v41; // eax@77 5416 int v41; // eax@77
5417 int v42; // eax@78 5417 int v42; // eax@78
5648 } 5648 }
5649 } 5649 }
5650 viewparams->bRedrawGameUI = 1; 5650 viewparams->bRedrawGameUI = 1;
5651 return; 5651 return;
5652 } 5652 }
5653 v37 = &pLayingItems[uActorID]; 5653 v37 = &pSpriteObjects[uActorID];
5654 v38 = v37->field_58_pid & 7; 5654 v38 = v37->field_58_pid & 7;
5655 v39 = v37->field_58_pid >> 3; 5655 v39 = v37->field_58_pid >> 3;
5656 v40 = v37->field_58_pid & 7; 5656 v40 = v37->field_58_pid & 7;
5657 uActorID = v37->field_58_pid >> 3; 5657 uActorID = v37->field_58_pid >> 3;
5658 v41 = v40 - 2; 5658 v41 = v40 - 2;
5664 v44 = &pActors[v39]; 5664 v44 = &pActors[v39];
5665 if ( a4 == -1 ) 5665 if ( a4 == -1 )
5666 a4 = stru_50C198.which_player_would_attack(v44); 5666 a4 = stru_50C198.which_player_would_attack(v44);
5667 v45 = &pParty->pPlayers[a4]; 5667 v45 = &pParty->pPlayers[a4];
5668 v77 = Actor::_43B3E0_CalcDamage(v44, v74); 5668 v77 = Actor::_43B3E0_CalcDamage(v44, v74);
5669 v46 = v37->uItemType; 5669 v46 = v37->uType;
5670 if ( v37->uItemType == 545 ) 5670 if ( v37->uType == 545 )
5671 { 5671 {
5672 LOBYTE(v51) = v45->GetActualSkillLevel(PLAYER_SKILL_UNARMED); 5672 LOBYTE(v51) = v45->GetActualSkillLevel(PLAYER_SKILL_UNARMED);
5673 v52 = v51; 5673 v52 = v51;
5674 if ( (signed int)SkillToMastery(v51) >= 4 && rand() % 100 < (v52 & 0x3F) ) 5674 if ( (signed int)SkillToMastery(v51) >= 4 && rand() % 100 < (v52 & 0x3F) )
5675 { 5675 {
5890 unsigned int v6; // [sp+10h] [bp-4h]@1 5890 unsigned int v6; // [sp+10h] [bp-4h]@1
5891 5891
5892 v6 = uLayingItemID; 5892 v6 = uLayingItemID;
5893 v2 = uLayingItemID; 5893 v2 = uLayingItemID;
5894 v3 = a2 >> 3; 5894 v3 = a2 >> 3;
5895 v4 = pLayingItems[uLayingItemID].field_58_pid & 7; 5895 v4 = pSpriteObjects[uLayingItemID].field_58_pid & 7;
5896 v5 = (a2 & 7) - 3; 5896 v5 = (a2 & 7) - 3;
5897 if ( v5 ) 5897 if ( v5 )
5898 { 5898 {
5899 if ( v5 == 1 ) 5899 if ( v5 == 1 )
5900 { 5900 {
5901 layingitem_vel_50FDFC.x = pLayingItems[v2].vVelocity.x; 5901 layingitem_vel_50FDFC.x = pSpriteObjects[v2].vVelocity.x;
5902 layingitem_vel_50FDFC.y = pLayingItems[v2].vVelocity.y; 5902 layingitem_vel_50FDFC.y = pSpriteObjects[v2].vVelocity.y;
5903 layingitem_vel_50FDFC.z = pLayingItems[v2].vVelocity.z; 5903 layingitem_vel_50FDFC.z = pSpriteObjects[v2].vVelocity.z;
5904 Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z); 5904 Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z);
5905 DamagePlayerFromMonster(8 * v6 | 2, pLayingItems[v2].field_61, &layingitem_vel_50FDFC, 0xFFFFFFFFu); 5905 DamagePlayerFromMonster(8 * v6 | 2, pSpriteObjects[v2].field_61, &layingitem_vel_50FDFC, 0xFFFFFFFFu);
5906 } 5906 }
5907 } 5907 }
5908 else 5908 else
5909 { 5909 {
5910 layingitem_vel_50FDFC.x = pLayingItems[v2].vVelocity.x; 5910 layingitem_vel_50FDFC.x = pSpriteObjects[v2].vVelocity.x;
5911 layingitem_vel_50FDFC.y = pLayingItems[v2].vVelocity.y; 5911 layingitem_vel_50FDFC.y = pSpriteObjects[v2].vVelocity.y;
5912 layingitem_vel_50FDFC.z = pLayingItems[v2].vVelocity.z; 5912 layingitem_vel_50FDFC.z = pSpriteObjects[v2].vVelocity.z;
5913 Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z); 5913 Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z);
5914 switch ( v4 ) 5914 switch ( v4 )
5915 { 5915 {
5916 case OBJECT_Actor: 5916 case OBJECT_Actor:
5917 sub_43B1B0(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC, pLayingItems[v2].field_61); 5917 sub_43B1B0(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC, pSpriteObjects[v2].field_61);
5918 break; 5918 break;
5919 case OBJECT_Player: 5919 case OBJECT_Player:
5920 DamageMonsterFromParty(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC); 5920 DamageMonsterFromParty(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC);
5921 break; 5921 break;
5922 case OBJECT_Item: 5922 case OBJECT_Item:
6051 6051
6052 //----- (0043B057) -------------------------------------------------------- 6052 //----- (0043B057) --------------------------------------------------------
6053 void __fastcall sub_43B057(unsigned int uObjID, unsigned int uActorID, Vec3_int_ *pVelocity) 6053 void __fastcall sub_43B057(unsigned int uObjID, unsigned int uActorID, Vec3_int_ *pVelocity)
6054 { 6054 {
6055 Actor *pActor; // esi@1 6055 Actor *pActor; // esi@1
6056 LayingItem *v4; // eax@3 6056 SpriteObject *v4; // eax@3
6057 int v5; // ecx@3 6057 int v5; // ecx@3
6058 int v6; // eax@4 6058 int v6; // eax@4
6059 int v7; // edi@4 6059 int v7; // edi@4
6060 unsigned int uActorIDa; // [sp+8h] [bp-8h]@1 6060 unsigned int uActorIDa; // [sp+8h] [bp-8h]@1
6061 unsigned int a2; // [sp+Ch] [bp-4h]@1 6061 unsigned int a2; // [sp+Ch] [bp-4h]@1
6066 a2 = uObjID; 6066 a2 = uObjID;
6067 if ( !pActors[uActorID].IsNotAlive() ) 6067 if ( !pActors[uActorID].IsNotAlive() )
6068 { 6068 {
6069 if ( (a2 & 7) == OBJECT_Item) 6069 if ( (a2 & 7) == OBJECT_Item)
6070 { 6070 {
6071 v4 = &pLayingItems[(signed int)a2 >> 3]; 6071 v4 = &pSpriteObjects[(signed int)a2 >> 3];
6072 v5 = v4->field_48; 6072 v5 = v4->field_48;
6073 if ( v5 ) 6073 if ( v5 )
6074 { 6074 {
6075 v6 = _43AFE3_calc_spell_damage(v5, v4->field_4C, v4->field_50, pActor->sCurrentHP); 6075 v6 = _43AFE3_calc_spell_damage(v5, v4->field_4C, v4->field_50, pActor->sCurrentHP);
6076 v7 = stru_50C198.CalcMagicalDamageToActor(pActor, 0, v6); 6076 v7 = stru_50C198.CalcMagicalDamageToActor(pActor, 0, v6);
6106 6106
6107 //----- (0043B1B0) -------------------------------------------------------- 6107 //----- (0043B1B0) --------------------------------------------------------
6108 void sub_43B1B0(signed int a1, unsigned int a2, Vec3_int_ *pVelocity, signed int a4) 6108 void sub_43B1B0(signed int a1, unsigned int a2, Vec3_int_ *pVelocity, signed int a4)
6109 { 6109 {
6110 int v4; // ebx@1 6110 int v4; // ebx@1
6111 LayingItem *v5; // eax@2 6111 SpriteObject *v5; // eax@2
6112 bool v6; // eax@3 6112 bool v6; // eax@3
6113 Actor *v7; // esi@4 6113 Actor *v7; // esi@4
6114 Actor *v8; // edi@4 6114 Actor *v8; // edi@4
6115 char v9; // zf@5 6115 char v9; // zf@5
6116 __int64 v10; // qax@8 6116 __int64 v10; // qax@8
6125 v4 = 0; 6125 v4 = 0;
6126 uActorID = a2; 6126 uActorID = a2;
6127 v17 = a1; 6127 v17 = a1;
6128 if ( (a1 & 7) == OBJECT_Item) 6128 if ( (a1 & 7) == OBJECT_Item)
6129 { 6129 {
6130 v5 = &pLayingItems[a1 >> 3]; 6130 v5 = &pSpriteObjects[a1 >> 3];
6131 v4 = v5->field_60_distance_related_prolly_lod; 6131 v4 = v5->field_60_distance_related_prolly_lod;
6132 v17 = v5->field_58_pid; 6132 v17 = v5->field_58_pid;
6133 } 6133 }
6134 LOWORD(v6) = v17 & 7; 6134 LOWORD(v6) = v17 & 7;
6135 if ( v6 == OBJECT_Actor) 6135 if ( v6 == OBJECT_Actor)
10842 } 10842 }
10843 } 10843 }
10844 else 10844 else
10845 { 10845 {
10846 v10 = v2; 10846 v10 = v2;
10847 v63 = pLayingItems[v10].vPosition.x; 10847 v63 = pSpriteObjects[v10].vPosition.x;
10848 v64 = pLayingItems[v10].vPosition.y; 10848 v64 = pSpriteObjects[v10].vPosition.y;
10849 v11 = pLayingItems[v10].vPosition.z; 10849 v11 = pSpriteObjects[v10].vPosition.z;
10850 v7 = pLayingItems[v10].uSectorID; 10850 v7 = pSpriteObjects[v10].uSectorID;
10851 v65 = v11; 10851 v65 = v11;
10852 } 10852 }
10853 v66 = v7; 10853 v66 = v7;
10854 v12 = v4 >> 3; 10854 v12 = v4 >> 3;
10855 v13 = (v4 & 7) - 2; 10855 v13 = (v4 & 7) - 2;
10891 } 10891 }
10892 } 10892 }
10893 else 10893 else
10894 { 10894 {
10895 v22 = v12; 10895 v22 = v12;
10896 v18 = pLayingItems[v22].vPosition.x; 10896 v18 = pSpriteObjects[v22].vPosition.x;
10897 v17 = pLayingItems[v22].vPosition.z; 10897 v17 = pSpriteObjects[v22].vPosition.z;
10898 v60 = pLayingItems[v22].vPosition.y; 10898 v60 = pSpriteObjects[v22].vPosition.y;
10899 v19 = pLayingItems[v22].uSectorID; 10899 v19 = pSpriteObjects[v22].uSectorID;
10900 } 10900 }
10901 v62 = v19; 10901 v62 = v19;
10902 v23 = v18 - v63; 10902 v23 = v18 - v63;
10903 v50 = v17 - v65; 10903 v50 = v17 - v65;
10904 v24 = integer_sqrt(v23 * v23 + (v60 - v64) * (v60 - v64) + v50 * v50); 10904 v24 = integer_sqrt(v23 * v23 + (v60 - v64) * (v60 - v64) + v50 * v50);
12114 Actor::_4031C1_update_job(i, pParty->uCurrentHour, 1); 12114 Actor::_4031C1_update_job(i, pParty->uCurrentHour, 1);
12115 } 12115 }
12116 } 12116 }
12117 12117
12118 //----- (00408896) -------------------------------------------------------- 12118 //----- (00408896) --------------------------------------------------------
12119 void InitializeLayingItems() 12119 void InitializeSpriteObjects()
12120 { 12120 {
12121 for (uint i = 0; i < uNumLayingItems; ++i) 12121 for (uint i = 0; i < uNumSpriteObjects; ++i)
12122 { 12122 {
12123 auto item = pLayingItems + i; 12123 auto item = pSpriteObjects + i;
12124 12124
12125 if (item->uItemType && 12125 if (item->uType &&
12126 (item->uSoundID & 8 || pObjectList->pObjects[item->uItemType].uFlags & 0x10)) 12126 (item->uSoundID & 8 || pObjectList->pObjects[item->uType].uFlags & 0x10))
12127 LayingItem::OnItemPickup(i); 12127 SpriteObject::OnInteraction(i);
12128 } 12128 }
12129 12129
12130 for (uint i = 0; i < 100; ++i) 12130 for (uint i = 0; i < 100; ++i)
12131 array_5118E8.pElements[i].field_C_time_left = 0; 12131 array_5118E8.pElements[i].field_C_time_left = 0;
12132 } 12132 }
16424 } 16424 }
16425 } 16425 }
16426 goto LABEL_132; 16426 goto LABEL_132;
16427 } 16427 }
16428 v7 = v6 >> 3; 16428 v7 = v6 >> 3;
16429 if ( pObjectList->pObjects[pLayingItems[v7].uObjectDescID].uFlags & 0x10 ) 16429 if ( pObjectList->pObjects[pSpriteObjects[v7].uObjectDescID].uFlags & 0x10 )
16430 goto LABEL_132; 16430 goto LABEL_132;
16431 v8 = &pLayingItems[v7].stru_24; 16431 v8 = &pSpriteObjects[v7].stru_24;
16432 } 16432 }
16433 GameUI_DrawItemInfo(v8); 16433 GameUI_DrawItemInfo(v8);
16434 goto LABEL_132; 16434 goto LABEL_132;
16435 } 16435 }
16436 if ( pCurrentScreen == SCREEN_HOUSE ) 16436 if ( pCurrentScreen == SCREEN_HOUSE )