Home | History | Annotate | Download | only in client
      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
    236 p10_minus_p20 dd 0
    237 p01_minus_p21 dd 0
    238 temp0 dd 0
    239 temp1 dd 0
    240 Ltemp dd 0
    241 aff8entryvec_table dd LDraw8, LDraw7, LDraw6, LDraw5
    242  dd LDraw4, LDraw3, LDraw2, LDraw1
    243 lzistepx 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
    434 LSplit3:
    435  mov ebx,edi
    436  mov edi,esi
    437  mov esi,edx
    438  jmp LSplit
    439 LSplit2:
    440  mov eax,ebx
    441  mov ebx,esi
    442  mov esi,edi
    443  mov edi,eax
    444 LSplit:
    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
    477 LDraw:
    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
    501 LNoDraw:
    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
    512 LDone:
    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
    531 LSpanLoop:
    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
    546 LNoTurnover:
    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
    552 LRightEdgeStepped:
    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]
    583 LDrawLoop:
    584 LDraw8:
    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]
    592 LPatch8:
    593  mov ds:byte ptr[edi],al
    594 Lp1:
    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]
    601 LDraw7:
    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]
    609 LPatch7:
    610  mov ds:byte ptr[1+edi],al
    611 Lp2:
    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]
    618 LDraw6:
    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]
    626 LPatch6:
    627  mov ds:byte ptr[2+edi],al
    628 Lp3:
    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]
    635 LDraw5:
    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]
    643 LPatch5:
    644  mov ds:byte ptr[3+edi],al
    645 Lp4:
    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]
    652 LDraw4:
    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]
    660 LPatch4:
    661  mov ds:byte ptr[4+edi],al
    662 Lp5:
    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]
    669 LDraw3:
    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]
    677 LPatch3:
    678  mov ds:byte ptr[5+edi],al
    679 Lp6:
    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]
    686 LDraw2:
    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]
    694 LPatch2:
    695  mov ds:byte ptr[6+edi],al
    696 Lp7:
    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]
    703 LDraw1:
    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]
    711 LPatch1:
    712  mov ds:byte ptr[7+edi],al
    713 Lp8:
    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
    725 LNextSpan:
    726  add esi,32
    727 LNextSpanESISet:
    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
    736 LExactlyOneLong:
    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]
    750 LPatch9:
    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]
    786 Llooptop:
    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
    831 Lfacesback:
    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
    844 Lp11:
    845  test ds:dword ptr[24+esi],00020h
    846  jz Lp12
    847  add ds:dword ptr[0+8+esi],eax
    848 Lp12:
    849  test ds:dword ptr[24+edx],00020h
    850  jz Lp13
    851  add ds:dword ptr[0+8+edx],eax
    852 Lp13:
    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
    865 Lskip:
    866  sub ebp,16
    867  jnz Llooptop
    868 Ldone2:
    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]
    890 LScanLoop:
    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]
    926 LSkip1:
    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
    938 LNoLeftEdgeTurnover:
    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]
    954 LSkip2:
    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
    974 LFVLoop:
    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
   1005 LNextVert:
   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
   1023 LNDLoop:
   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
   1096 LOnseamDone0:
   1097  test esi,00020h
   1098  jz LOnseamDone1
   1099  add ds:dword ptr[_r_p1+8],eax
   1100 LOnseamDone1:
   1101  test edi,00020h
   1102  jz LOnseamDone2
   1103  add ds:dword ptr[_r_p2+8],eax
   1104 LOnseamDone2:
   1105 LFacesFront:
   1106  fstp ds:dword ptr[_d_xdenom]
   1107  call near ptr _D_PolysetSetEdgeTable
   1108  call near ptr _D_RasterizeAliasPolySmooth
   1109 LNextTri:
   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