#include #include #include #include #include #include #include "..\dis\dis.h" extern int face[]; extern int bpmin,bpmax; extern char *bgpic; extern int rotsin,rotcos; extern int rows[]; extern long depthtable1[]; extern long depthtable2[]; extern long depthtable3[]; extern long depthtable4[]; extern int dotnum; extern void drawdots(void); char far *vram=(char far *)0xa0000000L; char pal[768]; char pal2[768]; extern sin1024[]; int isin(int deg) { return(sin1024[deg&1023]); } int icos(int deg) { return(sin1024[(deg+256)&1023]); } extern struct { int x; int y; int z; int old1; int old2; int old3; int old4; int yadd; } dot[]; extern int gravity; extern int gravitybottom; extern int gravityd; void setborder(int color) { _asm { mov dx,3dah in al,dx mov dx,3c0h mov al,11h+32 out dx,al mov al,color out dx,al } } int cols[]={ 0,0,0, 4,25,30, 8,40,45, 16,55,60}; int dottaul[1024]; main(int argc,char *argv[]) { int timer=30000; int dropper,repeat; int frame=0; int rota=-1*64; int fb=0; int rot=0,rots=0; int a,b,c,d,i,j,mode; int grav,gravd; int f=0; dis_partstart(); dotnum=512; for(a=0;a15) c=15; c=15-c; depthtable1[a]=0x202+0x04040404*c; depthtable2[a]=0x02030302+0x04040404*c; depthtable3[a]=0x202+0x04040404*c; //depthtable4[a]=0x02020302+0x04040404*c; } bgpic=halloc(64000L,1L); memcpy(bgpic,vram,64000); a=0; for(b=64;b>=0;b--) { for(c=0;c<768;c++) { a=pal[c]-b; if(a<0) a=0; pal2[c]=a; } dis_waitb(); dis_waitb(); outp(0x3c8,0); for(c=0;c<768;c++) outp(0x3c9,pal2[c]); } while(!dis_exit() && frame<2450) { //setborder(0); repeat=dis_waitb(); if(frame>2300) setpalette(pal2); //setborder(1); if(dis_indemo()) { a=dis_musplus(); if(a>-4 && a<0) break; } while(repeat--) { frame++; if(frame==500) f=0; i=dottaul[j]; j++; j%=dotnum; if(frame<500) { dot[i].x=isin(f*11)*40; dot[i].y=icos(f*13)*10-dropper; dot[i].z=isin(f*17)*40; dot[i].yadd=0; } else if(frame<900) { dot[i].x=icos(f*15)*55; dot[i].y=dropper; dot[i].z=isin(f*15)*55; dot[i].yadd=-260; } else if(frame<1700) { a=sin1024[frame&1023]/8; dot[i].x=icos(f*66)*a; dot[i].y=8000; dot[i].z=isin(f*66)*a; dot[i].yadd=-300; } else if(frame<2360) { /* a=rand()/128+32; dot[i].y=8000-a*80; b=rand()&1023; a+=rand()&31; dot[i].x=sin1024[b]*a/3+(a-50)*7; dot[i].z=sin1024[(b+256)&1023]*a/3+(a-40)*7; dot[i].yadd=300; if(frame>1640 && !(frame&31) && grav>-2) grav--; */ dot[i].x=rand()-16384; dot[i].y=8000-rand()/2; dot[i].z=rand()-16384; dot[i].yadd=0; if(frame>1900 && !(frame&31) && grav>0) grav--; } else if(frame<2400) { a=frame-2360; for(b=0;b<768;b+=3) { c=pal[b+0]+a*3; if(c>63) c=63; pal2[b+0]=c; c=pal[b+1]+a*3; if(c>63) c=63; pal2[b+1]=c; c=pal[b+2]+a*4; if(c>63) c=63; pal2[b+2]=c; } } else if(frame<2440) { a=frame-2400; for(b=0;b<768;b+=3) { c=63-a*2; if(c<0) c=0; pal2[b+0]=c; pal2[b+1]=c; pal2[b+2]=c; } } if(dropper>4000) dropper-=100; rotcos=icos(rot)*64; rotsin=isin(rot)*64; rots+=2; if(frame>1900) { rot+=rota/64; rota--; } else rot=isin(rots); f++; gravity=grav; gravityd=gravd; } drawdots(); } if(!dis_indemo()) { _asm mov ax,3h _asm int 10h } return(0); }