]> 4ch.mooo.com Git - plz.git/blob - dots/dots.c
dots for a simple port but damn it!
[plz.git] / dots / dots.c
1 #include <stdio.h>\r
2 #include <string.h>\r
3 #include <stdlib.h>\r
4 #include <conio.h>\r
5 #include <malloc.h>\r
6 #include <math.h>\r
7 #include "../dis/dis.h"\r
8 \r
9 extern int face[];\r
10 \r
11 extern int bpmin,bpmax;\r
12 \r
13 extern char *bgpic;\r
14 extern int rotsin,rotcos;\r
15 extern int rows[];\r
16 extern long depthtable1[];\r
17 extern long depthtable2[];\r
18 extern long depthtable3[];\r
19 extern long depthtable4[];\r
20 \r
21 extern int dotnum;\r
22 \r
23 extern void drawdots(void);\r
24 \r
25 char far *vram=(char far *)0xa0000000L;\r
26 \r
27 char    pal[768];\r
28 char    pal2[768];\r
29 \r
30 extern sin1024[];\r
31 \r
32 int     isin(int deg)\r
33 {\r
34         return(sin1024[deg&1023]);\r
35 }\r
36 \r
37 int     icos(int deg)\r
38 {\r
39         return(sin1024[(deg+256)&1023]);\r
40 }\r
41 \r
42 extern struct\r
43 {\r
44         int     x;\r
45         int     y;\r
46         int     z;\r
47         int     old1;\r
48         int     old2;\r
49         int     old3;\r
50         int     old4;\r
51         int     yadd;\r
52 } dot[];\r
53 \r
54 extern int gravity;\r
55 extern int gravitybottom;\r
56 extern int gravityd;\r
57 \r
58 void setborder(unsigned char color)\r
59 {\r
60         _asm\r
61         {\r
62                 mov     dx,3dah\r
63                 in      al,dx\r
64                 mov     dx,3c0h\r
65                 mov     al,11h+32\r
66                 out     dx,al\r
67                 mov     al,color\r
68                 out     dx,al\r
69         }\r
70 }\r
71 \r
72 int     cols[]={\r
73 0,0,0,\r
74 4,25,30,\r
75 8,40,45,\r
76 16,55,60};\r
77 int     dottaul[1024];\r
78 \r
79 int main(int argc,char *argv[])\r
80 {\r
81         int     timer=30000;\r
82         int     dropper,repeat;\r
83         int     frame=0;\r
84         int     rota=-1*64;\r
85         int     fb=0;\r
86         int     rot=0,rots=0;\r
87         int     a,b,c,d,i,j,mode;\r
88         int     grav,gravd;\r
89         int     f=0;\r
90         dis_partstart();\r
91         dotnum=512;\r
92         for(a=0;a<dotnum;a++)  dottaul[a]=a;\r
93         for(a=0;a<500;a++)\r
94         {\r
95                 b=rand()%dotnum;\r
96                 c=rand()%dotnum;\r
97                 d=dottaul[b];\r
98                 dottaul[b]=dottaul[c];\r
99                 dottaul[c]=d;\r
100         }\r
101         {\r
102                 dropper=22000;\r
103                 for(a=0;a<dotnum;a++)\r
104                 {\r
105                         dot[a].x=0;\r
106                         dot[a].y=2560-dropper;\r
107                         dot[a].z=0;\r
108                         dot[a].yadd=0;\r
109                 }\r
110                 mode=7;\r
111                 grav=3;\r
112                 gravd=13;\r
113                 gravitybottom=8105;\r
114                 i=-1;\r
115         }\r
116         for(a=0;a<500;a++)\r
117         { // scramble\r
118                 b=rand()%dotnum;\r
119                 c=rand()%dotnum;\r
120                 d=dot[b].x; dot[b].x=dot[c].x; dot[c].x=d;\r
121                 d=dot[b].y; dot[b].y=dot[c].y; dot[c].y=d;\r
122                 d=dot[b].z; dot[b].z=dot[c].z; dot[c].z=d;\r
123         }\r
124         for(a=0;a<200;a++) rows[a]=a*320;\r
125         _asm mov ax,13h\r
126         _asm int 10h\r
127         outp(0x3c8,0);\r
128         for(a=0;a<16;a++) for(b=0;b<4;b++)\r
129         {\r
130                 c=100+a*9;\r
131                 outp(0x3c9,cols[b*3+0]);\r
132                 outp(0x3c9,cols[b*3+1]*c/256);\r
133                 outp(0x3c9,cols[b*3+2]*c/256);\r
134         }\r
135         outp(0x3c8,255);\r
136         outp(0x3c9,31);\r
137         outp(0x3c9,0);\r
138         outp(0x3c9,15);\r
139         outp(0x3c8,64);\r
140         for(a=0;a<100;a++)\r
141         {\r
142                 c=64-256/(a+4);\r
143                 c=c*c/64;\r
144                 outp(0x3c9,c/4);\r
145                 outp(0x3c9,c/4);\r
146                 outp(0x3c9,c/4);\r
147         }\r
148         outp(0x3c7,0);\r
149         for(a=0;a<768;a++) pal[a]=inp(0x3c9);\r
150         outp(0x3c8,0);\r
151         for(a=0;a<768;a++) outp(0x3c9,0);\r
152         for(a=0;a<100;a++)\r
153         {\r
154                 memset(vram+(100+a)*320,a+64,320);\r
155         }\r
156         for(a=0;a<128;a++)\r
157         {\r
158                 c=a-(43+20)/2;\r
159                 c=c*3/4;\r
160                 c+=8;\r
161                 if(c<0) c=0; else if(c>15) c=15;\r
162                 c=15-c;\r
163                 depthtable1[a]=0x202+0x04040404*c;\r
164                 depthtable2[a]=0x02030302+0x04040404*c;\r
165                 depthtable3[a]=0x202+0x04040404*c;\r
166                 //depthtable4[a]=0x02020302+0x04040404*c;\r
167         }\r
168         bgpic=halloc(64000L,1L);\r
169         memcpy(bgpic,vram,64000);\r
170         a=0;\r
171         for(b=64;b>=0;b--)\r
172         {       \r
173                 for(c=0;c<768;c++)\r
174                 {\r
175                         a=pal[c]-b;\r
176                         if(a<0) a=0;\r
177                         pal2[c]=a;\r
178                 }\r
179                 dis_waitb();\r
180                 dis_waitb();\r
181                 outp(0x3c8,0);\r
182                 for(c=0;c<768;c++) outp(0x3c9,pal2[c]);\r
183         }\r
184         \r
185         while(!dis_exit() && frame<2450)\r
186         {\r
187                 //setborder(0);\r
188                 repeat=dis_waitb();\r
189                 if(frame>2300) setpalette(pal2);\r
190                 //setborder(1);\r
191                 if(dis_indemo())\r
192                 {\r
193                         a=dis_musplus();\r
194                         if(a>-4 && a<0) break;\r
195                 }\r
196                 while(repeat--)\r
197                 {\r
198                         frame++;\r
199                         if(frame==500) f=0;\r
200                         i=dottaul[j];\r
201                         j++; j%=dotnum;\r
202                         if(frame<500)\r
203                         {\r
204                                 dot[i].x=isin(f*11)*40;\r
205                                 dot[i].y=icos(f*13)*10-dropper;\r
206                                 dot[i].z=isin(f*17)*40;\r
207                                 dot[i].yadd=0;\r
208                         }\r
209                         else if(frame<900)\r
210                         {\r
211                                 dot[i].x=icos(f*15)*55;\r
212                                 dot[i].y=dropper;\r
213                                 dot[i].z=isin(f*15)*55;\r
214                                 dot[i].yadd=-260;\r
215                         }\r
216                         else if(frame<1700)\r
217                         {       \r
218                                 a=sin1024[frame&1023]/8;\r
219                                 dot[i].x=icos(f*66)*a;\r
220                                 dot[i].y=8000;\r
221                                 dot[i].z=isin(f*66)*a;\r
222                                 dot[i].yadd=-300;\r
223                         }\r
224                         else if(frame<2360)\r
225                         {\r
226                                 /*\r
227                                 a=rand()/128+32;\r
228                                 dot[i].y=8000-a*80;\r
229                                 b=rand()&1023;\r
230                                 a+=rand()&31;\r
231                                 dot[i].x=sin1024[b]*a/3+(a-50)*7;\r
232                                 dot[i].z=sin1024[(b+256)&1023]*a/3+(a-40)*7;\r
233                                 dot[i].yadd=300;\r
234                                 if(frame>1640 && !(frame&31) && grav>-2) grav--;\r
235                                 */\r
236                                 dot[i].x=rand()-16384;\r
237                                 dot[i].y=8000-rand()/2;\r
238                                 dot[i].z=rand()-16384;\r
239                                 dot[i].yadd=0;\r
240                                 if(frame>1900 && !(frame&31) && grav>0) grav--;\r
241                         }\r
242                         else if(frame<2400)\r
243                         {\r
244                                 a=frame-2360;\r
245                                 for(b=0;b<768;b+=3)\r
246                                 {\r
247                                         c=pal[b+0]+a*3;\r
248                                         if(c>63) c=63;\r
249                                         pal2[b+0]=c;\r
250                                         c=pal[b+1]+a*3;\r
251                                         if(c>63) c=63;\r
252                                         pal2[b+1]=c;\r
253                                         c=pal[b+2]+a*4;\r
254                                         if(c>63) c=63;\r
255                                         pal2[b+2]=c;\r
256                                 }\r
257                         }\r
258                         else if(frame<2440)\r
259                         {\r
260                                 a=frame-2400;\r
261                                 for(b=0;b<768;b+=3)\r
262                                 {\r
263                                         c=63-a*2;\r
264                                         if(c<0) c=0;\r
265                                         pal2[b+0]=c;\r
266                                         pal2[b+1]=c;\r
267                                         pal2[b+2]=c;\r
268                                 }\r
269                         }\r
270                         if(dropper>4000) dropper-=100;\r
271                         rotcos=icos(rot)*64; rotsin=isin(rot)*64;\r
272                         rots+=2;\r
273                         if(frame>1900) \r
274                         {\r
275                                 rot+=rota/64;\r
276                                 rota--;\r
277                         }\r
278                         else rot=isin(rots);\r
279                         f++;\r
280                         gravity=grav;\r
281                         gravityd=gravd;\r
282                 }\r
283                 drawdots();\r
284         }\r
285         if(!dis_indemo())\r
286         {\r
287                 _asm mov ax,3h\r
288                 _asm int 10h\r
289         }\r
290         return(0);\r
291 }\r