• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DATA SEGMENT
235 align 4
236p10_minus_p20 dd 0
237p01_minus_p21 dd 0
238temp0 dd 0
239temp1 dd 0
240Ltemp dd 0
241aff8entryvec_table dd LDraw8, LDraw7, LDraw6, LDraw5
242 dd LDraw4, LDraw3, LDraw2, LDraw1
243lzistepx dd 0
244_DATA ENDS
245_TEXT SEGMENT
246 externdef _D_PolysetSetEdgeTable:dword
247 externdef _D_RasterizeAliasPolySmooth:dword
248 public _D_PolysetCalcGradients
249_D_PolysetCalcGradients:
250 fild ds:dword ptr[_r_p0+0]
251 fild ds:dword ptr[_r_p2+0]
252 fild ds:dword ptr[_r_p0+4]
253 fild ds:dword ptr[_r_p2+4]
254 fild ds:dword ptr[_r_p1+0]
255 fild ds:dword ptr[_r_p1+4]
256 fxch st(3)
257 fsub st(0),st(2)
258 fxch st(1)
259 fsub st(0),st(4)
260 fxch st(5)
261 fsubrp st(4),st(0)
262 fxch st(2)
263 fsubrp st(1),st(0)
264 fxch st(1)
265 fld ds:dword ptr[_d_xdenom]
266 fxch st(4)
267 fstp ds:dword ptr[p10_minus_p20]
268 fstp ds:dword ptr[p01_minus_p21]
269 fxch st(2)
270 fild ds:dword ptr[_r_p2+16]
271 fild ds:dword ptr[_r_p0+16]
272 fild ds:dword ptr[_r_p1+16]
273 fxch st(2)
274 fld st(0)
275 fsubp st(2),st(0)
276 fsubp st(2),st(0)
277 fld st(0)
278 fmul st(0),st(5)
279 fxch st(2)
280 fld st(0)
281 fmul ds:dword ptr[p01_minus_p21]
282 fxch st(2)
283 fmul ds:dword ptr[p10_minus_p20]
284 fxch st(1)
285 fmul st(0),st(5)
286 fxch st(2)
287 fsubrp st(3),st(0)
288 fsubp st(1),st(0)
289 fld st(2)
290 fmul ds:dword ptr[float_minus_1]
291 fxch st(2)
292 fmul st(0),st(3)
293 fxch st(1)
294 fmul st(0),st(2)
295 fldcw ds:word ptr[ceil_cw]
296 fistp ds:dword ptr[_r_lstepy]
297 fistp ds:dword ptr[_r_lstepx]
298 fldcw ds:word ptr[single_cw]
299 fild ds:dword ptr[_r_p2+8]
300 fild ds:dword ptr[_r_p0+8]
301 fild ds:dword ptr[_r_p1+8]
302 fxch st(2)
303 fld st(0)
304 fsubp st(2),st(0)
305 fsubp st(2),st(0)
306 fld st(0)
307 fmul st(0),st(6)
308 fxch st(2)
309 fld st(0)
310 fmul ds:dword ptr[p01_minus_p21]
311 fxch st(2)
312 fmul ds:dword ptr[p10_minus_p20]
313 fxch st(1)
314 fmul st(0),st(6)
315 fxch st(2)
316 fsubrp st(3),st(0)
317 fsubp st(1),st(0)
318 fmul st(0),st(2)
319 fxch st(1)
320 fmul st(0),st(3)
321 fxch st(1)
322 fistp ds:dword ptr[_r_sstepy]
323 fistp ds:dword ptr[_r_sstepx]
324 fild ds:dword ptr[_r_p2+12]
325 fild ds:dword ptr[_r_p0+12]
326 fild ds:dword ptr[_r_p1+12]
327 fxch st(2)
328 fld st(0)
329 fsubp st(2),st(0)
330 fsubp st(2),st(0)
331 fld st(0)
332 fmul st(0),st(6)
333 fxch st(2)
334 fld st(0)
335 fmul ds:dword ptr[p01_minus_p21]
336 fxch st(2)
337 fmul ds:dword ptr[p10_minus_p20]
338 fxch st(1)
339 fmul st(0),st(6)
340 fxch st(2)
341 fsubrp st(3),st(0)
342 fsubp st(1),st(0)
343 fmul st(0),st(2)
344 fxch st(1)
345 fmul st(0),st(3)
346 fxch st(1)
347 fistp ds:dword ptr[_r_tstepy]
348 fistp ds:dword ptr[_r_tstepx]
349 fild ds:dword ptr[_r_p2+20]
350 fild ds:dword ptr[_r_p0+20]
351 fild ds:dword ptr[_r_p1+20]
352 fxch st(2)
353 fld st(0)
354 fsubp st(2),st(0)
355 fsubp st(2),st(0)
356 fld st(0)
357 fmulp st(6),st(0)
358 fxch st(1)
359 fld st(0)
360 fmul ds:dword ptr[p01_minus_p21]
361 fxch st(2)
362 fmul ds:dword ptr[p10_minus_p20]
363 fxch st(1)
364 fmulp st(5),st(0)
365 fxch st(5)
366 fsubp st(1),st(0)
367 fxch st(3)
368 fsubrp st(4),st(0)
369 fxch st(1)
370 fmulp st(2),st(0)
371 fmulp st(2),st(0)
372 fistp ds:dword ptr[_r_zistepx]
373 fistp ds:dword ptr[_r_zistepy]
374 mov eax,ds:dword ptr[_r_sstepx]
375 mov edx,ds:dword ptr[_r_tstepx]
376 shl eax,16
377 shl edx,16
378 mov ds:dword ptr[_a_sstepxfrac],eax
379 mov ds:dword ptr[_a_tstepxfrac],edx
380 mov ecx,ds:dword ptr[_r_sstepx]
381 mov eax,ds:dword ptr[_r_tstepx]
382 sar ecx,16
383 sar eax,16
384 imul ds:dword ptr[4+0+esp]
385 add eax,ecx
386 mov ds:dword ptr[_a_ststepxwhole],eax
387 ret
388 public _D_PolysetRecursiveTriangle
389_D_PolysetRecursiveTriangle:
390 push ebp
391 push esi
392 push edi
393 push ebx
394 mov esi,ds:dword ptr[8+16+esp]
395 mov ebx,ds:dword ptr[4+16+esp]
396 mov edi,ds:dword ptr[12+16+esp]
397 mov eax,ds:dword ptr[0+esi]
398 mov edx,ds:dword ptr[0+ebx]
399 mov ebp,ds:dword ptr[4+esi]
400 sub eax,edx
401 mov ecx,ds:dword ptr[4+ebx]
402 sub ebp,ecx
403 inc eax
404 cmp eax,2
405 ja LSplit
406 mov eax,ds:dword ptr[0+edi]
407 inc ebp
408 cmp ebp,2
409 ja LSplit
410 mov edx,ds:dword ptr[0+esi]
411 mov ebp,ds:dword ptr[4+edi]
412 sub eax,edx
413 mov ecx,ds:dword ptr[4+esi]
414 sub ebp,ecx
415 inc eax
416 cmp eax,2
417 ja LSplit2
418 mov eax,ds:dword ptr[0+ebx]
419 inc ebp
420 cmp ebp,2
421 ja LSplit2
422 mov edx,ds:dword ptr[0+edi]
423 mov ebp,ds:dword ptr[4+ebx]
424 sub eax,edx
425 mov ecx,ds:dword ptr[4+edi]
426 sub ebp,ecx
427 inc eax
428 inc ebp
429 mov edx,ebx
430 cmp eax,2
431 ja LSplit3
432 cmp ebp,2
433 jna LDone
434LSplit3:
435 mov ebx,edi
436 mov edi,esi
437 mov esi,edx
438 jmp LSplit
439LSplit2:
440 mov eax,ebx
441 mov ebx,esi
442 mov esi,edi
443 mov edi,eax
444LSplit:
445 sub esp,24
446 mov eax,ds:dword ptr[8+ebx]
447 mov edx,ds:dword ptr[8+esi]
448 mov ecx,ds:dword ptr[12+ebx]
449 add eax,edx
450 mov edx,ds:dword ptr[12+esi]
451 sar eax,1
452 add ecx,edx
453 mov ds:dword ptr[8+esp],eax
454 mov eax,ds:dword ptr[20+ebx]
455 sar ecx,1
456 mov edx,ds:dword ptr[20+esi]
457 mov ds:dword ptr[12+esp],ecx
458 add eax,edx
459 mov ecx,ds:dword ptr[0+ebx]
460 mov edx,ds:dword ptr[0+esi]
461 sar eax,1
462 add edx,ecx
463 mov ds:dword ptr[20+esp],eax
464 mov eax,ds:dword ptr[4+ebx]
465 sar edx,1
466 mov ebp,ds:dword ptr[4+esi]
467 mov ds:dword ptr[0+esp],edx
468 add ebp,eax
469 sar ebp,1
470 mov ds:dword ptr[4+esp],ebp
471 cmp ds:dword ptr[4+esi],eax
472 jg LNoDraw
473 mov edx,ds:dword ptr[0+esi]
474 jnz LDraw
475 cmp edx,ecx
476 jl LNoDraw
477LDraw:
478 mov edx,ds:dword ptr[20+esp]
479 mov ecx,ds:dword ptr[4+esp]
480 sar edx,16
481 mov ebp,ds:dword ptr[0+esp]
482 mov eax,ds:dword ptr[_zspantable+ecx*4]
483 cmp dx,ds:word ptr[eax+ebp*2]
484 jnge LNoDraw
485 mov ds:word ptr[eax+ebp*2],dx
486 mov eax,ds:dword ptr[12+esp]
487 sar eax,16
488 mov edx,ds:dword ptr[8+esp]
489 sar edx,16
490 sub ecx,ecx
491 mov eax,ds:dword ptr[_skintable+eax*4]
492 mov ebp,ds:dword ptr[4+esp]
493 mov cl,ds:byte ptr[eax+edx]
494 mov edx,ds:dword ptr[_d_pcolormap]
495 mov dl,ds:byte ptr[edx+ecx]
496 mov ecx,ds:dword ptr[0+esp]
497 mov eax,ds:dword ptr[_d_scantable+ebp*4]
498 add ecx,eax
499 mov eax,ds:dword ptr[_d_viewbuffer]
500 mov ds:byte ptr[eax+ecx*1],dl
501LNoDraw:
502 push esp
503 push ebx
504 push edi
505 call near ptr _D_PolysetRecursiveTriangle
506 mov ebx,esp
507 push esi
508 push ebx
509 push edi
510 call near ptr _D_PolysetRecursiveTriangle
511 add esp,24
512LDone:
513 pop ebx
514 pop edi
515 pop esi
516 pop ebp
517 ret 12
518 public _D_PolysetAff8Start
519_D_PolysetAff8Start:
520 public _D_PolysetDrawSpans8
521_D_PolysetDrawSpans8:
522 push esi
523 push ebx
524 mov esi,ds:dword ptr[4+8+esp]
525 mov ecx,ds:dword ptr[_r_zistepx]
526 push ebp
527 push edi
528 ror ecx,16
529 mov edx,ds:dword ptr[8+esi]
530 mov ds:dword ptr[lzistepx],ecx
531LSpanLoop:
532 mov eax,ds:dword ptr[_d_aspancount]
533 sub eax,edx
534 mov edx,ds:dword ptr[_erroradjustup]
535 mov ebx,ds:dword ptr[_errorterm]
536 add ebx,edx
537 js LNoTurnover
538 mov edx,ds:dword ptr[_erroradjustdown]
539 mov edi,ds:dword ptr[_d_countextrastep]
540 sub ebx,edx
541 mov ebp,ds:dword ptr[_d_aspancount]
542 mov ds:dword ptr[_errorterm],ebx
543 add ebp,edi
544 mov ds:dword ptr[_d_aspancount],ebp
545 jmp LRightEdgeStepped
546LNoTurnover:
547 mov edi,ds:dword ptr[_d_aspancount]
548 mov edx,ds:dword ptr[_ubasestep]
549 mov ds:dword ptr[_errorterm],ebx
550 add edi,edx
551 mov ds:dword ptr[_d_aspancount],edi
552LRightEdgeStepped:
553 cmp eax,1
554 jl LNextSpan
555 jz LExactlyOneLong
556 mov ecx,ds:dword ptr[_a_ststepxwhole]
557 mov edx,ds:dword ptr[_r_affinetridesc+8]
558 mov ds:dword ptr[advancetable+4],ecx
559 add ecx,edx
560 mov ds:dword ptr[advancetable],ecx
561 mov ecx,ds:dword ptr[_a_tstepxfrac]
562 mov cx,ds:word ptr[_r_lstepx]
563 mov edx,eax
564 mov ds:dword ptr[tstep],ecx
565 add edx,7
566 shr edx,3
567 mov ebx,ds:dword ptr[16+esi]
568 mov bx,dx
569 mov ecx,ds:dword ptr[4+esi]
570 neg eax
571 mov edi,ds:dword ptr[0+esi]
572 and eax,7
573 sub edi,eax
574 sub ecx,eax
575 sub ecx,eax
576 mov edx,ds:dword ptr[20+esi]
577 mov dx,ds:word ptr[24+esi]
578 mov ebp,ds:dword ptr[28+esi]
579 ror ebp,16
580 push esi
581 mov esi,ds:dword ptr[12+esi]
582 jmp dword ptr[aff8entryvec_table+eax*4]
583LDrawLoop:
584LDraw8:
585 cmp bp,ds:word ptr[ecx]
586 jl Lp1
587 xor eax,eax
588 mov ah,dh
589 mov al,ds:byte ptr[esi]
590 mov ds:word ptr[ecx],bp
591 mov al,ds:byte ptr[12345678h+eax]
592LPatch8:
593 mov ds:byte ptr[edi],al
594Lp1:
595 add edx,ds:dword ptr[tstep]
596 sbb eax,eax
597 add ebp,ds:dword ptr[lzistepx]
598 adc ebp,0
599 add ebx,ds:dword ptr[_a_sstepxfrac]
600 adc esi,ds:dword ptr[advancetable+4+eax*4]
601LDraw7:
602 cmp bp,ds:word ptr[2+ecx]
603 jl Lp2
604 xor eax,eax
605 mov ah,dh
606 mov al,ds:byte ptr[esi]
607 mov ds:word ptr[2+ecx],bp
608 mov al,ds:byte ptr[12345678h+eax]
609LPatch7:
610 mov ds:byte ptr[1+edi],al
611Lp2:
612 add edx,ds:dword ptr[tstep]
613 sbb eax,eax
614 add ebp,ds:dword ptr[lzistepx]
615 adc ebp,0
616 add ebx,ds:dword ptr[_a_sstepxfrac]
617 adc esi,ds:dword ptr[advancetable+4+eax*4]
618LDraw6:
619 cmp bp,ds:word ptr[4+ecx]
620 jl Lp3
621 xor eax,eax
622 mov ah,dh
623 mov al,ds:byte ptr[esi]
624 mov ds:word ptr[4+ecx],bp
625 mov al,ds:byte ptr[12345678h+eax]
626LPatch6:
627 mov ds:byte ptr[2+edi],al
628Lp3:
629 add edx,ds:dword ptr[tstep]
630 sbb eax,eax
631 add ebp,ds:dword ptr[lzistepx]
632 adc ebp,0
633 add ebx,ds:dword ptr[_a_sstepxfrac]
634 adc esi,ds:dword ptr[advancetable+4+eax*4]
635LDraw5:
636 cmp bp,ds:word ptr[6+ecx]
637 jl Lp4
638 xor eax,eax
639 mov ah,dh
640 mov al,ds:byte ptr[esi]
641 mov ds:word ptr[6+ecx],bp
642 mov al,ds:byte ptr[12345678h+eax]
643LPatch5:
644 mov ds:byte ptr[3+edi],al
645Lp4:
646 add edx,ds:dword ptr[tstep]
647 sbb eax,eax
648 add ebp,ds:dword ptr[lzistepx]
649 adc ebp,0
650 add ebx,ds:dword ptr[_a_sstepxfrac]
651 adc esi,ds:dword ptr[advancetable+4+eax*4]
652LDraw4:
653 cmp bp,ds:word ptr[8+ecx]
654 jl Lp5
655 xor eax,eax
656 mov ah,dh
657 mov al,ds:byte ptr[esi]
658 mov ds:word ptr[8+ecx],bp
659 mov al,ds:byte ptr[12345678h+eax]
660LPatch4:
661 mov ds:byte ptr[4+edi],al
662Lp5:
663 add edx,ds:dword ptr[tstep]
664 sbb eax,eax
665 add ebp,ds:dword ptr[lzistepx]
666 adc ebp,0
667 add ebx,ds:dword ptr[_a_sstepxfrac]
668 adc esi,ds:dword ptr[advancetable+4+eax*4]
669LDraw3:
670 cmp bp,ds:word ptr[10+ecx]
671 jl Lp6
672 xor eax,eax
673 mov ah,dh
674 mov al,ds:byte ptr[esi]
675 mov ds:word ptr[10+ecx],bp
676 mov al,ds:byte ptr[12345678h+eax]
677LPatch3:
678 mov ds:byte ptr[5+edi],al
679Lp6:
680 add edx,ds:dword ptr[tstep]
681 sbb eax,eax
682 add ebp,ds:dword ptr[lzistepx]
683 adc ebp,0
684 add ebx,ds:dword ptr[_a_sstepxfrac]
685 adc esi,ds:dword ptr[advancetable+4+eax*4]
686LDraw2:
687 cmp bp,ds:word ptr[12+ecx]
688 jl Lp7
689 xor eax,eax
690 mov ah,dh
691 mov al,ds:byte ptr[esi]
692 mov ds:word ptr[12+ecx],bp
693 mov al,ds:byte ptr[12345678h+eax]
694LPatch2:
695 mov ds:byte ptr[6+edi],al
696Lp7:
697 add edx,ds:dword ptr[tstep]
698 sbb eax,eax
699 add ebp,ds:dword ptr[lzistepx]
700 adc ebp,0
701 add ebx,ds:dword ptr[_a_sstepxfrac]
702 adc esi,ds:dword ptr[advancetable+4+eax*4]
703LDraw1:
704 cmp bp,ds:word ptr[14+ecx]
705 jl Lp8
706 xor eax,eax
707 mov ah,dh
708 mov al,ds:byte ptr[esi]
709 mov ds:word ptr[14+ecx],bp
710 mov al,ds:byte ptr[12345678h+eax]
711LPatch1:
712 mov ds:byte ptr[7+edi],al
713Lp8:
714 add edx,ds:dword ptr[tstep]
715 sbb eax,eax
716 add ebp,ds:dword ptr[lzistepx]
717 adc ebp,0
718 add ebx,ds:dword ptr[_a_sstepxfrac]
719 adc esi,ds:dword ptr[advancetable+4+eax*4]
720 add edi,8
721 add ecx,16
722 dec bx
723 jnz LDrawLoop
724 pop esi
725LNextSpan:
726 add esi,32
727LNextSpanESISet:
728 mov edx,ds:dword ptr[8+esi]
729 cmp edx,offset -999999
730 jnz LSpanLoop
731 pop edi
732 pop ebp
733 pop ebx
734 pop esi
735 ret
736LExactlyOneLong:
737 mov ecx,ds:dword ptr[4+esi]
738 mov ebp,ds:dword ptr[28+esi]
739 ror ebp,16
740 mov ebx,ds:dword ptr[12+esi]
741 cmp bp,ds:word ptr[ecx]
742 jl LNextSpan
743 xor eax,eax
744 mov edi,ds:dword ptr[0+esi]
745 mov ah,ds:byte ptr[24+1+esi]
746 add esi,32
747 mov al,ds:byte ptr[ebx]
748 mov ds:word ptr[ecx],bp
749 mov al,ds:byte ptr[12345678h+eax]
750LPatch9:
751 mov ds:byte ptr[edi],al
752 jmp LNextSpanESISet
753 public _D_PolysetAff8End
754_D_PolysetAff8End:
755 public _D_Aff8Patch
756_D_Aff8Patch:
757 mov eax,ds:dword ptr[4+esp]
758 mov ds:dword ptr[LPatch1-4],eax
759 mov ds:dword ptr[LPatch2-4],eax
760 mov ds:dword ptr[LPatch3-4],eax
761 mov ds:dword ptr[LPatch4-4],eax
762 mov ds:dword ptr[LPatch5-4],eax
763 mov ds:dword ptr[LPatch6-4],eax
764 mov ds:dword ptr[LPatch7-4],eax
765 mov ds:dword ptr[LPatch8-4],eax
766 mov ds:dword ptr[LPatch9-4],eax
767 ret
768 public _D_PolysetDraw
769_D_PolysetDraw:
770 sub esp,offset (((1024+1 + 1 + ((32 - 1) / 32)) + 1) * 32)
771 mov eax,esp
772 add eax,32 - 1
773 and eax,offset not (32 - 1)
774 mov ds:dword ptr[_a_spans],eax
775 mov eax,ds:dword ptr[_r_affinetridesc+28]
776 test eax,eax
777 jz _D_DrawNonSubdiv
778 push ebp
779 mov ebp,ds:dword ptr[_r_affinetridesc+24]
780 push esi
781 shl ebp,4
782 push ebx
783 mov ebx,ds:dword ptr[_r_affinetridesc+16]
784 push edi
785 mov edi,ds:dword ptr[_r_affinetridesc+20]
786Llooptop:
787 mov ecx,ds:dword ptr[4-16+0+ebx+ebp]
788 mov esi,ds:dword ptr[4-16+4+ebx+ebp]
789 shl ecx,5
790 mov edx,ds:dword ptr[4-16+8+ebx+ebp]
791 shl esi,5
792 add ecx,edi
793 shl edx,5
794 add esi,edi
795 add edx,edi
796 fild ds:dword ptr[0+4+ecx]
797 fild ds:dword ptr[0+4+esi]
798 fild ds:dword ptr[0+0+ecx]
799 fild ds:dword ptr[0+0+edx]
800 fxch st(2)
801 fsubr st(0),st(3)
802 fild ds:dword ptr[0+0+esi]
803 fxch st(2)
804 fsubr st(3),st(0)
805 fild ds:dword ptr[0+4+edx]
806 fxch st(1)
807 fsubrp st(3),st(0)
808 fxch st(1)
809 fmulp st(3),st(0)
810 fsubp st(3),st(0)
811 mov eax,ds:dword ptr[0+16+ecx]
812 and eax,0FF00h
813 fmulp st(2),st(0)
814 add eax,ds:dword ptr[_acolormap]
815 fsubrp st(1),st(0)
816 mov ds:dword ptr[_d_pcolormap],eax
817 fstp ds:dword ptr[Ltemp]
818 mov eax,ds:dword ptr[Ltemp]
819 sub eax,080000001h
820 jc Lskip
821 mov eax,ds:dword ptr[0-16+ebx+ebp]
822 test eax,eax
823 jz Lfacesback
824 push edx
825 push esi
826 push ecx
827 call near ptr _D_PolysetRecursiveTriangle
828 sub ebp,16
829 jnz Llooptop
830 jmp Ldone2
831Lfacesback:
832 mov eax,ds:dword ptr[0+8+ecx]
833 push eax
834 mov eax,ds:dword ptr[0+8+esi]
835 push eax
836 mov eax,ds:dword ptr[0+8+edx]
837 push eax
838 push ecx
839 push edx
840 mov eax,ds:dword ptr[_r_affinetridesc+32]
841 test ds:dword ptr[24+ecx],00020h
842 jz Lp11
843 add ds:dword ptr[0+8+ecx],eax
844Lp11:
845 test ds:dword ptr[24+esi],00020h
846 jz Lp12
847 add ds:dword ptr[0+8+esi],eax
848Lp12:
849 test ds:dword ptr[24+edx],00020h
850 jz Lp13
851 add ds:dword ptr[0+8+edx],eax
852Lp13:
853 push edx
854 push esi
855 push ecx
856 call near ptr _D_PolysetRecursiveTriangle
857 pop edx
858 pop ecx
859 pop eax
860 mov ds:dword ptr[0+8+edx],eax
861 pop eax
862 mov ds:dword ptr[0+8+esi],eax
863 pop eax
864 mov ds:dword ptr[0+8+ecx],eax
865Lskip:
866 sub ebp,16
867 jnz Llooptop
868Ldone2:
869 pop edi
870 pop ebx
871 pop esi
872 pop ebp
873 add esp,offset (((1024+1 + 1 + ((32 - 1) / 32)) + 1) * 32)
874 ret
875 public _D_PolysetScanLeftEdge
876_D_PolysetScanLeftEdge:
877 push ebp
878 push esi
879 push edi
880 push ebx
881 mov eax,ds:dword ptr[4+16+esp]
882 mov ecx,ds:dword ptr[_d_sfrac]
883 and eax,0FFFFh
884 mov ebx,ds:dword ptr[_d_ptex]
885 or ecx,eax
886 mov esi,ds:dword ptr[_d_pedgespanpackage]
887 mov edx,ds:dword ptr[_d_tfrac]
888 mov edi,ds:dword ptr[_d_light]
889 mov ebp,ds:dword ptr[_d_zi]
890LScanLoop:
891 mov ds:dword ptr[12+esi],ebx
892 mov eax,ds:dword ptr[_d_pdest]
893 mov ds:dword ptr[0+esi],eax
894 mov eax,ds:dword ptr[_d_pz]
895 mov ds:dword ptr[4+esi],eax
896 mov eax,ds:dword ptr[_d_aspancount]
897 mov ds:dword ptr[8+esi],eax
898 mov ds:dword ptr[24+esi],edi
899 mov ds:dword ptr[28+esi],ebp
900 mov ds:dword ptr[16+esi],ecx
901 mov ds:dword ptr[20+esi],edx
902 mov al,ds:byte ptr[32+esi]
903 add esi,32
904 mov eax,ds:dword ptr[_erroradjustup]
905 mov ds:dword ptr[_d_pedgespanpackage],esi
906 mov esi,ds:dword ptr[_errorterm]
907 add esi,eax
908 mov eax,ds:dword ptr[_d_pdest]
909 js LNoLeftEdgeTurnover
910 sub esi,ds:dword ptr[_erroradjustdown]
911 add eax,ds:dword ptr[_d_pdestextrastep]
912 mov ds:dword ptr[_errorterm],esi
913 mov ds:dword ptr[_d_pdest],eax
914 mov eax,ds:dword ptr[_d_pz]
915 mov esi,ds:dword ptr[_d_aspancount]
916 add eax,ds:dword ptr[_d_pzextrastep]
917 add ecx,ds:dword ptr[_d_sfracextrastep]
918 adc ebx,ds:dword ptr[_d_ptexextrastep]
919 add esi,ds:dword ptr[_d_countextrastep]
920 mov ds:dword ptr[_d_pz],eax
921 mov eax,ds:dword ptr[_d_tfracextrastep]
922 mov ds:dword ptr[_d_aspancount],esi
923 add edx,eax
924 jnc LSkip1
925 add ebx,ds:dword ptr[_r_affinetridesc+8]
926LSkip1:
927 add edi,ds:dword ptr[_d_lightextrastep]
928 add ebp,ds:dword ptr[_d_ziextrastep]
929 mov esi,ds:dword ptr[_d_pedgespanpackage]
930 dec ecx
931 test ecx,0FFFFh
932 jnz LScanLoop
933 pop ebx
934 pop edi
935 pop esi
936 pop ebp
937 ret
938LNoLeftEdgeTurnover:
939 mov ds:dword ptr[_errorterm],esi
940 add eax,ds:dword ptr[_d_pdestbasestep]
941 mov ds:dword ptr[_d_pdest],eax
942 mov eax,ds:dword ptr[_d_pz]
943 mov esi,ds:dword ptr[_d_aspancount]
944 add eax,ds:dword ptr[_d_pzbasestep]
945 add ecx,ds:dword ptr[_d_sfracbasestep]
946 adc ebx,ds:dword ptr[_d_ptexbasestep]
947 add esi,ds:dword ptr[_ubasestep]
948 mov ds:dword ptr[_d_pz],eax
949 mov ds:dword ptr[_d_aspancount],esi
950 mov esi,ds:dword ptr[_d_tfracbasestep]
951 add edx,esi
952 jnc LSkip2
953 add ebx,ds:dword ptr[_r_affinetridesc+8]
954LSkip2:
955 add edi,ds:dword ptr[_d_lightbasestep]
956 add ebp,ds:dword ptr[_d_zibasestep]
957 mov esi,ds:dword ptr[_d_pedgespanpackage]
958 dec ecx
959 test ecx,0FFFFh
960 jnz LScanLoop
961 pop ebx
962 pop edi
963 pop esi
964 pop ebp
965 ret
966 public _D_PolysetDrawFinalVerts
967_D_PolysetDrawFinalVerts:
968 push ebp
969 push ebx
970 mov ecx,ds:dword ptr[8+8+esp]
971 mov ebx,ds:dword ptr[4+8+esp]
972 push esi
973 push edi
974LFVLoop:
975 mov eax,ds:dword ptr[0+0+ebx]
976 mov edx,ds:dword ptr[_r_refdef+40]
977 cmp eax,edx
978 jge LNextVert
979 mov esi,ds:dword ptr[0+4+ebx]
980 mov edx,ds:dword ptr[_r_refdef+44]
981 cmp esi,edx
982 jge LNextVert
983 mov edi,ds:dword ptr[_zspantable+esi*4]
984 mov edx,ds:dword ptr[0+20+ebx]
985 shr edx,16
986 cmp dx,ds:word ptr[edi+eax*2]
987 jl LNextVert
988 mov ds:word ptr[edi+eax*2],dx
989 mov edi,ds:dword ptr[0+12+ebx]
990 shr edi,16
991 mov edi,ds:dword ptr[_skintable+edi*4]
992 mov edx,ds:dword ptr[0+8+ebx]
993 shr edx,16
994 mov dl,ds:byte ptr[edi+edx]
995 mov edi,ds:dword ptr[0+16+ebx]
996 and edi,0FF00h
997 and edx,000FFh
998 add edi,edx
999 mov edx,ds:dword ptr[_acolormap]
1000 mov dl,ds:byte ptr[edx+edi*1]
1001 mov edi,ds:dword ptr[_d_scantable+esi*4]
1002 mov esi,ds:dword ptr[_d_viewbuffer]
1003 add edi,eax
1004 mov ds:byte ptr[esi+edi],dl
1005LNextVert:
1006 add ebx,32
1007 dec ecx
1008 jnz LFVLoop
1009 pop edi
1010 pop esi
1011 pop ebx
1012 pop ebp
1013 ret
1014 public _D_DrawNonSubdiv
1015_D_DrawNonSubdiv:
1016 push ebp
1017 mov ebp,ds:dword ptr[_r_affinetridesc+24]
1018 push ebx
1019 shl ebp,4
1020 push esi
1021 mov esi,ds:dword ptr[_r_affinetridesc+16]
1022 push edi
1023LNDLoop:
1024 mov edi,ds:dword ptr[_r_affinetridesc+20]
1025 mov ecx,ds:dword ptr[4+0-16+esi+ebp*1]
1026 shl ecx,5
1027 mov edx,ds:dword ptr[4+4-16+esi+ebp*1]
1028 shl edx,5
1029 mov ebx,ds:dword ptr[4+8-16+esi+ebp*1]
1030 shl ebx,5
1031 add ecx,edi
1032 add edx,edi
1033 add ebx,edi
1034 mov eax,ds:dword ptr[0+4+ecx]
1035 mov esi,ds:dword ptr[0+0+ecx]
1036 sub eax,ds:dword ptr[0+4+edx]
1037 sub esi,ds:dword ptr[0+0+ebx]
1038 imul eax,esi
1039 mov esi,ds:dword ptr[0+0+ecx]
1040 mov edi,ds:dword ptr[0+4+ecx]
1041 sub esi,ds:dword ptr[0+0+edx]
1042 sub edi,ds:dword ptr[0+4+ebx]
1043 imul edi,esi
1044 sub eax,edi
1045 jns LNextTri
1046 mov ds:dword ptr[_d_xdenom],eax
1047 fild ds:dword ptr[_d_xdenom]
1048 mov eax,ds:dword ptr[0+0+ecx]
1049 mov esi,ds:dword ptr[0+4+ecx]
1050 mov ds:dword ptr[_r_p0+0],eax
1051 mov ds:dword ptr[_r_p0+4],esi
1052 mov eax,ds:dword ptr[0+8+ecx]
1053 mov esi,ds:dword ptr[0+12+ecx]
1054 mov ds:dword ptr[_r_p0+8],eax
1055 mov ds:dword ptr[_r_p0+12],esi
1056 mov eax,ds:dword ptr[0+16+ecx]
1057 mov esi,ds:dword ptr[0+20+ecx]
1058 mov ds:dword ptr[_r_p0+16],eax
1059 mov ds:dword ptr[_r_p0+20],esi
1060 fdivr ds:dword ptr[float_1]
1061 mov eax,ds:dword ptr[0+0+edx]
1062 mov esi,ds:dword ptr[0+4+edx]
1063 mov ds:dword ptr[_r_p1+0],eax
1064 mov ds:dword ptr[_r_p1+4],esi
1065 mov eax,ds:dword ptr[0+8+edx]
1066 mov esi,ds:dword ptr[0+12+edx]
1067 mov ds:dword ptr[_r_p1+8],eax
1068 mov ds:dword ptr[_r_p1+12],esi
1069 mov eax,ds:dword ptr[0+16+edx]
1070 mov esi,ds:dword ptr[0+20+edx]
1071 mov ds:dword ptr[_r_p1+16],eax
1072 mov ds:dword ptr[_r_p1+20],esi
1073 mov eax,ds:dword ptr[0+0+ebx]
1074 mov esi,ds:dword ptr[0+4+ebx]
1075 mov ds:dword ptr[_r_p2+0],eax
1076 mov ds:dword ptr[_r_p2+4],esi
1077 mov eax,ds:dword ptr[0+8+ebx]
1078 mov esi,ds:dword ptr[0+12+ebx]
1079 mov ds:dword ptr[_r_p2+8],eax
1080 mov ds:dword ptr[_r_p2+12],esi
1081 mov eax,ds:dword ptr[0+16+ebx]
1082 mov esi,ds:dword ptr[0+20+ebx]
1083 mov ds:dword ptr[_r_p2+16],eax
1084 mov edi,ds:dword ptr[_r_affinetridesc+16]
1085 mov ds:dword ptr[_r_p2+20],esi
1086 mov eax,ds:dword ptr[0-16+edi+ebp*1]
1087 test eax,eax
1088 jnz LFacesFront
1089 mov eax,ds:dword ptr[24+ecx]
1090 mov esi,ds:dword ptr[24+edx]
1091 mov edi,ds:dword ptr[24+ebx]
1092 test eax,00020h
1093 mov eax,ds:dword ptr[_r_affinetridesc+32]
1094 jz LOnseamDone0
1095 add ds:dword ptr[_r_p0+8],eax
1096LOnseamDone0:
1097 test esi,00020h
1098 jz LOnseamDone1
1099 add ds:dword ptr[_r_p1+8],eax
1100LOnseamDone1:
1101 test edi,00020h
1102 jz LOnseamDone2
1103 add ds:dword ptr[_r_p2+8],eax
1104LOnseamDone2:
1105LFacesFront:
1106 fstp ds:dword ptr[_d_xdenom]
1107 call near ptr _D_PolysetSetEdgeTable
1108 call near ptr _D_RasterizeAliasPolySmooth
1109LNextTri:
1110 mov esi,ds:dword ptr[_r_affinetridesc+16]
1111 sub ebp,16
1112 jnz LNDLoop
1113 pop edi
1114 pop esi
1115 pop ebx
1116 pop ebp
1117 add esp,offset (((1024+1 + 1 + ((32 - 1) / 32)) + 1) * 32)
1118 ret
1119_TEXT ENDS
1120 END
1121