]> 4ch.mooo.com Git - 16.git/blob - 16/dos_gfx.cpp
modified: 16/DOS_GFX.EXE
[16.git] / 16 / dos_gfx.cpp
1 //DOS Graphics thingy by sparky4 licence GPL v2\r
2 //a special thanks to everyone to release source code for mode X\r
3 /*src\lib\*/\r
4 #include "dos_gfx.h"\r
5 \r
6 int old_mode;\r
7 //color \82Ä\82·\82Æ\r
8 int gq = LGQ;\r
9 //\82Ä\82·\82Æ\r
10 int q = 0;\r
11 int bakax = 0, bakay = 0;\r
12 cord xx = rand()&0%320, yy = rand()&0%240, sx = 0, sy = 0;\r
13 byte coor;\r
14 \r
15 byte *vga = (byte *) MK_FP(0xA000, 0);\r
16 \r
17 /*\r
18  * Comment out the following #define if you don't want the testing main()\r
19  * to be included.\r
20  */\r
21 #define TESTING\r
22 \r
23 /////////////////////////////////////////////////////////////////////////////\r
24 //                                                                         //\r
25 // setvideo() - This function Manages the video modes                                     //\r
26 //                                                                         //\r
27 /////////////////////////////////////////////////////////////////////////////\r
28 void setvideo(/*byte mode, */int vq){\r
29                 union REGS in, out;\r
30 \r
31                 if(!vq){ // deinit the video\r
32                                 // change to the video mode we were in before we switched to mode 13h\r
33                                 //mxSetMode( MX_TEXT );\r
34                                 mxTerm();\r
35                                 in.h.ah = 0x00;\r
36                                 in.h.al = old_mode;\r
37                                 int86(0x10, &in, &out);\r
38 \r
39                 }else if(vq == 1){ // init the video\r
40                                 // get old video mode\r
41                                 in.h.ah = 0xf;\r
42                                 int86(0x10, &in, &out);\r
43                                 old_mode = out.h.al;\r
44 \r
45                                 // enter mode\r
46                                 mxInit();\r
47                                 mxSetMode( MX_320x240 );\r
48 //                              mxSetVirtualScreen(SW+(SW/4), SH+(SH/4));\r
49 //                              mxSetVirtualScreen(SW*2, SH*2);\r
50                                 mxSetVirtualScreen(VW,VH);\r
51 //                              mxSetVirtualScreen((640-(TILEWH*4)),(480-(TILEWH*4)));\r
52                                 mxSetClip(0);\r
53                                 //mxSetClipRegion(0, 0, SW, SH);\r
54                 }\r
55 }\r
56 \r
57 /////////////////////////////////////////////////////////////////////////////\r
58 //                                                                                                                                               //\r
59 // cls() - This clears the screen to the specified color, on the VGA or on //\r
60 //               the Virtual screen.                                                                                     //\r
61 //                                                                                                                                               //\r
62 /////////////////////////////////////////////////////////////////////////////\r
63 void cls(byte color, byte *Where){\r
64                 _fmemset(Where, color, VW*(VH));\r
65 }\r
66 \r
67 //color \82Ä\82·\82Æ\r
68 int colortest(){\r
69                 if(gq < NUM_COLORS){\r
70                                 cls(gq, vga);\r
71                                 gq++;\r
72                 }else gq = 0;\r
73                 return gq;\r
74 }\r
75 \r
76 //color \82Ä\82·\82Æ\r
77 int colorz(){\r
78                 if(gq < HGQ){\r
79 //----            cls(gq, vaddr);\r
80                                 cls(gq, vga);\r
81                                 gq++;\r
82                 }else gq = LGQ;\r
83                 return gq;\r
84 }\r
85 \r
86 //slow spectrum down\r
87 void ssd(int svq){\r
88                 if(sy < SH+1){\r
89                                 if(sx < SW+1){\r
90                                                 //plotpixel(xx, yy, coor, vga);\r
91                                                 //ppf(sx, sy, coor, vga);\r
92                                                 mxPutPixel(sx, sy, coor);\r
93                                                 //printf("%d %d %d %d\n", sx, sy, svq, coor);\r
94                                                 sx++;\r
95                                 }else sx = 0;\r
96                                 if(sx == SW){\r
97                                                 sy++;\r
98                                                 if(svq == 7) coor++;\r
99                                                 if(sy == SH && svq == 8) coor = rand()%NUM_COLORS;\r
100                                 }\r
101                 }else sy = 0;\r
102 }\r
103 \r
104 /*-----------ding-------------*/\r
105 int ding(int q){\r
106 \r
107                 int d3y;\r
108 \r
109 //++++  if(q <= 4 && q!=2 && gq == BONK-1) coor = rand()%HGQ;\r
110                 if((q == 2\r
111                 ||q==4\r
112                 ||q==16\r
113                 ) && gq == BONK){\r
114                                                 if(coor < HGQ && coor < LGQ) coor = LGQ;\r
115                                                 if(coor < HGQ-1){\r
116                                                                 coor++;\r
117                                 }else{ coor = LGQ;\r
118                                                 bakax = rand()%3; bakay = rand()%3;\r
119                                 }\r
120                 }\r
121 \r
122                 if(q==8){ colorz(); return gq; }else\r
123                 if(q==10){ ssd(q); /*printf("%d\n", coor);*/ }else\r
124                 if(q==5){ colortest(); return gq; }else\r
125                 if(q==11){ colorz(); delay(100); return gq; }\r
126                 if(q==6){\r
127                                 coor = rand()%NUM_COLORS;\r
128                                 cls(coor, vga);\r
129                                 //updatevbuff();\r
130                 }\r
131 \r
132                 if(q==7||q==9){\r
133                                 if(gq < HGQ){\r
134                                                 if(q == 7) ssd(q);\r
135                                                 if(q == 9){ ssd(q); coor++; }\r
136                                                 gq++;\r
137                                 }else gq = LGQ;\r
138                 }\r
139                 if((q<5 && gq<BONK) || (q==16 && gq<BONK)){ // the number variable make the colors more noticable\r
140                                 if(q==1){\r
141                                                 if(xx==SW){bakax=0;}\r
142                                                 if(xx==0){bakax=1;}\r
143                                                 if(yy==SH){bakay=0;}\r
144                                                 if(yy==0){bakay=1;}\r
145                                 }else if(q==3){\r
146                                                 if(xx!=SW||yy!=SH){\r
147                                                                 if(xx==0){bakax=1;bakay=-1;d3y=1;}\r
148                                                                 if(yy==0){bakax=1;bakay=0;d3y=1;}\r
149                                                                 if(xx==SW){bakax=-1;bakay=-1;d3y=1;}\r
150                                                                 if(yy==SH){bakax=1;bakay=0;d3y=1;}\r
151                                                 }else if(xx==SW&&yy==SH) xx=yy=0;\r
152                                 }\r
153                                 if(q==3){\r
154                                                 if(d3y){\r
155                                                                 if(bakay<0){\r
156                                                                                 yy--;\r
157                                                                                 d3y--;\r
158                                                                 }else\r
159                                                                 if(bakay>0){\r
160                                                                                 yy++;\r
161                                                                                 d3y--;\r
162                                                                 }\r
163                                                 }\r
164                                                 if(bakax<0){\r
165                                                                 xx--;\r
166                                                 }else\r
167                                                 if(bakax>0){\r
168                                                                 xx++;\r
169                                                 }\r
170                                 }else{\r
171                                                 if(q==16)\r
172                                                 {\r
173                                                                 if(!bakax){\r
174                                                                         xx--;\r
175                                                                 }else if(bakax>0){\r
176                                                                         xx++;\r
177                                                                 }\r
178                                                                 if(!bakay){\r
179                                                                         yy--;\r
180                                                                 }else if(bakay>0){\r
181                                                                         yy++;\r
182                                                                 }\r
183                                                 }else{\r
184                                                                 if(!bakax){\r
185 //                                                                      xx-=TILEWH;\r
186                                                                         xx--;\r
187                                                                 }else if(bakax>1){\r
188 //                                                                      xx+=TILEWH;\r
189                                                                         xx++;\r
190                                                                 }\r
191                                                                 if(!bakay){\r
192 //                                                                      yy-=TILEWH;\r
193                                                                         yy--;\r
194                                                                 }else if(bakay>1){\r
195 //                                                                      yy+=TILEWH;\r
196                                                                         yy++;\r
197                                                                 }\r
198                                                 }\r
199                                 }\r
200                                 // fixer\r
201                                 if(q!=16){\r
202                                                 if(xx<0) xx=(VW/*-TILEWH*/);\r
203                                                 if(yy<0) yy=(VH/*-TILEWH*/);\r
204                                                 if(xx>(VW/*-TILEWH*/)) xx=0;\r
205                                                 if(yy>(VH/*-TILEWH*/)) yy=0;\r
206                                 }\r
207 \r
208 //interesting effects\r
209                                 if(q==16)\r
210                                 {\r
211                                 int tx=0,ty=0;\r
212                                 tx+=xx+16;\r
213                                 ty+=yy+16;\r
214                                 mxPutPixel(tx, ty, coor);\r
215                                 //printf("%d %d %d %d %d %d\n", xx, yy, tx, ty, TILEWH);\r
216 \r
217                                 // plot the pixel\r
218                                 }else{\r
219 //                                      mxFillBox(xx, yy, TILEWH, TILEWH, coor, 16);\r
220                                         mxPutPixel(xx, yy, coor);\r
221                                 } \r
222 \r
223                                 if(q==2) mxPutPixel(rand()%VW, rand()%(VH), 0);\r
224                                 if(q==16) mxPutPixel(rand()%VW, rand()%(VH), 0);\r
225                                 if(q==2||q==4||q==16){ bakax = rand()%3; bakay = rand()%3; }  //random 3 switch\r
226                                 gq++;\r
227 //if(xx<0||xx>320||yy<0||yy>(SH*3))\r
228 //        printf("%d %d %d %d %d %d\n", xx, yy, coor, bakax, bakay, getPixel_X(xx,yy));\r
229 //        printf("%d\n", getPixel_X(xx,yy));\r
230                 }else gq = LGQ;\r
231                 return gq;\r
232 }\r
233 \r
234 \r
235 /*\r
236  * The library testing routines follows below.\r
237  */\r
238 \r
239 #ifdef TESTING\r
240 \r
241 /*\r
242  * Library test (program) entry point.\r
243  */\r
244 \r
245 int main(void)\r
246                 {\r
247                 int key,d,xpos,ypos,xdir,ydir;
248                 int ch=0x0;\r
249                 //short int temp;\r
250                 // main variables\r
251                 d=1; // switch variable\r
252                 key=4; // default screensaver number\r
253                 xpos=0;\r
254                 ypos=0;\r
255                 xdir=1;\r
256                 ydir=1;\r
257                 setvideo(1);\r
258 // screen savers\r
259 \r
260 /*while(d!=0){ // on!\r
261                                 if(!kbhit()){ // conditions of screen saver\r
262                                                 ding(key);\r
263                                 }else{\r
264                                                 setvideo(0);\r
265                                                 // user imput switch\r
266                                                 printf("Enter 1, 2, 3, 4, or 6 to run a screensaver, or enter 5 to quit.\n", getch());  // prompt the user\r
267                                                 scanf("%d", &key);\r
268                                                 //if(key==3){xx=yy=0;} // crazy screen saver wwww\r
269                                                 if(key==5) d=0;\r
270                                                 setvideo(1);\r
271                                 }\r
272                 }*/ // else off\r
273                 while(1){ // conditions of screen saver
274                 while(!kbhit()){\r
275                         ding(key);
276                 }\r
277                 //end of screen savers\r
278                 //doTest();\r
279                 for (int x = 0; x < VW; ++x)\r
280                         {\r
281                                 mxPutPixel(x, 0, 15);\r
282                                 mxPutPixel(x, SH-1, 15);\r
283                         }\r
284                 for (int y = 0; y < VH; ++y)\r
285                         {\r
286                                 mxPutPixel(0, y, 15);\r
287                                 mxPutPixel(SW-1, y, 15);\r
288                         }\r
289                 for (int x = 320; x < VW; ++x)\r
290                         {\r
291                                 mxPutPixel(x, 0, 15);\r
292                                 mxPutPixel(x, VH-1, 15);\r
293                         }\r
294                 for (int y = 240; y < VH; ++y)\r
295                         {\r
296                                 mxPutPixel(0, y, 15);\r
297                                 mxPutPixel(VW-1, y, 15);\r
298                         }
299                         \r
300                 getch();\r
301                 //mxFillBox(xx, yy, QUADWH, QUADWH, 1, 16);
302                 //mxFillBox(xx, yy, QUADWH, QUADWH, 2, 16);
303                 //mxFillBox(xx, yy, QUADWH, QUADWH, 3, 16);
304                 //mxFillBox(xx, yy, QUADWH, QUADWH, 4, 16);\r
305                 mxSetTextColor(16, OP_TRANS);\r
306                                 mxOutText(56, SH-40, "CRAZY!!!!]");\r
307                                 mxOutText(64, SH-32, "CRAZY!!!!]");\r
308                                 mxOutText(64, SH-24, "____  CRAZY!!!!]");\r
309                                 mxOutText(56, SH-16, "___    _  CRAZY!!!!]");\r
310                 getch();\r
311                 while(!kbhit()){\r
312 //                      hScroll(1);\r
313 //                      scrolly(1);\r
314 //                      vScroll(1);\r
315 //                      delay(100);\r
316                         //for(int i=0;i<TILEWH;i++){\r
317                                 ding(key);\r
318                                 //mxOutText(64, SH-40, "CRAZY!!!!");\r
319                                 //mxOutText(64, SH-32, "CRAZY!!!!");\r
320                                 //mxOutText(64, SH-24, "  _  CRAZY!!!!");\r
321                                 //mxOutText(64, SH-16, "  _    _  CRAZY!!!!");
322                                 mxPan(xpos,ypos);\r
323                                 for(int o = 0; o<TILEWH; o++){
324                                         xpos+=xdir;\r
325                                         ypos+=ydir;
326                                         //mxWaitRetrace();
327                                 }\r
328                                 if( (xpos>(VW-SW-1))  || (xpos<1)){xdir=-xdir;}\r
329                                 if( (ypos>(VH-SH-1)) || (ypos<1)){ydir=-ydir;} // { Hit a boundry, change\r
330                         //    direction! }\r
331                         }
332                         ch=getch();
333                         if(ch==0x71)break; // 'q'\r
334                         if(ch==0x1b)break; // 'ESC'\r
335                 }\r
336                 setvideo(0);\r
337                 printf("wwww\nResolution: %dx%d\n", SW,SH);\r
338                 printf("Mode X Library Version: %d\n", mxGetVersion());\r
339                 //puts("where to next?  It's your move! wwww");\r
340                 printf("bakapi ver. 1.04.09.04\nis made by sparky4\81i\81\86\83Ö\81\85\81j feel free to use it ^^\nLicence: GPL v2\n");\r
341                 return 0;\r
342                 }\r
343 \r
344 #endif\r