Mercurial > might-and-magic-trilogy
comparison LayingItem.cpp @ 0:8b8875f5b359
Initial commit
author | Nomad |
---|---|
date | Fri, 05 Oct 2012 16:07:14 +0200 |
parents | |
children | 41cbaabde2cb |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:8b8875f5b359 |
---|---|
1 #include "LayingItem.h" | |
2 #include "Party.h" | |
3 #include "TurnEngine.h" | |
4 #include "MapInfo.h" | |
5 | |
6 #include "mm7_data.h" | |
7 | |
8 | |
9 | |
10 | |
11 size_t uNumLayingItems; | |
12 LayingItem pLayingItems[1000]; | |
13 | |
14 | |
15 //----- (00438E35) -------------------------------------------------------- | |
16 __int16 LayingItem::_438E35() | |
17 { | |
18 LayingItem *v1; // edi@1 | |
19 MapInfo *pMapInfo; // esi@1 | |
20 int v3; // ebx@1 | |
21 int v4; // eax@1 | |
22 int v5; // ebx@1 | |
23 unsigned int v6; // ecx@1 | |
24 int v7; // edx@2 | |
25 unsigned int v8; // edx@4 | |
26 unsigned int v9; // edx@6 | |
27 unsigned int v10; // eax@7 | |
28 signed int v11; // ebx@8 | |
29 Player **v12; // esi@18 | |
30 signed int v13; // edi@20 | |
31 int v15; // [sp+Ch] [bp-Ch]@1 | |
32 int v16; // [sp+10h] [bp-8h]@1 | |
33 signed int v17; // [sp+14h] [bp-4h]@8 | |
34 int v18; // [sp+14h] [bp-4h]@14 | |
35 | |
36 v1 = this; | |
37 pMapInfo = &pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)]; | |
38 v3 = abs(pParty->vPosition.x - v1->vPosition.x); | |
39 v15 = abs(pParty->vPosition.z - v1->vPosition.y); | |
40 v16 = abs(pParty->vPosition.y + pParty->sEyelevel - v1->vPosition.z); | |
41 v4 = v3; | |
42 v5 = v15; | |
43 v6 = v16; | |
44 if ( v4 < v15 ) | |
45 { | |
46 v7 = v4; | |
47 v4 = v15; | |
48 v5 = v7; | |
49 } | |
50 if ( v4 < v16 ) | |
51 { | |
52 v8 = v4; | |
53 v4 = v16; | |
54 v6 = v8; | |
55 } | |
56 if ( v5 < (signed int)v6 ) | |
57 { | |
58 v9 = v6; | |
59 v6 = v5; | |
60 v5 = v9; | |
61 } | |
62 v10 = ((unsigned int)(11 * v5) >> 5) + (v6 >> 2) + v4; | |
63 if ( (signed int)v10 <= 768 ) | |
64 { | |
65 v17 = 0; | |
66 v11 = 5; | |
67 if ( pMapInfo->field_2E ) | |
68 { | |
69 do | |
70 { | |
71 ++v17; | |
72 v11 += rand() % 20 + 1; | |
73 } | |
74 while ( v17 < pMapInfo->field_2E ); | |
75 } | |
76 switch ( v1->uItemType ) | |
77 { | |
78 case 0x32Bu: | |
79 v18 = 0; | |
80 break; | |
81 case 0x32Cu: | |
82 v18 = 1; | |
83 break; | |
84 case 0x32Du: | |
85 v18 = 2; | |
86 break; | |
87 default: | |
88 LOWORD(v10) = v1->uItemType - 814; | |
89 if ( v1->uItemType != 814 ) | |
90 return v10; | |
91 v18 = 8; | |
92 break; | |
93 } | |
94 v12 = &pPlayers[1]; | |
95 do | |
96 { | |
97 if ( (*v12)->CanAct() && (v13 = (*v12)->GetPerception() + 20, rand() % v13 > 20) ) | |
98 LOWORD(v10) = (*v12)->PlaySound(6, 0); | |
99 else | |
100 LOWORD(v10) = (*v12)->ReceiveDamage(v11, v18); | |
101 ++v12; | |
102 } | |
103 while ( (signed int)v12 <= (signed int)&pPlayers[4] ); | |
104 } | |
105 return v10; | |
106 } | |
107 | |
108 | |
109 | |
110 //----- (0042F933) -------------------------------------------------------- | |
111 void LayingItem::_42F933(unsigned int uLayingItemID) | |
112 { | |
113 unsigned int v1; // ecx@1 | |
114 unsigned __int16 *pAttributes; // ecx@2 | |
115 unsigned __int16 v3; // ax@2 | |
116 | |
117 v1 = uLayingItemID; | |
118 pLayingItems[v1].uObjectDescID = 0; | |
119 if ( pParty->bTurnBasedModeOn == 1 ) | |
120 { | |
121 pAttributes = &pLayingItems[v1].uAttributes; | |
122 v3 = *pAttributes; | |
123 if ( *pAttributes & 4 ) | |
124 { | |
125 LOBYTE(v3) = v3 & 0xFB; | |
126 --pTurnEngine->field_1C; | |
127 *pAttributes = v3; | |
128 } | |
129 } | |
130 } |