]> 4ch.mooo.com Git - plz.git/blob - plz.c
ww
[plz.git] / plz.c
1 #include <stdio.h>\r
2 #include <math.h>\r
3 #include <conio.h>\r
4 #include <dos.h>\r
5 #include "plz.h"\r
6 //#include "tweak.h"\r
7 \r
8 //#define DO_TABLES\r
9 //#define DPII (3.1415926535*2.0)\r
10 \r
11 #define LINELEN 41\r
12 #define MAXY 280\r
13 #define YADD 0\r
14 #define XADD 0\r
15 #define SINMASK 4095\r
16 #define PLZSINI(p1,p2,p3,p4)  *ptr++ = (psini[x*32+lsini[y*2+p2]*16+p1] + psini[y*4+lsini[x*64+p4]*4+p3]) + (psini[x*32+16+lsini[y*2+p2]*16+p1] + psini[y*4+lsini[x*64+32+p4]*4+p3])*256;\r
17 \r
18 extern int init_copper();\r
19 extern int close_copper();\r
20 extern int far frame_count;\r
21 extern int far cop_drop;\r
22 extern int far cop_plz;\r
23 extern int far cop_start;\r
24 extern char far * cop_fadepal;\r
25 extern char fadepal[768];\r
26 extern char far *cop_pal;\r
27 extern int  do_pal;\r
28 \r
29 extern int plzline(int y, int vseg);\r
30 extern int setplzparas(int c1, int c2, int c3, int c4);\r
31 extern int set_plzstart(int y);\r
32 extern char far psini[16384];\r
33 extern int far lsini4[8192];\r
34 extern int far lsini16[8192];\r
35 \r
36 //int (* vmem)[LINELEN]=MK_FP(0x0a000,0);\r
37 //char  psini[16384]=\r
38 //#include "psini.pre"\r
39 //char  lsini[16384]=\r
40 //#include "lsini.pre"\r
41 \r
42 char    ptau[256]=\r
43 #include "ptau.pre"\r
44 \r
45 int     pals[6][768];\r
46 int     curpal=0;\r
47 int     timetable[10]={64*6*2-45,64*6*4-45,64*6*5-45,64*6*6-45,64*6*7+90,0};\r
48 int     ttptr=0;\r
49 \r
50 int     l1=1000, l2=2000, l3=3000, l4=4000;\r
51 int     k1=3500, k2=2300, k3=3900, k4=3670;\r
52 \r
53 int     il1=1000, il2=2000, il3=3000, il4=4000;\r
54 int     ik1=3500, ik2=2300, ik3=3900, ik4=3670;\r
55 \r
56 int     inittable[10][8]={{1000,2000,3000,4000,3500,2300,3900,3670},\r
57                           {1000,2000,4000,4000,1500,2300,3900,1670},\r
58                           {3500,1000,3000,1000,3500,3300,2900,2670},\r
59                           {1000,2000,3000,4000,3500,2300,3900,3670},\r
60                           {1000,2000,3000,4000,3500,2300,3900,3670},\r
61                           {1000,2000,3000,4000,3500,2300,3900,3670}};\r
62 \r
63 void plz(){\r
64         register int x,y;\r
65         int     *ptr;\r
66         long    tim=0,count=0;\r
67         int     ch=0,sync=2;\r
68 \r
69         //while(dis_musplus()<0 && !dis_exit());\r
70         //dis_setmframe(0);\r
71 \r
72         init_plz();\r
73         cop_drop=128;\r
74         cop_fadepal=pals[curpal++];\r
75 \r
76         frame_count=0;\r
77         while(!dis_exit())\r
78                 {\r
79                 tim+=frame_count; frame_count=0; count++;\r
80                 if(dis_getmframe()>timetable[ttptr])\r
81                         {\r
82                         memset(fadepal,0,768);\r
83                         cop_drop=1;\r
84                         cop_fadepal=pals[curpal++];\r
85                         ttptr++;\r
86                         il1=inittable[ttptr][0];\r
87                         il2=inittable[ttptr][1];\r
88                         il3=inittable[ttptr][2];\r
89                         il4=inittable[ttptr][3];\r
90                         ik1=inittable[ttptr][4];\r
91                         ik2=inittable[ttptr][5];\r
92                         ik3=inittable[ttptr][6];\r
93                         ik4=inittable[ttptr][7];\r
94                         }\r
95                 if(curpal==5 && cop_drop>64) break;\r
96 \r
97                 __asm\r
98                 {\r
99                         mov dx, 3c4h\r
100                         mov ax, 0a02h\r
101                         out dx, ax\r
102                 }\r
103 \r
104                 setplzparas(k1,k2,k3,k4);\r
105                 for(y=0;y<MAXY;y+=2)\r
106                         plzline(y,0x0a000+y*6+YADD*6);\r
107                 setplzparas(l1,l2,l3,l4);\r
108                 for(y=1;y<MAXY;y+=2)\r
109                         plzline(y,0x0a000+y*6+YADD*6);\r
110 \r
111 \r
112                 __asm\r
113                 {\r
114                         mov dx, 3c4h\r
115                         mov ax, 0502h\r
116                         out dx, ax\r
117                 }\r
118 \r
119                 setplzparas(k1,k2,k3,k4);\r
120                 for(y=1;y<MAXY;y+=2)\r
121                         plzline(y,0x0a000+y*6+YADD*6);\r
122                 setplzparas(l1,l2,l3,l4);\r
123                 for(y=0;y<MAXY;y+=2)\r
124                         plzline(y,0x0a000+y*6+YADD*6);\r
125                 }\r
126         cop_drop=0; frame_count=0; while(frame_count==0);\r
127         set_plzstart(500);\r
128         cop_plz=0;\r
129         }\r
130 \r
131 void init_plz()\r
132         {\r
133         int     a,b,c,z;\r
134         int     *pptr=pals;\r
135 \r
136 #ifdef  DO_TABLES\r
137         {\r
138         FILE    *f1,*f2,*f3,*f4;\r
139         f1=fopen("lsini4.inc","wb");\r
140         f2=fopen("lsini16.inc","wb");\r
141         f3=fopen("psini.inc","wb");\r
142         f4=fopen("ptau.inc","wb");\r
143 \r
144         for(a=0;a<1024*16;a++)\r
145                 {\r
146                 if(a<1024*8)\r
147                         {\r
148                         lsini4[a]=(sin(a*DPII/4096)*55+sin(a*DPII/4096*5)*8+sin(a*DPII/4096*15)*2+64)*8;\r
149                         lsini16[a]=(sin(a*DPII/4096)*55+sin(a*DPII/4096*4)*5+sin(a*DPII/4096*17)*3+64)*16;\r
150                         }\r
151                 psini[a]=sin(a*DPII/4096)*55+sin(a*DPII/4096*6)*5+sin(a*DPII/4096*21)*4+64;\r
152                 if((a&15)==0)\r
153                         {\r
154                         if(a<1024*8)\r
155                                 {\r
156                                 fprintf(f1,"\ndw        %4d",lsini4[a]);\r
157                                 fprintf(f2,"\ndw        %4d",lsini16[a]);\r
158                                 }\r
159                         fprintf(f3,"\ndb        %4d",psini[a]);\r
160                         }\r
161                 else    {\r
162                         if(a<1024*8)\r
163                                 {\r
164                                 fprintf(f1,",%4d",lsini4[a]);\r
165                                 fprintf(f2,",%4d",lsini16[a]);\r
166                                 }\r
167                         fprintf(f3,",%4d",psini[a]);\r
168                         }\r
169                 }\r
170 \r
171         fprintf(f4,"{\n%d",ptau[0]=0);\r
172         for(a=1;a<=128;a++)\r
173                 {\r
174                 fprintf(f4,",%3d",ptau[a]=cos(a*DPII/128+3.1415926535)*31+32);\r
175                 if(!(a&15)) fputc('\n',f4);\r
176                 }\r
177         fputc('}',f4); fputc(';',f4);\r
178 \r
179         fclose(f1); fclose(f2); fclose(f3); fclose(f4);\r
180         }\r
181 #endif\r
182         tw_opengraph2();\r
183         cop_start=96*(682-400);\r
184         set_plzstart(60);\r
185         init_copper();\r
186         for(a=0;a<256;a++) tw_setrgbpalette(a,63,63,63);\r
187 \r
188 //      RGB\r
189         pptr=&pals[0][3];\r
190         for(a=1;a<64;a++) *pptr++=ptau[a   ],*pptr++=ptau[0   ],*pptr++=ptau[0   ];\r
191         for(a=0;a<64;a++) *pptr++=ptau[63-a],*pptr++=ptau[0   ],*pptr++=ptau[0   ];\r
192         for(a=0;a<64;a++) *pptr++=ptau[0   ],*pptr++=ptau[0   ],*pptr++=ptau[a];\r
193         for(a=0;a<64;a++) *pptr++=ptau[a   ],*pptr++=ptau[0   ],*pptr++=ptau[63-a];\r
194 \r
195 //      RB-black\r
196         pptr=&pals[1][3];\r
197         for(a=1;a<64;a++) *pptr++=ptau[a   ],*pptr++=ptau[0   ],*pptr++=ptau[0   ];\r
198         for(a=0;a<64;a++) *pptr++=ptau[63-a],*pptr++=ptau[0   ],*pptr++=ptau[a   ];\r
199         for(a=0;a<64;a++) *pptr++=ptau[0   ],*pptr++=ptau[a   ],*pptr++=ptau[63-a];\r
200         for(a=0;a<64;a++) *pptr++=ptau[a   ],*pptr++=ptau[63  ],*pptr++=ptau[a   ];\r
201 \r
202 //      RB-white\r
203         pptr=&pals[3][3];\r
204         for(a=1;a<64;a++) *pptr++=ptau[a   ],*pptr++=ptau[0   ],*pptr++=ptau[0   ];\r
205         for(a=0;a<64;a++) *pptr++=ptau[63  ],*pptr++=ptau[a   ],*pptr++=ptau[a   ];\r
206         for(a=0;a<64;a++) *pptr++=ptau[63-a],*pptr++=ptau[63-a],*pptr++=ptau[63  ];\r
207         for(a=0;a<64;a++) *pptr++=ptau[0   ],*pptr++=ptau[0   ],*pptr++=ptau[63  ];\r
208 \r
209 //      white\r
210         pptr=&pals[2][3];\r
211         for(a=1;a<64;a++) *pptr++=ptau[0   ]/2,*pptr++=ptau[0   ]/2,*pptr++=ptau[0   ]/2;\r
212         for(a=0;a<64;a++) *pptr++=ptau[a   ]/2,*pptr++=ptau[a   ]/2,*pptr++=ptau[a   ]/2;\r
213         for(a=0;a<64;a++) *pptr++=ptau[63-a]/2,*pptr++=ptau[63-a]/2,*pptr++=ptau[63-a]/2;\r
214         for(a=0;a<64;a++) *pptr++=ptau[0   ]/2,*pptr++=ptau[0   ]/2,*pptr++=ptau[0   ]/2;\r
215 \r
216 //      white II\r
217         pptr=&pals[4][3];\r
218         for(a=1;a<75;a++) *pptr++=ptau[63-a*64/75],*pptr++=ptau[63-a*64/75],*pptr++=ptau[63-a*64/75];\r
219         for(a=0;a<106;a++)*pptr++=0,*pptr++=0,*pptr++=0;\r
220         for(a=0;a<75;a++) *pptr++=ptau[a*64/75]*8/10,*pptr++=ptau[a*64/75]*9/10,*pptr++=ptau[a*64/75];\r
221 \r
222         pptr=pals;\r
223         for(a=0;a<768;a++,pptr++) *pptr=(*pptr-63)*2;\r
224         for(a=768;a<768*5;a++,pptr++) *pptr*=8;\r
225         }\r
226 \r