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