1 .386P
2 .model FLAT
3 externdef _d_zistepu:dword
4 externdef _d_pzbuffer:dword
5 externdef _d_zistepv:dword
6 externdef _d_zrowbytes:dword
7 externdef _d_ziorigin:dword
8 externdef _r_turb_s:dword
9 externdef _r_turb_t:dword
10 externdef _r_turb_pdest:dword
11 externdef _r_turb_spancount:dword
12 externdef _r_turb_turb:dword
13 externdef _r_turb_pbase:dword
14 externdef _r_turb_sstep:dword
15 externdef _r_turb_tstep:dword
16 externdef _r_bmodelactive:dword
17 externdef _d_sdivzstepu:dword
18 externdef _d_tdivzstepu:dword
19 externdef _d_sdivzstepv:dword
20 externdef _d_tdivzstepv:dword
21 externdef _d_sdivzorigin:dword
22 externdef _d_tdivzorigin:dword
23 externdef _sadjust:dword
24 externdef _tadjust:dword
25 externdef _bbextents:dword
26 externdef _bbextentt:dword
27 externdef _cacheblock:dword
28 externdef _d_viewbuffer:dword
29 externdef _cachewidth:dword
30 externdef _d_pzbuffer:dword
31 externdef _d_zrowbytes:dword
32 externdef _d_zwidth:dword
33 externdef _d_scantable:dword
34 externdef _r_lightptr:dword
35 externdef _r_numvblocks:dword
36 externdef _prowdestbase:dword
37 externdef _pbasesource:dword
38 externdef _r_lightwidth:dword
39 externdef _lightright:dword
40 externdef _lightrightstep:dword
41 externdef _lightdeltastep:dword
42 externdef _lightdelta:dword
43 externdef _lightright:dword
44 externdef _lightdelta:dword
45 externdef _sourcetstep:dword
46 externdef _surfrowbytes:dword
47 externdef _lightrightstep:dword
48 externdef _lightdeltastep:dword
49 externdef _r_sourcemax:dword
50 externdef _r_stepback:dword
51 externdef _colormap:dword
52 externdef _blocksize:dword
53 externdef _sourcesstep:dword
54 externdef _lightleft:dword
55 externdef _blockdivshift:dword
56 externdef _blockdivmask:dword
57 externdef _lightleftstep:dword
58 externdef _r_origin:dword
59 externdef _r_ppn:dword
60 externdef _r_pup:dword
61 externdef _r_pright:dword
62 externdef _ycenter:dword
63 externdef _xcenter:dword
64 externdef _d_vrectbottom_particle:dword
65 externdef _d_vrectright_particle:dword
66 externdef _d_vrecty:dword
67 externdef _d_vrectx:dword
68 externdef _d_pix_shift:dword
69 externdef _d_pix_min:dword
70 externdef _d_pix_max:dword
71 externdef _d_y_aspect_shift:dword
72 externdef _screenwidth:dword
73 externdef _vright:dword
74 externdef _vup:dword
75 externdef _vpn:dword
76 externdef _BOPS_Error:dword
77 externdef _snd_scaletable:dword
78 externdef _paintbuffer:dword
79 externdef _snd_linear_count:dword
80 externdef _snd_p:dword
81 externdef _snd_vol:dword
82 externdef _snd_out:dword
83 externdef _r_leftclipped:dword
84 externdef _r_leftenter:dword
85 externdef _r_rightclipped:dword
86 externdef _r_rightenter:dword
87 externdef _modelorg:dword
88 externdef _xscale:dword
89 externdef _r_refdef:dword
90 externdef _yscale:dword
91 externdef _r_leftexit:dword
92 externdef _r_rightexit:dword
93 externdef _r_lastvertvalid:dword
94 externdef _cacheoffset:dword
95 externdef _newedges:dword
96 externdef _removeedges:dword
97 externdef _r_pedge:dword
98 externdef _r_framecount:dword
99 externdef _r_u1:dword
100 externdef _r_emitted:dword
101 externdef _edge_p:dword
102 externdef _surface_p:dword
103 externdef _surfaces:dword
104 externdef _r_lzi1:dword
105 externdef _r_v1:dword
106 externdef _r_ceilv1:dword
107 externdef _r_nearzi:dword
108 externdef _r_nearzionly:dword
109 externdef _edge_aftertail:dword
110 externdef _edge_tail:dword
111 externdef _current_iv:dword
112 externdef _edge_head_u_shift20:dword
113 externdef _span_p:dword
114 externdef _edge_head:dword
115 externdef _fv:dword
116 externdef _edge_tail_u_shift20:dword
117 externdef _r_apverts:dword
118 externdef _r_anumverts:dword
119 externdef _aliastransform:dword
120 externdef _r_avertexnormals:dword
121 externdef _r_plightvec:dword
122 externdef _r_ambientlight:dword
123 externdef _r_shadelight:dword
124 externdef _aliasxcenter:dword
125 externdef _aliasycenter:dword
126 externdef _a_sstepxfrac:dword
127 externdef _r_affinetridesc:dword
128 externdef _acolormap:dword
129 externdef _d_pcolormap:dword
130 externdef _r_affinetridesc:dword
131 externdef _d_sfrac:dword
132 externdef _d_ptex:dword
133 externdef _d_pedgespanpackage:dword
134 externdef _d_tfrac:dword
135 externdef _d_light:dword
136 externdef _d_zi:dword
137 externdef _d_pdest:dword
138 externdef _d_pz:dword
139 externdef _d_aspancount:dword
140 externdef _erroradjustup:dword
141 externdef _errorterm:dword
142 externdef _d_xdenom:dword
143 externdef _r_p0:dword
144 externdef _r_p1:dword
145 externdef _r_p2:dword
146 externdef _a_tstepxfrac:dword
147 externdef _r_sstepx:dword
148 externdef _r_tstepx:dword
149 externdef _a_ststepxwhole:dword
150 externdef _zspantable:dword
151 externdef _skintable:dword
152 externdef _r_zistepx:dword
153 externdef _erroradjustdown:dword
154 externdef _d_countextrastep:dword
155 externdef _ubasestep:dword
156 externdef _a_ststepxwhole:dword
157 externdef _a_tstepxfrac:dword
158 externdef _r_lstepx:dword
159 externdef _a_spans:dword
160 externdef _erroradjustdown:dword
161 externdef _d_pdestextrastep:dword
162 externdef _d_pzextrastep:dword
163 externdef _d_sfracextrastep:dword
164 externdef _d_ptexextrastep:dword
165 externdef _d_countextrastep:dword
166 externdef _d_tfracextrastep:dword
167 externdef _d_lightextrastep:dword
168 externdef _d_ziextrastep:dword
169 externdef _d_pdestbasestep:dword
170 externdef _d_pzbasestep:dword
171 externdef _d_sfracbasestep:dword
172 externdef _d_ptexbasestep:dword
173 externdef _ubasestep:dword
174 externdef _d_tfracbasestep:dword
175 externdef _d_lightbasestep:dword
176 externdef _d_zibasestep:dword
177 externdef _zspantable:dword
178 externdef _r_lstepy:dword
179 externdef _r_sstepy:dword
180 externdef _r_tstepy:dword
181 externdef _r_zistepy:dword
182 externdef _D_PolysetSetEdgeTable:dword
183 externdef _D_RasterizeAliasPolySmooth:dword
184 externdef float_point5:dword
185 externdef Float2ToThe31nd:dword
186 externdef izistep:dword
187 externdef izi:dword
188 externdef FloatMinus2ToThe31nd:dword
189 externdef float_1:dword
190 externdef float_particle_z_clip:dword
191 externdef float_minus_1:dword
192 externdef float_0:dword
193 externdef fp_16:dword
194 externdef fp_64k:dword
195 externdef fp_1m:dword
196 externdef fp_1m_minus_1:dword
197 externdef fp_8:dword
198 externdef entryvec_table:dword
199 externdef advancetable:dword
200 externdef sstep:dword
201 externdef tstep:dword
202 externdef pspantemp:dword
203 externdef counttemp:dword
204 externdef jumptemp:dword
205 externdef reciprocal_table:dword
206 externdef DP_Count:dword
207 externdef DP_u:dword
208 externdef DP_v:dword
209 externdef DP_32768:dword
210 externdef DP_Color:dword
211 externdef DP_Pix:dword
212 externdef DP_EntryTable:dword
213 externdef pbase:dword
214 externdef s:dword
215 externdef t:dword
216 externdef sfracf:dword
217 externdef tfracf:dword
218 externdef snext:dword
219 externdef tnext:dword
220 externdef spancountminus1:dword
221 externdef zi16stepu:dword
222 externdef sdivz16stepu:dword
223 externdef tdivz16stepu:dword
224 externdef zi8stepu:dword
225 externdef sdivz8stepu:dword
226 externdef tdivz8stepu:dword
227 externdef reciprocal_table_16:dword
228 externdef entryvec_table_16:dword
229 externdef ceil_cw:dword
230 externdef single_cw:dword
231 externdef fp_64kx64k:dword
232 externdef pz:dword
233 externdef spr8entryvec_table:dword
234_TEXT SEGMENT
235 align 4
236 public _D_DrawParticle
237_D_DrawParticle:
238 push ebp
239 push edi
240 push ebx
241 mov edi,ds:dword ptr[12+4+esp]
242 fld ds:dword ptr[_r_origin]
243 fsubr ds:dword ptr[0+edi]
244 fld ds:dword ptr[0+4+edi]
245 fsub ds:dword ptr[_r_origin+4]
246 fld ds:dword ptr[0+8+edi]
247 fsub ds:dword ptr[_r_origin+8]
248 fxch st(2)
249 fld ds:dword ptr[_r_ppn]
250 fmul st(0),st(1)
251 fld ds:dword ptr[_r_ppn+4]
252 fmul st(0),st(3)
253 fld ds:dword ptr[_r_ppn+8]
254 fmul st(0),st(5)
255 fxch st(2)
256 faddp st(1),st(0)
257 faddp st(1),st(0)
258 fld st(0)
259 fdivr ds:dword ptr[float_1]
260 fxch st(1)
261 fcomp ds:dword ptr[float_particle_z_clip]
262 fxch st(3)
263 fld ds:dword ptr[_r_pup]
264 fmul st(0),st(2)
265 fld ds:dword ptr[_r_pup+4]
266 fnstsw ax
267 test ah,1
268 jnz LPop6AndDone
269 fmul st(0),st(4)
270 fld ds:dword ptr[_r_pup+8]
271 fmul st(0),st(3)
272 fxch st(2)
273 faddp st(1),st(0)
274 faddp st(1),st(0)
275 fxch st(3)
276 fmul ds:dword ptr[_r_pright+4]
277 fxch st(2)
278 fmul ds:dword ptr[_r_pright]
279 fxch st(1)
280 fmul ds:dword ptr[_r_pright+8]
281 fxch st(2)
282 faddp st(1),st(0)
283 faddp st(1),st(0)
284 fxch st(1)
285 fmul st(0),st(2)
286 fxch st(1)
287 fmul st(0),st(2)
288 fxch st(1)
289 fsubr ds:dword ptr[_ycenter]
290 fxch st(1)
291 fadd ds:dword ptr[_xcenter]
292 fxch st(1)
293 fadd ds:dword ptr[float_point5]
294 fxch st(1)
295 fadd ds:dword ptr[float_point5]
296 fxch st(2)
297 fmul ds:dword ptr[DP_32768]
298 fxch st(2)
299 fistp ds:dword ptr[DP_u]
300 fistp ds:dword ptr[DP_v]
301 mov eax,ds:dword ptr[DP_u]
302 mov edx,ds:dword ptr[DP_v]
303 mov ebx,ds:dword ptr[_d_vrectbottom_particle]
304 mov ecx,ds:dword ptr[_d_vrectright_particle]
305 cmp edx,ebx
306 jg LPop1AndDone
307 cmp eax,ecx
308 jg LPop1AndDone
309 mov ebx,ds:dword ptr[_d_vrecty]
310 mov ecx,ds:dword ptr[_d_vrectx]
311 cmp edx,ebx
312 jl LPop1AndDone
313 cmp eax,ecx
314 jl LPop1AndDone
315 fld ds:dword ptr[12+edi]
316 fistp ds:dword ptr[DP_Color]
317 mov ebx,ds:dword ptr[_d_viewbuffer]
318 add ebx,eax
319 mov edi,ds:dword ptr[_d_scantable+edx*4]
320 imul edx,ds:dword ptr[_d_zrowbytes]
321 lea edx,ds:dword ptr[edx+eax*2]
322 mov eax,ds:dword ptr[_d_pzbuffer]
323 fistp ds:dword ptr[izi]
324 add edi,ebx
325 add edx,eax
326 mov eax,ds:dword ptr[izi]
327 mov ecx,ds:dword ptr[_d_pix_shift]
328 shr eax,cl
329 mov ebp,ds:dword ptr[izi]
330 mov ebx,ds:dword ptr[_d_pix_min]
331 mov ecx,ds:dword ptr[_d_pix_max]
332 cmp eax,ebx
333 jnl LTestPixMax
334 mov eax,ebx
335 jmp LTestDone
336LTestPixMax:
337 cmp eax,ecx
338 jng LTestDone
339 mov eax,ecx
340LTestDone:
341 mov ch,ds:byte ptr[DP_Color]
342 mov ebx,ds:dword ptr[_d_y_aspect_shift]
343 test ebx,ebx
344 jnz LDefault
345 cmp eax,4
346 ja LDefault
347 jmp dword ptr[DP_EntryTable-4+eax*4]
348 public DP_1x1
349DP_1x1:
350 cmp ds:word ptr[edx],bp
351 jg LDone
352 mov ds:word ptr[edx],bp
353 mov ds:byte ptr[edi],ch
354 jmp LDone
355 public DP_2x2
356DP_2x2:
357 push esi
358 mov ebx,ds:dword ptr[_screenwidth]
359 mov esi,ds:dword ptr[_d_zrowbytes]
360 cmp ds:word ptr[edx],bp
361 jg L2x2_1
362 mov ds:word ptr[edx],bp
363 mov ds:byte ptr[edi],ch
364L2x2_1:
365 cmp ds:word ptr[2+edx],bp
366 jg L2x2_2
367 mov ds:word ptr[2+edx],bp
368 mov ds:byte ptr[1+edi],ch
369L2x2_2:
370 cmp ds:word ptr[edx+esi*1],bp
371 jg L2x2_3
372 mov ds:word ptr[edx+esi*1],bp
373 mov ds:byte ptr[edi+ebx*1],ch
374L2x2_3:
375 cmp ds:word ptr[2+edx+esi*1],bp
376 jg L2x2_4
377 mov ds:word ptr[2+edx+esi*1],bp
378 mov ds:byte ptr[1+edi+ebx*1],ch
379L2x2_4:
380 pop esi
381 jmp LDone
382 public DP_3x3
383DP_3x3:
384 push esi
385 mov ebx,ds:dword ptr[_screenwidth]
386 mov esi,ds:dword ptr[_d_zrowbytes]
387 cmp ds:word ptr[edx],bp
388 jg L3x3_1
389 mov ds:word ptr[edx],bp
390 mov ds:byte ptr[edi],ch
391L3x3_1:
392 cmp ds:word ptr[2+edx],bp
393 jg L3x3_2
394 mov ds:word ptr[2+edx],bp
395 mov ds:byte ptr[1+edi],ch
396L3x3_2:
397 cmp ds:word ptr[4+edx],bp
398 jg L3x3_3
399 mov ds:word ptr[4+edx],bp
400 mov ds:byte ptr[2+edi],ch
401L3x3_3:
402 cmp ds:word ptr[edx+esi*1],bp
403 jg L3x3_4
404 mov ds:word ptr[edx+esi*1],bp
405 mov ds:byte ptr[edi+ebx*1],ch
406L3x3_4:
407 cmp ds:word ptr[2+edx+esi*1],bp
408 jg L3x3_5
409 mov ds:word ptr[2+edx+esi*1],bp
410 mov ds:byte ptr[1+edi+ebx*1],ch
411L3x3_5:
412 cmp ds:word ptr[4+edx+esi*1],bp
413 jg L3x3_6
414 mov ds:word ptr[4+edx+esi*1],bp
415 mov ds:byte ptr[2+edi+ebx*1],ch
416L3x3_6:
417 cmp ds:word ptr[edx+esi*2],bp
418 jg L3x3_7
419 mov ds:word ptr[edx+esi*2],bp
420 mov ds:byte ptr[edi+ebx*2],ch
421L3x3_7:
422 cmp ds:word ptr[2+edx+esi*2],bp
423 jg L3x3_8
424 mov ds:word ptr[2+edx+esi*2],bp
425 mov ds:byte ptr[1+edi+ebx*2],ch
426L3x3_8:
427 cmp ds:word ptr[4+edx+esi*2],bp
428 jg L3x3_9
429 mov ds:word ptr[4+edx+esi*2],bp
430 mov ds:byte ptr[2+edi+ebx*2],ch
431L3x3_9:
432 pop esi
433 jmp LDone
434 public DP_4x4
435DP_4x4:
436 push esi
437 mov ebx,ds:dword ptr[_screenwidth]
438 mov esi,ds:dword ptr[_d_zrowbytes]
439 cmp ds:word ptr[edx],bp
440 jg L4x4_1
441 mov ds:word ptr[edx],bp
442 mov ds:byte ptr[edi],ch
443L4x4_1:
444 cmp ds:word ptr[2+edx],bp
445 jg L4x4_2
446 mov ds:word ptr[2+edx],bp
447 mov ds:byte ptr[1+edi],ch
448L4x4_2:
449 cmp ds:word ptr[4+edx],bp
450 jg L4x4_3
451 mov ds:word ptr[4+edx],bp
452 mov ds:byte ptr[2+edi],ch
453L4x4_3:
454 cmp ds:word ptr[6+edx],bp
455 jg L4x4_4
456 mov ds:word ptr[6+edx],bp
457 mov ds:byte ptr[3+edi],ch
458L4x4_4:
459 cmp ds:word ptr[edx+esi*1],bp
460 jg L4x4_5
461 mov ds:word ptr[edx+esi*1],bp
462 mov ds:byte ptr[edi+ebx*1],ch
463L4x4_5:
464 cmp ds:word ptr[2+edx+esi*1],bp
465 jg L4x4_6
466 mov ds:word ptr[2+edx+esi*1],bp
467 mov ds:byte ptr[1+edi+ebx*1],ch
468L4x4_6:
469 cmp ds:word ptr[4+edx+esi*1],bp
470 jg L4x4_7
471 mov ds:word ptr[4+edx+esi*1],bp
472 mov ds:byte ptr[2+edi+ebx*1],ch
473L4x4_7:
474 cmp ds:word ptr[6+edx+esi*1],bp
475 jg L4x4_8
476 mov ds:word ptr[6+edx+esi*1],bp
477 mov ds:byte ptr[3+edi+ebx*1],ch
478L4x4_8:
479 lea edx,ds:dword ptr[edx+esi*2]
480 lea edi,ds:dword ptr[edi+ebx*2]
481 cmp ds:word ptr[edx],bp
482 jg L4x4_9
483 mov ds:word ptr[edx],bp
484 mov ds:byte ptr[edi],ch
485L4x4_9:
486 cmp ds:word ptr[2+edx],bp
487 jg L4x4_10
488 mov ds:word ptr[2+edx],bp
489 mov ds:byte ptr[1+edi],ch
490L4x4_10:
491 cmp ds:word ptr[4+edx],bp
492 jg L4x4_11
493 mov ds:word ptr[4+edx],bp
494 mov ds:byte ptr[2+edi],ch
495L4x4_11:
496 cmp ds:word ptr[6+edx],bp
497 jg L4x4_12
498 mov ds:word ptr[6+edx],bp
499 mov ds:byte ptr[3+edi],ch
500L4x4_12:
501 cmp ds:word ptr[edx+esi*1],bp
502 jg L4x4_13
503 mov ds:word ptr[edx+esi*1],bp
504 mov ds:byte ptr[edi+ebx*1],ch
505L4x4_13:
506 cmp ds:word ptr[2+edx+esi*1],bp
507 jg L4x4_14
508 mov ds:word ptr[2+edx+esi*1],bp
509 mov ds:byte ptr[1+edi+ebx*1],ch
510L4x4_14:
511 cmp ds:word ptr[4+edx+esi*1],bp
512 jg L4x4_15
513 mov ds:word ptr[4+edx+esi*1],bp
514 mov ds:byte ptr[2+edi+ebx*1],ch
515L4x4_15:
516 cmp ds:word ptr[6+edx+esi*1],bp
517 jg L4x4_16
518 mov ds:word ptr[6+edx+esi*1],bp
519 mov ds:byte ptr[3+edi+ebx*1],ch
520L4x4_16:
521 pop esi
522 jmp LDone
523LDefault:
524 mov ebx,eax
525 mov ds:dword ptr[DP_Pix],eax
526 mov cl,ds:byte ptr[_d_y_aspect_shift]
527 shl ebx,cl
528LGenRowLoop:
529 mov eax,ds:dword ptr[DP_Pix]
530LGenColLoop:
531 cmp ds:word ptr[-2+edx+eax*2],bp
532 jg LGSkip
533 mov ds:word ptr[-2+edx+eax*2],bp
534 mov ds:byte ptr[-1+edi+eax*1],ch
535LGSkip:
536 dec eax
537 jnz LGenColLoop
538 add edx,ds:dword ptr[_d_zrowbytes]
539 add edi,ds:dword ptr[_screenwidth]
540 dec ebx
541 jnz LGenRowLoop
542LDone:
543 pop ebx
544 pop edi
545 pop ebp
546 ret
547LPop6AndDone:
548 fstp st(0)
549 fstp st(0)
550 fstp st(0)
551 fstp st(0)
552 fstp st(0)
553LPop1AndDone:
554 fstp st(0)
555 jmp LDone
556_TEXT ENDS
557 END
558