home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
WarCraft 2000 - Nuclear Epidemic
/
W2000.nrg
/
SOURCE.War2000
/
fog.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-09-04
|
47KB
|
2,628 lines
#include "ddini.h"
#include "ResFile.h"
#include "FastDraw.h"
#include "mgraph.h"
#include "mouse.h"
#include "menu.h"
#include "MapDiscr.h"
#include "mode.h"
word fmap[256][256];
#define MaxShad 4528
byte fog[8192+1024];
byte wfog[8192];
byte yfog[8192];
byte rfog[8192];
byte darkfog[40960];
int FogMode;
void ShowSuperFog();
void ProcessFog(){
byte z=0;//byte(rando()&1);
__asm{
mov ecx,msx
inc ecx
lab1: mov ax,[fmap+ecx*2]
mov [fmap+512+ecx*2],ax;
mov ax,[fmap+256*255*2+ecx*2]
mov [fmap+256*254*2+ecx*2],ax
loop lab1
mov ecx,msy
mov ebx,offset fmap+512
lab2: mov ax,[ebx]
mov [ebx+2],ax
mov ax,[ebx+510]
mov [ebx+508],ax
add ebx,512
loop lab2
cmp z,0
jne Process1
//Process0
mov bl,byte ptr msx
mov bh,byte ptr msy
mov ecx,offset fmap
add ecx,514
lab3: mov dx,[ecx-512]
add dx,[ecx+512]
add dx,[ecx-2]
add dx,[ecx+2]
mov ax,dx
//shr dx,8
//sub ax,dx
shr ax,2
//cmp ax,MaxShad
//ja iii
or ax,63
sub ax,63
iii:
mov [ecx],ax
add ecx,2
dec bl
jnz lab3
add ecx,512
sub ecx,msx
sub ecx,msx
mov bl,byte ptr msx
dec bh
jnz lab3
jmp ProcessFinished
Process1:
xor ebx,ebx
mov bl,byte ptr msx
mov bh,byte ptr msy
mov ecx,offset fmap
add ecx,ebx
add ecx,ebx
//add ecx,514
lab4: mov dx,[ecx-512]
add dx,[ecx+512]
add dx,[ecx-2]
add dx,[ecx+2]
mov ax,dx
//shr dx,8
//sub ax,dx
shr ax,2
//cmp ax,MaxShad
//ja ioo
or ax,63
sub ax,63
ioo:
mov [ecx],ax
sub ecx,2
dec bl
jnz lab4
sub ecx,512
add ecx,msx
add ecx,msx
mov bl,byte ptr msx
dec bh
jnz lab3
ProcessFinished:
};
};
void LoadFog(){
ResFile fx=RReset("darkb.grd");//004g.grd");
RBlockRead(fx,&fog[1024],8192);
memcpy(&fog[0],&fog[1024],256);
memcpy(&fog[256],&fog[1024],256);
memcpy(&fog[512],&fog[1024],256);
memcpy(&fog[512+256],&fog[1024],256);
RClose(fx);
//fx=RReset("003xw.grd");
fx=RReset("darkw.grd");//003cm.grd");
RBlockRead(fx,&wfog,8192);
RClose(fx);
fx=RReset("003xr.grd");
RBlockRead(fx,&yfog,8192);
RClose(fx);
fx=RReset("003xr1.grd");
RBlockRead(fx,&rfog,8192);
RClose(fx);
fx=RReset("darkfog.grd");
RBlockRead(fx,&darkfog,40960);
RClose(fx);
};
#define Shifter 7
void ShowFoggedBattle2(){
byte sx=smaplx;
byte sy=4;
int StOff=smapy*SCRSizeX+smapx;
int Addv1=(SCRSizeX<<1)-64;
int Addv2=(SCRSizeX<<6);
int Addv3=-(smaplx<<5)+(SCRSizeX<<6)-32;
word MinShad=(MaxShad-(32<<Shifter));
word tmp;
int adds=int(ScreenPtr);
int addr=int(ScreenPtr);
int fad=int(fog)+1024;
int ADDX=1;
int ADDY=SCRSizeX;
__asm{
xor ebx,ebx
cld
mov al,byte ptr mapx
mov ah,byte ptr mapy
mov esi,StOff
mov edi,esi
add esi,adds
add edi,addr
lab0: add esi,ADDX
add edi,ADDX
neg ADDX
mov tmp,ax
mov bx,ax
shl ebx,1
mov bx,[fmap+ebx]
and ebx,0xFFFF
cmp bx,MaxShad
jae FullColor
cmp bx,MinShad
jbe AbsBlack
sub bx,MaxShad
neg bx
shr bx,Shifter
mov bh,bl
xor bl,bl
//Shadowed image
add ebx,fad
mov cl,32
mov ch,32
xor eax,eax
SI_1: xor eax,eax
lodsb
inc esi
add eax,ebx
mov al,[eax]
stosb
inc edi
dec cl
jnz SI_1
add esi,Addv1
add edi,Addv1
mov cl,32
dec ch
jnz SI_1
jmp Next_slide
FullColor:
add esi,32
add edi,32
sub esi,Addv2
sub edi,Addv2
xor ecx,ecx
/* mov cx,32
FC_1: movsd
movsd
movsd
movsd
movsd
movsd
movsd
movsd
add esi,Addv1
add edi,Addv1
loop FC_1
*/
jmp Next_slide
AbsBlack:
xor ecx,ecx
mov cx,32
xor eax,eax
AB_1: stosd
stosd
stosd
stosd
stosd
stosd
stosd
stosd
add edi,Addv1
add esi,SCRSizeX
loop AB_1
Next_slide:
add esi,Addv2
add edi,Addv2
mov ax,tmp
inc al
dec sx
jnz lab0
add edi,Addv3
add esi,Addv3
add esi,ADDY
add edi,ADDY
neg ADDY
mov al,byte ptr smaplx
mov sx,al
mov ax,tmp
mov al,byte ptr mapx
inc ah
dec sy
jnz lab0
};
};
static byte BFog[64][64];
void SetScreenFog16x16(){
smaplx++;
smaply++;
int fofs=int(fmap)+((((mapy-1)<<8)+(mapx-1))<<1);
int Saddy=(256-smaplx)<<1;
int Daddy=(64-smaplx)<<1;
word MinShad=(MaxShad-(32<<Shifter));
//filling
__asm{
push esi
push edi
mov cl,byte ptr smaplx
mov ch,byte ptr smaply
mov esi,fofs
mov edi,offset BFog+64+2
cld
LP1: lodsw
cmp ax,MaxShad
jae FullColor
cmp ax,MinShad
jbe AbsBlack
sub ax,MaxShad
neg ax
shr ax,Shifter
jmp asgn1
AbsBlack:
mov ax,32
jmp asgn1
FullColor:
xor ax,ax
asgn1: mov ah,al
mov [edi],ax
mov [edi+64],ax
add edi,2
dec cl
jnz LP1
mov cl,byte ptr smaplx
add esi,Saddy
add edi,Daddy
dec ch
jnz LP1
//set colors at the edges
/*mov esi,offset BFog+64+2
mov edi,offset BFog+2
mov ecx,smaplx
rep movsw
mov esi,smaply
shl esi,6
add esi,2+offset BFog
mov edi,esi
add edi,64
mov ecx,smaplx
rep movsw
mov esi,offset BFog+64
mov edi,offset BFog+65
mov ecx,smaply
shl ecx,1
cyc1: movsb
add esi,63
add edi,63
loop cyc1
mov esi,offset BFog+64+2
add esi,smaplx
add esi,smaplx
mov edi,esi
inc edi
mov ecx,smaply
shl ecx,1
cyc2: movsb
add esi,63
add edi,63
loop cyc2*/
pop edi
pop esi
};
smaplx--;
smaply--;
};
void ProcessScreenFog16x16(){
smaplx++;
smaply++;
int ads=64-(smaplx<<1);
__asm{
push esi
mov esi,offset BFog+64+2
mov ch,byte ptr smaply
shl ch,1
gt0: mov cl,byte ptr smaplx
gt1: mov ax,[esi-1]
add ax,[esi+1]
add ax,[esi-64]
add ax,[esi+64]
shr ax,2
and ax,0x1F1F
mov [esi],ax
add esi,2
dec cl
jnz gt1
add esi,ads
dec ch
jnz gt0
pop esi
};
smaplx--;
smaply--;
};
void ShowScreenFog16x16(){
SetScreenFog16x16();
ProcessScreenFog16x16();
smaplx++;
smaply++;
byte ssx=(smaplx)<<1;
byte sx=ssx;
byte sy=(smaply)<<1;
int StOff=smapy*SCRSizeX+smapx;
int Addv1=SCRSizeX-16;
int Addv2=16-SCRSizeX*16;
int Addv3=-ssx*16+SCRSizeX*16;
int Addv4=(SCRSizeX<<4);
word MinShad=(MaxShad-(32<<Shifter));
word tmp;
int adds=int(ScreenPtr)+(smapx-16)+(smapy-16)*SCRSizeX;
int addf=64-((smaplx)<<1);
int fad=int(BFog)+64+2;
int uuu;
__asm{
push esi
push edi
mov esi,fad
mov edi,adds
cld
sfg1: xor ebx,ebx
mov bh,[esi]
inc esi
or bh,bh
jz EmptyBar
cmp bh,28
jae BlackBar
add ebx,offset fog+1024
mov ecx,16
xor eax,eax
mov edx,16
mov uuu,0
sfg2: mov al,[edi]
mov al,[ebx+eax]
mov [edi],al
inc edi
loop sfg2
add edi,Addv1
xor uuu,1
jz uuu_L1
add edi,6
jmp uuu_L2
uuu_L1: sub edi,6
uuu_L2: mov ecx,16
dec edx
jnz sfg2
//sub edi,4
jmp NextStep
BlackBar:
xor eax,eax
mov ecx,16
mov edx,12
sfg3: stosd
stosd
stosd
stosd
add edi,Addv1
add edi,edx
sub edi,6
xor edx,12
loop sfg3
jmp NextStep
EmptyBar:
add edi,16
jmp sfg4
NextStep:
add edi,Addv2
sfg4: dec sx
jnz sfg1
mov al,ssx
mov sx,al
add edi,Addv3
add esi,addf
dec sy
jnz sfg1
pop edi
pop esi
};
smaplx--;
smaply--;
};
void ShowScreenFog16x16_Best(){
SetScreenFog16x16();
ProcessScreenFog16x16();
byte ssx=smaplx<<1;
byte sx=ssx;
byte sy=smaply<<1;
int StOff=(smapy-16)*SCRSizeX+smapx-16;
int Addv1=SCRSizeX-16;
int Addv2=16-SCRSizeX*16;
int Addv3=-ssx*16+SCRSizeX*16;
int Addv4=(SCRSizeX<<4);
word MinShad=(MaxShad-(32<<Shifter));
word tmp;
int adds=int(ScreenPtr)+(smapx-16)+(smapy-16)*SCRSizeX;
int addf=64-(smaplx<<1);
int fad=int(BFog)+64+2;
int uuu,zzz;
__asm{
push esi
push edi
mov esi,fad
mov edi,adds
cld
sfg1: xor ebx,ebx
mov bh,[esi]
inc esi
or bh,bh
jz EmptyBar
cmp bh,23
jae BlackBar
add ebx,offset fog
mov ecx,16
xor eax,eax
mov edx,16
mov uuu,0
//mov zzz,ebp
mov zzz,1024*10
sfg2: mov al,[edi]
mov al,[ebx+eax]
mov [edi],al
inc edi
add edi,zzz
sub edi,1024*5
xor zzz,1024*10
loop sfg2
add edi,Addv1
xor uuu,1
jz uuu_L1
add edi,5
jmp uuu_L2
uuu_L1: sub edi,5
uuu_L2: mov ecx,16
dec edx
jnz sfg2
//mov ebp,zzz
//sub edi,4
jmp NextStep
BlackBar:
xor eax,eax
mov ecx,16
mov edx,12
sfg3: stosd
stosd
stosd
stosd
add edi,Addv1
add edi,edx
sub edi,6
xor edx,12
loop sfg3
cmp byte ptr [esi-65],23
jae NextStep
xor eax,eax
mov ecx,6
mov edx,12
sfg3_1: stosd
stosd
stosd
stosd
add edi,Addv1
add edi,edx
sub edi,6
xor edx,12
loop sfg3_1
sub edi,6*1024
add edi,16
jmp NextStep
EmptyBar:
add edi,16
jmp sfg4
NextStep:
add edi,Addv2
sfg4: dec sx
jnz sfg1
mov al,ssx
mov sx,al
add edi,Addv3
add esi,addf
dec sy
jnz sfg1
pop edi
pop esi
};
};
void ShowFoggedBattle(){
ShowSuperFog();
return;
ShowScreenFog16x16();
return;
byte sx=smaplx;
byte sy=smaply;
int StOff=smapy*SCRSizeX+smapx;
int Addv1=SCRSizeX-32;
int Addv2=32-SCRSizeX*32;
int Addv3=-smaplx*32+SCRSizeX*32;
word MinShad=(MaxShad-(32<<Shifter));
word tmp;
int adds=int(ScreenPtr);
int addr=int(ScreenPtr);
int fad=int(fog);
__asm{
cld
mov al,byte ptr mapx
mov ah,byte ptr mapy
mov esi,StOff
mov edi,esi
add esi,adds
add edi,addr
lab0: xor ebx,ebx
mov tmp,ax
mov bx,ax
shl ebx,1
mov bx,[fmap+ebx]
and ebx,0xFFFF
cmp bx,MaxShad
jae FullColor
cmp bx,MinShad
jbe AbsBlack
sub bx,MaxShad
neg bx
shr bx,Shifter
mov bh,bl
xor bl,bl
//Shadowed image
add ebx,fad
mov cl,32
mov ch,32
xor eax,eax
SI_1: xor eax,eax
lodsb
add eax,ebx
mov al,[eax]
stosb
dec cl
jnz SI_1
add esi,Addv1
add edi,Addv1
mov cl,32
dec ch
jnz SI_1
jmp Next_slide
FullColor:
add esi,32
add edi,32
sub esi,Addv2
sub edi,Addv2
xor ecx,ecx
/* mov cx,32
FC_1: movsd
movsd
movsd
movsd
movsd
movsd
movsd
movsd
add esi,Addv1
add edi,Addv1
loop FC_1
*/
jmp Next_slide
AbsBlack:
xor ecx,ecx
mov cx,32
xor eax,eax
AB_1: stosd
stosd
stosd
stosd
stosd
stosd
stosd
stosd
add edi,Addv1
add esi,SCRSizeX
loop AB_1
Next_slide:
add esi,Addv2
add edi,Addv2
mov ax,tmp
inc al
dec sx
jnz lab0
add edi,Addv3
add esi,Addv3
mov al,byte ptr smaplx
mov sx,al
mov ax,tmp
mov al,byte ptr mapx
inc ah
dec sy
jnz lab0
};
};
void ShowFoggedBattle1(){
byte sx=smaplx;
byte sy=smaply;
int StOff=smapy*SCRSizeX+smapx;
int Addv1=SCRSizeX-32;
int Addv2=32-SCRSizeX*32;
int Addv3=-smaplx*32+SCRSizeX*32;
word MinShad=(MaxShad-(32<<Shifter));
word tmp;
int adds=int(ScreenPtr);
int addr=int(ScreenPtr);
int fad=int(fog);
__asm{
cld
mov al,byte ptr mapx
mov ah,byte ptr mapy
mov esi,StOff
mov edi,esi
add esi,adds
add edi,addr
lab0: xor ebx,ebx
mov tmp,ax
mov bx,ax
shl ebx,1
mov bx,[fmap+ebx]
cmp bx,MaxShad
jae FullColor
cmp bx,MinShad
jbe AbsBlack
sub bx,MaxShad
neg bx
shr bx,Shifter
mov bh,bl
xor bl,bl
//Shadowed image
add ebx,fad
mov cl,32
mov ch,32
xor eax,eax
SI_1: xor eax,eax
lodsb
add eax,ebx
mov al,[eax]
stosb
dec cl
jnz SI_1
add esi,Addv1
add edi,Addv1
mov cl,32
dec ch
jnz SI_1
jmp Next_slide
FullColor:
add esi,32
add edi,32
sub esi,Addv2
sub edi,Addv2
xor ecx,ecx
/* mov cx,32
FC_1: movsd
movsd
movsd
movsd
movsd
movsd
movsd
movsd
add esi,Addv1
add edi,Addv1
loop FC_1
*/
jmp Next_slide
AbsBlack:
xor ecx,ecx
mov cx,32
xor eax,eax
AB_1: stosd
stosd
stosd
stosd
stosd
stosd
stosd
stosd
add edi,Addv1
add esi,SCRSizeX
loop AB_1
Next_slide:
add esi,Addv2
add edi,Addv2
mov ax,tmp
inc al
dec sx
jnz lab0
add edi,Addv3
add esi,Addv3
mov al,byte ptr smaplx
mov sx,al
mov ax,tmp
mov al,byte ptr mapx
inc ah
dec sy
jnz lab0
};
};
void AcceptMiniMap1(){
word MinShad=(MaxShad-(32<<Shifter));
int ofs=minix+miniy*SCRSizeX;
int lx=msx;
int ly=msy;
int addOf=SCRSizeX-lx;
__asm{
push esi
push edi
mov edi,ScreenPtr
add edi,ofs
mov ecx,0101h
cld
mov eax,lx
yyy: mov edx,ecx
shl edx,1
cmp word ptr[edx+fmap],512
ja uuu
mov byte ptr [edi],0
uuu: inc edi
inc cl
dec eax
jnz yyy
mov eax,lx
add edi,addOf
inc ch
mov cl,1
dec ly
jnz yyy
};
};
void AcceptMiniMap(){
word MinShad=(MaxShad-(32<<Shifter));
int ofs=minix+miniy*SCRSizeX;
int lx=msx>>1;
int ly=msy>>1;
int addOf=SCRSizeX-lx;
__asm{
push esi
push edi
mov edi,ScreenPtr
add edi,ofs
mov ecx,0101h
cld
mov eax,lx
yyy: mov edx,ecx
shl edx,1
cmp word ptr[edx+fmap],512
ja uuu
mov byte ptr [edi],0
uuu: inc edi
add cl,2
dec eax
jnz yyy
mov eax,lx
add edi,addOf
add ch,2
mov cl,1
dec ly
jnz yyy
};
};
#define zmin 0
#define zmax 32
void ShowFluentFog(int x,int y,int z1,int z2,int z3,int z4){
//return;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1<=zmin&&z2<=zmin&&z3<=zmin&&z4<=zmin)return;
if(z1>=zmax&&z2>=zmax&&z3>=zmax&&z4>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
shr ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
shr ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
shr ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2020
mov bx,word ptr a //bh=fogging value
add bx,256*4
mov dx,word ptr b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov word ptr p,bx
qqw1: mov ax,bx
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
inc esi
add bx,dx
dec cl
jnz qqw1
add esi,adds
add dx,word ptr d
mov bx,word ptr p
add bx,word ptr c
mov cl,32
mov word ptr p,bx
dec ch
jnz qqw1
pop esi
pop edi
};
};
};
void ShowSuperFluentFog(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2020
mov ebx,a //bh=fogging value
add ebx,256*256*3
mov edx,b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov p,ebx
qqw1: mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
inc esi
add ebx,edx
dec cl
jnz qqw1
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,32
mov p,ebx
dec ch
jnz qqw1
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog2(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2020
mov ebx,a //bh=fogging value
add ebx,256*256*3
mov edx,b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov p,ebx
qqw1: mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
inc esi
add ebx,edx
dec cl
jnz qqw1
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,32
mov p,ebx
dec ch
jnz qqw1
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog8(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2004
mov ebx,a //bh=fogging value
add ebx,256*256*3
mov edx,b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov p,ebx
qqw1: mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[fog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[fog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[fog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[fog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[fog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[fog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[fog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
dec cl
jnz qqw1
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,4
mov p,ebx
dec ch
jnz qqw1
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog32w(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
int cc=32;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2004
mov ebx,a //bh=fogging value
add ebx,256*256*3
mov edx,b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov p,ebx
qqw1: mov eax,ebx
shr eax,8
mov al,[esi]
mov cl,[fog+eax]
//mov cl,al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov ch,[fog+eax]
mov [esi],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov cl,[fog+eax]
//mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov ch,[fog+eax]
mov [esi+2],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov cl,[fog+eax]
//mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov ch,[fog+eax]
mov [esi+4],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov cl,[fog+eax]
//mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov ch,[fog+eax]
mov [esi+6],al
//add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+8]
mov cl,[fog+eax]
//mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+9]
mov ch,[fog+eax]
mov [esi+8],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+10]
mov cl,[fog+eax]
//mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+11]
mov ch,[fog+eax]
mov [esi+10],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+12]
mov cl,[fog+eax]
//mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+13]
mov ch,[fog+eax]
mov [esi+12],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+14]
mov cl,[fog+eax]
//mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+15]
mov ch,[fog+eax]
mov [esi+14],al
add esi,8
add ebx,edx
mov eax,ebx
//shr eax,8
mov al,[esi+16]
mov cl,[fog+eax]
//mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+17]
mov ch,[fog+eax]
mov [esi+16],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+18]
mov cl,[fog+eax]
//mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+19]
mov ch,[fog+eax]
mov [esi+18],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+20]
mov cl,[fog+eax]
//mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+21]
mov ch,[fog+eax]
mov [esi+20],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+22]
mov cl,[fog+eax]
//mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+23]
mov ch,[fog+eax]
mov [esi+22],cx
add esi,8
add ebx,edx
mov eax,ebx
//shr eax,8
mov al,[esi+24]
mov cl,[fog+eax]
//mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+25]
mov ch,[fog+eax]
mov [esi+24],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+26]
mov cl,[fog+eax]
//mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+27]
mov ch,[fog+eax]
mov [esi+26],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+28]
mov cl,[fog+eax]
//mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+29]
mov ch,[fog+eax]
mov [esi+28],cx
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+30]
mov cl,[fog+eax]
//mov [esi+36],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+31]
mov ch,[fog+eax]
mov [esi+30],cx
add esi,32
add ebx,edx
//jnz qqw1
add esi,adds
add edx,d
mov ebx,p
add ebx,c
//mov cl,4
mov p,ebx
dec cc
jnz qqw1
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog32(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2004
mov ebx,a //bh=fogging value
add ebx,256*256*3
mov edx,b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov p,ebx
qqw1: mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[fog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[fog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[fog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[fog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[fog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[fog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[fog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[fog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[fog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[fog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[fog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[fog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[fog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[fog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[fog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[fog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[fog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[fog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[fog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[fog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[fog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[fog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[fog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[fog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[fog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[fog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[fog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[fog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[fog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
//jnz qqw1
add esi,adds
add edx,d
mov ebx,p
add ebx,c
//mov cl,4
mov p,ebx
dec ch
jnz qqw1
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog2_2old(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
static int xebp;;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2010
mov ebx,a //bh=fogging value
add ebx,256*256*3
//mov edx,b
xor eax,eax
mov esi,scrof
mov p,ebx
mov xebp,ebp
mov ebp,b
qqw1: mov eax,ebx
shr eax,8
mov al,[esi]
mov dl,[fog+eax]
//inc esi
add ebx,ebp
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov dh,[fog+eax]
mov [esi],dx
add esi,2
add ebx,ebp
dec cl
jnz qqw1
mov edx,ebp
mov ebp,xebp
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,16
mov p,ebx
mov ebp,edx
dec ch
jnz qqw1
mov ebp,xebp
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog2_2(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
static int xebp;;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x1010
mov ebx,a //bh=fogging value
//add ebx,256*256*3
//mov edx,b
xor eax,eax
mov esi,scrof
mov p,ebx
mov xebp,ebp
mov ebp,b
qqw1: mov eax,ebx
//add eax,1632768
shr eax,8
mov al,[esi]
mov dl,[fog+eax]
//inc esi
add ebx,ebp
mov eax,ebx
add eax,16384
shr eax,8
mov al,[esi+1]
mov dh,[fog+eax]
mov [esi],dx
add esi,2
add ebx,ebp
dec cl
jnz qqw1
mov edx,ebp
mov ebp,xebp
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,16
mov p,ebx
mov ebp,edx
qqw2:
mov eax,ebx
add eax,32768
shr eax,8
mov al,[esi]
mov dl,[fog+eax]
//inc esi
add ebx,ebp
mov eax,ebx
add eax,48796
shr eax,8
mov al,[esi+1]
mov dh,[fog+eax]
mov [esi],dx
add esi,2
add ebx,ebp
dec cl
jnz qqw2
mov edx,ebp
mov ebp,xebp
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,16
mov p,ebx
mov ebp,edx
dec ch
jnz qqw1
mov ebp,xebp
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog2_2_16(int x,int y,int z1x,int z2x,int z3x,int z4x){
//return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-16;
if(z1x<=zmin&&z2x<=zmin&&z3x<=zmin&&z4x<=zmin)return;
if(z1x>=zmax&&z2x>=zmax&&z3x>=zmax&&z4x>=zmax){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,16
xor eax,eax
cld
iug: mov ecx,4
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
static int xebp;;
__asm{
push edi
push esi
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,4
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,4
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,8
mov d,ecx
//coefficients are now calculated
mov ecx,0x0808
mov ebx,a //bh=fogging value
//add ebx,256*256*3
//mov edx,b
xor eax,eax
mov esi,scrof
mov p,ebx
mov xebp,ebp
mov ebp,b
qqw1: mov eax,ebx
//add eax,1632768
sar eax,8
mov al,[esi]
mov dl,[fog+eax]
//inc esi
add ebx,ebp
mov eax,ebx
add eax,16384
shr eax,8
mov al,[esi+1]
mov dh,[fog+eax]
mov [esi],dx
add esi,2
add ebx,ebp
dec cl
jnz qqw1
mov edx,ebp
mov ebp,xebp
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,8
mov p,ebx
mov ebp,edx
qqw2:
mov eax,ebx
add eax,32768
shr eax,8
mov al,[esi]
mov dl,[fog+eax]
//inc esi
add ebx,ebp
mov eax,ebx
add eax,48796
shr eax,8
mov al,[esi+1]
mov dh,[fog+eax]
mov [esi],dx
add esi,2
add ebx,ebp
dec cl
jnz qqw2
mov edx,ebp
mov ebp,xebp
add esi,adds
add edx,d
mov ebx,p
add ebx,c
mov cl,8
mov p,ebx
mov ebp,edx
dec ch
jnz qqw1
mov ebp,xebp
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
};
};
void ShowSuperFluentFog32_160(int x,int y,int z1x,int z2x,int z3x,int z4x){
if(MiniMode)return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-32;
if(z1x<=63&&z2x<=63&&z3x<=63&&z4x<=63)return;
if(z1x>=96&&z2x>=96&&z3x>=96&&z4x>=96){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,32
xor eax,eax
cld
iug: mov ecx,8
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
__asm{
push edi
push esi
pushf
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,5
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,5
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,10
mov d,ecx
//coefficients are now calculated
mov ecx,0x2004
mov ebx,a //bh=fogging value
//add ebx,256*256*3
mov edx,b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov p,ebx
qqw1: mov eax,ebx
sar eax,8
mov al,[esi]
mov al,[darkfog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
sar eax,8
mov al,[esi+1]
mov al,[darkfog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
sar eax,8
mov al,[esi+2]
mov al,[darkfog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
sar eax,8
mov al,[esi+3]
mov al,[darkfog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[darkfog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[darkfog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[darkfog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[darkfog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[darkfog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[darkfog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[darkfog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[darkfog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[darkfog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[darkfog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[darkfog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[darkfog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[darkfog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[darkfog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[darkfog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[darkfog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[darkfog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[darkfog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[darkfog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[darkfog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[darkfog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[darkfog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[darkfog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[darkfog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[darkfog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[darkfog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[darkfog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[darkfog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
//jnz qqw1
add esi,adds
add edx,d
mov ebx,p
add ebx,c
//mov cl,4
mov p,ebx
dec ch
jnz qqw1
popf
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
//Xbar(x,y,32,32,clrGreen);
};
};
void ShowSuperFluentFog16_160(int x,int y,int z1x,int z2x,int z3x,int z4x){
// if(MiniMode)return;
int z1=z1x<<16;
int z2=z2x<<16;
int z3=z3x<<16;
int z4=z4x<<16;
int scrof=int(ScreenPtr)+x+y*SCRSizeX;
int adds=SCRSizeX-16;
if(z1x<=63&&z2x<=63&&z3x<=63&&z4x<=63)return;
if(z1x>=96&&z2x>=96&&z3x>=96&&z4x>=96){
__asm{
push edi
mov ebx,adds
mov edi,scrof
mov dl,16
xor eax,eax
cld
iug: mov ecx,4
rep stosd
add edi,ebx
dec dl
jnz iug
pop edi
};
return;
}else{
int a,b,c,d,p,q,r;
__asm{
push edi
push esi
pushf
mov eax,z1
mov ebx,eax
//shl ebx,8
mov a,ebx
mov ecx,z2
sub ecx,eax
sar ecx,4
mov b,ecx
mov ecx,z3
sub ecx,eax
sar ecx,4
mov c,ecx
mov ecx,z4
add ecx,z1
sub ecx,z2
sub ecx,z3
sar ecx,8
mov d,ecx
//coefficients are now calculated
mov ecx,0x1002
mov ebx,a //bh=fogging value
//add ebx,256*256*3
mov edx,b //dx=fog incrementor
xor eax,eax
mov esi,scrof
mov p,ebx
qqw1: mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[darkfog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[darkfog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[darkfog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[darkfog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[darkfog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[darkfog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[darkfog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[darkfog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi]
mov al,[darkfog+eax]
mov [esi],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+1]
mov al,[darkfog+eax]
mov [esi+1],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+2]
mov al,[darkfog+eax]
mov [esi+2],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+3]
mov al,[darkfog+eax]
mov [esi+3],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+4]
mov al,[darkfog+eax]
mov [esi+4],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+5]
mov al,[darkfog+eax]
mov [esi+5],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+6]
mov al,[darkfog+eax]
mov [esi+6],al
//inc esi
add ebx,edx
mov eax,ebx
shr eax,8
mov al,[esi+7]
mov al,[darkfog+eax]
mov [esi+7],al
add esi,8
add ebx,edx
//jnz qqw1
add esi,adds
add edx,d
mov ebx,p
add ebx,c
//mov cl,4
mov p,ebx
dec ch
jnz qqw1
popf
pop esi
pop edi
};
//Xbar(x+12,y+12,8,8,clrGreen);
//Xbar(x,y,32,32,clrGreen);
};
};
#define shf 2500
#define fmin 3096
byte fden[8192];
void makeFden(){
for(int i=0;i<8192;i++){
if(i>shf)fden[i]=158;
else fden[i]=5+div(i*153,shf).quot;
};
};
int GetF(word k){
if(k>=fmin)return 5;
return fden[fmin-k];
};
void ShowSuperFog(){
//return;
for(int i=0;i<smaplx;i++)
for(int j=0;j<smaply;j++){
word* fm=&fmap[mapy+j-1][mapx+i-1];
ShowSuperFluentFog32_160(smapx+(i<<5),smapy+(j<<5),
GetF(fm[0]),GetF(fm[1]),GetF(fm[256]),GetF(fm[257]));
};
};
void miniShowSuperFog(){
//return;
for(int i=0;i<smaplx;i++)
for(int j=0;j<smaply;j++){
word* fm=&fmap[mapy+j-1][mapx+i-1];
ShowSuperFluentFog16_160(smapx+(i<<4),smapy+(j<<4),
GetF(fm[0]),GetF(fm[1]),GetF(fm[256]),GetF(fm[257]));
};
};
void TurnFogOn(){
FogMode=1;
};
void TurnFogOff(){
FogMode=0;
};