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