home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / q1source_amy / qw / client / surf8.asm < prev    next >
Encoding:
Assembly Source File  |  1996-09-18  |  17.1 KB  |  720 lines

  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. sb_v dd 0
  236. _DATA ENDS
  237. _TEXT SEGMENT
  238.  align 4
  239.  public _R_Surf8Start
  240. _R_Surf8Start:
  241.  align 4
  242.  public _R_DrawSurfaceBlock8_mip0
  243. _R_DrawSurfaceBlock8_mip0:
  244.  push ebp
  245.  push edi
  246.  push esi
  247.  push ebx
  248.  mov ebx,ds:dword ptr[_r_lightptr]
  249.  mov eax,ds:dword ptr[_r_numvblocks]
  250.  mov ds:dword ptr[sb_v],eax
  251.  mov edi,ds:dword ptr[_prowdestbase]
  252.  mov esi,ds:dword ptr[_pbasesource]
  253. Lv_loop_mip0:
  254.  mov eax,ds:dword ptr[ebx]
  255.  mov edx,ds:dword ptr[4+ebx]
  256.  mov ebp,eax
  257.  mov ecx,ds:dword ptr[_r_lightwidth]
  258.  mov ds:dword ptr[_lightright],edx
  259.  sub ebp,edx
  260.  and ebp,0FFFFFh
  261.  lea ebx,ds:dword ptr[ebx+ecx*4]
  262.  mov ds:dword ptr[_r_lightptr],ebx
  263.  mov ecx,ds:dword ptr[4+ebx]
  264.  mov ebx,ds:dword ptr[ebx]
  265.  sub ebx,eax
  266.  sub ecx,edx
  267.  sar ecx,4
  268.  or ebp,0F0000000h
  269.  sar ebx,4
  270.  mov ds:dword ptr[_lightrightstep],ecx
  271.  sub ebx,ecx
  272.  and ebx,0FFFFFh
  273.  or ebx,0F0000000h
  274.  sub ecx,ecx
  275.  mov ds:dword ptr[_lightdeltastep],ebx
  276.  sub ebx,ebx
  277. Lblockloop8_mip0:
  278.  mov ds:dword ptr[_lightdelta],ebp
  279.  mov cl,ds:byte ptr[14+esi]
  280.  sar ebp,4
  281.  mov bh,dh
  282.  mov bl,ds:byte ptr[15+esi]
  283.  add edx,ebp
  284.  mov ch,dh
  285.  add edx,ebp
  286.  mov ah,ds:byte ptr[12345678h+ebx]
  287. LBPatch0:
  288.  mov bl,ds:byte ptr[13+esi]
  289.  mov al,ds:byte ptr[12345678h+ecx]
  290. LBPatch1:
  291.  mov cl,ds:byte ptr[12+esi]
  292.  mov bh,dh
  293.  add edx,ebp
  294.  ror eax,16
  295.  mov ch,dh
  296.  add edx,ebp
  297.  mov ah,ds:byte ptr[12345678h+ebx]
  298. LBPatch2:
  299.  mov bl,ds:byte ptr[11+esi]
  300.  mov al,ds:byte ptr[12345678h+ecx]
  301. LBPatch3:
  302.  mov cl,ds:byte ptr[10+esi]
  303.  mov ds:dword ptr[12+edi],eax
  304.  mov bh,dh
  305.  add edx,ebp
  306.  mov ch,dh
  307.  add edx,ebp
  308.  mov ah,ds:byte ptr[12345678h+ebx]
  309. LBPatch4:
  310.  mov bl,ds:byte ptr[9+esi]
  311.  mov al,ds:byte ptr[12345678h+ecx]
  312. LBPatch5:
  313.  mov cl,ds:byte ptr[8+esi]
  314.  mov bh,dh
  315.  add edx,ebp
  316.  ror eax,16
  317.  mov ch,dh
  318.  add edx,ebp
  319.  mov ah,ds:byte ptr[12345678h+ebx]
  320. LBPatch6:
  321.  mov bl,ds:byte ptr[7+esi]
  322.  mov al,ds:byte ptr[12345678h+ecx]
  323. LBPatch7:
  324.  mov cl,ds:byte ptr[6+esi]
  325.  mov ds:dword ptr[8+edi],eax
  326.  mov bh,dh
  327.  add edx,ebp
  328.  mov ch,dh
  329.  add edx,ebp
  330.  mov ah,ds:byte ptr[12345678h+ebx]
  331. LBPatch8:
  332.  mov bl,ds:byte ptr[5+esi]
  333.  mov al,ds:byte ptr[12345678h+ecx]
  334. LBPatch9:
  335.  mov cl,ds:byte ptr[4+esi]
  336.  mov bh,dh
  337.  add edx,ebp
  338.  ror eax,16
  339.  mov ch,dh
  340.  add edx,ebp
  341.  mov ah,ds:byte ptr[12345678h+ebx]
  342. LBPatch10:
  343.  mov bl,ds:byte ptr[3+esi]
  344.  mov al,ds:byte ptr[12345678h+ecx]
  345. LBPatch11:
  346.  mov cl,ds:byte ptr[2+esi]
  347.  mov ds:dword ptr[4+edi],eax
  348.  mov bh,dh
  349.  add edx,ebp
  350.  mov ch,dh
  351.  add edx,ebp
  352.  mov ah,ds:byte ptr[12345678h+ebx]
  353. LBPatch12:
  354.  mov bl,ds:byte ptr[1+esi]
  355.  mov al,ds:byte ptr[12345678h+ecx]
  356. LBPatch13:
  357.  mov cl,ds:byte ptr[esi]
  358.  mov bh,dh
  359.  add edx,ebp
  360.  ror eax,16
  361.  mov ch,dh
  362.  mov ah,ds:byte ptr[12345678h+ebx]
  363. LBPatch14:
  364.  mov edx,ds:dword ptr[_lightright]
  365.  mov al,ds:byte ptr[12345678h+ecx]
  366. LBPatch15:
  367.  mov ebp,ds:dword ptr[_lightdelta]
  368.  mov ds:dword ptr[edi],eax
  369.  add esi,ds:dword ptr[_sourcetstep]
  370.  add edi,ds:dword ptr[_surfrowbytes]
  371.  add edx,ds:dword ptr[_lightrightstep]
  372.  add ebp,ds:dword ptr[_lightdeltastep]
  373.  mov ds:dword ptr[_lightright],edx
  374.  jc Lblockloop8_mip0
  375.  cmp esi,ds:dword ptr[_r_sourcemax]
  376.  jb LSkip_mip0
  377.  sub esi,ds:dword ptr[_r_stepback]
  378. LSkip_mip0:
  379.  mov ebx,ds:dword ptr[_r_lightptr]
  380.  dec ds:dword ptr[sb_v]
  381.  jnz Lv_loop_mip0
  382.  pop ebx
  383.  pop esi
  384.  pop edi
  385.  pop ebp
  386.  ret
  387.  align 4
  388.  public _R_DrawSurfaceBlock8_mip1
  389. _R_DrawSurfaceBlock8_mip1:
  390.  push ebp
  391.  push edi
  392.  push esi
  393.  push ebx
  394.  mov ebx,ds:dword ptr[_r_lightptr]
  395.  mov eax,ds:dword ptr[_r_numvblocks]
  396.  mov ds:dword ptr[sb_v],eax
  397.  mov edi,ds:dword ptr[_prowdestbase]
  398.  mov esi,ds:dword ptr[_pbasesource]
  399. Lv_loop_mip1:
  400.  mov eax,ds:dword ptr[ebx]
  401.  mov edx,ds:dword ptr[4+ebx]
  402.  mov ebp,eax
  403.  mov ecx,ds:dword ptr[_r_lightwidth]
  404.  mov ds:dword ptr[_lightright],edx
  405.  sub ebp,edx
  406.  and ebp,0FFFFFh
  407.  lea ebx,ds:dword ptr[ebx+ecx*4]
  408.  mov ds:dword ptr[_r_lightptr],ebx
  409.  mov ecx,ds:dword ptr[4+ebx]
  410.  mov ebx,ds:dword ptr[ebx]
  411.  sub ebx,eax
  412.  sub ecx,edx
  413.  sar ecx,3
  414.  or ebp,070000000h
  415.  sar ebx,3
  416.  mov ds:dword ptr[_lightrightstep],ecx
  417.  sub ebx,ecx
  418.  and ebx,0FFFFFh
  419.  or ebx,0F0000000h
  420.  sub ecx,ecx
  421.  mov ds:dword ptr[_lightdeltastep],ebx
  422.  sub ebx,ebx
  423. Lblockloop8_mip1:
  424.  mov ds:dword ptr[_lightdelta],ebp
  425.  mov cl,ds:byte ptr[6+esi]
  426.  sar ebp,3
  427.  mov bh,dh
  428.  mov bl,ds:byte ptr[7+esi]
  429.  add edx,ebp
  430.  mov ch,dh
  431.  add edx,ebp
  432.  mov ah,ds:byte ptr[12345678h+ebx]
  433. LBPatch22:
  434.  mov bl,ds:byte ptr[5+esi]
  435.  mov al,ds:byte ptr[12345678h+ecx]
  436. LBPatch23:
  437.  mov cl,ds:byte ptr[4+esi]
  438.  mov bh,dh
  439.  add edx,ebp
  440.  ror eax,16
  441.  mov ch,dh
  442.  add edx,ebp
  443.  mov ah,ds:byte ptr[12345678h+ebx]
  444. LBPatch24:
  445.  mov bl,ds:byte ptr[3+esi]
  446.  mov al,ds:byte ptr[12345678h+ecx]
  447. LBPatch25:
  448.  mov cl,ds:byte ptr[2+esi]
  449.  mov ds:dword ptr[4+edi],eax
  450.  mov bh,dh
  451.  add edx,ebp
  452.  mov ch,dh
  453.  add edx,ebp
  454.  mov ah,ds:byte ptr[12345678h+ebx]
  455. LBPatch26:
  456.  mov bl,ds:byte ptr[1+esi]
  457.  mov al,ds:byte ptr[12345678h+ecx]
  458. LBPatch27:
  459.  mov cl,ds:byte ptr[esi]
  460.  mov bh,dh
  461.  add edx,ebp
  462.  ror eax,16
  463.  mov ch,dh
  464.  mov ah,ds:byte ptr[12345678h+ebx]
  465. LBPatch28:
  466.  mov edx,ds:dword ptr[_lightright]
  467.  mov al,ds:byte ptr[12345678h+ecx]
  468. LBPatch29:
  469.  mov ebp,ds:dword ptr[_lightdelta]
  470.  mov ds:dword ptr[edi],eax
  471.  mov eax,ds:dword ptr[_sourcetstep]
  472.  add esi,eax
  473.  mov eax,ds:dword ptr[_surfrowbytes]
  474.  add edi,eax
  475.  mov eax,ds:dword ptr[_lightrightstep]
  476.  add edx,eax
  477.  mov eax,ds:dword ptr[_lightdeltastep]
  478.  add ebp,eax
  479.  mov ds:dword ptr[_lightright],edx
  480.  jc Lblockloop8_mip1
  481.  cmp esi,ds:dword ptr[_r_sourcemax]
  482.  jb LSkip_mip1
  483.  sub esi,ds:dword ptr[_r_stepback]
  484. LSkip_mip1:
  485.  mov ebx,ds:dword ptr[_r_lightptr]
  486.  dec ds:dword ptr[sb_v]
  487.  jnz Lv_loop_mip1
  488.  pop ebx
  489.  pop esi
  490.  pop edi
  491.  pop ebp
  492.  ret
  493.  align 4
  494.  public _R_DrawSurfaceBlock8_mip2
  495. _R_DrawSurfaceBlock8_mip2:
  496.  push ebp
  497.  push edi
  498.  push esi
  499.  push ebx
  500.  mov ebx,ds:dword ptr[_r_lightptr]
  501.  mov eax,ds:dword ptr[_r_numvblocks]
  502.  mov ds:dword ptr[sb_v],eax
  503.  mov edi,ds:dword ptr[_prowdestbase]
  504.  mov esi,ds:dword ptr[_pbasesource]
  505. Lv_loop_mip2:
  506.  mov eax,ds:dword ptr[ebx]
  507.  mov edx,ds:dword ptr[4+ebx]
  508.  mov ebp,eax
  509.  mov ecx,ds:dword ptr[_r_lightwidth]
  510.  mov ds:dword ptr[_lightright],edx
  511.  sub ebp,edx
  512.  and ebp,0FFFFFh
  513.  lea ebx,ds:dword ptr[ebx+ecx*4]
  514.  mov ds:dword ptr[_r_lightptr],ebx
  515.  mov ecx,ds:dword ptr[4+ebx]
  516.  mov ebx,ds:dword ptr[ebx]
  517.  sub ebx,eax
  518.  sub ecx,edx
  519.  sar ecx,2
  520.  or ebp,030000000h
  521.  sar ebx,2
  522.  mov ds:dword ptr[_lightrightstep],ecx
  523.  sub ebx,ecx
  524.  and ebx,0FFFFFh
  525.  or ebx,0F0000000h
  526.  sub ecx,ecx
  527.  mov ds:dword ptr[_lightdeltastep],ebx
  528.  sub ebx,ebx
  529. Lblockloop8_mip2:
  530.  mov ds:dword ptr[_lightdelta],ebp
  531.  mov cl,ds:byte ptr[2+esi]
  532.  sar ebp,2
  533.  mov bh,dh
  534.  mov bl,ds:byte ptr[3+esi]
  535.  add edx,ebp
  536.  mov ch,dh
  537.  add edx,ebp
  538.  mov ah,ds:byte ptr[12345678h+ebx]
  539. LBPatch18:
  540.  mov bl,ds:byte ptr[1+esi]
  541.  mov al,ds:byte ptr[12345678h+ecx]
  542. LBPatch19:
  543.  mov cl,ds:byte ptr[esi]
  544.  mov bh,dh
  545.  add edx,ebp
  546.  ror eax,16
  547.  mov ch,dh
  548.  mov ah,ds:byte ptr[12345678h+ebx]
  549. LBPatch20:
  550.  mov edx,ds:dword ptr[_lightright]
  551.  mov al,ds:byte ptr[12345678h+ecx]
  552. LBPatch21:
  553.  mov ebp,ds:dword ptr[_lightdelta]
  554.  mov ds:dword ptr[edi],eax
  555.  mov eax,ds:dword ptr[_sourcetstep]
  556.  add esi,eax
  557.  mov eax,ds:dword ptr[_surfrowbytes]
  558.  add edi,eax
  559.  mov eax,ds:dword ptr[_lightrightstep]
  560.  add edx,eax
  561.  mov eax,ds:dword ptr[_lightdeltastep]
  562.  add ebp,eax
  563.  mov ds:dword ptr[_lightright],edx
  564.  jc Lblockloop8_mip2
  565.  cmp esi,ds:dword ptr[_r_sourcemax]
  566.  jb LSkip_mip2
  567.  sub esi,ds:dword ptr[_r_stepback]
  568. LSkip_mip2:
  569.  mov ebx,ds:dword ptr[_r_lightptr]
  570.  dec ds:dword ptr[sb_v]
  571.  jnz Lv_loop_mip2
  572.  pop ebx
  573.  pop esi
  574.  pop edi
  575.  pop ebp
  576.  ret
  577.  align 4
  578.  public _R_DrawSurfaceBlock8_mip3
  579. _R_DrawSurfaceBlock8_mip3:
  580.  push ebp
  581.  push edi
  582.  push esi
  583.  push ebx
  584.  mov ebx,ds:dword ptr[_r_lightptr]
  585.  mov eax,ds:dword ptr[_r_numvblocks]
  586.  mov ds:dword ptr[sb_v],eax
  587.  mov edi,ds:dword ptr[_prowdestbase]
  588.  mov esi,ds:dword ptr[_pbasesource]
  589. Lv_loop_mip3:
  590.  mov eax,ds:dword ptr[ebx]
  591.  mov edx,ds:dword ptr[4+ebx]
  592.  mov ebp,eax
  593.  mov ecx,ds:dword ptr[_r_lightwidth]
  594.  mov ds:dword ptr[_lightright],edx
  595.  sub ebp,edx
  596.  and ebp,0FFFFFh
  597.  lea ebx,ds:dword ptr[ebx+ecx*4]
  598.  mov ds:dword ptr[_lightdelta],ebp
  599.  mov ds:dword ptr[_r_lightptr],ebx
  600.  mov ecx,ds:dword ptr[4+ebx]
  601.  mov ebx,ds:dword ptr[ebx]
  602.  sub ebx,eax
  603.  sub ecx,edx
  604.  sar ecx,1
  605.  sar ebx,1
  606.  mov ds:dword ptr[_lightrightstep],ecx
  607.  sub ebx,ecx
  608.  and ebx,0FFFFFh
  609.  sar ebp,1
  610.  or ebx,0F0000000h
  611.  mov ds:dword ptr[_lightdeltastep],ebx
  612.  sub ebx,ebx
  613.  mov bl,ds:byte ptr[1+esi]
  614.  sub ecx,ecx
  615.  mov bh,dh
  616.  mov cl,ds:byte ptr[esi]
  617.  add edx,ebp
  618.  mov ch,dh
  619.  mov al,ds:byte ptr[12345678h+ebx]
  620. LBPatch16:
  621.  mov edx,ds:dword ptr[_lightright]
  622.  mov ds:byte ptr[1+edi],al
  623.  mov al,ds:byte ptr[12345678h+ecx]
  624. LBPatch17:
  625.  mov ds:byte ptr[edi],al
  626.  mov eax,ds:dword ptr[_sourcetstep]
  627.  add esi,eax
  628.  mov eax,ds:dword ptr[_surfrowbytes]
  629.  add edi,eax
  630.  mov eax,ds:dword ptr[_lightdeltastep]
  631.  mov ebp,ds:dword ptr[_lightdelta]
  632.  mov cl,ds:byte ptr[esi]
  633.  add ebp,eax
  634.  mov eax,ds:dword ptr[_lightrightstep]
  635.  sar ebp,1
  636.  add edx,eax
  637.  mov bh,dh
  638.  mov bl,ds:byte ptr[1+esi]
  639.  add edx,ebp
  640.  mov ch,dh
  641.  mov al,ds:byte ptr[12345678h+ebx]
  642. LBPatch30:
  643.  mov edx,ds:dword ptr[_sourcetstep]
  644.  mov ds:byte ptr[1+edi],al
  645.  mov al,ds:byte ptr[12345678h+ecx]
  646. LBPatch31:
  647.  mov ds:byte ptr[edi],al
  648.  mov ebp,ds:dword ptr[_surfrowbytes]
  649.  add esi,edx
  650.  add edi,ebp
  651.  cmp esi,ds:dword ptr[_r_sourcemax]
  652.  jb LSkip_mip3
  653.  sub esi,ds:dword ptr[_r_stepback]
  654. LSkip_mip3:
  655.  mov ebx,ds:dword ptr[_r_lightptr]
  656.  dec ds:dword ptr[sb_v]
  657.  jnz Lv_loop_mip3
  658.  pop ebx
  659.  pop esi
  660.  pop edi
  661.  pop ebp
  662.  ret
  663.  public _R_Surf8End
  664. _R_Surf8End:
  665. _TEXT ENDS
  666. _DATA SEGMENT
  667.  align 4
  668. LPatchTable8:
  669.  dd LBPatch0-4
  670.  dd LBPatch1-4
  671.  dd LBPatch2-4
  672.  dd LBPatch3-4
  673.  dd LBPatch4-4
  674.  dd LBPatch5-4
  675.  dd LBPatch6-4
  676.  dd LBPatch7-4
  677.  dd LBPatch8-4
  678.  dd LBPatch9-4
  679.  dd LBPatch10-4
  680.  dd LBPatch11-4
  681.  dd LBPatch12-4
  682.  dd LBPatch13-4
  683.  dd LBPatch14-4
  684.  dd LBPatch15-4
  685.  dd LBPatch16-4
  686.  dd LBPatch17-4
  687.  dd LBPatch18-4
  688.  dd LBPatch19-4
  689.  dd LBPatch20-4
  690.  dd LBPatch21-4
  691.  dd LBPatch22-4
  692.  dd LBPatch23-4
  693.  dd LBPatch24-4
  694.  dd LBPatch25-4
  695.  dd LBPatch26-4
  696.  dd LBPatch27-4
  697.  dd LBPatch28-4
  698.  dd LBPatch29-4
  699.  dd LBPatch30-4
  700.  dd LBPatch31-4
  701. _DATA ENDS
  702. _TEXT SEGMENT
  703.  align 4
  704.  public _R_Surf8Patch
  705. _R_Surf8Patch:
  706.  push ebx
  707.  mov eax,ds:dword ptr[_colormap]
  708.  mov ebx,offset LPatchTable8
  709.  mov ecx,32
  710. LPatchLoop8:
  711.  mov edx,ds:dword ptr[ebx]
  712.  add ebx,4
  713.  mov ds:dword ptr[edx],eax
  714.  dec ecx
  715.  jnz LPatchLoop8
  716.  pop ebx
  717.  ret
  718. _TEXT ENDS
  719.  END
  720.