OSDN Git Service

going on vacation >.<
[proj16/16.git] / src / lib / hb / c6_debug.c
1 /* Catacomb Apocalypse Source Code\r
2  * Copyright (C) 1993-2014 Flat Rock Software\r
3  *\r
4  * This program is free software; you can redistribute it and/or modify\r
5  * it under the terms of the GNU General Public License as published by\r
6  * the Free Software Foundation; either version 2 of the License, or\r
7  * (at your option) any later version.\r
8  *\r
9  * This program is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along\r
15  * with this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
17  */\r
18 \r
19 // C3_DEBUG.C\r
20 \r
21 #include "DEF.H"\r
22 #include "gelib.h"\r
23 #pragma hdrstop\r
24 \r
25 /*\r
26 =============================================================================\r
27 \r
28                                                  LOCAL CONSTANTS\r
29 \r
30 =============================================================================\r
31 */\r
32 \r
33 #define DEBUG_OVERHEAD 0\r
34 \r
35 \r
36 #define VIEWTILEX       20\r
37 #define VIEWTILEY       (VIEWHEIGHT/16)\r
38 \r
39 /*\r
40 =============================================================================\r
41 \r
42                                                  GLOBAL VARIABLES\r
43 \r
44 =============================================================================\r
45 */\r
46 \r
47 \r
48 /*\r
49 =============================================================================\r
50 \r
51                                                  LOCAL VARIABLES\r
52 \r
53 =============================================================================\r
54 */\r
55 \r
56 short colordelay=0;\r
57 //boolean autofire=false;\r
58 int     maporgx;\r
59 int     maporgy;\r
60 enum {mapview,tilemapview,actoratview,visview,mapseg2,lastview} viewtype;\r
61 \r
62 void ViewMap (void);\r
63 \r
64 //===========================================================================\r
65 \r
66 #if 0\r
67 /*\r
68 ================\r
69 =\r
70 = PicturePause\r
71 =\r
72 ================\r
73 */\r
74 \r
75 void PicturePause (void)\r
76 {\r
77         int     y;\r
78         unsigned        source;\r
79 \r
80         source = displayofs+panadjust;\r
81 \r
82 //      VW_ColorBorder (15);\r
83         VW_SetLineWidth (40);\r
84         VW_SetScreen (0,0);\r
85 \r
86         if (source<0x10000l-200*64)\r
87         {\r
88         //\r
89         // copy top line first\r
90         //\r
91                 for (y=0;y<200;y++)\r
92                         VW_ScreenToScreen (source+y*64,y*40,40,1);\r
93         }\r
94         else\r
95         {\r
96         //\r
97         // copy bottom line first\r
98         //\r
99                 for (y=199;y>=0;y--)\r
100                         VW_ScreenToScreen (source+y*64,y*40,40,1);\r
101         }\r
102 \r
103         IN_Shutdown ();\r
104 \r
105         VW_WaitVBL(70);\r
106         bioskey(0);\r
107         VW_WaitVBL(70);\r
108         Quit (NULL);\r
109 }\r
110 #endif\r
111 \r
112 \r
113 //===========================================================================\r
114 \r
115 //===========================================================================\r
116 \r
117 #define sc_1                    0x02\r
118 #define sc_2                    0x03\r
119 #define sc_3                    0x04\r
120 #define sc_4                    0x05\r
121 #define sc_5                    0x06\r
122 #define sc_6                    0x07\r
123 #define sc_7                    0x08\r
124 #define sc_8                    0x09\r
125 #define sc_9                    0x0a\r
126 #define sc_0                    0x0b\r
127 \r
128 \r
129 \r
130 /*\r
131 ================\r
132 =\r
133 = DebugKeys\r
134 =\r
135 ================\r
136 */\r
137 \r
138 int DebugKeys (void)\r
139 {\r
140         boolean esc;\r
141         int level,i;\r
142 \r
143 #if DEBUG_KEYS_AVAILABLE\r
144         if (Keyboard[sc_R])\r
145         {\r
146                 CenterWindow (12,2);\r
147                 if (autofire)\r
148                   US_PrintCentered ("Rapid-Fire OFF");\r
149                 else\r
150                   US_PrintCentered ("Rapid-Fire ON");\r
151                 VW_UpdateScreen();\r
152                 IN_Ack();\r
153                 autofire ^= 1;\r
154                 return 1;\r
155         }\r
156 #endif\r
157 \r
158 #if DEBUG_KEYS_AVAILABLE\r
159         if (Keyboard[sc_A])\r
160         {\r
161                 char levelstr[50];\r
162                 unsigned org_tile,org_mapon,msgnum;\r
163                 boolean newmsg=true,newlevel=false;\r
164 \r
165                 VW_FixRefreshBuffer ();\r
166                 CenterWindow (16,3);\r
167                 US_Print("\n");\r
168                 US_CPrint("Message Test");\r
169                 VW_UpdateScreen();\r
170 \r
171                 org_mapon = mapon;\r
172                 msgnum = (org_tile = *(mapsegs[0]+farmapylookup[player->tiley]+player->tilex))-NAMESTART;\r
173                 while (1)\r
174                 {\r
175         // Get outta' here\r
176         //\r
177                         if (Keyboard[sc_Escape])\r
178                         {\r
179                                 while (Keyboard[sc_Escape]);\r
180                                 break;\r
181                         }\r
182 \r
183         // Move to previous message\r
184         //\r
185                         if (Keyboard[sc_UpArrow])\r
186                         {\r
187                                 if (msgnum)\r
188                                 {\r
189                                         msgnum--;\r
190                                         newmsg = true;\r
191                                 }\r
192                         }\r
193 \r
194         // Move to next message\r
195         //\r
196                         if (Keyboard[sc_DownArrow])\r
197                         {\r
198                                 if (msgnum < 24)\r
199                                 {\r
200                                         msgnum++;\r
201                                         newmsg = true;\r
202                                 }\r
203                         }\r
204 \r
205         // Move to previous level\r
206         //\r
207                         if (Keyboard[sc_LeftArrow])\r
208                         {\r
209                                 if (mapon)\r
210                                 {\r
211                                         MM_SetPurge(&grsegs[LEVEL1TEXT+mapon],3);\r
212                                         mapon--;\r
213                                         newlevel = true;\r
214                                 }\r
215                         }\r
216 \r
217         // Move to next level\r
218         //\r
219                         if (Keyboard[sc_RightArrow])\r
220                         {\r
221                                 if (mapon < LASTMAP-1)\r
222                                 {\r
223                                         MM_SetPurge(&grsegs[LEVEL1TEXT+mapon],3);\r
224                                         mapon++;\r
225                                         newlevel = true;\r
226                                 }\r
227                         }\r
228 \r
229         // Load new level text\r
230         //\r
231                         if (newlevel)\r
232                         {\r
233                                 CA_CacheGrChunk(LEVEL1TEXT+mapon);\r
234                                 ScanText();\r
235                                 newmsg = true;\r
236                                 newlevel=false;\r
237                         }\r
238 \r
239         // Display new message text\r
240         //\r
241                         if (newmsg)\r
242                         {\r
243                                 *(mapsegs[0]+farmapylookup[player->tiley]+player->tilex) = msgnum+NAMESTART;\r
244                                 DrawText(true);\r
245                                 strcpy(levelstr,"Level: ");\r
246                                 itoa(mapon,levelstr+strlen(levelstr),10);\r
247                                 strcat(levelstr,"  Msg: ");\r
248                                 itoa(msgnum,levelstr+strlen(levelstr),10);\r
249                                 DisplaySMsg(levelstr,NULL);\r
250                                 newmsg = false;\r
251 \r
252                                 if (Keyboard[sc_UpArrow] || Keyboard[sc_DownArrow] || Keyboard[sc_LeftArrow] || Keyboard[sc_RightArrow])\r
253                                         VW_WaitVBL(6);\r
254                         }\r
255 \r
256                 }\r
257 // Restore game\r
258 //\r
259                 MM_SetPurge(&grsegs[LEVEL1TEXT+mapon],3);\r
260                 mapon = org_mapon;\r
261                 CA_CacheGrChunk(LEVEL1TEXT+mapon);\r
262                 ScanText();\r
263                 *(mapsegs[0]+farmapylookup[player->tiley]+player->tilex) = org_tile;\r
264                 DrawText(true);\r
265                 status_flag = 0;\r
266         }\r
267 \r
268 \r
269         if (Keyboard[sc_V])\r
270         {\r
271                 displayofs = bufferofs = screenloc[screenpage];\r
272                 CenterWindow (16,4);\r
273                 US_CPrint("\n"GAMENAME);\r
274                 US_CPrint(VERSION);\r
275                 US_CPrint(REVISION);\r
276                 VW_UpdateScreen();\r
277                 IN_Ack ();\r
278         }\r
279 \r
280 #endif\r
281         if (Keyboard[sc_Q])                     // Q = Insta-Quit!\r
282                 Quit("Insta-Quit!");\r
283 #if 0\r
284         if (Keyboard[sc_Z])             // Z = freeze Time\r
285         {\r
286                 if (FreezeTime)\r
287                   FreezeTime = 1;               // Allow refresh to dec to zero..\r
288                 else\r
289                         StopTime();\r
290 \r
291                 IN_Ack();\r
292                 return 1;\r
293         }\r
294 #endif\r
295 \r
296 \r
297 //      if (Keyboard[sc_E])\r
298 //              FaceDoor((player->x>>16l)+1,(player->y>>16l));\r
299 //              FaceAngle(90);\r
300 \r
301 #if 0\r
302         if (Keyboard[sc_B])             // B = border color\r
303         {\r
304                 CenterWindow(24,3);\r
305                 PrintY+=6;\r
306                 US_Print(" Border color (0-15):");\r
307                 VW_UpdateScreen();\r
308                 esc = !US_LineInput (px,py,str,NULL,true,2,0);\r
309                 if (!esc)\r
310                 {\r
311                         level = atoi (str);\r
312                         if (level>=0 && level<=15)\r
313                                 VW_ColorBorder (level);\r
314                 }\r
315                 return 1;\r
316         }\r
317 #endif\r
318 \r
319 \r
320 #if 1//DEBUG_KEYS_AVAILABLE\r
321         if (Keyboard[sc_O])\r
322         {\r
323                 extern unsigned objectcount,latchmemavail;\r
324                 unsigned unused,total;\r
325 \r
326                 CenterWindow (30,13);\r
327                 US_Print ("Objects: ");\r
328                 US_PrintUnsigned (objectcount);\r
329 \r
330                 US_Print("\n\nTics: ");\r
331                 US_PrintUnsigned (tics);\r
332                 US_Print("      Real Tics: ");\r
333                 US_PrintUnsigned(realtics);\r
334 \r
335                 US_Print ("\n\n    Total Available: ");\r
336                 US_PrintUnsigned (mminfo.mainmem/1024);\r
337                 US_Print ("k\n        Mem In Use: ");\r
338                 unused=MM_UnusedMemory()/1024;\r
339                 US_PrintUnsigned (unused);\r
340                 US_Print ("k\n Mem After Purge: ");\r
341                 total=MM_TotalFree()/1024;\r
342                 US_PrintUnsigned (total);\r
343                 US_Print ("k (");\r
344                 US_PrintUnsigned (total-unused);\r
345 \r
346                 US_Print (")\n\nLatch Mem Free: ");\r
347                 US_PrintUnsigned (latchmemavail);\r
348                 US_Print ("\n");\r
349                 VW_UpdateScreen();\r
350                 IN_Ack();\r
351         }\r
352 \r
353         if (colordelay<1)\r
354         {\r
355                 if (Keyboard[26])\r
356                 {\r
357                         extern unsigned *groundcolor,debug_gnd;\r
358 \r
359                         groundcolor = &debug_gnd;\r
360                         debug_gnd += 0x0101;\r
361                         if (debug_gnd == 0x1010)\r
362                                 debug_gnd = 0;\r
363                         colordelay = 10;\r
364                 }\r
365 \r
366                 if (Keyboard[27])\r
367                 {\r
368                         extern unsigned *skycolor,debug_sky;\r
369 \r
370                         skycolor = &debug_sky;\r
371                         debug_sky += 0x0101;\r
372                         if (debug_sky == 0x1010)\r
373                                 debug_sky = 0;\r
374                         colordelay = 10;\r
375                 }\r
376         }\r
377         else\r
378                 colordelay -= realtics;\r
379 #endif\r
380 \r
381 \r
382 #if 0\r
383         if (Keyboard[sc_C])             // C = count objects\r
384         {\r
385                 CountObjects();\r
386                 return 1;\r
387         }\r
388 \r
389 \r
390         if (Keyboard[sc_D])             // D = start / end demo record\r
391         {\r
392                 if (DemoMode == demo_Off)\r
393                         StartDemoRecord ();\r
394                 else if (DemoMode == demo_Record)\r
395                 {\r
396                         EndDemoRecord ();\r
397                         playstate = ex_completed;\r
398                 }\r
399                 return 1;\r
400         }\r
401 #endif\r
402 \r
403 #if 0\r
404         if (Keyboard[sc_E])             // E = quit level\r
405         {\r
406                 if (tedlevel)\r
407                         TEDDeath();\r
408                 playstate = ex_warped;\r
409                 gamestate.mapon++;\r
410         }\r
411 #endif\r
412 \r
413 #if 0\r
414         if (Keyboard[sc_F])             // F = facing spot\r
415         {\r
416                 CenterWindow (12,4);\r
417                 US_Print ("X:");\r
418                 US_PrintUnsigned (player->x);\r
419                 US_Print ("Y:");\r
420                 US_PrintUnsigned (player->y);\r
421                 US_Print ("A:");\r
422                 US_PrintUnsigned (player->angle);\r
423                 VW_UpdateScreen();\r
424                 IN_Ack();\r
425                 return 1;\r
426         }\r
427 #endif\r
428 \r
429         if (Keyboard[sc_G])             // G = god mode\r
430         {\r
431                 CenterWindow (12,2);\r
432                 if (godmode)\r
433                   US_PrintCentered ("God mode OFF");\r
434                 else\r
435                   US_PrintCentered ("God mode ON");\r
436                 VW_UpdateScreen();\r
437                 IN_Ack();\r
438                 godmode ^= 1;\r
439                 return 1;\r
440         }\r
441 \r
442 #if 0\r
443         if (Keyboard[sc_H])             // H = hurt self\r
444         {\r
445                 TakeDamage (5);\r
446         }\r
447 #endif\r
448 \r
449         if (Keyboard[sc_I])                     // I = item cheat\r
450         {\r
451                 extern boolean redraw_gems;\r
452 \r
453                 CenterWindow (12,3);\r
454                 US_PrintCentered ("Free items!");\r
455                 VW_UpdateScreen();\r
456                 for (i=0;i<4;i++)\r
457                 {\r
458                         GiveBolt ();\r
459                         GiveNuke ();\r
460                         GivePotion ();\r
461 //                      if (!gamestate.keys[i])\r
462                                 GiveKey (i);\r
463                         gamestate.gems[i] = GEM_DELAY_TIME;\r
464                 }\r
465                 gamestate.gems[4] = GEM_DELAY_TIME;\r
466                 redraw_gems = true;\r
467 /////////               for (i=0;i<8;i++)\r
468 /////////                       GiveScroll (i,false);\r
469 \r
470                 IN_Ack ();\r
471                 return 1;\r
472         }\r
473 \r
474 #if DEBUG_OVERHEAD\r
475         if (Keyboard[sc_Z])                     // O is used elsewhere...\r
476         {\r
477                 ViewMap();\r
478                 return 1;\r
479         }\r
480 #endif\r
481 \r
482 #if 0\r
483         if (Keyboard[sc_P])                     // P = pause with no screen disruptioon\r
484         {\r
485                 PicturePause ();\r
486                 return 1;\r
487         }\r
488 #endif\r
489 \r
490 #if 0\r
491         if (Keyboard[sc_S])     // S = slow motion\r
492         {\r
493                 singlestep^=1;\r
494                 CenterWindow (18,3);\r
495                 if (singlestep)\r
496                         US_PrintCentered ("Slow motion ON");\r
497                 else\r
498                         US_PrintCentered ("Slow motion OFF");\r
499                 VW_UpdateScreen();\r
500                 IN_Ack ();\r
501                 return 1;\r
502         }\r
503 #endif\r
504 \r
505 #if 0\r
506         if (Keyboard[sc_V])                     // V = extra VBLs\r
507         {\r
508                 CenterWindow(30,3);\r
509                 PrintY+=6;\r
510                 US_Print("  Add how many extra VBLs(0-8):");\r
511                 VW_UpdateScreen();\r
512                 esc = !US_LineInput (px,py,str,NULL,true,2,0);\r
513                 if (!esc)\r
514                 {\r
515                         level = atoi (str);\r
516                         if (level>=0 && level<=8)\r
517                                 extravbls = level;\r
518                 }\r
519                 return 1;\r
520         }\r
521 #endif\r
522 \r
523         if (Keyboard[sc_W])     // W = warp to level\r
524         {\r
525                 CenterWindow(26,3);\r
526                 PrintY+=6;\r
527                 US_Print("  Warp to which level(0-17):");\r
528                 VW_UpdateScreen();\r
529                 esc = !US_LineInput (px,py,str,NULL,true,2,0);\r
530                 if (!esc)\r
531                 {\r
532                         level = atoi (str);\r
533                         if (level>=0 && level<=LASTMAP-1)\r
534                         {\r
535                                 gamestate.mapon = level;\r
536                                 playstate = ex_warped;\r
537                                 lasttext = -1;\r
538                         }\r
539                 }\r
540                 return 1;\r
541         }\r
542 \r
543 #if 0\r
544         if (Keyboard[sc_X])                     // X = item cheat\r
545         {\r
546                 CenterWindow (12,3);\r
547                 US_PrintCentered ("Extra stuff!");\r
548                 VW_UpdateScreen();\r
549                 for (i=0;i<4;i++)\r
550                 {\r
551                         GiveBolt ();\r
552                         GiveNuke ();\r
553                         GivePotion ();\r
554                 }\r
555                 IN_Ack ();\r
556                 return 1;\r
557         }\r
558 #endif\r
559 \r
560 ////////        if (LastScan >= sc_1 && LastScan <= sc_8)       // free scrolls\r
561 ////////        {\r
562 ////////                GiveScroll (LastScan-sc_1,false);\r
563 ////////                IN_ClearKeysDown ();\r
564 ////////        }\r
565 \r
566         return 0;\r
567 }\r
568 \r
569 \r
570 #if DEBUG_OVERHEAD\r
571 \r
572 /*\r
573 =====================\r
574 =\r
575 = LatchDrawChar\r
576 =\r
577 =====================\r
578 */\r
579 \r
580 void LatchDrawChar (unsigned x, unsigned y, unsigned picnum)\r
581 {\r
582         unsigned        source, dest;\r
583 \r
584         dest = bufferofs + ylookup[y]+x;\r
585         source = latchpics[0]+picnum*8;\r
586 \r
587         EGAWRITEMODE(1);\r
588         EGAMAPMASK(15);\r
589 \r
590 asm     mov     bx,[linewidth]\r
591 asm     dec     bx\r
592 \r
593 asm     mov     ax,[screenseg]\r
594 asm     mov     es,ax\r
595 asm     mov     ds,ax\r
596 \r
597 asm     mov     si,[source]\r
598 asm     mov     di,[dest]\r
599 \r
600 asm     movsb\r
601 asm     add     di,bx\r
602 asm     movsb\r
603 asm     add     di,bx\r
604 asm     movsb\r
605 asm     add     di,bx\r
606 asm     movsb\r
607 asm     add     di,bx\r
608 asm     movsb\r
609 asm     add     di,bx\r
610 asm     movsb\r
611 asm     add     di,bx\r
612 asm     movsb\r
613 asm     add     di,bx\r
614 asm     movsb\r
615 \r
616 asm     mov     ax,ss\r
617 asm     mov     ds,ax                                   // restore turbo's data segment\r
618 \r
619         EGAWRITEMODE(0);\r
620 }\r
621 \r
622 #endif\r
623 \r
624 \r
625 #if DEBUG_OVERHEAD\r
626 /*\r
627 =====================\r
628 =\r
629 = LatchDrawTile\r
630 =\r
631 =====================\r
632 */\r
633 \r
634 void LatchDrawTile (unsigned x, unsigned y, unsigned picnum)\r
635 {\r
636         unsigned        source, dest;\r
637 \r
638         dest = bufferofs + ylookup[y]+x;\r
639         source = tileoffsets[picnum];\r
640 \r
641         EGAWRITEMODE(1);\r
642         EGAMAPMASK(15);\r
643 \r
644 asm     mov     bx,[linewidth]\r
645 asm     sub     bx,2\r
646 \r
647 asm     mov     ax,[screenseg]\r
648 asm     mov     es,ax\r
649 asm     mov     ds,ax\r
650 \r
651 asm     mov     si,[source]\r
652 asm     mov     di,[dest]\r
653 asm     mov     dx,16\r
654 \r
655 lineloop:\r
656 asm     movsb\r
657 asm     movsb\r
658 asm     add     di,bx\r
659 \r
660 asm     dec     dx\r
661 asm     jnz     lineloop\r
662 \r
663 asm     mov     ax,ss\r
664 asm     mov     ds,ax                                   // restore turbo's data segment\r
665 \r
666         EGAWRITEMODE(0);\r
667 }\r
668 #endif\r
669 \r
670 \r
671 #if DEBUG_OVERHEAD\r
672 /*\r
673 ===================\r
674 =\r
675 = OverheadRefresh\r
676 =\r
677 ===================\r
678 */\r
679 \r
680 void OverheadRefresh (void)\r
681 {\r
682         unsigned        x,y,endx,endy,sx,sy;\r
683         unsigned        tile;\r
684 \r
685 \r
686         if (++screenpage == 3)\r
687                 screenpage = 0;\r
688 \r
689         bufferofs = screenloc[screenpage];\r
690 \r
691         endx = maporgx+VIEWTILEX;\r
692         endy = maporgy+VIEWTILEY;\r
693 \r
694         for (y=maporgy;y<endy;y++)\r
695                 for (x=maporgx;x<endx;x++)\r
696                 {\r
697                         sx = (x-maporgx)*2;\r
698                         sy = (y-maporgy)*16;\r
699 \r
700                         switch (viewtype)\r
701                         {\r
702                         case mapview:\r
703                                 tile = *(mapsegs[0]+farmapylookup[y]+x);\r
704                                 break;\r
705 \r
706                         case tilemapview:\r
707                                 tile = tilemap[x][y];\r
708                                 break;\r
709 \r
710                         case actoratview:\r
711                                 tile = (unsigned)actorat[x][y];\r
712                                 break;\r
713 \r
714                         case visview:\r
715                                 tile = spotvis[x][y];\r
716                                 break;\r
717 \r
718                         case mapseg2:\r
719                                 tile = *(mapsegs[2]+farmapylookup[y]+x);\r
720                                 if (tile < 256)\r
721                                         tile = *(mapsegs[0]+farmapylookup[y]+x);\r
722                         break;\r
723 \r
724                         }\r
725 \r
726                         if (tile<NUMTILE16)\r
727                                 LatchDrawTile(sx,sy,tile);\r
728                         else\r
729                         {\r
730                                 LatchDrawChar(sx,sy,NUMBERCHARS+((tile&0xf000)>>12));\r
731                                 LatchDrawChar(sx+1,sy,NUMBERCHARS+((tile&0x0f00)>>8));\r
732                                 LatchDrawChar(sx,sy+8,NUMBERCHARS+((tile&0x00f0)>>4));\r
733                                 LatchDrawChar(sx+1,sy+8,NUMBERCHARS+(tile&0x000f));\r
734                         }\r
735                 }\r
736 \r
737         VW_SetScreen (bufferofs,0);\r
738         displayofs = bufferofs;\r
739 }\r
740 \r
741 \r
742 /*\r
743 ===================\r
744 =\r
745 = ViewMap\r
746 =\r
747 ===================\r
748 */\r
749 \r
750 void ViewMap (void)\r
751 {\r
752         boolean         button0held;\r
753 \r
754         viewtype = actoratview;\r
755         button0held = false;\r
756 \r
757 \r
758         maporgx = player->tilex - VIEWTILEX/2;\r
759         if (maporgx<0)\r
760                 maporgx = 0;\r
761         maporgy = player->tiley - VIEWTILEY/2;\r
762         if (maporgy<0)\r
763                 maporgy = 0;\r
764 \r
765         do\r
766         {\r
767 //\r
768 // let user pan around\r
769 //\r
770                 IN_ReadControl(0,&control);\r
771                 if (control.xaxis == -1 && maporgx>0)\r
772                         maporgx--;\r
773                 if (control.xaxis == 1 && maporgx<mapwidth-VIEWTILEX)\r
774                         maporgx++;\r
775                 if (control.yaxis == -1 && maporgy>0)\r
776                         maporgy--;\r
777                 if (control.yaxis == 1 && maporgy<mapheight-VIEWTILEY)\r
778                         maporgy++;\r
779 \r
780                 if (control.button0 && !button0held)\r
781                 {\r
782                         button0held = true;\r
783                         viewtype++;\r
784                         if (viewtype==lastview)\r
785                                 viewtype = mapview;\r
786                 }\r
787                 if (!control.button0)\r
788                         button0held = false;\r
789 \r
790 \r
791                 OverheadRefresh ();\r
792 \r
793         } while (!Keyboard[sc_Escape]);\r
794 \r
795         IN_ClearKeysDown ();\r
796         DrawPlayScreen ();\r
797 }\r
798 #endif\r
799 \r