home *** CD-ROM | disk | FTP | other *** search
/ WarCraft 2000 - Nuclear Epidemic / W2000.nrg / SOURCE.War2000 / fog.cpp < prev    next >
C/C++ Source or Header  |  1998-09-04  |  47KB  |  2,628 lines

  1. #include "ddini.h"
  2. #include "ResFile.h"
  3. #include "FastDraw.h"
  4. #include "mgraph.h"
  5. #include "mouse.h"
  6. #include "menu.h"
  7. #include "MapDiscr.h"
  8. #include "mode.h"
  9. word fmap[256][256];
  10. #define MaxShad 4528
  11. byte fog[8192+1024];
  12. byte wfog[8192];
  13. byte yfog[8192];
  14. byte rfog[8192];
  15. byte darkfog[40960];
  16. int FogMode;
  17. void ShowSuperFog();
  18. void ProcessFog(){
  19.     byte z=0;//byte(rando()&1);
  20.     __asm{
  21.         mov        ecx,msx
  22.         inc        ecx
  23. lab1:    mov        ax,[fmap+ecx*2]
  24.         mov        [fmap+512+ecx*2],ax;
  25.         mov        ax,[fmap+256*255*2+ecx*2]
  26.         mov        [fmap+256*254*2+ecx*2],ax
  27.         loop    lab1
  28.         mov        ecx,msy
  29.         mov        ebx,offset fmap+512
  30. lab2:    mov        ax,[ebx]
  31.         mov        [ebx+2],ax
  32.         mov        ax,[ebx+510]
  33.         mov        [ebx+508],ax
  34.         add        ebx,512
  35.         loop    lab2
  36.         cmp        z,0
  37.         jne        Process1
  38.         //Process0
  39.         mov        bl,byte ptr msx
  40.         mov        bh,byte ptr msy
  41.         mov        ecx,offset fmap
  42.         add        ecx,514
  43. lab3:    mov        dx,[ecx-512]
  44.         add        dx,[ecx+512]
  45.         add        dx,[ecx-2]
  46.         add        dx,[ecx+2]
  47.         mov        ax,dx
  48.         //shr        dx,8
  49.         //sub        ax,dx
  50.         shr        ax,2
  51.         //cmp        ax,MaxShad
  52.         //ja        iii
  53.         or        ax,63
  54.         sub        ax,63
  55. iii:
  56.         mov        [ecx],ax
  57.         add        ecx,2
  58.         dec        bl
  59.         jnz        lab3
  60.         add        ecx,512
  61.         sub        ecx,msx
  62.         sub        ecx,msx
  63.         mov        bl,byte ptr msx
  64.         dec        bh
  65.         jnz        lab3
  66.         jmp        ProcessFinished
  67. Process1:
  68.         xor        ebx,ebx
  69.         mov        bl,byte ptr msx
  70.         mov        bh,byte ptr msy
  71.         mov        ecx,offset fmap
  72.         add        ecx,ebx
  73.         add        ecx,ebx
  74.         //add        ecx,514
  75. lab4:    mov        dx,[ecx-512]
  76.         add        dx,[ecx+512]
  77.         add        dx,[ecx-2]
  78.         add        dx,[ecx+2]
  79.         mov        ax,dx
  80.         //shr        dx,8
  81.         //sub        ax,dx
  82.         shr        ax,2
  83.         //cmp        ax,MaxShad
  84.         //ja        ioo
  85.         or        ax,63
  86.         sub        ax,63
  87. ioo:
  88.         mov        [ecx],ax
  89.         sub        ecx,2
  90.         dec        bl
  91.         jnz        lab4
  92.         sub        ecx,512
  93.         add        ecx,msx
  94.         add        ecx,msx
  95.         mov        bl,byte ptr msx
  96.         dec        bh
  97.         jnz        lab3
  98. ProcessFinished:
  99.     };
  100. };
  101. void LoadFog(){
  102.     ResFile fx=RReset("darkb.grd");//004g.grd");
  103.     RBlockRead(fx,&fog[1024],8192);
  104.     memcpy(&fog[0],&fog[1024],256);
  105.     memcpy(&fog[256],&fog[1024],256);
  106.     memcpy(&fog[512],&fog[1024],256);
  107.     memcpy(&fog[512+256],&fog[1024],256);
  108.     RClose(fx);
  109.     //fx=RReset("003xw.grd");
  110.     fx=RReset("darkw.grd");//003cm.grd");
  111.     RBlockRead(fx,&wfog,8192);
  112.     RClose(fx);
  113.     fx=RReset("003xr.grd");
  114.     RBlockRead(fx,&yfog,8192);
  115.     RClose(fx);
  116.     fx=RReset("003xr1.grd");
  117.     RBlockRead(fx,&rfog,8192);
  118.     RClose(fx);
  119.     fx=RReset("darkfog.grd");
  120.     RBlockRead(fx,&darkfog,40960);
  121.     RClose(fx);
  122. };
  123. #define Shifter 7
  124.  
  125. void ShowFoggedBattle2(){
  126.     byte    sx=smaplx;
  127.     byte    sy=4;
  128.     int        StOff=smapy*SCRSizeX+smapx;
  129.     int        Addv1=(SCRSizeX<<1)-64;
  130.     int        Addv2=(SCRSizeX<<6);
  131.     int        Addv3=-(smaplx<<5)+(SCRSizeX<<6)-32;
  132.     word    MinShad=(MaxShad-(32<<Shifter));
  133.     word    tmp;
  134.     int        adds=int(ScreenPtr);
  135.     int        addr=int(ScreenPtr);
  136.     int        fad=int(fog)+1024;
  137.     int        ADDX=1;
  138.     int        ADDY=SCRSizeX;
  139.     __asm{
  140.         xor    ebx,ebx
  141.         cld
  142.         mov        al,byte ptr mapx
  143.         mov        ah,byte ptr mapy
  144.         mov        esi,StOff
  145.         mov        edi,esi
  146.         add        esi,adds
  147.         add        edi,addr
  148. lab0:    add        esi,ADDX
  149.         add        edi,ADDX
  150.         neg     ADDX
  151.         mov        tmp,ax
  152.         mov        bx,ax
  153.         shl        ebx,1
  154.         mov        bx,[fmap+ebx]
  155.         and     ebx,0xFFFF
  156.         cmp        bx,MaxShad
  157.         jae        FullColor
  158.         cmp        bx,MinShad
  159.         jbe        AbsBlack
  160.         sub        bx,MaxShad
  161.         neg        bx
  162.         shr        bx,Shifter
  163.         mov        bh,bl
  164.         xor        bl,bl
  165.         //Shadowed image
  166.         add        ebx,fad
  167.         mov        cl,32
  168.         mov        ch,32
  169.         xor        eax,eax
  170. SI_1:    xor        eax,eax
  171.         lodsb
  172.         inc     esi
  173.         add        eax,ebx
  174.         mov        al,[eax]
  175.         stosb
  176.         inc     edi
  177.         dec        cl
  178.         jnz        SI_1
  179.         add        esi,Addv1
  180.         add        edi,Addv1
  181.         mov        cl,32
  182.         dec        ch
  183.         jnz        SI_1
  184.         jmp        Next_slide
  185. FullColor:
  186.         add        esi,32
  187.         add        edi,32
  188.         sub        esi,Addv2
  189.         sub        edi,Addv2
  190.         xor        ecx,ecx
  191. /*        mov        cx,32
  192. FC_1:    movsd
  193.         movsd
  194.         movsd
  195.         movsd
  196.         movsd
  197.         movsd
  198.         movsd
  199.         movsd
  200.         add        esi,Addv1
  201.         add        edi,Addv1
  202.         loop    FC_1
  203. */
  204.         jmp    Next_slide
  205. AbsBlack:
  206.         xor        ecx,ecx
  207.         mov        cx,32
  208.         xor        eax,eax
  209. AB_1:    stosd
  210.         stosd
  211.         stosd
  212.         stosd
  213.         stosd
  214.         stosd
  215.         stosd
  216.         stosd
  217.         add        edi,Addv1
  218.         add        esi,SCRSizeX
  219.         loop    AB_1
  220. Next_slide:
  221.         add        esi,Addv2
  222.         add        edi,Addv2
  223.         mov        ax,tmp
  224.         inc        al
  225.         dec        sx
  226.         jnz        lab0
  227.         add        edi,Addv3
  228.         add        esi,Addv3
  229.         add        esi,ADDY
  230.         add        edi,ADDY
  231.         neg        ADDY
  232.         mov        al,byte ptr smaplx
  233.         mov        sx,al
  234.         mov        ax,tmp
  235.         mov        al,byte ptr mapx
  236.         inc        ah
  237.         dec        sy
  238.         jnz        lab0
  239.     };
  240. };
  241. static byte BFog[64][64];
  242. void SetScreenFog16x16(){
  243.     smaplx++;
  244.     smaply++;
  245.     int fofs=int(fmap)+((((mapy-1)<<8)+(mapx-1))<<1);
  246.     int Saddy=(256-smaplx)<<1;
  247.     int Daddy=(64-smaplx)<<1;
  248.     word MinShad=(MaxShad-(32<<Shifter));
  249.     //filling
  250.     __asm{
  251.         push    esi
  252.         push    edi
  253.         mov        cl,byte ptr smaplx
  254.         mov        ch,byte ptr smaply
  255.         mov        esi,fofs
  256.         mov        edi,offset BFog+64+2
  257.         cld
  258. LP1:    lodsw    
  259.         cmp        ax,MaxShad
  260.         jae        FullColor
  261.         cmp        ax,MinShad
  262.         jbe        AbsBlack
  263.         sub        ax,MaxShad
  264.         neg        ax
  265.         shr        ax,Shifter
  266.         jmp        asgn1
  267. AbsBlack:
  268.         mov        ax,32
  269.         jmp        asgn1
  270. FullColor:
  271.         xor        ax,ax
  272. asgn1:    mov        ah,al
  273.         mov        [edi],ax
  274.         mov        [edi+64],ax
  275.         add        edi,2
  276.         dec        cl
  277.         jnz        LP1
  278.         mov        cl,byte ptr smaplx
  279.         add        esi,Saddy
  280.         add        edi,Daddy
  281.         dec        ch
  282.         jnz        LP1
  283.         //set colors at the edges
  284.         /*mov        esi,offset BFog+64+2
  285.         mov        edi,offset BFog+2
  286.         mov        ecx,smaplx
  287.         rep        movsw
  288.         mov        esi,smaply
  289.         shl        esi,6
  290.         add        esi,2+offset BFog
  291.         mov        edi,esi
  292.         add        edi,64
  293.         mov        ecx,smaplx
  294.         rep        movsw
  295.         mov        esi,offset BFog+64
  296.         mov        edi,offset BFog+65
  297.         mov        ecx,smaply
  298.         shl        ecx,1
  299. cyc1:    movsb
  300.         add        esi,63
  301.         add        edi,63
  302.         loop    cyc1
  303.         mov        esi,offset BFog+64+2
  304.         add        esi,smaplx
  305.         add        esi,smaplx
  306.         mov        edi,esi
  307.         inc        edi
  308.         mov        ecx,smaply
  309.         shl        ecx,1
  310. cyc2:    movsb
  311.         add        esi,63
  312.         add        edi,63
  313.         loop    cyc2*/
  314.         pop        edi
  315.         pop        esi
  316.     };
  317.     smaplx--;
  318.     smaply--;
  319. };
  320. void ProcessScreenFog16x16(){
  321.     smaplx++;
  322.     smaply++;
  323.     int    ads=64-(smaplx<<1);
  324.     __asm{
  325.         push    esi
  326.         mov        esi,offset BFog+64+2
  327.         mov        ch,byte ptr smaply
  328.         shl        ch,1
  329. gt0:    mov        cl,byte ptr smaplx
  330. gt1:    mov        ax,[esi-1]
  331.         add        ax,[esi+1]
  332.         add        ax,[esi-64]
  333.         add        ax,[esi+64]
  334.         shr        ax,2
  335.         and        ax,0x1F1F
  336.         mov        [esi],ax
  337.         add        esi,2
  338.         dec        cl
  339.         jnz        gt1
  340.         add        esi,ads
  341.         dec        ch
  342.         jnz        gt0
  343.         pop        esi
  344.     };
  345.     smaplx--;
  346.     smaply--;
  347. };
  348. void ShowScreenFog16x16(){
  349.     SetScreenFog16x16();
  350.     ProcessScreenFog16x16();
  351.     smaplx++;
  352.     smaply++;
  353.     byte    ssx=(smaplx)<<1;
  354.     byte    sx=ssx;
  355.     byte    sy=(smaply)<<1;
  356.     int        StOff=smapy*SCRSizeX+smapx;
  357.     int        Addv1=SCRSizeX-16;
  358.     int        Addv2=16-SCRSizeX*16;
  359.     int        Addv3=-ssx*16+SCRSizeX*16;
  360.     int     Addv4=(SCRSizeX<<4);
  361.     word    MinShad=(MaxShad-(32<<Shifter));
  362.     word    tmp;
  363.     int        adds=int(ScreenPtr)+(smapx-16)+(smapy-16)*SCRSizeX;
  364.     int        addf=64-((smaplx)<<1);
  365.     int        fad=int(BFog)+64+2;
  366.     int        uuu;
  367.     __asm{
  368.         push    esi
  369.         push    edi
  370.         mov        esi,fad
  371.         mov        edi,adds
  372.         cld
  373.  
  374. sfg1:    xor        ebx,ebx
  375.         mov        bh,[esi]
  376.         inc        esi
  377.         or        bh,bh
  378.         jz        EmptyBar
  379.         cmp        bh,28
  380.         jae        BlackBar
  381.         add        ebx,offset fog+1024
  382.         mov        ecx,16
  383.         xor        eax,eax
  384.         mov        edx,16
  385.         mov        uuu,0
  386. sfg2:    mov        al,[edi]
  387.         mov        al,[ebx+eax]
  388.         mov        [edi],al
  389.         inc        edi
  390.         loop    sfg2
  391.         add        edi,Addv1
  392.         xor        uuu,1
  393.         jz        uuu_L1
  394.         add        edi,6
  395.         jmp        uuu_L2
  396. uuu_L1: sub        edi,6
  397. uuu_L2:    mov        ecx,16
  398.         dec        edx
  399.         jnz        sfg2
  400.         //sub        edi,4
  401.         jmp        NextStep
  402. BlackBar:
  403.         xor        eax,eax
  404.         mov        ecx,16
  405.         mov        edx,12
  406. sfg3:    stosd
  407.         stosd
  408.         stosd
  409.         stosd
  410.         add        edi,Addv1
  411.         add        edi,edx
  412.         sub        edi,6
  413.         xor        edx,12
  414.         loop    sfg3
  415.         jmp        NextStep
  416. EmptyBar:
  417.         add        edi,16
  418.         jmp        sfg4
  419. NextStep:
  420.         add        edi,Addv2
  421. sfg4:    dec        sx
  422.         jnz        sfg1
  423.         mov        al,ssx
  424.         mov        sx,al
  425.         add        edi,Addv3
  426.         add        esi,addf
  427.         dec        sy
  428.         jnz        sfg1
  429.         pop        edi
  430.         pop        esi
  431.     };
  432.     smaplx--;
  433.     smaply--;
  434. };
  435. void ShowScreenFog16x16_Best(){
  436.     SetScreenFog16x16();
  437.     ProcessScreenFog16x16();
  438.     byte    ssx=smaplx<<1;
  439.     byte    sx=ssx;
  440.     byte    sy=smaply<<1;
  441.     int        StOff=(smapy-16)*SCRSizeX+smapx-16;
  442.     int        Addv1=SCRSizeX-16;
  443.     int        Addv2=16-SCRSizeX*16;
  444.     int        Addv3=-ssx*16+SCRSizeX*16;
  445.     int     Addv4=(SCRSizeX<<4);
  446.     word    MinShad=(MaxShad-(32<<Shifter));
  447.     word    tmp;
  448.     int        adds=int(ScreenPtr)+(smapx-16)+(smapy-16)*SCRSizeX;
  449.     int        addf=64-(smaplx<<1);
  450.     int        fad=int(BFog)+64+2;
  451.     int        uuu,zzz;
  452.     __asm{
  453.         push    esi
  454.         push    edi
  455.         mov        esi,fad
  456.         mov        edi,adds
  457.         cld
  458.  
  459. sfg1:    xor        ebx,ebx
  460.         mov        bh,[esi]
  461.         inc        esi
  462.         or        bh,bh
  463.         jz        EmptyBar
  464.         cmp        bh,23
  465.         jae        BlackBar
  466.         add        ebx,offset fog
  467.         mov        ecx,16
  468.         xor        eax,eax
  469.         mov        edx,16
  470.         mov        uuu,0
  471.         //mov        zzz,ebp
  472.         mov        zzz,1024*10
  473. sfg2:    mov        al,[edi]
  474.         mov        al,[ebx+eax]
  475.         mov        [edi],al
  476.         inc        edi
  477.         add        edi,zzz
  478.         sub        edi,1024*5
  479.         xor        zzz,1024*10
  480.         loop    sfg2
  481.         add        edi,Addv1
  482.         xor        uuu,1
  483.         jz        uuu_L1
  484.         add        edi,5
  485.         jmp        uuu_L2
  486. uuu_L1: sub        edi,5
  487. uuu_L2:    mov        ecx,16
  488.         dec        edx
  489.         jnz        sfg2
  490.         //mov        ebp,zzz
  491.         //sub        edi,4
  492.         jmp        NextStep
  493. BlackBar:
  494.         xor        eax,eax
  495.         mov        ecx,16
  496.         mov        edx,12
  497. sfg3:    stosd
  498.         stosd
  499.         stosd
  500.         stosd
  501.         add        edi,Addv1
  502.         add        edi,edx
  503.         sub        edi,6
  504.         xor        edx,12
  505.         loop    sfg3
  506.         cmp        byte ptr [esi-65],23
  507.         jae        NextStep
  508.         xor        eax,eax
  509.         mov        ecx,6
  510.         mov        edx,12
  511. sfg3_1:    stosd
  512.         stosd
  513.         stosd
  514.         stosd
  515.         add        edi,Addv1
  516.         add        edi,edx
  517.         sub        edi,6
  518.         xor        edx,12
  519.         loop    sfg3_1
  520.         sub        edi,6*1024
  521.         add        edi,16
  522.         jmp        NextStep
  523. EmptyBar:
  524.         add        edi,16
  525.         jmp        sfg4
  526. NextStep:
  527.         add        edi,Addv2
  528. sfg4:    dec        sx
  529.         jnz        sfg1
  530.         mov        al,ssx
  531.         mov        sx,al
  532.         add        edi,Addv3
  533.         add        esi,addf
  534.         dec        sy
  535.         jnz        sfg1
  536.         pop        edi
  537.         pop        esi
  538.     };
  539. };
  540. void ShowFoggedBattle(){
  541.     ShowSuperFog();
  542.     return;
  543.     ShowScreenFog16x16();
  544.     return;
  545.     byte    sx=smaplx;
  546.     byte    sy=smaply;
  547.     int        StOff=smapy*SCRSizeX+smapx;
  548.     int        Addv1=SCRSizeX-32;
  549.     int        Addv2=32-SCRSizeX*32;
  550.     int        Addv3=-smaplx*32+SCRSizeX*32;
  551.     word    MinShad=(MaxShad-(32<<Shifter));
  552.     word    tmp;
  553.     int        adds=int(ScreenPtr);
  554.     int        addr=int(ScreenPtr);
  555.     int        fad=int(fog);
  556.     __asm{
  557.         cld
  558.         mov        al,byte ptr mapx
  559.         mov        ah,byte ptr mapy
  560.         mov        esi,StOff
  561.         mov        edi,esi
  562.         add        esi,adds
  563.         add        edi,addr
  564. lab0:    xor        ebx,ebx
  565.         mov        tmp,ax
  566.         mov        bx,ax
  567.         shl        ebx,1
  568.         mov        bx,[fmap+ebx]
  569.         and     ebx,0xFFFF
  570.         cmp        bx,MaxShad
  571.         jae        FullColor
  572.         cmp        bx,MinShad
  573.         jbe        AbsBlack
  574.         sub        bx,MaxShad
  575.         neg        bx
  576.         shr        bx,Shifter
  577.         mov        bh,bl
  578.         xor        bl,bl
  579.         //Shadowed image
  580.         add        ebx,fad
  581.         mov        cl,32
  582.         mov        ch,32
  583.         xor        eax,eax
  584. SI_1:    xor        eax,eax
  585.         lodsb
  586.         add        eax,ebx
  587.         mov        al,[eax]
  588.         stosb
  589.         dec        cl
  590.         jnz        SI_1
  591.         add        esi,Addv1
  592.         add        edi,Addv1
  593.         mov        cl,32
  594.         dec        ch
  595.         jnz        SI_1
  596.         jmp        Next_slide
  597. FullColor:
  598.         add        esi,32
  599.         add        edi,32
  600.         sub        esi,Addv2
  601.         sub        edi,Addv2
  602.         xor        ecx,ecx
  603. /*        mov        cx,32
  604. FC_1:    movsd
  605.         movsd
  606.         movsd
  607.         movsd
  608.         movsd
  609.         movsd
  610.         movsd
  611.         movsd
  612.         add        esi,Addv1
  613.         add        edi,Addv1
  614.         loop    FC_1
  615. */
  616.         jmp    Next_slide
  617. AbsBlack:
  618.         xor        ecx,ecx
  619.         mov        cx,32
  620.         xor        eax,eax
  621. AB_1:    stosd
  622.         stosd
  623.         stosd
  624.         stosd
  625.         stosd
  626.         stosd
  627.         stosd
  628.         stosd
  629.         add        edi,Addv1
  630.         add        esi,SCRSizeX
  631.         loop    AB_1
  632. Next_slide:
  633.         add        esi,Addv2
  634.         add        edi,Addv2
  635.         mov        ax,tmp
  636.         inc        al
  637.         dec        sx
  638.         jnz        lab0
  639.         add        edi,Addv3
  640.         add        esi,Addv3
  641.         mov        al,byte ptr smaplx
  642.         mov        sx,al
  643.         mov        ax,tmp
  644.         mov        al,byte ptr mapx
  645.         inc        ah
  646.         dec        sy
  647.         jnz        lab0
  648.     };
  649. };
  650. void ShowFoggedBattle1(){
  651.     byte    sx=smaplx;
  652.     byte    sy=smaply;
  653.     int        StOff=smapy*SCRSizeX+smapx;
  654.     int        Addv1=SCRSizeX-32;
  655.     int        Addv2=32-SCRSizeX*32;
  656.     int        Addv3=-smaplx*32+SCRSizeX*32;
  657.     word    MinShad=(MaxShad-(32<<Shifter));
  658.     word    tmp;
  659.     int        adds=int(ScreenPtr);
  660.     int        addr=int(ScreenPtr);
  661.     int        fad=int(fog);
  662.     __asm{
  663.         cld
  664.         mov        al,byte ptr mapx
  665.         mov        ah,byte ptr mapy
  666.         mov        esi,StOff
  667.         mov        edi,esi
  668.         add        esi,adds
  669.         add        edi,addr
  670. lab0:    xor        ebx,ebx
  671.         mov        tmp,ax
  672.         mov        bx,ax
  673.         shl        ebx,1
  674.         mov        bx,[fmap+ebx]
  675.         cmp        bx,MaxShad
  676.         jae        FullColor
  677.         cmp        bx,MinShad
  678.         jbe        AbsBlack
  679.         sub        bx,MaxShad
  680.         neg        bx
  681.         shr        bx,Shifter
  682.         mov        bh,bl
  683.         xor        bl,bl
  684.         //Shadowed image
  685.         add        ebx,fad
  686.         mov        cl,32
  687.         mov        ch,32
  688.         xor        eax,eax
  689. SI_1:    xor        eax,eax
  690.         lodsb
  691.         add        eax,ebx
  692.         mov        al,[eax]
  693.         stosb
  694.         dec        cl
  695.         jnz        SI_1
  696.         add        esi,Addv1
  697.         add        edi,Addv1
  698.         mov        cl,32
  699.         dec        ch
  700.         jnz        SI_1
  701.         jmp        Next_slide
  702. FullColor:
  703.         add        esi,32
  704.         add        edi,32
  705.         sub        esi,Addv2
  706.         sub        edi,Addv2
  707.         xor        ecx,ecx
  708. /*        mov        cx,32
  709. FC_1:    movsd
  710.         movsd
  711.         movsd
  712.         movsd
  713.         movsd
  714.         movsd
  715.         movsd
  716.         movsd
  717.         add        esi,Addv1
  718.         add        edi,Addv1
  719.         loop    FC_1
  720. */
  721.         jmp    Next_slide
  722. AbsBlack:
  723.         xor        ecx,ecx
  724.         mov        cx,32
  725.         xor        eax,eax
  726. AB_1:    stosd
  727.         stosd
  728.         stosd
  729.         stosd
  730.         stosd
  731.         stosd
  732.         stosd
  733.         stosd
  734.         add        edi,Addv1
  735.         add        esi,SCRSizeX
  736.         loop    AB_1
  737. Next_slide:
  738.         add        esi,Addv2
  739.         add        edi,Addv2
  740.         mov        ax,tmp
  741.         inc        al
  742.         dec        sx
  743.         jnz        lab0
  744.         add        edi,Addv3
  745.         add        esi,Addv3
  746.         mov        al,byte ptr smaplx
  747.         mov        sx,al
  748.         mov        ax,tmp
  749.         mov        al,byte ptr mapx
  750.         inc        ah
  751.         dec        sy
  752.         jnz        lab0
  753.     };
  754. };
  755. void AcceptMiniMap1(){
  756.     word    MinShad=(MaxShad-(32<<Shifter));
  757.     int ofs=minix+miniy*SCRSizeX;
  758.     int lx=msx;
  759.     int ly=msy;
  760.     int addOf=SCRSizeX-lx;
  761.     __asm{
  762.         push    esi
  763.         push    edi
  764.         mov        edi,ScreenPtr
  765.         add        edi,ofs
  766.         mov        ecx,0101h
  767.         cld
  768.         mov        eax,lx
  769. yyy:    mov        edx,ecx
  770.         shl        edx,1
  771.         cmp        word ptr[edx+fmap],512
  772.         ja        uuu
  773.         mov        byte ptr [edi],0
  774. uuu:    inc        edi
  775.         inc        cl
  776.         dec        eax
  777.         jnz        yyy
  778.         mov        eax,lx
  779.         add        edi,addOf
  780.         inc        ch
  781.         mov        cl,1
  782.         dec        ly
  783.         jnz        yyy
  784.     };
  785. };
  786. void AcceptMiniMap(){
  787.     word    MinShad=(MaxShad-(32<<Shifter));
  788.     int ofs=minix+miniy*SCRSizeX;
  789.     int lx=msx>>1;
  790.     int ly=msy>>1;
  791.     int addOf=SCRSizeX-lx;
  792.     __asm{
  793.         push    esi
  794.         push    edi
  795.         mov        edi,ScreenPtr
  796.         add        edi,ofs
  797.         mov        ecx,0101h
  798.         cld
  799.         mov        eax,lx
  800. yyy:    mov        edx,ecx
  801.         shl        edx,1
  802.         cmp        word ptr[edx+fmap],512
  803.         ja        uuu
  804.         mov        byte ptr [edi],0
  805. uuu:    inc        edi
  806.         add        cl,2
  807.         dec        eax
  808.         jnz        yyy
  809.         mov        eax,lx
  810.         add        edi,addOf
  811.         add     ch,2
  812.         mov        cl,1
  813.         dec        ly
  814.         jnz        yyy
  815.     };
  816. };
  817. #define zmin 0
  818. #define zmax 32
  819. void ShowFluentFog(int x,int y,int z1,int z2,int z3,int z4){
  820.     //return;
  821.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  822.     int adds=SCRSizeX-32;
  823.     if(z1<=zmin&&z2<=zmin&&z3<=zmin&&z4<=zmin)return;
  824.     if(z1>=zmax&&z2>=zmax&&z3>=zmax&&z4>=zmax){
  825.         __asm{
  826.             push    edi
  827.             mov        ebx,adds
  828.             mov        edi,scrof
  829.             mov        dl,32
  830.             xor        eax,eax
  831.             cld
  832. iug:        mov        ecx,8
  833.             rep        stosd
  834.             add        edi,ebx
  835.             dec        dl
  836.             jnz        iug
  837.             pop        edi
  838.         };
  839.         return;
  840.     }else{
  841.         int a,b,c,d,p,q,r;
  842.         __asm{
  843.             push    edi
  844.             push    esi
  845.             mov        eax,z1
  846.             mov        ebx,eax
  847.             //shl        ebx,8
  848.             mov        a,ebx
  849.             mov        ecx,z2
  850.             sub        ecx,eax
  851.             shr        ecx,5
  852.             mov        b,ecx
  853.             mov        ecx,z3
  854.             sub        ecx,eax
  855.             shr        ecx,5
  856.             mov        c,ecx
  857.             mov        ecx,z4
  858.             add        ecx,z1
  859.             sub        ecx,z2
  860.             sub        ecx,z3
  861.             shr        ecx,10
  862.             mov        d,ecx
  863.             //coefficients are now calculated
  864.             mov        ecx,0x2020
  865.             mov        bx,word ptr a        //bh=fogging value
  866.             add        bx,256*4
  867.             mov        dx,word ptr b        //dx=fog incrementor
  868.             xor        eax,eax
  869.             mov        esi,scrof
  870.             mov        word ptr p,bx
  871. qqw1:        mov        ax,bx
  872.             mov        al,[esi]
  873.             mov        al,[fog+eax]
  874.             mov        [esi],al
  875.             inc        esi
  876.             add        bx,dx
  877.             dec        cl
  878.             jnz        qqw1
  879.             add        esi,adds
  880.             add        dx,word ptr d
  881.             mov        bx,word ptr p
  882.             add        bx,word ptr c
  883.             mov        cl,32
  884.             mov        word ptr p,bx
  885.             dec        ch
  886.             jnz        qqw1
  887.             pop        esi
  888.             pop        edi
  889.         };
  890.     };
  891. };
  892. void ShowSuperFluentFog(int x,int y,int z1x,int z2x,int z3x,int z4x){
  893.     //return;
  894.     int z1=z1x<<16;
  895.     int    z2=z2x<<16;
  896.     int z3=z3x<<16;
  897.     int    z4=z4x<<16;
  898.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  899.     int adds=SCRSizeX-32;
  900.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  901.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  902.         __asm{
  903.             push    edi
  904.             mov        ebx,adds
  905.             mov        edi,scrof
  906.             mov        dl,32
  907.             xor        eax,eax
  908.             cld
  909. iug:        mov        ecx,8
  910.             rep        stosd
  911.             add        edi,ebx
  912.             dec        dl
  913.             jnz        iug
  914.             pop        edi
  915.         };
  916.         return;
  917.     }else{
  918.         int a,b,c,d,p,q,r;
  919.         __asm{
  920.             push    edi
  921.             push    esi
  922.             mov        eax,z1
  923.             mov        ebx,eax
  924.             //shl        ebx,8
  925.             mov        a,ebx
  926.             mov        ecx,z2
  927.             sub        ecx,eax
  928.             sar        ecx,5
  929.             mov        b,ecx
  930.             mov        ecx,z3
  931.             sub        ecx,eax
  932.             sar        ecx,5
  933.             mov        c,ecx
  934.             mov        ecx,z4
  935.             add        ecx,z1
  936.             sub        ecx,z2
  937.             sub        ecx,z3
  938.             sar        ecx,10
  939.             mov        d,ecx
  940.             //coefficients are now calculated
  941.             mov        ecx,0x2020
  942.             mov        ebx,a        //bh=fogging value
  943.             add        ebx,256*256*3
  944.             mov        edx,b        //dx=fog incrementor
  945.             xor        eax,eax
  946.             mov        esi,scrof
  947.             mov        p,ebx
  948. qqw1:        mov        eax,ebx
  949.             shr        eax,8
  950.             mov        al,[esi]
  951.             mov        al,[fog+eax]
  952.             mov        [esi],al
  953.             inc        esi
  954.             add        ebx,edx
  955.             dec        cl
  956.             jnz        qqw1
  957.             add        esi,adds
  958.             add        edx,d
  959.             mov        ebx,p
  960.             add        ebx,c
  961.             mov        cl,32
  962.             mov        p,ebx
  963.             dec        ch
  964.             jnz        qqw1
  965.             pop        esi
  966.             pop        edi
  967.         };
  968.         //Xbar(x+12,y+12,8,8,clrGreen);
  969.     };
  970. };
  971. void ShowSuperFluentFog2(int x,int y,int z1x,int z2x,int z3x,int z4x){
  972.     //return;
  973.     int z1=z1x<<16;
  974.     int    z2=z2x<<16;
  975.     int z3=z3x<<16;
  976.     int    z4=z4x<<16;
  977.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  978.     int adds=SCRSizeX-32;
  979.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  980.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  981.         __asm{
  982.             push    edi
  983.             mov        ebx,adds
  984.             mov        edi,scrof
  985.             mov        dl,32
  986.             xor        eax,eax
  987.             cld
  988. iug:        mov        ecx,8
  989.             rep        stosd
  990.             add        edi,ebx
  991.             dec        dl
  992.             jnz        iug
  993.             pop        edi
  994.         };
  995.         return;
  996.     }else{
  997.         int a,b,c,d,p,q,r;
  998.         __asm{
  999.             push    edi
  1000.             push    esi
  1001.             mov        eax,z1
  1002.             mov        ebx,eax
  1003.             //shl        ebx,8
  1004.             mov        a,ebx
  1005.             mov        ecx,z2
  1006.             sub        ecx,eax
  1007.             sar        ecx,5
  1008.             mov        b,ecx
  1009.             mov        ecx,z3
  1010.             sub        ecx,eax
  1011.             sar        ecx,5
  1012.             mov        c,ecx
  1013.             mov        ecx,z4
  1014.             add        ecx,z1
  1015.             sub        ecx,z2
  1016.             sub        ecx,z3
  1017.             sar        ecx,10
  1018.             mov        d,ecx
  1019.             //coefficients are now calculated
  1020.             mov        ecx,0x2020
  1021.             mov        ebx,a        //bh=fogging value
  1022.             add        ebx,256*256*3
  1023.             mov        edx,b        //dx=fog incrementor
  1024.             xor        eax,eax
  1025.             mov        esi,scrof
  1026.             mov        p,ebx
  1027. qqw1:        mov        eax,ebx
  1028.             shr        eax,8
  1029.             mov        al,[esi]
  1030.             mov        al,[fog+eax]
  1031.             mov        [esi],al
  1032.             inc        esi
  1033.             add        ebx,edx
  1034.             dec        cl
  1035.             jnz        qqw1
  1036.             add        esi,adds
  1037.             add        edx,d
  1038.             mov        ebx,p
  1039.             add        ebx,c
  1040.             mov        cl,32
  1041.             mov        p,ebx
  1042.             dec        ch
  1043.             jnz        qqw1
  1044.             pop        esi
  1045.             pop        edi
  1046.         };
  1047.         //Xbar(x+12,y+12,8,8,clrGreen);
  1048.     };
  1049. };
  1050. void ShowSuperFluentFog8(int x,int y,int z1x,int z2x,int z3x,int z4x){
  1051.     //return;
  1052.     int z1=z1x<<16;
  1053.     int    z2=z2x<<16;
  1054.     int z3=z3x<<16;
  1055.     int    z4=z4x<<16;
  1056.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  1057.     int adds=SCRSizeX-32;
  1058.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  1059.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  1060.         __asm{
  1061.             push    edi
  1062.             mov        ebx,adds
  1063.             mov        edi,scrof
  1064.             mov        dl,32
  1065.             xor        eax,eax
  1066.             cld
  1067. iug:        mov        ecx,8
  1068.             rep        stosd
  1069.             add        edi,ebx
  1070.             dec        dl
  1071.             jnz        iug
  1072.             pop        edi
  1073.         };
  1074.         return;
  1075.     }else{
  1076.         int a,b,c,d,p,q,r;
  1077.         __asm{
  1078.             push    edi
  1079.             push    esi
  1080.             mov        eax,z1
  1081.             mov        ebx,eax
  1082.             //shl        ebx,8
  1083.             mov        a,ebx
  1084.             mov        ecx,z2
  1085.             sub        ecx,eax
  1086.             sar        ecx,5
  1087.             mov        b,ecx
  1088.             mov        ecx,z3
  1089.             sub        ecx,eax
  1090.             sar        ecx,5
  1091.             mov        c,ecx
  1092.             mov        ecx,z4
  1093.             add        ecx,z1
  1094.             sub        ecx,z2
  1095.             sub        ecx,z3
  1096.             sar        ecx,10
  1097.             mov        d,ecx
  1098.             //coefficients are now calculated
  1099.             mov        ecx,0x2004
  1100.             mov        ebx,a        //bh=fogging value
  1101.             add        ebx,256*256*3
  1102.             mov        edx,b        //dx=fog incrementor
  1103.             xor        eax,eax
  1104.             mov        esi,scrof
  1105.             mov        p,ebx
  1106. qqw1:        mov        eax,ebx
  1107.             shr        eax,8
  1108.             mov        al,[esi]
  1109.             mov        al,[fog+eax]
  1110.             mov        [esi],al
  1111.             //inc        esi
  1112.             add        ebx,edx
  1113.             mov        eax,ebx
  1114.             shr        eax,8
  1115.             mov        al,[esi+1]
  1116.             mov        al,[fog+eax]
  1117.             mov        [esi+1],al
  1118.             //inc        esi
  1119.             add        ebx,edx
  1120.             mov        eax,ebx
  1121.             shr        eax,8
  1122.             mov        al,[esi+2]
  1123.             mov        al,[fog+eax]
  1124.             mov        [esi+2],al
  1125.             //inc        esi
  1126.             add        ebx,edx
  1127.             mov        eax,ebx
  1128.             shr        eax,8
  1129.             mov        al,[esi+3]
  1130.             mov        al,[fog+eax]
  1131.             mov        [esi+3],al
  1132.             //inc        esi
  1133.             add        ebx,edx
  1134.             mov        eax,ebx
  1135.             shr        eax,8
  1136.             mov        al,[esi+4]
  1137.             mov        al,[fog+eax]
  1138.             mov        [esi+4],al
  1139.             //inc        esi
  1140.             add        ebx,edx
  1141.             mov        eax,ebx
  1142.             shr        eax,8
  1143.             mov        al,[esi+5]
  1144.             mov        al,[fog+eax]
  1145.             mov        [esi+5],al
  1146.             //inc        esi
  1147.             add        ebx,edx
  1148.             mov        eax,ebx
  1149.             shr        eax,8
  1150.             mov        al,[esi+6]
  1151.             mov        al,[fog+eax]
  1152.             mov        [esi+6],al
  1153.             //inc        esi
  1154.             add        ebx,edx
  1155.             mov        eax,ebx
  1156.             shr        eax,8
  1157.             mov        al,[esi+7]
  1158.             mov        al,[fog+eax]
  1159.             mov        [esi+7],al
  1160.             add        esi,8
  1161.             add        ebx,edx
  1162.             dec        cl
  1163.             jnz        qqw1
  1164.             add        esi,adds
  1165.             add        edx,d
  1166.             mov        ebx,p
  1167.             add        ebx,c
  1168.             mov        cl,4
  1169.             mov        p,ebx
  1170.             dec        ch
  1171.             jnz        qqw1
  1172.             pop        esi
  1173.             pop        edi
  1174.         };
  1175.         //Xbar(x+12,y+12,8,8,clrGreen);
  1176.     };
  1177. };
  1178. void ShowSuperFluentFog32w(int x,int y,int z1x,int z2x,int z3x,int z4x){
  1179.     //return;
  1180.     int z1=z1x<<16;
  1181.     int    z2=z2x<<16;
  1182.     int z3=z3x<<16;
  1183.     int    z4=z4x<<16;
  1184.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  1185.     int adds=SCRSizeX-32;
  1186.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  1187.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  1188.         __asm{
  1189.             push    edi
  1190.             mov        ebx,adds
  1191.             mov        edi,scrof
  1192.             mov        dl,32
  1193.             xor        eax,eax
  1194.             cld
  1195. iug:        mov        ecx,8
  1196.             rep        stosd
  1197.             add        edi,ebx
  1198.             dec        dl
  1199.             jnz        iug
  1200.             pop        edi
  1201.         };
  1202.         return;
  1203.     }else{
  1204.         int a,b,c,d,p,q,r;
  1205.         int cc=32;
  1206.         __asm{
  1207.             push    edi
  1208.             push    esi
  1209.             mov        eax,z1
  1210.             mov        ebx,eax
  1211.             //shl        ebx,8
  1212.             mov        a,ebx
  1213.             mov        ecx,z2
  1214.             sub        ecx,eax
  1215.             sar        ecx,5
  1216.             mov        b,ecx
  1217.             mov        ecx,z3
  1218.             sub        ecx,eax
  1219.             sar        ecx,5
  1220.             mov        c,ecx
  1221.             mov        ecx,z4
  1222.             add        ecx,z1
  1223.             sub        ecx,z2
  1224.             sub        ecx,z3
  1225.             sar        ecx,10
  1226.             mov        d,ecx
  1227.             //coefficients are now calculated
  1228.             mov        ecx,0x2004
  1229.             mov        ebx,a        //bh=fogging value
  1230.             add        ebx,256*256*3
  1231.             mov        edx,b        //dx=fog incrementor
  1232.             xor        eax,eax
  1233.             mov        esi,scrof
  1234.             mov        p,ebx
  1235. qqw1:        mov        eax,ebx
  1236.             shr        eax,8
  1237.             mov        al,[esi]
  1238.             mov        cl,[fog+eax]
  1239.             //mov        cl,al
  1240.             //inc        esi
  1241.             add        ebx,edx
  1242.             mov        eax,ebx
  1243.             shr        eax,8
  1244.             mov        al,[esi+1]
  1245.             mov        ch,[fog+eax]
  1246.             mov        [esi],cx
  1247.             //inc        esi
  1248.             add        ebx,edx
  1249.             mov        eax,ebx
  1250.             shr        eax,8
  1251.             mov        al,[esi+2]
  1252.             mov        cl,[fog+eax]
  1253.             //mov        [esi+2],al
  1254.             //inc        esi
  1255.             add        ebx,edx
  1256.             mov        eax,ebx
  1257.             shr        eax,8
  1258.             mov        al,[esi+3]
  1259.             mov        ch,[fog+eax]
  1260.             mov        [esi+2],cx
  1261.             //inc        esi
  1262.             add        ebx,edx
  1263.             mov        eax,ebx
  1264.             shr        eax,8
  1265.             mov        al,[esi+4]
  1266.             mov        cl,[fog+eax]
  1267.             //mov        [esi+4],al
  1268.             //inc        esi
  1269.             add        ebx,edx
  1270.             mov        eax,ebx
  1271.             shr        eax,8
  1272.             mov        al,[esi+5]
  1273.             mov        ch,[fog+eax]
  1274.             mov        [esi+4],cx
  1275.             //inc        esi
  1276.             add        ebx,edx
  1277.             mov        eax,ebx
  1278.             shr        eax,8
  1279.             mov        al,[esi+6]
  1280.             mov        cl,[fog+eax]
  1281.             //mov        [esi+6],al
  1282.             //inc        esi
  1283.             add        ebx,edx
  1284.             mov        eax,ebx
  1285.             shr        eax,8
  1286.             mov        al,[esi+7]
  1287.             mov        ch,[fog+eax]
  1288.             mov        [esi+6],al
  1289.             //add        esi,8
  1290.             add        ebx,edx
  1291.             mov        eax,ebx
  1292.             shr        eax,8
  1293.             mov        al,[esi+8]
  1294.             mov        cl,[fog+eax]
  1295.             //mov        [esi],al
  1296.             //inc        esi
  1297.             add        ebx,edx
  1298.             mov        eax,ebx
  1299.             shr        eax,8
  1300.             mov        al,[esi+9]
  1301.             mov        ch,[fog+eax]
  1302.             mov        [esi+8],cx
  1303.             //inc        esi
  1304.             add        ebx,edx
  1305.             mov        eax,ebx
  1306.             shr        eax,8
  1307.             mov        al,[esi+10]
  1308.             mov        cl,[fog+eax]
  1309.             //mov        [esi+2],al
  1310.             //inc        esi
  1311.             add        ebx,edx
  1312.             mov        eax,ebx
  1313.             shr        eax,8
  1314.             mov        al,[esi+11]
  1315.             mov        ch,[fog+eax]
  1316.             mov        [esi+10],al
  1317.             //inc        esi
  1318.             add        ebx,edx
  1319.             mov        eax,ebx
  1320.             shr        eax,8
  1321.             mov        al,[esi+12]
  1322.             mov        cl,[fog+eax]
  1323.             //mov        [esi+4],al
  1324.             //inc        esi
  1325.             add        ebx,edx
  1326.             mov        eax,ebx
  1327.             shr        eax,8
  1328.             mov        al,[esi+13]
  1329.             mov        ch,[fog+eax]
  1330.             mov        [esi+12],cx
  1331.             //inc        esi
  1332.             add        ebx,edx
  1333.             mov        eax,ebx
  1334.             shr        eax,8
  1335.             mov        al,[esi+14]
  1336.             mov        cl,[fog+eax]
  1337.             //mov        [esi+6],al
  1338.             //inc        esi
  1339.             add        ebx,edx
  1340.             mov        eax,ebx
  1341.             shr        eax,8
  1342.             mov        al,[esi+15]
  1343.             mov        ch,[fog+eax]
  1344.             mov        [esi+14],al
  1345.             add        esi,8
  1346.             add        ebx,edx
  1347.             mov        eax,ebx
  1348.             //shr        eax,8
  1349.             mov        al,[esi+16]
  1350.             mov        cl,[fog+eax]
  1351.             //mov        [esi],al
  1352.             //inc        esi
  1353.             add        ebx,edx
  1354.             mov        eax,ebx
  1355.             shr        eax,8
  1356.             mov        al,[esi+17]
  1357.             mov        ch,[fog+eax]
  1358.             mov        [esi+16],cx
  1359.             //inc        esi
  1360.             add        ebx,edx
  1361.             mov        eax,ebx
  1362.             shr        eax,8
  1363.             mov        al,[esi+18]
  1364.             mov        cl,[fog+eax]
  1365.             //mov        [esi+2],al
  1366.             //inc        esi
  1367.             add        ebx,edx
  1368.             mov        eax,ebx
  1369.             shr        eax,8
  1370.             mov        al,[esi+19]
  1371.             mov        ch,[fog+eax]
  1372.             mov        [esi+18],cx
  1373.             //inc        esi
  1374.             add        ebx,edx
  1375.             mov        eax,ebx
  1376.             shr        eax,8
  1377.             mov        al,[esi+20]
  1378.             mov        cl,[fog+eax]
  1379.             //mov        [esi+4],al
  1380.             //inc        esi
  1381.             add        ebx,edx
  1382.             mov        eax,ebx
  1383.             shr        eax,8
  1384.             mov        al,[esi+21]
  1385.             mov        ch,[fog+eax]
  1386.             mov        [esi+20],cx
  1387.             //inc        esi
  1388.             add        ebx,edx
  1389.             mov        eax,ebx
  1390.             shr        eax,8
  1391.             mov        al,[esi+22]
  1392.             mov        cl,[fog+eax]
  1393.             //mov        [esi+6],al
  1394.             //inc        esi
  1395.             add        ebx,edx
  1396.             mov        eax,ebx
  1397.             shr        eax,8
  1398.             mov        al,[esi+23]
  1399.             mov        ch,[fog+eax]
  1400.             mov        [esi+22],cx
  1401.             add        esi,8
  1402.             add        ebx,edx
  1403.             mov        eax,ebx
  1404.             //shr        eax,8
  1405.             mov        al,[esi+24]
  1406.             mov        cl,[fog+eax]
  1407.             //mov        [esi],al
  1408.             //inc        esi
  1409.             add        ebx,edx
  1410.             mov        eax,ebx
  1411.             shr        eax,8
  1412.             mov        al,[esi+25]
  1413.             mov        ch,[fog+eax]
  1414.             mov        [esi+24],cx
  1415.             //inc        esi
  1416.             add        ebx,edx
  1417.             mov        eax,ebx
  1418.             shr        eax,8
  1419.             mov        al,[esi+26]
  1420.             mov        cl,[fog+eax]
  1421.             //mov        [esi+2],al
  1422.             //inc        esi
  1423.             add        ebx,edx
  1424.             mov        eax,ebx
  1425.             shr        eax,8
  1426.             mov        al,[esi+27]
  1427.             mov        ch,[fog+eax]
  1428.             mov        [esi+26],cx
  1429.             //inc        esi
  1430.             add        ebx,edx
  1431.             mov        eax,ebx
  1432.             shr        eax,8
  1433.             mov        al,[esi+28]
  1434.             mov        cl,[fog+eax]
  1435.             //mov        [esi+4],al
  1436.             //inc        esi
  1437.             add        ebx,edx
  1438.             mov        eax,ebx
  1439.             shr        eax,8
  1440.             mov        al,[esi+29]
  1441.             mov        ch,[fog+eax]
  1442.             mov        [esi+28],cx
  1443.             //inc        esi
  1444.             add        ebx,edx
  1445.             mov        eax,ebx
  1446.             shr        eax,8
  1447.             mov        al,[esi+30]
  1448.             mov        cl,[fog+eax]
  1449.             //mov        [esi+36],al
  1450.             //inc        esi
  1451.             add        ebx,edx
  1452.             mov        eax,ebx
  1453.             shr        eax,8
  1454.             mov        al,[esi+31]
  1455.             mov        ch,[fog+eax]
  1456.             mov        [esi+30],cx
  1457.             add        esi,32
  1458.             add        ebx,edx
  1459.             //jnz        qqw1
  1460.             add        esi,adds
  1461.             add        edx,d
  1462.             mov        ebx,p
  1463.             add        ebx,c
  1464.             //mov        cl,4
  1465.             mov        p,ebx
  1466.             dec        cc
  1467.             jnz        qqw1
  1468.             pop        esi
  1469.             pop        edi
  1470.         };
  1471.         //Xbar(x+12,y+12,8,8,clrGreen);
  1472.     };
  1473. };
  1474. void ShowSuperFluentFog32(int x,int y,int z1x,int z2x,int z3x,int z4x){
  1475.     //return;
  1476.     int z1=z1x<<16;
  1477.     int    z2=z2x<<16;
  1478.     int z3=z3x<<16;
  1479.     int    z4=z4x<<16;
  1480.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  1481.     int adds=SCRSizeX-32;
  1482.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  1483.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  1484.         __asm{
  1485.             push    edi
  1486.             mov        ebx,adds
  1487.             mov        edi,scrof
  1488.             mov        dl,32
  1489.             xor        eax,eax
  1490.             cld
  1491. iug:        mov        ecx,8
  1492.             rep        stosd
  1493.             add        edi,ebx
  1494.             dec        dl
  1495.             jnz        iug
  1496.             pop        edi
  1497.         };
  1498.         return;
  1499.     }else{
  1500.         int a,b,c,d,p,q,r;
  1501.         __asm{
  1502.             push    edi
  1503.             push    esi
  1504.             mov        eax,z1
  1505.             mov        ebx,eax
  1506.             //shl        ebx,8
  1507.             mov        a,ebx
  1508.             mov        ecx,z2
  1509.             sub        ecx,eax
  1510.             sar        ecx,5
  1511.             mov        b,ecx
  1512.             mov        ecx,z3
  1513.             sub        ecx,eax
  1514.             sar        ecx,5
  1515.             mov        c,ecx
  1516.             mov        ecx,z4
  1517.             add        ecx,z1
  1518.             sub        ecx,z2
  1519.             sub        ecx,z3
  1520.             sar        ecx,10
  1521.             mov        d,ecx
  1522.             //coefficients are now calculated
  1523.             mov        ecx,0x2004
  1524.             mov        ebx,a        //bh=fogging value
  1525.             add        ebx,256*256*3
  1526.             mov        edx,b        //dx=fog incrementor
  1527.             xor        eax,eax
  1528.             mov        esi,scrof
  1529.             mov        p,ebx
  1530. qqw1:        mov        eax,ebx
  1531.             shr        eax,8
  1532.             mov        al,[esi]
  1533.             mov        al,[fog+eax]
  1534.             mov        [esi],al
  1535.             //inc        esi
  1536.             add        ebx,edx
  1537.             mov        eax,ebx
  1538.             shr        eax,8
  1539.             mov        al,[esi+1]
  1540.             mov        al,[fog+eax]
  1541.             mov        [esi+1],al
  1542.             //inc        esi
  1543.             add        ebx,edx
  1544.             mov        eax,ebx
  1545.             shr        eax,8
  1546.             mov        al,[esi+2]
  1547.             mov        al,[fog+eax]
  1548.             mov        [esi+2],al
  1549.             //inc        esi
  1550.             add        ebx,edx
  1551.             mov        eax,ebx
  1552.             shr        eax,8
  1553.             mov        al,[esi+3]
  1554.             mov        al,[fog+eax]
  1555.             mov        [esi+3],al
  1556.             //inc        esi
  1557.             add        ebx,edx
  1558.             mov        eax,ebx
  1559.             shr        eax,8
  1560.             mov        al,[esi+4]
  1561.             mov        al,[fog+eax]
  1562.             mov        [esi+4],al
  1563.             //inc        esi
  1564.             add        ebx,edx
  1565.             mov        eax,ebx
  1566.             shr        eax,8
  1567.             mov        al,[esi+5]
  1568.             mov        al,[fog+eax]
  1569.             mov        [esi+5],al
  1570.             //inc        esi
  1571.             add        ebx,edx
  1572.             mov        eax,ebx
  1573.             shr        eax,8
  1574.             mov        al,[esi+6]
  1575.             mov        al,[fog+eax]
  1576.             mov        [esi+6],al
  1577.             //inc        esi
  1578.             add        ebx,edx
  1579.             mov        eax,ebx
  1580.             shr        eax,8
  1581.             mov        al,[esi+7]
  1582.             mov        al,[fog+eax]
  1583.             mov        [esi+7],al
  1584.             add        esi,8
  1585.             add        ebx,edx
  1586.             mov        eax,ebx
  1587.             shr        eax,8
  1588.             mov        al,[esi]
  1589.             mov        al,[fog+eax]
  1590.             mov        [esi],al
  1591.             //inc        esi
  1592.             add        ebx,edx
  1593.             mov        eax,ebx
  1594.             shr        eax,8
  1595.             mov        al,[esi+1]
  1596.             mov        al,[fog+eax]
  1597.             mov        [esi+1],al
  1598.             //inc        esi
  1599.             add        ebx,edx
  1600.             mov        eax,ebx
  1601.             shr        eax,8
  1602.             mov        al,[esi+2]
  1603.             mov        al,[fog+eax]
  1604.             mov        [esi+2],al
  1605.             //inc        esi
  1606.             add        ebx,edx
  1607.             mov        eax,ebx
  1608.             shr        eax,8
  1609.             mov        al,[esi+3]
  1610.             mov        al,[fog+eax]
  1611.             mov        [esi+3],al
  1612.             //inc        esi
  1613.             add        ebx,edx
  1614.             mov        eax,ebx
  1615.             shr        eax,8
  1616.             mov        al,[esi+4]
  1617.             mov        al,[fog+eax]
  1618.             mov        [esi+4],al
  1619.             //inc        esi
  1620.             add        ebx,edx
  1621.             mov        eax,ebx
  1622.             shr        eax,8
  1623.             mov        al,[esi+5]
  1624.             mov        al,[fog+eax]
  1625.             mov        [esi+5],al
  1626.             //inc        esi
  1627.             add        ebx,edx
  1628.             mov        eax,ebx
  1629.             shr        eax,8
  1630.             mov        al,[esi+6]
  1631.             mov        al,[fog+eax]
  1632.             mov        [esi+6],al
  1633.             //inc        esi
  1634.             add        ebx,edx
  1635.             mov        eax,ebx
  1636.             shr        eax,8
  1637.             mov        al,[esi+7]
  1638.             mov        al,[fog+eax]
  1639.             mov        [esi+7],al
  1640.             add        esi,8
  1641.             add        ebx,edx
  1642.             mov        eax,ebx
  1643.             shr        eax,8
  1644.             mov        al,[esi]
  1645.             mov        al,[fog+eax]
  1646.             mov        [esi],al
  1647.             //inc        esi
  1648.             add        ebx,edx
  1649.             mov        eax,ebx
  1650.             shr        eax,8
  1651.             mov        al,[esi+1]
  1652.             mov        al,[fog+eax]
  1653.             mov        [esi+1],al
  1654.             //inc        esi
  1655.             add        ebx,edx
  1656.             mov        eax,ebx
  1657.             shr        eax,8
  1658.             mov        al,[esi+2]
  1659.             mov        al,[fog+eax]
  1660.             mov        [esi+2],al
  1661.             //inc        esi
  1662.             add        ebx,edx
  1663.             mov        eax,ebx
  1664.             shr        eax,8
  1665.             mov        al,[esi+3]
  1666.             mov        al,[fog+eax]
  1667.             mov        [esi+3],al
  1668.             //inc        esi
  1669.             add        ebx,edx
  1670.             mov        eax,ebx
  1671.             shr        eax,8
  1672.             mov        al,[esi+4]
  1673.             mov        al,[fog+eax]
  1674.             mov        [esi+4],al
  1675.             //inc        esi
  1676.             add        ebx,edx
  1677.             mov        eax,ebx
  1678.             shr        eax,8
  1679.             mov        al,[esi+5]
  1680.             mov        al,[fog+eax]
  1681.             mov        [esi+5],al
  1682.             //inc        esi
  1683.             add        ebx,edx
  1684.             mov        eax,ebx
  1685.             shr        eax,8
  1686.             mov        al,[esi+6]
  1687.             mov        al,[fog+eax]
  1688.             mov        [esi+6],al
  1689.             //inc        esi
  1690.             add        ebx,edx
  1691.             mov        eax,ebx
  1692.             shr        eax,8
  1693.             mov        al,[esi+7]
  1694.             mov        al,[fog+eax]
  1695.             mov        [esi+7],al
  1696.             add        esi,8
  1697.             add        ebx,edx
  1698.             mov        eax,ebx
  1699.             shr        eax,8
  1700.             mov        al,[esi]
  1701.             mov        al,[fog+eax]
  1702.             mov        [esi],al
  1703.             //inc        esi
  1704.             add        ebx,edx
  1705.             mov        eax,ebx
  1706.             shr        eax,8
  1707.             mov        al,[esi+1]
  1708.             mov        al,[fog+eax]
  1709.             mov        [esi+1],al
  1710.             //inc        esi
  1711.             add        ebx,edx
  1712.             mov        eax,ebx
  1713.             shr        eax,8
  1714.             mov        al,[esi+2]
  1715.             mov        al,[fog+eax]
  1716.             mov        [esi+2],al
  1717.             //inc        esi
  1718.             add        ebx,edx
  1719.             mov        eax,ebx
  1720.             shr        eax,8
  1721.             mov        al,[esi+3]
  1722.             mov        al,[fog+eax]
  1723.             mov        [esi+3],al
  1724.             //inc        esi
  1725.             add        ebx,edx
  1726.             mov        eax,ebx
  1727.             shr        eax,8
  1728.             mov        al,[esi+4]
  1729.             mov        al,[fog+eax]
  1730.             mov        [esi+4],al
  1731.             //inc        esi
  1732.             add        ebx,edx
  1733.             mov        eax,ebx
  1734.             shr        eax,8
  1735.             mov        al,[esi+5]
  1736.             mov        al,[fog+eax]
  1737.             mov        [esi+5],al
  1738.             //inc        esi
  1739.             add        ebx,edx
  1740.             mov        eax,ebx
  1741.             shr        eax,8
  1742.             mov        al,[esi+6]
  1743.             mov        al,[fog+eax]
  1744.             mov        [esi+6],al
  1745.             //inc        esi
  1746.             add        ebx,edx
  1747.             mov        eax,ebx
  1748.             shr        eax,8
  1749.             mov        al,[esi+7]
  1750.             mov        al,[fog+eax]
  1751.             mov        [esi+7],al
  1752.             add        esi,8
  1753.             add        ebx,edx
  1754.             //jnz        qqw1
  1755.             add        esi,adds
  1756.             add        edx,d
  1757.             mov        ebx,p
  1758.             add        ebx,c
  1759.             //mov        cl,4
  1760.             mov        p,ebx
  1761.             dec        ch
  1762.             jnz        qqw1
  1763.             pop        esi
  1764.             pop        edi
  1765.         };
  1766.         //Xbar(x+12,y+12,8,8,clrGreen);
  1767.     };
  1768. };
  1769. void ShowSuperFluentFog2_2old(int x,int y,int z1x,int z2x,int z3x,int z4x){
  1770.     //return;
  1771.     int z1=z1x<<16;
  1772.     int    z2=z2x<<16;
  1773.     int z3=z3x<<16;
  1774.     int    z4=z4x<<16;
  1775.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  1776.     int adds=SCRSizeX-32;
  1777.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  1778.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  1779.         __asm{
  1780.             push    edi
  1781.             mov        ebx,adds
  1782.             mov        edi,scrof
  1783.             mov        dl,32
  1784.             xor        eax,eax
  1785.             cld
  1786. iug:        mov        ecx,8
  1787.             rep        stosd
  1788.             add        edi,ebx
  1789.             dec        dl
  1790.             jnz        iug
  1791.             pop        edi
  1792.         };
  1793.         return;
  1794.     }else{
  1795.         int a,b,c,d,p,q,r;
  1796.         static int xebp;;
  1797.         __asm{
  1798.             push    edi
  1799.             push    esi
  1800.             mov        eax,z1
  1801.             mov        ebx,eax
  1802.             //shl        ebx,8
  1803.             mov        a,ebx
  1804.             mov        ecx,z2
  1805.             sub        ecx,eax
  1806.             sar        ecx,5
  1807.             mov        b,ecx
  1808.             mov        ecx,z3
  1809.             sub        ecx,eax
  1810.             sar        ecx,5
  1811.             mov        c,ecx
  1812.             mov        ecx,z4
  1813.             add        ecx,z1
  1814.             sub        ecx,z2
  1815.             sub        ecx,z3
  1816.             sar        ecx,10
  1817.             mov        d,ecx
  1818.             //coefficients are now calculated
  1819.             mov        ecx,0x2010
  1820.             mov        ebx,a        //bh=fogging value
  1821.             add        ebx,256*256*3
  1822.             //mov        edx,b        
  1823.             xor        eax,eax
  1824.             mov        esi,scrof
  1825.             mov        p,ebx
  1826.             mov        xebp,ebp
  1827.             mov        ebp,b
  1828. qqw1:        mov        eax,ebx
  1829.             shr        eax,8
  1830.             mov        al,[esi]
  1831.             mov        dl,[fog+eax]
  1832.             //inc        esi
  1833.             add        ebx,ebp
  1834.             mov        eax,ebx
  1835.             shr        eax,8
  1836.             mov        al,[esi+1]
  1837.             mov        dh,[fog+eax]
  1838.             mov        [esi],dx
  1839.             add        esi,2
  1840.             add        ebx,ebp
  1841.             dec        cl
  1842.             jnz        qqw1
  1843.             mov        edx,ebp
  1844.             mov        ebp,xebp
  1845.             add        esi,adds
  1846.             add        edx,d
  1847.             mov        ebx,p
  1848.             add        ebx,c
  1849.             mov        cl,16
  1850.             mov        p,ebx
  1851.             mov        ebp,edx
  1852.             dec        ch
  1853.             jnz        qqw1
  1854.             mov        ebp,xebp
  1855.             pop        esi
  1856.             pop        edi
  1857.         };
  1858.         //Xbar(x+12,y+12,8,8,clrGreen);
  1859.     };
  1860. };
  1861. void ShowSuperFluentFog2_2(int x,int y,int z1x,int z2x,int z3x,int z4x){
  1862.     //return;
  1863.     int z1=z1x<<16;
  1864.     int    z2=z2x<<16;
  1865.     int z3=z3x<<16;
  1866.     int    z4=z4x<<16;
  1867.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  1868.     int adds=SCRSizeX-32;
  1869.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  1870.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  1871.         __asm{
  1872.             push    edi
  1873.             mov        ebx,adds
  1874.             mov        edi,scrof
  1875.             mov        dl,32
  1876.             xor        eax,eax
  1877.             cld
  1878. iug:        mov        ecx,8
  1879.             rep        stosd
  1880.             add        edi,ebx
  1881.             dec        dl
  1882.             jnz        iug
  1883.             pop        edi
  1884.         };
  1885.         return;
  1886.     }else{
  1887.         int a,b,c,d,p,q,r;
  1888.         static int xebp;;
  1889.         __asm{
  1890.             push    edi
  1891.             push    esi
  1892.             mov        eax,z1
  1893.             mov        ebx,eax
  1894.             //shl        ebx,8
  1895.             mov        a,ebx
  1896.             mov        ecx,z2
  1897.             sub        ecx,eax
  1898.             sar        ecx,5
  1899.             mov        b,ecx
  1900.             mov        ecx,z3
  1901.             sub        ecx,eax
  1902.             sar        ecx,5
  1903.             mov        c,ecx
  1904.             mov        ecx,z4
  1905.             add        ecx,z1
  1906.             sub        ecx,z2
  1907.             sub        ecx,z3
  1908.             sar        ecx,10
  1909.             mov        d,ecx
  1910.             //coefficients are now calculated
  1911.             mov        ecx,0x1010
  1912.             mov        ebx,a        //bh=fogging value
  1913.             //add        ebx,256*256*3
  1914.             //mov        edx,b        
  1915.             xor        eax,eax
  1916.             mov        esi,scrof
  1917.             mov        p,ebx
  1918.             mov        xebp,ebp
  1919.             mov        ebp,b
  1920. qqw1:        mov        eax,ebx
  1921.             //add        eax,1632768
  1922.             shr        eax,8
  1923.             mov        al,[esi]
  1924.             mov        dl,[fog+eax]
  1925.             //inc        esi
  1926.             add        ebx,ebp
  1927.             mov        eax,ebx
  1928.             add        eax,16384
  1929.             shr        eax,8
  1930.             mov        al,[esi+1]
  1931.             mov        dh,[fog+eax]
  1932.             mov        [esi],dx
  1933.             add        esi,2
  1934.             add        ebx,ebp
  1935.             dec        cl
  1936.             jnz        qqw1
  1937.             mov        edx,ebp
  1938.             mov        ebp,xebp
  1939.             add        esi,adds
  1940.             add        edx,d
  1941.             mov        ebx,p
  1942.             add        ebx,c
  1943.             mov        cl,16
  1944.             mov        p,ebx
  1945.             mov        ebp,edx
  1946. qqw2:
  1947.             mov        eax,ebx
  1948.             add        eax,32768
  1949.             shr        eax,8
  1950.             mov        al,[esi]
  1951.             mov        dl,[fog+eax]
  1952.             //inc        esi
  1953.             add        ebx,ebp
  1954.             mov        eax,ebx
  1955.             add        eax,48796
  1956.             shr        eax,8
  1957.             mov        al,[esi+1]
  1958.             mov        dh,[fog+eax]
  1959.             mov        [esi],dx
  1960.             add        esi,2
  1961.             add        ebx,ebp
  1962.             dec        cl
  1963.             jnz        qqw2
  1964.             mov        edx,ebp
  1965.             mov        ebp,xebp
  1966.             add        esi,adds
  1967.             add        edx,d
  1968.             mov        ebx,p
  1969.             add        ebx,c
  1970.             mov        cl,16
  1971.             mov        p,ebx
  1972.             mov        ebp,edx
  1973.  
  1974.  
  1975.             dec        ch
  1976.             jnz        qqw1
  1977.             mov        ebp,xebp
  1978.             pop        esi
  1979.             pop        edi
  1980.         };
  1981.         //Xbar(x+12,y+12,8,8,clrGreen);
  1982.     };
  1983. };
  1984. void ShowSuperFluentFog2_2_16(int x,int y,int z1x,int z2x,int z3x,int z4x){
  1985.     //return;
  1986.     int z1=z1x<<16;
  1987.     int    z2=z2x<<16;
  1988.     int z3=z3x<<16;
  1989.     int    z4=z4x<<16;
  1990.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  1991.     int adds=SCRSizeX-16;
  1992.     if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
  1993.     if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
  1994.         __asm{
  1995.             push    edi
  1996.             mov        ebx,adds
  1997.             mov        edi,scrof
  1998.             mov        dl,16
  1999.             xor        eax,eax
  2000.             cld
  2001. iug:        mov        ecx,4
  2002.             rep        stosd
  2003.             add        edi,ebx
  2004.             dec        dl
  2005.             jnz        iug
  2006.             pop        edi
  2007.         };
  2008.         return;
  2009.     }else{
  2010.         int a,b,c,d,p,q,r;
  2011.         static int xebp;;
  2012.         __asm{
  2013.             push    edi
  2014.             push    esi
  2015.             mov        eax,z1
  2016.             mov        ebx,eax
  2017.             //shl        ebx,8
  2018.             mov        a,ebx
  2019.             mov        ecx,z2
  2020.             sub        ecx,eax
  2021.             sar        ecx,4
  2022.             mov        b,ecx
  2023.             mov        ecx,z3
  2024.             sub        ecx,eax
  2025.             sar        ecx,4
  2026.             mov        c,ecx
  2027.             mov        ecx,z4
  2028.             add        ecx,z1
  2029.             sub        ecx,z2
  2030.             sub        ecx,z3
  2031.             sar        ecx,8
  2032.             mov        d,ecx
  2033.             //coefficients are now calculated
  2034.             mov        ecx,0x0808
  2035.             mov        ebx,a        //bh=fogging value
  2036.             //add        ebx,256*256*3
  2037.             //mov        edx,b        
  2038.             xor        eax,eax
  2039.             mov        esi,scrof
  2040.             mov        p,ebx
  2041.             mov        xebp,ebp
  2042.             mov        ebp,b
  2043. qqw1:        mov        eax,ebx
  2044.             //add        eax,1632768
  2045.             sar        eax,8
  2046.             mov        al,[esi]
  2047.             mov        dl,[fog+eax]
  2048.             //inc        esi
  2049.             add        ebx,ebp
  2050.             mov        eax,ebx
  2051.             add        eax,16384
  2052.             shr        eax,8
  2053.             mov        al,[esi+1]
  2054.             mov        dh,[fog+eax]
  2055.             mov        [esi],dx
  2056.             add        esi,2
  2057.             add        ebx,ebp
  2058.             dec        cl
  2059.             jnz        qqw1
  2060.             mov        edx,ebp
  2061.             mov        ebp,xebp
  2062.             add        esi,adds
  2063.             add        edx,d
  2064.             mov        ebx,p
  2065.             add        ebx,c
  2066.             mov        cl,8
  2067.             mov        p,ebx
  2068.             mov        ebp,edx
  2069. qqw2:
  2070.             mov        eax,ebx
  2071.             add        eax,32768
  2072.             shr        eax,8
  2073.             mov        al,[esi]
  2074.             mov        dl,[fog+eax]
  2075.             //inc        esi
  2076.             add        ebx,ebp
  2077.             mov        eax,ebx
  2078.             add        eax,48796
  2079.             shr        eax,8
  2080.             mov        al,[esi+1]
  2081.             mov        dh,[fog+eax]
  2082.             mov        [esi],dx
  2083.             add        esi,2
  2084.             add        ebx,ebp
  2085.             dec        cl
  2086.             jnz        qqw2
  2087.             mov        edx,ebp
  2088.             mov        ebp,xebp
  2089.             add        esi,adds
  2090.             add        edx,d
  2091.             mov        ebx,p
  2092.             add        ebx,c
  2093.             mov        cl,8
  2094.             mov        p,ebx
  2095.             mov        ebp,edx
  2096.  
  2097.  
  2098.             dec        ch
  2099.             jnz        qqw1
  2100.             mov        ebp,xebp
  2101.             pop        esi
  2102.             pop        edi
  2103.         };
  2104.         //Xbar(x+12,y+12,8,8,clrGreen);
  2105.     };
  2106. };
  2107.  
  2108. void ShowSuperFluentFog32_160(int x,int y,int z1x,int z2x,int z3x,int z4x){
  2109.     if(MiniMode)return;
  2110.     int z1=z1x<<16;
  2111.     int    z2=z2x<<16;
  2112.     int z3=z3x<<16;
  2113.     int    z4=z4x<<16;
  2114.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  2115.     int adds=SCRSizeX-32;
  2116.     if(z1x<=63&&z2x<=63&&z3x<=63&&z4x<=63)return;
  2117.     if(z1x>=96&&z2x>=96&&z3x>=96&&z4x>=96){
  2118.         __asm{
  2119.             push    edi
  2120.             mov        ebx,adds
  2121.             mov        edi,scrof
  2122.             mov        dl,32
  2123.             xor        eax,eax
  2124.             cld
  2125. iug:        mov        ecx,8
  2126.             rep        stosd
  2127.             add        edi,ebx
  2128.             dec        dl
  2129.             jnz        iug
  2130.             pop        edi
  2131.         };
  2132.         return;
  2133.     }else{
  2134.         int a,b,c,d,p,q,r;
  2135.         __asm{
  2136.             push    edi
  2137.             push    esi
  2138.             pushf
  2139.             mov        eax,z1
  2140.             mov        ebx,eax
  2141.             //shl        ebx,8
  2142.             mov        a,ebx
  2143.             mov        ecx,z2
  2144.             sub        ecx,eax
  2145.             sar        ecx,5
  2146.             mov        b,ecx
  2147.             mov        ecx,z3
  2148.             sub        ecx,eax
  2149.             sar        ecx,5
  2150.             mov        c,ecx
  2151.             mov        ecx,z4
  2152.             add        ecx,z1
  2153.             sub        ecx,z2
  2154.             sub        ecx,z3
  2155.             sar        ecx,10
  2156.             mov        d,ecx
  2157.             //coefficients are now calculated
  2158.             mov        ecx,0x2004
  2159.             mov        ebx,a        //bh=fogging value
  2160.             //add        ebx,256*256*3
  2161.             mov        edx,b        //dx=fog incrementor
  2162.             xor        eax,eax
  2163.             mov        esi,scrof
  2164.             mov        p,ebx
  2165. qqw1:        mov        eax,ebx
  2166.             sar        eax,8
  2167.             mov        al,[esi]
  2168.             mov        al,[darkfog+eax]
  2169.             mov        [esi],al
  2170.             //inc        esi
  2171.             add        ebx,edx
  2172.             mov        eax,ebx
  2173.             sar        eax,8
  2174.             mov        al,[esi+1]
  2175.             mov        al,[darkfog+eax]
  2176.             mov        [esi+1],al
  2177.             //inc        esi
  2178.             add        ebx,edx
  2179.             mov        eax,ebx
  2180.             sar        eax,8
  2181.             mov        al,[esi+2]
  2182.             mov        al,[darkfog+eax]
  2183.             mov        [esi+2],al
  2184.             //inc        esi
  2185.             add        ebx,edx
  2186.             mov        eax,ebx
  2187.             sar        eax,8
  2188.             mov        al,[esi+3]
  2189.             mov        al,[darkfog+eax]
  2190.             mov        [esi+3],al
  2191.             //inc        esi
  2192.             add        ebx,edx
  2193.             mov        eax,ebx
  2194.             shr        eax,8
  2195.             mov        al,[esi+4]
  2196.             mov        al,[darkfog+eax]
  2197.             mov        [esi+4],al
  2198.             //inc        esi
  2199.             add        ebx,edx
  2200.             mov        eax,ebx
  2201.             shr        eax,8
  2202.             mov        al,[esi+5]
  2203.             mov        al,[darkfog+eax]
  2204.             mov        [esi+5],al
  2205.             //inc        esi
  2206.             add        ebx,edx
  2207.             mov        eax,ebx
  2208.             shr        eax,8
  2209.             mov        al,[esi+6]
  2210.             mov        al,[darkfog+eax]
  2211.             mov        [esi+6],al
  2212.             //inc        esi
  2213.             add        ebx,edx
  2214.             mov        eax,ebx
  2215.             shr        eax,8
  2216.             mov        al,[esi+7]
  2217.             mov        al,[darkfog+eax]
  2218.             mov        [esi+7],al
  2219.             add        esi,8
  2220.             add        ebx,edx
  2221.             mov        eax,ebx
  2222.             shr        eax,8
  2223.             mov        al,[esi]
  2224.             mov        al,[darkfog+eax]
  2225.             mov        [esi],al
  2226.             //inc        esi
  2227.             add        ebx,edx
  2228.             mov        eax,ebx
  2229.             shr        eax,8
  2230.             mov        al,[esi+1]
  2231.             mov        al,[darkfog+eax]
  2232.             mov        [esi+1],al
  2233.             //inc        esi
  2234.             add        ebx,edx
  2235.             mov        eax,ebx
  2236.             shr        eax,8
  2237.             mov        al,[esi+2]
  2238.             mov        al,[darkfog+eax]
  2239.             mov        [esi+2],al
  2240.             //inc        esi
  2241.             add        ebx,edx
  2242.             mov        eax,ebx
  2243.             shr        eax,8
  2244.             mov        al,[esi+3]
  2245.             mov        al,[darkfog+eax]
  2246.             mov        [esi+3],al
  2247.             //inc        esi
  2248.             add        ebx,edx
  2249.             mov        eax,ebx
  2250.             shr        eax,8
  2251.             mov        al,[esi+4]
  2252.             mov        al,[darkfog+eax]
  2253.             mov        [esi+4],al
  2254.             //inc        esi
  2255.             add        ebx,edx
  2256.             mov        eax,ebx
  2257.             shr        eax,8
  2258.             mov        al,[esi+5]
  2259.             mov        al,[darkfog+eax]
  2260.             mov        [esi+5],al
  2261.             //inc        esi
  2262.             add        ebx,edx
  2263.             mov        eax,ebx
  2264.             shr        eax,8
  2265.             mov        al,[esi+6]
  2266.             mov        al,[darkfog+eax]
  2267.             mov        [esi+6],al
  2268.             //inc        esi
  2269.             add        ebx,edx
  2270.             mov        eax,ebx
  2271.             shr        eax,8
  2272.             mov        al,[esi+7]
  2273.             mov        al,[darkfog+eax]
  2274.             mov        [esi+7],al
  2275.             add        esi,8
  2276.             add        ebx,edx
  2277.             mov        eax,ebx
  2278.             shr        eax,8
  2279.             mov        al,[esi]
  2280.             mov        al,[darkfog+eax]
  2281.             mov        [esi],al
  2282.             //inc        esi
  2283.             add        ebx,edx
  2284.             mov        eax,ebx
  2285.             shr        eax,8
  2286.             mov        al,[esi+1]
  2287.             mov        al,[darkfog+eax]
  2288.             mov        [esi+1],al
  2289.             //inc        esi
  2290.             add        ebx,edx
  2291.             mov        eax,ebx
  2292.             shr        eax,8
  2293.             mov        al,[esi+2]
  2294.             mov        al,[darkfog+eax]
  2295.             mov        [esi+2],al
  2296.             //inc        esi
  2297.             add        ebx,edx
  2298.             mov        eax,ebx
  2299.             shr        eax,8
  2300.             mov        al,[esi+3]
  2301.             mov        al,[darkfog+eax]
  2302.             mov        [esi+3],al
  2303.             //inc        esi
  2304.             add        ebx,edx
  2305.             mov        eax,ebx
  2306.             shr        eax,8
  2307.             mov        al,[esi+4]
  2308.             mov        al,[darkfog+eax]
  2309.             mov        [esi+4],al
  2310.             //inc        esi
  2311.             add        ebx,edx
  2312.             mov        eax,ebx
  2313.             shr        eax,8
  2314.             mov        al,[esi+5]
  2315.             mov        al,[darkfog+eax]
  2316.             mov        [esi+5],al
  2317.             //inc        esi
  2318.             add        ebx,edx
  2319.             mov        eax,ebx
  2320.             shr        eax,8
  2321.             mov        al,[esi+6]
  2322.             mov        al,[darkfog+eax]
  2323.             mov        [esi+6],al
  2324.             //inc        esi
  2325.             add        ebx,edx
  2326.             mov        eax,ebx
  2327.             shr        eax,8
  2328.             mov        al,[esi+7]
  2329.             mov        al,[darkfog+eax]
  2330.             mov        [esi+7],al
  2331.             add        esi,8
  2332.             add        ebx,edx
  2333.             mov        eax,ebx
  2334.             shr        eax,8
  2335.             mov        al,[esi]
  2336.             mov        al,[darkfog+eax]
  2337.             mov        [esi],al
  2338.             //inc        esi
  2339.             add        ebx,edx
  2340.             mov        eax,ebx
  2341.             shr        eax,8
  2342.             mov        al,[esi+1]
  2343.             mov        al,[darkfog+eax]
  2344.             mov        [esi+1],al
  2345.             //inc        esi
  2346.             add        ebx,edx
  2347.             mov        eax,ebx
  2348.             shr        eax,8
  2349.             mov        al,[esi+2]
  2350.             mov        al,[darkfog+eax]
  2351.             mov        [esi+2],al
  2352.             //inc        esi
  2353.             add        ebx,edx
  2354.             mov        eax,ebx
  2355.             shr        eax,8
  2356.             mov        al,[esi+3]
  2357.             mov        al,[darkfog+eax]
  2358.             mov        [esi+3],al
  2359.             //inc        esi
  2360.             add        ebx,edx
  2361.             mov        eax,ebx
  2362.             shr        eax,8
  2363.             mov        al,[esi+4]
  2364.             mov        al,[darkfog+eax]
  2365.             mov        [esi+4],al
  2366.             //inc        esi
  2367.             add        ebx,edx
  2368.             mov        eax,ebx
  2369.             shr        eax,8
  2370.             mov        al,[esi+5]
  2371.             mov        al,[darkfog+eax]
  2372.             mov        [esi+5],al
  2373.             //inc        esi
  2374.             add        ebx,edx
  2375.             mov        eax,ebx
  2376.             shr        eax,8
  2377.             mov        al,[esi+6]
  2378.             mov        al,[darkfog+eax]
  2379.             mov        [esi+6],al
  2380.             //inc        esi
  2381.             add        ebx,edx
  2382.             mov        eax,ebx
  2383.             shr        eax,8
  2384.             mov        al,[esi+7]
  2385.             mov        al,[darkfog+eax]
  2386.             mov        [esi+7],al
  2387.             add        esi,8
  2388.             add        ebx,edx
  2389.             //jnz        qqw1
  2390.             add        esi,adds
  2391.             add        edx,d
  2392.             mov        ebx,p
  2393.             add        ebx,c
  2394.             //mov        cl,4
  2395.             mov        p,ebx
  2396.             dec        ch
  2397.             jnz        qqw1
  2398.             popf
  2399.             pop        esi
  2400.             pop        edi
  2401.         };
  2402.         //Xbar(x+12,y+12,8,8,clrGreen);
  2403.         //Xbar(x,y,32,32,clrGreen);
  2404.     };
  2405. };
  2406. void ShowSuperFluentFog16_160(int x,int y,int z1x,int z2x,int z3x,int z4x){
  2407. //    if(MiniMode)return;
  2408.     int z1=z1x<<16;
  2409.     int    z2=z2x<<16;
  2410.     int z3=z3x<<16;
  2411.     int    z4=z4x<<16;
  2412.     int scrof=int(ScreenPtr)+x+y*SCRSizeX;
  2413.     int adds=SCRSizeX-16;
  2414.     if(z1x<=63&&z2x<=63&&z3x<=63&&z4x<=63)return;
  2415.     if(z1x>=96&&z2x>=96&&z3x>=96&&z4x>=96){
  2416.         __asm{
  2417.             push    edi
  2418.             mov        ebx,adds
  2419.             mov        edi,scrof
  2420.             mov        dl,16
  2421.             xor        eax,eax
  2422.             cld
  2423. iug:        mov        ecx,4
  2424.             rep        stosd
  2425.             add        edi,ebx
  2426.             dec        dl
  2427.             jnz        iug
  2428.             pop        edi
  2429.         };
  2430.         return;
  2431.     }else{
  2432.         int a,b,c,d,p,q,r;
  2433.         __asm{
  2434.             push    edi
  2435.             push    esi
  2436.             pushf
  2437.             mov        eax,z1
  2438.             mov        ebx,eax
  2439.             //shl        ebx,8
  2440.             mov        a,ebx
  2441.             mov        ecx,z2
  2442.             sub        ecx,eax
  2443.             sar        ecx,4
  2444.             mov        b,ecx
  2445.             mov        ecx,z3
  2446.             sub        ecx,eax
  2447.             sar        ecx,4
  2448.             mov        c,ecx
  2449.             mov        ecx,z4
  2450.             add        ecx,z1
  2451.             sub        ecx,z2
  2452.             sub        ecx,z3
  2453.             sar        ecx,8
  2454.             mov        d,ecx
  2455.             //coefficients are now calculated
  2456.             mov        ecx,0x1002
  2457.             mov        ebx,a        //bh=fogging value
  2458.             //add        ebx,256*256*3
  2459.             mov        edx,b        //dx=fog incrementor
  2460.             xor        eax,eax
  2461.             mov        esi,scrof
  2462.             mov        p,ebx
  2463. qqw1:        mov        eax,ebx
  2464.             shr        eax,8
  2465.             mov        al,[esi]
  2466.             mov        al,[darkfog+eax]
  2467.             mov        [esi],al
  2468.             //inc        esi
  2469.             add        ebx,edx
  2470.             mov        eax,ebx
  2471.             shr        eax,8
  2472.             mov        al,[esi+1]
  2473.             mov        al,[darkfog+eax]
  2474.             mov        [esi+1],al
  2475.             //inc        esi
  2476.             add        ebx,edx
  2477.             mov        eax,ebx
  2478.             shr        eax,8
  2479.             mov        al,[esi+2]
  2480.             mov        al,[darkfog+eax]
  2481.             mov        [esi+2],al
  2482.             //inc        esi
  2483.             add        ebx,edx
  2484.             mov        eax,ebx
  2485.             shr        eax,8
  2486.             mov        al,[esi+3]
  2487.             mov        al,[darkfog+eax]
  2488.             mov        [esi+3],al
  2489.             //inc        esi
  2490.             add        ebx,edx
  2491.             mov        eax,ebx
  2492.             shr        eax,8
  2493.             mov        al,[esi+4]
  2494.             mov        al,[darkfog+eax]
  2495.             mov        [esi+4],al
  2496.             //inc        esi
  2497.             add        ebx,edx
  2498.             mov        eax,ebx
  2499.             shr        eax,8
  2500.             mov        al,[esi+5]
  2501.             mov        al,[darkfog+eax]
  2502.             mov        [esi+5],al
  2503.             //inc        esi
  2504.             add        ebx,edx
  2505.             mov        eax,ebx
  2506.             shr        eax,8
  2507.             mov        al,[esi+6]
  2508.             mov        al,[darkfog+eax]
  2509.             mov        [esi+6],al
  2510.             //inc        esi
  2511.             add        ebx,edx
  2512.             mov        eax,ebx
  2513.             shr        eax,8
  2514.             mov        al,[esi+7]
  2515.             mov        al,[darkfog+eax]
  2516.             mov        [esi+7],al
  2517.             add        esi,8
  2518.             add        ebx,edx
  2519.             mov        eax,ebx
  2520.             shr        eax,8
  2521.             mov        al,[esi]
  2522.             mov        al,[darkfog+eax]
  2523.             mov        [esi],al
  2524.             //inc        esi
  2525.             add        ebx,edx
  2526.             mov        eax,ebx
  2527.             shr        eax,8
  2528.             mov        al,[esi+1]
  2529.             mov        al,[darkfog+eax]
  2530.             mov        [esi+1],al
  2531.             //inc        esi
  2532.             add        ebx,edx
  2533.             mov        eax,ebx
  2534.             shr        eax,8
  2535.             mov        al,[esi+2]
  2536.             mov        al,[darkfog+eax]
  2537.             mov        [esi+2],al
  2538.             //inc        esi
  2539.             add        ebx,edx
  2540.             mov        eax,ebx
  2541.             shr        eax,8
  2542.             mov        al,[esi+3]
  2543.             mov        al,[darkfog+eax]
  2544.             mov        [esi+3],al
  2545.             //inc        esi
  2546.             add        ebx,edx
  2547.             mov        eax,ebx
  2548.             shr        eax,8
  2549.             mov        al,[esi+4]
  2550.             mov        al,[darkfog+eax]
  2551.             mov        [esi+4],al
  2552.             //inc        esi
  2553.             add        ebx,edx
  2554.             mov        eax,ebx
  2555.             shr        eax,8
  2556.             mov        al,[esi+5]
  2557.             mov        al,[darkfog+eax]
  2558.             mov        [esi+5],al
  2559.             //inc        esi
  2560.             add        ebx,edx
  2561.             mov        eax,ebx
  2562.             shr        eax,8
  2563.             mov        al,[esi+6]
  2564.             mov        al,[darkfog+eax]
  2565.             mov        [esi+6],al
  2566.             //inc        esi
  2567.             add        ebx,edx
  2568.             mov        eax,ebx
  2569.             shr        eax,8
  2570.             mov        al,[esi+7]
  2571.             mov        al,[darkfog+eax]
  2572.             mov        [esi+7],al
  2573.             add        esi,8
  2574.             add        ebx,edx
  2575.             //jnz        qqw1
  2576.             add        esi,adds
  2577.             add        edx,d
  2578.             mov        ebx,p
  2579.             add        ebx,c
  2580.             //mov        cl,4
  2581.             mov        p,ebx
  2582.             dec        ch
  2583.             jnz        qqw1
  2584.             popf
  2585.             pop        esi
  2586.             pop        edi
  2587.         };
  2588.         //Xbar(x+12,y+12,8,8,clrGreen);
  2589.         //Xbar(x,y,32,32,clrGreen);
  2590.     };
  2591. };
  2592. #define shf 2500
  2593. #define fmin 3096
  2594. byte fden[8192];
  2595. void makeFden(){
  2596.     for(int i=0;i<8192;i++){
  2597.         if(i>shf)fden[i]=158;
  2598.         else fden[i]=5+div(i*153,shf).quot;
  2599.     };
  2600. };
  2601. int GetF(word k){
  2602.     if(k>=fmin)return 5;
  2603.     return fden[fmin-k];
  2604. };
  2605. void ShowSuperFog(){
  2606.     //return;
  2607.     for(int i=0;i<smaplx;i++)
  2608.         for(int j=0;j<smaply;j++){
  2609.             word* fm=&fmap[mapy+j-1][mapx+i-1];
  2610.             ShowSuperFluentFog32_160(smapx+(i<<5),smapy+(j<<5),
  2611.             GetF(fm[0]),GetF(fm[1]),GetF(fm[256]),GetF(fm[257]));
  2612.         };
  2613. };
  2614. void miniShowSuperFog(){
  2615.     //return;
  2616.     for(int i=0;i<smaplx;i++)
  2617.         for(int j=0;j<smaply;j++){
  2618.             word* fm=&fmap[mapy+j-1][mapx+i-1];
  2619.             ShowSuperFluentFog16_160(smapx+(i<<4),smapy+(j<<4),
  2620.             GetF(fm[0]),GetF(fm[1]),GetF(fm[256]),GetF(fm[257]));
  2621.         };
  2622. };
  2623. void TurnFogOn(){
  2624.     FogMode=1;
  2625. };
  2626. void TurnFogOff(){
  2627.     FogMode=0;
  2628. };