Mercurial > mm7
annotate SpriteObject.cpp @ 2486:1e70f8470638
simplified SpriteObject::Create
author | Grumpy7 |
---|---|
date | Sun, 07 Sep 2014 01:36:04 +0200 |
parents | b3f96acf6bab |
children | 0a0c6d75aabe |
rev | line source |
---|---|
2415 | 1 #define _CRTDBG_MAP_ALLOC |
2 #include <stdlib.h> | |
3 #include <crtdbg.h> | |
4 | |
2253
aff7a7b072b7
adding _CRT_SECURE_NO_WARNINGS to get rid of a few hundrer annoying warnings + adding count parameter to swprintf
Grumpy7
parents:
2207
diff
changeset
|
5 #define _CRT_SECURE_NO_WARNINGS |
2350
7c10dfb6d802
Finishing moving all known UI functions to their appropriate headers
Grumpy7
parents:
2338
diff
changeset
|
6 #include "Sprites.h" |
1016 | 7 #include "BSPModel.h" |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
8 #include "SpriteObject.h" |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
9 #include "Party.h" |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
10 #include "TurnEngine.h" |
2037
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
1980
diff
changeset
|
11 #include "OurMath.h" |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
12 #include "ObjectList.h" |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
13 #include "Outdoor.h" |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
14 #include "ParticleEngine.h" |
2044 | 15 #include "Timer.h" |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
16 #include "Game.h" |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
17 #include "LOD.h" |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
18 #include "Actor.h" |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
19 #include "Events.h" |
2331
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
20 #include "AudioPlayer.h" |
1828
35c1e4ff6ba7
party_finds_gold to Party::PartyFindsGold, cleaned up, moved Level/Decoration.h reference out of Indoor.h
Grumpy7
parents:
1643
diff
changeset
|
21 #include "Level/Decoration.h" |
2464 | 22 |
828
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
23 #include "MM7.h" |
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
24 |
2463 | 25 #include "stru298.h" |
26 #include "Random.h" | |
27 | |
828
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
28 |
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
29 |
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
30 |
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
31 |
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
32 |
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
33 |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
34 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
35 size_t uNumSpriteObjects; |
1207
96a81634669e
arrays to std::arrays phase 3 - finishing global arrays
Grumpy7
parents:
1205
diff
changeset
|
36 std::array<SpriteObject, MAX_SPRITE_OBJECTS> pSpriteObjects; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
37 |
781 | 38 //----- (00404828) -------------------------------------------------------- |
39 SpriteObject::SpriteObject() | |
40 { | |
41 field_22_glow_radius_multiplier = 1; | |
42 uSoundID = 0; | |
43 uFacing = 0; | |
44 vVelocity.z = 0; | |
45 vVelocity.y = 0; | |
46 vVelocity.x = 0; | |
47 uType = 0; | |
48 uObjectDescID = 0; | |
49 field_61 = 0; | |
50 field_60_distance_related_prolly_lod = 0; | |
51 field_20 = 0; | |
52 uSpriteFrameID = 0; | |
822 | 53 spell_skill = 0; |
54 spell_level = 0; | |
55 spell_id = 0; | |
781 | 56 field_54 = 0; |
57 } | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
58 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
59 //----- (0042F5ED) -------------------------------------------------------- |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
60 int SpriteObject::Create(int yaw, int pitch, int a4, int a5) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
61 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
62 signed int v6; // ebx@2 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
63 int v13; // ST2C_4@20 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
64 Vec3_int_ v17; // [sp-20h] [bp-30h]@11 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
65 int angle; // [sp+Ch] [bp-4h]@1 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
66 int a5a; // [sp+20h] [bp+10h]@20 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
67 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
68 angle = yaw; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
69 if (!uObjectDescID) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
70 return -1; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
71 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
72 v6 = 1000; |
810 | 73 for (uint i = 0; i < MAX_SPRITE_OBJECTS; ++i) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
74 if (!pSpriteObjects[i].uObjectDescID) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
75 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
76 v6 = i; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
77 break; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
78 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
79 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
80 if ( v6 >= 1000 ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
81 return -1; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
82 field_64.x = vPosition.x; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
83 field_64.y = vPosition.y; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
84 field_64.z = vPosition.z; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
85 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
86 assert(sizeof(SpriteObject) == 0x70); |
2486 | 87 |
88 switch (a5) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
89 { |
2486 | 90 case 0: |
91 break; //do nothing | |
92 case 1: | |
93 Vec3_int_::Rotate(24, stru_5C6E00->uIntegerHalfPi + uFacing, 0, vPosition, &vPosition.x, | |
94 &vPosition.y, &vPosition.z); | |
95 break; | |
96 case 2: | |
97 Vec3_int_::Rotate(8, stru_5C6E00->uIntegerHalfPi + uFacing, 0, vPosition, &vPosition.x, | |
98 &vPosition.y, &vPosition.z); | |
99 break; | |
100 case 3: | |
101 Vec3_int_::Rotate(8, uFacing - stru_5C6E00->uIntegerHalfPi, 0, vPosition, &vPosition.x, | |
102 &vPosition.y, &vPosition.z); | |
103 break; | |
104 case 4: | |
105 Vec3_int_::Rotate(24, uFacing - stru_5C6E00->uIntegerHalfPi, 0, vPosition, &vPosition.x, | |
106 &vPosition.y, &vPosition.z); | |
107 break; | |
108 default: | |
109 assert(false); | |
110 return 0; | |
111 break; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
112 } |
1409
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1406
diff
changeset
|
113 |
2486 | 114 if ( a4 ) |
115 { | |
116 v13 = fixpoint_mul(stru_5C6E00->Cos(angle), stru_5C6E00->Cos(pitch)); | |
117 a5a = fixpoint_mul(stru_5C6E00->Sin(angle), stru_5C6E00->Cos(pitch)); | |
118 vVelocity.x = fixpoint_mul(v13, a4); | |
119 vVelocity.y = fixpoint_mul(a5a, a4); | |
120 vVelocity.z = fixpoint_mul(stru_5C6E00->Sin(pitch), a4); | |
121 } | |
122 else | |
123 { | |
124 vVelocity.y = 0; | |
125 vVelocity.x = 0; | |
126 vVelocity.z = 0; | |
127 } | |
128 | |
129 memcpy(&pSpriteObjects[v6], this, sizeof(*this)); | |
130 if ( v6 >= (signed int)uNumSpriteObjects ) | |
131 uNumSpriteObjects = v6 + 1; | |
132 return v6; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
133 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
134 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
135 //----- (00471C03) -------------------------------------------------------- |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
136 void SpriteObject::UpdateObject_fn0_ODM(unsigned int uLayingItemID) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
137 { |
2068 | 138 ObjectDesc *object; // ebx@1 |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
139 int v6; // eax@1 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
140 int v7; // ecx@1 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
141 int v8; // edi@1 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
142 int v9; // eax@4 |
2334 | 143 // int v17; // ST10_4@25 |
2085 | 144 //signed int v19; // eax@28 |
145 //Actor *v20; // edi@31 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
146 int v21; // eax@41 |
2334 | 147 // int v22; // ecx@43 |
148 // __int16 v23; // bx@45 | |
149 // char v24; // al@46 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
150 signed int i; // edi@50 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
151 int v26; // edi@52 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
152 int v27; // eax@52 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
153 __int16 v28; // cx@55 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
154 int v29; // eax@55 |
2085 | 155 //signed int v30; // edi@59 |
156 BSPModel *bmodel; // ecx@61 | |
157 ODMFace *face; // edi@61 | |
2334 | 158 // int v33; // eax@62 |
159 // int v34; // ecx@62 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
160 int v35; // eax@63 |
1267 | 161 int v36; // ecx@67 |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
162 __int16 v37; // ax@67 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
163 int v38; // eax@72 |
2085 | 164 //int v39; // eax@72 |
2334 | 165 // unsigned __int64 v40; // qax@72 |
166 // int v41; // eax@72 | |
167 // unsigned __int8 v42; // sf@74 | |
168 // unsigned __int8 v43; // of@74 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
169 int v44; // eax@77 |
2334 | 170 // __int16 v45; // bx@81 |
171 // int v46; // eax@85 | |
172 // const char *v47; // [sp-8h] [bp-B0h]@83 | |
173 // enum TEXTURE_TYPE v48; // [sp-4h] [bp-ACh]@46 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
174 int v49; // [sp+Ch] [bp-9Ch]@52 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
175 int v50; // [sp+10h] [bp-98h]@52 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
176 Vec3_int_ v51; // [sp+14h] [bp-94h]@11 |
619 | 177 Particle_sw Dst; // [sp+20h] [bp-88h]@45 |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
178 int v54; // [sp+8Ch] [bp-1Ch]@1 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
179 int v55; // [sp+90h] [bp-18h]@1 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
180 int v56; // [sp+94h] [bp-14h]@11 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
181 int v57; // [sp+98h] [bp-10h]@1 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
182 int v58; // [sp+9Ch] [bp-Ch]@1 |
1267 | 183 int on_water; // [sp+A0h] [bp-8h]@1 |
184 int v60; // [sp+A4h] [bp-4h]@11 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
185 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
186 v58 = 0; |
2068 | 187 object = &pObjectList->pObjects[pSpriteObjects[uLayingItemID].uObjectDescID]; |
188 v57 = IsTerrainSlopeTooHigh(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
189 v55 = 0; |
2085 | 190 v6 = ODM_GetFloorLevel(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uHeight, &on_water, &v55, 0); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
191 v7 = v6; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
192 v54 = v6; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
193 v8 = v6 + 1; |
2068 | 194 if ( pSpriteObjects[uLayingItemID].vPosition.z <= v6 + 1 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
195 { |
1267 | 196 if ( on_water ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
197 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
198 v9 = v6 + 60; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
199 if ( v55 ) |
2085 | 200 v9 = v6 + 30; |
2068 | 201 sub_42F960_create_object(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, v9); |
2085 | 202 SpriteObject::OnInteraction(uLayingItemID); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
203 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
204 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
205 else |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
206 v58 = 1; |
2068 | 207 if ( !(object->uFlags & OBJECT_DESC_NO_GRAVITY) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
208 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
209 if ( v58 ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
210 { |
2068 | 211 pSpriteObjects[uLayingItemID].vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
212 goto LABEL_13; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
213 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
214 if ( v57 ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
215 { |
2068 | 216 pSpriteObjects[uLayingItemID].vPosition.z = v8; |
2085 | 217 ODM_GetTerrainNormalAt(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, &v51); |
2068 | 218 pSpriteObjects[uLayingItemID].vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); |
219 v56 = abs(v51.y * pSpriteObjects[uLayingItemID].vVelocity.y + v51.z * pSpriteObjects[uLayingItemID].vVelocity.z + v51.x * pSpriteObjects[uLayingItemID].vVelocity.x) >> 16; | |
1546 | 220 //v60 = ((unsigned __int64)(v56 * (signed __int64)v51.x) >> 16); |
2068 | 221 pSpriteObjects[uLayingItemID].vVelocity.x += fixpoint_mul(v56, v51.x); |
1546 | 222 //v60 = ((unsigned __int64)(v56 * (signed __int64)v51.y) >> 16); |
2068 | 223 pSpriteObjects[uLayingItemID].vVelocity.y += fixpoint_mul(v56, v51.y); |
1546 | 224 //v60 = ((unsigned __int64)(v56 * (signed __int64)v51.z) >> 16); |
2068 | 225 pSpriteObjects[uLayingItemID].vVelocity.z += fixpoint_mul(v56, v51.z); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
226 v7 = v54; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
227 goto LABEL_13; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
228 } |
2085 | 229 if ( object->uFlags & OBJECT_DESC_INTERACTABLE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
230 { |
2068 | 231 if ( pSpriteObjects[uLayingItemID].vPosition.z < v7 ) |
232 pSpriteObjects[uLayingItemID].vPosition.z = v8; | |
2085 | 233 if ( !_46BFFA_check_object_intercept(uLayingItemID, 0) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
234 return; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
235 } |
2068 | 236 pSpriteObjects[uLayingItemID].vPosition.z = v8; |
237 if ( !(object->uFlags & OBJECT_DESC_BOUNCE) || (v21 = -pSpriteObjects[uLayingItemID].vVelocity.z >> 1, pSpriteObjects[uLayingItemID].vVelocity.z = v21, (signed __int16)v21 < 10) ) | |
238 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1267 | 239 |
2068 | 240 pSpriteObjects[uLayingItemID].vVelocity.x = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.x); |
241 pSpriteObjects[uLayingItemID].vVelocity.y = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.y); | |
242 pSpriteObjects[uLayingItemID].vVelocity.z = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.z); | |
2085 | 243 if ( (pSpriteObjects[uLayingItemID].vVelocity.y * pSpriteObjects[uLayingItemID].vVelocity.y |
244 + pSpriteObjects[uLayingItemID].vVelocity.x * pSpriteObjects[uLayingItemID].vVelocity.x) < 400 ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
245 { |
2085 | 246 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
247 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
248 memset(&Dst, 0, 0x68u); | |
249 Dst.x = (double)pSpriteObjects[uLayingItemID].vPosition.x; | |
250 Dst.y = (double)pSpriteObjects[uLayingItemID].vPosition.y; | |
251 Dst.z = (double)pSpriteObjects[uLayingItemID].vPosition.z; | |
252 Dst.r = 0.0; | |
253 Dst.g = 0.0; | |
254 Dst.b = 0.0; | |
255 if (object->uFlags & OBJECT_DESC_TRIAL_FIRE ) | |
256 { | |
257 Dst.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; | |
258 Dst.uDiffuse = 0xFF3C1E; | |
259 Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; | |
260 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar01", TEXTURE_DEFAULT); | |
261 Dst.flt_28 = 1.0; | |
262 pGame->pParticleEngine->AddParticle(&Dst); | |
263 } | |
264 else if ( object->uFlags & OBJECT_DESC_TRIAL_LINE) | |
265 { | |
619 | 266 Dst.type = ParticleType_Line; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
267 Dst.uDiffuse = rand(); |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
268 Dst.timeToLive = 64; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
269 Dst.uTextureID = 0; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
270 Dst.flt_28 = 1.0; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
271 pGame->pParticleEngine->AddParticle(&Dst); |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
272 } |
2085 | 273 else if ( object->uFlags & OBJECT_DESC_TRIAL_PARTICLE ) |
274 { | |
275 Dst.type = ParticleType_Bitmap | ParticleType_8; | |
276 Dst.uDiffuse = rand(); | |
277 Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; | |
278 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar03", TEXTURE_DEFAULT); | |
279 Dst.flt_28 = 1.0; | |
280 pGame->pParticleEngine->AddParticle(&Dst); | |
281 } | |
282 return; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
283 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
284 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
285 LABEL_13: |
2085 | 286 if ( pSpriteObjects[uLayingItemID].vPosition.x >= -0x8000 && pSpriteObjects[uLayingItemID].vPosition.x <= 0x8000 |
287 && pSpriteObjects[uLayingItemID].vPosition.y >= -0x8000 && pSpriteObjects[uLayingItemID].vPosition.y <= 0x8000 | |
288 && pSpriteObjects[uLayingItemID].vPosition.z > v7 && pSpriteObjects[uLayingItemID].vPosition.z <= 13000 | |
2068 | 289 || !(object->uFlags & OBJECT_DESC_INTERACTABLE) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
290 goto LABEL_92; |
2068 | 291 if ( pSpriteObjects[uLayingItemID].vPosition.z < v7 ) |
292 pSpriteObjects[uLayingItemID].vPosition.z = v8; | |
2085 | 293 if ( _46BFFA_check_object_intercept(uLayingItemID, 0) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
294 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
295 LABEL_92: |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
296 stru_721530.field_0 = 0; |
2068 | 297 stru_721530.prolly_normal_d = object->uRadius; |
298 stru_721530.height = object->uHeight; | |
1546 | 299 stru_721530.field_8_radius = 0; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
300 stru_721530.field_70 = 0; |
2085 | 301 for ( v55 = 0; v55 < 100; ++v55 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
302 { |
2068 | 303 stru_721530.position.x = pSpriteObjects[uLayingItemID].vPosition.x; |
1546 | 304 stru_721530.normal.x = stru_721530.position.x; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
305 stru_721530.uSectorID = 0; |
2085 | 306 stru_721530.position.y = pSpriteObjects[uLayingItemID].vPosition.y; |
307 stru_721530.normal.y = pSpriteObjects[uLayingItemID].vPosition.y; | |
2068 | 308 stru_721530.position.z = pSpriteObjects[uLayingItemID].vPosition.z + stru_721530.prolly_normal_d + 1; |
1546 | 309 stru_721530.normal.z = stru_721530.position.z; |
2068 | 310 stru_721530.velocity.x = pSpriteObjects[uLayingItemID].vVelocity.x; |
311 stru_721530.velocity.y = pSpriteObjects[uLayingItemID].vVelocity.y; | |
312 stru_721530.velocity.z = pSpriteObjects[uLayingItemID].vVelocity.z; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
313 if ( stru_721530._47050A(0) ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
314 return; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
315 _46E889_collide_against_bmodels(0); |
2085 | 316 _46E26D_collide_against_sprites(WorldPosToGridCellX(pSpriteObjects[uLayingItemID].vPosition.x), WorldPosToGridCellZ(pSpriteObjects[uLayingItemID].vPosition.y)); |
2068 | 317 if (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) != OBJECT_Player) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
318 _46EF01_collision_chech_player(0); |
2068 | 319 if (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Actor) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
320 { |
2085 | 321 if (( PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid) >= 0 ) |
322 &&( PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid) < (signed int)(uNumActors - 1) )) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
323 { |
2085 | 324 for (v56 =0; v56 < uNumActors; ++v56) |
325 { | |
326 if ( pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].GetActorsRelation(&pActors[v56]) ) | |
327 Actor::_46DF1A_collide_against_actor(v56, 0); | |
328 } | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
329 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
330 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
331 else |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
332 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
333 for ( i = 0; i < (signed int)uNumActors; ++i ) |
1897
436553b0603c
_46DF1A_collide_against_actor cleaned up, moved to Actor.h
Grumpy7
parents:
1828
diff
changeset
|
334 Actor::_46DF1A_collide_against_actor(i, 0); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
335 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
336 v26 = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; |
2068 | 337 v27 = ODM_GetFloorLevel( stru_721530.normal2.x, stru_721530.normal2.y, stru_721530.normal2.z - stru_721530.prolly_normal_d - 1, |
338 object->uHeight, &v49, &v50, 0); | |
1267 | 339 if ( on_water && v26 < v27 + 60 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
340 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
341 if ( v50 ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
342 v44 = v27 + 30; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
343 else |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
344 v44 = v54 + 60; |
2068 | 345 sub_42F960_create_object(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, v44); |
2085 | 346 SpriteObject::OnInteraction(uLayingItemID); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
347 return; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
348 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
349 if ( stru_721530.field_7C >= stru_721530.field_6C ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
350 { |
2068 | 351 pSpriteObjects[uLayingItemID].vPosition.x = stru_721530.normal2.x; |
352 pSpriteObjects[uLayingItemID].vPosition.y = stru_721530.normal2.y; | |
353 pSpriteObjects[uLayingItemID].vPosition.z = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; | |
354 pSpriteObjects[uLayingItemID].uSectorID = LOWORD(stru_721530.uSectorID); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
355 memset(&Dst, 0, 0x68u); |
2068 | 356 Dst.x = (double)pSpriteObjects[uLayingItemID].vPosition.x; |
357 Dst.y = (double)pSpriteObjects[uLayingItemID].vPosition.y; | |
358 Dst.z = (double)pSpriteObjects[uLayingItemID].vPosition.z; | |
1390 | 359 Dst.r = 0.0; |
360 Dst.g = 0.0; | |
361 Dst.b = 0.0; | |
2068 | 362 if ( object->uFlags & OBJECT_DESC_TRIAL_FIRE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
363 { |
619 | 364 Dst.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; |
365 Dst.uDiffuse = 0xFF3C1E; | |
1267 | 366 Dst.timeToLive = (unsigned __int8)( rand() & 0x80) + 128; |
367 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar01", TEXTURE_DEFAULT); | |
368 Dst.flt_28 = 1.0; | |
369 pGame->pParticleEngine->AddParticle(&Dst); | |
370 return; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
371 } |
2068 | 372 else if ( object->uFlags & OBJECT_DESC_TRIAL_LINE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
373 { |
619 | 374 Dst.type = ParticleType_Line; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
375 Dst.uTextureID = 0; |
1267 | 376 Dst.uDiffuse = rand(); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
377 Dst.timeToLive = 64; |
1267 | 378 Dst.flt_28 = 1.0; |
379 pGame->pParticleEngine->AddParticle(&Dst); | |
380 return; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
381 } |
2068 | 382 else if ( object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) |
383 { | |
384 Dst.type = ParticleType_Bitmap | ParticleType_8; | |
385 Dst.uDiffuse = rand(); | |
386 Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; | |
387 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar03", TEXTURE_DEFAULT); | |
388 Dst.flt_28 = 1.0; | |
389 pGame->pParticleEngine->AddParticle(&Dst); | |
390 } | |
1267 | 391 return; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
392 } |
1546 | 393 //v60 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.x) >> 16); |
2068 | 394 pSpriteObjects[uLayingItemID].vPosition.x += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.x); |
1546 | 395 //v60 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.y) >> 16); |
2068 | 396 pSpriteObjects[uLayingItemID].vPosition.y += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.y); |
1546 | 397 //v60 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.z) >> 16); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
398 v28 = LOWORD(stru_721530.uSectorID); |
2068 | 399 pSpriteObjects[uLayingItemID].vPosition.z += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.z); |
400 v29 = pSpriteObjects[uLayingItemID].vPosition.z; | |
401 pSpriteObjects[uLayingItemID].uSectorID = v28; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
402 stru_721530.field_70 += stru_721530.field_7C; |
2068 | 403 if ( object->uFlags & OBJECT_DESC_INTERACTABLE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
404 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
405 if ( v29 < v54 ) |
2068 | 406 pSpriteObjects[uLayingItemID].vPosition.z = v54 + 1; |
2085 | 407 if ( !_46BFFA_check_object_intercept(uLayingItemID, stru_721530.uFaceID) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
408 return; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
409 } |
828
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
410 if (PID_TYPE(stru_721530.uFaceID) == OBJECT_Decoration) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
411 break; |
828
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
412 if (PID_TYPE(stru_721530.uFaceID) == OBJECT_BModel) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
413 { |
2085 | 414 bmodel = &pOutdoor->pBModels[(signed int)stru_721530.uFaceID >> 9]; |
415 face = &bmodel->pFaces[PID_ID(stru_721530.uFaceID) & 0x3F]; | |
416 if ( face->uPolygonType != POLYGON_Floor ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
417 { |
2085 | 418 v56 = abs(face->pFacePlane.vNormal.x * pSpriteObjects[uLayingItemID].vVelocity.x |
419 + face->pFacePlane.vNormal.y * pSpriteObjects[uLayingItemID].vVelocity.y | |
420 + face->pFacePlane.vNormal.z * pSpriteObjects[uLayingItemID].vVelocity.z) >> 16; | |
1546 | 421 if ( (stru_721530.speed >> 3) > v56 ) |
422 v56 = stru_721530.speed >> 3; | |
2207 | 423 //v57 = fixpoint_mul(v56, face->pFacePlane.vNormal.x); |
424 //v58 = fixpoint_mul(v56, face->pFacePlane.vNormal.y); | |
425 v60 = fixpoint_mul(v56, face->pFacePlane.vNormal.z); | |
426 pSpriteObjects[uLayingItemID].vVelocity.x += 2 * fixpoint_mul(v56, face->pFacePlane.vNormal.x); | |
427 pSpriteObjects[uLayingItemID].vVelocity.y += 2 * fixpoint_mul(v56, face->pFacePlane.vNormal.y); | |
2085 | 428 if ( face->pFacePlane.vNormal.z <= 32000 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
429 v37 = 2 * (short)v60; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
430 else |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
431 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
432 v36 = v60; |
2068 | 433 pSpriteObjects[uLayingItemID].vVelocity.z += (signed __int16)v60; |
2207 | 434 v58 = fixpoint_mul(0x7D00, v36); |
435 v37 = fixpoint_mul(32000, v36); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
436 } |
2068 | 437 pSpriteObjects[uLayingItemID].vVelocity.z += v37; |
2085 | 438 if ( BYTE3(face->uAttributes) & 0x10 ) |
439 EventProcessor(face->sCogTriggeredID, 0, 1); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
440 goto LABEL_74; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
441 } |
2085 | 442 pSpriteObjects[uLayingItemID].vPosition.z = bmodel->pVertices.pVertices[face->pVertexIDs[0]].z + 1; |
443 if ( pSpriteObjects[uLayingItemID].vVelocity.x * pSpriteObjects[uLayingItemID].vVelocity.x | |
444 + pSpriteObjects[uLayingItemID].vVelocity.y * pSpriteObjects[uLayingItemID].vVelocity.y >= 400 ) | |
2068 | 445 { |
2207 | 446 if ( face->uAttributes & 0x10000000 ) |
2085 | 447 EventProcessor(face->sCogTriggeredID, 0, 1); |
2068 | 448 goto LABEL_74; |
449 } | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
450 LOWORD(v35) = 0; |
2068 | 451 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
452 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
453 pSpriteObjects[uLayingItemID].vVelocity.y = v35; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
454 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
455 LABEL_74: |
2085 | 456 pSpriteObjects[uLayingItemID].vVelocity.x = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.x); |
457 pSpriteObjects[uLayingItemID].vVelocity.y = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.y); | |
458 pSpriteObjects[uLayingItemID].vVelocity.z = fixpoint_mul(58500, pSpriteObjects[uLayingItemID].vVelocity.z); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
459 } |
2085 | 460 v57 = integer_sqrt(pSpriteObjects[uLayingItemID].vVelocity.x * pSpriteObjects[uLayingItemID].vVelocity.x |
461 + pSpriteObjects[uLayingItemID].vVelocity.y * pSpriteObjects[uLayingItemID].vVelocity.y); | |
462 v38 = stru_5C6E00->Atan2(pSpriteObjects[uLayingItemID].vPosition.x - pLevelDecorations[PID_ID(stru_721530.uFaceID)].vPosition.x, | |
463 pSpriteObjects[uLayingItemID].vPosition.y - pLevelDecorations[PID_ID(stru_721530.uFaceID)].vPosition.y); | |
2207 | 464 pSpriteObjects[uLayingItemID].vVelocity.x = fixpoint_mul(stru_5C6E00->Cos(v38), v57); |
465 pSpriteObjects[uLayingItemID].vVelocity.y = fixpoint_mul(stru_5C6E00->Sin(v38 - stru_5C6E00->uIntegerHalfPi), v57); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
466 goto LABEL_74; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
467 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
468 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
469 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
470 //----- (0047136C) -------------------------------------------------------- |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
471 void SpriteObject::UpdateObject_fn0_BLV(unsigned int uLayingItemID) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
472 { |
717 | 473 SpriteObject *pSpriteObject; // esi@1 |
474 ObjectDesc *pObject; // edi@1 | |
2334 | 475 // int v9; // ecx@16 |
476 // __int16 v10; // di@18 | |
477 // int v14; // ebx@34 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
478 signed int v15; // ebx@46 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
479 int v17; // eax@50 |
2334 | 480 // int v18; // eax@52 |
481 // int v19; // ecx@52 | |
482 // Vec3_short_ *v20; // ecx@53 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
483 __int16 v22; // ax@57 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
484 int v23; // edi@62 |
2334 | 485 // unsigned __int8 v27; // sf@64 |
486 // unsigned __int8 v28; // of@64 | |
487 // __int16 v29; // di@67 | |
488 // char v30; // al@68 | |
619 | 489 Particle_sw Dst; // [sp+Ch] [bp-84h]@18 |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
490 unsigned int uFaceID; // [sp+7Ch] [bp-14h]@4 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
491 int v39; // [sp+80h] [bp-10h]@33 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
492 int v40; // [sp+84h] [bp-Ch]@28 |
2085 | 493 int v42; // [sp+8Ch] [bp-4h]@4 |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
494 |
717 | 495 pSpriteObject = &pSpriteObjects[uLayingItemID]; |
496 pObject = &pObjectList->pObjects[pSpriteObject->uObjectDescID]; | |
497 pSpriteObject->uSectorID = pIndoor->GetSector(pSpriteObject->vPosition.x, pSpriteObject->vPosition.y, pSpriteObject->vPosition.z); | |
723 | 498 v42 = BLV_GetFloorLevel(pSpriteObject->vPosition.x, pSpriteObject->vPosition.y, pSpriteObject->vPosition.z, pSpriteObject->uSectorID, &uFaceID); |
717 | 499 if ( abs(pSpriteObject->vPosition.x) > 32767 |
500 || abs(pSpriteObject->vPosition.y) > 32767 | |
501 || abs(pSpriteObject->vPosition.z) > 20000 | |
502 || v42 <= -30000 | |
503 && (pSpriteObject->uSectorID == 0)) | |
504 // || (v42 = _46CEC3_get_floor_level(pSpriteObject->vPosition.x, pSpriteObject->vPosition.y, pSpriteObject->vPosition.z, v4, &uFaceID), v42 == -30000)) ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
505 { |
717 | 506 SpriteObject::OnInteraction(uLayingItemID); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
507 return; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
508 } |
2085 | 509 if ( pObject->uFlags & OBJECT_DESC_NO_GRAVITY )//íå ïàäàþùèå îáúåêòû |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
510 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
511 LABEL_25: |
2085 | 512 stru_721530.field_0 = 0; |
717 | 513 stru_721530.prolly_normal_d = pObject->uRadius; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
514 stru_721530.field_84 = -1; |
1546 | 515 stru_721530.height = pObject->uHeight; |
2085 | 516 stru_721530.field_8_radius = 0; |
517 stru_721530.field_70 = 0; | |
518 for ( uFaceID = 0; uFaceID < 100; uFaceID++ ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
519 { |
1546 | 520 stru_721530.position.x = pSpriteObject->vPosition.x; |
2085 | 521 stru_721530.position.y = pSpriteObject->vPosition.y; |
522 stru_721530.position.z = stru_721530.prolly_normal_d + pSpriteObject->vPosition.z + 1; | |
523 | |
1546 | 524 stru_721530.normal.x = stru_721530.position.x; |
525 stru_721530.normal.y = stru_721530.position.y; | |
526 stru_721530.normal.z = stru_721530.position.z; | |
2085 | 527 |
1546 | 528 stru_721530.velocity.x = pSpriteObject->vVelocity.x; |
529 stru_721530.velocity.y = pSpriteObject->vVelocity.y; | |
530 stru_721530.velocity.z = pSpriteObject->vVelocity.z; | |
2085 | 531 |
717 | 532 stru_721530.uSectorID = pSpriteObject->uSectorID; |
2085 | 533 if ( stru_721530._47050A(0) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
534 return; |
2085 | 535 |
536 for ( v40 = 0; v40 < 100; ++v40 ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
537 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
538 _46E44E_collide_against_faces_and_portals(0); |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
539 _46E0B2_collide_against_decorations(); |
828
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
540 if (PID_TYPE(pSpriteObject->spell_caster_pid) != OBJECT_Player) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
541 _46EF01_collision_chech_player(1); |
2085 | 542 if (PID_TYPE(pSpriteObject->spell_caster_pid) == OBJECT_Actor) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
543 { |
2085 | 544 for ( v42 = 0; v42 < (signed int)uNumActors; ++v42 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
545 { |
2085 | 546 if( pActors[pSpriteObject->spell_caster_pid >> 3].pMonsterInfo.uID != pActors[v42].pMonsterInfo.uID ) |
547 //not sure: pMonsterList->pMonsters[v39b->word_000086_some_monster_id-1].uToHitRadius | |
548 Actor::_46DF1A_collide_against_actor(v42, pMonsterList->pMonsters[pActors[v42].word_000086_some_monster_id-1].uToHitRadius); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
549 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
550 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
551 else |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
552 { |
2085 | 553 for ( v42 = 0; v42 < (signed int)uNumActors; v42++ ) |
554 Actor::_46DF1A_collide_against_actor(v42, pMonsterList->pMonsters[pActors[v42].word_000086_some_monster_id-1].uToHitRadius); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
555 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
556 if ( _46F04E_collide_against_portals() ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
557 break; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
558 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
559 if ( stru_721530.field_7C >= stru_721530.field_6C ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
560 { |
717 | 561 pSpriteObject->vPosition.x = stru_721530.normal2.x; |
562 pSpriteObject->vPosition.y = stru_721530.normal2.y; | |
563 pSpriteObject->vPosition.z = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1; | |
564 pSpriteObject->uSectorID = LOWORD(stru_721530.uSectorID); | |
565 if ( !(HIBYTE(pObject->uFlags) & 1) ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
566 return; |
2085 | 567 memset(&Dst, 0, 0x68u); |
717 | 568 Dst.x = (double)pSpriteObject->vPosition.x; |
569 Dst.y = (double)pSpriteObject->vPosition.y; | |
570 Dst.z = (double)pSpriteObject->vPosition.z; | |
1390 | 571 Dst.r = 0.0; |
572 Dst.g = 0.0; | |
573 Dst.b = 0.0; | |
2085 | 574 if ( pObject->uFlags & OBJECT_DESC_TRIAL_FIRE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
575 { |
619 | 576 Dst.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; |
577 Dst.uDiffuse = 0xFF3C1E; | |
2085 | 578 Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; |
579 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar01", TEXTURE_DEFAULT); | |
580 Dst.flt_28 = 1.0; | |
581 pGame->pParticleEngine->AddParticle(&Dst); | |
582 return; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
583 } |
2085 | 584 else if ( pObject->uFlags & OBJECT_DESC_TRIAL_LINE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
585 { |
2085 | 586 Dst.type = ParticleType_Line; |
587 Dst.uDiffuse = rand(); | |
588 Dst.timeToLive = 64; | |
589 Dst.uTextureID = 0; | |
590 Dst.flt_28 = 1.0; | |
591 pGame->pParticleEngine->AddParticle(&Dst); | |
592 return; | |
593 } | |
594 else if ( pObject->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
595 { | |
619 | 596 Dst.type = ParticleType_Bitmap | ParticleType_8; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
597 Dst.uDiffuse = rand(); |
2085 | 598 Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; |
599 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar03", TEXTURE_DEFAULT); | |
600 Dst.flt_28 = 1.0; | |
601 pGame->pParticleEngine->AddParticle(&Dst); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
602 } |
717 | 603 return; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
604 } |
1546 | 605 //v40 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.x) >> 16; |
1643 | 606 pSpriteObject->vPosition.x += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.x); |
1546 | 607 //v40 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.y) >> 16; |
1643 | 608 pSpriteObject->vPosition.y += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.y); |
1546 | 609 //v40 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.direction.z) >> 16; |
1643 | 610 pSpriteObject->vPosition.z += fixpoint_mul(stru_721530.field_7C, stru_721530.direction.z); |
1574 | 611 pSpriteObject->uSectorID = stru_721530.uSectorID; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
612 stru_721530.field_70 += stru_721530.field_7C; |
2085 | 613 if ( pObject->uFlags & OBJECT_DESC_INTERACTABLE && !_46BFFA_check_object_intercept(uLayingItemID, stru_721530.uFaceID) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
614 return; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
615 v15 = (signed int)stru_721530.uFaceID >> 3; |
828
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
616 if (PID_TYPE(stru_721530.uFaceID) == OBJECT_Decoration) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
617 { |
717 | 618 v40 = integer_sqrt(pSpriteObject->vVelocity.x * pSpriteObject->vVelocity.x + pSpriteObject->vVelocity.y * pSpriteObject->vVelocity.y); |
619 v23 = stru_5C6E00->Atan2(pSpriteObject->vPosition.x - pLevelDecorations[v15].vPosition.x, | |
620 pSpriteObject->vPosition.y - pLevelDecorations[v15].vPosition.y); | |
1643 | 621 pSpriteObject->vVelocity.x = fixpoint_mul(stru_5C6E00->Cos(v23), v40); |
622 pSpriteObject->vVelocity.y = fixpoint_mul(stru_5C6E00->Sin(v23), v40); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
623 } |
2085 | 624 if (PID_TYPE(stru_721530.uFaceID) == OBJECT_BModel) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
625 { |
828
0f56abdcce94
Massive refactors of spells + PID (packed id) macros introduced.
Nomad
parents:
822
diff
changeset
|
626 stru_721530.field_84 = (signed int)PID_ID(stru_721530.uFaceID); |
2085 | 627 if ( pIndoor->pFaces[v15].uPolygonType != POLYGON_Floor ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
628 { |
2085 | 629 v42 = abs(pIndoor->pFaces[v15].pFacePlane_old.vNormal.x * pSpriteObject->vVelocity.x |
630 + pIndoor->pFaces[v15].pFacePlane_old.vNormal.y * pSpriteObject->vVelocity.y | |
631 + pIndoor->pFaces[v15].pFacePlane_old.vNormal.z * pSpriteObject->vVelocity.z) >> 16; | |
1546 | 632 if ( (stru_721530.speed >> 3) > v42 ) |
633 v42 = stru_721530.speed >> 3; | |
2085 | 634 pSpriteObject->vVelocity.x += 2 * fixpoint_mul(v42, pIndoor->pFaces[v15].pFacePlane_old.vNormal.x); |
635 pSpriteObject->vVelocity.y += 2 * fixpoint_mul(v42, pIndoor->pFaces[v15].pFacePlane_old.vNormal.y); | |
636 v39 = fixpoint_mul(v42, pIndoor->pFaces[v15].pFacePlane_old.vNormal.z); | |
637 if ( pIndoor->pFaces[v15].pFacePlane_old.vNormal.z <= 32000 ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
638 v22 = 2 * v39; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
639 else |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
640 { |
717 | 641 pSpriteObject->vVelocity.z += v39; |
1643 | 642 v22 = fixpoint_mul(32000, v39); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
643 } |
717 | 644 pSpriteObject->vVelocity.z += v22; |
2166 | 645 if ( pIndoor->pFaces[v15].uAttributes & FACE_UNKNOW2 ) |
2085 | 646 EventProcessor(pIndoor->pFaceExtras[pIndoor->pFaces[v15].uFaceExtraID].uEventID, 0, 1); |
647 pSpriteObject->vVelocity.x = fixpoint_mul(58500, pSpriteObject->vVelocity.x); | |
648 pSpriteObject->vVelocity.y = fixpoint_mul(58500, pSpriteObject->vVelocity.y); | |
649 pSpriteObject->vVelocity.z = fixpoint_mul(58500, pSpriteObject->vVelocity.z); | |
650 continue; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
651 } |
2085 | 652 if ( pObject->uFlags & OBJECT_DESC_BOUNCE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
653 { |
2085 | 654 v17 = -pSpriteObject->vVelocity.z / 2; |
717 | 655 pSpriteObject->vVelocity.z = v17; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
656 if ( (signed __int16)v17 < 10 ) |
717 | 657 pSpriteObject->vVelocity.z = 0; |
2166 | 658 if ( pIndoor->pFaces[v15].uAttributes & FACE_UNKNOW2 ) |
2085 | 659 EventProcessor(pIndoor->pFaceExtras[pIndoor->pFaces[v15].uFaceExtraID].uEventID, 0, 1); |
660 pSpriteObject->vVelocity.x = fixpoint_mul(58500, pSpriteObject->vVelocity.x); | |
661 pSpriteObject->vVelocity.y = fixpoint_mul(58500, pSpriteObject->vVelocity.y); | |
662 pSpriteObject->vVelocity.z = fixpoint_mul(58500, pSpriteObject->vVelocity.z); | |
663 continue; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
664 } |
717 | 665 pSpriteObject->vVelocity.z = 0; |
2085 | 666 if ( pSpriteObject->vVelocity.x * pSpriteObject->vVelocity.x + pSpriteObject->vVelocity.y * pSpriteObject->vVelocity.y >= 400 ) |
717 | 667 { |
2166 | 668 if ( pIndoor->pFaces[v15].uAttributes & FACE_UNKNOW2 ) |
2085 | 669 EventProcessor(pIndoor->pFaceExtras[pIndoor->pFaces[v15].uFaceExtraID].uEventID, 0, 1); |
670 pSpriteObject->vVelocity.x = fixpoint_mul(58500, pSpriteObject->vVelocity.x); | |
671 pSpriteObject->vVelocity.y = fixpoint_mul(58500, pSpriteObject->vVelocity.y); | |
672 pSpriteObject->vVelocity.z = fixpoint_mul(58500, pSpriteObject->vVelocity.z); | |
673 continue; | |
717 | 674 } |
675 pSpriteObject->vVelocity.z = 0; | |
676 pSpriteObject->vVelocity.y = 0; | |
677 pSpriteObject->vVelocity.x = 0; | |
2085 | 678 pSpriteObject->vPosition.z = pIndoor->pVertices[*pIndoor->pFaces[v15].pVertexIDs].z + 1; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
679 } |
1643 | 680 pSpriteObject->vVelocity.x = fixpoint_mul(58500, pSpriteObject->vVelocity.x); |
681 pSpriteObject->vVelocity.y = fixpoint_mul(58500, pSpriteObject->vVelocity.y); | |
682 pSpriteObject->vVelocity.z = fixpoint_mul(58500, pSpriteObject->vVelocity.z); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
683 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
684 } |
2085 | 685 //äëÿ ïàäàþùèõ îáúåêòîâ(äëÿ ïðèìåðà âûáðîñ âåùè èç èíâåíòàðÿ) |
717 | 686 if ( v42 <= pSpriteObject->vPosition.z - 3 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
687 { |
717 | 688 pSpriteObject->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); |
2085 | 689 goto LABEL_25; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
690 } |
2085 | 691 if ( !(pObject->uFlags & OBJECT_DESC_INTERACTABLE) || _46BFFA_check_object_intercept(uLayingItemID, 0) ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
692 { |
717 | 693 pSpriteObject->vPosition.z = v42 + 1; |
2085 | 694 if ( pIndoor->pFaces[uFaceID].uPolygonType == POLYGON_Floor ) |
717 | 695 pSpriteObject->vVelocity.z = 0; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
696 else |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
697 { |
2085 | 698 if ( pIndoor->pFaces[uFaceID].pFacePlane_old.vNormal.z < 45000 ) |
717 | 699 pSpriteObject->vVelocity.z -= LOWORD(pEventTimer->uTimeElapsed) * GetGravityStrength(); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
700 } |
1643 | 701 pSpriteObject->vVelocity.x = fixpoint_mul(58500, pSpriteObject->vVelocity.x); |
702 pSpriteObject->vVelocity.y = fixpoint_mul(58500, pSpriteObject->vVelocity.y); | |
703 pSpriteObject->vVelocity.z = fixpoint_mul(58500, pSpriteObject->vVelocity.z); | |
2085 | 704 if ( pSpriteObject->vVelocity.x * pSpriteObject->vVelocity.x + pSpriteObject->vVelocity.y * pSpriteObject->vVelocity.y < 400 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
705 { |
2085 | 706 pSpriteObject->vVelocity.x = 0; |
707 pSpriteObject->vVelocity.y = 0; | |
708 pSpriteObject->vVelocity.z = 0; | |
709 if ( !(pObject->uFlags & OBJECT_DESC_NO_SPRITE) ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
710 return; |
2085 | 711 memset(&Dst, 0, 0x68u); |
717 | 712 Dst.x = (double)pSpriteObject->vPosition.x; |
713 Dst.y = (double)pSpriteObject->vPosition.y; | |
714 Dst.z = (double)pSpriteObject->vPosition.z; | |
1390 | 715 Dst.r = 0.0; |
716 Dst.g = 0.0; | |
717 Dst.b = 0.0; | |
2085 | 718 if ( pObject->uFlags & OBJECT_DESC_TRIAL_FIRE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
719 { |
619 | 720 Dst.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; |
721 Dst.uDiffuse = 0xFF3C1E; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
722 Dst.flt_28 = 1.0; |
2085 | 723 Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; |
724 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar01", TEXTURE_DEFAULT); | |
725 pGame->pParticleEngine->AddParticle(&Dst); | |
726 return; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
727 } |
2085 | 728 else if ( pObject->uFlags & OBJECT_DESC_TRIAL_LINE ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
729 { |
2085 | 730 Dst.type = ParticleType_Line; |
731 Dst.uDiffuse = rand(); | |
732 Dst.timeToLive = 64; | |
733 Dst.uTextureID = 0; | |
734 Dst.flt_28 = 1.0; | |
735 pGame->pParticleEngine->AddParticle(&Dst); | |
736 return; | |
737 } | |
738 else if ( pObject->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
739 { | |
619 | 740 Dst.type = ParticleType_Bitmap | ParticleType_8; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
741 Dst.uDiffuse = rand(); |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
742 Dst.flt_28 = 1.0; |
2085 | 743 Dst.timeToLive = (unsigned __int8)(rand() & 0x80) + 128; |
744 Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar03", TEXTURE_DEFAULT); | |
745 pGame->pParticleEngine->AddParticle(&Dst); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
746 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
747 return; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
748 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
749 goto LABEL_25; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
750 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
751 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
752 // 46DF1A: using guessed type int __fastcall 46DF1A_collide_against_actor(int, int); |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
753 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
754 //----- (00438E35) -------------------------------------------------------- |
1406 | 755 void SpriteObject::ExplosionTraps() |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
756 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
757 MapInfo *pMapInfo; // esi@1 |
1406 | 758 int dir_x; // ebx@1 |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
759 int v7; // edx@2 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
760 unsigned int v10; // eax@7 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
761 signed int v11; // ebx@8 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
762 signed int v13; // edi@20 |
1406 | 763 int dir_y; // [sp+Ch] [bp-Ch]@1 |
764 int dir_z; // [sp+10h] [bp-8h]@1 | |
765 DAMAGE_TYPE pDamageType; // [sp+14h] [bp-4h]@14 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
766 |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1450
diff
changeset
|
767 pMapInfo = &pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)]; |
1406 | 768 dir_x = abs(pParty->vPosition.x - this->vPosition.x); |
769 dir_y = abs(pParty->vPosition.y - this->vPosition.y); | |
770 dir_z = abs(pParty->vPosition.z + pParty->sEyelevel - this->vPosition.z); | |
771 if ( dir_x < dir_y ) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
772 { |
1406 | 773 v7 = dir_x; |
774 dir_x = dir_y; | |
775 dir_y = v7; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
776 } |
1406 | 777 if ( dir_x < dir_z ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
778 { |
1406 | 779 v7 = dir_x; |
780 dir_x = dir_z; | |
781 dir_z = v7; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
782 } |
1406 | 783 if ( dir_y < dir_z ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
784 { |
1406 | 785 v7 = dir_z; |
786 dir_z = dir_y; | |
787 dir_y = v7; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
788 } |
1406 | 789 v10 = ((unsigned int)(11 * dir_y) >> 5) + (dir_z / 4) + dir_x; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
790 if ( (signed int)v10 <= 768 ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
791 { |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
792 v11 = 5; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
793 if ( pMapInfo->Trap_D20 ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
794 { |
1406 | 795 for ( uint i = 0; i < pMapInfo->Trap_D20; ++i ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
796 v11 += rand() % 20 + 1; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
797 } |
1406 | 798 switch ( this->uType ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
799 { |
1406 | 800 case 811: |
801 pDamageType = DMGT_FIRE; | |
802 break; | |
803 case 812: | |
804 pDamageType = DMGT_ELECTR; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
805 break; |
1406 | 806 case 813: |
807 pDamageType = DMGT_COLD; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
808 break; |
1406 | 809 case 814: |
810 pDamageType = DMGT_BODY; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
811 break; |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
812 default: |
1406 | 813 return; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
814 } |
1406 | 815 for ( uint i = 1; i <= 4; ++i ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
816 { |
1406 | 817 if ( pPlayers[i]->CanAct() && (v13 = pPlayers[i]->GetPerception() + 20, rand() % v13 > 20) ) |
818 pPlayers[i]->PlaySound(SPEECH_6, 0); | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
819 else |
1406 | 820 pPlayers[i]->ReceiveDamage(v11, pDamageType); |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
821 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
822 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
823 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
824 |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
825 //----- (0042F933) -------------------------------------------------------- |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
826 void SpriteObject::OnInteraction(unsigned int uLayingItemID) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
827 { |
837 | 828 pSpriteObjects[uLayingItemID].uObjectDescID = 0; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
829 if ( pParty->bTurnBasedModeOn == 1 ) |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
830 { |
837 | 831 if (pSpriteObjects[uLayingItemID].uAttributes & 4 ) |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
832 { |
1062 | 833 pSpriteObjects[uLayingItemID].uAttributes &= 0xFFFB; |
1450 | 834 --pTurnEngine->pending_actions; |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
835 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
836 } |
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
diff
changeset
|
837 } |
810 | 838 |
839 | |
840 //----- (0042FA22) -------------------------------------------------------- | |
841 void CompactLayingItemsList() | |
2085 | 842 { |
843 int new_obj_pos = 0; | |
810 | 844 |
2124 | 845 for ( int i = 0; i < MAX_SPRITE_OBJECTS; ++i ) |
2085 | 846 { |
2124 | 847 if ( pSpriteObjects[i].uObjectDescID ) |
848 { | |
849 if ( i != new_obj_pos )// | |
850 { | |
851 memcpy(&pSpriteObjects[new_obj_pos], &pSpriteObjects[i],sizeof(SpriteObject)); | |
852 pSpriteObjects[i].uObjectDescID = 0; | |
853 } | |
854 new_obj_pos++; | |
855 } | |
2085 | 856 } |
857 uNumSpriteObjects = new_obj_pos; | |
858 } | |
1297 | 859 //----- (00408896) -------------------------------------------------------- |
2338
1e865e8690ba
Moving some function declarations from unsorted subs to Actor.h and SpriteObject.h
Grumpy7
parents:
2336
diff
changeset
|
860 void SpriteObject::InitializeSpriteObjects() |
1297 | 861 { |
862 for (uint i = 0; i < uNumSpriteObjects; ++i) | |
863 { | |
1980 | 864 SpriteObject* item = &pSpriteObjects[i]; |
1297 | 865 |
2085 | 866 if (item->uType && (item->uSoundID & 8 || pObjectList->pObjects[item->uType].uFlags & OBJECT_DESC_UNPICKABLE)) |
1297 | 867 SpriteObject::OnInteraction(i); |
868 } | |
869 } | |
870 //----- (0046BEF1) -------------------------------------------------------- | |
871 void SpriteObject::_46BEF1_apply_spells_aoe() | |
872 { | |
2085 | 873 //SpriteObject *v1; // edi@1 |
874 //Actor *v2; // esi@2 | |
875 //__int16 v3; // fps@4 | |
876 //unsigned __int8 v4; // c0@4 | |
877 //unsigned __int8 v5; // c3@4 | |
878 //signed int v6; // [sp+8h] [bp-4h]@1 | |
1297 | 879 |
2085 | 880 int v7,v9,v10,v11; |
881 __debugbreak();//Ritor1 | |
1297 | 882 if ( (signed int)uNumActors > 0 ) |
883 { | |
2085 | 884 for ( uint i = 0; i < uNumActors; ++i ) |
1297 | 885 { |
2085 | 886 if ( pActors[i].CanAct() ) |
1297 | 887 { |
888 //UNDEF(v3); | |
889 //.text:0046BF26 movsx eax, word ptr [esi-2] | |
890 //.text:0046BF2A sub eax, [edi+4] | |
891 //.text:0046BF31 mov [ebp+var_8], eax | |
892 //.text:0046BF37 fild [ebp+var_8] | |
893 // v7 pushed to stack | |
2085 | 894 v7 = pActors[i].vPosition.x - this->vPosition.x; |
1297 | 895 |
896 //.text:0046BF2D movsx ecx, word ptr [esi+2] | |
2085 | 897 //v8 = pActors[i].vPosition.z; |
1297 | 898 |
899 //.text:0046BF34 movsx eax, word ptr [esi] | |
900 //.text:0046BF3A sub eax, [edi+8] | |
901 //.text:0046BF3D mov [ebp+var_8], eax | |
902 //.text:0046BF44 fild [ebp+var_8] | |
903 // v9 pushed to stack | |
2085 | 904 v9 = pActors[i].vPosition.y - this->vPosition.y; |
1297 | 905 |
906 //.text:0046BF40 movsx eax, word ptr [esi-6] | |
907 //.text:0046BF47 sar eax, 1 | |
908 //.text:0046BF49 add eax, ecx | |
909 //.text:0046BF4B sub eax, [edi+0Ch] | |
910 //.text:0046BF4E mov [ebp+var_8], eax | |
911 //.text:0046BF51 fild [ebp+var_8] | |
912 //.text:0046BF58 fld st | |
913 // v10 pushed to stack, two times | |
2085 | 914 v10 = pActors[i].uActorHeight / 2 + pActors[i].vPosition.z - this->vVelocity.y; |
1297 | 915 |
916 //.text:0046BF54 movsx eax, word ptr [esi-8] | |
917 //.text:0046BF5A add eax, 100h | |
918 //.text:0046BF63 mov ecx, eax | |
2085 | 919 //v11 = this->vVelocity.x; |
1297 | 920 |
921 //.text:0046BF5F fmul st, st(1) | |
922 // stack: v10*v10, v10, v9, v7 | |
923 //.text:0046BF61 fld st(2) | |
924 // stack: v7, v10*v10, v10, v9, v7 | |
925 | |
926 | |
927 //.text:0046BF65 fmul st, st(3) | |
928 // stack: v7*v9, v10*v10, v10, v9, v7 | |
929 | |
930 //.text:0046BF67 imul ecx, eax | |
2085 | 931 v11 = this->vVelocity.x * this->vVelocity.x; |
1297 | 932 |
933 //.text:0046BF6A faddp st(1), st | |
934 // stack: v10*v10+v7*v9, v10, v9, v7 | |
935 //.text:0046BF6C fld st(3) | |
936 // stack: v7, v10*v10+v7*v9, v10, v9, v7 | |
937 //.text:0046BF6E fmul st, st(4) | |
938 // stack: v7*v7, v10*v10+v7*v9, v10, v9, v7 | |
939 //.text:0046BF70 faddp st(1), st | |
940 // stack: v10*v10+v7*v9+v7*v7, v10, v9, v7 | |
941 | |
942 //.text:0046BF72 mov [ebp+var_8], ecx | |
943 //.text:0046BF75 fild [ebp+var_8] | |
944 // v11 pushed to stack | |
945 | |
946 //.text:0046BF78 fcompp | |
947 // if ( v11 > v10*v10+v7*v9+v7*v7 ) | |
948 // stack: v10, v9, v7 | |
949 | |
950 //.text:0046BF7A fstp st | |
951 // stack: v9, v7 | |
952 | |
953 //.text:0046BF7C fnstsw ax | |
954 //.text:0046BF7E fstp st | |
955 // stack: v7 | |
956 | |
957 //.text:0046BF80 test ah, 41h | |
958 //.text:0046BF83 fstp st | |
959 //.text:0046BF85 jnz short loc_46BFDD | |
960 | |
2085 | 961 if ( v11 >= v7 * v7 + v9 * v9 + v10 * v10 ) |
1297 | 962 { |
2301 | 963 if ( pActors[i].DoesDmgTypeDoDamage((DAMAGE_TYPE)0xAu) ) |
1297 | 964 { |
2085 | 965 pActors[i].pActorBuffs[this->spell_id].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(this->spell_level << 7) * 0.033333335), |
966 this->spell_skill, 4, 0, 0); | |
967 HIWORD(pActors[i].uAttributes) |= 8; | |
1297 | 968 } |
969 } | |
970 } | |
971 } | |
972 } | |
2331
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
973 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
974 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
975 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
976 //----- (0042F7EB) -------------------------------------------------------- |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
977 bool SpriteObject::sub_42F7EB_DropItemAt(unsigned int uSpriteID, int x, int y, int z, int a4, int count, int a7, unsigned __int16 attributes, ItemGen *a9) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
978 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
979 unsigned __int16 pObjectDescID; // ax@7 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
980 SpriteObject pSpellObject; // [sp+Ch] [bp-78h]@1 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
981 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
982 pSpellObject.stru_24.Reset(); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
983 if ( a9 ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
984 memcpy(&pSpellObject.stru_24, a9, sizeof(pSpellObject.stru_24)); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
985 pSpellObject.spell_skill = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
986 pSpellObject.spell_level = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
987 pSpellObject.spell_id = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
988 pSpellObject.field_54 = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
989 pSpellObject.uType = uSpriteID; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
990 pObjectDescID = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
991 for ( uint i = 0; i < (signed int)pObjectList->uNumObjects; ++i ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
992 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
993 if ( (short)uSpriteID == pObjectList->pObjects[i].uObjectID ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
994 pObjectDescID = i; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
995 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
996 pSpellObject.uObjectDescID = pObjectDescID; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
997 pSpellObject.vPosition.x = x; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
998 pSpellObject.vPosition.y = y; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
999 pSpellObject.vPosition.z = z; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1000 pSpellObject.uSoundID = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1001 pSpellObject.uAttributes = attributes; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1002 pSpellObject.uSectorID = pIndoor->GetSector(x, y, z); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1003 pSpellObject.uSpriteFrameID = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1004 pSpellObject.spell_caster_pid = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1005 pSpellObject.spell_target_pid = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1006 if ( !(pSpellObject.uAttributes & 0x10) ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1007 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1008 if ( pItemsTable->uAllItemsCount ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1009 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1010 for ( uint i = 1; i < pItemsTable->uAllItemsCount; ++i ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1011 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1012 if ( pItemsTable->pItems[i].uSpriteID == uSpriteID ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1013 pSpellObject.stru_24.uItemID = i; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1014 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1015 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1016 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1017 if ( a7 ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1018 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1019 if ( count > 0 ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1020 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1021 for ( uint i = count; i; --i ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1022 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1023 pSpellObject.uFacing = rand() % (signed int)stru_5C6E00->uIntegerDoublePi; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1024 pSpellObject.Create((signed __int16)pSpellObject.uFacing, |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1025 ((signed int)stru_5C6E00->uIntegerHalfPi / 2) + (rand() % ((signed int)stru_5C6E00->uIntegerHalfPi / 2)), a4, 0); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1026 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1027 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1028 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1029 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1030 else |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1031 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1032 pSpellObject.uFacing = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1033 if ( count > 0 ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1034 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1035 for ( uint i = count; i; --i ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1036 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1037 pSpellObject.Create((signed __int16)pSpellObject.uFacing, stru_5C6E00->uIntegerHalfPi, a4, 0); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1038 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1039 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1040 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1041 return true; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1042 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1043 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1044 //----- (0042F960) -------------------------------------------------------- |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1045 void SpriteObject::sub_42F960_create_object(int x, int y, int z) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1046 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1047 unsigned __int16 v7; // ax@5 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1048 signed int v8; // eax@6 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1049 signed int v9; // eax@7 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1050 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1051 SpriteObject a1; // [sp+Ch] [bp-70h]@1 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1052 //SpriteObject::SpriteObject(&a1); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1053 a1.stru_24.Reset(); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1054 |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1055 a1.spell_skill = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1056 a1.spell_level = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1057 a1.spell_id = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1058 a1.field_54 = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1059 a1.uType = 800; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1060 v7 = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1061 for ( uint i = 0; i < (signed int)pObjectList->uNumObjects; ++i ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1062 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1063 if ( a1.uType == pObjectList->pObjects[i].uObjectID ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1064 v7 = i; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1065 } |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1066 a1.uObjectDescID = v7; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1067 a1.vPosition.x = x; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1068 a1.vPosition.y = y; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1069 a1.vPosition.z = z; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1070 a1.uSoundID = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1071 a1.uAttributes = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1072 a1.uSectorID = pIndoor->GetSector(x, y, z); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1073 a1.uSpriteFrameID = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1074 a1.spell_caster_pid = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1075 a1.spell_target_pid = 0; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1076 v8 = a1.Create(0, 0, 0, 0); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1077 if ( v8 != -1 ) |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1078 { |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1079 v9 = 8 * v8; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1080 LOBYTE(v9) = v9 | 2; |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1081 pAudioPlayer->PlaySound((SoundID)(SOUND_GoldReceived|0x14), v9, 0, -1, 0, 0, 0, 0); |
9551756f46c4
Moving functions out of mm7_6.cpp into appropriate classes as static methods or free functions
Grumpy7
parents:
2301
diff
changeset
|
1082 } |
2463 | 1083 } |
1084 | |
1085 //----- (0046BFFA) -------------------------------------------------------- | |
1086 bool __fastcall _46BFFA_check_object_intercept(unsigned int uLayingItemID, signed int a2) | |
1087 { | |
1088 ObjectDesc *object; // ebx@1 | |
1089 unsigned int v8; // eax@19 | |
1090 signed int v10; // ebx@19 | |
1091 char *v11; // edx@20 | |
1092 unsigned __int16 v12; // ax@23 | |
1093 int v13; // eax@27 | |
1094 int v16; // eax@36 | |
1095 __int16 v18; // di@37 | |
1096 signed int v19; // edx@37 | |
1097 unsigned __int16 v22; // ax@41 | |
1098 signed int v24; // ebx@46 | |
1099 char *v25; // edx@47 | |
1100 signed int v34; // edx@65 | |
1101 unsigned __int16 v36; // ax@69 | |
1102 int v37; // ST14_4@72 | |
1103 int v38; // eax@72 | |
1104 int v39; // ST10_4@72 | |
1105 int v40; // ST0C_4@72 | |
1106 unsigned __int8 v44; // zf@79 | |
1107 int v47; // eax@81 | |
1108 signed int v52; // ebx@93 | |
1109 signed int v56; // ebx@98 | |
1110 unsigned __int16 v58; // ax@102 | |
1111 unsigned __int16 v59; // ax@107 | |
1112 signed int v61; // ebx@107 | |
1113 unsigned __int16 v63; // ax@111 | |
1114 int v64; // ebx@114 | |
1115 signed int v65; // eax@114 | |
1116 signed int v69; // ebx@124 | |
1117 unsigned __int16 v71; // ax@128 | |
1118 unsigned int v72; // ebx@131 | |
1119 int v78; // eax@133 | |
1120 signed int v81; // edx@140 | |
1121 unsigned __int16 v83; // ax@144 | |
1122 signed int v86; // ebx@151 | |
1123 unsigned __int16 v88; // ax@155 | |
1124 unsigned int v89; // eax@158 | |
1125 int v90; // ST34_4@159 | |
1126 int v91; // eax@159 | |
1127 unsigned int v92; // eax@163 | |
1128 unsigned __int16 v95; // ax@181 | |
1129 unsigned __int16 v96; // ax@184 | |
1130 int v97; // eax@185 | |
1131 char v100; // ST18_1@198 | |
1132 int v102; // eax@198 | |
1133 signed int v106; // eax@208 | |
1134 unsigned int v107; // edx@220 | |
1135 signed int v108; // ebx@225 | |
1136 signed int v110; // ebx@234 | |
1137 unsigned __int16 v112; // ax@238 | |
1138 unsigned __int16 v113; // si@241 | |
1139 int v114; // eax@242 | |
1140 int v115; // eax@245 | |
1141 signed int v119; // ebx@251 | |
1142 unsigned __int16 v121; // ax@255 | |
1143 int v124; // eax@267 | |
1144 int v125; // [sp-20h] [bp-4Ch]@28 | |
1145 char v132; // [sp-8h] [bp-34h]@131 | |
1146 char v134; // [sp-4h] [bp-30h]@131 | |
1147 signed int v135; // [sp-4h] [bp-30h]@217 | |
1148 int v136; // [sp+Ch] [bp-20h]@208 | |
1149 int v137; // [sp+10h] [bp-1Ch]@208 | |
1150 signed int v138; // [sp+14h] [bp-18h]@207 | |
1151 signed int v139; // [sp+18h] [bp-14h]@208 | |
1152 signed int v141; // [sp+1Ch] [bp-10h]@117 | |
1153 unsigned int v142; // [sp+1Ch] [bp-10h]@158 | |
1154 signed int v143; // [sp+1Ch] [bp-10h]@172 | |
1155 signed int v146; // [sp+20h] [bp-Ch]@60 | |
1156 int v147; // [sp+20h] [bp-Ch]@72 | |
1157 signed int v148; // [sp+20h] [bp-Ch]@158 | |
1158 unsigned __int16 v150; // [sp+20h] [bp-Ch]@208 | |
1159 signed int v152; // [sp+24h] [bp-8h]@208 | |
1160 | |
1161 object = &pObjectList->pObjects[pSpriteObjects[uLayingItemID].uObjectDescID]; | |
1162 //v151 = PID_TYPE(a2); | |
1163 if (PID_TYPE(a2) == OBJECT_Actor) | |
1164 { | |
1165 if (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Actor | |
1166 && !pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].GetActorsRelation(&pActors[PID_ID(a2)])) | |
1167 return 1; | |
1168 } | |
1169 else | |
1170 { | |
1171 if (PID_TYPE(a2) == OBJECT_Player && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Player) | |
1172 return 1; | |
1173 } | |
1174 if (pParty->bTurnBasedModeOn == 1) | |
1175 { | |
1176 if (pSpriteObjects[uLayingItemID].uAttributes & 4) | |
1177 { | |
1178 --pTurnEngine->pending_actions; | |
1179 pSpriteObjects[uLayingItemID].uAttributes &= 0xFFFB; | |
1180 } | |
1181 } | |
1182 if (PID_TYPE(a2) == OBJECT_BModel && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) != OBJECT_Player) | |
1183 { | |
1184 if (PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid) < 500) //bugfix PID_ID(v2->spell_caster_pid)==1000 | |
1185 pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].uAttributes |= 0x40000; | |
1186 } | |
1187 | |
1188 //v6 = v2->uType; | |
1189 //v7 = v2->uType; | |
1190 | |
1191 switch (pSpriteObjects[uLayingItemID].uType) | |
1192 { | |
1193 | |
1194 case 1060: | |
1195 case 2030: | |
1196 case 9010: | |
1197 { | |
1198 //v9 = 0; | |
1199 if (PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2)) | |
1200 return 1; | |
1201 if (PID_TYPE(a2) != 2) | |
1202 { | |
1203 sub_43A97E(uLayingItemID, a2); | |
1204 ++pSpriteObjects[uLayingItemID].uType; | |
1205 v95 = 0; | |
1206 for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) | |
1207 { | |
1208 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) | |
1209 v95 = v52; | |
1210 } | |
1211 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
1212 if (!v95) | |
1213 SpriteObject::OnInteraction(uLayingItemID); | |
1214 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1215 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1216 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1217 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1218 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1219 v97 = 0; | |
1220 else | |
1221 v97 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1222 v124 = 8 * uLayingItemID; | |
1223 LOBYTE(v124) = v124 | 2; | |
1224 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1225 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
1226 return 0; | |
1227 } | |
1228 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
1229 v121 = 0; | |
1230 for (v119 = 0; v119 < (signed int)pObjectList->uNumObjects; ++v119) | |
1231 { | |
1232 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v119].uObjectID) | |
1233 v121 = v119; | |
1234 } | |
1235 pSpriteObjects[uLayingItemID].uObjectDescID = v121; | |
1236 if (!v121) | |
1237 SpriteObject::OnInteraction(uLayingItemID); | |
1238 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1239 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1240 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1241 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1242 v13 = 8 * uLayingItemID; | |
1243 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
1244 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
1245 return 0; | |
1246 } | |
1247 | |
1248 | |
1249 case 500: | |
1250 case 505: | |
1251 case 510: | |
1252 case 515: | |
1253 case 520: | |
1254 case 525: | |
1255 case 530: | |
1256 case 535: | |
1257 case 540: | |
1258 { | |
1259 sub_43A97E(uLayingItemID, a2); | |
1260 ++pSpriteObjects[uLayingItemID].uType; | |
1261 v12 = 0; | |
1262 for (v10 = 0; v10 < (signed int)pObjectList->uNumObjects; ++v10) | |
1263 { | |
1264 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v10].uObjectID) | |
1265 v12 = v10; | |
1266 } | |
1267 pSpriteObjects[uLayingItemID].uObjectDescID = v12; | |
1268 if (!v12) | |
1269 SpriteObject::OnInteraction(uLayingItemID); | |
1270 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1271 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1272 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1273 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1274 if (pSpriteObjects[uLayingItemID].uType == 555) | |
1275 { | |
1276 v13 = 8 * uLayingItemID; | |
1277 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
1278 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
1279 } | |
1280 return 0; | |
1281 } | |
1282 | |
1283 case 545: | |
1284 case 550: | |
1285 { | |
1286 if (pSpriteObjects[uLayingItemID].stru_24.uItemID != 405 && pSpriteObjects[uLayingItemID].stru_24.uSpecEnchantmentType != 3) | |
1287 { | |
1288 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1289 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1290 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1291 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1292 sub_43A97E(uLayingItemID, a2); | |
1293 SpriteObject::OnInteraction(uLayingItemID); | |
1294 if (pSpriteObjects[uLayingItemID].uSoundID == 0) | |
1295 v16 = 0; | |
1296 else | |
1297 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1298 v124 = 8 * uLayingItemID; | |
1299 LOBYTE(v124) = v124 | 2; | |
1300 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; | |
1301 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); | |
1302 return 0; | |
1303 } | |
1304 v18 = 0; | |
1305 pSpriteObjects[uLayingItemID].uType = 600; | |
1306 v22 = 0; | |
1307 for (v19 = 0; v19 < (signed int)pObjectList->uNumObjects; ++v19) | |
1308 { | |
1309 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v19].uObjectID) | |
1310 v22 = v19; | |
1311 } | |
1312 pSpriteObjects[uLayingItemID].uObjectDescID = v22; | |
1313 if (!v22) | |
1314 SpriteObject::OnInteraction(uLayingItemID); | |
1315 pSpriteObjects[uLayingItemID].vVelocity.z = v18; | |
1316 pSpriteObjects[uLayingItemID].vVelocity.y = v18; | |
1317 pSpriteObjects[uLayingItemID].vVelocity.x = v18; | |
1318 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; | |
1319 v12 = 0; | |
1320 for (v10; v10 < (signed int)v8; ++v10) | |
1321 { | |
1322 v11 += 56; | |
1323 if (pSpriteObjects[uLayingItemID].uType != *(short *)v11) | |
1324 v12 = v10; | |
1325 } | |
1326 pSpriteObjects[uLayingItemID].uObjectDescID = v12; | |
1327 if (!v12) | |
1328 SpriteObject::OnInteraction(uLayingItemID); | |
1329 v44 = pSpriteObjects[uLayingItemID].uType == 555; | |
1330 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1331 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1332 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1333 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1334 if (!v44) | |
1335 { | |
1336 v13 = 8 * uLayingItemID; | |
1337 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
1338 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
1339 return 0; | |
1340 } | |
1341 return 0; | |
1342 } | |
1343 | |
1344 case 600: | |
1345 { | |
1346 pSpriteObjects[uLayingItemID].uType = 601; | |
1347 v36 = 0; | |
1348 for (v34 = 0; v34 < (signed int)pObjectList->uNumObjects; ++v34) | |
1349 { | |
1350 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v34].uObjectID) | |
1351 v36 = v34; | |
1352 } | |
1353 pSpriteObjects[uLayingItemID].uObjectDescID = v36; | |
1354 if (!v36) | |
1355 SpriteObject::OnInteraction(uLayingItemID); | |
1356 v37 = pSpriteObjects[uLayingItemID].vPosition.z; | |
1357 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1358 v38 = 8 * uLayingItemID; | |
1359 v39 = pSpriteObjects[uLayingItemID].vPosition.y; | |
1360 LOBYTE(v38) = PID(OBJECT_Item, uLayingItemID); | |
1361 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1362 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1363 v40 = pSpriteObjects[uLayingItemID].vPosition.x; | |
1364 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1365 v147 = v38; | |
1366 AttackerInfo.Add(v38, 512, v40, v39, v37, 0, 0); | |
1367 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
1368 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
1369 pAudioPlayer->PlaySound(SOUND_8, v147, 0, -1, 0, 0, 0, 0); | |
1370 return 0; | |
1371 } | |
1372 | |
1373 case 1010: | |
1374 case 1100: | |
1375 case 2060: | |
1376 case 3010: | |
1377 case 3030: | |
1378 case 3060: | |
1379 case 4000: | |
1380 case 4030: | |
1381 case 4050: | |
1382 case 4100: | |
1383 case 6010: | |
1384 case 6090: | |
1385 { | |
1386 sub_43A97E(uLayingItemID, a2); | |
1387 ++pSpriteObjects[uLayingItemID].uType; | |
1388 v95 = 0; | |
1389 for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) | |
1390 { | |
1391 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) | |
1392 v95 = v52; | |
1393 } | |
1394 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
1395 if (!v95) | |
1396 SpriteObject::OnInteraction(uLayingItemID); | |
1397 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
1398 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1399 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1400 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1401 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1402 if (!v96) | |
1403 v97 = 0; | |
1404 else | |
1405 v97 = (signed __int16)v96 + 4; | |
1406 v124 = 8 * uLayingItemID; | |
1407 LOBYTE(v124) = v124 | 2; | |
1408 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1409 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
1410 return 0; | |
1411 } | |
1412 | |
1413 | |
1414 case 555: | |
1415 { | |
1416 sub_43A97E(uLayingItemID, a2); | |
1417 ++pSpriteObjects[uLayingItemID].uType; | |
1418 v18 = 0; | |
1419 v22 = 0; | |
1420 v25 = (char *)&pObjectList->pObjects->uObjectID; | |
1421 for (v24 = 0; v24 < (signed int)pObjectList->uNumObjects; ++v24) | |
1422 { | |
1423 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v24].uObjectID) | |
1424 v22 = v24; | |
1425 } | |
1426 pSpriteObjects[uLayingItemID].uObjectDescID = v22; | |
1427 if (v22 == v18) | |
1428 SpriteObject::OnInteraction(uLayingItemID); | |
1429 pSpriteObjects[uLayingItemID].vVelocity.z = v18; | |
1430 pSpriteObjects[uLayingItemID].vVelocity.y = v18; | |
1431 pSpriteObjects[uLayingItemID].vVelocity.x = v18; | |
1432 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; | |
1433 return 0; | |
1434 } | |
1435 | |
1436 case 3090: | |
1437 { | |
1438 //v9 = 0; | |
1439 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
1440 v63 = 0; | |
1441 for (v61 = 0; v61 < (signed int)pObjectList->uNumObjects; ++v61) | |
1442 { | |
1443 if (v59 == pObjectList->pObjects[v61].uObjectID) | |
1444 v63 = v61; | |
1445 } | |
1446 pSpriteObjects[uLayingItemID].uObjectDescID = v63; | |
1447 if (!v63) | |
1448 SpriteObject::OnInteraction(uLayingItemID); | |
1449 v64 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; | |
1450 v44 = pSpriteObjects[uLayingItemID].spell_skill == 4; | |
1451 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1452 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1453 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1454 v65 = 7; | |
1455 if (v44) | |
1456 v65 = 9; | |
1457 if (v65 > 0) | |
1458 { | |
1459 v141 = v65; | |
1460 do | |
1461 { | |
1462 v64 += (signed int)stru_5C6E00->uIntegerHalfPi / 2; | |
1463 pSpriteObjects[uLayingItemID].Create(v64, 0, 1000, 0); | |
1464 --v141; | |
1465 } while (v141); | |
1466 } | |
1467 SpriteObject::OnInteraction(uLayingItemID); | |
1468 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1469 v16 = 0; | |
1470 else | |
1471 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1472 v124 = 8 * uLayingItemID; | |
1473 LOBYTE(v124) = v124 | 2; | |
1474 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1475 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); | |
1476 return 0; | |
1477 } | |
1478 | |
1479 case 3092: | |
1480 { | |
1481 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType - 1; | |
1482 v58 = 0; | |
1483 for (v56 = 0; v56 < (signed int)pObjectList->uNumObjects; ++v56) | |
1484 { | |
1485 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v56].uObjectID) | |
1486 v58 = v56; | |
1487 } | |
1488 pSpriteObjects[uLayingItemID].uObjectDescID = v58; | |
1489 if (!v58) | |
1490 SpriteObject::OnInteraction(uLayingItemID); | |
1491 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1492 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1493 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1494 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1495 sub_43A97E(uLayingItemID, a2); | |
1496 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1497 v16 = 0; | |
1498 else | |
1499 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1500 v124 = 8 * uLayingItemID; | |
1501 LOBYTE(v124) = v124 | 2; | |
1502 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1503 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); | |
1504 return 0; | |
1505 } | |
1506 | |
1507 case 4070: | |
1508 { | |
1509 if (PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2)) | |
1510 return 1; | |
1511 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
1512 v71 = 0; | |
1513 for (v69 = 0; v69 < (signed int)pObjectList->uNumObjects; ++v69) | |
1514 { | |
1515 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v69].uObjectID) | |
1516 v71 = v69; | |
1517 } | |
1518 pSpriteObjects[uLayingItemID].uObjectDescID = v71; | |
1519 if (!v71) | |
1520 SpriteObject::OnInteraction(uLayingItemID); | |
1521 v134 = 0; | |
1522 v72 = uLayingItemID; | |
1523 v132 = 0; | |
1524 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1525 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1526 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1527 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1528 AttackerInfo.Add(PID(OBJECT_Item, v72), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); | |
1529 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1530 v78 = 0; | |
1531 else | |
1532 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1533 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1534 pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, 0, -1, 0, v78, 0, 0); | |
1535 return 0; | |
1536 } | |
1537 | |
1538 case 4090: | |
1539 { | |
1540 //v9 = 0; | |
1541 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
1542 v88 = 0; | |
1543 for (v86 = 0; v86 < (signed int)pObjectList->uNumObjects; ++v86) | |
1544 { | |
1545 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v86].uObjectID) | |
1546 v88 = v86; | |
1547 } | |
1548 pSpriteObjects[uLayingItemID].uObjectDescID = v88; | |
1549 if (!v88) | |
1550 SpriteObject::OnInteraction(uLayingItemID); | |
1551 v89 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; | |
1552 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1553 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1554 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1555 v142 = v89; | |
1556 v148 = 7; | |
1557 do | |
1558 { | |
1559 pRnd->SetRange(-128, 128); | |
1560 v90 = pRnd->GetInRange(); | |
1561 pRnd->SetRange(5, 500); | |
1562 v91 = pRnd->GetInRange(); | |
1563 v142 += (signed int)stru_5C6E00->uIntegerHalfPi >> 1; | |
1564 pSpriteObjects[uLayingItemID].Create(v90 + v142, 0, v91, 0); | |
1565 --v148; | |
1566 } while (v148); | |
1567 SpriteObject::OnInteraction(uLayingItemID); | |
1568 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1569 v16 = 0; | |
1570 else | |
1571 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1572 v124 = 8 * uLayingItemID; | |
1573 LOBYTE(v124) = v124 | 2; | |
1574 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1575 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); | |
1576 return 0; | |
1577 } | |
1578 | |
1579 case 4092: | |
1580 { | |
1581 pSpriteObjects[uLayingItemID].uType = 4091; | |
1582 v83 = 0; | |
1583 for (v81 = 0; v81 < (signed int)pObjectList->uNumObjects; ++v81) | |
1584 { | |
1585 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v81].uObjectID) | |
1586 v83 = v81; | |
1587 } | |
1588 pSpriteObjects[uLayingItemID].uObjectDescID = v83; | |
1589 if (!v83) | |
1590 SpriteObject::OnInteraction(uLayingItemID); | |
1591 v134 = 0; | |
1592 //v72 = uLayingItemID; | |
1593 v132 = pSpriteObjects[uLayingItemID].field_61; | |
1594 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1595 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1596 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1597 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1598 AttackerInfo.Add(PID(OBJECT_Item, uLayingItemID), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); | |
1599 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1600 v78 = 0; | |
1601 else | |
1602 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1603 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1604 pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, 0, -1, 0, v78, 0, 0); | |
1605 return 0; | |
1606 } | |
1607 | |
1608 case 8010: | |
1609 { | |
1610 if (PID_TYPE(a2) == 3 | |
1611 && MonsterStats::BelongsToSupertype(pActors[PID_ID(a2)].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD)) | |
1612 sub_43A97E(uLayingItemID, a2); | |
1613 ++pSpriteObjects[uLayingItemID].uType; | |
1614 //v9 = 0; | |
1615 v95 = 0; | |
1616 for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) | |
1617 { | |
1618 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) | |
1619 v95 = v52; | |
1620 } | |
1621 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
1622 if (!v95) | |
1623 SpriteObject::OnInteraction(uLayingItemID); | |
1624 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
1625 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1626 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1627 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1628 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1629 if (!v96) | |
1630 v97 = 0; | |
1631 else | |
1632 v97 = (signed __int16)v96 + 4; | |
1633 v92 = uLayingItemID; | |
1634 v124 = 8 * v92; | |
1635 LOBYTE(v124) = v124 | 2; | |
1636 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1637 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
1638 return 0; | |
1639 } | |
1640 | |
1641 case 7030: | |
1642 case 7090: | |
1643 case 8000: | |
1644 case 8090: | |
1645 { | |
1646 sub_43A97E(uLayingItemID, a2); | |
1647 ++pSpriteObjects[uLayingItemID].uType; | |
1648 v95 = 0; | |
1649 for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) | |
1650 { | |
1651 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) | |
1652 v95 = v52; | |
1653 } | |
1654 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
1655 if (!v95) | |
1656 SpriteObject::OnInteraction(uLayingItemID); | |
1657 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
1658 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1659 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1660 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1661 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1662 if (!v96) | |
1663 v97 = 0; | |
1664 else | |
1665 v97 = (signed __int16)v96 + 4; | |
1666 v124 = 8 * uLayingItemID; | |
1667 LOBYTE(v124) = v124 | 2; | |
1668 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1669 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
1670 return 0; | |
1671 } | |
1672 | |
1673 case 6040: | |
1674 case 8030: | |
1675 case 9030: | |
1676 { | |
1677 v143 = 17030; | |
1678 switch (pSpriteObjects[uLayingItemID].uType) | |
1679 { | |
1680 case 0x1798u: | |
1681 v143 = 15040; | |
1682 break; | |
1683 case 0xFAAu: | |
1684 v143 = 13010; | |
1685 break; | |
1686 case 0x2346u: | |
1687 v143 = 18030; | |
1688 break; | |
1689 } | |
1690 v138 = 1; | |
1691 if (PID_TYPE(a2) != OBJECT_Actor) | |
1692 { | |
1693 if (pSpriteObjects[uLayingItemID].uType != 9030 || pSpriteObjects[uLayingItemID].spell_skill != 4) | |
1694 { | |
1695 SpriteObject::OnInteraction(uLayingItemID); | |
1696 return 0; | |
1697 } | |
1698 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); | |
1699 if (!v138) | |
1700 { | |
1701 ++pSpriteObjects[uLayingItemID].uType; | |
1702 v112 = 0; | |
1703 for (v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110) | |
1704 { | |
1705 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID) | |
1706 v112 = v110; | |
1707 } | |
1708 pSpriteObjects[uLayingItemID].uObjectDescID = v112; | |
1709 if (!v112) | |
1710 SpriteObject::OnInteraction(uLayingItemID); | |
1711 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1712 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1713 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1714 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1715 v113 = pSpriteObjects[uLayingItemID].uSoundID; | |
1716 if (v113) | |
1717 v114 = (signed __int16)v113 + 4; | |
1718 else | |
1719 v114 = 0; | |
1720 v115 = 8 * uLayingItemID; | |
1721 LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); | |
1722 v125 = v143 + 1; | |
1723 pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); | |
1724 } | |
1725 else | |
1726 SpriteObject::OnInteraction(uLayingItemID); | |
1727 return 0; | |
1728 } | |
1729 v106 = a2; | |
1730 v150 = 0; | |
1731 v139 = PID_ID(v106); | |
1732 v137 = pSpriteObjects[uLayingItemID].spell_level; | |
1733 v152 = pSpriteObjects[uLayingItemID].spell_skill; | |
1734 v136 = pSpriteObjects[uLayingItemID].spell_id; | |
1735 if (pSpriteObjects[uLayingItemID].uType == 9030) | |
1736 { | |
1737 v150 = 2; | |
1738 if (v152 == 2) | |
1739 { | |
1740 v150 = 3; | |
1741 } | |
1742 else | |
1743 { | |
1744 if (v152 >= 3) | |
1745 v150 = 4; | |
1746 } | |
1747 pActors[v139].uAttributes |= 0x80000; | |
1748 v107 = v135; | |
1749 } | |
1750 if (pSpriteObjects[uLayingItemID].uType == 6040) | |
1751 { | |
1752 v135 = 7; | |
1753 v107 = v135; | |
1754 } | |
1755 else | |
1756 { | |
1757 if (pSpriteObjects[uLayingItemID].uType == 8030) | |
1758 { | |
1759 v135 = 9; | |
1760 v107 = v135; | |
1761 } | |
1762 else | |
1763 { | |
1764 if (pSpriteObjects[uLayingItemID].uType != 9030) | |
1765 { | |
1766 v107 = v136; | |
1767 } | |
1768 if (pSpriteObjects[uLayingItemID].uType == 9030) | |
1769 { | |
1770 v135 = 10; | |
1771 v107 = v135; | |
1772 } | |
1773 } | |
1774 } | |
1775 if (pSpriteObjects[uLayingItemID].uType != 9030 || v152 != 4) | |
1776 { | |
1777 v108 = v139; | |
1778 if (pActors[v139].DoesDmgTypeDoDamage((DAMAGE_TYPE)v107)) | |
1779 { | |
1780 v138 = 0; | |
1781 if (pSpriteObjects[uLayingItemID].uType == 8030) | |
1782 { | |
1783 pActors[v108].uAIState = Standing; | |
1784 pActors[v108].UpdateAnimation(); | |
1785 } | |
1786 pActors[v108].pActorBuffs[v136].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v137 << 7) * 0.033333335), | |
1787 v152, v150, 0, 0); | |
1788 } | |
1789 } | |
1790 else | |
1791 { | |
1792 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); | |
1793 } | |
1794 pSpriteObjects[uLayingItemID].spell_level = 0; | |
1795 pSpriteObjects[uLayingItemID].spell_skill = 0; | |
1796 pSpriteObjects[uLayingItemID].spell_id = 0; | |
1797 if (!v138) | |
1798 { | |
1799 ++pSpriteObjects[uLayingItemID].uType; | |
1800 v112 = 0; | |
1801 for (v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110) | |
1802 { | |
1803 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID) | |
1804 v112 = v110; | |
1805 } | |
1806 pSpriteObjects[uLayingItemID].uObjectDescID = v112; | |
1807 if (!v112) | |
1808 SpriteObject::OnInteraction(uLayingItemID); | |
1809 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1810 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1811 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1812 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1813 v113 = pSpriteObjects[uLayingItemID].uSoundID; | |
1814 if (v113) | |
1815 v114 = (signed __int16)v113 + 4; | |
1816 else | |
1817 v114 = 0; | |
1818 v115 = 8 * uLayingItemID; | |
1819 LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); | |
1820 v125 = v143 + 1; | |
1821 pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); | |
1822 } | |
1823 else | |
1824 SpriteObject::OnInteraction(uLayingItemID); | |
1825 return 0; | |
1826 } | |
1827 | |
1828 case 9040: | |
1829 { | |
1830 sub_43A97E(uLayingItemID, a2); | |
1831 ++pSpriteObjects[uLayingItemID].uType; | |
1832 v95 = 0; | |
1833 for (v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52) | |
1834 { | |
1835 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID) | |
1836 v95 = v52; | |
1837 } | |
1838 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
1839 if (!v95) | |
1840 SpriteObject::OnInteraction(uLayingItemID); | |
1841 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
1842 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1843 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1844 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1845 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1846 if (!v96) | |
1847 v97 = 0; | |
1848 else | |
1849 v97 = (signed __int16)v96 + 4; | |
1850 v124 = 8 * uLayingItemID; | |
1851 LOBYTE(v124) = v124 | 2; | |
1852 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1853 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
1854 return 0; | |
1855 } | |
1856 | |
1857 /* | |
1858 case 1080: | |
1859 case 2100: | |
1860 { | |
1861 if (PID_TYPE(a2) != 3) | |
1862 { | |
1863 //v32 = 0; | |
1864 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
1865 v46 = 0; | |
1866 for (v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146) | |
1867 { | |
1868 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID) | |
1869 v46 = v146; | |
1870 } | |
1871 pSpriteObjects[uLayingItemID].uObjectDescID = v46; | |
1872 if (!v46) | |
1873 SpriteObject::OnInteraction(uLayingItemID); | |
1874 v100 = pSpriteObjects[uLayingItemID].field_61; | |
1875 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1876 v102 = 8 * uLayingItemID; | |
1877 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
1878 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1879 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1880 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1881 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
1882 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
1883 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
1884 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1885 v47 = 0; | |
1886 else | |
1887 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1888 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1889 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
1890 return 0; | |
1891 } | |
1892 return 1; | |
1893 }*/ | |
1894 | |
1895 case 1080: | |
1896 case 2100: | |
1897 { | |
1898 if (PID_TYPE(a2) == 3) | |
1899 return 1; | |
1900 //else go to next case | |
1901 } | |
1902 | |
1903 case 1050: | |
1904 case 9080: | |
1905 { | |
1906 v95 = 0; | |
1907 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
1908 for (v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146) | |
1909 { | |
1910 if (pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID) | |
1911 v95 = v146; | |
1912 } | |
1913 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
1914 if (!v95) | |
1915 SpriteObject::OnInteraction(uLayingItemID); | |
1916 v100 = pSpriteObjects[uLayingItemID].field_61; | |
1917 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
1918 v102 = 8 * uLayingItemID; | |
1919 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
1920 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
1921 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
1922 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
1923 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
1924 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
1925 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
1926 if (!pSpriteObjects[uLayingItemID].uSoundID) | |
1927 v47 = 0; | |
1928 else | |
1929 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
1930 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
1931 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
1932 return 0; | |
1933 } | |
1934 | |
1935 default: | |
1936 return 0; | |
1937 } | |
1938 | |
1939 } | |
1940 | |
2464 | 1941 //----- (0043A97E) -------------------------------------------------------- |
1942 void __fastcall sub_43A97E(unsigned int uLayingItemID, signed int a2) | |
1943 { | |
1944 if (PID_TYPE(a2) == OBJECT_Player) | |
1945 { | |
1946 layingitem_vel_50FDFC.x = pSpriteObjects[uLayingItemID].vVelocity.x; | |
1947 layingitem_vel_50FDFC.y = pSpriteObjects[uLayingItemID].vVelocity.y; | |
1948 layingitem_vel_50FDFC.z = pSpriteObjects[uLayingItemID].vVelocity.z; | |
1949 | |
1950 Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z); | |
1951 DamagePlayerFromMonster(PID(OBJECT_Item, uLayingItemID), pSpriteObjects[uLayingItemID].field_61, &layingitem_vel_50FDFC, -1); | |
1952 } | |
1953 else if (PID_TYPE(a2) == OBJECT_Actor) | |
1954 { | |
1955 layingitem_vel_50FDFC.x = pSpriteObjects[uLayingItemID].vVelocity.x; | |
1956 layingitem_vel_50FDFC.y = pSpriteObjects[uLayingItemID].vVelocity.y; | |
1957 layingitem_vel_50FDFC.z = pSpriteObjects[uLayingItemID].vVelocity.z; | |
1958 | |
1959 Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z); | |
1960 switch (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid)) | |
1961 { | |
1962 case OBJECT_Actor: | |
1963 Actor::ActorDamageFromMonster(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC, pSpriteObjects[uLayingItemID].field_61); | |
1964 break; | |
1965 case OBJECT_Player: | |
1966 Actor::DamageMonsterFromParty(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC); | |
1967 break; | |
1968 case OBJECT_Item: | |
1969 ItemDamageFromActor(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC); | |
1970 break; | |
1971 } | |
1972 } | |
1973 } |