Annotation of src/whmenu.c, revision 1.1

1.1     ! root        1: /*********************************************************************
        !             2: *
        !             3: *   WHMENU.C - menu code for Witchaven game
        !             4: *
        !             5: *********************************************************************/
        !             6: 
        !             7: #include "icorp.h"
        !             8: //#define NOTFIXED return;
        !             9: #define NOTFIXED
        !            10: #define FULLSCREEN 0
        !            11: 
        !            12: #define SCOTTSPEED 20L
        !            13: 
        !            14: 
        !            15: //** Les 01/17/96   - START
        !            16: // Raf for swift support extern declarations
        !            17: #include "swift.h"
        !            18: #include <memcheck.h>
        !            19: //** Les 01/17/96   - END
        !            20: 
        !            21: //** Les 01/17/96   - START
        !            22: // Raf extern vals from whinp.c
        !            23: extern int wingmanflag,
        !            24:      wingmanyawsens,
        !            25:      wingmanpitchsens,
        !            26:      wingmanrollsens,
        !            27:      wingmanzsens,
        !            28:      wingmanzreverse;
        !            29: 
        !            30: extern SWIFT_3DStatus wingmaninfo;
        !            31: 
        !            32: extern short wingmankeys[];
        !            33: //** Les 01/17/96   - END
        !            34: 
        !            35: 
        !            36: int  loopinstuff;                  // here it is
        !            37: extern int mousxspeed,
        !            38:      mousyspeed;
        !            39: 
        !            40: extern int vampiretime;
        !            41: extern int musiclevel;
        !            42: extern int digilevel;
        !            43: 
        !            44: extern short gbrightness;
        !            45: 
        !            46: //JSA 4_27 cart and elevator sound variables
        !            47: extern int cartsnd,
        !            48:      gratesnd,
        !            49:      lavasnd,
        !            50:      batsnd;
        !            51: 
        !            52: extern int gameactivated;
        !            53: extern int escapetomenu;
        !            54: 
        !            55: extern int difficulty;
        !            56: extern int mapon;
        !            57: 
        !            58: extern int currweapon;
        !            59: extern int selectedgun;
        !            60: extern int currentpotion;
        !            61: extern int helmettime;
        !            62: extern int shadowtime;
        !            63: extern int nightglowtime;
        !            64: extern short brightness;
        !            65: extern int strongtime;
        !            66: extern int invisibletime;
        !            67: extern int manatime;
        !            68: extern int thunderflash;
        !            69: extern int thundertime;
        !            70: extern int currentorb;
        !            71: extern int currweaponfired;
        !            72: extern int currweaponanim;
        !            73: extern int currweaponattackstyle;
        !            74: extern int currweaponflip;
        !            75: 
        !            76: int  goreon = 1;
        !            77: int  loadedgame = 0;
        !            78: int  loadgo = 0;
        !            79: int  musicoverride = -1;
        !            80: 
        !            81: char typemessage[162],
        !            82:      typemessageleng = 0,
        !            83:      typemode = 0;
        !            84: 
        !            85: char scantoasc[128] = {
        !            86:      0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 0, 0,
        !            87:      'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', 0, 0, 'a', 's',
        !            88:      'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', 39, '`', 0, 92, 'z', 'x', 'c', 'v',
        !            89:      'b', 'n', 'm', ',', '.', '/', 0, '*', 0, 32, 0, 0, 0, 0, 0, 0,
        !            90:      0, 0, 0, 0, 0, 0, 0, '7', '8', '9', '-', '4', '5', '6', '+', '1',
        !            91:      '2', '3', '0', '.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        !            92:      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        !            93:      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        !            94: };
        !            95: 
        !            96: char scantoascwithshift[128] = {
        !            97:      0, 0, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 0, 0,
        !            98:      'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', 0, 0, 'A', 'S',
        !            99:      'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', 34, '~', 0, '|', 'Z', 'X', 'C', 'V',
        !           100:      'B', 'N', 'M', '<', '>', '?', 0, '*', 0, 32, 0, 0, 0, 0, 0, 0,
        !           101:      0, 0, 0, 0, 0, 0, 0, '7', '8', '9', '-', '4', '5', '6', '+', '1',
        !           102:      '2', '3', '0', '.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        !           103:      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        !           104:      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        !           105: };
        !           106: 
        !           107: extern int frames;
        !           108: #define MAXSAVEDGAMES 8
        !           109: 
        !           110: struct savedgame {
        !           111:      char name[20];
        !           112: };
        !           113: 
        !           114: struct savedgame savedgamenames[MAXSAVEDGAMES];
        !           115: struct savedgame quicksavedgame;
        !           116: 
        !           117: int  quicksaveflag;
        !           118: 
        !           119: extern int gameactivated;
        !           120: 
        !           121: void
        !           122: loadsavetoscreen(void)
        !           123: {
        !           124:      if (svga == 0)
        !           125:           permanentwritesprite(0L, 0L, ZLOADSAVE, 0, 0L, 0L, 319L, 199L, 0);
        !           126:      else {
        !           127:           rotatesprite(0L << 16, 0L << 16, 65536L, 0, VLOAD, 0, 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           128:           rotatesprite(0L << 16, 240L << 16, 65536L, 0, VSAVE, 0, 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           129:      }
        !           130: 
        !           131: }
        !           132: 
        !           133: void
        !           134: menutoscreen(void)
        !           135: {
        !           136:      if (svga == 0)
        !           137:           permanentwritesprite(0L, 0L, THEMAINMENUWITH, 0, 0L, 0L, 319L, 199L, 0);
        !           138:      else
        !           139:           rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAIN, 0, 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           140: 
        !           141: }
        !           142: 
        !           143: void
        !           144: menutoscreenblank(void)
        !           145: {
        !           146:      permanentwritesprite(0L, 0L, THEMAINMENU, 0, 0L, 0L, 319L, 199L, 0);
        !           147: }
        !           148: 
        !           149: void
        !           150: itemtoscreen(long x, long y, short dapic, signed char dashade, char dapal)
        !           151: {
        !           152:      permanentwritesprite(x, y, dapic, dashade, x, y, xdim - 1, ydim - 1, dapal);
        !           153: }
        !           154: //
        !           155: // fancy font
        !           156: //
        !           157: // to use this function you will need to name the starting letter
        !           158: // the function will then scan the string and display its chars
        !           159: 
        !           160: 
        !           161: char fancy[41] = {'a', 'b', 'c', 'd', 'e',
        !           162:      'f', 'g', 'h', 'i', 'j',
        !           163:      'k', 'l', 'm', 'n', 'o',
        !           164:      'p', 'q', 'r', 's', 't',
        !           165:      'u', 'v', 'w', 'x', 'y',
        !           166:      'z', '0', '1', '2', '3',
        !           167:      '4', '5', '6', '7', '8',
        !           168: '9', '!', '?', '-', ':', ' '};
        !           169: 
        !           170: 
        !           171: void
        !           172: fancyfont(long x, long y, short tilenum, char *string, char pal)
        !           173: {
        !           174: 
        !           175:      int  i,
        !           176:           j;
        !           177:      int  len;
        !           178:      int  incr = 0;
        !           179:      int  exit = 0;
        !           180:      int  number;
        !           181:      char temp[40];
        !           182: 
        !           183:      strlwr(string);
        !           184:      len = strlen(string);
        !           185:      strcpy(temp, string);
        !           186: 
        !           187:      for (i = 0; i < len; i++) {
        !           188:           tempbuf[i] = temp[i];
        !           189:           for (j = 0; j < 40; j++) {
        !           190:                if (tempbuf[i] == fancy[j]) {
        !           191:                     number = j;
        !           192:                }
        !           193:           }
        !           194:           if (i == 0) {
        !           195:                itemtoscreen(x, y, tilenum + number, 0, pal);
        !           196:                incr += tilesizx[tilenum + number] + 1;
        !           197:           }
        !           198:           else if (tempbuf[i] != ' ') {
        !           199:                itemtoscreen(x + incr, y, tilenum + number, 0, pal);
        !           200:                incr += tilesizx[tilenum + number] + 1;
        !           201:           }
        !           202:           else {
        !           203:                incr += 8;
        !           204:           }
        !           205:      }
        !           206: 
        !           207: }
        !           208: 
        !           209: 
        !           210: 
        !           211: void
        !           212: fancyfontscreen(long x, long y, short tilenum, char *string)
        !           213: {
        !           214: 
        !           215:      int  i,
        !           216:           j;
        !           217:      int  len;
        !           218:      int  incr = 0;
        !           219:      int  exit = 0;
        !           220:      int  number;
        !           221:      char temp[40];
        !           222: 
        !           223:      strlwr(string);
        !           224:      len = strlen(string);
        !           225:      strcpy(temp, string);
        !           226: 
        !           227:      for (i = 0; i < len; i++) {
        !           228:           tempbuf[i] = temp[i];
        !           229:           for (j = 0; j < 40; j++) {
        !           230:                if (tempbuf[i] == fancy[j]) {
        !           231:                     number = j;
        !           232:                }
        !           233:           }
        !           234:           if (i == 0) {
        !           235:                overwritesprite(x, y, tilenum + number, 0, 0x02, 7);
        !           236:                incr += tilesizx[tilenum + number] + 1;
        !           237:           }
        !           238:           else if (tempbuf[i] != ' ') {
        !           239:                overwritesprite(x + incr, y, tilenum + number, 0, 0x02, 7);
        !           240:                incr += tilesizx[tilenum + number] + 1;
        !           241:           }
        !           242:           else
        !           243:                incr += 8;
        !           244:      }
        !           245: 
        !           246: }
        !           247: 
        !           248: 
        !           249: int
        !           250: menuscreen(struct player * plr)
        !           251: {
        !           252: 
        !           253:      struct {
        !           254:           long x;
        !           255:           long y;
        !           256:      }    redpic[5] = {
        !           257:           {
        !           258:                94, 8
        !           259:           },
        !           260:           {
        !           261:                88, 39
        !           262:           },
        !           263:           {
        !           264:                95, 67
        !           265:           },
        !           266:           {
        !           267:                114, 101
        !           268:           },
        !           269:           {
        !           270:                112, 120
        !           271:           }
        !           272:      };
        !           273: 
        !           274:      struct {
        !           275:           long x;
        !           276:           long y;
        !           277:      }    sredpic[5] = {
        !           278:           {
        !           279:                209, 102
        !           280:           },
        !           281:           {
        !           282:                206, 136
        !           283:           },
        !           284:           {
        !           285:                213, 177
        !           286:           },
        !           287:           {
        !           288:                235, 208
        !           289:           },
        !           290:           {
        !           291:                222, 242
        !           292:           }
        !           293:      };
        !           294: 
        !           295: 
        !           296:      int  exit = 0;
        !           297:      int  select = 0;
        !           298:      short redpicnum;
        !           299:      long goaltime;
        !           300:      int  i;
        !           301:      int  cnt = 0;
        !           302: 
        !           303:      // clearview(0L);  //Clear screen to specified color
        !           304: 
        !           305:      if (netgame) {
        !           306:           return (0);
        !           307: //        netkillme();
        !           308:      }
        !           309: 
        !           310: //JSA BLORB
        !           311:      SND_CheckLoops();
        !           312: 
        !           313:      redpicnum = THENEWGAME;
        !           314: 
        !           315:      keystatus[1] = keystatus[0x1c] = keystatus[0x9c] = 0;
        !           316: 
        !           317:      goaltime = totalclock + SCOTTSPEED;
        !           318: 
        !           319:      if (svga == 1) {
        !           320:           setview(0L, 0L, 639L, 479L);
        !           321:           rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAIN, 0,
        !           322:                        0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           323:      }
        !           324: 
        !           325:      while (!exit) {
        !           326: 
        !           327:           menutoscreen();
        !           328: 
        !           329:           if (select < 5) {
        !           330:                if (svga == 0) {
        !           331:                     switch (cnt) {
        !           332:                     case 0:
        !           333:                          redpicnum = THENEWGAME + select;
        !           334:                          break;
        !           335:                     case 1:
        !           336:                          redpicnum = ZFLASHER1 + select;
        !           337:                          break;
        !           338:                     case 2:
        !           339:                          redpicnum = ZFLASHER2 + select;
        !           340:                          break;
        !           341:                     }
        !           342:                     itemtoscreen(redpic[select].x, redpic[select].y, redpicnum, 0, 0);
        !           343:                }
        !           344:                else {
        !           345:                     switch (cnt) {
        !           346:                     case 0:
        !           347:                          redpicnum = VNEW + select;
        !           348:                          break;
        !           349:                     case 1:
        !           350:                          redpicnum = SFLASH1 + select;
        !           351:                          break;
        !           352:                     case 2:
        !           353:                          redpicnum = SFLASH2 + select;
        !           354:                          break;
        !           355:                     }
        !           356:                     rotatesprite((sredpic[select].x) << 16, (sredpic[select].y) << 16, 65536L, 0,
        !           357:                        redpicnum, 0, 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           358:                }
        !           359:           }
        !           360: 
        !           361:           nextpage();
        !           362:           if (totalclock >= goaltime) {
        !           363:                goaltime = totalclock + SCOTTSPEED;
        !           364:                cnt++;
        !           365:                if (cnt > 2)
        !           366:                     cnt = 0;
        !           367:                if (keystatus[0xd0] || keystatus[0x50]) {
        !           368:                     TEMPSND();
        !           369:                     select++;
        !           370:                     if (select > 4)
        !           371:                          select = 0;
        !           372:                }
        !           373:                if (keystatus[0xc8] || keystatus[0x48]) {
        !           374:                     TEMPSND();
        !           375:                     select--;
        !           376:                     if (select < 0)
        !           377:                          select = 4;
        !           378:                }
        !           379:                if (keystatus[1] > 0) {
        !           380:                     TEMPSND();
        !           381:                     if (gameactivated == 1) {
        !           382:                          // select=5;
        !           383:                          lockclock = totalclock;
        !           384:                          exit = 1;
        !           385:                     }
        !           386:                     else
        !           387:                          select = 4;
        !           388:                     keystatus[1] = 0;
        !           389:                }
        !           390:                if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !           391:                     keystatus[0x1c] = keystatus[0x9c] = 0;
        !           392:                     keystatus[1] = 0;
        !           393:                     switch (select) {
        !           394:                     case 0:        // ok
        !           395:                          gameactivated = 0;
        !           396:                          srand(totalclock & 30000);
        !           397:                          // tille maps are finished
        !           398:                          // if(loadedgame == 0 && netgame == 0)
        !           399:                          // mapon=1;
        !           400: #if 0
        !           401:                          if (netgame) {
        !           402:                               netpickmonster();
        !           403:                               exit = 1;
        !           404:                               break;
        !           405:                          }
        !           406: #endif
        !           407:                          SND_Sound(S_WARP);
        !           408:                          startnewgame(plr);
        !           409:                          gameactivated = 1;
        !           410:                          exit = 1;
        !           411:                          keystatus[0x1c] = keystatus[0x9c] = 0;
        !           412:                          keystatus[1] = 0;
        !           413:                          break;
        !           414:                     case 1:
        !           415:                          TEMPSND();
        !           416:                          loadsave(plr);
        !           417:                          if (loadgo == 1)
        !           418:                               exit = 1;
        !           419:                          loadgo = 0;
        !           420:                          keystatus[0x1c] = keystatus[0x9c] = 0;
        !           421:                          keystatus[1] = 0;
        !           422:                          break;
        !           423:                     case 2:
        !           424:                          TEMPSND();
        !           425:                          optionspage();
        !           426:                          keystatus[0x1c] = keystatus[0x9c] = 0;
        !           427:                          keystatus[1] = 0;
        !           428:                          break;
        !           429:                     case 3:
        !           430:                          TEMPSND();
        !           431:                          help();
        !           432:                          break;
        !           433:                     case 4:
        !           434:                          TEMPSND();
        !           435:                          quit();
        !           436:                          break;
        !           437:                     case 5:
        !           438:                          lockclock = totalclock;
        !           439:                          exit = 1;
        !           440:                          updatepics();
        !           441:                          break;
        !           442:                     }              // switch
        !           443:                }                   // if
        !           444:           }                        // the delay
        !           445:      }                             // while
        !           446: 
        !           447:      escapetomenu = 0;
        !           448: 
        !           449: //      if (netgame) {
        !           450: //          netreviveme();
        !           451: //      }
        !           452: 
        !           453:      return (0);
        !           454: }
        !           455: 
        !           456: //JUNE8
        !           457: #define  MAXHELPSCREENS   10
        !           458: 
        !           459: void
        !           460: help(void)
        !           461: {
        !           462: 
        !           463:      int thenames[MAXHELPSCREENS] = {
        !           464:           ZWEAPON,
        !           465:           ZSPELL,
        !           466:           ZPOTION,
        !           467:           ZMOVE,
        !           468:           ZMOVE2,
        !           469:           ZKEN,
        !           470:           ZCREDITS,
        !           471:           ZCREDITS2,
        !           472:           ZARTIST,
        !           473:           ZCREDITS3
        !           474:      }, sthenames[MAXHELPSCREENS] = {
        !           475:           1064,1063,1060,1059,1061,VCREDIT1,1057,1062,1056,1058
        !           476:      };
        !           477: 
        !           478:      int  select = 0;
        !           479:      long goaltime;
        !           480:      int  exit = 0;
        !           481: 
        !           482:      while (!exit) {
        !           483:           if (totalclock >= goaltime) {
        !           484: 
        !           485:                if (svga == 0) {
        !           486:                     menutoscreenblank();
        !           487:                     itemtoscreen(0L, 0L, thenames[select], 0, 0);
        !           488:                }
        !           489:                else {
        !           490:                     rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAINBLANK, 0,
        !           491:                                  0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           492:                     rotatesprite(0L << 16, 0L << 16, 65536L, 0,
        !           493:                                  sthenames[select], 0, 0, 8 + 16, 0L, 0L,
        !           494:                                  xdim - 1L, ydim - 1L);
        !           495:                }
        !           496: 
        !           497:                nextpage();
        !           498:                goaltime = totalclock + SCOTTSPEED;
        !           499:                if (keystatus[0xd0]
        !           500:                    || keystatus[keys[KEYRIGHT]]
        !           501:                    || keystatus[RDN]
        !           502:                    || keystatus[keys[KEYBACK]]
        !           503:                    || keystatus[RRIGHT]) {
        !           504:                     TEMPSND();
        !           505:                     select++;
        !           506:                     if (select > 9)
        !           507:                          select = 9;
        !           508:                }
        !           509:                if (keystatus[0xc8]
        !           510:                    || keystatus[keys[KEYLEFT]]
        !           511:                    || keystatus[RUP]
        !           512:                    || keystatus[keys[KEYFWD]]
        !           513:                    || keystatus[RLEFT]) {
        !           514:                     TEMPSND();
        !           515:                     select--;
        !           516:                     if (select < 0)
        !           517:                          select = 0;
        !           518:                }
        !           519:                if (keystatus[1] > 0) {
        !           520:                     exit = 1;
        !           521:                     keystatus[1] = 0;
        !           522:                }
        !           523:                if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !           524:                     exit = 2;
        !           525:                     keystatus[0x1c] = keystatus[0x9c] = 0;
        !           526:                }
        !           527:           }
        !           528:      }
        !           529:      keystatus[1] = keystatus[0x1c] = keystatus[0x9c] = 0;
        !           530: 
        !           531: }
        !           532: 
        !           533: //JUNE6
        !           534: void
        !           535: loadsave(struct player * plr)
        !           536: {
        !           537: 
        !           538:      int  exit = 0;
        !           539:      int  select = 0;
        !           540:      long goaltime;
        !           541:      int  cnt = 0;
        !           542:      short redpicnum;
        !           543: 
        !           544:      struct {
        !           545:           long x;
        !           546:           long y;
        !           547:      }    spic[2] = {{
        !           548:                229, 152
        !           549:      },
        !           550:      {
        !           551:           233, 190
        !           552:      }
        !           553:      };
        !           554: 
        !           555:      goaltime = totalclock + SCOTTSPEED;
        !           556: 
        !           557:      while (!exit) {
        !           558:           loadsavetoscreen();
        !           559:           if (svga == 0) {
        !           560:                if (select == 0) {
        !           561:                     switch (cnt) {
        !           562:                     case 0:
        !           563:                          itemtoscreen(109L, 46L, DALOAD, 0, 0);
        !           564:                          break;
        !           565:                     case 1:
        !           566:                          itemtoscreen(109L, 46L, ZFLASHER1 + 8, 0, 0);
        !           567:                          break;
        !           568:                     case 2:
        !           569:                          itemtoscreen(109L, 46L, ZFLASHER2 + 8, 0, 0);
        !           570:                          break;
        !           571:                     }
        !           572:                }
        !           573:                else {
        !           574:                     switch (cnt) {
        !           575:                     case 0:
        !           576:                          itemtoscreen(112L, 77L, DASAVE, 0, 0);
        !           577:                          break;
        !           578:                     case 1:
        !           579:                          itemtoscreen(112L, 77L, ZFLASHER1 + 9, 0, 0);
        !           580:                          break;
        !           581:                     case 2:
        !           582:                          itemtoscreen(112L, 77L, ZFLASHER2 + 9, 0, 0);
        !           583:                          break;
        !           584:                     }
        !           585:                }
        !           586:           }
        !           587:           else {
        !           588:                if (select == 0) {
        !           589:                     switch (cnt) {
        !           590:                     case 0:
        !           591:                          redpicnum = SFLASH3 + select;
        !           592:                          break;
        !           593:                     case 1:
        !           594:                          redpicnum = SFLASH1 + 5 + select;
        !           595:                          break;
        !           596:                     case 2:
        !           597:                          redpicnum = SFLASH2 + 5 + select;
        !           598:                          break;
        !           599:                     }
        !           600:                }
        !           601:                else {
        !           602:                     switch (cnt) {
        !           603:                     case 0:
        !           604:                          redpicnum = SFLASH3 + select;
        !           605:                          break;
        !           606:                     case 1:
        !           607:                          redpicnum = SFLASH1 + 5 + select;
        !           608:                          break;
        !           609:                     case 2:
        !           610:                          redpicnum = SFLASH2 + 5 + select;
        !           611:                          break;
        !           612:                     }
        !           613:                }
        !           614:                rotatesprite((spic[select].x) << 16, (spic[select].y) << 16, 65536L, 0,
        !           615:                        redpicnum, 0, 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           616:           }
        !           617:           if (totalclock >= goaltime) {
        !           618:                goaltime = totalclock + SCOTTSPEED;
        !           619:                cnt++;
        !           620:                if (cnt > 2)
        !           621:                     cnt = 0;
        !           622:                if (keystatus[keys[KEYBACK]] || keystatus[RDN]) {
        !           623:                     TEMPSND();
        !           624:                     select = 1;
        !           625:                }
        !           626:                if (keystatus[keys[KEYFWD]] || keystatus[RUP]) {
        !           627:                     TEMPSND();
        !           628:                     select = 0;
        !           629:                }
        !           630:                if (keystatus[1] > 0) {
        !           631:                     exit = 1;
        !           632:                     keystatus[1] = 0;
        !           633:                }
        !           634:                if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !           635:                     exit = 2;
        !           636:                     keystatus[0x1c] = keystatus[0x9c] = 0;
        !           637:                }
        !           638:           }
        !           639:           nextpage();
        !           640:      }
        !           641: 
        !           642:      keystatus[1] = 0;
        !           643: 
        !           644:      if (exit == 2)
        !           645:           switch (select) {
        !           646:           case 0:                  // ok
        !           647:                loadgame(plr);
        !           648:                break;
        !           649:           case 1:                  // ok
        !           650:                if (gameactivated == 1)
        !           651:                     savegame(plr);
        !           652:                break;
        !           653:           }
        !           654: 
        !           655: }
        !           656: 
        !           657: //JUNE6
        !           658: void
        !           659: quit(void)
        !           660: {
        !           661: 
        !           662:      int  exit = 0;
        !           663:      long goaltime;
        !           664:      char temp[20];
        !           665: 
        !           666:      if (svga == 0) {
        !           667:           menutoscreenblank();
        !           668:           itemtoscreen(102L, 76L, ZSURE, 0, 0);
        !           669:      }
        !           670:      else {
        !           671:           rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAINBLANK, 0,
        !           672:                        0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !           673:           itemtoscreen((xdim>>1)-58, (ydim>>1)-24, ZSURE, 0, 0);
        !           674:      }
        !           675: 
        !           676:      nextpage();
        !           677: 
        !           678:      while (!exit) {
        !           679: 
        !           680:           if (keystatus[0x9c] > 0 || keystatus[0x1c] > 0 || keystatus[0x15] > 0) {
        !           681:                exit = 1;
        !           682:                keystatus[0x1c] = keystatus[0x9c] = 0;
        !           683:           }
        !           684: 
        !           685: 
        !           686:           if (keystatus[1] > 0 || keystatus[0x31] > 0) {
        !           687:                exit = 2;
        !           688:                keystatus[1] = 0;
        !           689:           }
        !           690:      }
        !           691: 
        !           692:      if (exit == 2) {
        !           693:           keystatus[1] = 0;
        !           694:      }
        !           695:      else {
        !           696:           if (svga == 1) {
        !           697:                permanentwritesprite(0, 0, STHEORDER, 0, 0, 0, 639, 239, 0);
        !           698:                permanentwritesprite(0, 240, STHEORDER + 1, 0, 0, 240, 639, 479, 0);
        !           699:                nextpage();
        !           700:                exit = 0;
        !           701:                while (!exit) {
        !           702:                     if (keystatus[0x39] > 0 || keystatus[1] > 0)
        !           703:                          exit = 1;
        !           704:                }
        !           705:                keystatus[0x39] = 0;
        !           706:                keystatus[1] = 0;
        !           707:           }
        !           708:           else {
        !           709:                keystatus[0x39] = 0;
        !           710:                keystatus[1] = 0;
        !           711:                exit = 0;
        !           712:                while (!exit) {
        !           713:                     if (keystatus[0x39] > 0 || keystatus[1] > 0)
        !           714:                          exit = 1;
        !           715:                     // overwritesprite(0,0,ORDER1,0,0,0);
        !           716:                     // overwritesprite(0,0,ORDER1,0,4,0);
        !           717:                     itemtoscreen(0L, 0L, THEORDER, 0, 0);
        !           718:                     nextpage();
        !           719:                }
        !           720:                keystatus[0x39] = 0;
        !           721:                keystatus[1] = 0;
        !           722:                exit = 0;
        !           723:                /* while( !exit ){ if(keystatus[0x39] > 0 || keystatus[1] > 0)
        !           724:                 * exit=1; //overwritesprite(0,0,ORDER2,0,0,0);
        !           725:                 * //overwritesprite(0,0,ORDER2,0,4,0);
        !           726:                 * itemtoscreen(0L,0L,ORDER2,0,0); nextpage(); }
        !           727:                 * keystatus[0x39]=0; keystatus[1]=0; exit=0; */
        !           728:           }
        !           729:           shutdown();
        !           730:      }
        !           731: 
        !           732: }
        !           733: 
        !           734: void
        !           735: thedifficulty(void)
        !           736: {
        !           737: 
        !           738:      struct {
        !           739:           int  x;
        !           740:           int  y;
        !           741:      }    redpic[4] = {
        !           742:           {
        !           743:                152, 131 + 5
        !           744:           },
        !           745:           {
        !           746:                184, 131 + 5
        !           747:           },
        !           748:           {
        !           749:                219, 129 + 5
        !           750:           },
        !           751:           {
        !           752:                261, 128 + 5
        !           753:           }
        !           754:      };
        !           755: 
        !           756: 
        !           757: 
        !           758:      int  exit = 0;
        !           759:      int  selected;
        !           760:      int  select;
        !           761:      int  select2 = 0;
        !           762:      int  select3 = goreon;
        !           763:      int  redpicnum;
        !           764:      int  pickone = 0;
        !           765:      long goaltime;
        !           766:      int  cnt = 0;
        !           767: 
        !           768:      struct player *plr;
        !           769: 
        !           770:      plr = &player[0];
        !           771: 
        !           772:      select = difficulty - 1;
        !           773:      keystatus[1] = 0;
        !           774:      keystatus[0x1c] = 0;
        !           775:      keystatus[0x9c] = 0;
        !           776: 
        !           777:      if (svga == 0) {
        !           778:           permanentwritesprite(0L, 0L, ZZGORE, 0, 0L, 0L, 319L, 199L, 0);
        !           779:           itemtoscreen(66L, 9L, ZZBLOOD, 0, 0);
        !           780:      }
        !           781:      else {
        !           782:           permanentwritesprite(0L, 0L, VGOREA, 0, 0L, 0L, xdim-1L, ydim-1L, 0);
        !           783:           permanentwritesprite(0L, 240L, VGOREB, 0, 0L, 0L, xdim-1L, ydim-1L, 0);
        !           784:           itemtoscreen((xdim>>1)-160L+37L, (ydim>>1)-100L-1L, 3702, 0, 0);
        !           785:      }
        !           786: 
        !           787:      if (goreon == 1) {
        !           788:           itemtoscreen((long) ((xdim - tilesizx[NOGORESHADOW]) >> 1),
        !           789:                        (svga == 0) ? (ydim >> 1) - 100L + 72L :
        !           790:                                      (ydim >> 1) - 100L + 80L,
        !           791:                        NOGORESHADOW, 0, 0);
        !           792:           itemtoscreen((long) ((xdim - tilesizx[GORESOLID]) >> 1),
        !           793:                        (svga == 0) ? (ydim >> 1) - 100L + 69L :
        !           794:                                      (ydim >> 1) - 100L + 77L,
        !           795:                        GORESOLID, 0, 0);
        !           796:      }
        !           797:      else {
        !           798:           itemtoscreen((long) ((xdim - tilesizx[NOGORESOLID]) >> 1),
        !           799:                        (svga == 0) ? (ydim >> 1) - 100L + 72L :
        !           800:                                      (ydim >> 1) - 100L + 80L,
        !           801:                        NOGORESOLID, 0, 0);
        !           802:           itemtoscreen((long) ((xdim - tilesizx[GORESHADOW]) >> 1),
        !           803:                        (svga == 0) ? (ydim >> 1) - 100L + 69L :
        !           804:                                      (ydim >> 1) - 100L + 77L,
        !           805:                        GORESHADOW, 0, 0);
        !           806:      }
        !           807: 
        !           808:      goaltime = totalclock + SCOTTSPEED;
        !           809: 
        !           810:      while (!exit) {
        !           811: 
        !           812:           if (totalclock >= goaltime) {
        !           813:                goaltime = totalclock + SCOTTSPEED;
        !           814:                cnt++;
        !           815:                if (cnt > 2)
        !           816:                     cnt = 0;
        !           817: 
        !           818:                if (keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) {
        !           819:                     TEMPSND();
        !           820:                     select2 = 0;
        !           821:                }
        !           822:                if (keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) {
        !           823:                     TEMPSND();
        !           824:                     select2 = 1;
        !           825:                }
        !           826:                if (select2 == 0)
        !           827:                     pickone = 0;
        !           828:                else
        !           829:                     pickone = 1;
        !           830: 
        !           831:                redpicnum = HORNYSKULL1 + select;
        !           832: 
        !           833:                if (svga == 0) {
        !           834:                     permanentwritesprite(0L, 0L, ZZGORE, 0,
        !           835:                                          0L, 0L, 319L, 199L, 0);
        !           836:                }
        !           837:                else {
        !           838:                     permanentwritesprite(0L, 0L, VGOREA, 0,
        !           839:                                          0L, 0L, xdim-1L, ydim-1L, 0);
        !           840:                     permanentwritesprite(0L, 240L, VGOREB, 0,
        !           841:                                          0L, 0L, xdim-1L, ydim-1L, 0);
        !           842:                }
        !           843: 
        !           844:                if (select2 == 0) {
        !           845:                     switch (cnt) {
        !           846:                     case 0:
        !           847:                          itemtoscreen((svga == 0) ? (xdim >> 1) - 160L + 66L :
        !           848:                                                     (xdim >> 1) - 160L + 37L,
        !           849:                                       (svga == 0) ? (ydim >> 1) - 100L + 9L :
        !           850:                                                     (ydim >> 1) - 100L - 1L,
        !           851:                                       (svga == 0) ? ZZBLOOD : 3690,
        !           852:                                       0, 0);
        !           853:                          break;
        !           854:                     case 1:
        !           855:                          itemtoscreen((svga == 0) ? (xdim >> 1) - 160L + 66L :
        !           856:                                                     (xdim >> 1) - 160L + 37L,
        !           857:                                       (svga == 0) ? (ydim >> 1) - 100L + 9L :
        !           858:                                                     (ydim >> 1) - 100L - 1L,
        !           859:                                       (svga == 0) ? ZFLASHER1 + 10 : 3702,
        !           860:                                       0, 0);
        !           861:                          break;
        !           862:                     case 2:
        !           863:                          itemtoscreen((svga == 0) ? (xdim >> 1) - 160L + 66L :
        !           864:                                                     (xdim >> 1) - 160L + 37L,
        !           865:                                       (svga == 0) ? (ydim >> 1) - 100L + 9L :
        !           866:                                                     (ydim >> 1) - 100L - 1L,
        !           867:                                       (svga == 0) ? ZFLASHER2 + 10 : 3709,
        !           868:                                       0, 0);
        !           869:                          break;
        !           870:                     }
        !           871: 
        !           872:                }
        !           873:                else {
        !           874:                     switch (cnt) {
        !           875:                     case 0:
        !           876:                          itemtoscreen((svga == 0) ? (xdim >> 1) - 160L + 72L :
        !           877:                                                     (xdim >> 1) - 160L + 48L,
        !           878:                                       (svga == 0) ? (ydim >> 1) - 100L + 74L :
        !           879:                                                     (ydim >> 1) - 100L + 74L,
        !           880:                                       (svga == 0) ? ZZDIFFICULTY : 3691,
        !           881:                                       0, 0);
        !           882:                          break;
        !           883:                     case 1:
        !           884:                          itemtoscreen((svga == 0) ? (xdim >> 1) - 160L + 72L :
        !           885:                                                     (xdim >> 1) - 160L + 48L,
        !           886:                                       (svga == 0) ? (ydim >> 1) - 100L + 74L :
        !           887:                                                     (ydim >> 1) - 100L + 74L,
        !           888:                                       (svga == 0) ? ZFLASHER1 + 11 : 3703,
        !           889:                                       0, 0);
        !           890:                          break;
        !           891:                     case 2:
        !           892:                          itemtoscreen((svga == 0) ? (xdim >> 1) - 160L + 72L :
        !           893:                                                     (xdim >> 1) - 160L + 48L,
        !           894:                                       (svga == 0) ? (ydim >> 1) - 100L + 74L :
        !           895:                                                     (ydim >> 1) - 100L + 74L,
        !           896:                                       (svga == 0) ? ZFLASHER2 + 11 : 3710,
        !           897:                                       0, 0);
        !           898:                          break;
        !           899:                     }
        !           900:                }
        !           901: 
        !           902:                itemtoscreen((long) ((xdim - tilesizx[HORNYBACK]) >> 1),
        !           903:                                    (svga == 0) ? (ydim >> 1) - 100L + 136L :
        !           904:                                                  (ydim >> 1) - 100L + 144L,
        !           905:                                    HORNYBACK, 0, 0);
        !           906:                itemtoscreen((long) (xdim >> 1) - 160L + (redpic[select].x - 64),
        !           907:                                    (svga == 0) ?
        !           908:                                    (ydim >> 1)-100L+(redpic[select].y+3) :
        !           909:                                    (ydim >> 1)-100L+(redpic[select].y+3)+8L,
        !           910:                                    redpicnum, 0, 0);
        !           911: 
        !           912:                if (goreon == 1) {
        !           913:                     itemtoscreen((long) (xdim >> 1) - 160L + (160 - 64),
        !           914:                                         (svga == 0) ? (ydim >> 1)-100L+72L :
        !           915:                                                       (ydim >> 1)-100L+80L,
        !           916:                                         NOGORESHADOW, 0, 0);
        !           917:                     itemtoscreen((long) (xdim >> 1) - 160L + (160 + 32),
        !           918:                                         (svga == 0) ? (ydim >> 1)-100L+69L :
        !           919:                                                       (ydim >> 1)-100L+77L,
        !           920:                                         GORESOLID, 0, 0);
        !           921:                }
        !           922:                else {
        !           923:                     itemtoscreen((long) (xdim >> 1) - 160L + (160 - 64),
        !           924:                                         (svga == 0) ? (ydim >> 1)-100L+72L :
        !           925:                                                       (ydim >> 1)-100L+80L,
        !           926:                                         NOGORESOLID, 0, 0);
        !           927:                     itemtoscreen((long) (xdim >> 1) - 160L + (160 + 32),
        !           928:                                         (svga == 0) ? (ydim >> 1)-100L+69L :
        !           929:                                                       (ydim >> 1)-100L+77L,
        !           930:                                         GORESHADOW, 0, 0);
        !           931:                }
        !           932: 
        !           933:                if (pickone == 1) {
        !           934:                     if (keystatus[keys[KEYLEFT]] > 0 || keystatus[RLEFT] > 0) {
        !           935:                          TEMPSND();
        !           936:                          select--;
        !           937:                          if (select < 0)
        !           938:                               select = 0;
        !           939:                     }
        !           940:                     if (keystatus[keys[KEYRIGHT]] > 0 || keystatus[RRIGHT] > 0) {
        !           941:                          TEMPSND();
        !           942:                          select++;
        !           943:                          if (select > 3)
        !           944:                               select = 3;
        !           945:                     }
        !           946:                     selected = select;
        !           947:                }
        !           948:                else {
        !           949:                     if (keystatus[keys[KEYLEFT]] > 0 || keystatus[RLEFT] > 0) {
        !           950:                          TEMPSND();
        !           951:                          select3 = 0;
        !           952:                     }
        !           953:                     if (keystatus[keys[KEYRIGHT]] > 0 || keystatus[RRIGHT] > 0) {
        !           954:                          TEMPSND();
        !           955:                          select3 = 1;
        !           956:                     }
        !           957:                     if (select3 == 0)
        !           958:                          goreon = 0;
        !           959:                     else
        !           960:                          goreon = 1;
        !           961:                }
        !           962:                if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !           963:                     exit = 1;
        !           964:                     keystatus[0x1c] = keystatus[0x9c] = 0;
        !           965:                }
        !           966:                if (keystatus[1] > 0) {
        !           967:                     exit = 2;
        !           968:                     keystatus[1] = 0;
        !           969:                }
        !           970:                nextpage();
        !           971:           }                        // IF
        !           972: 
        !           973:      }                             // WHILE
        !           974: 
        !           975:      if (exit == 1) {
        !           976:           switch (selected) {
        !           977:           case 0:
        !           978:                difficulty = 1;
        !           979:                break;
        !           980:           case 1:
        !           981:                difficulty = 2;
        !           982:                break;
        !           983:           case 2:
        !           984:                difficulty = 3;
        !           985:                break;
        !           986:           case 3:
        !           987:                difficulty = 4;
        !           988:                break;
        !           989:           }
        !           990:      }
        !           991: 
        !           992: 
        !           993: }
        !           994: 
        !           995: extern
        !           996: int  justteleported,
        !           997:      mapflag,
        !           998:      nobreakflag,
        !           999:      show2dobjectsflag,
        !          1000:      show2dmapflag;
        !          1001: 
        !          1002: void
        !          1003: startnewgame(struct player * plr)
        !          1004: {
        !          1005: 
        !          1006:      char temp[20];
        !          1007:      char tempshow2dsector[MAXSECTORS >> 3];
        !          1008:      char tempshow2dwall[MAXWALLS >> 3];
        !          1009:      char tempshow2dsprite[MAXSPRITES >> 3];
        !          1010:      int  i;
        !          1011: 
        !          1012:      justteleported=0;
        !          1013:      if (netgame) {
        !          1014:           // dolevelmusic(0);
        !          1015:           // SND_StartMusic(mapon-1);
        !          1016:           goto skip;
        !          1017:      }
        !          1018:      if (loadedgame == 0) {
        !          1019:           if (mapflag == 0) {
        !          1020:                mapon = 1;
        !          1021:           }
        !          1022:           strcpy(boardname, "level");
        !          1023:           itoa(mapon, temp, 10);
        !          1024:           strcat(boardname, temp);
        !          1025:           strcat(boardname, ".map");
        !          1026:           setupboard(boardname);
        !          1027:           initplayersprite();
        !          1028:           cleanup();
        !          1029:           if (musicoverride == -1) {
        !          1030:                dolevelmusic(mapon - 1);
        !          1031:           }
        !          1032:      }
        !          1033:      else if (loadedgame == 1) {
        !          1034:           setupboard(boardname);
        !          1035:           loadplayerstuff();
        !          1036:           initplayersprite();
        !          1037: #if 0
        !          1038:           for (i = 0; i < (MAXSECTORS >> 3); i++)
        !          1039:                tempshow2dsector[i] = show2dsector[i];
        !          1040:           for (i = 0; i < (MAXWALLS >> 3); i++)
        !          1041:                tempshow2dwall[i] = show2dwall[i];
        !          1042:           for (i = 0; i < (MAXSPRITES >> 3); i++)
        !          1043:                tempshow2dsprite[i] = show2dsprite[i];
        !          1044:           for (i = 0; i < (MAXSECTORS >> 3); i++)
        !          1045:                show2dsector[i] = tempshow2dsector[i];
        !          1046:           for (i = 0; i < (MAXWALLS >> 3); i++)
        !          1047:                show2dwall[i] = tempshow2dwall[i];
        !          1048:           for (i = 0; i < (MAXSPRITES >> 3); i++)
        !          1049:                show2dsprite[i] = tempshow2dsprite[i];
        !          1050: #endif
        !          1051:           loadedgame = 0;
        !          1052:           if (musicoverride == -1) {
        !          1053:                dolevelmusic(mapon - 1);
        !          1054:           }
        !          1055:      }
        !          1056: skip:
        !          1057:      godmode=0;
        !          1058:      nobreakflag=0;
        !          1059:      show2dobjectsflag=0;
        !          1060:      show2dmapflag=0;
        !          1061:      if (plr->screensize < 320)
        !          1062:           permanentwritesprite(0L, 0L, BACKGROUND, 0, 0L, 0L, 319L, 199L, 0);
        !          1063: 
        !          1064:      if (plr->screensize <= 320) {
        !          1065:           permanentwritesprite(0L, 154L, NEWSTATUSBAR, 0, 0L, 0L, 319L, 199L, 0);
        !          1066:      }
        !          1067:      updatepics();
        !          1068: 
        !          1069: }
        !          1070: 
        !          1071: void
        !          1072: loadgame(struct player * plr)
        !          1073: {
        !          1074: 
        !          1075:      int  select = 0;
        !          1076:      int  exit = 0;
        !          1077:      int  gn,
        !          1078:           i,
        !          1079:           step = 0;
        !          1080:      char temp[20];
        !          1081:      long goaltime;
        !          1082: 
        !          1083:      if (quicksaveflag) {
        !          1084:           select=10;
        !          1085:           exit=2;
        !          1086:           goto quickloadlabel;
        !          1087:      }
        !          1088: 
        !          1089:      goaltime = totalclock + SCOTTSPEED;
        !          1090: 
        !          1091:      for (i = 0; i < MAXSAVEDGAMES; i++)
        !          1092:           if (!savedgamedat(i))
        !          1093:                strcpy(savedgamenames[i].name, "empty");
        !          1094: 
        !          1095:      while (!exit) {
        !          1096:           if (svga == 0) {
        !          1097:                permanentwritesprite(0L, 0L, ZLOAD, 0, 0L, 0L, 319L, 199L, 0);
        !          1098:           }
        !          1099:           else {
        !          1100:                rotatesprite(0L << 16, 0L << 16,
        !          1101:                             65536L, 0, VMAINBLANK, 0, 0, 8 + 16,
        !          1102:                             0L, 0L, xdim - 1L, ydim - 1L);
        !          1103:                rotatesprite(((xdim>>1)-160L)<<16, ((ydim>>1)-100L)<<16,
        !          1104:                             65536L, 0, ZLOAD, 0, 0, 1 + 16,
        !          1105:                             (xdim>>1)-160L,(ydim>>1)-100L,
        !          1106:                             (xdim>>1)+160L-1L,(ydim>>1)+100L-1L);
        !          1107:           }
        !          1108:           for (i = 0; i < MAXSAVEDGAMES; i++) {
        !          1109:                if (i == select) {
        !          1110:                     rotatesprite(((xdim>>1)-135L)<<16,
        !          1111:                                  (((ydim>>1)-69L)+(i * 19))<<16,
        !          1112:                                  16384L, 0, HELMET + step,
        !          1113:                                  0, 0, 8 + 16,
        !          1114:                                  0L, 0L, xdim-1L, ydim-1L);
        !          1115:                }
        !          1116:                fancyfont((xdim>>1)-83, ((ydim>>1)-69)+(i * 19),
        !          1117:                          DAFONT, savedgamenames[i].name, 0);
        !          1118:           }
        !          1119: 
        !          1120:           nextpage();
        !          1121: 
        !          1122:           if (totalclock >= goaltime) {
        !          1123:                goaltime = totalclock + SCOTTSPEED;
        !          1124:                step=(step+1)%8;
        !          1125:           }
        !          1126: 
        !          1127:           if (keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) {
        !          1128:                select--;
        !          1129:                if (select < 0)
        !          1130:                     select = MAXSAVEDGAMES-1;
        !          1131:                keystatus[keys[KEYFWD]] = 0;
        !          1132:                keystatus[RUP] = 0;
        !          1133:           }
        !          1134:           if (keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) {
        !          1135:                select++;
        !          1136:                if (select > MAXSAVEDGAMES-1)
        !          1137:                     select = 0;
        !          1138:                keystatus[keys[KEYBACK]] = 0;
        !          1139:                keystatus[RDN] = 0;
        !          1140:           }
        !          1141: 
        !          1142:           if (keystatus[1] > 0) {
        !          1143:                exit = 1;
        !          1144:                keystatus[1] = 0;
        !          1145:           }
        !          1146: 
        !          1147:           if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !          1148:                keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1149:                if (strcmp(savedgamenames[select].name, "empty") == 0)
        !          1150:                     exit = 0;
        !          1151:                else {
        !          1152:                     exit = 2;
        !          1153:                     loadgo = 1;
        !          1154:                }
        !          1155:           }
        !          1156:      }
        !          1157: quickloadlabel:
        !          1158:      if (exit == 2) {
        !          1159:           keystatus[1] = keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1160:           strcpy(boardname, "svgm");
        !          1161:           itoa(select, temp, 10);
        !          1162:           strcat(boardname, temp);
        !          1163:           strcpy(loadgamename, "svgn");
        !          1164:           strcat(loadgamename, temp);
        !          1165:           strcat(loadgamename, ".dat");
        !          1166:           strcat(boardname, ".map");
        !          1167:           if (access(boardname,F_OK) != 0) {
        !          1168:                return;
        !          1169:           }
        !          1170:           if (access(loadgamename,F_OK) != 0) {
        !          1171:                return;
        !          1172:           }
        !          1173:           loadedgame = 1;
        !          1174:           gameactivated = 1;
        !          1175:           startnewgame(plr);
        !          1176:      }
        !          1177: }
        !          1178: 
        !          1179: void
        !          1180: savegame(struct player * plr)
        !          1181: {
        !          1182: 
        !          1183:      int  exit = 0;
        !          1184:      int  gn,
        !          1185:           i,
        !          1186:           step = 0;
        !          1187:      int  select = 0;
        !          1188:      char temp[20];
        !          1189:      long goaltime;
        !          1190: 
        !          1191: 
        !          1192:      if (quicksaveflag) {
        !          1193:           strcpy(quicksavedgame.name,"QUICKSAVE");
        !          1194:           strcpy(tempbuf,"svgm10.map");
        !          1195:           saveboard(tempbuf, &plr->x, &plr->y, &plr->z, &plr->ang, &plr->sector);
        !          1196:           savedgamename(10);
        !          1197:           return;
        !          1198:      }
        !          1199:      for (i = 0; i < MAXSAVEDGAMES; i++)
        !          1200:           if (!savedgamedat(i))
        !          1201:                strcpy(savedgamenames[i].name, "EMPTY");
        !          1202: 
        !          1203:      goaltime = totalclock + SCOTTSPEED;
        !          1204: 
        !          1205:      while (!exit) {
        !          1206:           if (svga == 0) {
        !          1207:                permanentwritesprite(0L, 0L, ZSAVE, 0, 0L, 0L, 319L, 199L, 0);
        !          1208:           }
        !          1209:           else {
        !          1210:                rotatesprite(0L << 16, 0L << 16,
        !          1211:                             65536L, 0, VMAINBLANK, 0, 0, 8 + 16,
        !          1212:                             0L, 0L, xdim - 1L, ydim - 1L);
        !          1213:                rotatesprite(((xdim>>1)-160L)<<16, ((ydim>>1)-100L)<<16,
        !          1214:                             65536L, 0, ZSAVE, 0, 0, 1 + 16,
        !          1215:                             (xdim>>1)-160L,(ydim>>1)-100L,
        !          1216:                             (xdim>>1)+160L-1L,(ydim>>1)+100L-1L);
        !          1217:           }
        !          1218:           for (i = 0; i < MAXSAVEDGAMES; i++) {
        !          1219:                if (i == select) {
        !          1220:                     rotatesprite(((xdim>>1)-135L)<<16,
        !          1221:                                  (((ydim>>1)-69L)+(i * 19))<<16,
        !          1222:                                  16384L, 0, HELMET + step,
        !          1223:                                  0, 0, 8 + 16,
        !          1224:                                  0L, 0L, xdim-1L, ydim-1L);
        !          1225:                }
        !          1226:                fancyfont((xdim>>1)-83,((ydim>>1)-69)+(i * 19),
        !          1227:                          DAFONT, savedgamenames[i].name, 0);
        !          1228:           }
        !          1229: 
        !          1230:           nextpage();
        !          1231: 
        !          1232:           if (totalclock >= goaltime) {
        !          1233:                goaltime = totalclock + SCOTTSPEED;
        !          1234: 
        !          1235:                step = (step + 1) % 8;
        !          1236:           }
        !          1237: 
        !          1238:           if (keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) {
        !          1239:                select--;
        !          1240:                if (select < 0)
        !          1241:                     select = MAXSAVEDGAMES-1;
        !          1242:                keystatus[keys[KEYFWD]] = 0;
        !          1243:                keystatus[RUP] = 0;
        !          1244:           }
        !          1245: 
        !          1246:           if (keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) {
        !          1247:                select++;
        !          1248:                if (select > MAXSAVEDGAMES-1)
        !          1249:                     select = 0;
        !          1250:                keystatus[keys[KEYBACK]] = 0;
        !          1251:                keystatus[RDN] = 0;
        !          1252:           }
        !          1253: 
        !          1254:           if (keystatus[1] > 0) {
        !          1255:                exit = 1;
        !          1256:                keystatus[1] = 0;
        !          1257:           }
        !          1258: 
        !          1259:           if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !          1260:                exit = 2;
        !          1261:                typemessageleng = 0;
        !          1262:                keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1263:                savegametext(select);
        !          1264:           }
        !          1265:      }
        !          1266: 
        !          1267: }
        !          1268: 
        !          1269: void 
        !          1270: savegametext(int select)
        !          1271: {
        !          1272: 
        !          1273:      struct player *plr;
        !          1274: 
        !          1275:      int  exit = 0;
        !          1276:      int  i,
        !          1277:           len,
        !          1278:           j;
        !          1279:      char temp[40];
        !          1280:      char temp1[40];
        !          1281:      char temp2[40];
        !          1282:      char temp3[40];
        !          1283:      int  typemessageleng = 0;
        !          1284: 
        !          1285:      plr = &player[pyrn];
        !          1286: 
        !          1287:      keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1288: 
        !          1289:      for (i = 0; i < 128; i++)
        !          1290:           keystatus[i] = 0;
        !          1291: 
        !          1292:      if (strcmp(savedgamenames[select].name,"empty") == 0) {
        !          1293:           strcpy(temp,"");
        !          1294:      }
        !          1295:      else {
        !          1296:           sprintf(temp,"%s",savedgamenames[select].name);
        !          1297:      }
        !          1298:      typemessageleng=strlen(temp);
        !          1299: 
        !          1300:      while (!exit) {
        !          1301: 
        !          1302:           if (svga == 0) {
        !          1303:                permanentwritesprite(0L, 0L, ZSAVE, 0, 0L, 0L, 319L, 199L, 0);
        !          1304:           }
        !          1305:           else {
        !          1306:                rotatesprite(0L << 16, 0L << 16,
        !          1307:                             65536L, 0, VMAINBLANK, 0, 0, 8 + 16,
        !          1308:                             0L, 0L, xdim - 1L, ydim - 1L);
        !          1309:                rotatesprite(((xdim>>1)-160L)<<16, ((ydim>>1)-100L)<<16,
        !          1310:                             65536L, 0, ZSAVE, 0, 0, 1 + 16,
        !          1311:                             (xdim>>1)-160L,(ydim>>1)-100L,
        !          1312:                             (xdim>>1)+160L-1L,(ydim>>1)+100L-1L);
        !          1313:           }
        !          1314:           for (i = 0; i < MAXSAVEDGAMES; i++) {
        !          1315:                if (i == select) {
        !          1316:                     fancyfont((xdim>>1)-77, (ydim>>1)-100+31+(i * 19),
        !          1317:                               DAFONT, temp, 7);
        !          1318:                }
        !          1319:                else {
        !          1320:                     strcpy(tempbuf, savedgamenames[i].name);
        !          1321:                     fancyfont((xdim>>1)-77, (ydim>>1)-100+31+(i * 19),
        !          1322:                               DAFONT, tempbuf, 0);
        !          1323:                }
        !          1324:           }
        !          1325: 
        !          1326:           if (keystatus[0xe] > 0) {// backspace
        !          1327:                if (typemessageleng > 0) {
        !          1328:                     temp[typemessageleng] = '\0';
        !          1329:                     typemessageleng--;
        !          1330:                     temp[typemessageleng] = '\0';
        !          1331:                }
        !          1332:                else {
        !          1333:                     strcpy(temp, "-");
        !          1334:                     typemessageleng = 0;
        !          1335:                }
        !          1336:                keystatus[0xe] = 0;
        !          1337:           }
        !          1338: 
        !          1339: 
        !          1340: 
        !          1341: 
        !          1342:           if (typemessageleng < 10) {
        !          1343:                for (i = 0; i < 128; i++) {
        !          1344:                     if (keystatus[i] > 0
        !          1345:                         && keystatus[0x0e] == 0   // keypressed not
        !          1346:                         && keystatus[1] == 0 // esc
        !          1347:                         && keystatus[0x1c] == 0   // enter l or r
        !          1348:                         && keystatus[0x9c] == 0) {     // backspace
        !          1349:                          for (j = 0; j < 41; j++) {
        !          1350:                               if (scantoasc[i] == ' ') {
        !          1351:                                    continue;
        !          1352:                               }
        !          1353:                               else if (scantoasc[i] == fancy[j]) {
        !          1354:                                    temp[typemessageleng] = fancy[j];
        !          1355:                                    typemessageleng++;
        !          1356:                                    temp[typemessageleng] = '\0';
        !          1357:                                    keystatus[i] = 0;
        !          1358:                               }
        !          1359:                               else
        !          1360:                                    keystatus[i] = 0;
        !          1361:                          }
        !          1362:                     }
        !          1363:                }
        !          1364:           }
        !          1365:           if (keystatus[1] > 0) {
        !          1366:                exit = 1;
        !          1367:                keystatus[1] = 0;
        !          1368:           }
        !          1369:           if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !          1370:                if (typemessageleng > 0) {
        !          1371:                     strcpy(savedgamenames[select].name, temp);
        !          1372:                     strcpy(tempbuf, "svgm");
        !          1373:                     itoa(select, temp2, 10);
        !          1374:                     strcat(tempbuf, temp2);
        !          1375:                     strcat(tempbuf, ".map");
        !          1376:                     saveboard(tempbuf, &plr->x, &plr->y, &plr->z, &plr->ang, &plr->sector);
        !          1377:                     savedgamename(select);
        !          1378:                }
        !          1379:                else {
        !          1380:                     strcpy(tempbuf, "svgm");
        !          1381:                     itoa(select, temp2, 10);
        !          1382:                     strcat(tempbuf, temp2);
        !          1383:                     strcat(tempbuf, ".map");
        !          1384:                     saveboard(tempbuf, &plr->x, &plr->y, &plr->z, &plr->ang, &plr->sector);
        !          1385:                     savedgamename(select);
        !          1386:                }
        !          1387:                exit = 2;
        !          1388:                keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1389:           }
        !          1390:           nextpage();
        !          1391:      }
        !          1392: 
        !          1393:      if (exit == 2) {
        !          1394:           keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1395:      }
        !          1396: 
        !          1397: }
        !          1398: #if 0
        !          1399: void
        !          1400: savegametext(int select)
        !          1401: {
        !          1402: 
        !          1403:      struct player *plr;
        !          1404: 
        !          1405:      int  exit = 0;
        !          1406:      int  i,
        !          1407:           len,
        !          1408:           j;
        !          1409:      char temp[40];
        !          1410:      char temp1[40];
        !          1411:      char temp2[40];
        !          1412: 
        !          1413:      int  typemessageleng = 0;
        !          1414: 
        !          1415:      plr = &player[pyrn];
        !          1416: 
        !          1417:      keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1418: 
        !          1419:      for (i = 0; i < 128; i++)
        !          1420:           keystatus[i] = 0;
        !          1421: 
        !          1422:      strcpy(temp, "-");
        !          1423: 
        !          1424:      while (!exit) {
        !          1425: 
        !          1426:           permanentwritesprite(0L, 0L, ZSAVE, 0, 0L, 0L, 319L, 199L, 0);
        !          1427: 
        !          1428:           for (i = 0; i < MAXSAVEDGAMES; i++) {
        !          1429:                if (i == select) {
        !          1430:                     strcpy(tempbuf, temp);
        !          1431:                     fancyfont(77, 31 + (i * 19), DAFONT, tempbuf, 7);
        !          1432:                }
        !          1433:                else {
        !          1434:                     strcpy(tempbuf, savedgamenames[i].name);
        !          1435:                     fancyfont(77, 31 + (i * 19), DAFONT, tempbuf, 0);
        !          1436:                }
        !          1437:           }
        !          1438:           if (keystatus[0xe] > 0) {// backspace
        !          1439:                if (typemessageleng > 0) {
        !          1440:                     temp[typemessageleng] = '\0';
        !          1441:                     typemessageleng--;
        !          1442:                     temp[typemessageleng] = '\0';
        !          1443:                }
        !          1444:                else {
        !          1445:                     strcpy(temp, "-");
        !          1446:                     typemessageleng = 0;
        !          1447:                }
        !          1448:                keystatus[0xe] = 0;
        !          1449:           }
        !          1450:           if (typemessageleng < 10) {
        !          1451:                for (i = 0; i < 128; i++) {
        !          1452:                     if (keystatus[i] > 0
        !          1453:                         && keystatus[0x0e] == 0   // keypressed not
        !          1454:                         && keystatus[1] == 0 // esc
        !          1455:                         && keystatus[0x1c] == 0   // enter l or r
        !          1456:                         && keystatus[0x9c] == 0) {     // backspace
        !          1457: 
        !          1458:                          for (j = 0; j < 41; j++) {
        !          1459:                               if (scantoasc[i] == ' ') {
        !          1460:                                    continue;
        !          1461:                               }
        !          1462:                               else if (scantoasc[i] == fancy[j]) {
        !          1463:                                    temp[typemessageleng] = fancy[j];
        !          1464:                                    typemessageleng++;
        !          1465:                                    temp[typemessageleng] = '\0';
        !          1466:                                    keystatus[i] = 0;
        !          1467:                               }
        !          1468:                               else
        !          1469:                                    keystatus[i] = 0;
        !          1470:                          }
        !          1471:                     }
        !          1472:                }
        !          1473:           }
        !          1474:           if (keystatus[1] > 0) {
        !          1475:                exit = 1;
        !          1476:                keystatus[1] = 0;
        !          1477:           }
        !          1478:           if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !          1479:                if (typemessageleng > 0) {
        !          1480:                     strcpy(savedgamenames[select].name, temp);
        !          1481:                     strcpy(tempbuf, "svgm");
        !          1482:                     itoa(select, temp2, 10);
        !          1483:                     strcat(tempbuf, temp2);
        !          1484:                     strcat(tempbuf, ".map");
        !          1485:                     saveboard(tempbuf, &plr->x, &plr->y, &plr->z, &plr->ang, &plr->sector);
        !          1486:                     savedgamename(select);
        !          1487:                }
        !          1488:                else {
        !          1489:                     strcpy(tempbuf, "svgm");
        !          1490:                     itoa(select, temp2, 10);
        !          1491:                     strcat(tempbuf, temp2);
        !          1492:                     strcat(tempbuf, ".map");
        !          1493:                     saveboard(tempbuf, &plr->x, &plr->y, &plr->z, &plr->ang, &plr->sector);
        !          1494:                     savedgamename(select);
        !          1495:                }
        !          1496:                exit = 2;
        !          1497:                keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1498:           }
        !          1499:           nextpage();
        !          1500:      }
        !          1501: 
        !          1502:      if (exit == 2) {
        !          1503:           keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1504:      }
        !          1505: 
        !          1506: }
        !          1507: #endif
        !          1508: 
        !          1509: extern
        !          1510: int  treasurescnt,
        !          1511:      treasuresfound,
        !          1512:      killcnt,
        !          1513:      kills,
        !          1514:      expgained;
        !          1515: 
        !          1516: int
        !          1517: savedgamename(int gn)
        !          1518: {
        !          1519: 
        !          1520:      struct player *plr;
        !          1521:      int  file;
        !          1522:      int  i;
        !          1523:      char temp[3];
        !          1524: 
        !          1525:      plr = &player[0];
        !          1526: 
        !          1527:      if (svga == 1)
        !          1528:           plr->screensize = 320;
        !          1529:      else
        !          1530:           plr->screensize = 320;
        !          1531: 
        !          1532:      strcpy(tempbuf, "svgn");
        !          1533:      itoa(gn, temp, 10);
        !          1534:      strcat(tempbuf, temp);
        !          1535:      strcat(tempbuf, ".dat");
        !          1536: 
        !          1537:      file = open(tempbuf, O_BINARY | O_TRUNC | O_CREAT | O_WRONLY, S_IWRITE);
        !          1538: 
        !          1539:      if (file != -1) {
        !          1540:           if (gn == 10) {
        !          1541:                write(file, quicksavedgame.name, sizeof(struct savedgame));
        !          1542:           }
        !          1543:           else {
        !          1544:                write(file, savedgamenames[gn].name, sizeof(struct savedgame));
        !          1545:           }
        !          1546:           write(file, &player[0], sizeof(struct player));
        !          1547:           write(file, &currweapon, sizeof(currweapon));
        !          1548:           write(file, &selectedgun, sizeof(selectedgun));
        !          1549:           write(file, &currentpotion, sizeof(currentpotion));
        !          1550:           write(file, &helmettime, sizeof(helmettime));
        !          1551:           write(file, &shadowtime, sizeof(shadowtime));
        !          1552:           write(file, &nightglowtime, sizeof(nightglowtime));
        !          1553:           write(file, &visibility, sizeof(visibility));
        !          1554:           write(file, &brightness, sizeof(brightness));
        !          1555:           write(file, &strongtime, sizeof(strongtime));
        !          1556:           write(file, &invisibletime, sizeof(invisibletime));
        !          1557:           write(file, &manatime, sizeof(manatime));
        !          1558:           write(file, &thunderflash, sizeof(thunderflash));
        !          1559:           write(file, &thundertime, sizeof(thundertime));
        !          1560: 
        !          1561:           write(file, &currentorb, sizeof(currentorb));
        !          1562:           write(file, &currweaponfired, sizeof(currweaponfired));
        !          1563:           write(file, &currweaponanim, sizeof(currweaponanim));
        !          1564:           write(file, &currweaponattackstyle, sizeof(currweaponattackstyle));
        !          1565:           write(file, &currweaponflip, sizeof(currweapon));
        !          1566:           write(file, &mapon, sizeof(mapon));
        !          1567: 
        !          1568:           write(file, &totalclock, sizeof(totalclock));
        !          1569:           write(file, &lockclock, sizeof(lockclock));
        !          1570:           write(file, &synctics, sizeof(synctics));
        !          1571: 
        !          1572:           // Warning: only works if all pointers are in sector structures!
        !          1573:           for (i = MAXANIMATES - 1; i >= 0; i--)
        !          1574:                animateptr[i] = (long *) (animateptr[i] - ((long) sector));
        !          1575: 
        !          1576:           write(file, animateptr, MAXANIMATES << 2);
        !          1577: 
        !          1578:           for (i = MAXANIMATES - 1; i >= 0; i--)
        !          1579:                animateptr[i] = (long *) (animateptr[i] + ((long) sector));
        !          1580: 
        !          1581:           write(file, animategoal, MAXANIMATES << 2);
        !          1582:           write(file, animatevel, MAXANIMATES << 2);
        !          1583:           write(file, &animatecnt, 4);
        !          1584: 
        !          1585:           write(file, show2dsector, MAXSECTORS >> 3);
        !          1586:           write(file, show2dwall, MAXWALLS >> 3);
        !          1587:           write(file, show2dsprite, MAXSPRITES >> 3);
        !          1588:           write(file, &automapping, 1);
        !          1589:           write(file, &shieldpoints, 2);
        !          1590:           write(file, &vampiretime, 2);
        !          1591:           write(file, &poisoned, 2);
        !          1592:           write(file, &poisontime, 2);
        !          1593: 
        !          1594:           write(file, &sparksx, sizeof(sparksx));
        !          1595:           write(file, &sparksy, sizeof(sparksy));
        !          1596:           write(file, &sparksz, sizeof(sparksz));
        !          1597: 
        !          1598:           write(file, &treasurescnt, sizeof(treasurescnt));
        !          1599:           write(file, &treasuresfound, sizeof(treasuresfound));
        !          1600:           write(file, &killcnt, sizeof(killcnt));
        !          1601:           write(file, &kills, sizeof(kills));
        !          1602:           write(file, &expgained, sizeof(expgained));
        !          1603: 
        !          1604:           close(file);
        !          1605:           return 1;
        !          1606:      }
        !          1607:      else
        !          1608:           return 0;
        !          1609: 
        !          1610: 
        !          1611: 
        !          1612: }
        !          1613: 
        !          1614: int
        !          1615: savedgamedat(int gn)
        !          1616: {
        !          1617: 
        !          1618:      int  fh = 0,
        !          1619:           nr = 0;
        !          1620:      char fname[20];
        !          1621:      char fsname[20];
        !          1622:      char savedgame[40];
        !          1623:      char temp[20];
        !          1624: 
        !          1625:      itoa(gn, temp, 10);
        !          1626:      strcpy(fname, "svgm");
        !          1627:      strcat(fname, temp);
        !          1628:      strcat(fname, ".map");
        !          1629: 
        !          1630:      itoa(gn, temp, 10);
        !          1631:      strcpy(fsname, "svgn");
        !          1632:      strcat(fsname, temp);
        !          1633:      strcat(fsname, ".dat");
        !          1634: 
        !          1635:      if (access(fname, F_OK) != 0)
        !          1636:           return 0;
        !          1637: 
        !          1638:      if (access(fsname, F_OK) != 0)
        !          1639:           return 0;
        !          1640: 
        !          1641:      fh = open(fsname, O_RDONLY | O_BINARY);
        !          1642: 
        !          1643:      if (fh < 0)
        !          1644:           return 0;
        !          1645: 
        !          1646:      if (gn == 10) {
        !          1647:           nr = read(fh, quicksavedgame.name, sizeof(struct savedgame));
        !          1648:      }
        !          1649:      else {
        !          1650:           nr = read(fh, savedgamenames[gn].name, sizeof(struct savedgame));
        !          1651:      }
        !          1652: 
        !          1653:      close(fh);
        !          1654: 
        !          1655:      if (nr != sizeof(struct savedgame))
        !          1656:           return 0;
        !          1657: 
        !          1658:      return 1;
        !          1659: 
        !          1660: }
        !          1661: 
        !          1662: void
        !          1663: loadplayerstuff(void)
        !          1664: {
        !          1665: 
        !          1666:      int  fh;
        !          1667:      int  i;
        !          1668:      char temp[40];
        !          1669: 
        !          1670:      fh = open(loadgamename, O_RDONLY | O_BINARY);
        !          1671: 
        !          1672:      read(fh, savedgamenames[0].name, sizeof(struct savedgame));
        !          1673:      read(fh, &player[0], sizeof(struct player));
        !          1674:      read(fh, &currweapon, sizeof(currweapon));
        !          1675:      read(fh, &selectedgun, sizeof(selectedgun));
        !          1676:      read(fh, &currentpotion, sizeof(currentpotion));
        !          1677:      read(fh, &helmettime, sizeof(helmettime));
        !          1678:      read(fh, &shadowtime, sizeof(shadowtime));
        !          1679:      read(fh, &nightglowtime, sizeof(nightglowtime));
        !          1680:      read(fh, &visibility, sizeof(visibility));
        !          1681:      read(fh, &brightness, sizeof(brightness));
        !          1682:      read(fh, &strongtime, sizeof(strongtime));
        !          1683:      read(fh, &invisibletime, sizeof(invisibletime));
        !          1684:      read(fh, &manatime, sizeof(manatime));
        !          1685:      read(fh, &thunderflash, sizeof(thunderflash));
        !          1686:      read(fh, &thundertime, sizeof(thundertime));
        !          1687: 
        !          1688:      read(fh, &currentorb, sizeof(currentorb));
        !          1689:      read(fh, &currweaponfired, sizeof(currweaponfired));
        !          1690:      read(fh, &currweaponanim, sizeof(currweaponanim));
        !          1691:      read(fh, &currweaponattackstyle, sizeof(currweaponattackstyle));
        !          1692:      read(fh, &currweaponflip, sizeof(currweaponflip));
        !          1693:      read(fh, &mapon, sizeof(mapon));
        !          1694: 
        !          1695:      read(fh, &totalclock, sizeof(totalclock));
        !          1696:      read(fh, &lockclock, sizeof(lockclock));
        !          1697:      read(fh, &synctics, sizeof(synctics));
        !          1698: 
        !          1699:      // Warning: only works if all pointers are in sector structures!
        !          1700:      for (i = MAXANIMATES - 1; i >= 0; i--)
        !          1701:           animateptr[i] = (long *) (animateptr[i] - ((long) sector));
        !          1702: 
        !          1703:      read(fh, animateptr, MAXANIMATES << 2);
        !          1704: 
        !          1705:      for (i = MAXANIMATES - 1; i >= 0; i--)
        !          1706:           animateptr[i] = (long *) (animateptr[i] + ((long) sector));
        !          1707: 
        !          1708:      read(fh, animategoal, MAXANIMATES << 2);
        !          1709:      read(fh, animatevel, MAXANIMATES << 2);
        !          1710:      read(fh, &animatecnt, 4);
        !          1711: 
        !          1712: 
        !          1713:      read(fh, show2dsector, MAXSECTORS >> 3);
        !          1714:      read(fh, show2dwall, MAXWALLS >> 3);
        !          1715:      read(fh, show2dsprite, MAXSPRITES >> 3);
        !          1716:      read(fh, &automapping, 1);
        !          1717:      read(fh, &shieldpoints, 2);
        !          1718:      read(fh, &vampiretime, 2);
        !          1719:      read(fh, &poisoned, 2);
        !          1720:      read(fh, &poisontime, 2);
        !          1721: 
        !          1722:      read(fh, &sparksx, sizeof(sparksx));
        !          1723:      read(fh, &sparksy, sizeof(sparksy));
        !          1724:      read(fh, &sparksz, sizeof(sparksz));
        !          1725: 
        !          1726:      read(fh, &treasurescnt, sizeof(treasurescnt));
        !          1727:      read(fh, &treasuresfound, sizeof(treasuresfound));
        !          1728:      read(fh, &killcnt, sizeof(killcnt));
        !          1729:      read(fh, &kills, sizeof(kills));
        !          1730:      read(fh, &expgained, sizeof(expgained));
        !          1731: 
        !          1732:      close(fh);
        !          1733: 
        !          1734: }
        !          1735: 
        !          1736: void
        !          1737: optionspage(void)
        !          1738: {
        !          1739: 
        !          1740:      int  which = 0;
        !          1741:      int  exit = 0;
        !          1742:      int  i;
        !          1743:      long goaltime;
        !          1744:      int  cnt = 0;
        !          1745: 
        !          1746:      struct thenames {
        !          1747:           long x;
        !          1748:           long y;
        !          1749:           short thename;
        !          1750:      }    danames[3] = {{
        !          1751:                107L, 35L, DASOUND
        !          1752:      },
        !          1753:      {
        !          1754:           97L, 72L, DAGAMEPLAY
        !          1755:      },
        !          1756:      {
        !          1757:           101L, 108L, DACONTROLS
        !          1758:      }
        !          1759:      };
        !          1760: 
        !          1761:      struct sthenames {
        !          1762:           long x;
        !          1763:           long y;
        !          1764:           short thename;
        !          1765:      }    sdanames[3] = {{
        !          1766:                254, 145, SFLASH4
        !          1767:      },
        !          1768:      {
        !          1769:           235, 183, SFLASH4 + 1
        !          1770:      },
        !          1771:      {
        !          1772:           253, 242, SFLASH4 + 2
        !          1773:      }
        !          1774:      };
        !          1775: 
        !          1776:      goaltime = totalclock + SCOTTSPEED;
        !          1777: 
        !          1778:      while (!exit) {
        !          1779: 
        !          1780:           if (svga == 0)
        !          1781:                permanentwritesprite(0L, 0L, ZOPS, 0, 0L, 0L, 319L, 199L, 0);
        !          1782:           else {
        !          1783:                rotatesprite(0L << 16, 0L << 16, 65536L, 0, VSOUNDA, 0, 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !          1784:                rotatesprite(0L << 16, 240L << 16, 65536L, 0, VSOUNDB, 0, 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
        !          1785:           }
        !          1786: 
        !          1787:           for (i = 0; i < 3; i++) {
        !          1788:                if (svga == 0) {
        !          1789:                     if (which == i) {
        !          1790:                          switch (cnt) {
        !          1791:                          case 0:
        !          1792:                               itemtoscreen(danames[which].x, danames[which].y,
        !          1793:                                            danames[which].thename, 0, 0);
        !          1794:                               break;
        !          1795:                          case 1:
        !          1796:                               itemtoscreen(danames[which].x, danames[which].y,
        !          1797:                                            ZFLASHER1 + 5 + which, 0, 0);
        !          1798:                               break;
        !          1799:                          case 2:
        !          1800:                               itemtoscreen(danames[which].x, danames[which].y,
        !          1801:                                            ZFLASHER2 + 5 + which, 0, 0);
        !          1802:                               break;
        !          1803:                          }
        !          1804:                     }
        !          1805:                }
        !          1806:                else {
        !          1807:                     switch (cnt) {
        !          1808:                     case 0:
        !          1809:                          itemtoscreen(sdanames[which].x, sdanames[which].y,
        !          1810:                                       sdanames[which].thename, 0, 0);
        !          1811:                          break;
        !          1812:                     case 1:
        !          1813:                          itemtoscreen(sdanames[which].x, sdanames[which].y,
        !          1814:                                       SFLASH1 + 7 + which, 0, 0);
        !          1815:                          break;
        !          1816:                     case 2:
        !          1817:                          itemtoscreen(sdanames[which].x, sdanames[which].y,
        !          1818:                                       SFLASH2 + 7 + which, 0, 0);
        !          1819:                          break;
        !          1820:                     }
        !          1821:                }
        !          1822:           }
        !          1823: 
        !          1824:           nextpage();
        !          1825: 
        !          1826:           if (totalclock >= goaltime) {
        !          1827: 
        !          1828:                goaltime = totalclock + SCOTTSPEED;
        !          1829:                cnt++;
        !          1830:                if (cnt > 2)
        !          1831:                     cnt = 0;
        !          1832: 
        !          1833:                if (keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) {
        !          1834:                     which--;
        !          1835:                     if (which < 0)
        !          1836:                          which = 2;
        !          1837:                }
        !          1838: 
        !          1839:                if (keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) {
        !          1840:                     which++;
        !          1841:                     if (which > 2)
        !          1842:                          which = 0;
        !          1843:                }
        !          1844: 
        !          1845:                if (keystatus[1] > 0) {
        !          1846:                     exit = 1;
        !          1847:                     keystatus[1] = 0;
        !          1848:                }
        !          1849: 
        !          1850:                if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !          1851:                     keystatus[0x1c] = keystatus[0x9c] = 0;
        !          1852:                     switch (which) {
        !          1853:                     case 0:
        !          1854:                          TEMPSND();
        !          1855:                          thesound();
        !          1856:                          break;
        !          1857:                     case 1:
        !          1858:                          TEMPSND();
        !          1859:                          thedifficulty();
        !          1860:                          break;
        !          1861:                     case 2:
        !          1862:                          TEMPSND();
        !          1863:                          thecontrols();
        !          1864:                          break;
        !          1865:                     }
        !          1866:                }
        !          1867:           }
        !          1868:      }
        !          1869: 
        !          1870: 
        !          1871: }
        !          1872: 
        !          1873: 
        !          1874: 
        !          1875: void
        !          1876: thesound(void)
        !          1877: {
        !          1878: 
        !          1879:      int  exit = 0;
        !          1880:      long goaltime;
        !          1881:      long bitchtime;
        !          1882:      long waittime;
        !          1883:      int  which = 0;
        !          1884:      int  musicslider = 0,
        !          1885:           fxslider = 0,
        !          1886:           playing = 0,
        !          1887:           stoped = 0,
        !          1888:           shuffle = 0;
        !          1889:      int  forward, track = 0;
        !          1890:      long dax1, dax2;
        !          1891:      long x1,
        !          1892:           y1;
        !          1893:      long cnt = tilesizy[KATIEASS];
        !          1894:      long xbase,ybase,xlen,ylen,xoff,yoff;
        !          1895:      short incr = 0, dapic, pic2;
        !          1896: 
        !          1897:      struct template {
        !          1898:           long x;
        !          1899:           long y;
        !          1900:           short daname;
        !          1901:      }    dastuff[22] = {{
        !          1902:                66L, 45L, CDMUVOL
        !          1903:      },
        !          1904:      {
        !          1905:           71L, 79L, CDMUVOL + 1
        !          1906:      },
        !          1907:      {
        !          1908:           184L, 23L, CDMUVOL + 2
        !          1909:      },
        !          1910:      {
        !          1911:           229L, 24L, CDMUVOL + 3
        !          1912:      },
        !          1913:      {
        !          1914:           216L, 76L, CDMUVOL + 4
        !          1915:      },
        !          1916:      {
        !          1917:           184L, 40L, CDMUVOL + 5
        !          1918:      },
        !          1919:      {
        !          1920:           225L, 40L, CDMUVOL + 6
        !          1921:      },
        !          1922:      {
        !          1923:           57L, 105L, CDMUVOL + 7
        !          1924:      },
        !          1925:      {
        !          1926:           57L, 117L, CDMUVOL + 8
        !          1927:      },
        !          1928:      {
        !          1929:           57L, 129L, CDMUVOL + 9
        !          1930:      },
        !          1931:      {
        !          1932:           57L, 141L, CDMUVOL + 10
        !          1933:      },
        !          1934:      {
        !          1935:           57L, 153L, CDMUVOL + 11
        !          1936:      },
        !          1937:      {
        !          1938:           142L, 105L, CDMUVOL + 12
        !          1939:      },
        !          1940:      {
        !          1941:           142L, 117L, CDMUVOL + 13
        !          1942:      },
        !          1943:      {
        !          1944:           142L, 129L, CDMUVOL + 14
        !          1945:      },
        !          1946:      {
        !          1947:           142L, 141L, CDMUVOL + 15
        !          1948:      },
        !          1949:      {
        !          1950:           142L, 153L, CDMUVOL + 16
        !          1951:      },
        !          1952:      {
        !          1953:           216L, 105L, CDMUVOL + 17
        !          1954:      },
        !          1955:      {
        !          1956:           216L, 117L, CDMUVOL + 18
        !          1957:      },
        !          1958:      {
        !          1959:           216L, 129L, CDMUVOL + 19
        !          1960:      },
        !          1961:      {
        !          1962:           216L, 141L, CDMUVOL + 20
        !          1963:      },
        !          1964:      {
        !          1965:           216L, 153L, CDMUVOL + 21
        !          1966:      }
        !          1967:      };
        !          1968: 
        !          1969:      musiclevel = (wMIDIVol >> 3);
        !          1970:      digilevel = (wDIGIVol >> 11);
        !          1971: 
        !          1972:      dax2 = (long) (digilevel * 5);
        !          1973:      dax1 = (long) (musiclevel * 5);
        !          1974: 
        !          1975:      goaltime = totalclock + 10L;
        !          1976:      bitchtime = totalclock + 10L;
        !          1977:      waittime = totalclock + 720L;
        !          1978: 
        !          1979:      dapic = KATIEAT + 2;
        !          1980: 
        !          1981:      if (svga == 0) {
        !          1982:           pic2 = ZCDPLAYER;
        !          1983:           xlen = tilesizx[ZCDPLAYER];
        !          1984:           ylen = tilesizy[ZCDPLAYER];
        !          1985:           xoff = 0;
        !          1986:           yoff = 0;
        !          1987:      }
        !          1988:      else {
        !          1989:           pic2 = 1228;
        !          1990:           xlen = tilesizx[1228];
        !          1991:           ylen = tilesizy[1228];
        !          1992:           xoff = -40;
        !          1993:           yoff = -16;
        !          1994:      }
        !          1995:      xbase = (xdim >> 1) - (xlen >> 1);
        !          1996:      ybase = (ydim >> 1) - (ylen >> 1);
        !          1997: 
        !          1998:      while (!exit) {
        !          1999:           rotatesprite(0L << 16, 240L << 16, 65536L, 0, VSOUNDB, 0, 0, 8 + 16,
        !          2000:                        0L, 0L, xdim - 1L, ydim - 1L);
        !          2001:           permanentwritesprite(xbase, ybase, pic2, 0,
        !          2002:                                0L, 0L, xdim-1L, ydim-1L, 0);
        !          2003:           itemtoscreen(xbase + dastuff[which].x + xoff,
        !          2004:                        ybase + dastuff[which].y + yoff,
        !          2005:                        dastuff[which].daname, 0, 0);
        !          2006: 
        !          2007:           itemtoscreen(xbase + 60L + dax1 + xoff,
        !          2008:                        ybase + 25L + yoff, DASLIDER, 0, 0);
        !          2009:           itemtoscreen(xbase + 60L + dax2 + xoff,
        !          2010:                        ybase + 60L + yoff, DASLIDER, 0, 0);
        !          2011: 
        !          2012:           if (playing) {
        !          2013:                itemtoscreen(xbase + dastuff[5].x + xoff,
        !          2014:                             ybase + dastuff[5].y + yoff,
        !          2015:                             REDSHUFFLE + 1, 0, 0);
        !          2016:           }
        !          2017:           if (stoped) {
        !          2018:                itemtoscreen(xbase + dastuff[6].x + xoff,
        !          2019:                             ybase + dastuff[6].y + yoff,
        !          2020:                             REDSHUFFLE + 2, 0, 0);
        !          2021:           }
        !          2022:           if (shuffle) {
        !          2023:                itemtoscreen(xbase + dastuff[4].x + xoff,
        !          2024:                             ybase + dastuff[4].y + yoff,
        !          2025:                             REDSHUFFLE, 0, 0);
        !          2026:           }
        !          2027:           if (track) {
        !          2028:                itemtoscreen(xbase + dastuff[track].x + xoff,
        !          2029:                             ybase + dastuff[track].y + yoff,
        !          2030:                             REDSHUFFLE + track - 4, 0, 0);
        !          2031: 
        !          2032:                if (cnt) {
        !          2033:                     x1 = (long) (((xdim >> 1) - tilesizx[KATIEASS]) >> 1);
        !          2034:                     y1 = (long) (ydim - tilesizy[KATIEASS]);
        !          2035:                }
        !          2036:                else {
        !          2037:                     x1 = (long) (((xdim >> 1) - tilesizx[dapic]) >> 1);
        !          2038:                     y1 = (long) (ydim - tilesizy[dapic]);
        !          2039:                }
        !          2040: 
        !          2041:                if (which == 9 && track == 9) {
        !          2042:                     if (totalclock > waittime) {
        !          2043:                          if (cnt) {
        !          2044:                               rotatesprite(xbase + (x1 << 16) + xoff,
        !          2045:                                            ybase + ((y1 + cnt) << 16) + yoff,
        !          2046:                                            65536L, 0, KATIEASS + incr, 0,
        !          2047:                                            0, 8 + 16,
        !          2048:                                            0L, 0L, xdim - 1L, ydim - 1L);
        !          2049:                               cnt--;
        !          2050:                               if (cnt % 8 == 0) {
        !          2051:                                    incr++;
        !          2052:                                    if (incr == 5) {
        !          2053:                                         incr = 0;
        !          2054:                                    }
        !          2055:                               }
        !          2056:                          }
        !          2057:                          else {
        !          2058:                               rotatesprite(xbase + (x1 << 16) + xoff,
        !          2059:                                            ybase + (y1 << 16) + yoff,
        !          2060:                                            65536L, 0, dapic, 0,
        !          2061:                                            0, 8 + 16,
        !          2062:                                            0L, 0L, xdim - 1L, ydim - 1L);
        !          2063:                          }
        !          2064:                     }
        !          2065:                }
        !          2066: 
        !          2067:                if (totalclock > bitchtime) {
        !          2068:                     bitchtime = totalclock + 10L;
        !          2069:                     if (forward) {
        !          2070:                          if (dapic < KATIEAT + 6) {
        !          2071:                               dapic++;
        !          2072:                          }
        !          2073:                          else {
        !          2074:                               forward = 0;
        !          2075:                          }
        !          2076:                     }
        !          2077:                     else {
        !          2078:                          if (dapic == KATIEAT + 2) {
        !          2079:                               forward = 1;
        !          2080:                               dapic = KATIEAT + 2;
        !          2081:                          }
        !          2082:                          else {
        !          2083:                               dapic--;
        !          2084:                          }
        !          2085:                     }
        !          2086:                }
        !          2087:           }
        !          2088: 
        !          2089:           if (totalclock > goaltime) {
        !          2090:                goaltime = totalclock + 10L;
        !          2091: 
        !          2092:                switch (which) {
        !          2093:                case 0:
        !          2094:                     musicslider = 1;
        !          2095:                     fxslider = 0;
        !          2096:                     break;
        !          2097:                case 1:
        !          2098:                     musicslider = 0;
        !          2099:                     fxslider = 1;
        !          2100:                     break;
        !          2101:                default:
        !          2102:                     musicslider = 0;
        !          2103:                     fxslider = 0;
        !          2104:                     break;
        !          2105:                }
        !          2106: 
        !          2107:                if (keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) {
        !          2108:                     which--;
        !          2109:                     if (which == 5 || which == 6)
        !          2110:                          which = 4;
        !          2111:                     if (which < 0)
        !          2112:                          which = 21;
        !          2113:                }
        !          2114: 
        !          2115:                if (keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) {
        !          2116:                     which++;
        !          2117:                     if (which == 5 || which == 6)
        !          2118:                          which = 7;
        !          2119:                     if (which > 21)
        !          2120:                          which = 0;
        !          2121:                }
        !          2122: 
        !          2123:                if (fxslider) {
        !          2124:                     if (keystatus[keys[KEYRIGHT]] > 0) {
        !          2125:                          dax2 += 5L;
        !          2126:                          digilevel++;
        !          2127:                          keystatus[keys[KEYRIGHT]] = 0;
        !          2128:                          if (dax2 > 80L)
        !          2129:                               dax2 = 80L;
        !          2130:                          if (digilevel > 16)
        !          2131:                               digilevel = 16;
        !          2132:                          SND_Mixer(0, digilevel);
        !          2133:                          SND_Sound(S_LOUDCHAINWALK);
        !          2134:                     }
        !          2135:                     if (keystatus[keys[KEYLEFT]] > 0) {
        !          2136:                          dax2 -= 5L;
        !          2137:                          digilevel--;
        !          2138:                          keystatus[keys[KEYLEFT]] = 0;
        !          2139:                          if (dax2 < 0L)
        !          2140:                               dax2 = 0L;
        !          2141:                          if (digilevel < 0)
        !          2142:                               digilevel = 0;
        !          2143:                          SND_Mixer(0, digilevel);
        !          2144:                          SND_Sound(S_LOUDCHAINWALK);
        !          2145:                     }
        !          2146:                }
        !          2147: 
        !          2148:                else if (musicslider) {
        !          2149:                     if (keystatus[keys[KEYRIGHT]] > 0) {
        !          2150:                          dax1 += 5L;
        !          2151:                          musiclevel++;
        !          2152:                          keystatus[keys[KEYRIGHT]] = 0;
        !          2153:                          if (dax1 > 80L)
        !          2154:                               dax1 = 80L;
        !          2155:                          if (musiclevel > 16)
        !          2156:                               musiclevel = 16;
        !          2157:                          SND_Mixer(1, musiclevel);
        !          2158:                     }
        !          2159:                     if (keystatus[keys[KEYLEFT]] > 0) {
        !          2160:                          dax1 -= 5L;
        !          2161:                          musiclevel--;
        !          2162:                          keystatus[keys[KEYLEFT]] = 0;
        !          2163:                          if (dax1 < 0L)
        !          2164:                               dax1 = 0L;
        !          2165:                          if (musiclevel < 0)
        !          2166:                               musiclevel = 0;
        !          2167:                          SND_Mixer(1, musiclevel);
        !          2168:                     }
        !          2169:                }
        !          2170:                if (keystatus[1] > 0) {
        !          2171:                     exit = 1;
        !          2172:                }
        !          2173:                else if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !          2174:                     keystatus[0x1c] = keystatus[0x9c] = 0;
        !          2175:                     switch (which) {
        !          2176:                     case 2:
        !          2177:                          playing = 1;
        !          2178:                          stoped = 0;
        !          2179:                          shuffle = 0;
        !          2180:                          track = 0;
        !          2181:                          break;
        !          2182:                     case 3:
        !          2183:                          playing = 0;
        !          2184:                          stoped = 1;
        !          2185:                          shuffle = 0;
        !          2186:                          track = 0;
        !          2187:                          musicoverride = -1;
        !          2188:                          break;
        !          2189:                     case 4:
        !          2190:                          playing = 0;
        !          2191:                          stoped = 0;
        !          2192:                          shuffle = 1;
        !          2193:                          track = 0;
        !          2194:                          dolevelmusic(rand() % 10);
        !          2195:                          // SND_StartMusic(rand()%25);
        !          2196:                          break;
        !          2197:                     }
        !          2198:                     if (which > 6 && which < 22) {
        !          2199:                          track = which;
        !          2200:                          dolevelmusic(track - 7);
        !          2201:                          forward = 1;
        !          2202:                          // SND_StartMusic(track);
        !          2203:                          if (which != 9) {
        !          2204:                               waittime = totalclock + 720L;
        !          2205:                               cnt = tilesizy[KATIEASS];
        !          2206:                          }
        !          2207:                          musicoverride = track - 7;
        !          2208:                     }
        !          2209:                     else {
        !          2210:                          track = 0;
        !          2211:                          musicoverride = -1;
        !          2212:                     }
        !          2213:                }
        !          2214:           }
        !          2215:           nextpage();
        !          2216:      }
        !          2217: 
        !          2218: }
        !          2219: 
        !          2220: void
        !          2221: thecontrols(void)
        !          2222: {
        !          2223:      int  i;
        !          2224:      int  exit = 0;
        !          2225:      int  which = 0;
        !          2226:      long goaltime;
        !          2227:      int  reverse = 0;
        !          2228: 
        !          2229:      struct dastuff {
        !          2230:           long x;
        !          2231:           long y;
        !          2232:           short daname;
        !          2233:           long val;
        !          2234:           long off;
        !          2235:           long off2;
        !          2236:      }    dacontrols[14] = {{
        !          2237:                25L, 36L, ZCONTROLS + 1, 0L, 77L, 77L
        !          2238:      },
        !          2239:      {
        !          2240:           25L, 52L, ZCONTROLS + 2, 0L, 77L, 77L
        !          2241:      },
        !          2242: 
        !          2243:      {
        !          2244:           22L, 107L, ZCONTROLS + 3, 0L, 99L, 99L
        !          2245:      },
        !          2246:      {
        !          2247:           26L, 124L, ZCONTROLS + 4, 0L, 99L, 99L
        !          2248:      },
        !          2249:      {
        !          2250:           27L, 138L, ZCONTROLS + 5, 0L, 99L, 99L
        !          2251:      },
        !          2252:      {
        !          2253:           28L, 152L, ZCONTROLS + 6, 0L, 99L, 99L
        !          2254:      },
        !          2255:      {
        !          2256:           28L, 166L, ZCONTROLS + 7, 0L, 99L, 99L
        !          2257:      },
        !          2258:      {
        !          2259:           28L, 180L, ZCONTROLS + 8, 0L, 99L, 99L
        !          2260:      },
        !          2261: 
        !          2262:      {
        !          2263:           177L, 68L, ZCONTROLS + 9, 0L, 255L, 255L
        !          2264:      },
        !          2265:      {
        !          2266:           177L, 81L, ZCONTROLS + 10, 0L, 255L, 255L
        !          2267:      },
        !          2268:      {
        !          2269:           177L, 95L, ZCONTROLS + 11, 0L, 255L, 255L
        !          2270:      },
        !          2271:      {
        !          2272:           178L, 110L, ZCONTROLS + 12, 0L, 255L, 255L
        !          2273:      },
        !          2274:      {
        !          2275:           235L, 125L, ZZON, 0L, 255L, 255L
        !          2276:      },
        !          2277:      {
        !          2278:           262L, 125L, ZZOFF, 0L, 255L, 255L
        !          2279:      }
        !          2280:      };
        !          2281: 
        !          2282:      goaltime = totalclock + 10L;
        !          2283: 
        !          2284:      // set the controls values
        !          2285:      // for the mouse
        !          2286:      dacontrols[0].val = mousxspeed;
        !          2287:      dacontrols[1].val = mousyspeed;
        !          2288:      // for the avenger
        !          2289: 
        !          2290:      // for the wingman
        !          2291:      if (wingmanflag) {
        !          2292:           dacontrols[8].val = wingmanyawsens;
        !          2293:           dacontrols[9].val = wingmanpitchsens;
        !          2294:           dacontrols[10].val = wingmanrollsens;
        !          2295:           dacontrols[11].val = wingmanzsens;
        !          2296:           dacontrols[12].val = wingmanzreverse;
        !          2297:      }
        !          2298: 
        !          2299: 
        !          2300:      // for the mouse
        !          2301:      dacontrols[0].off2 = dacontrols[0].off + (dacontrols[0].val * 3);
        !          2302:      dacontrols[1].off2 = dacontrols[1].off + (dacontrols[1].val * 3);
        !          2303:      // for the avenger
        !          2304: 
        !          2305:      // for the wingman
        !          2306:      if (wingmanflag) {
        !          2307:           dacontrols[8].off2 = dacontrols[8].off + (dacontrols[8].val * 3);
        !          2308:           dacontrols[9].off2 = dacontrols[9].off + (dacontrols[9].val * 3);
        !          2309:           dacontrols[10].off2 = dacontrols[10].off + (dacontrols[10].val * 3);
        !          2310:           dacontrols[11].off2 = dacontrols[11].off + (dacontrols[11].val * 3);
        !          2311:           dacontrols[12].off2 = dacontrols[12].off + (dacontrols[12].val * 3);
        !          2312:      }
        !          2313: 
        !          2314:      while (!exit) {
        !          2315:           permanentwritesprite((xdim>>1)-160L, (ydim>>1)-100L,
        !          2316:                                ZCONTROLS, 0,
        !          2317:                                (xdim>>1)-160L, (ydim>>1)-100L,
        !          2318:                                (xdim>>1)+160L-1L, (ydim>>1)+100L-1L, 0);
        !          2319:           for (i = 0; i < 14; i++) {
        !          2320:                if (i == which) {
        !          2321:                     itemtoscreen((xdim>>1)-160L+dacontrols[i].x,
        !          2322:                                  (ydim>>1)-100L+dacontrols[i].y,
        !          2323:                                  dacontrols[i].daname, 0, 0);
        !          2324:                }
        !          2325:                if (i < 12) {
        !          2326:                     itemtoscreen((xdim>>1)-160L+dacontrols[i].off2,
        !          2327:                                  (ydim>>1)-100L+dacontrols[i].y,
        !          2328:                                  ZZSLIDER, 0, 0);
        !          2329:                }
        !          2330: #if 0
        !          2331:                if (reverse == 0) {
        !          2332:                     itemtoscreen(dacontrols[i].x, dacontrols[i].y, ZZON, 0, 0);
        !          2333:                }
        !          2334:                else {
        !          2335:                     itemtoscreen(dacontrols[i].x, dacontrols[i].y, ZZOFF, 0, 0);
        !          2336:                }
        !          2337: #endif
        !          2338:           }
        !          2339:           nextpage();
        !          2340:           if (totalclock > goaltime) {
        !          2341:                goaltime = totalclock + 10L;
        !          2342:                if (keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) {
        !          2343:                     which--;
        !          2344:                     if (which < 0)
        !          2345:                          which = 13;
        !          2346:                }
        !          2347:                if (keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) {
        !          2348:                     which++;
        !          2349:                     if (which > 13)
        !          2350:                          which = 0;
        !          2351:                }
        !          2352:                if (which < 12) {
        !          2353:                     if (keystatus[keys[KEYRIGHT]] > 0) {
        !          2354:                          dacontrols[which].val++;
        !          2355:                          keystatus[keys[KEYRIGHT]] = 0;
        !          2356:                          if (dacontrols[which].val > 10)
        !          2357:                               dacontrols[which].val = 10;
        !          2358:                     }
        !          2359:                     if (keystatus[keys[KEYLEFT]] > 0) {
        !          2360:                          dacontrols[which].val--;
        !          2361:                          keystatus[keys[KEYRIGHT]] = 0;
        !          2362:                          if (dacontrols[which].val < 0)
        !          2363:                               dacontrols[which].val = 0;
        !          2364:                     }
        !          2365:                }
        !          2366:                else {
        !          2367:                     if (keystatus[keys[KEYRIGHT]] > 0) {
        !          2368:                          reverse = 1;
        !          2369:                          keystatus[keys[KEYRIGHT]] = 0;
        !          2370:                     }
        !          2371:                     if (keystatus[keys[KEYLEFT]] > 0) {
        !          2372:                          reverse = 0;
        !          2373:                          keystatus[keys[KEYRIGHT]] = 0;
        !          2374:                     }
        !          2375:                }
        !          2376:                dacontrols[which].off2 = dacontrols[which].off + (dacontrols[which].val * 3);
        !          2377:                if (keystatus[1] > 0) {
        !          2378:                     exit = 1;
        !          2379:                }
        !          2380:                else if (keystatus[0x1c] > 0 || keystatus[0x9c] > 0) {
        !          2381:                     // exit=2;
        !          2382:                     if (which == 12 || which == 13) {
        !          2383: 
        !          2384:                     }
        !          2385:                }
        !          2386:           }
        !          2387:      }
        !          2388:      mousxspeed = dacontrols[0].val;
        !          2389:      mousyspeed = dacontrols[1].val;
        !          2390: 
        !          2391:      if (wingmanflag) {
        !          2392:           wingmanyawsens = dacontrols[8].val;
        !          2393:           wingmanpitchsens = dacontrols[9].val;
        !          2394:           wingmanrollsens = dacontrols[10].val;
        !          2395:           wingmanzsens = dacontrols[11].val;
        !          2396:           wingmanzreverse = dacontrols[12].val;
        !          2397:      }
        !          2398: 
        !          2399: 
        !          2400: }
        !          2401: 
        !          2402: 
        !          2403: /***************************************************************************
        !          2404:  *   TEKERR    - crirical error handler for TEKWAR                         *
        !          2405:  *                                                                         *
        !          2406:  *                                                     12/15/94 Jeff S.    *
        !          2407:  ***************************************************************************/
        !          2408: 
        !          2409: int  criterr_flag;
        !          2410: 
        !          2411: int  __far
        !          2412: cehndlr(unsigned deverr, unsigned errcode, unsigned far * devhdr)
        !          2413: {
        !          2414:      criterr_flag = errcode;
        !          2415:      return (_HARDERR_IGNORE);
        !          2416: }
        !          2417: 
        !          2418: 
        !          2419: void
        !          2420: installcrerrhndlr(void)
        !          2421: {
        !          2422:      _harderr(cehndlr);
        !          2423: 
        !          2424:      return;
        !          2425: }
        !          2426: 
        !          2427: 
        !          2428: 
        !          2429: /***************************************************************************
        !          2430:  *   screen effects for TEKWAR follow...fades, palette stuff, etc..        *
        !          2431:  *                                                                         *
        !          2432:  *                                                     12/15/94 Jeff S.    *
        !          2433:  ***************************************************************************/
        !          2434: 
        !          2435: 
        !          2436: 
        !          2437: #define   MESSIAHRANDOMKEY    215
        !          2438: #define   LEDRANDOMKEY        10
        !          2439: 
        !          2440: char forcemessiah = 0;
        !          2441: long messcnt;
        !          2442: long ledcnt;
        !          2443: char ledflash;
        !          2444: char tremors;
        !          2445: char dofadein = 0;
        !          2446: 
        !          2447: #define   DEADTIME       2   // # minutes of nothing happening
        !          2448: #define   FLASHINTERVAL  20
        !          2449: 
        !          2450: long passlock,
        !          2451:      lastastep,
        !          2452:      lastbstep,
        !          2453:      astep,
        !          2454:      bstep;
        !          2455: 
        !          2456: extern char pee;
        !          2457: extern char flashflag;
        !          2458: 
        !          2459: void 
        !          2460: screenfx(struct player * plr)
        !          2461: {
        !          2462: 
        !          2463:      updatepaletteshifts();
        !          2464: 
        !          2465:      return;
        !          2466: }
        !          2467: 
        !          2468: 
        !          2469: #define   MAXSTRLEN      30
        !          2470: 
        !          2471: //
        !          2472: // (extern asm template)
        !          2473: //
        !          2474: // extern int near asm_main (int *parmeter1, int parameter2);
        !          2475: // Extern must be EXACT prototype.
        !          2476: //
        !          2477:  //  #pragma aux asm_main "*_"             /* Define the auxilary function. */ \
        !          2478:  //    parm caller     [eax] [ebx]         /* Calling parameters.           */ \
        !          2479:  //    value           [eax]               /* Return value.                 */ \
        !          2480: //    modify          [ecx]; // Non parameter registers that will be altered.
        !          2481: 
        !          2482: extern void near asmwaitvrt(int parm1);
        !          2483: #pragma aux asmwaitvrt  "*_"       \
        !          2484: parm caller[ecx] \
        !          2485:      modify[eax edx];
        !          2486: 
        !          2487: extern void near asmsetpalette(char *pal);
        !          2488: #pragma aux asmsetpalette "*_"     \
        !          2489: parm caller[esi] \
        !          2490:      modify[eax ecx edx];
        !          2491: 
        !          2492: void
        !          2493: clearpal(void)
        !          2494: {
        !          2495:      short i;
        !          2496: 
        !          2497:      outp(PEL_WRITE_ADR, 0);
        !          2498:      for (i = 0; i < 768; i++)
        !          2499:           outp(PEL_DATA, 0x00);
        !          2500: 
        !          2501:      return;
        !          2502: }
        !          2503: 
        !          2504: 
        !          2505: char palette1[256][3],
        !          2506:      palette2[256][3];
        !          2507: 
        !          2508: void
        !          2509: getpalette(char *palette)
        !          2510: {
        !          2511:      int  i;
        !          2512: 
        !          2513:      outp(PEL_READ_ADR, 0);
        !          2514:      for (i = 0; i < 768; i++)
        !          2515:           *palette++ = inp(PEL_DATA);
        !          2516: }
        !          2517: 
        !          2518: void
        !          2519: fillpalette(int red, int green, int blue)
        !          2520: {
        !          2521:      int  i;
        !          2522: 
        !          2523:      outp(PEL_WRITE_ADR, 0);
        !          2524:      for (i = 0; i < 256; i++) {
        !          2525:           outp(PEL_DATA, red);
        !          2526:           outp(PEL_DATA, green);
        !          2527:           outp(PEL_DATA, blue);
        !          2528:      }
        !          2529: }
        !          2530: 
        !          2531: 
        !          2532: char foggy = 0;
        !          2533: 
        !          2534: void
        !          2535: fadeout(int start, int end, int red, int green, int blue, int steps)
        !          2536: {
        !          2537:      int  i,
        !          2538:           j,
        !          2539:           orig,
        !          2540:           delta;
        !          2541:      char *origptr,
        !          2542:          *newptr;
        !          2543: 
        !          2544:      asmwaitvrt(1);
        !          2545:      getpalette(&palette1[0][0]);
        !          2546:      memcpy(palette2, palette1, 768);
        !          2547: 
        !          2548:      for (i = 0; i < steps; i++) {
        !          2549:           origptr = &palette1[start][0];
        !          2550:           newptr = &palette2[start][0];
        !          2551:           for (j = start; j <= end; j++) {
        !          2552:                orig = *origptr++;
        !          2553:                delta = red - orig;
        !          2554:                *newptr++ = orig + delta * i / steps;
        !          2555:                orig = *origptr++;
        !          2556:                delta = green - orig;
        !          2557:                *newptr++ = orig + delta * i / steps;
        !          2558:                orig = *origptr++;
        !          2559:                delta = blue - orig;
        !          2560:                *newptr++ = orig + delta * i / steps;
        !          2561:           }
        !          2562: 
        !          2563:           asmwaitvrt(1);
        !          2564:           asmsetpalette(&palette2[0][0]);
        !          2565:      }
        !          2566: 
        !          2567:      if (foggy == 0)
        !          2568:           fillpalette(red, green, blue);
        !          2569: 
        !          2570:      return;
        !          2571: }
        !          2572: 
        !          2573: 
        !          2574: void
        !          2575: fadein(int start, int end, int steps)
        !          2576: {
        !          2577:      int  i,
        !          2578:           j,
        !          2579:           delta;
        !          2580: 
        !          2581:      if (steps == 0) {
        !          2582:           return;
        !          2583:      }
        !          2584: 
        !          2585:      asmwaitvrt(1);
        !          2586:      getpalette(&palette1[0][0]);
        !          2587:      memcpy(&palette2[0][0], &palette1[0][0], sizeof(palette1));
        !          2588: 
        !          2589:      start *= 3;
        !          2590:      end = end * 3 + 2;
        !          2591: 
        !          2592:      // fade through intermediate frames
        !          2593:      for (i = 0; i < steps; i++) {
        !          2594:           for (j = start; j <= end; j++) {
        !          2595:                delta = palette[j] - palette1[0][j];
        !          2596:                palette2[0][j] = palette1[0][j] + delta * i / steps;
        !          2597:           }
        !          2598: 
        !          2599:           asmwaitvrt(1);
        !          2600:           asmsetpalette(&palette2[0][0]);
        !          2601:      }
        !          2602: 
        !          2603:      // final color
        !          2604:      asmsetpalette(palette);
        !          2605: 
        !          2606:      dofadein = 0;
        !          2607:      // clearkeys();
        !          2608: }
        !          2609: 
        !          2610: 
        !          2611: void
        !          2612: fog1(void)
        !          2613: {
        !          2614:      if (foggy == 0) {
        !          2615:           foggy = 1;
        !          2616:           fadeout(1, 254, 8, 8, 10, 2);
        !          2617:      }
        !          2618:      else {
        !          2619:           foggy = 0;
        !          2620:           fadein(0, 255, 2);
        !          2621:      }
        !          2622: }
        !          2623: 
        !          2624: 
        !          2625: void
        !          2626: fog2(void)
        !          2627: {
        !          2628:      char *lookptr;
        !          2629: 
        !          2630:      lookptr = palookup[0];
        !          2631:      palookup[0] = palookup[1];
        !          2632:      palookup[1] = lookptr;
        !          2633: }
        !          2634: 
        !          2635: void
        !          2636: makefxlookups(void)
        !          2637: {
        !          2638:      char palbuf[256];
        !          2639:      short i;
        !          2640: 
        !          2641:      for (i = 0; i < 256; i++)
        !          2642:           palbuf[i] = *(palookup[0] + i);
        !          2643: 
        !          2644:      // makepalookup(1, palbuf, 60,60,60,1);
        !          2645:      makepalookup(1, palbuf, 60, 10, 10, 1);
        !          2646: }
        !          2647: 
        !          2648: 
        !          2649: 
        !          2650: #define   NUMWHITESHIFTS      3
        !          2651: #define   WHITESTEPS          20
        !          2652: #define   WHITETICS           6
        !          2653: 
        !          2654: #define   NUMREDSHIFTS        4
        !          2655: #define   REDSTEPS            8
        !          2656: 
        !          2657: #define   NUMGREENSHIFTS      4
        !          2658: #define   GREENSTEPS          8
        !          2659: 
        !          2660: #define   NUMBLUESHIFTS       4
        !          2661: #define   BLUESTEPS           8
        !          2662: 
        !          2663: char whiteshifts[NUMREDSHIFTS][768];
        !          2664: char redshifts[NUMREDSHIFTS][768];
        !          2665: char greenshifts[NUMGREENSHIFTS][768];
        !          2666: char blueshifts[NUMBLUESHIFTS][768];
        !          2667: 
        !          2668: int  redcount,
        !          2669:      whitecount,
        !          2670:      greencount,
        !          2671:      bluecount;
        !          2672: char palshifted;
        !          2673: 
        !          2674: extern char palette[];
        !          2675: 
        !          2676: void
        !          2677: initpaletteshifts(void)
        !          2678: {
        !          2679:      char *workptr,
        !          2680:          *baseptr;
        !          2681:      int  i,
        !          2682:           j,
        !          2683:           delta;
        !          2684: 
        !          2685:      for (i = 1; i <= NUMREDSHIFTS; i++) {
        !          2686:           workptr = (char *) &redshifts[i - 1][0];
        !          2687:           baseptr = &palette[0];
        !          2688:           for (j = 0; j <= 255; j++) {
        !          2689:                delta = 64 - *baseptr;
        !          2690:                *workptr++ = *baseptr++ + delta * i / REDSTEPS;
        !          2691:                delta = -*baseptr;
        !          2692:                *workptr++ = *baseptr++ + delta * i / REDSTEPS;
        !          2693:                delta = -*baseptr;
        !          2694:                *workptr++ = *baseptr++ + delta * i / REDSTEPS;
        !          2695:           }
        !          2696:      }
        !          2697: 
        !          2698:      for (i = 1; i <= NUMWHITESHIFTS; i++) {
        !          2699:           workptr = (char *) &whiteshifts[i - 1][0];
        !          2700:           baseptr = &palette[0];
        !          2701:           for (j = 0; j <= 255; j++) {
        !          2702:                delta = 64 - *baseptr;
        !          2703:                *workptr++ = *baseptr++ + delta * i / WHITESTEPS;
        !          2704:                delta = 62 - *baseptr;
        !          2705:                *workptr++ = *baseptr++ + delta * i / WHITESTEPS;
        !          2706:                delta = 0 - *baseptr;
        !          2707:                *workptr++ = *baseptr++ + delta * i / WHITESTEPS;
        !          2708:           }
        !          2709:      }
        !          2710: 
        !          2711:      for (i = 1; i <= NUMGREENSHIFTS; i++) {
        !          2712:           workptr = (char *) &greenshifts[i - 1][0];
        !          2713:           baseptr = &palette[0];
        !          2714:           for (j = 0; j <= 255; j++) {
        !          2715:                delta = -*baseptr;
        !          2716:                *workptr++ = *baseptr++ + delta * i / GREENSTEPS;
        !          2717:                delta = 64 - *baseptr;
        !          2718:                *workptr++ = *baseptr++ + delta * i / GREENSTEPS;
        !          2719:                delta = -*baseptr;
        !          2720:                *workptr++ = *baseptr++ + delta * i / GREENSTEPS;
        !          2721:           }
        !          2722:      }
        !          2723: 
        !          2724:      for (i = 1; i <= NUMBLUESHIFTS; i++) {
        !          2725:           workptr = (char *) &blueshifts[i - 1][0];
        !          2726:           baseptr = &palette[0];
        !          2727:           for (j = 0; j <= 255; j++) {
        !          2728:                delta = -*baseptr;
        !          2729:                *workptr++ = *baseptr++ + delta * i / BLUESTEPS;
        !          2730:                delta = -*baseptr;
        !          2731:                *workptr++ = *baseptr++ + delta * i / BLUESTEPS;
        !          2732:                delta = 64 - *baseptr;
        !          2733:                *workptr++ = *baseptr++ + delta * i / BLUESTEPS;
        !          2734:           }
        !          2735:      }
        !          2736: 
        !          2737: 
        !          2738:      return;
        !          2739: }
        !          2740: 
        !          2741: void
        !          2742: startgreenflash(int greentime)
        !          2743: {
        !          2744:      greencount = 0;
        !          2745: 
        !          2746:      NOTFIXED
        !          2747: 
        !          2748:           greencount += greentime;
        !          2749: 
        !          2750:      if (greencount < 0) {
        !          2751:           greencount = 0;
        !          2752:      }
        !          2753: 
        !          2754: }
        !          2755: 
        !          2756: void
        !          2757: startblueflash(int bluetime)
        !          2758: {
        !          2759:      bluecount = 0;
        !          2760: 
        !          2761:      NOTFIXED
        !          2762: 
        !          2763:           bluecount += bluetime;
        !          2764: 
        !          2765:      if (bluecount < 0) {
        !          2766:           bluecount = 0;
        !          2767:      }
        !          2768: 
        !          2769: }
        !          2770: 
        !          2771: 
        !          2772: void
        !          2773: startredflash(int damage)
        !          2774: {
        !          2775: 
        !          2776: 
        !          2777:      redcount = 0;
        !          2778: 
        !          2779:      NOTFIXED
        !          2780: 
        !          2781:           redcount += damage;
        !          2782: 
        !          2783:      if (redcount < 0) {
        !          2784:           redcount = 0;
        !          2785:      }
        !          2786: }
        !          2787: 
        !          2788: void
        !          2789: startwhiteflash(int bonus)
        !          2790: {
        !          2791: 
        !          2792:      whitecount = 0;
        !          2793: 
        !          2794:      NOTFIXED
        !          2795: 
        !          2796:           whitecount += bonus;
        !          2797: 
        !          2798:      if (whitecount < 0) {
        !          2799:           whitecount = 0;
        !          2800:      }
        !          2801: 
        !          2802: }
        !          2803: 
        !          2804: 
        !          2805: void
        !          2806: updatepaletteshifts(void)
        !          2807: {
        !          2808:      int  red,
        !          2809:           white,
        !          2810:           green,
        !          2811:           blue;
        !          2812: 
        !          2813:      if (whitecount) {
        !          2814:           white = whitecount / WHITETICS + 1;
        !          2815:           if (white > NUMWHITESHIFTS)
        !          2816:                white = NUMWHITESHIFTS;
        !          2817:           whitecount -= synctics;
        !          2818:           if (whitecount < 0)
        !          2819:                whitecount = 0;
        !          2820:      }
        !          2821:      else {
        !          2822:           white = 0;
        !          2823:      }
        !          2824: 
        !          2825:      if (redcount) {
        !          2826:           red = redcount / 10 + 1;
        !          2827:           if (red > NUMREDSHIFTS)
        !          2828:                red = NUMREDSHIFTS;
        !          2829:           redcount -= synctics;
        !          2830:           if (redcount < 0)
        !          2831:                redcount = 0;
        !          2832:      }
        !          2833:      else {
        !          2834:           red = 0;
        !          2835:      }
        !          2836: 
        !          2837:      if (greencount) {
        !          2838:           green = greencount / 10 + 1;
        !          2839:           if (green > NUMGREENSHIFTS)
        !          2840:                green = NUMGREENSHIFTS;
        !          2841:           greencount -= synctics;
        !          2842:           if (greencount < 0)
        !          2843:                greencount = 0;
        !          2844:      }
        !          2845:      else {
        !          2846:           green = 0;
        !          2847:      }
        !          2848: 
        !          2849:      if (bluecount) {
        !          2850:           blue = bluecount / 10 + 1;
        !          2851:           if (blue > NUMBLUESHIFTS)
        !          2852:                blue = NUMBLUESHIFTS;
        !          2853:           bluecount -= synctics;
        !          2854:           if (bluecount < 0)
        !          2855:                bluecount = 0;
        !          2856:      }
        !          2857:      else {
        !          2858:           blue = 0;
        !          2859:      }
        !          2860: 
        !          2861:      if (red) {
        !          2862:           asmwaitvrt(1);
        !          2863:           asmsetpalette(redshifts[red - 1]);
        !          2864:           palshifted = 1;
        !          2865:      }
        !          2866:      else if (white) {
        !          2867:           asmwaitvrt(1);
        !          2868:           asmsetpalette(whiteshifts[white - 1]);
        !          2869:           palshifted = 1;
        !          2870:      }
        !          2871:      else if (green) {
        !          2872:           asmwaitvrt(1);
        !          2873:           asmsetpalette(greenshifts[green - 1]);
        !          2874:           palshifted = 1;
        !          2875:      }
        !          2876:      else if (blue) {
        !          2877:           asmwaitvrt(1);
        !          2878:           asmsetpalette(blueshifts[blue - 1]);
        !          2879:           palshifted = 1;
        !          2880:      }
        !          2881: 
        !          2882:      else if (palshifted) {
        !          2883:           asmwaitvrt(1);
        !          2884:           asmsetpalette(&palette[0]);   // back to normal
        !          2885:           // setbrightness(gbrightness);
        !          2886:           setbrightness(brightness, (char *) &palette[0]);
        !          2887:           palshifted = 0;
        !          2888:      }
        !          2889: 
        !          2890:      return;
        !          2891: }
        !          2892: 
        !          2893: 
        !          2894: void
        !          2895: finishpaletteshifts(void)
        !          2896: {
        !          2897:      if (palshifted == 1) {
        !          2898:           palshifted = 0;
        !          2899:           asmwaitvrt(1);
        !          2900:           asmsetpalette(&palette[0]);
        !          2901:      }
        !          2902: 
        !          2903:      return;
        !          2904: }
        !          2905: 
        !          2906: #if 0
        !          2907: void 
        !          2908: clearkeys(void)
        !          2909: {
        !          2910: 
        !          2911:      memset(keystatus, 0, sizeof(keystatus));
        !          2912: 
        !          2913:      // return;
        !          2914: }
        !          2915: #endif
        !          2916: 
        !          2917: 
        !          2918: //JUST USING THIS FOR NOW
        !          2919: void 
        !          2920: TEMPSND(void)
        !          2921: {
        !          2922:      SND_Sound(rand() % 145);
        !          2923: }
        !          2924: 
        !          2925: void 
        !          2926: cleanup(void)
        !          2927: {
        !          2928: 
        !          2929:      currweapon = 4;
        !          2930:      selectedgun = 4;
        !          2931:      currentpotion = 0;
        !          2932:      helmettime = -1;
        !          2933:      shadowtime = -1;
        !          2934:      nightglowtime = -1;
        !          2935:      strongtime = -1;
        !          2936:      invisibletime = -1;
        !          2937:      manatime = -1;
        !          2938:      currentorb = 0;
        !          2939:      currweaponfired = 3;
        !          2940:      currweaponanim = 0;
        !          2941:      currweaponattackstyle = 0;
        !          2942:      currweaponflip = 0;
        !          2943: 
        !          2944: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.