annotate stru10.cpp @ 1026:6afa77761a00

Слияние
author Ritor1
date Tue, 21 May 2013 12:43:08 +0600
parents 472ca68386d4
children 39eaa6b00141
rev   line source
676
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
1 #include <assert.h>
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
2
0
Ritor1
parents:
diff changeset
3 #include "stru10.h"
Ritor1
parents:
diff changeset
4 #include "Render.h"
Ritor1
parents:
diff changeset
5 #include "Indoor.h"
Ritor1
parents:
diff changeset
6 #include "Game.h"
Ritor1
parents:
diff changeset
7 #include "Party.h"
Ritor1
parents:
diff changeset
8
Ritor1
parents:
diff changeset
9 #include "mm7_data.h"
Ritor1
parents:
diff changeset
10
Ritor1
parents:
diff changeset
11
Ritor1
parents:
diff changeset
12
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
13 int _49CE9E_sub0_x(RenderVertexSoft *pVertices, unsigned int uNumVertices, float test_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
14 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
15 float max_val = FLT_MAX;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
16 int idx = -1;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
17
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
18 float temp_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
19 for (uint i = 0; i < uNumVertices; ++i)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
20 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
21 if (pVertices[i].vWorldPosition.x <= test_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
22 temp_val = test_val - pVertices[i].vWorldPosition.x;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
23 else
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
24 temp_val = pVertices[i].vWorldPosition.x - test_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
25
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
26 if (temp_val < max_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
27 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
28 max_val = temp_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
29 idx = i;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
30 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
31 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
32 return idx;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
33 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
34
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
35
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
36 int _49CE9E_sub0_y(RenderVertexSoft *pVertices, unsigned int uNumVertices, float test_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
37 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
38 float max_val = FLT_MAX;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
39 int idx = -1;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
40
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
41 float temp_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
42 for (uint i = 0; i < uNumVertices; ++i)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
43 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
44 if (pVertices[i].vWorldPosition.y <= test_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
45 temp_val = test_val - pVertices[i].vWorldPosition.y;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
46 else
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
47 temp_val = pVertices[i].vWorldPosition.y - test_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
48
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
49 if (temp_val < max_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
50 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
51 max_val = temp_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
52 idx = i;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
53 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
54 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
55 return idx;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
56 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
57
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
58
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
59 int _49CE9E_sub0_z(RenderVertexSoft *pVertices, unsigned int uNumVertices, float test_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
60 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
61 float max_val = FLT_MAX;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
62 int idx = -1;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
63
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
64 float temp_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
65 for (uint i = 0; i < uNumVertices; ++i)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
66 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
67 if (pVertices[i].vWorldPosition.z <= test_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
68 temp_val = test_val - pVertices[i].vWorldPosition.z;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
69 else
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
70 temp_val = pVertices[i].vWorldPosition.z - test_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
71
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
72 if (temp_val < max_val)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
73 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
74 max_val = temp_val;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
75 idx = i;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
76 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
77 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
78 return idx;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
79 }
0
Ritor1
parents:
diff changeset
80
Ritor1
parents:
diff changeset
81 //----- (0049CE9E) --------------------------------------------------------
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
82 void stru10::_49CE9E(BLVFace *pFace, RenderVertexSoft *pVertices, unsigned int uNumVertices, RenderVertexSoft *pOutLimits)
0
Ritor1
parents:
diff changeset
83 {
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
84 assert(sizeof(RenderVertexSoft) == 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
85
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
86 RenderVertexSoft pLimits[64];
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
87 stru10::CalcPolygonLimits(pFace, pLimits);
0
Ritor1
parents:
diff changeset
88
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
89 if (pFace->uAttributes & FACE_XY_PLANE)
0
Ritor1
parents:
diff changeset
90 {
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
91 memcpy(&pOutLimits[0], &pVertices[_49CE9E_sub0_x(pVertices, uNumVertices, pLimits[0].vWorldPosition.x)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
92 memcpy(&pOutLimits[2], &pVertices[_49CE9E_sub0_x(pVertices, uNumVertices, pLimits[2].vWorldPosition.x)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
93 memcpy(&pOutLimits[1], &pVertices[_49CE9E_sub0_y(pVertices, uNumVertices, pLimits[1].vWorldPosition.y)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
94 memcpy(&pOutLimits[3], &pVertices[_49CE9E_sub0_y(pVertices, uNumVertices, pLimits[3].vWorldPosition.y)], 0x30);
0
Ritor1
parents:
diff changeset
95 }
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
96 else if (pFace->uAttributes & FACE_XZ_PLANE)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
97 {
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
98 memcpy(&pOutLimits[0], &pVertices[_49CE9E_sub0_x(pVertices, uNumVertices, pLimits[0].vWorldPosition.x)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
99 memcpy(&pOutLimits[2], &pVertices[_49CE9E_sub0_x(pVertices, uNumVertices, pLimits[2].vWorldPosition.x)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
100 memcpy(&pOutLimits[1], &pVertices[_49CE9E_sub0_z(pVertices, uNumVertices, pLimits[1].vWorldPosition.z)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
101 memcpy(&pOutLimits[3], &pVertices[_49CE9E_sub0_z(pVertices, uNumVertices, pLimits[3].vWorldPosition.z)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
102 }
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
103 else if (pFace->uAttributes & FACE_YZ_PLANE)
0
Ritor1
parents:
diff changeset
104 {
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
105 memcpy(&pOutLimits[0], &pVertices[_49CE9E_sub0_y(pVertices, uNumVertices, pLimits[0].vWorldPosition.y)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
106 memcpy(&pOutLimits[2], &pVertices[_49CE9E_sub0_y(pVertices, uNumVertices, pLimits[2].vWorldPosition.y)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
107 memcpy(&pOutLimits[1], &pVertices[_49CE9E_sub0_z(pVertices, uNumVertices, pLimits[1].vWorldPosition.z)], 0x30);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
108 memcpy(&pOutLimits[3], &pVertices[_49CE9E_sub0_z(pVertices, uNumVertices, pLimits[3].vWorldPosition.z)], 0x30);
0
Ritor1
parents:
diff changeset
109 }
Ritor1
parents:
diff changeset
110 }
Ritor1
parents:
diff changeset
111
Ritor1
parents:
diff changeset
112 //----- (0049D379) --------------------------------------------------------
794
Nomad
parents: 686
diff changeset
113 void stru10::CalcPolygonLimits(BLVFace *pFace, RenderVertexSoft *pOutVertices)
0
Ritor1
parents:
diff changeset
114 {
Ritor1
parents:
diff changeset
115 struct
Ritor1
parents:
diff changeset
116 {
Ritor1
parents:
diff changeset
117 float x;
Ritor1
parents:
diff changeset
118 float y;
Ritor1
parents:
diff changeset
119 int c;
Ritor1
parents:
diff changeset
120 } v46[40]; //[sp+0C];
Ritor1
parents:
diff changeset
121
Ritor1
parents:
diff changeset
122 if (pFace->uAttributes & 0x0100)
Ritor1
parents:
diff changeset
123 {
Ritor1
parents:
diff changeset
124 for (uint i = 0; i < pFace->uNumVertices; ++i)
Ritor1
parents:
diff changeset
125 {
Ritor1
parents:
diff changeset
126 v46[i].x = pIndoor->pVertices[pFace->pVertexIDs[i]].x + pFace->pXInterceptDisplacements[i];
Ritor1
parents:
diff changeset
127 v46[i].y = pIndoor->pVertices[pFace->pVertexIDs[i]].y + pFace->pYInterceptDisplacements[i];
Ritor1
parents:
diff changeset
128 v46[i].c = i;
Ritor1
parents:
diff changeset
129 }
Ritor1
parents:
diff changeset
130 }
Ritor1
parents:
diff changeset
131 if (pFace->uAttributes & 0x0200)
Ritor1
parents:
diff changeset
132 {
Ritor1
parents:
diff changeset
133 for (uint i = 0; i < pFace->uNumVertices; ++i)
Ritor1
parents:
diff changeset
134 {
Ritor1
parents:
diff changeset
135 v46[i].x = pIndoor->pVertices[pFace->pVertexIDs[i]].x + pFace->pXInterceptDisplacements[i];
676
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
136 v46[i].y = pIndoor->pVertices[pFace->pVertexIDs[i]].z + pFace->pZInterceptDisplacements[i];
0
Ritor1
parents:
diff changeset
137 v46[i].c = i;
Ritor1
parents:
diff changeset
138 }
Ritor1
parents:
diff changeset
139 }
Ritor1
parents:
diff changeset
140 if (pFace->uAttributes & 0x0400)
Ritor1
parents:
diff changeset
141 {
Ritor1
parents:
diff changeset
142 for (uint i = 0; i < pFace->uNumVertices; ++i)
Ritor1
parents:
diff changeset
143 {
676
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
144 v46[i].x = pIndoor->pVertices[pFace->pVertexIDs[i]].y + pFace->pYInterceptDisplacements[i];
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
145 v46[i].y = pIndoor->pVertices[pFace->pVertexIDs[i]].z + pFace->pZInterceptDisplacements[i];
0
Ritor1
parents:
diff changeset
146 v46[i].c = i;
Ritor1
parents:
diff changeset
147 }
Ritor1
parents:
diff changeset
148 }
Ritor1
parents:
diff changeset
149
Ritor1
parents:
diff changeset
150 float x_min = FLT_MAX;
Ritor1
parents:
diff changeset
151 uint x_min_idx = 0;
Ritor1
parents:
diff changeset
152
Ritor1
parents:
diff changeset
153 float x_max = FLT_MIN;
Ritor1
parents:
diff changeset
154 uint x_max_idx = 0;
Ritor1
parents:
diff changeset
155
Ritor1
parents:
diff changeset
156 float y_min = FLT_MAX;
Ritor1
parents:
diff changeset
157 uint y_min_idx = 0;
Ritor1
parents:
diff changeset
158
Ritor1
parents:
diff changeset
159 float y_max = FLT_MIN;
Ritor1
parents:
diff changeset
160 uint y_max_idx = 0;
Ritor1
parents:
diff changeset
161
Ritor1
parents:
diff changeset
162 for (uint i = 0; i < pFace->uNumVertices; ++i)
Ritor1
parents:
diff changeset
163 {
Ritor1
parents:
diff changeset
164 if (v46[i].x < x_min)
Ritor1
parents:
diff changeset
165 {
Ritor1
parents:
diff changeset
166 x_min = v46[i].x;
Ritor1
parents:
diff changeset
167 x_min_idx = v46[i].c;
Ritor1
parents:
diff changeset
168 }
Ritor1
parents:
diff changeset
169 if (v46[i].x > x_max)
Ritor1
parents:
diff changeset
170 {
Ritor1
parents:
diff changeset
171 x_max = v46[i].x;
Ritor1
parents:
diff changeset
172 x_max_idx = v46[i].c;
Ritor1
parents:
diff changeset
173 }
Ritor1
parents:
diff changeset
174
Ritor1
parents:
diff changeset
175 if (v46[i].y < y_min)
Ritor1
parents:
diff changeset
176 {
Ritor1
parents:
diff changeset
177 y_min = v46[i].y;
Ritor1
parents:
diff changeset
178 y_min_idx = v46[i].c;
Ritor1
parents:
diff changeset
179 }
Ritor1
parents:
diff changeset
180 if (v46[i].y > y_max)
Ritor1
parents:
diff changeset
181 {
Ritor1
parents:
diff changeset
182 y_max = v46[i].y;
Ritor1
parents:
diff changeset
183 y_max_idx = v46[i].c;
Ritor1
parents:
diff changeset
184 }
Ritor1
parents:
diff changeset
185 }
Ritor1
parents:
diff changeset
186
Ritor1
parents:
diff changeset
187
Ritor1
parents:
diff changeset
188
Ritor1
parents:
diff changeset
189 auto p1 = &pIndoor->pVertices[pFace->pVertexIDs[x_min_idx]];
Ritor1
parents:
diff changeset
190 RenderVertexSoft v1; // [sp+30Ch] [bp-54h]@24
Ritor1
parents:
diff changeset
191 v1.vWorldPosition.x = (float)p1->x;
Ritor1
parents:
diff changeset
192 v1.vWorldPosition.y = (float)p1->y;
Ritor1
parents:
diff changeset
193 v1.vWorldPosition.z = (float)p1->z;
Ritor1
parents:
diff changeset
194 memcpy(pOutVertices + 0, &v1, sizeof(RenderVertexSoft));
Ritor1
parents:
diff changeset
195
Ritor1
parents:
diff changeset
196 auto p2 = &pIndoor->pVertices[pFace->pVertexIDs[y_min_idx]];
Ritor1
parents:
diff changeset
197 RenderVertexSoft v2; // [sp+30Ch] [bp-54h]@24
Ritor1
parents:
diff changeset
198 v2.vWorldPosition.x = (float)p2->x;
Ritor1
parents:
diff changeset
199 v2.vWorldPosition.y = (float)p2->y;
Ritor1
parents:
diff changeset
200 v2.vWorldPosition.z = (float)p2->z;
Ritor1
parents:
diff changeset
201 memcpy(pOutVertices + 1, &v2, sizeof(RenderVertexSoft));
Ritor1
parents:
diff changeset
202
Ritor1
parents:
diff changeset
203 auto p3 = &pIndoor->pVertices[pFace->pVertexIDs[x_max_idx]];
Ritor1
parents:
diff changeset
204 RenderVertexSoft v3; // [sp+30Ch] [bp-54h]@24
Ritor1
parents:
diff changeset
205 v3.vWorldPosition.x = (float)p3->x;
Ritor1
parents:
diff changeset
206 v3.vWorldPosition.y = (float)p3->y;
Ritor1
parents:
diff changeset
207 v3.vWorldPosition.z = (float)p3->z;
Ritor1
parents:
diff changeset
208 memcpy(pOutVertices + 2, &v3, sizeof(RenderVertexSoft));
Ritor1
parents:
diff changeset
209
Ritor1
parents:
diff changeset
210 auto p4 = &pIndoor->pVertices[pFace->pVertexIDs[y_max_idx]];
Ritor1
parents:
diff changeset
211 RenderVertexSoft v4; // [sp+30Ch] [bp-54h]@24
Ritor1
parents:
diff changeset
212 v4.vWorldPosition.x = (double)p4->x;
Ritor1
parents:
diff changeset
213 v4.vWorldPosition.y = (double)p4->y;
Ritor1
parents:
diff changeset
214 v4.vWorldPosition.z = (double)p4->z;
Ritor1
parents:
diff changeset
215 memcpy(pOutVertices + 3, &v4, sizeof(RenderVertexSoft));
Ritor1
parents:
diff changeset
216 }
Ritor1
parents:
diff changeset
217
Ritor1
parents:
diff changeset
218
Ritor1
parents:
diff changeset
219 //----- (0049C9E3) --------------------------------------------------------
794
Nomad
parents: 686
diff changeset
220 bool stru10::CalcFaceBounding(BLVFace *pFace, RenderVertexSoft *pFaceLimits, unsigned int uNumVertices, RenderVertexSoft *pOutBounding)
0
Ritor1
parents:
diff changeset
221 {
Ritor1
parents:
diff changeset
222 //IndoorCameraD3D *v6; // edi@1
Ritor1
parents:
diff changeset
223 //PolygonType v7; // al@1
Ritor1
parents:
diff changeset
224 //unsigned int v8; // edx@7
Ritor1
parents:
diff changeset
225 //char v10; // zf@10
Ritor1
parents:
diff changeset
226 //float v13; // ST14_4@20
Ritor1
parents:
diff changeset
227 //stru10 *v15; // ecx@21
Ritor1
parents:
diff changeset
228 //RenderVertexSoft *v16; // ST0C_4@21
Ritor1
parents:
diff changeset
229 //bool result; // eax@21
Ritor1
parents:
diff changeset
230 //float v18; // ST14_4@24
Ritor1
parents:
diff changeset
231 //stru10 *v19; // edi@29
Ritor1
parents:
diff changeset
232 //float v20; // ST14_4@30
Ritor1
parents:
diff changeset
233 //float v21; // ST14_4@30
Ritor1
parents:
diff changeset
234 //float v22; // ST14_4@30
Ritor1
parents:
diff changeset
235 //float v23; // ST14_4@30
Ritor1
parents:
diff changeset
236 //float v24; // ST14_4@31
Ritor1
parents:
diff changeset
237 //RenderVertexSoft v25; // [sp+10h] [bp-90h]@24
Ritor1
parents:
diff changeset
238 //RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
Ritor1
parents:
diff changeset
239 //IndoorCameraD3D *thisa; // [sp+70h] [bp-30h]@1
Ritor1
parents:
diff changeset
240 //stru10 *v31; // [sp+84h] [bp-1Ch]@1
794
Nomad
parents: 686
diff changeset
241 //float v32; // [sp+88h] [bp-18h]@8
0
Ritor1
parents:
diff changeset
242 Vec3_float_ a1; // [sp+8Ch] [bp-14h]@1
794
Nomad
parents: 686
diff changeset
243 //float v35; // [sp+9Ch] [bp-4h]@8
0
Ritor1
parents:
diff changeset
244
Ritor1
parents:
diff changeset
245 //auto a3 = pFace;
Ritor1
parents:
diff changeset
246 //auto arg4 = pFaceBounding;
Ritor1
parents:
diff changeset
247
Ritor1
parents:
diff changeset
248 //_ESI = a3;
Ritor1
parents:
diff changeset
249 //v31 = this;
Ritor1
parents:
diff changeset
250 //v6 = pGame->pIndoorCameraD3D;
Ritor1
parents:
diff changeset
251 //v7 = a3->uPolygonType;
Ritor1
parents:
diff changeset
252
Ritor1
parents:
diff changeset
253 a1.x = 0.0f;
Ritor1
parents:
diff changeset
254 a1.y = 0.0f;
Ritor1
parents:
diff changeset
255 a1.z = 0.0f;
Ritor1
parents:
diff changeset
256
Ritor1
parents:
diff changeset
257 float var_28;
Ritor1
parents:
diff changeset
258 float var_24;
794
Nomad
parents: 686
diff changeset
259 switch (pFace->uPolygonType)
0
Ritor1
parents:
diff changeset
260 {
794
Nomad
parents: 686
diff changeset
261 case POLYGON_VerticalWall:
Nomad
parents: 686
diff changeset
262 a1.x = -pFace->pFacePlane.vNormal.y;
Nomad
parents: 686
diff changeset
263 a1.y = pFace->pFacePlane.vNormal.x;
Nomad
parents: 686
diff changeset
264 a1.z = 0.0f;
Nomad
parents: 686
diff changeset
265 a1.Normalize();
Nomad
parents: 686
diff changeset
266
Nomad
parents: 686
diff changeset
267 var_28 = 0;
Nomad
parents: 686
diff changeset
268 var_24 = 1;
Nomad
parents: 686
diff changeset
269 break;
0
Ritor1
parents:
diff changeset
270
794
Nomad
parents: 686
diff changeset
271 case POLYGON_Floor:
Nomad
parents: 686
diff changeset
272 case POLYGON_Ceiling:
Nomad
parents: 686
diff changeset
273 a1.x = 1;
Nomad
parents: 686
diff changeset
274 a1.y = 0;
Nomad
parents: 686
diff changeset
275 a1.z = 0.0f;
Nomad
parents: 686
diff changeset
276
Nomad
parents: 686
diff changeset
277 var_28 = 1;
Nomad
parents: 686
diff changeset
278 var_24 = 0;
Nomad
parents: 686
diff changeset
279 break;
Nomad
parents: 686
diff changeset
280
Nomad
parents: 686
diff changeset
281 default:
Nomad
parents: 686
diff changeset
282 assert(false);
0
Ritor1
parents:
diff changeset
283 }
Ritor1
parents:
diff changeset
284
Ritor1
parents:
diff changeset
285
794
Nomad
parents: 686
diff changeset
286 float face_center_x;
Nomad
parents: 686
diff changeset
287 float face_center_y;
Nomad
parents: 686
diff changeset
288 float face_center_z;
0
Ritor1
parents:
diff changeset
289 float a3;
Ritor1
parents:
diff changeset
290 float var_8;
794
Nomad
parents: 686
diff changeset
291
0
Ritor1
parents:
diff changeset
292 if (pFace->uAttributes & 0x0100)
Ritor1
parents:
diff changeset
293 {
794
Nomad
parents: 686
diff changeset
294 face_center_x = (pFaceLimits[0].vWorldPosition.x + pFaceLimits[2].vWorldPosition.x) / 2;
Nomad
parents: 686
diff changeset
295 face_center_y = (pFaceLimits[3].vWorldPosition.y + pFaceLimits[1].vWorldPosition.y) / 2;
Nomad
parents: 686
diff changeset
296 face_center_z = (pFaceLimits[0].vWorldPosition.z + pFaceLimits[2].vWorldPosition.z) / 2;
676
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
297
794
Nomad
parents: 686
diff changeset
298 a3 = face_center_x - pFaceLimits[0].vWorldPosition.x;
Nomad
parents: 686
diff changeset
299 var_8 = face_center_y - pFaceLimits[1].vWorldPosition.y;
0
Ritor1
parents:
diff changeset
300 }
Ritor1
parents:
diff changeset
301 if (pFace->uAttributes & 0x0200)
Ritor1
parents:
diff changeset
302 {
794
Nomad
parents: 686
diff changeset
303 face_center_x = (pFaceLimits[0].vWorldPosition.x + pFaceLimits[2].vWorldPosition.x) / 2;
Nomad
parents: 686
diff changeset
304 face_center_y = (pFaceLimits[0].vWorldPosition.y + pFaceLimits[2].vWorldPosition.y) / 2;
Nomad
parents: 686
diff changeset
305 face_center_z = (pFaceLimits[1].vWorldPosition.z + pFaceLimits[3].vWorldPosition.z) / 2;
0
Ritor1
parents:
diff changeset
306
794
Nomad
parents: 686
diff changeset
307 a3 = face_center_x - pFaceLimits[0].vWorldPosition.x;
Nomad
parents: 686
diff changeset
308 var_8 = face_center_z - pFaceLimits[1].vWorldPosition.z;
0
Ritor1
parents:
diff changeset
309
Ritor1
parents:
diff changeset
310 if (pFace->uPolygonType == POLYGON_VerticalWall)
Ritor1
parents:
diff changeset
311 a3 /= a1.x;
Ritor1
parents:
diff changeset
312 }
Ritor1
parents:
diff changeset
313 if (pFace->uAttributes & 0x0400)
Ritor1
parents:
diff changeset
314 {
794
Nomad
parents: 686
diff changeset
315 face_center_x = (pFaceLimits[0].vWorldPosition.x + pFaceLimits[2].vWorldPosition.x) / 2;
Nomad
parents: 686
diff changeset
316 face_center_y = (pFaceLimits[0].vWorldPosition.y + pFaceLimits[2].vWorldPosition.y) / 2;
Nomad
parents: 686
diff changeset
317 face_center_z = (pFaceLimits[1].vWorldPosition.z + pFaceLimits[3].vWorldPosition.z) / 2;
0
Ritor1
parents:
diff changeset
318
794
Nomad
parents: 686
diff changeset
319 a3 = face_center_y - pFaceLimits[0].vWorldPosition.y;
Nomad
parents: 686
diff changeset
320 var_8 = face_center_z - pFaceLimits[1].vWorldPosition.z;
0
Ritor1
parents:
diff changeset
321 // [0.5]
Ritor1
parents:
diff changeset
322 if (pFace->uPolygonType == POLYGON_VerticalWall)
Ritor1
parents:
diff changeset
323 {
Ritor1
parents:
diff changeset
324 if (a1.x != 1.0f)
Ritor1
parents:
diff changeset
325 a3 /= a1.y;
Ritor1
parents:
diff changeset
326 }
Ritor1
parents:
diff changeset
327 }
Ritor1
parents:
diff changeset
328
Ritor1
parents:
diff changeset
329
Ritor1
parents:
diff changeset
330
Ritor1
parents:
diff changeset
331
Ritor1
parents:
diff changeset
332 //_EBX = arg0;
Ritor1
parents:
diff changeset
333 //v15 = v31;
Ritor1
parents:
diff changeset
334 //v16 = arg0;
678
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
335 //float var_20 = var_8 * var_24;
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
336 //var_8 = a3 * a1.z;
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
337 //float arg_0 = var_8 + var_4;
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
338
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
339 /*
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
340
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
341
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
342
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
343 .text:0049CBB3 fld [ebp+var_8] 0 var8
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
344 .text:0049CBB6 1 fmul ds:flt_4D84E8 0 var8 * flt_4D84E8
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
345
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
346 .text:0049CBBC 1 fld [ebp+var_8] 0 var8
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
347 1 var8 * flt_4D84E8
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
348
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
349 .text:0049CBBF 2 fmul [ebp+var_28] 0 var8 * var28
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
350 1 var8 * flt_4D84E8
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
351
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
352 .text:0049CBC2 2 fld [ebp+var_8] 0 var8
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
353 1 var8 * var28
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
354 2 var8 * flt_4D84E8
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
355
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
356 .text:0049CBC5 3 fmul [ebp+var_24] 0 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
357 1 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
358 2 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
359
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
360 .text:0049CBD5 3 fst [ebp+var_20] 0 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
361 1 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
362 2 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
363 [var20] var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
364
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
365 .text:0049CBD8 3 fld [ebp+a3] 0 a3 -1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
366 1 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
367 2 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
368 3 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
369
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
370 .text:0049CBDB 4 fmul [ebp+a1.x] 0 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
371 1 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
372 2 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
373 3 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
374
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
375 .text:0049CBDE 4 fld [ebp+a3] 0 a3
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
376 1 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
377 2 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
378 3 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
379 4 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
380
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
381 .text:0049CBE1 5 fmul [ebp+a1.y] 0 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
382 1 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
383 2 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
384 3 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
385 4 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
386 .text:0049CBE4 5 fld [ebp+a3]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
387 .text:0049CBE7 6 fmul [ebp+a1.z] 0 a3 * a1.z 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
388 1 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
389 2 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
390 3 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
391 4 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
392 5 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
393
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
394 .text:0049CBEC 6 fstp [ebp+var_8]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
395 var8 <- a3 * a1.z 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
396
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
397 .text:0049CBEF 5 fld [ebp+arg4] 0 arg4 -1700
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
398 1 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
399 2 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
400 3 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
401 4 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
402 5 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
403
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
404 .text:0049CBF2 6 fsub st, st(2) 0 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
405 1 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
406 2 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
407 3 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
408 4 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
409 5 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
410
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
411 .text:0049CBF4 6 fld st 0 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
412 1 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
413 2 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
414 3 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
415 4 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
416 5 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
417 6 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
418
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
419 .text:0049CBF6 7 fadd st, st(6) 0 arg4 - a3 * a1.x + var8 * flt_4D84E8 -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
420 1 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
421 2 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
422 3 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
423 4 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
424 5 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
425 6 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
426 .text:0049CBF8 7 fstp dword ptr [ebx]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
427 [0].x <- arg4 - a3 * a1.x + var8 * flt_4D84E8 -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
428
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
429 .text:0049CBFA 6 fld [ebp+var_18] 0 var18 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
430 1 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
431 2 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
432 3 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
433 4 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
434 5 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
435 6 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
436
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
437 .text:0049CBFD 7 fsub st, st(2) 0 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
438 1 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
439 2 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
440 3 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
441 4 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
442 5 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
443 6 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
444
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
445 .text:0049CBFF 7 fld st 0 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
446 1 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
447 2 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
448 3 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
449 4 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
450 5 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
451 6 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
452 7 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
453
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
454 .text:0049CC01 8 fadd st, st(6) 0 var18 - a3 * a1.y + var8 * var28 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
455 1 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
456 2 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
457 3 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
458 4 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
459 5 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
460 6 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
461 7 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
462
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
463 .text:0049CC03 8 fstp dword ptr [ebx+4]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
464 [0].y <- var18 - a3 * a1.y + var8 * var28 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
465
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
466 .text:0049CC06 7 fld [ebp+var_4]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
467 .text:0049CC09 8 fsub [ebp+var_8] 0 var4 - a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
468 1 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
469 2 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
470 3 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
471 4 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
472 5 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
473 6 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
474 7 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
475 .text:0049CC0C 8 fst [ebp+a3]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
476 a3 <- var4 - a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
477
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
478 .text:0049CC0F 8 fadd st, st(5)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
479 .text:0049CC11 8 fstp dword ptr [ebx+8]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
480 [0].z <- var4 - a3 * a1.z + var8 * var24 1536
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
481
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
482 0 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
483 1 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
484 2 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
485 3 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
486 4 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
487 5 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
488 6 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
489
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
490
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
491
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
492
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
493 [var20] var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
494 [var8] a3 * a1.z
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
495 [a3] var4 - a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
496
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
497
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
498 .text:0049CC14 7 fld st(1)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
499 .text:0049CC16 8 fsub st, st(7) 0 arg4 - a3 * a1.x - var8 * flt_4D84E8 -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
500 1 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
501 2 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
502 3 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
503 4 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
504 5 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
505 6 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
506 7 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
507 .text:0049CC18 8 fstp dword ptr [ebx+30h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
508 [1].x <- arg4 - a3 * a1.x - var8 * flt_4D84E8 -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
509
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
510 0 var18 - a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
511 1 arg4 - a3 * a1.x -3684
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
512 2 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
513 3 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
514 4 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
515 5 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
516 6 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
517 .text:0049CC1B 7 fsub st, st(5)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
518 .text:0049CC1D 7 fstp dword ptr [ebx+34h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
519 [1].y <- var18 - a3 * a1.y - var8 * var28 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
520 .text:0049CC20 6 fstp st
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
521 0 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
522 1 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
523 2 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
524 3 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
525 4 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
526
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
527
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
528 [var20] var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
529 [var8] a3 * a1.z
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
530 [a3] var4 - a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
531
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
532 .text:0049CC22 5 fld [ebp+a3] 0 var4 - a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
533 1 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
534 2 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
535 3 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
536 4 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
537 5 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
538 .text:0049CC25 6 fsub st, st(3)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
539 .text:0049CC27 6 fstp dword ptr [ebx+38h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
540 [1].z <- var4 - a3 * a1.z - var8 * var24 768 - 768 = 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
541
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
542 0 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
543 1 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
544 2 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
545 3 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
546 4 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
547
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
548
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
549 .text:0049CC2A fld st(1)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
550 .text:0049CC2C 6 fadd [ebp+arg4] 0 arg4 + a3 * a1.x 284
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
551 1 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
552 2 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
553 3 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
554 4 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
555 5 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
556 .text:0049CC2F 6 fst [ebp+a3]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
557
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
558 [var20] var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
559 [var8] a3 * a1.z
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
560 [a3] arg4 + a3 * a1.x 284
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
561 .text:0049CC32 6 fsub st, st(5)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
562 .text:0049CC34 6 fstp dword ptr [ebx+60h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
563 [2].x <- arg4 + a3 * a1.x - var8 * flt_4D84E8 284
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
564
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
565 0 a3 * a1.y 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
566 1 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
567 2 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
568 3 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
569 4 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
570
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
571 .text:0049CC37 5 fadd [ebp+var_18] 0 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
572 1 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
573 2 var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
574 3 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
575 4 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
576
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
577 .text:0049CC3A 5 fstp st(2) 0 a3 * a1.x 1984
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
578 1 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
579 2 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
580 3 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
581
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
582 .text:0049CC3C 4 fstp st 0 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
583 1 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
584 2 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
585
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
586 .text:0049CC3E 3 fld st 0 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
587 1 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
588 2 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
589 3 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
590 .text:0049CC40 4 fsub st, st(2)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
591 .text:0049CC42 4 fstp dword ptr [ebx+64h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
592 [2].y <- var18 + a3 * a1.y - var8 * var28 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
593
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
594 0 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
595 1 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
596 2 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
597
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
598 [var20] var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
599 [var8] a3 * a1.z
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
600 [a3] arg4 + a3 * a1.x 284
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
601 .text:0049CC45 3 fld [ebp+var_8]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
602 .text:0049CC48 4 fadd [ebp+var_4] 0 var4 + a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
603 1 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
604 2 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
605 3 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
606
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
607 .text:0049CC4B 4 fst [ebp+arg0]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
608 [var20] var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
609 [arg0] var4 + a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
610 [var8] a3 * a1.z 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
611 [a3] arg4 + a3 * a1.x 284
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
612
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
613 .text:0049CC4E 4 fsub [ebp+var_20]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
614 .text:0049CC51 4 fstp dword ptr [ebx+68h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
615 [2].z <- var4 + a3 * a1.z - var8 * var24 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
616
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
617
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
618
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
619 [var20] var8 * var24 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
620 [arg0] var4 + a3 * a1.z 768
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
621 [var8] a3 * a1.z 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
622 [a3] arg4 + a3 * a1.x 284
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
623
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
624
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
625 0 var18 + a3 * a1.y 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
626 1 var8 * var28 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
627 2 var8 * flt_4D84E8 0
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
628
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
629 .text:0049CC54 3 fld [ebp+a3]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
630 .text:0049CC57 4 fadd st, st(3)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
631 .text:0049CC59 4 fstp dword ptr [ebx+90h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
632 [3].x <- arg4 + a3 * a1.x + var8 * flt_4D84E8 284
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
633
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
634 .text:0049CC5F 3 fadd st, st(1)
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
635 .text:0049CC61 3 fstp dword ptr [ebx+94h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
636 [3].y <- var18 + a3 * a1.y + var8 * var28 1480
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
637
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
638 .text:0049CC67 2 fstp st
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
639 .text:0049CC69 1 fstp st
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
640 0 empty
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
641 .text:0049CC6B 0 fld [ebp+arg0]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
642 .text:0049CC6E 1 fadd [ebp+var_20]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
643 .text:0049CC71 1 fstp dword ptr [ebx+98h]
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
644 [3].z <- var4 + a3 * a1.z + var8 * var24 1536
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
645
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
646 0 empty
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
647 */
0
Ritor1
parents:
diff changeset
648
794
Nomad
parents: 686
diff changeset
649 pOutBounding[0].vWorldPosition.x = face_center_x - a3 * a1.x + var_8 * flt_4D84E8;
Nomad
parents: 686
diff changeset
650 pOutBounding[0].vWorldPosition.y = face_center_y - a3 * a1.y + var_8 * var_28;
Nomad
parents: 686
diff changeset
651 pOutBounding[0].vWorldPosition.z = face_center_z - a3 * a1.z + var_8 * var_24;
678
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
652
794
Nomad
parents: 686
diff changeset
653 pOutBounding[1].vWorldPosition.x = face_center_x - a3 * a1.x - var_8 * flt_4D84E8;
Nomad
parents: 686
diff changeset
654 pOutBounding[1].vWorldPosition.y = face_center_y - a3 * a1.y - var_8 * var_28;
Nomad
parents: 686
diff changeset
655 pOutBounding[1].vWorldPosition.z = face_center_z - a3 * a1.z - var_8 * var_24;
0
Ritor1
parents:
diff changeset
656
794
Nomad
parents: 686
diff changeset
657 pOutBounding[2].vWorldPosition.x = face_center_x + a3 * a1.x - var_8 * flt_4D84E8;
Nomad
parents: 686
diff changeset
658 pOutBounding[2].vWorldPosition.y = face_center_y + a3 * a1.y - var_8 * var_28;
Nomad
parents: 686
diff changeset
659 pOutBounding[2].vWorldPosition.z = face_center_z + a3 * a1.z - var_8 * var_24;
678
35a97ce58790 fixed stru10::49C9E3 (cause for attempting to get cross product on zero vectors)
Nomad
parents: 676
diff changeset
660
794
Nomad
parents: 686
diff changeset
661 pOutBounding[3].vWorldPosition.x = face_center_x + a3 * a1.x + var_8 * flt_4D84E8;
Nomad
parents: 686
diff changeset
662 pOutBounding[3].vWorldPosition.y = face_center_y + a3 * a1.y + var_8 * var_28;
Nomad
parents: 686
diff changeset
663 pOutBounding[3].vWorldPosition.z = face_center_z + a3 * a1.z + var_8 * var_24;
0
Ritor1
parents:
diff changeset
664
Ritor1
parents:
diff changeset
665 a1.x = 0.0f;
Ritor1
parents:
diff changeset
666 a1.y = 0.0f;
Ritor1
parents:
diff changeset
667 a1.z = 0.0f;
794
Nomad
parents: 686
diff changeset
668 a3 = face_center_x + a3 * a1.x;
0
Ritor1
parents:
diff changeset
669
794
Nomad
parents: 686
diff changeset
670 if (!FindFacePlane(pOutBounding, &a1, &a3))
0
Ritor1
parents:
diff changeset
671 return false;
Ritor1
parents:
diff changeset
672
Ritor1
parents:
diff changeset
673
Ritor1
parents:
diff changeset
674
Ritor1
parents:
diff changeset
675 RenderVertexSoft v25; // [sp+10h] [bp-90h]@20
794
Nomad
parents: 686
diff changeset
676 memcpy(&v25, pOutBounding, sizeof(RenderVertexSoft));
0
Ritor1
parents:
diff changeset
677
Ritor1
parents:
diff changeset
678 float _dp = (v25.vWorldPosition.x - pBLVRenderParams->vPartyPos.x) * a1.x +
Ritor1
parents:
diff changeset
679 (v25.vWorldPosition.y - pBLVRenderParams->vPartyPos.y) * a1.y +
Ritor1
parents:
diff changeset
680 (v25.vWorldPosition.z - pBLVRenderParams->vPartyPos.z) * a1.z;
Ritor1
parents:
diff changeset
681 if (fabs(_dp) < 1e-6f)
Ritor1
parents:
diff changeset
682 {
794
Nomad
parents: 686
diff changeset
683 memcpy(&v25, pOutBounding + 1, sizeof(RenderVertexSoft));
Nomad
parents: 686
diff changeset
684 memcpy(pOutBounding + 1, pOutBounding + 3, sizeof(RenderVertexSoft));
Nomad
parents: 686
diff changeset
685 memcpy(pOutBounding + 3, &v25, sizeof(RenderVertexSoft));
0
Ritor1
parents:
diff changeset
686 }
Ritor1
parents:
diff changeset
687
794
Nomad
parents: 686
diff changeset
688 //if ( byte_4D864C && pGame->uFlags & GAME_FLAGS_1_DRAW_BLV_DEBUGS)
Nomad
parents: 686
diff changeset
689 //{
0
Ritor1
parents:
diff changeset
690 RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
794
Nomad
parents: 686
diff changeset
691 if (!bDoNotDrawPortalFrustum)
0
Ritor1
parents:
diff changeset
692 {
Ritor1
parents:
diff changeset
693 v26.vWorldPosition.x = pParty->vPosition.x;
Ritor1
parents:
diff changeset
694 v26.vWorldPosition.y = pParty->vPosition.y;
794
Nomad
parents: 686
diff changeset
695 v26.vWorldPosition.z = pParty->vPosition.z + pParty->sEyelevel; // frustum
Nomad
parents: 686
diff changeset
696
Nomad
parents: 686
diff changeset
697 pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFF0000u, pOutBounding, 0xFF0000u, 0, 0);
Nomad
parents: 686
diff changeset
698 pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFF00u, pOutBounding + 1, 0xFF00u, 0, 0);
Nomad
parents: 686
diff changeset
699 pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFFu, pOutBounding + 2, 0xFFu, 0, 0);
Nomad
parents: 686
diff changeset
700 pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFFFFFFu, pOutBounding + 3, 0xFFFFFFu, 0, 0);
Nomad
parents: 686
diff changeset
701 bDoNotDrawPortalFrustum = true;
Nomad
parents: 686
diff changeset
702 }
Nomad
parents: 686
diff changeset
703 pGame->pIndoorCameraD3D->debug_outline_sw(pOutBounding, uNumVertices, 0x1EFF1Eu, 0.00019999999); // bounding
Nomad
parents: 686
diff changeset
704 //}
Nomad
parents: 686
diff changeset
705
Nomad
parents: 686
diff changeset
706 //pGame->pIndoorCameraD3D->debug_outline_sw(pFaceLimits, 4, 0xFFF14040, 0.000099999997); // limits
Nomad
parents: 686
diff changeset
707
Nomad
parents: 686
diff changeset
708 /*if ( byte_4D864C && pGame->uFlags & GAME_FLAGS_1_DRAW_BLV_DEBUGS)
Nomad
parents: 686
diff changeset
709 {
Nomad
parents: 686
diff changeset
710 RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
Nomad
parents: 686
diff changeset
711 v26.vWorldPosition.x = face_center_x; // corner to center
Nomad
parents: 686
diff changeset
712 v26.vWorldPosition.y = face_center_y;
Nomad
parents: 686
diff changeset
713 v26.vWorldPosition.z = face_center_z;
0
Ritor1
parents:
diff changeset
714
794
Nomad
parents: 686
diff changeset
715 pGame->pIndoorCameraD3D->do_draw_debug_line_sw(pFaceLimits, 0xFF00u, &v26, 0xFF0000u, 0, 0);
Nomad
parents: 686
diff changeset
716 }*/
Nomad
parents: 686
diff changeset
717
Nomad
parents: 686
diff changeset
718
Nomad
parents: 686
diff changeset
719 /*if ( byte_4D864C )
Nomad
parents: 686
diff changeset
720 {
Nomad
parents: 686
diff changeset
721 if ( pGame->uFlags & GAME_FLAGS_1_DRAW_BLV_DEBUGS)*/
Nomad
parents: 686
diff changeset
722 {
Nomad
parents: 686
diff changeset
723 RenderVertexSoft v25; // [sp+10h] [bp-90h]@20
Nomad
parents: 686
diff changeset
724 RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
Nomad
parents: 686
diff changeset
725
Nomad
parents: 686
diff changeset
726 v25.vWorldPosition.x = face_center_x; // portal normal
Nomad
parents: 686
diff changeset
727 v25.vWorldPosition.y = face_center_y;
Nomad
parents: 686
diff changeset
728 v25.vWorldPosition.z = face_center_z;
Nomad
parents: 686
diff changeset
729
Nomad
parents: 686
diff changeset
730 v26.vWorldPosition.x = face_center_x + a1.x * 400.0f;
Nomad
parents: 686
diff changeset
731 v26.vWorldPosition.y = face_center_y + a1.y * 400.0f;
Nomad
parents: 686
diff changeset
732 v26.vWorldPosition.z = face_center_z + a1.z * 400.0f;
Nomad
parents: 686
diff changeset
733
Nomad
parents: 686
diff changeset
734 pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v25, 0xFFFFFFFFu, &v26, 0xFFFF00u, 0, 0);
0
Ritor1
parents:
diff changeset
735 }
794
Nomad
parents: 686
diff changeset
736 //}
Nomad
parents: 686
diff changeset
737
0
Ritor1
parents:
diff changeset
738 return true;
Ritor1
parents:
diff changeset
739 }
Ritor1
parents:
diff changeset
740
Ritor1
parents:
diff changeset
741
Ritor1
parents:
diff changeset
742
Ritor1
parents:
diff changeset
743 //----- (0049C5B0) --------------------------------------------------------
Ritor1
parents:
diff changeset
744 stru10::stru10()
Ritor1
parents:
diff changeset
745 {
794
Nomad
parents: 686
diff changeset
746 this->bDoNotDrawPortalFrustum = false;
0
Ritor1
parents:
diff changeset
747 }
Ritor1
parents:
diff changeset
748
Ritor1
parents:
diff changeset
749 //----- (0049C5BD) --------------------------------------------------------
Ritor1
parents:
diff changeset
750 stru10::~stru10()
Ritor1
parents:
diff changeset
751 {
Ritor1
parents:
diff changeset
752 }
Ritor1
parents:
diff changeset
753
Ritor1
parents:
diff changeset
754 //----- (0049C5DA) --------------------------------------------------------
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
755 char stru10::_49C5DA(BLVFace *pFace, RenderVertexSoft *pVertices, unsigned int *pNumVertices, IndoorCameraD3D_Vec4 *a5, RenderVertexSoft *pOutBounding)
0
Ritor1
parents:
diff changeset
756 {
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
757 RenderVertexSoft pLimits[4]; // [sp+Ch] [bp-C0h]@1
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
758
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
759 _49CE9E(pFace, pVertices, *pNumVertices, pLimits);
0
Ritor1
parents:
diff changeset
760
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
761 //if ( byte_4D864C && pGame->uFlags & GAME_FLAGS_1_DRAW_BLV_DEBUGS)
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
762 // pGame->pIndoorCameraD3D->debug_outline_sw(a4a, 4u, 0xFF1E1Eu, 0.000099999997);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
763 if (CalcFaceBounding(pFace, pLimits, 4, pOutBounding))
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
764 return _49C720(pOutBounding, a5);
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
765 return false;
0
Ritor1
parents:
diff changeset
766 }
Ritor1
parents:
diff changeset
767 // 4D864C: using guessed type char byte_4D864C;
Ritor1
parents:
diff changeset
768
Ritor1
parents:
diff changeset
769 //----- (0049C681) --------------------------------------------------------
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
770 bool stru10::CalcPortalShape(BLVFace *pFace, IndoorCameraD3D_Vec4 *a3, RenderVertexSoft *pOutBounding)
0
Ritor1
parents:
diff changeset
771 {
794
Nomad
parents: 686
diff changeset
772 RenderVertexSoft pLimits[4]; // [sp+Ch] [bp-C0h]@1
0
Ritor1
parents:
diff changeset
773
794
Nomad
parents: 686
diff changeset
774 CalcPolygonLimits(pFace, pLimits);
Nomad
parents: 686
diff changeset
775 //if ( byte_4D864C && pGame->uFlags & GAME_FLAGS_1_DRAW_BLV_DEBUGS)
Nomad
parents: 686
diff changeset
776 // pGame->pIndoorCameraD3D->debug_outline_sw(pLimits, 4, 0xFF1E1E, 0.000099999997);
Nomad
parents: 686
diff changeset
777 if (CalcFaceBounding(pFace, pLimits, 4, pOutBounding))
Nomad
parents: 686
diff changeset
778 return _49C720(pOutBounding, a3);
0
Ritor1
parents:
diff changeset
779 return false;
Ritor1
parents:
diff changeset
780 }
Ritor1
parents:
diff changeset
781 // 4D864C: using guessed type char byte_4D864C;
Ritor1
parents:
diff changeset
782
Ritor1
parents:
diff changeset
783 //----- (0049C720) --------------------------------------------------------
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
784 char stru10::_49C720(RenderVertexSoft *pFaceBounding, IndoorCameraD3D_Vec4 *a4)
0
Ritor1
parents:
diff changeset
785 {
Ritor1
parents:
diff changeset
786 Vec3_float_ a3; // [sp+4h] [bp-34h]@1
Ritor1
parents:
diff changeset
787 a3.x = (double)pBLVRenderParams->vPartyPos.x;
Ritor1
parents:
diff changeset
788 a3.y = (double)pBLVRenderParams->vPartyPos.y;
Ritor1
parents:
diff changeset
789 a3.z = (double)pBLVRenderParams->vPartyPos.z;
795
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
790
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
791 if (FindFaceNormal(pFaceBounding, pFaceBounding + 1, &a3, a4) &&
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
792 FindFaceNormal(pFaceBounding + 1, pFaceBounding + 2, &a3, a4 + 1) &&
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
793 FindFaceNormal(pFaceBounding + 2, pFaceBounding + 3, &a3, a4 + 2) &&
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
794 FindFaceNormal(pFaceBounding + 3, pFaceBounding, &a3, a4 + 3))
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
795 return true;
472ca68386d4 more stru10 & stru9
Nomad
parents: 794
diff changeset
796 return false;
0
Ritor1
parents:
diff changeset
797 }
Ritor1
parents:
diff changeset
798
Ritor1
parents:
diff changeset
799 //----- (0049C7C5) --------------------------------------------------------
794
Nomad
parents: 686
diff changeset
800 bool stru10::FindFaceNormal(RenderVertexSoft *a1, RenderVertexSoft *a2, Vec3_float_ *a3, IndoorCameraD3D_Vec4 *a4)
0
Ritor1
parents:
diff changeset
801 {
Ritor1
parents:
diff changeset
802 Vec3_float_ v1; // [sp+4h] [bp-48h]@1
Ritor1
parents:
diff changeset
803 Vec3_float_ v2; // [sp+10h] [bp-3Ch]@1
794
Nomad
parents: 686
diff changeset
804
Nomad
parents: 686
diff changeset
805 v1.x = a1->vWorldPosition.x - a3->x;
Nomad
parents: 686
diff changeset
806 v1.y = a1->vWorldPosition.y - a3->y;
Nomad
parents: 686
diff changeset
807 v1.z = a1->vWorldPosition.z - a3->z;
Nomad
parents: 686
diff changeset
808 Vec3_float_::Cross(&v1, &v2, a2->vWorldPosition.x - a1->vWorldPosition.x,
Nomad
parents: 686
diff changeset
809 a2->vWorldPosition.y - a1->vWorldPosition.y,
Nomad
parents: 686
diff changeset
810 a2->vWorldPosition.z - a1->vWorldPosition.z);
0
Ritor1
parents:
diff changeset
811
794
Nomad
parents: 686
diff changeset
812 float sqr_mag = v2.x * v2.x + v2.y * v2.y + v2.z * v2.z;
Nomad
parents: 686
diff changeset
813 if (fabsf(sqr_mag) > 1e-6f)
0
Ritor1
parents:
diff changeset
814 {
794
Nomad
parents: 686
diff changeset
815 float inv_mag = 1.0f / sqrtf(sqr_mag);
Nomad
parents: 686
diff changeset
816 v2.x *= inv_mag;
Nomad
parents: 686
diff changeset
817 v2.y *= inv_mag;
Nomad
parents: 686
diff changeset
818 v2.z *= inv_mag;
Nomad
parents: 686
diff changeset
819 //v2.Normalize();
Nomad
parents: 686
diff changeset
820
Nomad
parents: 686
diff changeset
821 a4->x = v2.x;
Nomad
parents: 686
diff changeset
822 a4->y = v2.y;
Nomad
parents: 686
diff changeset
823 a4->z = v2.z;
Nomad
parents: 686
diff changeset
824 a4->dot = a3->z * v2.z + a3->y * v2.y + a3->x * v2.x;
Nomad
parents: 686
diff changeset
825 return true;
0
Ritor1
parents:
diff changeset
826 }
794
Nomad
parents: 686
diff changeset
827 return false;
0
Ritor1
parents:
diff changeset
828 }
Ritor1
parents:
diff changeset
829
Ritor1
parents:
diff changeset
830 //----- (0049C8DC) --------------------------------------------------------
794
Nomad
parents: 686
diff changeset
831 bool stru10::FindFacePlane(RenderVertexSoft *arg0, Vec3_float_ *a2, float *a3)
0
Ritor1
parents:
diff changeset
832 {
Ritor1
parents:
diff changeset
833 Vec3_float_ v1; // [sp+8h] [bp-3Ch]@1
Ritor1
parents:
diff changeset
834 Vec3_float_ v2; // [sp+14h] [bp-30h]@1
Ritor1
parents:
diff changeset
835
676
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
836 v1.x = arg0[1].vWorldPosition.x - arg0[0].vWorldPosition.x;
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
837 v1.y = arg0[1].vWorldPosition.y - arg0[0].vWorldPosition.y;
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
838 v1.z = arg0[1].vWorldPosition.z - arg0[0].vWorldPosition.z;
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
839
794
Nomad
parents: 686
diff changeset
840 Vec3_float_::Cross(&v1, &v2, arg0[2].vWorldPosition.x - arg0[1].vWorldPosition.x,
Nomad
parents: 686
diff changeset
841 arg0[2].vWorldPosition.y - arg0[1].vWorldPosition.y,
Nomad
parents: 686
diff changeset
842 arg0[2].vWorldPosition.z - arg0[1].vWorldPosition.z);
676
ecfb1b3c9a39 BLV: when standing right on the portal (orange wall) everything looks fine
Nomad
parents: 0
diff changeset
843
794
Nomad
parents: 686
diff changeset
844 float sqr_mag = v2.x * v2.x + v2.y * v2.y + v2.z * v2.z;
Nomad
parents: 686
diff changeset
845 if (fabsf(sqr_mag) > 1e-6f)
0
Ritor1
parents:
diff changeset
846 {
794
Nomad
parents: 686
diff changeset
847 //v2.Normalize();
Nomad
parents: 686
diff changeset
848 float inv_mag = 1.0f / sqrtf(sqr_mag);
Nomad
parents: 686
diff changeset
849 v2.x *= inv_mag;
Nomad
parents: 686
diff changeset
850 v2.y *= inv_mag;
Nomad
parents: 686
diff changeset
851 v2.z *= inv_mag;
Nomad
parents: 686
diff changeset
852
Nomad
parents: 686
diff changeset
853 a2->x = v2.x;
Nomad
parents: 686
diff changeset
854 a2->y = v2.y;
Nomad
parents: 686
diff changeset
855 a2->z = v2.z;
Nomad
parents: 686
diff changeset
856 *a3 = -(arg0[0].vWorldPosition.z * v2.z + arg0[0].vWorldPosition.y * v2.y + arg0[0].vWorldPosition.x * v2.x);
0
Ritor1
parents:
diff changeset
857 return true;
Ritor1
parents:
diff changeset
858 }
Ritor1
parents:
diff changeset
859 return false;
Ritor1
parents:
diff changeset
860 }