|
|
1.1 ! root 1: /*************************************************************************** ! 2: * TEKMSC.C - screenfx, menus, flic stuff etc. for Tekwar * ! 3: * * ! 4: * * ! 5: ***************************************************************************/ ! 6: ! 7: #include "stdio.h" ! 8: #include "string.h" ! 9: #include "stdarg.h" ! 10: #include "stdlib.h" ! 11: #include "time.h" ! 12: #include "io.h" ! 13: #include "fcntl.h" ! 14: #include "sys\types.h" ! 15: #include "sys\stat.h" ! 16: #include "dos.h" ! 17: #include "build.h" ! 18: #include "names.h" ! 19: ! 20: #include "tekwar.h" ! 21: ! 22: #define MAXLOADSAVEOPTS 5 ! 23: #define MAXLOADSAVESIZE 12 ! 24: ! 25: #define PEL_WRITE_ADR 0x3c8 ! 26: #define PEL_READ_ADR 0x3c7 ! 27: #define PEL_DATA 0x3c9 ! 28: ! 29: #define NUMWHITESHIFTS 3 ! 30: #define WHITESTEPS 20 ! 31: #define WHITETICS 6 ! 32: #define NUMREDSHIFTS 4 ! 33: #define REDSTEPS 8 ! 34: ! 35: #define MENUQUITGAME 4 ! 36: #define MENULOADGAME 6 ! 37: #define MENUSAVEGAME 7 ! 38: #define MENUSOUNDMUS 8 ! 39: #define MENUMOUSEADJ 9 ! 40: #define MENUSCREENADJ 10 ! 41: #define HELPSCREEN 99 ! 42: ! 43: #define HCSCALE 100 ! 44: #define AMMOSCALE 10 ! 45: ! 46: #define AVERAGEFRAMES 16 ! 47: #define MFONTYSTEP 12 ! 48: #define MAXSUBOPTIONS 6 ! 49: ! 50: //jsa new 9/14 ! 51: extern void menusong(int); ! 52: extern void cd_play(void); ! 53: extern void cd_resumeplay(void); ! 54: extern void cd_stopplay(void); ! 55: extern void cd_advancetrack(void); ! 56: extern void cd_retardtrack(void); ! 57: extern void updatesounds(void); ! 58: extern void smkplayseq(char *name); ! 59: extern void smkshowmenu(void); ! 60: extern void near asmwaitvrt(int parm1); ! 61: #pragma aux asmwaitvrt "*_" \ ! 62: parm caller [ecx] \ ! 63: modify [eax edx]; ! 64: extern void near asmsetpalette(char *pal); ! 65: #pragma aux asmsetpalette "*_" \ ! 66: parm caller [esi] \ ! 67: modify [eax ecx edx]; ! 68: extern void near asmoverscan(int parm1); ! 69: #pragma aux asmoverscan "*_" \ ! 70: parm caller [ebx] \ ! 71: modify [eax edx]; ! 72: extern void near asmoverflash(int parm1); ! 73: #pragma aux asmoverflash "*_" \ ! 74: parm caller [ebx] \ ! 75: modify [eax edx]; ! 76: ! 77: #pragma aux copybuf =\ ! 78: "rep movsd",\ ! 79: parm [esi][edi][ecx]\ ! 80: ! 81: #define MAXNAMESIZE 11 ! 82: #define NETNAMES ! 83: extern char netnames[MAXPLAYERS][MAXNAMESIZE]; ! 84: extern int fireseq[]; ! 85: extern int fireseq[]; ! 86: extern char palette[]; ! 87: extern char paletteloaded; ! 88: extern int digiloopflag; ! 89: extern int ovmode; ! 90: extern char syncstate; ! 91: extern int goreflag; ! 92: extern long vel,svel,angvel; ! 93: extern int headbobon; ! 94: extern char biasthreshholdon; ! 95: extern short biasthreshhold; ! 96: extern volatile int LoopPending; ! 97: extern long stun[]; ! 98: extern int cyberenabled; ! 99: extern short cybyaw,cybpit,cybrol; ! 100: extern long qsetmode; ! 101: extern char jcalibration, ! 102: jstickenabled; ! 103: extern int jctrx,jctry; ! 104: extern char spaceballon; ! 105: extern char bypasscdcheck; ! 106: ! 107: void (__interrupt __far *oldgphandler)(); ! 108: void domenuinput(void); ! 109: int choosemap(void); ! 110: ! 111: extern ! 112: int dbgflag; ! 113: ! 114: char headbobstr[13]={"HEAD BOB ON"}; ! 115: struct menu { ! 116: short x,y; ! 117: char proportional,shade,pal; ! 118: char *label; ! 119: struct menu *nextopt; ! 120: char tomenu,backmenu; ! 121: } menu[][MAXSUBOPTIONS]={ ! 122: {-1,1,1,0,0,NULL,NULL,0,0, // 0 ! 123: -1,1,1,0,0,NULL,NULL,0,0, ! 124: -1,1,1,0,0,NULL,NULL,0,0, ! 125: -1,1,1,0,0,NULL,NULL,0,0, ! 126: -1,1,1,0,0,NULL,NULL,0,0, ! 127: -1,1,1,0,0,NULL,NULL,0,0}, ! 128: {-1,1,1,0,0,"TEKWAR MENU",&menu[1][1],0,0, // 1 MAIN MENU ! 129: -1,3,1,0,2,"NEW GAME",&menu[1][2],2,0, ! 130: -1,4,1,2,2,"OPTIONS",&menu[1][3],3,0, ! 131: -1,5,1,4,2,"LOAD GAME",&menu[1][4],6,0, ! 132: -1,6,1,6,2,"SAVE GAME",&menu[1][5],7,0, ! 133: -1,7,1,8,2," ABORT ",NULL,4,0}, ! 134: {-1,1,1,0,0,"DIFFICULTY",&menu[2][1],0,1, // 2 DIFFICULTY LEVEL ! 135: -1,3,1,0,2,"EASY",&menu[2][2],0,1, ! 136: -1,4,1,0,2,"MEDIUM",&menu[2][3],0,1, ! 137: -1,5,1,0,2,"HARD",NULL,0,1, ! 138: -1,6,1,0,2,NULL,NULL,0,1, ! 139: -1,7,1,0,2,NULL,NULL,0,1}, ! 140: {-1,1,1,0,0,"OPTIONS MENU",&menu[3][1],0,1, // 3 OPTIONS MENU ! 141: //-1,3,1,0,2,"SELECT MISSION",&menu[3][2],5,1, ! 142: -1,4,1,0,2,"MOUSE SENSITIVITY",&menu[3][2],9,1, ! 143: -1,5,1,0,2,"SOUND/MUSIC VOLUME",&menu[3][3],8,1, ! 144: -1,6,1,0,2,&headbobstr,NULL,0,1, ! 145: -1,3,1,0,2,NULL,NULL,0,1, ! 146: -1,0,1,0,2,NULL,NULL,0,1}, ! 147: {-1,5,1,0,3,"ABORT MISSION Y/N?",NULL,0,1, // 4 QUIT TO DOS ! 148: -1,0,1,0,2,NULL,NULL,0,1, ! 149: -1,0,1,0,2,NULL,NULL,0,1, ! 150: -1,0,1,0,2,NULL,NULL,0,1, ! 151: -1,0,1,0,2,NULL,NULL,0,1, ! 152: -1,0,1,0,2,NULL,NULL,0,1}, ! 153: {-1,1,1,0,0,"SELECT LOCATIONS",&menu[5][1],0,3,// 5 DAY/NIGHT MISSION ! 154: -1,3,1,0,2,"CITY",&menu[5][2],0,3, ! 155: -1,4,1,0,2,"HOSPITAL",&menu[5][3],0,3, ! 156: -1,5,1,0,2,"POLICE STATION",&menu[5][4],0,3, ! 157: -1,6,1,0,2,"WAREHOUSE",NULL,0,3, ! 158: -1,0,1,0,2,NULL,NULL,0,1}, ! 159: {-1,1,1,0,3,"LOAD GAME MENU",NULL,0,1, // 6 LOAD GAME MENU ! 160: -1,0,1,0,2,NULL,NULL,0,1, ! 161: -1,0,1,0,2,NULL,NULL,0,1, ! 162: -1,0,1,0,2,NULL,NULL,0,1, ! 163: -1,0,1,0,2,NULL,NULL,0,1, ! 164: -1,0,1,0,2,NULL,NULL,0,1}, ! 165: {-1,1,1,0,3,"SAVE GAME MENU",NULL,0,1, // 7 SAVE GAME MENU ! 166: -1,0,1,0,2,NULL,NULL,0,1, ! 167: -1,0,1,0,2,NULL,NULL,0,1, ! 168: -1,0,1,0,2,NULL,NULL,0,1, ! 169: -1,0,1,0,2,NULL,NULL,0,1, ! 170: -1,0,1,0,2,NULL,NULL,0,1}, ! 171: {-1,1,1,0,3,"SOUND/MUSIC VOLUME",&menu[8][1],0,3, // 8 SOUND EFFECTS VOLUME ! 172: -1,3,1,0,2,"SOUND VOLUME",&menu[8][2],0,3, ! 173: -1,6,1,0,2,"MUSIC VOLUME",NULL,0,3, ! 174: -1,0,1,0,2,NULL,NULL,0,3, ! 175: -1,0,1,0,2,NULL,NULL,0,1, ! 176: -1,0,1,0,2,NULL,NULL,0,1}, ! 177: {-1,1,1,0,3,"MOUSE SENSITIVITY",NULL,0,3, // 9 MOUSE SENSITIVITY ! 178: -1,0,1,0,2,NULL,NULL,0,3, ! 179: -1,0,1,0,2,NULL,NULL,0,1, ! 180: -1,0,1,0,2,NULL,NULL,0,1, ! 181: -1,0,1,0,2,NULL,NULL,0,1, ! 182: -1,0,1,0,2,NULL,NULL,0,1}, ! 183: {-1,1,1,0,3,"SCREEN SIZE",NULL,0,3, // 10 SCREEN SIZE ! 184: -1,0,1,0,2,NULL,NULL,0,3, ! 185: -1,0,1,0,2,NULL,NULL,0,1, ! 186: -1,0,1,0,2,NULL,NULL,0,1, ! 187: -1,0,1,0,2,NULL,NULL,0,1, ! 188: -1,0,1,0,2,NULL,NULL,0,1} ! 189: }; ! 190: int lastselopt[16]={ ! 191: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ! 192: }; ! 193: ! 194: long framecnt,frameval[AVERAGEFRAMES]; ! 195: char blink=0xFF; ! 196: long menuspincnt=0L; ! 197: char activemenu=0; ! 198: char requesttoquit; ! 199: char palette1[256][3],palette2[256][3]; ! 200: char dofadein=0; ! 201: char whiteshifts[NUMREDSHIFTS][768]; ! 202: char redshifts[NUMREDSHIFTS][768]; ! 203: int redcount,whitecount; ! 204: char palshifted; ! 205: char depresscount; ! 206: int selopt=1; ! 207: char otoggles[MAXTOGGLES]; ! 208: char tektempbuf[TEKTEMPBUFSIZE]; ! 209: char gameover=0; ! 210: char demowon=0; ! 211: char outofsync=0; ! 212: char rearviewdraw; ! 213: int timedinv; ! 214: char loadsavenames[MAXLOADSAVEOPTS][MAXLOADSAVESIZE]; ! 215: char lockeybuf[MAXLOADSAVESIZE]; ! 216: long invredcards[MAXPLAYERS], invbluecards[MAXPLAYERS]; ! 217: short symbols[7]; ! 218: short symbolsdeposited[7]; ! 219: long invaccutrak[MAXPLAYERS]; ! 220: int noenemiesflag; ! 221: int noguardflag; ! 222: int nostalkflag; ! 223: int nochaseflag; ! 224: int nostrollflag; ! 225: int nobriefflag; ! 226: char messagebuf[MSGBUFSIZE]; ! 227: char notininventory; ! 228: char redrawborders; ! 229: int curblink,loadnewgame; ! 230: int locmessagelen,loctypemode; ! 231: int mousesensitivity,musicv=16,soundv=16; ! 232: long curblinkclock; ! 233: int messagex; ! 234: short hcpos,wppos,rvpos; ! 235: int autocenter[MAXPLAYERS],menudirect; ! 236: int hcmoving,rvmoving,wpmoving; ! 237: short winner=-1; ! 238: char rvonemotime; ! 239: char wponemotime; ! 240: char hconemotime; ! 241: unsigned lastsec; ! 242: unsigned lastscore; ! 243: char lasttimetoggle; ! 244: char lastscoretoggle; ! 245: char lastinvtoggle; ! 246: int lastwx2; ! 247: long lastinvr,lastinvb,lastinvacc; ! 248: int fortieth; ! 249: int difficulty; ! 250: int currentmapno=0; ! 251: long warpretang,warpretsect; ! 252: long warpretx,warprety,warpretz; ! 253: int mission=0; ! 254: char numlives=0; ! 255: char mission_accomplished=0; ! 256: int civillianskilled=0; ! 257: char generalplay; ! 258: char novideoid; ! 259: char singlemapmode; ! 260: int newnetleader=0,oldnetleader=0; ! 261: long netclock; ! 262: int allsymsdeposited=0; ! 263: int killedsonny=0; ! 264: ! 265: #pragma aux mulscale = \ ! 266: "imul ebx", \ ! 267: "shrd eax, edx, cl", \ ! 268: parm [eax][ebx][ecx] \ ! 269: modify [edx] \ ! 270: ! 271: #pragma aux setvmode = \ ! 272: "int 0x10", \ ! 273: parm [eax] \ ! 274: ! 275: ! 276: ! 277: void __interrupt __far ! 278: newgphandler(void) ! 279: { ! 280: setvmode(ovmode); ! 281: _chain_intr(oldgphandler); ! 282: } ! 283: ! 284: void ! 285: installgphandler(void) ! 286: { ! 287: //oldgphandler=_dos_getvect(0x0D); ! 288: //_dos_setvect(0x0D,newgphandler); ! 289: } ! 290: ! 291: void ! 292: clearpal(void) ! 293: { ! 294: short i; ! 295: ! 296: outp(PEL_WRITE_ADR,0); ! 297: for(i=0;i<768;i++) ! 298: outp(PEL_DATA,0x00); ! 299: ! 300: return; ! 301: } ! 302: ! 303: void ! 304: getpalette(char *pal) ! 305: { ! 306: int i; ! 307: ! 308: outp(PEL_READ_ADR,0); ! 309: for( i=0; i<768; i++) ! 310: *pal++ = inp(PEL_DATA); ! 311: } ! 312: ! 313: void ! 314: fillpalette(int red, int green, int blue) ! 315: { ! 316: int i; ! 317: ! 318: outp(PEL_WRITE_ADR,0); ! 319: for( i=0; i<256; i++ ) { ! 320: outp(PEL_DATA,red); ! 321: outp(PEL_DATA,green); ! 322: outp(PEL_DATA,blue); ! 323: } ! 324: } ! 325: ! 326: void ! 327: fadeout(int start, int end, int red, int green, int blue, int steps) ! 328: { ! 329: int i,j,orig,delta; ! 330: char *origptr,*newptr; ! 331: ! 332: finishpaletteshifts(); ! 333: ! 334: asmwaitvrt(1); ! 335: getpalette(&palette1[0][0]); ! 336: memcpy(palette2,palette1,768); ! 337: ! 338: for( i=0; i<steps; i++ ) { ! 339: origptr=&palette1[start][0]; ! 340: newptr=&palette2[start][0]; ! 341: for( j=start; j<=end; j++ ) { ! 342: orig = *origptr++; ! 343: delta = red-orig; ! 344: *newptr++ = orig + delta * i / steps; ! 345: orig = *origptr++; ! 346: delta = green-orig; ! 347: *newptr++ = orig + delta * i / steps; ! 348: orig = *origptr++; ! 349: delta = blue-orig; ! 350: *newptr++ = orig + delta * i / steps; ! 351: } ! 352: ! 353: asmwaitvrt(1); ! 354: asmsetpalette(&palette2[0][0]); ! 355: } ! 356: ! 357: return; ! 358: } ! 359: ! 360: void ! 361: clearkeys(void) ! 362: { ! 363: memset(keystatus, 0, sizeof(keystatus)); ! 364: ! 365: return; ! 366: } ! 367: ! 368: void ! 369: fadein(int start, int end, int steps) ! 370: { ! 371: int i,j,delta; ! 372: ! 373: if( steps == 0 ) { ! 374: return; ! 375: } ! 376: ! 377: asmwaitvrt(1); ! 378: getpalette(&palette1[0][0]); ! 379: memcpy(&palette2[0][0],&palette1[0][0],sizeof(palette1)); ! 380: ! 381: start *= 3; ! 382: end = end*3+2; ! 383: ! 384: // fade through intermediate frames ! 385: for( i=0; i<steps; i++ ) { ! 386: for( j=start; j<=end; j++ ) { ! 387: delta=palette[j]-palette1[0][j]; ! 388: palette2[0][j]=palette1[0][j] + delta * i / steps; ! 389: } ! 390: ! 391: asmwaitvrt(1); ! 392: asmsetpalette(&palette2[0][0]); ! 393: } ! 394: ! 395: // final color ! 396: asmwaitvrt(1); ! 397: asmsetpalette(palette); ! 398: ! 399: dofadein=0; ! 400: clearkeys(); ! 401: } ! 402: ! 403: fog() ! 404: { ! 405: char *temp; ! 406: ! 407: temp=palookup[0]; ! 408: palookup[0]=palookup[255]; ! 409: palookup[255]=temp; ! 410: } ! 411: ! 412: initpaletteshifts(void) ! 413: { ! 414: char *workptr,*baseptr; ! 415: int i,j,delta; ! 416: ! 417: for( i=1; i<=NUMREDSHIFTS; i++ ) { ! 418: workptr=( char *)&redshifts[i-1][0]; ! 419: baseptr=&palette[0]; ! 420: for( j=0; j<=255; j++) { ! 421: delta=64-*baseptr; ! 422: *workptr++=*baseptr++ + delta * i / REDSTEPS; ! 423: delta=-*baseptr; ! 424: *workptr++=*baseptr++ + delta * i / REDSTEPS; ! 425: delta=-*baseptr; ! 426: *workptr++=*baseptr++ + delta * i / REDSTEPS; ! 427: } ! 428: } ! 429: ! 430: for( i=1; i<=NUMWHITESHIFTS; i++ ) { ! 431: workptr=( char *)&whiteshifts[i-1][0]; ! 432: baseptr=&palette[0]; ! 433: for( j=0; j<=255; j++ ) { ! 434: delta = 64-*baseptr; ! 435: *workptr++ = *baseptr++ + delta * i / WHITESTEPS; ! 436: delta = 62-*baseptr; ! 437: *workptr++ = *baseptr++ + delta * i / WHITESTEPS; ! 438: delta = 0-*baseptr; ! 439: *workptr++ = *baseptr++ + delta * i / WHITESTEPS; ! 440: } ! 441: } ! 442: ! 443: return 0; ! 444: } ! 445: ! 446: int ! 447: startredflash(int damage) ! 448: { ! 449: if( redcount != 0 ) ! 450: return(0); ! 451: ! 452: redcount=0; ! 453: ! 454: redcount+=damage; ! 455: ! 456: if( redcount < 0 ) { ! 457: redcount=0; ! 458: } ! 459: ! 460: return 0; ! 461: } ! 462: ! 463: int ! 464: startwhiteflash(int bonus) ! 465: { ! 466: whitecount = 0; ! 467: ! 468: whitecount+=bonus; ! 469: ! 470: if( whitecount < 0 ) { ! 471: whitecount=0; ! 472: } ! 473: ! 474: return 0; ! 475: } ! 476: ! 477: woundflash() ! 478: { ! 479: if( (option[4] != 0) || toggles[TOGGLE_OVERSCAN] ) { ! 480: asmoverflash(70); ! 481: } ! 482: else { ! 483: startredflash(4); ! 484: } ! 485: } ! 486: ! 487: criticalflash() ! 488: { ! 489: if( (option[4] != 0) || toggles[TOGGLE_OVERSCAN] ) { ! 490: asmoverflash(82); ! 491: } ! 492: else { ! 493: startredflash(32); ! 494: } ! 495: } ! 496: ! 497: bonusflash() ! 498: { ! 499: if( (option[4] != 0) || toggles[TOGGLE_OVERSCAN] ) { ! 500: asmoverflash(125); ! 501: } ! 502: else { ! 503: startwhiteflash(8); ! 504: } ! 505: } ! 506: ! 507: burnflash() ! 508: { ! 509: startredflash(8); ! 510: } ! 511: ! 512: void ! 513: updatepaletteshifts(void) ! 514: { ! 515: int red,white; ! 516: ! 517: if (whitecount) ! 518: { ! 519: white = whitecount/WHITETICS +1; ! 520: if (white>NUMWHITESHIFTS) ! 521: white = NUMWHITESHIFTS; ! 522: whitecount -= TICSPERFRAME; ! 523: if (whitecount < 0) ! 524: whitecount = 0; ! 525: } ! 526: else { ! 527: white = 0; ! 528: } ! 529: ! 530: if (redcount) ! 531: { ! 532: red = redcount/10 +1; ! 533: if (red>NUMREDSHIFTS) ! 534: red = NUMREDSHIFTS; ! 535: redcount -= TICSPERFRAME; ! 536: if (redcount < 0) ! 537: redcount = 0; ! 538: } ! 539: else { ! 540: red = 0; ! 541: } ! 542: ! 543: ! 544: if( red ) { ! 545: asmwaitvrt(1); ! 546: asmsetpalette(redshifts[red-1]); ! 547: palshifted = 1; ! 548: } ! 549: else if( white ) { ! 550: asmwaitvrt(1); ! 551: asmsetpalette(whiteshifts[white-1]); ! 552: palshifted = 1; ! 553: } ! 554: else if( palshifted ) { ! 555: asmwaitvrt(1); ! 556: asmsetpalette(&palette[0]); // back to normal ! 557: setbrightness(brightness); ! 558: palshifted = 0; ! 559: } ! 560: ! 561: return; ! 562: } ! 563: ! 564: setup3dscreen() ! 565: { ! 566: long i, dax, day, dax2, day2; ! 567: ! 568: setgamemode(); ! 569: if( screensize > xdim ) { ! 570: dax = 0; day = 0; ! 571: dax2 = xdim-1; day2 = ydim-1; ! 572: } ! 573: else { ! 574: dax = (xdim>>1)-(screensize>>1); ! 575: dax2 = dax+screensize-1; ! 576: day = ((ydim-32)>>1)-(((screensize*(ydim-32))/xdim)>>1); ! 577: day2 = day + ((screensize*(ydim-32))/xdim)-1; ! 578: tekview(&dax,&day,&dax2,&day2); ! 579: setview(dax,day>>detailmode,dax2,day2>>detailmode); ! 580: } ! 581: if( screensize <= xdim ) { ! 582: permanentwritespritetile(0L,0L,BACKGROUND,0,0L,0L,xdim-1,ydim-1,0); ! 583: permanentwritesprite((xdim-320)>>1,ydim-32,STATUSBAR,0,0,0,xdim-1,ydim-1,0); ! 584: i = ((xdim-320)>>1); ! 585: while (i >= 8) i -= 8, permanentwritesprite(i,ydim-32,STATUSBARFILL8,0,0,0,xdim-1,ydim-1,0); ! 586: if (i >= 4) i -= 4, permanentwritesprite(i,ydim-32,STATUSBARFILL4,0,0,0,xdim-1,ydim-1,0); ! 587: i = ((xdim-320)>>1)+320; ! 588: while (i <= xdim-8) permanentwritesprite(i,ydim-32,STATUSBARFILL8,0,0,0,xdim-1,ydim-1,0), i += 8; ! 589: if (i <= xdim-4) permanentwritesprite(i,ydim-32,STATUSBARFILL4,0,0,0,xdim-1,ydim-1,0), i += 4; ! 590: } ! 591: } ! 592: ! 593: void ! 594: finishpaletteshifts(void) ! 595: { ! 596: if( palshifted == 1 ) { ! 597: palshifted = 0; ! 598: asmwaitvrt(1); ! 599: asmsetpalette(&palette[0]); ! 600: } ! 601: ! 602: return; ! 603: } ! 604: ! 605: void ! 606: showmessage(char *fmt,...) ! 607: { ! 608: va_list vargs; ! 609: ! 610: memset(messagebuf, '\0', MSGBUFSIZE); ! 611: ! 612: va_start(vargs,fmt); ! 613: vsprintf(messagebuf,fmt,vargs); ! 614: va_end(vargs); ! 615: ! 616: messagebuf[MSGBUFSIZE-1]='\0'; ! 617: messagex=(xdim>>1)-( ((strlen(messagebuf))>>1)*8 ); ! 618: if( messagex < 0 ) ! 619: messagex=0; ! 620: messageon=1; ! 621: } ! 622: ! 623: #ifdef DOANNOYINGTITLESCREEN ! 624: tektitlescreen() ! 625: { ! 626: int i,j,k,l; ! 627: char *ptr; ! 628: ! 629: setgamemode(); ! 630: setview(0L,0L,xdim-1,ydim-1); ! 631: loadtile(TITLESCRPIC); ! 632: loadtile(BACKGROUND); ! 633: i=0; ! 634: j=1621; ! 635: for( k=0; k<256; k++ ) { ! 636: for( l=0; l<256; l++ ) { ! 637: ptr = (char *)(waloff[TITLESCRPIC]+i); ! 638: *ptr =*(char *)(waloff[BACKGROUND]+i); ! 639: i = (i+j)&65535; ! 640: j = (j+4)&65535; ! 641: } ! 642: overwritesprite(0L,0L,TITLESCRPIC,0,0,0); ! 643: nextpage(); ! 644: } ! 645: } ! 646: #endif ! 647: ! 648: tekfirstpass() ! 649: { ! 650: setbrightness(brightness); ! 651: } ! 652: ! 653: tekgamestarted(void) ! 654: { ! 655: hcpos=-tilesizx[HCDEVICE]; ! 656: wppos=xdim+tilesizx[WPDEVICE]; ! 657: rvpos=-tilesizx[RVDEVICE]; ! 658: seconds=minutes=hours=0; ! 659: show2dsprite[playersprite[myconnectindex]>>3]|= ! 660: (1<<(playersprite[myconnectindex]&7)); ! 661: songmastervolume(musicv<<3); ! 662: soundmastervolume(soundv<<11); ! 663: } ! 664: ! 665: int ! 666: tekprivatekeys(void) ! 667: { ! 668: int i,j; ! 669: ! 670: if( activemenu != 0 ) { ! 671: return(0); ! 672: } ! 673: ! 674: // alt hot keys - non mappable ! 675: if( (keystatus[56] != 0) && (keystatus[25] != 0) ) { ! 676: keystatus[56]=0; ! 677: keystatus[25]=0; ! 678: cd_play(); ! 679: } ! 680: if( (keystatus[56] != 0) && (keystatus[19] != 0) ) { ! 681: keystatus[56]=0; ! 682: keystatus[19]=0; ! 683: cd_resetdisc(); ! 684: } ! 685: if( (keystatus[56] != 0) && (keystatus[31] != 0) ) { ! 686: keystatus[56]=0; ! 687: keystatus[31]=0; ! 688: cd_stopplay(); ! 689: } ! 690: if( (keystatus[56] != 0) && (keystatus[33] != 0) ) { ! 691: keystatus[56]=0; ! 692: keystatus[33]=0; ! 693: cd_advancetrack(); ! 694: } ! 695: if( (keystatus[56] != 0) && (keystatus[48] != 0) ) { ! 696: keystatus[56]=0; ! 697: keystatus[48]=0; ! 698: cd_retardtrack(); ! 699: } ! 700: if( (keystatus[56] != 0) && (keystatus[16] != 0) ) { ! 701: keystatus[56]=0; ! 702: keystatus[16]=0; ! 703: gameover=1; ! 704: } ! 705: ! 706: // cheat num lock keys ! 707: if( (keystatus[56] != 0) && (keystatus[42] != 0) && (option[4] == 0) ) { ! 708: if( keystatus[34] != 0 ) { ! 709: toggles[TOGGLE_GODMODE]^=0x01; ! 710: if( toggles[TOGGLE_GODMODE] ) { ! 711: holyon(); ! 712: } ! 713: else { ! 714: holyoff(); ! 715: } ! 716: keystatus[34]=0; ! 717: } ! 718: if( keystatus[35] != 0 ) { ! 719: changehealth(screenpeek, 200); ! 720: keystatus[35]=0; ! 721: } ! 722: if( keystatus[36] != 0 ) { ! 723: symbols[0]=1; ! 724: symbols[1]=1; ! 725: symbols[2]=1; ! 726: symbols[3]=1; ! 727: symbols[4]=1; ! 728: symbols[5]=1; ! 729: symbols[6]=1; ! 730: keystatus[36]=0; ! 731: } ! 732: if( keystatus[17] != 0 ) { ! 733: ammo1[screenpeek]=MAXAMMO; ! 734: ammo2[screenpeek]=MAXAMMO; ! 735: ammo3[screenpeek]=MAXAMMO; ! 736: ammo4[screenpeek]=MAXAMMO; ! 737: ammo5[screenpeek]=MAXAMMO; ! 738: ammo6[screenpeek]=MAXAMMO; ! 739: ammo7[screenpeek]=MAXAMMO; ! 740: ammo8[screenpeek]=MAXAMMO; ! 741: invredcards[screenpeek]=1; ! 742: invbluecards[screenpeek]=1; ! 743: invaccutrak[screenpeek]=1; ! 744: weapons[screenpeek] =(flags32[GUN1FLAG]|flags32[GUN2FLAG]|flags32[GUN3FLAG]|flags32[GUN4FLAG]); ! 745: weapons[screenpeek]|=(flags32[GUN5FLAG]|flags32[GUN6FLAG]|flags32[GUN7FLAG]|flags32[GUN8FLAG]); ! 746: keystatus[17]=0; ! 747: } ! 748: keystatus[69]=0; ! 749: } ! 750: ! 751: // local game keys ! 752: if( keystatus[keys[23]] != 0 ) { ! 753: keystatus[keys[23]]=0; ! 754: toggles[TOGGLE_RETICULE]^=0x01; ! 755: } ! 756: if( keystatus[keys[24]] != 0 ) { ! 757: keystatus[keys[24]]=0; ! 758: toggles[TOGGLE_TIME]^=0x01; ! 759: } ! 760: if( keystatus[keys[25]] != 0 ) { ! 761: keystatus[keys[25]]=0; ! 762: toggles[TOGGLE_SCORE]^=0x01; ! 763: ! 764: } ! 765: if( keystatus[keys[20]] != 0 ) { ! 766: keystatus[keys[20]]=0; ! 767: toggles[TOGGLE_REARVIEW]^=0x01; ! 768: playsound( S_REARMONITOR,0,0,0, ST_IMMEDIATE); ! 769: rvmoving=1; ! 770: } ! 771: if( keystatus[keys[21]] != 0 ) { ! 772: keystatus[keys[21]]=0; ! 773: toggles[TOGGLE_UPRT]^=0x01; ! 774: playsound(S_STATUS1+toggles[TOGGLE_UPRT],0,0,0, ST_IMMEDIATE); ! 775: wpmoving=1; ! 776: } ! 777: if (keystatus[keys[22]] != 0) { ! 778: keystatus[keys[22]]=0; ! 779: toggles[TOGGLE_HEALTH]^=0x01; ! 780: playsound( S_HEALTHMONITOR,0,0,0, ST_IMMEDIATE); ! 781: hcmoving=1; ! 782: } ! 783: if( keystatus[keys[26]] != 0 ) { ! 784: keystatus[keys[26]]=0; ! 785: toggles[TOGGLE_INVENTORY]^=0x01; ! 786: } ! 787: ! 788: // non mappable function keys ! 789: if (keystatus[59] != 0) { ! 790: activemenu=HELPSCREEN; ! 791: menudirect=1; ! 792: } ! 793: else if (keystatus[60] != 0) { ! 794: if( option[4] == 0 ) { ! 795: activemenu=MENUSAVEGAME; ! 796: menudirect=1; ! 797: } ! 798: } ! 799: else if (keystatus[61] != 0) { ! 800: if( option[4] == 0 ) { ! 801: activemenu=MENULOADGAME; ! 802: menudirect=1; ! 803: } ! 804: } ! 805: else if (keystatus[62] != 0) { ! 806: activemenu=MENUQUITGAME; ! 807: menudirect=1; ! 808: } ! 809: else if (keystatus[64] != 0) { ! 810: activemenu=MENUMOUSEADJ; ! 811: menudirect=1; ! 812: selopt=1; ! 813: } ! 814: else if (keystatus[66] != 0) { ! 815: activemenu=MENUSOUNDMUS; ! 816: menudirect=1; ! 817: selopt=1; ! 818: } ! 819: if( keystatus[65] != 0 ) { ! 820: keystatus[65]=0; ! 821: toggles[TOGGLE_OVERSCAN]^=0x01; ! 822: } ! 823: ! 824: // esc non mappable ! 825: if( keystatus[1] != 0 ) { ! 826: keystatus[1]=0; ! 827: if( activemenu ) { ! 828: activemenu=0; ! 829: } ! 830: else { ! 831: activemenu=1; ! 832: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 833: } ! 834: } ! 835: ! 836: return 0; ! 837: } ! 838: ! 839: void ! 840: redrawbackfx(void) ! 841: { ! 842: if (activemenu == 255) { ! 843: overwritesprite(0,0,BACKGROUND,0,0,0); ! 844: } ! 845: ! 846: memmove(otoggles,toggles,MAXTOGGLES); ! 847: ! 848: if (screensize <= xdim && (rvmoving || rvonemotime) ) { ! 849: overwritesprite(0,0,RVDEVRES,0,0,0); ! 850: if ((toggles[TOGGLE_REARVIEW] && rvpos == 0) ! 851: || ((!toggles[TOGGLE_REARVIEW]) && rvpos == -tilesizx[RVDEVICE])) { ! 852: rvmoving=0; ! 853: rvonemotime++; ! 854: if( rvonemotime == 4 ) ! 855: rvonemotime=0; ! 856: ! 857: } ! 858: } ! 859: ! 860: if (screensize <= xdim && (wpmoving || wponemotime) ) { ! 861: overwritesprite(xdim-tilesizx[WPDEVRES],0,WPDEVRES,0,0,0); ! 862: if ((toggles[TOGGLE_UPRT] && wppos == xdim-tilesizx[WPDEVICE]) ! 863: || ((!toggles[TOGGLE_UPRT]) && wppos == xdim)) { ! 864: wpmoving=0; ! 865: wponemotime++; ! 866: if( wponemotime == 4 ) ! 867: wponemotime=0; ! 868: } ! 869: } ! 870: if (screensize <= xdim && (hcmoving || hconemotime) ) { ! 871: overwritesprite(0,ydim-tilesizy[HCDEVRES],HCDEVRES,0,0,0); ! 872: if ((toggles[TOGGLE_HEALTH] && hcpos == 0) ! 873: || ((!toggles[TOGGLE_HEALTH]) && hcpos == xdim-tilesizx[HCDEVICE])) { ! 874: hcmoving=0; ! 875: hconemotime++; ! 876: if( hconemotime == 4 ) ! 877: hconemotime=0; ! 878: } ! 879: } ! 880: } ! 881: ! 882: holyon() ! 883: { ! 884: if( screensize <= xdim ) { ! 885: printext((xdim>>1)-16,4,"HOLY",ALPHABET2,255); ! 886: } ! 887: } ! 888: ! 889: holyoff() ! 890: { ! 891: if( screensize <= xdim ) { ! 892: permanentwritesprite((xdim>>1)-16,4,TIMERESTORE, ! 893: 0,(xdim>>1)-16,4,xdim-1,ydim-1,0); ! 894: } ! 895: } ! 896: ! 897: showtime() ! 898: { ! 899: int alphabet=ALPHABET+(xdim > 360); ! 900: ! 901: if( (screensize > xdim) || (dimensionmode[screenpeek] == 2) ) { ! 902: if( toggles[TOGGLE_TIME] ) { ! 903: sprintf(&tektempbuf,"%02d:%02d:%02d", hours,minutes,seconds); ! 904: printext(xdim-72,ydim-12,tektempbuf,alphabet,255); ! 905: } ! 906: lastsec=0L; ! 907: } ! 908: else { ! 909: if( toggles[TOGGLE_TIME] == 0 ) { ! 910: if( lasttimetoggle != toggles[TOGGLE_TIME] ) { ! 911: permanentwritesprite(xdim-80,ydim-12,TIMERESTORE, ! 912: 0,xdim-80,ydim-12,xdim-1,ydim-1,0); ! 913: } ! 914: lasttimetoggle=toggles[TOGGLE_TIME]; ! 915: lastsec=0L; ! 916: } ! 917: else { ! 918: if( lastsec != seconds ) { ! 919: permanentwritesprite(xdim-80,ydim-12,TIMERESTORE, ! 920: 0,xdim-80,ydim-12,xdim-1,ydim-1,0); ! 921: sprintf(&tektempbuf,"%02d:%02d:%02d", hours,minutes,seconds); ! 922: printext(xdim-72,ydim-12,tektempbuf,alphabet,255); ! 923: lastsec=seconds; ! 924: } ! 925: lasttimetoggle=toggles[TOGGLE_TIME]; ! 926: } ! 927: } ! 928: } ! 929: ! 930: showscore() ! 931: { ! 932: int alphabet=ALPHABET+(xdim > 360); ! 933: ! 934: if( (screensize > xdim) || (dimensionmode[screenpeek] == 2) ) { ! 935: if( toggles[TOGGLE_SCORE] ) { ! 936: if( score[screenpeek] == 1 ) { ! 937: sprintf(&tektempbuf,"%08d", 0); ! 938: } ! 939: else { ! 940: sprintf(&tektempbuf,"%08d", score[screenpeek]); ! 941: } ! 942: printext(xdim-160,ydim-12,tektempbuf,alphabet,255); ! 943: } ! 944: lastscore=0L; ! 945: } ! 946: else { ! 947: if( toggles[TOGGLE_SCORE] == 0 ) { ! 948: if( (lastscoretoggle != toggles[TOGGLE_SCORE]) ) { ! 949: permanentwritesprite(xdim-160,ydim-12,SCORERESTORE, ! 950: 0,xdim-160,ydim-12,xdim-1,ydim-1,0); ! 951: } ! 952: lastscoretoggle=toggles[TOGGLE_SCORE]; ! 953: lastscore=0L; ! 954: } ! 955: else { ! 956: if( (score[screenpeek]==0) || (lastscore != score[screenpeek]) ) { ! 957: permanentwritesprite(xdim-160,ydim-12,SCORERESTORE, ! 958: 0,xdim-160,ydim-12,xdim-1,ydim-1,0); ! 959: if( score[screenpeek] == 1 ) { ! 960: sprintf(&tektempbuf,"%08d", 0); ! 961: } ! 962: else { ! 963: sprintf(&tektempbuf,"%08d", score[screenpeek]); ! 964: } ! 965: printext(xdim-160,ydim-12,tektempbuf,alphabet,255); ! 966: lastscore=score[screenpeek]; ! 967: if( score[screenpeek]==0 ) ! 968: score[screenpeek]=1; ! 969: } ! 970: lastscoretoggle=toggles[TOGGLE_SCORE]; ! 971: } ! 972: } ! 973: } ! 974: ! 975: showinv(int snum) ! 976: { ! 977: char ti=toggles[TOGGLE_INVENTORY]; ! 978: char shade; ! 979: ! 980: if( (screensize < xdim) || (toggles[TOGGLE_INVENTORY] == 0) ) { ! 981: goto skipsyms; ! 982: } ! 983: if( symbols[0] ) { ! 984: shade=0; ! 985: if( symbolsdeposited[0] ) ! 986: shade=32; ! 987: overwritesprite(windowx2-(30*8),windowy2-32,SYMBOL1PIC,shade,0,0); ! 988: } ! 989: if( symbols[1] ) { ! 990: shade=0; ! 991: if( symbolsdeposited[1] ) ! 992: shade=32; ! 993: overwritesprite(windowx2-(30*7),windowy2-32,SYMBOL2PIC,shade,0,0); ! 994: } ! 995: if( symbols[2] ) { ! 996: shade=0; ! 997: if( symbolsdeposited[2] ) ! 998: shade=32; ! 999: overwritesprite(windowx2-(30*6),windowy2-32,SYMBOL3PIC,shade,0,0); ! 1000: } ! 1001: if( symbols[3] ) { ! 1002: shade=0; ! 1003: if( symbolsdeposited[3] ) ! 1004: shade=32; ! 1005: overwritesprite(windowx2-(30*5),windowy2-32,SYMBOL4PIC,shade,0,0); ! 1006: } ! 1007: if( symbols[4] ) { ! 1008: shade=0; ! 1009: if( symbolsdeposited[4] ) ! 1010: shade=32; ! 1011: overwritesprite(windowx2-(30*4),windowy2-32,SYMBOL5PIC,shade,0,0); ! 1012: } ! 1013: if( symbols[5] ) { ! 1014: shade=0; ! 1015: if( symbolsdeposited[5] ) ! 1016: shade=32; ! 1017: overwritesprite(windowx2-(30*3),windowy2-32,SYMBOL6PIC,shade,0,0); ! 1018: } ! 1019: if( symbols[6] ) { ! 1020: shade=0; ! 1021: if( symbolsdeposited[6] ) ! 1022: shade=32; ! 1023: overwritesprite(windowx2-(30*2),windowy2-32,SYMBOL7PIC,shade,0,0); ! 1024: } ! 1025: ! 1026: skipsyms: ! 1027: ! 1028: if( ti ) { ! 1029: timedinv--; ! 1030: if( timedinv == 0 ) ! 1031: toggles[TOGGLE_INVENTORY]=0; ! 1032: } ! 1033: ! 1034: if( (windowx2 >= (xdim-24)) && ti ) { ! 1035: if( invbluecards[snum] != 0 ) { ! 1036: overwritesprite(xdim-24,(ydim>>1)-14,483,0,0,0); ! 1037: } ! 1038: if( invredcards[snum] != 0 ) { ! 1039: overwritesprite(xdim-24,(ydim>>1)-2,484,0,0,0); ! 1040: } ! 1041: if( invaccutrak[snum] != 0 ) { ! 1042: overwritesprite(xdim-24,(ydim>>1)+10,485,0,0,0); ! 1043: } ! 1044: lastinvtoggle=1; ! 1045: return; ! 1046: } ! 1047: ! 1048: if( (windowx2 < (xdim-24)) && ti ) { ! 1049: if( (lastinvtoggle == 0) || (lastwx2 != windowx2) ! 1050: || (lastinvb != invbluecards[snum]) || (lastinvr != invredcards[snum]) ! 1051: || (lastinvacc != invaccutrak[snum]) ) { ! 1052: if( lastinvb != invbluecards[snum] ) ! 1053: lastinvb=invbluecards[snum]; ! 1054: if( lastinvr != invredcards[snum] ) ! 1055: lastinvr=invredcards[snum]; ! 1056: if( lastinvacc != invaccutrak[snum] ) ! 1057: lastinvacc=invaccutrak[snum]; ! 1058: lastinvtoggle=1; ! 1059: lastwx2=windowx2; ! 1060: if( invbluecards[snum] ) ! 1061: permanentwritesprite(xdim-24,(ydim>>1)-14,483, ! 1062: 0,xdim-24,(ydim>>1)-14,xdim,ydim,0); ! 1063: if( invredcards[snum] ) ! 1064: permanentwritesprite(xdim-24,(ydim>>1)-2,484, ! 1065: 0,xdim-24,(ydim>>1)-2,xdim,ydim,0); ! 1066: if( invaccutrak[snum] ) ! 1067: permanentwritesprite(xdim-24,(ydim>>1)+10,485, ! 1068: 0,xdim-24,(ydim>>1)+10,xdim,ydim,0); ! 1069: } ! 1070: return; ! 1071: } ! 1072: ! 1073: if( (ti == 0) ) { ! 1074: if( lastinvtoggle == 1 ) { ! 1075: lastinvtoggle=0; ! 1076: if( windowx2 < (xdim-4) ) { ! 1077: permanentwritesprite(xdim-24,(ydim>>1)-14,490, ! 1078: 0,xdim-24,(ydim>>1)-14,xdim,ydim,0); ! 1079: } ! 1080: } ! 1081: return; ! 1082: } ! 1083: ! 1084: } ! 1085: ! 1086: #define NETWINSCORE 1200 ! 1087: ! 1088: extern ! 1089: FILE *dbgfp; ! 1090: ! 1091: void ! 1092: nextnetlevel() ! 1093: { ! 1094: int i,j,len,other,readyplayers,playerreadyflag[MAXPLAYERS]; ! 1095: long lastpacketclock,packets=0L; ! 1096: ! 1097: if( strcmp(boardfilename,"NET1.MAP") == 0) { ! 1098: strcpy(boardfilename,"NET2.MAP"); ! 1099: } ! 1100: else if( strcmp(boardfilename,"NET2.MAP") == 0) { ! 1101: strcpy(boardfilename,"NET3.MAP"); ! 1102: } ! 1103: else if( strcmp(boardfilename,"NET3.MAP") == 0) { ! 1104: strcpy(boardfilename,"NET4.MAP"); ! 1105: } ! 1106: else if( strcmp(boardfilename,"NET4.MAP") == 0) { ! 1107: strcpy(boardfilename,"NET6.MAP"); ! 1108: } ! 1109: else if( strcmp(boardfilename,"NET6.MAP") == 0) { ! 1110: strcpy(boardfilename,"NET7.MAP"); ! 1111: } ! 1112: else if( strcmp(boardfilename,"NET7.MAP") == 0) { ! 1113: strcpy(boardfilename,"NET5.MAP"); ! 1114: } ! 1115: else if( strcmp(boardfilename,"NET5.MAP") == 0) { ! 1116: strcpy(boardfilename,"NET1.MAP"); ! 1117: } ! 1118: initpaletteshifts(); ! 1119: prepareboard(boardfilename); ! 1120: precache(); ! 1121: for( i=connecthead ; i >= 0 ; i=connectpoint2[i] ) { ! 1122: initplayersprite((short)i); ! 1123: } ! 1124: //** Les START - 10/02/95 ! 1125: for (i=connecthead ; i >= 0 ; i=connectpoint2[i]) { ! 1126: playerreadyflag[i]=0; ! 1127: } ! 1128: #if 0 ! 1129: for (i=connecthead ; i >= 0 ; i=connectpoint2[i]) { ! 1130: syncvel[i]=fsyncvel[i]=osyncvel[i]=0; ! 1131: syncsvel[i]=fsyncsvel[i]=osyncsvel[i]=0; ! 1132: syncangvel[i]=fsyncangvel[i]=osyncangvel[i]=0; ! 1133: syncbits[i]=fsyncbits[i]=osyncbits[i]=0; ! 1134: for (j=0 ; j < MOVEFIFOSIZ ; j++) { ! 1135: baksyncvel[j][i]=0; ! 1136: baksyncsvel[j][i]=0; ! 1137: baksyncangvel[j][i]=0; ! 1138: baksyncbits[j][i]=0; ! 1139: } ! 1140: } ! 1141: movefifoplc=movefifoend=0; ! 1142: syncvalplc=othersyncvalplc=0; ! 1143: syncvalend=othersyncvalend=0; ! 1144: syncvalcnt=othersyncvalcnt=0L; ! 1145: olocvel=olocvel2=0; ! 1146: olocsvel=olocsvel2=0; ! 1147: olocangvel=olocangvel2=0; ! 1148: olocbits=olocbits2=0; ! 1149: #endif ! 1150: randomseed=17L; ! 1151: keystatus[0x01]=0; ! 1152: memset(playerreadyflag,0,sizeof(int)*MAXPLAYERS); ! 1153: readyplayers=0; ! 1154: if (myconnectindex == connecthead) { ! 1155: playerreadyflag[myconnectindex]=1; ! 1156: do { ! 1157: if ((len=getpacket(&other,tempbuf)) > 0) { ! 1158: playerreadyflag[other]=1; ! 1159: } ! 1160: readyplayers=0; ! 1161: for (i=connecthead ; i >= 0 ; i=connectpoint2[i]) { ! 1162: if (playerreadyflag[i]) { ! 1163: readyplayers++; ! 1164: } ! 1165: } ! 1166: showmessage("%d OF %d PLAYERS READY..",readyplayers,numplayers); ! 1167: drawscreen(screenpeek,0L); ! 1168: } while (readyplayers < numplayers && keystatus[0x01] == 0); ! 1169: if (keystatus[0x01]) { ! 1170: keystatus[0x01]=0; ! 1171: crash("Multiplayer game aborted!"); ! 1172: } ! 1173: if (dbgflag) { ! 1174: fprintf(dbgfp,"\nNEW LEVEL\n\n"); ! 1175: } ! 1176: } ! 1177: else { ! 1178: showmessage("ONE MOMENT..."); ! 1179: if (dbgflag) { ! 1180: fprintf(dbgfp,"\nNEW LEVEL\n\n"); ! 1181: } ! 1182: } ! 1183: //** Les END - 10/02/95 ! 1184: } ! 1185: ! 1186: #ifdef WONMESSAGE ! 1187: postwonmessage(int nw) ! 1188: { ! 1189: int len; ! 1190: ! 1191: clearview(); ! 1192: printext((xdim>>1)-40,(ydim>>1)-48,"TEK MASTER",ALPHABET2,255); ! 1193: len=strlen(netnames[nw]); ! 1194: len<<=2; ! 1195: sprintf(tektempbuf,"%s",netnames[nw]); ! 1196: printext((xdim>>1)-len,(ydim>>1)-32,tektempbuf,ALPHABET,255); ! 1197: nextpage(); ! 1198: nextnetlevel(); ! 1199: } ! 1200: #endif ! 1201: ! 1202: netstats() ! 1203: { ! 1204: int icnt,i; ! 1205: ! 1206: #ifdef NETNAMES ! 1207: if( option[4] != 0 ) { ! 1208: icnt=connecthead; ! 1209: for( i=connecthead ; i >= 0 ; i=connectpoint2[i] ) { ! 1210: icnt=i; ! 1211: #if 0 ! 1212: if( score[i] > score[newnetleader] ) { ! 1213: if( score[newnetleader] < NETWINSCORE ) { ! 1214: newnetleader=i; ! 1215: } ! 1216: } ! 1217: #endif ! 1218: if( (toggles[TOGGLE_SCORE]) && (screensize >= xdim) ) { ! 1219: sprintf(tektempbuf,"%2d %10s %6ld",i,netnames[i],score[i]); ! 1220: printext(12,(windowy1+32)+(i<<3),tektempbuf,ALPHABET,255); ! 1221: } ! 1222: } ! 1223: #if 0 ! 1224: if( newnetleader != oldnetleader ) { ! 1225: oldnetleader=newnetleader; ! 1226: } ! 1227: else if( (totalclock-netclock) > 7200 ) { ! 1228: netclock=totalclock; ! 1229: sprintf(tektempbuf,"%2d %s LEADS",newnetleader,netnames[newnetleader],score[newnetleader]); ! 1230: showmessage(tektempbuf); ! 1231: } ! 1232: #endif ! 1233: } ! 1234: #endif ! 1235: } ! 1236: ! 1237: int ! 1238: tekscreenfx(void) ! 1239: { ! 1240: int ammo,n; ! 1241: long i; ! 1242: static short hcpic,rvpic,wppic; ! 1243: ! 1244: updatepaletteshifts(); ! 1245: updatesounds(); ! 1246: ! 1247: //#define COMMITTEE ! 1248: #ifdef COMMITTEE ! 1249: printext((xdim>>1)-25,windowy1+24,"THURS 6PM",ALPHABET,255); ! 1250: #endif ! 1251: ! 1252: #ifdef MATRIXTIMELIMIT ! 1253: if( mission == 7 ) { ! 1254: switch( minutes ) { ! 1255: case 1: ! 1256: if( (seconds == 0) && (fortieth < 10) ) { ! 1257: showmessage("1 MINUTE LEFT"); ! 1258: playsound(S_BEEP,0,0,0,ST_IMMEDIATE); ! 1259: } ! 1260: break; ! 1261: case 2: ! 1262: if( (seconds == 0) && (fortieth < 10) ) { ! 1263: showmessage("MATRIX TIMED OUT"); break; ! 1264: playsound(S_ALARM3,0,0,0,ST_IMMEDIATE); ! 1265: } ! 1266: else if( seconds == 3 ) { ! 1267: gameover=1; ! 1268: } ! 1269: break; ! 1270: } ! 1271: } ! 1272: #endif ! 1273: ! 1274: if( (messageon == 0) && notininventory ) { ! 1275: showmessage("NOT IN INVENTORY"); ! 1276: notininventory=0; ! 1277: } ! 1278: if( otoggles[TOGGLE_REARVIEW] ) { ! 1279: if (rvpos < 0) { ! 1280: rvpos+=(TICSPERFRAME<<2); ! 1281: if (rvpos >= 0) { ! 1282: rvpos=0; ! 1283: rvpic=RVDEVICEON; ! 1284: } ! 1285: else { ! 1286: n=tilesizx[RVDEVICE]/(RVDEVICEON-RVDEVICE); ! 1287: n=(tilesizx[RVDEVICE]-abs(rvpos))/n; ! 1288: rvpic=RVDEVICE+n; ! 1289: } ! 1290: } ! 1291: overwritesprite(rvpos,0,rvpic,0,0,0); ! 1292: if (rvpos == 0) { ! 1293: rearview(screenpeek); ! 1294: } ! 1295: } ! 1296: else if (abs(rvpos) < tilesizx[RVDEVICE]) { ! 1297: rvpos-=(TICSPERFRAME<<2); ! 1298: if (abs(rvpos) > tilesizx[RVDEVICE]) { ! 1299: rvpos=-tilesizx[RVDEVICE]; ! 1300: rvpic=RVDEVICE; ! 1301: } ! 1302: else { ! 1303: n=tilesizx[RVDEVICE]/(RVDEVICEON-RVDEVICE); ! 1304: n=(tilesizx[RVDEVICE]-abs(rvpos))/n; ! 1305: rvpic=RVDEVICE+n; ! 1306: } ! 1307: overwritesprite(rvpos,0,rvpic,0,0,0); ! 1308: } ! 1309: if( otoggles[TOGGLE_UPRT] ) { ! 1310: if (wppos > xdim-tilesizx[WPDEVICE]) { ! 1311: wppos-=(TICSPERFRAME<<2); ! 1312: if (wppos <= xdim-tilesizx[WPDEVICE]) { ! 1313: wppos=xdim-tilesizx[WPDEVICE]; ! 1314: } ! 1315: else { ! 1316: n=tilesizx[WPDEVICE]/(WPDEVICEON-WPDEVICE); ! 1317: n=(xdim-wppos)/n; ! 1318: wppic=WPDEVICE+n; ! 1319: } ! 1320: } ! 1321: if (wppos == xdim-tilesizx[WPDEVICE]) { ! 1322: switch (locselectedgun+1) { ! 1323: #ifdef GUNINWPDEV ! 1324: case GUN1FLAG: ! 1325: wppic=WPDEVICEGUN2; ! 1326: break; ! 1327: case GUN2FLAG: ! 1328: wppic=WPDEVICEGUN4; ! 1329: break; ! 1330: case GUN3FLAG: ! 1331: wppic=WPDEVICEGUN6; ! 1332: break; ! 1333: #endif ! 1334: default: ! 1335: wppic=WPDEVICEON; ! 1336: break; ! 1337: } ! 1338: } ! 1339: //overwritesprite(wppos,0,wppic,0,0,0); ! 1340: overwritesprite(wppos,0,WPDEVICE,0,0,0); ! 1341: } ! 1342: else if (wppos < xdim) { ! 1343: wppos+=(TICSPERFRAME<<2); ! 1344: if (wppos > xdim) { ! 1345: wppos=xdim; ! 1346: wppic=WPDEVICE; ! 1347: } ! 1348: else { ! 1349: n=tilesizx[WPDEVICE]/(WPDEVICEON-WPDEVICE); ! 1350: n=(xdim-wppos)/n; ! 1351: wppic=WPDEVICE+n; ! 1352: } ! 1353: //overwritesprite(wppos,0,wppic,0,0,0); ! 1354: overwritesprite(wppos,0,WPDEVICE,0,0,0); ! 1355: } ! 1356: #define SCOREANDTIMEONWPDEVICE ! 1357: #ifdef SCOREANDTIMEONWPDEVICE ! 1358: if( (wppic == WPDEVICEON) && (activemenu == 0) ) { ! 1359: sprintf(&tektempbuf,"%02d:%02d:%02d", hours,minutes,seconds); ! 1360: printext(xdim-74,8,tektempbuf,ALPHABET,255); ! 1361: sprintf(&tektempbuf,"%08d", score[screenpeek]); ! 1362: printext(xdim-74,18,tektempbuf,ALPHABET,255); ! 1363: } ! 1364: #endif ! 1365: #ifdef SCOREANDTIMEATBOTTOM ! 1366: if ((activemenu == 0) && !(biasthreshholdon)) { ! 1367: showtime(); ! 1368: showscore(); ! 1369: } ! 1370: #endif ! 1371: if( activemenu == 0 ) { ! 1372: showinv(screenpeek); ! 1373: } ! 1374: if( toggles[TOGGLE_GODMODE] && (screensize > xdim) ) { ! 1375: printext((xdim>>1)-16,4,"HOLY",ALPHABET2,255); ! 1376: } ! 1377: if (otoggles[TOGGLE_HEALTH]) { ! 1378: if (hcpos < 0) { ! 1379: hcpos+=(TICSPERFRAME<<2); ! 1380: if (hcpos >= 0) { ! 1381: hcpos=0; ! 1382: hcpic=HCDEVICEON; ! 1383: } ! 1384: else { ! 1385: n=tilesizx[HCDEVICE]/(HCDEVICEON-HCDEVICE); ! 1386: n=(tilesizx[HCDEVICE]-abs(hcpos))/n; ! 1387: hcpic=HCDEVICE+n; ! 1388: } ! 1389: } ! 1390: overwritesprite(hcpos,ydim-tilesizy[hcpic],hcpic,0,0,0); ! 1391: if (hcpic == HCDEVICEON) { ! 1392: for (n=0 ; n < health[screenpeek]/HCSCALE ; n++) { ! 1393: overwritesprite(hcpos+34+(n*5),ydim-tilesizy[hcpic]+7, ! 1394: GREENLIGHTPIC,(health[screenpeek]/HCSCALE)-n,0,0); ! 1395: } ! 1396: for (n=0 ; n < stun[screenpeek]/HCSCALE ; n++) { ! 1397: overwritesprite(hcpos+34+(n*5),ydim-tilesizy[hcpic]+13, ! 1398: YELLOWLIGHTPIC,(stun[screenpeek]/HCSCALE)-n,0,0); ! 1399: } ! 1400: switch (locselectedgun) { ! 1401: case 0: ! 1402: ammo=ammo1[screenpeek]; ! 1403: break; ! 1404: case 1: ! 1405: ammo=ammo2[screenpeek]; ! 1406: break; ! 1407: case 2: ! 1408: ammo=ammo3[screenpeek]; ! 1409: break; ! 1410: case 3: ! 1411: ammo=ammo4[screenpeek]; ! 1412: break; ! 1413: case 4: ! 1414: ammo=ammo5[screenpeek]; ! 1415: break; ! 1416: case 5: ! 1417: ammo=ammo6[screenpeek]; ! 1418: break; ! 1419: case 6: ! 1420: ammo=ammo7[screenpeek]; ! 1421: break; ! 1422: case 7: ! 1423: ammo=ammo8[screenpeek]; ! 1424: break; ! 1425: default: ! 1426: ammo=MAXAMMO; ! 1427: break; ! 1428: } ! 1429: if( ammo > MAXAMMO ) { ! 1430: ammo =MAXAMMO-1; ! 1431: } ! 1432: for (n=0 ; n < ammo/AMMOSCALE ; n++) { ! 1433: overwritesprite(hcpos+34+(n*5),ydim-tilesizy[hcpic]+19, ! 1434: BLUELIGHTPIC,(ammo/AMMOSCALE)-n,0,0); ! 1435: } ! 1436: } ! 1437: } ! 1438: else if (abs(hcpos) < tilesizx[HCDEVICE]) { ! 1439: hcpos-=(TICSPERFRAME<<2); ! 1440: if (abs(hcpos) > tilesizx[HCDEVICE]) { ! 1441: hcpos=-tilesizx[HCDEVICE]; ! 1442: hcpic=HCDEVICE; ! 1443: } ! 1444: else { ! 1445: n=tilesizx[HCDEVICE]/(HCDEVICEON-HCDEVICE); ! 1446: n=(tilesizx[HCDEVICE]-abs(hcpos))/n; ! 1447: hcpic=HCDEVICE+n; ! 1448: } ! 1449: overwritesprite(hcpos,ydim-tilesizy[hcpic],hcpic,0,0,0); ! 1450: } ! 1451: ! 1452: #ifdef FRAMECNT ! 1453: i=totalclock; ! 1454: if (i != frameval[framecnt]) { ! 1455: sprintf(tempbuf,"%ld",(CLKIPS*AVERAGEFRAMES)/(i-frameval[framecnt])); ! 1456: printext256(windowx1,windowy1,31,-1,tempbuf,1); ! 1457: frameval[framecnt]=i; ! 1458: } ! 1459: framecnt=((framecnt+1)&(AVERAGEFRAMES-1)); ! 1460: #endif ! 1461: #if CYBERMAXTEKMSCDBG ! 1462: if (cyberenabled) { ! 1463: sprintf(tempbuf,"y=%d p=%d r=%d",cybyaw,cybpit,cybrol); ! 1464: printext256(windowx1,windowy1+8,31,-1,tempbuf,1); ! 1465: } ! 1466: #endif ! 1467: ! 1468: if( (activemenu == 0) && (option[4] != 0) ) { ! 1469: netstats(); ! 1470: } ! 1471: ! 1472: if( biasthreshholdon ) { ! 1473: sprintf(tempbuf,"SET BIAS THRESHHOLD %3d", biasthreshhold); ! 1474: printext((xdim>>1)-96,windowy2-10,tempbuf,ALPHABET2,255); ! 1475: } ! 1476: else if( (activemenu == 0) && messageon ) { ! 1477: if( messagex > windowx1 ) ! 1478: printext(messagex,windowy2-32,messagebuf,ALPHABET2,255); ! 1479: } ! 1480: if( (activemenu == 0) && (toggles[TOGGLE_HEALTH] == 0) && (hcpos == -tilesizx[HCDEVICE]) && (screensize > 140) ) { ! 1481: if (!(biasthreshholdon)) { ! 1482: if( health[screenpeek] < 0 ) { ! 1483: sprintf(&tektempbuf,"%4d", 0); ! 1484: } ! 1485: else if( health[screenpeek] > MAXHEALTH ) { ! 1486: sprintf(&tektempbuf,"%4d", 1000); ! 1487: } ! 1488: else { ! 1489: sprintf(&tektempbuf,"%4d", health[screenpeek]); ! 1490: } ! 1491: printext(windowx1+6,windowy2-10,tektempbuf,ALPHABET2,255); ! 1492: } ! 1493: } ! 1494: if (activemenu) { ! 1495: domenu(); ! 1496: } ! 1497: ! 1498: return 0; ! 1499: } ! 1500: ! 1501: tektime(void) ! 1502: { ! 1503: fortieth++; ! 1504: if( fortieth == 40 ) { ! 1505: fortieth=0; ! 1506: seconds++; ! 1507: } ! 1508: if( seconds == 60 ) { ! 1509: minutes++; ! 1510: seconds=0; ! 1511: } ! 1512: if( minutes == 60 ) { ! 1513: hours++; ! 1514: minutes=0; ! 1515: } ! 1516: if( hours > 99 ) { ! 1517: hours=0; ! 1518: } ! 1519: if( messageon ) { ! 1520: messageon++; ! 1521: if( messageon == 160 ) { ! 1522: messageon=0; ! 1523: } ! 1524: } ! 1525: } ! 1526: ! 1527: void ! 1528: initmenu(void) ! 1529: { ! 1530: gameover=0; ! 1531: activemenu=0; ! 1532: } ! 1533: ! 1534: void ! 1535: newgame(char *mapname) ! 1536: { ! 1537: int i; ! 1538: ! 1539: if( option[4] != 0 ) { ! 1540: return; ! 1541: } ! 1542: ! 1543: ready2send=0; ! 1544: ! 1545: stopallsounds(); ! 1546: if (strcmp(boardfilename,mapname) != 0) { ! 1547: strcpy(boardfilename,mapname); ! 1548: } ! 1549: initpaletteshifts(); ! 1550: prepareboard(boardfilename); ! 1551: precache(); ! 1552: for (i=connecthead ; i >= 0 ; i=connectpoint2[i]) { ! 1553: initplayersprite((short)i); ! 1554: } ! 1555: ! 1556: ready2send=1; ! 1557: } ! 1558: ! 1559: #define TOTALMAPS 32 ! 1560: char *mapnames[TOTALMAPS] = { ! 1561: "subway0.map", // 0 ! 1562: "subway1.map", // 1 ! 1563: "subway2.map", // 2 ! 1564: "subway3.map", // 3 ! 1565: "level1.map", // 4 ! 1566: "level2.map", // 5 ! 1567: "", // 6 ! 1568: "", // 7 ! 1569: "city1.map", // 8 ! 1570: "", // 9 ! 1571: "", // 10 ! 1572: "beach1.map", // 11 ! 1573: "park1.map", // 12 ! 1574: "", // 13 ! 1575: "", // 14 ! 1576: "mid1.map", // 15 ! 1577: "mid2.map", // 16 ! 1578: "mid3.map", // 17 ! 1579: "sewer1.map", // 18 ! 1580: "sewer2.map", // 19 ! 1581: "inds1.map", // 20 ! 1582: "", // 21 ! 1583: "free1.map", // 22 ! 1584: "free2.map", // 23 ! 1585: "", // 24 ! 1586: "ware1.map", // 25 ! 1587: "ware2.map", // 26 ! 1588: "ware3.map", // 27 ! 1589: "", // 28 ! 1590: "", // 29 ! 1591: "final1.map", // 30 ! 1592: "" // 31 ! 1593: }; ! 1594: ! 1595: #define TOTALMISSIONS 7 ! 1596: #define MAXMAPSPERMISSION 6 ! 1597: int missionset[TOTALMISSIONS][MAXMAPSPERMISSION] = { ! 1598: //SUB M1 M2 M3 M4 MTRX ! 1599: { 0, 4, 5,-1,10, -1 }, // mission 0 ! 1600: { 0, 8,-1,-1,-1, -1 }, // mission 1 ! 1601: { 1, 11,12,-1,-1, -1 }, // mission 2 ! 1602: { 1, 15,16,17,-1, -1 }, // mission 3 ! 1603: { 2, 18,19,20,-1, -1 }, // mission 4 ! 1604: { 2, 22,23,-1,-1, -1 }, // mission 5 ! 1605: { 3, 25,26,27,-1, -1 }, // mission 6 ! 1606: }; ! 1607: ! 1608: int ! 1609: accessiblemap(int mn) ! 1610: { ! 1611: int i; ! 1612: ! 1613: if( (mn < 0) || (mn >= TOTALMAPS) ) { ! 1614: return(0); ! 1615: } ! 1616: if( strlen(mapnames[mn]) < 2 ) { ! 1617: return(0); ! 1618: } ! 1619: for( i=0; i<MAXMAPSPERMISSION; i++ ) { ! 1620: if( missionset[mission][i] == mn ) { ! 1621: return(1); ! 1622: } ! 1623: } ! 1624: return(0); ! 1625: } ! 1626: ! 1627: int ! 1628: mapreturn(int cmap) ! 1629: { ! 1630: /* ! 1631: "level1.map", // 4 ! 1632: "level2.map", // 5 ! 1633: "city1.map", // 8 ! 1634: ! 1635: "beach1.map", // 11 ! 1636: "park1.map", // 12 ! 1637: "mid1.map", // 15 ! 1638: "mid2.map", // 16 ! 1639: "mid3.map", // 17 ! 1640: ! 1641: "sewer1.map", // 18 ! 1642: "sewer2.map", // 19 ! 1643: "inds1.map", // 20 ! 1644: "free1.map", // 22 ! 1645: "free2.map", // 23 ! 1646: ! 1647: "ware1.map", // 25 ! 1648: "ware2.map", // 26 ! 1649: "ware3.map", // 27 ! 1650: */ ! 1651: int rv; ! 1652: ! 1653: switch( cmap ) { ! 1654: case 4: rv=0; warpretx=-27200; warprety=21500; warpretang= 512; warpretsect= 351; break; ! 1655: case 5: rv=0; warpretx= 7295; warprety=21500; warpretang= 512; warpretsect= 349; break; ! 1656: case 8: rv=0; warpretx=-11902; warprety=39300; warpretang=1536; warpretsect= 353; break; ! 1657: case 11: rv=1; warpretx=-27200; warprety=21500; warpretang= 512; warpretsect= 489; break; ! 1658: case 12: rv=1; warpretx= 7295; warprety=21500; warpretang= 512; warpretsect= 492; break; ! 1659: case 15: rv=1; warpretx=-11904; warprety=39300; warpretang=1536; warpretsect= 488; break; ! 1660: case 16: rv=1; warpretx= 24322; warprety=39300; warpretang=1536; warpretsect= 486; break; ! 1661: case 17: rv=1; warpretx= 57346; warprety=39300; warpretang=1536; warpretsect= 483; break; ! 1662: case 18: rv=2; warpretx=-27200; warprety=21500; warpretang= 512; warpretsect= 486; break; ! 1663: case 19: rv=2; warpretx= 7295; warprety=21500; warpretang= 512; warpretsect= 488; break; ! 1664: case 20: rv=2; warpretx= 41600; warprety=21500; warpretang= 512; warpretsect= 490; break; ! 1665: case 22: rv=2; warpretx=-11904; warprety=39300; warpretang=1536; warpretsect= 483; break; ! 1666: case 23: rv=2; warpretx= 24380; warprety=39300; warpretang=1536; warpretsect= 482; break; ! 1667: case 25: rv=3; warpretx=-27200; warprety=21500; warpretang= 512; warpretsect= 477; break; ! 1668: case 26: rv=3; warpretx= 7295; warprety=21500; warpretang= 512; warpretsect= 472; break; ! 1669: case 27: rv=3; warpretx= 41600; warprety=21500; warpretang= 512; warpretsect= 494; break; ! 1670: default: rv=-1;break; ! 1671: } ! 1672: ! 1673: return(rv); ! 1674: } ! 1675: ! 1676: void ! 1677: newmap(int mapno) ! 1678: { ! 1679: int i,sn,p; ! 1680: int savhealth; ! 1681: int savestun; ! 1682: int savereds; ! 1683: int saveblues; ! 1684: int saveaccutrk; ! 1685: int newmap; ! 1686: ! 1687: if( option[4] != 0 ) { ! 1688: return; ! 1689: } ! 1690: if( mapno >= TOTALMAPS ) { ! 1691: return; ! 1692: } ! 1693: ! 1694: switch( mapno ) { ! 1695: case 0: ! 1696: case 1: ! 1697: case 2: ! 1698: case 3: ! 1699: newmap=mapreturn(currentmapno); ! 1700: if( newmap != mapno ) { ! 1701: crash("bad return map"); ! 1702: } ! 1703: break; ! 1704: } ! 1705: ! 1706: drawscreen(screenpeek,0); ! 1707: printext((xdim>>1)-44,(ydim>>1)-32,"LOADING MAP",ALPHABET2,255); ! 1708: nextpage(); ! 1709: ! 1710: initpaletteshifts(); ! 1711: p=screenpeek; ! 1712: ! 1713: #if 0 ! 1714: switch( currentmapno ) { ! 1715: case 0: ! 1716: case 1: ! 1717: case 2: ! 1718: case 3: ! 1719: warpretx=posx[p]; ! 1720: warprety=posy[p]; ! 1721: warpretz=posz[p]; ! 1722: warpretang=ang[p]; ! 1723: warpretsect=cursectnum[p]; ! 1724: break; ! 1725: default: ! 1726: break; ! 1727: } ! 1728: #endif ! 1729: ! 1730: savhealth=health[p]; ! 1731: savestun=stun[p]; ! 1732: savereds=invredcards[p]; ! 1733: saveblues=invbluecards[p]; ! 1734: saveaccutrk=invaccutrak[p]; ! 1735: ! 1736: newgame(mapnames[mapno]); ! 1737: ! 1738: health[p]=savhealth; ! 1739: stun[p]=savestun; ! 1740: invredcards[p]=savereds; ! 1741: invbluecards[p]=saveblues; ! 1742: invaccutrak[p]=saveaccutrk; ! 1743: ! 1744: #if 0 ! 1745: switch( mapno ) { ! 1746: case 0: ! 1747: case 1: ! 1748: case 2: ! 1749: case 3: ! 1750: sn=playersprite[p]; ! 1751: sprite[sn].x=warpretx; ! 1752: sprite[sn].y=warprety; ! 1753: sprite[sn].z=warpretz; ! 1754: changespritesect(sn,warpretsect); ! 1755: posx[p]=sprite[sn].x; ! 1756: posy[p]=sprite[sn].y; ! 1757: posz[p]=sprite[sn].z; ! 1758: ang[p]=((warpretang+1024)&2047); ! 1759: cursectnum[p]=sprite[sn].sectnum; ! 1760: updatesector(posx[p],posy[p],cursectnum[p]); ! 1761: break; ! 1762: default: ! 1763: break; ! 1764: } ! 1765: #endif ! 1766: ! 1767: switch( mapno ) { ! 1768: case 0: ! 1769: case 1: ! 1770: case 2: ! 1771: case 3: ! 1772: sn=playersprite[p]; ! 1773: ! 1774: sprite[sn].x=warpretx; ! 1775: sprite[sn].y=warprety; ! 1776: sprite[sn].ang=warpretang; ! 1777: copybuf(&sprite[sn].x,&osprite[sn].x,3); ! 1778: changespritesect(sn,warpretsect); ! 1779: ! 1780: posx[p]=sprite[sn].x; ! 1781: posy[p]=sprite[sn].y; ! 1782: ang[p]=sprite[sn].ang; ! 1783: cursectnum[p]=sprite[sn].sectnum; ! 1784: ! 1785: //updatesector(posx[p],posy[p],cursectnum[p]); ! 1786: //pushmove(&posx[p],&posy[p],&posz[p],&cursectnum[p],128L,4<<8,4<<8,0); ! 1787: break; ! 1788: default: ! 1789: break; ! 1790: } ! 1791: ! 1792: vel=0; ! 1793: svel=0; ! 1794: angvel=0; ! 1795: ! 1796: currentmapno=mapno; ! 1797: showmessage(strupr(mapnames[mapno])); ! 1798: ! 1799: musicfade(); ! 1800: if( mapno <= 3 ) { ! 1801: menusong(1); ! 1802: } ! 1803: else { ! 1804: startmusic(mission); ! 1805: } ! 1806: ! 1807: } ! 1808: ! 1809: void ! 1810: getloadsavenames(void) ! 1811: { ! 1812: int fil,i; ! 1813: ! 1814: for (i=0 ; i < MAXLOADSAVEOPTS ; i++) { ! 1815: sprintf(tempbuf,"savegam%d.tek",i+1); ! 1816: if (access(tempbuf,F_OK) == 0) { ! 1817: fil=open(tempbuf,O_BINARY|O_RDONLY,S_IREAD); ! 1818: read(fil,&loadsavenames[i],MAXLOADSAVESIZE); ! 1819: close(fil); ! 1820: } ! 1821: else { ! 1822: strncpy(&loadsavenames[i],"-EMPTY-",MAXLOADSAVESIZE); ! 1823: } ! 1824: } ! 1825: } ! 1826: ! 1827: void ! 1828: mprintf(short x,short y,char prop,char shade,char palnum,char *stg,...) ! 1829: { ! 1830: int i,n,pic,propx; ! 1831: va_list vargs; ! 1832: ! 1833: va_start(vargs,stg); ! 1834: vsprintf(tempbuf,stg,vargs); ! 1835: va_end(vargs); ! 1836: strupr(tempbuf); ! 1837: n=strlen(tempbuf); ! 1838: if (x == -1) { ! 1839: if (prop) { ! 1840: pic=MFONT_A; ! 1841: propx=0; ! 1842: for (i=0 ; i < n ; i++) { ! 1843: if (isalpha(tempbuf[i])) { ! 1844: pic=MFONT_A+tempbuf[i]-'A'; ! 1845: } ! 1846: else if (isdigit(tempbuf[i])) { ! 1847: pic=MFONT_0+tempbuf[i]-'0'; ! 1848: } ! 1849: else if (tempbuf[i] > ' ' && tempbuf[i] < '0') { ! 1850: pic=MFONT_SPECIAL1+tempbuf[i]-'!'; ! 1851: } ! 1852: propx+=tilesizx[pic]; ! 1853: } ! 1854: x=(xdim>>1)-(propx>>1); ! 1855: } ! 1856: else { ! 1857: x=(xdim>>1)-(n<<3); ! 1858: } ! 1859: } ! 1860: if (y == -1) { ! 1861: y=(ydim>>1)-(MFONTYSTEP>>1); ! 1862: } ! 1863: else { ! 1864: y=MFONTYSTEP*y; ! 1865: if (ydim >= 400) { ! 1866: y<<=1; ! 1867: } ! 1868: } ! 1869: pic=MFONT_A; ! 1870: for (i=0 ; i < n ; i++) { ! 1871: if (isalpha(tempbuf[i])) { ! 1872: pic=MFONT_A+tempbuf[i]-'A'; ! 1873: overwritesprite(x,y,pic,shade,0,palnum); ! 1874: } ! 1875: else if (isdigit(tempbuf[i])) { ! 1876: pic=MFONT_0+tempbuf[i]-'0'; ! 1877: overwritesprite(x,y,pic,shade,0,palnum); ! 1878: } ! 1879: else if (tempbuf[i] > ' ' && tempbuf[i] < '0') { ! 1880: pic=MFONT_SPECIAL1+tempbuf[i]-'!'; ! 1881: overwritesprite(x,y,pic,shade,0,palnum); ! 1882: } ! 1883: if (prop) { ! 1884: x+=tilesizx[pic]; ! 1885: } ! 1886: else { ! 1887: if (tempbuf[i] == ' ') { ! 1888: x+=8; ! 1889: } ! 1890: else { ! 1891: x+=16; ! 1892: } ! 1893: } ! 1894: } ! 1895: } ! 1896: ! 1897: void ! 1898: showmenu(void) ! 1899: { ! 1900: if (xdim < 640) { ! 1901: if (xdim != 320 || ydim != 200) { ! 1902: setview(0L,0L,xdim-1,ydim-1); ! 1903: overwritesprite(0L,0L,MENUSTATION,0,2,0); ! 1904: overwritesprite(0L,0L,MENUGLASS,0,6,0); ! 1905: setview(windowx1,windowy1,windowx2,windowy2); ! 1906: } ! 1907: else { ! 1908: overwritesprite(0L,0L,MENUSTATION,0,0,0); ! 1909: overwritesprite(0L,0L,MENUGLASS,0,4,0); ! 1910: } ! 1911: } ! 1912: else { ! 1913: if (xdim > 640) { ! 1914: setview(0L,0L,xdim-1,ydim-1); ! 1915: overwritesprite(0L,0L,MENUPANEL4801,0,2,0); ! 1916: overwritesprite(0L,ydim>>1,MENUPANEL4802,0,2,0); ! 1917: setview(windowx1,windowy1,windowx2,windowy2); ! 1918: } ! 1919: else { ! 1920: overwritesprite(0L,0L,MENUPANEL4801,0,0,0); ! 1921: overwritesprite(0L,ydim>>1,MENUPANEL4802,0,0,0); ! 1922: } ! 1923: } ! 1924: } ! 1925: ! 1926: void ! 1927: showhelpscreen(void) ! 1928: { ! 1929: if (xdim < 640) { ! 1930: if (xdim != 320 || ydim != 200) { ! 1931: setview(0L,0L,xdim-1,ydim-1); ! 1932: overwritesprite(0L,0L,HELPSCREENPIC,0,2,0); ! 1933: setview(windowx1,windowy1,windowx2,windowy2); ! 1934: } ! 1935: else { ! 1936: overwritesprite(0L,0L,HELPSCREENPIC,0,0,0); ! 1937: } ! 1938: } ! 1939: else { ! 1940: if (xdim > 640) { ! 1941: setview(0L,0L,xdim-1,ydim-1); ! 1942: overwritesprite(0L,0L,HELPSCREEN4801,0,2,0); ! 1943: overwritesprite(0L,ydim>>1,HELPSCREEN4802,0,2,0); ! 1944: setview(windowx1,windowy1,windowx2,windowy2); ! 1945: } ! 1946: else { ! 1947: overwritesprite(0L,0L,HELPSCREEN4801,0,0,0); ! 1948: overwritesprite(0L,240L,HELPSCREEN4802,0,0,0); ! 1949: } ! 1950: } ! 1951: } ! 1952: ! 1953: void ! 1954: domenu(void) ! 1955: { ! 1956: char pal; ! 1957: int i,stepy; ! 1958: long dax,dax2,day,day2; ! 1959: struct menu *mptr; ! 1960: static int firstpass,odiff,osoundv,omusicv,omousesens,oheadb; ! 1961: ! 1962: if (activemenu == HELPSCREEN) { ! 1963: showhelpscreen(); ! 1964: return; ! 1965: } ! 1966: if (firstpass == 0) { ! 1967: firstpass=1; ! 1968: getloadsavenames(); ! 1969: odiff=difficulty; ! 1970: osoundv=soundv; ! 1971: omusicv=musicv; ! 1972: omousesens=mousesensitivity; ! 1973: oheadb=headbobon; ! 1974: if (headbobon) { ! 1975: strcpy(headbobstr,"HEAD BOB ON"); ! 1976: } ! 1977: else { ! 1978: strcpy(headbobstr,"HEAD BOB OFF"); ! 1979: } ! 1980: } ! 1981: if (activemenu == 255) { ! 1982: #ifdef DYNAMICSAVESETUP ! 1983: if (odiff != difficulty || osoundv != soundv ! 1984: || omusicv != musicv || omousesens != mousesensitivity ! 1985: || oheadb != headbobon) { ! 1986: teksavesetup(); ! 1987: } ! 1988: #endif ! 1989: playsound( S_MENUSOUND2 ,0,0,0,ST_IMMEDIATE); ! 1990: setup3dscreen(); ! 1991: activemenu=0; ! 1992: firstpass=0; ! 1993: return; ! 1994: } ! 1995: vel=svel=angvel=0; ! 1996: mptr=&menu[activemenu][0]; ! 1997: if (redrawborders) { ! 1998: dax=windowx1; ! 1999: dax2=windowx2; ! 2000: day=windowy1; ! 2001: day2=windowy2; ! 2002: if (dax2-dax < xdim-1 || day2-day < ydim-1) { ! 2003: setup3dscreen(); ! 2004: } ! 2005: redrawborders=0; ! 2006: } ! 2007: if (selopt == 0) { ! 2008: switch (activemenu) { ! 2009: case MENULOADGAME: ! 2010: case MENUSAVEGAME: ! 2011: selopt=1; ! 2012: break; ! 2013: } ! 2014: } ! 2015: showmenu(); ! 2016: for (i=0 ; i < MAXSUBOPTIONS ; i++) { ! 2017: if (mptr->label != NULL) { ! 2018: if (selopt == i) { ! 2019: pal=4; ! 2020: } ! 2021: else { ! 2022: pal=mptr->pal; ! 2023: } ! 2024: mprintf(mptr->x,mptr->y,mptr->proportional,mptr->shade,pal, ! 2025: mptr->label); ! 2026: if (mptr->nextopt != NULL) { ! 2027: mptr=mptr->nextopt; ! 2028: } ! 2029: else { ! 2030: break; ! 2031: } ! 2032: } ! 2033: } ! 2034: if (activemenu == 5 && loadnewgame) { // select a mission ! 2035: switch (loadnewgame) { ! 2036: case 1: // day mission ! 2037: newgame("city.map"); ! 2038: break; ! 2039: case 2: // night mission ! 2040: newgame("hospital.map"); ! 2041: break; ! 2042: case 3: ! 2043: newgame("police.map"); ! 2044: break; ! 2045: case 4: ! 2046: newgame("warehse.map"); ! 2047: break; ! 2048: } ! 2049: loadnewgame=0; ! 2050: activemenu=255; ! 2051: } ! 2052: if (activemenu == 6 || activemenu == 7) { // load/save a game ! 2053: dax=(xdim>>1)-((MAXLOADSAVESIZE*tilesizx[MFONT_A])>>1); ! 2054: dax-=tilesizx[MFONT_A]; ! 2055: for (i=1 ; i <= MAXLOADSAVEOPTS ; i++) { ! 2056: if (selopt == i) { ! 2057: pal=4; ! 2058: if (loctypemode == 0) { ! 2059: mprintf(dax,2+i,0,0,pal,"%d %s",i,loadsavenames[i-1]); ! 2060: } ! 2061: else { ! 2062: mprintf(dax,2+i,0,0,pal,"%d %s",i,lockeybuf); ! 2063: if (totalclock > curblinkclock) { ! 2064: curblinkclock=totalclock+(CLKIPS>>2); ! 2065: curblink^=1; ! 2066: } ! 2067: if (curblink) { ! 2068: day=((2+i)*MFONTYSTEP)+3; ! 2069: if (ydim >= 400) { ! 2070: day<<=1; ! 2071: } ! 2072: overwritesprite(dax+((strlen(lockeybuf)+1)*16)+5,day, ! 2073: YELLOWLIGHTPIC,0,0,0); ! 2074: } ! 2075: } ! 2076: } ! 2077: else { ! 2078: pal=1; ! 2079: mprintf(dax,2+i,0,0,pal,"%d %s",i,loadsavenames[i-1]); ! 2080: } ! 2081: } ! 2082: } ! 2083: else if (activemenu == 8) { // sound/music volume ! 2084: dax=(xdim>>1)-(tilesizx[SLIDERBARPIC]>>1); ! 2085: day=50; ! 2086: if (ydim >= 400) { ! 2087: day<<=1; ! 2088: } ! 2089: overwritesprite(dax,day,SLIDERBARPIC,0,0,0); ! 2090: overwritesprite(dax+10+(soundv*7),day,SLIDERKNOBPIC,0,0,0); ! 2091: day=86; ! 2092: if (ydim >= 400) { ! 2093: day<<=1; ! 2094: } ! 2095: overwritesprite(dax,day,SLIDERBARPIC,0,0,0); ! 2096: overwritesprite(dax+10+(musicv*7),day,SLIDERKNOBPIC,0,0,0); ! 2097: } ! 2098: else if (activemenu == 9) { // mouse sensitivity ! 2099: dax=(xdim>>1)-(tilesizx[SLIDERBARPIC]>>1); ! 2100: day=26; ! 2101: if (ydim >= 400) { ! 2102: day<<=1; ! 2103: } ! 2104: overwritesprite(dax,day,SLIDERBARPIC,0,0,0); ! 2105: dax+=(10+(mousesensitivity*7)); ! 2106: overwritesprite(dax,day,SLIDERKNOBPIC,0,0,0); ! 2107: } ! 2108: } ! 2109: ! 2110: void ! 2111: domenuinput(void) ! 2112: { ! 2113: char c,keystate; ! 2114: int tries; ! 2115: struct menu *mptr; ! 2116: ! 2117: if (activemenu == 255) { ! 2118: return; ! 2119: } ! 2120: if (loctypemode) { ! 2121: while (keyfifoplc != keyfifoend) { ! 2122: c=keyfifo[keyfifoplc]; ! 2123: keystate=keyfifo[(keyfifoplc+1)&(KEYFIFOSIZ-1)]; ! 2124: keyfifoplc=((keyfifoplc+2)&(KEYFIFOSIZ-1)); ! 2125: if (keystate != 0) { ! 2126: if (c == 0x01) { // ESC key ! 2127: keystatus[1]=0; ! 2128: locmessagelen=0; ! 2129: loctypemode=0; ! 2130: } ! 2131: if (c == 0x0E) { // backspace key ! 2132: keystatus[14]=0; ! 2133: if (locmessagelen == 0) { ! 2134: break; ! 2135: } ! 2136: locmessagelen--; ! 2137: lockeybuf[locmessagelen]=0; ! 2138: } ! 2139: if (c == 0x1C || c == 0x9C) { // enter keys ! 2140: keystatus[0x1C]=keystatus[0x9C]=0; ! 2141: if (locmessagelen > 0) { ! 2142: strncpy(loadsavenames[selopt-1],lockeybuf, ! 2143: MAXLOADSAVESIZE); ! 2144: locmessagelen=0; ! 2145: } ! 2146: loctypemode=0; ! 2147: if( option[4] == 0 ) { ! 2148: savegame(selopt); ! 2149: } ! 2150: activemenu=255; ! 2151: break; ! 2152: } ! 2153: if (locmessagelen < (MAXLOADSAVESIZE-1) && c < 128) { ! 2154: if (keystatus[0x2A] || keystatus[0x36]) { ! 2155: c=scantoascwithshift[c]; ! 2156: } ! 2157: else { ! 2158: c=scantoasc[c]; ! 2159: } ! 2160: if (c != 0) { ! 2161: if (isalpha(c) || isdigit(c) || c == ' ') { ! 2162: lockeybuf[locmessagelen++]=toupper(c); ! 2163: lockeybuf[locmessagelen]=0; ! 2164: } ! 2165: } ! 2166: } ! 2167: } ! 2168: } ! 2169: return; ! 2170: } ! 2171: mptr=&menu[activemenu][selopt]; ! 2172: if (keystatus[1]) { ! 2173: keystatus[1]=0; ! 2174: playsound( S_BEEP ,0,0,0,ST_IMMEDIATE); ! 2175: if (menudirect) { ! 2176: activemenu=255; ! 2177: menudirect=0; ! 2178: } ! 2179: else { ! 2180: activemenu=mptr->backmenu; ! 2181: } ! 2182: selopt=lastselopt[activemenu]; ! 2183: if (activemenu == 0) { ! 2184: activemenu=255; ! 2185: } ! 2186: } ! 2187: else if (keystatus[keys[0]]) { // up arrow ! 2188: keystatus[keys[0]]=0; ! 2189: playsound( S_BOOP ,0,0,0,ST_IMMEDIATE); ! 2190: tries=0; ! 2191: while (tries < MAXSUBOPTIONS) { ! 2192: selopt--; ! 2193: if (selopt <= 0) { ! 2194: selopt=5; ! 2195: } ! 2196: lastselopt[activemenu]=selopt; ! 2197: if (menu[activemenu][selopt].label != NULL) { ! 2198: break; ! 2199: } ! 2200: tries++; ! 2201: } ! 2202: } ! 2203: else if (keystatus[keys[1]]) { // down arrow ! 2204: keystatus[keys[1]]=0; ! 2205: playsound( S_BOOP ,0,0,0,ST_IMMEDIATE); ! 2206: tries=0; ! 2207: while (tries < MAXSUBOPTIONS) { ! 2208: selopt++; ! 2209: if (selopt > 5) { ! 2210: selopt=1; ! 2211: } ! 2212: lastselopt[activemenu]=selopt; ! 2213: if (menu[activemenu][selopt].label != NULL) { ! 2214: break; ! 2215: } ! 2216: tries++; ! 2217: } ! 2218: } ! 2219: else if (activemenu == 4) { ! 2220: if (keystatus[21] != 0) { // "Y" key ! 2221: switch (activemenu) { ! 2222: case 4: ! 2223: gameover=1; ! 2224: //playsound( ??? ,0,0,0,ST_IMMEDIATE); ! 2225: break; ! 2226: case 5: ! 2227: //endgame=1; ! 2228: activemenu=255; ! 2229: break; ! 2230: } ! 2231: } ! 2232: else if (keystatus[49] != 0) { // "N" key ! 2233: activemenu=255; ! 2234: } ! 2235: } ! 2236: else if (keystatus[0x1C] || keystatus[0x9C]) { // enter key ! 2237: keystatus[0x1C]=keystatus[0x9C]=0; ! 2238: playsound( S_MENUSOUND2 ,0,0,0,ST_IMMEDIATE); ! 2239: if (mptr->tomenu != 0) { ! 2240: activemenu=mptr->tomenu; ! 2241: selopt=lastselopt[activemenu]; ! 2242: redrawborders=1; ! 2243: } ! 2244: else { ! 2245: switch (activemenu) { ! 2246: case 1: ! 2247: break; ! 2248: case 2: ! 2249: difficulty=selopt; ! 2250: newgame(boardfilename); ! 2251: activemenu=255; ! 2252: break; ! 2253: case 3: ! 2254: if (selopt == 3) { ! 2255: if (strcmp(headbobstr,"HEAD BOB ON") == 0) { ! 2256: strcpy(headbobstr,"HEAD BOB OFF"); ! 2257: headbobon=0; ! 2258: } ! 2259: else { ! 2260: strcpy(headbobstr,"HEAD BOB ON"); ! 2261: headbobon=1; ! 2262: } ! 2263: } ! 2264: break; ! 2265: case 5: // day/night mission ! 2266: loadnewgame=selopt; ! 2267: break; ! 2268: case 6: // load game ! 2269: stopallsounds(); ! 2270: if( option[4] == 0 ) { ! 2271: loadgame(selopt); ! 2272: } ! 2273: activemenu=255; ! 2274: break; ! 2275: case 7: // save game ! 2276: keystatus[0x1C]=keystatus[0x9C]=0; ! 2277: loctypemode=1; ! 2278: keyfifoplc=keyfifoend; ! 2279: if (strcmp(loadsavenames[selopt-1],"-EMPTY-") != 0) { ! 2280: strncpy(lockeybuf,loadsavenames[selopt-1], ! 2281: MAXLOADSAVESIZE); ! 2282: locmessagelen=strlen(lockeybuf); ! 2283: } ! 2284: else { ! 2285: memset(lockeybuf,0,sizeof(lockeybuf)); ! 2286: locmessagelen=0; ! 2287: } ! 2288: break; ! 2289: } ! 2290: } ! 2291: } ! 2292: else if (activemenu == 8 || activemenu == 9) { ! 2293: if (keystatus[0x4B] || keystatus[0xCB]) { // left arrow key ! 2294: keystatus[0x4B]=keystatus[0xCB]=0; ! 2295: switch (selopt) { ! 2296: case 1: ! 2297: if (activemenu == 8) { ! 2298: if (soundv > 0) { ! 2299: soundv--; ! 2300: soundmastervolume(soundv<<11); ! 2301: } ! 2302: } ! 2303: else { ! 2304: if (mousesensitivity > 0) { ! 2305: mousesensitivity--; ! 2306: } ! 2307: } ! 2308: break; ! 2309: case 2: ! 2310: if (musicv > 0) { ! 2311: musicv--; ! 2312: songmastervolume(musicv<<3); ! 2313: } ! 2314: break; ! 2315: } ! 2316: playsound( S_MENUSOUND1 ,0,0,0,ST_IMMEDIATE); ! 2317: } ! 2318: else if (keystatus[0x4D] || keystatus[0xCD]) { // right arrow key ! 2319: keystatus[0x4D]=keystatus[0xCD]=0; ! 2320: switch (selopt) { ! 2321: case 1: ! 2322: if (activemenu == 8) { ! 2323: if (soundv < 16) { ! 2324: soundv++; ! 2325: soundmastervolume(soundv<<11); ! 2326: } ! 2327: } ! 2328: else { ! 2329: if (mousesensitivity < 16) { ! 2330: mousesensitivity++; ! 2331: } ! 2332: } ! 2333: break; ! 2334: case 2: ! 2335: if (musicv < 16) { ! 2336: musicv++; ! 2337: songmastervolume(musicv<<3); ! 2338: } ! 2339: break; ! 2340: } ! 2341: playsound( S_MENUSOUND1 ,0,0,0,ST_IMMEDIATE); ! 2342: } ! 2343: } ! 2344: else if (keystatus[16]) { ! 2345: keystatus[16]=0; ! 2346: gameover=1; ! 2347: } ! 2348: } ! 2349: ! 2350: rearview(int snum) ! 2351: { ! 2352: long cposx, cposy, cposz, choriz, czoom, tposx, tposy, thoriz; ! 2353: short cang, tang; ! 2354: short plrang,plrhoriz; ! 2355: short xstrt,ystrt; ! 2356: int oldwx1,oldwx2,oldwy1,oldwy2; ! 2357: ! 2358: if( (toggles[TOGGLE_REARVIEW] == 0) ) { ! 2359: return; ! 2360: } ! 2361: ! 2362: oldwx1=windowx1; oldwx2=windowx2; ! 2363: oldwy1=windowy1; oldwy2=windowy2; ! 2364: ! 2365: plrang=ang[snum]; ! 2366: plrhoriz=ohoriz[snum]; ! 2367: setview(67,9,130,40); ! 2368: ! 2369: oang[snum]=(plrang+1024)&2047; ! 2370: ohoriz[snum]=(200-plrhoriz); ! 2371: ! 2372: cposx = oposx[snum]+mulscale(posx[snum]-oposx[snum],0,16); ! 2373: cposy = oposy[snum]+mulscale(posy[snum]-oposy[snum],0,16); ! 2374: cposz = oposz[snum]+mulscale(posz[snum]-oposz[snum],0,16); ! 2375: if (frameinterpolate == 0) ! 2376: { cposx = posx[snum]; cposy = posy[snum]; cposz = posz[snum]; } ! 2377: choriz = ohoriz[snum]+mulscale(horiz[snum]-ohoriz[snum],0,16); ! 2378: czoom = ozoom[snum]+mulscale(zoom[snum]-ozoom[snum],0,16); ! 2379: cang = oang[snum]+mulscale(((ang[snum]+1024-oang[snum])&2047)-1024,0,16); ! 2380: ! 2381: drawrooms(cposx,cposy,cposz,cang,choriz,cursectnum[snum]); ! 2382: rearviewdraw=1; ! 2383: analyzesprites(posx[snum],posy[snum],0); ! 2384: rearviewdraw=0; ! 2385: drawmasks(); ! 2386: ! 2387: oang[snum]=plrang; ! 2388: ohoriz[snum]=plrhoriz; ! 2389: setview(oldwx1,oldwy1, oldwx2,oldwy2); ! 2390: } ! 2391: ! 2392: usage() ! 2393: { ! 2394: printf("\ntekwar [option1] [option2] .... [optionN]\n"); ! 2395: printf("options: practice\n"); ! 2396: printf(" nogore\n"); ! 2397: printf(" nobriefs\n"); ! 2398: printf(" netname [NAME]\n"); ! 2399: printf(" noenemies\n"); ! 2400: printf(" cyber 1|2|3|4\n"); ! 2401: printf(" iglass 1|2|3|4\n"); ! 2402: printf(" spaceball\n"); ! 2403: printf(" vfx1\n\n"); ! 2404: } ! 2405: ! 2406: #define MAXNAMESIZE 11 ! 2407: extern char localname[MAXNAMESIZE]; ! 2408: extern ! 2409: int coopmode, ! 2410: switchlevelsflag; ! 2411: ! 2412: tekargv(short int argc,char **argv) ! 2413: { ! 2414: int p,sl; ! 2415: char argmatch=0; ! 2416: ! 2417: if( (argc >= 2) ) { ! 2418: if( strchr(argv[1],'.') != 0 ) { ! 2419: strcpy(&boardfilename,argv[1]); ! 2420: if( (strcmp(boardfilename,"matrix.map") == 0) || (strcmp(boardfilename,"MATRIX.MAP") == 0) ) { ! 2421: mission=7; ! 2422: } ! 2423: singlemapmode=1; ! 2424: nobriefflag=1; ! 2425: } ! 2426: } ! 2427: else { ! 2428: strcpy(&boardfilename,"subway0.map"); ! 2429: } ! 2430: ! 2431: goreflag=1; ! 2432: ! 2433: for( p=1 ; p < argc ; p++ ) { ! 2434: if (strcmp(strupr(argv[p]),"PRACTICE") == 0) { ! 2435: generalplay=1; ! 2436: argmatch++; ! 2437: } ! 2438: if (strcmp(strupr(argv[p]),"NOVIDEOID") == 0) { ! 2439: novideoid=1; ! 2440: argmatch++; ! 2441: } ! 2442: if (strcmp(strupr(argv[p]),"SPACEBALL") == 0) { ! 2443: spaceballon=1; ! 2444: argmatch++; ! 2445: } ! 2446: if (strcmp(strupr(argv[p]),"NETNAME") == 0) { ! 2447: bypasscdcheck=1; ! 2448: if( (p+1) < argc ) { ! 2449: memset(localname,0,sizeof(localname)); ! 2450: memcpy(localname,strupr(argv[p+1]),10); ! 2451: localname[10]=0; ! 2452: } ! 2453: argmatch++; ! 2454: } ! 2455: if (strcmp(strupr(argv[p]),"NOGORE") == 0) { ! 2456: argmatch++; ! 2457: goreflag=0; ! 2458: } ! 2459: if (strcmp(strupr(argv[p]),"NOENEMIES") == 0) { ! 2460: argmatch++; ! 2461: noenemiesflag=1; ! 2462: } ! 2463: if (strcmp(strupr(argv[p]),"NOGUARD") == 0) { ! 2464: argmatch++; ! 2465: noguardflag=1; ! 2466: } ! 2467: if (strcmp(strupr(argv[p]),"NOSTALK") == 0) { ! 2468: argmatch++; ! 2469: nostalkflag=1; ! 2470: } ! 2471: if (strcmp(strupr(argv[p]),"NOCHASE") == 0) { ! 2472: argmatch++; ! 2473: nochaseflag=1; ! 2474: } ! 2475: if (strcmp(strupr(argv[p]),"NOSTROLL") == 0) { ! 2476: argmatch++; ! 2477: nostrollflag=1; ! 2478: } ! 2479: if (strcmp(strupr(argv[p]),"DIGILOOPS") == 0) { ! 2480: argmatch++; ! 2481: digiloopflag=1; ! 2482: } ! 2483: if (strcmp(strupr(argv[p]),"NOBRIEFS") == 0) { ! 2484: argmatch++; ! 2485: nobriefflag=1; ! 2486: } ! 2487: if (strcmp(strupr(argv[p]),"CYBER") == 0) { ! 2488: argmatch++; ! 2489: if (p+1 < argc) { ! 2490: if (strcmp(argv[p+1],"2") == 0) { ! 2491: ctm_init(2); ! 2492: } ! 2493: else if (strcmp(argv[p+1],"3") == 0) { ! 2494: ctm_init(3); ! 2495: } ! 2496: else if (strcmp(argv[p+1],"4") == 0) { ! 2497: ctm_init(4); ! 2498: } ! 2499: else { ! 2500: ctm_init(1); ! 2501: } ! 2502: } ! 2503: else { ! 2504: ctm_init(1); ! 2505: } ! 2506: } ! 2507: if (strcmp(strupr(argv[p]),"IGLASS") == 0) { ! 2508: argmatch++; ! 2509: if (p+1 < argc) { ! 2510: if (strcmp(argv[p+1],"2") == 0) { ! 2511: vio_init(2); ! 2512: } ! 2513: else if (strcmp(argv[p+1],"3") == 0) { ! 2514: vio_init(3); ! 2515: } ! 2516: else if (strcmp(argv[p+1],"4") == 0) { ! 2517: vio_init(4); ! 2518: } ! 2519: else { ! 2520: vio_init(1); ! 2521: } ! 2522: } ! 2523: else { ! 2524: vio_init(1); ! 2525: } ! 2526: } ! 2527: //** Les START - 09/28/95 ! 2528: if (strcmp(strupr(argv[p]),"VFX1") == 0) { ! 2529: argmatch++; ! 2530: vfx1_init(); ! 2531: } ! 2532: //** Les END - 09/28/95 ! 2533: if (strcmp(strupr(argv[p]),"DEBUG") == 0) { ! 2534: argmatch++; ! 2535: dbgflag=1; ! 2536: } ! 2537: if (strcmp(strupr(argv[p]),"COOP") == 0) { ! 2538: argmatch++; ! 2539: coopmode=1; ! 2540: } ! 2541: if (strcmp(strupr(argv[p]),"SWITCHLEVELS") == 0) { ! 2542: argmatch++; ! 2543: switchlevelsflag=1; ! 2544: } ! 2545: } ! 2546: ! 2547: if( singlemapmode ) { ! 2548: if( access(boardfilename, F_OK) != 0 ) { ! 2549: printf("\ncant find %s\n", boardfilename); ! 2550: exit(-1); ! 2551: } ! 2552: } ! 2553: ! 2554: if( (argmatch == 0) && (singlemapmode != 1) && (argc > 1) ) { ! 2555: usage(); ! 2556: exit(-1); ! 2557: } ! 2558: } ! 2559: ! 2560: void ! 2561: tekloadmoreoptions(int fil) ! 2562: { ! 2563: int rv; ! 2564: ! 2565: rv=read(fil,&moreoptions[0],MAXMOREOPTIONS); ! 2566: rv=read(fil,&toggles[0],MAXTOGGLES); ! 2567: rv=read(fil,&gamestuff[0],MAXGAMESTUFF<<2); ! 2568: ! 2569: toggles[TOGGLE_GODMODE]=0; ! 2570: if (toggles[TOGGLE_REARVIEW]) { ! 2571: rvmoving=1; ! 2572: } ! 2573: if (toggles[TOGGLE_UPRT]) { ! 2574: wpmoving=1; ! 2575: } ! 2576: if (toggles[TOGGLE_HEALTH]) { ! 2577: hcmoving=1; ! 2578: } ! 2579: } ! 2580: ! 2581: initmoreoptions() ! 2582: { ! 2583: difficulty=moreoptions[8]; ! 2584: soundv=moreoptions[9]; ! 2585: musicv=moreoptions[10]; ! 2586: mousesensitivity=moreoptions[11]; ! 2587: headbobon=moreoptions[12]; ! 2588: ! 2589: jctrx=gamestuff[0]; ! 2590: jctry=gamestuff[1]; ! 2591: screensize=gamestuff[2]; ! 2592: brightness=gamestuff[3]; ! 2593: biasthreshhold=gamestuff[4]; ! 2594: ! 2595: if ((jctrx == -1) || (jctry == -1)) { ! 2596: if (moreoptions[3] != 0) { ! 2597: jcalibration=1; ! 2598: jstickenabled=0; ! 2599: } ! 2600: } ! 2601: ! 2602: if( option[4] != 0 ) { ! 2603: difficulty=2; ! 2604: } ! 2605: } ! 2606: ! 2607: void ! 2608: teksavemoreoptions(int fil) ! 2609: { ! 2610: moreoptions[8]=difficulty; ! 2611: moreoptions[9]=soundv; ! 2612: moreoptions[10]=musicv; ! 2613: moreoptions[11]=mousesensitivity; ! 2614: moreoptions[12]=headbobon; ! 2615: ! 2616: gamestuff[0]=jctrx; ! 2617: gamestuff[1]=jctry; ! 2618: gamestuff[2]=( int)screensize; ! 2619: gamestuff[3]=brightness; ! 2620: gamestuff[4]=biasthreshhold; ! 2621: ! 2622: write(fil,&moreoptions[0],MAXMOREOPTIONS); ! 2623: write(fil,&toggles[0],MAXTOGGLES); ! 2624: write(fil,&gamestuff[0],MAXGAMESTUFF<<2); ! 2625: } ! 2626: ! 2627: tekendscreen() ! 2628: { ! 2629: int i,j,k,l; ! 2630: long clocknow; ! 2631: ! 2632: if( demowon ) ! 2633: return; ! 2634: ! 2635: memset(keystatus, 0, sizeof(keystatus)); ! 2636: if( xdim == 640 ) { ! 2637: setview(0L,0L,xdim-1,ydim-1); ! 2638: loadtile(ES1A_SVGA); ! 2639: overwritesprite(0L,0L,ES1A_SVGA,0,0,0); ! 2640: loadtile(ES1B_SVGA); ! 2641: overwritesprite(0L,239L,ES1B_SVGA,0,0,0); ! 2642: nextpage(); ! 2643: fadein(0,255,50); ! 2644: while( (keystatus[1] == 0) && (keystatus[57] == 0) && (keystatus[28] == 0) ) { ! 2645: } ! 2646: memset(keystatus, 0, sizeof(keystatus)); ! 2647: loadtile(ES2A_SVGA); ! 2648: overwritesprite(0L,0L,ES2A_SVGA,0,0,0); ! 2649: loadtile(ES2B_SVGA); ! 2650: overwritesprite(0L,239L,ES2B_SVGA,0,0,0); ! 2651: nextpage(); ! 2652: while( (keystatus[1] == 0) && (keystatus[57] == 0) && (keystatus[28] == 0) ) { ! 2653: } ! 2654: } ! 2655: else if( xdim == 320 ) { ! 2656: setview(0L,0L,xdim-1,ydim-1); ! 2657: loadtile(ES1_VGA); ! 2658: overwritesprite(0L,0L,ES1_VGA,0,0,0); ! 2659: nextpage(); ! 2660: fadein(0,255,50); ! 2661: while( (keystatus[1] == 0) && (keystatus[57] == 0) && (keystatus[28] == 0) ) { ! 2662: } ! 2663: memset(keystatus, 0, sizeof(keystatus)); ! 2664: loadtile(ES2_VGA); ! 2665: overwritesprite(0L,0L,ES2_VGA,0,0,0); ! 2666: nextpage(); ! 2667: while( (keystatus[1] == 0) && (keystatus[57] == 0) && (keystatus[28] == 0) ) { ! 2668: } ! 2669: } ! 2670: else { ! 2671: setview(0L,0L,xdim-1,ydim-1); ! 2672: loadtile(ES1_VGA); ! 2673: overwritesprite(0,0,ES1_VGA,0,0x02,0); ! 2674: nextpage(); ! 2675: fadein(0,255,50); ! 2676: while( (keystatus[1] == 0) && (keystatus[57] == 0) && (keystatus[28] == 0) ) { ! 2677: } ! 2678: memset(keystatus, 0, sizeof(keystatus)); ! 2679: loadtile(ES2_VGA); ! 2680: overwritesprite(0,0,ES2_VGA,0,0x02,0); ! 2681: nextpage(); ! 2682: while( (keystatus[1] == 0) && (keystatus[57] == 0) && (keystatus[28] == 0) ) { ! 2683: } ! 2684: } ! 2685: } ! 2686: ! 2687: extern short cdplaying; ! 2688: extern int currenttrack; ! 2689: char debrief=0; ! 2690: ! 2691: int ! 2692: choosemission() ! 2693: { ! 2694: int lastmission,before7; ! 2695: long clock,helpclock; ! 2696: char nogo,missiondone; ! 2697: char onlymission8=0; ! 2698: int cfh; ! 2699: char cdstopped=0; ! 2700: ! 2701: if( generalplay ) { ! 2702: return(choosemap()); ! 2703: } ! 2704: if( singlemapmode ) { ! 2705: if( gameover == 1 ) { ! 2706: return(0); ! 2707: } ! 2708: else { ! 2709: newgame(boardfilename); ! 2710: return(1); ! 2711: } ! 2712: } ! 2713: ! 2714: musicfade(); ! 2715: stopallsounds(); ! 2716: if( cdplaying > 0 ) { ! 2717: cd_stop(); ! 2718: cdstopped=1; ! 2719: } ! 2720: ! 2721: if( debrief ) { ! 2722: debriefing(); ! 2723: debrief=0; ! 2724: } ! 2725: ! 2726: fadeout(0,255,0,0,0,25); ! 2727: ! 2728: if( allsymsdeposited == 1 ) { ! 2729: smkplayseq("FINALB"); ! 2730: allsymsdeposited=2; ! 2731: } ! 2732: if( allsymsdeposited == 2) { ! 2733: mission=9; ! 2734: allsymsdeposited=3; ! 2735: goto donewgame; ! 2736: } ! 2737: if( allsymsdeposited == 3) { ! 2738: if( killedsonny == 1 ) { ! 2739: smkplayseq("FINALDB"); ! 2740: smkplayseq("CREDITS"); ! 2741: cfh=creat("tekv.dat", S_IWRITE|S_IREAD); ! 2742: if( cfh == -1 ) { ! 2743: crash("chsmssin: cant write file"); ! 2744: } ! 2745: close(cfh); ! 2746: return(0); ! 2747: } ! 2748: else { ! 2749: return(0); ! 2750: } ! 2751: } ! 2752: ! 2753: //playsound(S_TRANSITION,0,0,0,ST_IMMEDIATE); ! 2754: menusong(0); ! 2755: smkopenmenu("smkmm.smk"); ! 2756: mission=0; ! 2757: lastmission=mission; ! 2758: keystatus[1]=0; ! 2759: smkmenuframe(1); ! 2760: activemenu=0; ! 2761: ! 2762: if( symbols[0] && symbols[1] && symbols[2] && symbols[3] && symbols[4] && ! 2763: symbols[5] && symbols[6] ) { ! 2764: lastmission=mission=7; ! 2765: onlymission8=1; ! 2766: } ! 2767: ! 2768: choosingmission: ! 2769: ! 2770: if( lastmission != mission ) { ! 2771: switch( lastmission ) { ! 2772: case 0: smkmenuframe(3); break; ! 2773: case 1: smkmenuframe(7); break; ! 2774: case 2: smkmenuframe(11); break; ! 2775: case 3: smkmenuframe(15); break; ! 2776: case 4: smkmenuframe(19); break; ! 2777: case 5: smkmenuframe(23); break; ! 2778: case 6: smkmenuframe(27); break; ! 2779: case 7: smkmenuframe(31); break; ! 2780: } ! 2781: } ! 2782: switch( mission ) { ! 2783: case 0: smkmenuframe(5); break; ! 2784: case 1: smkmenuframe(9); break; ! 2785: case 2: smkmenuframe(13); break; ! 2786: case 3: smkmenuframe(17); break; ! 2787: case 4: smkmenuframe(21); break; ! 2788: case 5: smkmenuframe(25); break; ! 2789: case 6: smkmenuframe(29); break; ! 2790: case 7: smkmenuframe(33); break; ! 2791: } ! 2792: if( symbols[0] ) { ! 2793: smkmenuframe(35); ! 2794: } ! 2795: if( symbols[1] ) { ! 2796: smkmenuframe(37); ! 2797: } ! 2798: if( symbols[2] ) { ! 2799: smkmenuframe(39); ! 2800: } ! 2801: if( symbols[3] ) { ! 2802: smkmenuframe(41); ! 2803: } ! 2804: if( symbols[4] ) { ! 2805: smkmenuframe(43); ! 2806: } ! 2807: if( symbols[5] ) { ! 2808: smkmenuframe(45); ! 2809: } ! 2810: if( symbols[6] ) { ! 2811: smkmenuframe(47); ! 2812: } ! 2813: smkshowmenu(); ! 2814: lastmission=mission; ! 2815: ! 2816: helpclock=totalclock; ! 2817: while( (keystatus[1] == 0) && ! 2818: (keystatus[28] == 0) && ! 2819: (keystatus[57] == 0) && ! 2820: (keystatus[38] == 0) && ! 2821: (keystatus[203] == 0) && ! 2822: (keystatus[205] == 0) && ! 2823: (keystatus[200] == 0) && ! 2824: (keystatus[35] == 0) && ! 2825: (keystatus[208] == 0) ) { ! 2826: if( (totalclock - helpclock) > 1024 ) { ! 2827: keystatus[35]=1; ! 2828: } ! 2829: }; ! 2830: ! 2831: if( (keystatus[203] != 0) &&(!onlymission8) ) { // LF ! 2832: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 2833: nextmissionleft: ! 2834: missiondone=0; ! 2835: mission--; ! 2836: if( mission < 0 ) mission=6; ! 2837: switch( mission ) { ! 2838: case 0: if( symbols[0] ) missiondone=1; break; ! 2839: case 1: if( symbols[1] ) missiondone=1; break; ! 2840: case 2: if( symbols[2] ) missiondone=1; break; ! 2841: case 3: if( symbols[3] ) missiondone=1; break; ! 2842: case 4: if( symbols[4] ) missiondone=1; break; ! 2843: case 5: if( symbols[5] ) missiondone=1; break; ! 2844: case 6: if( symbols[6] ) missiondone=1; break; ! 2845: } ! 2846: if( missiondone ) { ! 2847: goto nextmissionleft; ! 2848: } ! 2849: } ! 2850: else if( (keystatus[205] != 0) && (!onlymission8) ) { // RT ! 2851: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 2852: nextmissionright: ! 2853: missiondone=0; ! 2854: mission++; ! 2855: if( mission > 6 ) mission=0; ! 2856: switch( mission ) { ! 2857: case 0: if( symbols[0] ) missiondone=1; break; ! 2858: case 1: if( symbols[1] ) missiondone=1; break; ! 2859: case 2: if( symbols[2] ) missiondone=1; break; ! 2860: case 3: if( symbols[3] ) missiondone=1; break; ! 2861: case 4: if( symbols[4] ) missiondone=1; break; ! 2862: case 5: if( symbols[5] ) missiondone=1; break; ! 2863: case 6: if( symbols[6] ) missiondone=1; break; ! 2864: } ! 2865: if( missiondone ) { ! 2866: goto nextmissionright; ! 2867: } ! 2868: } ! 2869: else if( (keystatus[200] != 0) && (!onlymission8) ) { // UP ! 2870: if( (symbols[0] == 0) && (symbols[1] == 0) && (symbols[2] == 0) && (symbols[3] == 0) && ! 2871: (symbols[4] == 0) && (symbols[5] == 0) && (symbols[6] == 0) ) { ! 2872: playsound(S_BOOP,0,0,0,ST_IMMEDIATE); ! 2873: smkmenuframe(53); ! 2874: smkshowmenu(); ! 2875: clock=totalclock; ! 2876: while( (totalclock-clock) < 128 ) ! 2877: ; ! 2878: smkmenuframe(1); ! 2879: smkshowmenu(); ! 2880: } ! 2881: else { ! 2882: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 2883: before7=lastmission; ! 2884: mission=7; ! 2885: } ! 2886: } ! 2887: else if( (keystatus[208] != 0) && (!onlymission8) ) { // DN ! 2888: if( mission == 7 ) { ! 2889: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 2890: mission=before7; ! 2891: lastmission=7; ! 2892: } ! 2893: } ! 2894: keystatus[203]=0; ! 2895: keystatus[205]=0; ! 2896: keystatus[200]=0; ! 2897: keystatus[208]=0; ! 2898: ! 2899: #if STATS ! 2900: if( keystatus[31] != 0 ) { ! 2901: playsound(S_KEYCARDBLIP,0,0,0,ST_IMMEDIATE); ! 2902: smkmenuframe(49); ! 2903: smkshowmenu(); ! 2904: writestats(); ! 2905: keystatus[31]=0; ! 2906: while( (keystatus[1] == 0) && ! 2907: (keystatus[28] == 0) && ! 2908: (keystatus[57] == 0) ) { ! 2909: } ! 2910: smkmenuframe(1); ! 2911: smkshowmenu(); ! 2912: keystatus[1]=0; ! 2913: keystatus[28]=0; ! 2914: keystatus[57]=0; ! 2915: } ! 2916: #endif ! 2917: ! 2918: if( keystatus[1] != 0 ) { ! 2919: playsound(S_PICKUP_BONUS,0,0,0,ST_IMMEDIATE); ! 2920: smkmenuframe(51); ! 2921: smkshowmenu(); ! 2922: keystatus[1]=0; ! 2923: while( (keystatus[1] == 0) && ! 2924: (keystatus[21] == 0) && ! 2925: (keystatus[49] == 0) ) { ! 2926: } ! 2927: if( (keystatus[49] == 1) || (keystatus[1] == 1) ) { ! 2928: keystatus[49]=0; ! 2929: keystatus[1]=0; ! 2930: smkmenuframe(1); ! 2931: smkshowmenu(); ! 2932: } ! 2933: else { ! 2934: fadeout(0,255,0,0,0,50); ! 2935: return(0); ! 2936: } ! 2937: } ! 2938: ! 2939: if( keystatus[35] != 0 ) { ! 2940: playsound(S_PICKUP_BONUS,0,0,0,ST_IMMEDIATE); ! 2941: keystatus[35]=0; ! 2942: smkmenuframe(55); ! 2943: smkshowmenu(); ! 2944: keystatus[1]=0; ! 2945: helpclock=totalclock; ! 2946: while( (keystatus[1] == 0) && ! 2947: (keystatus[28] == 0) && ! 2948: (keystatus[57] == 0) ) { ! 2949: if( (totalclock-helpclock) > 2048 ) { ! 2950: keystatus[1]=1; ! 2951: } ! 2952: } ! 2953: keystatus[28]=0; ! 2954: keystatus[57]=0; ! 2955: keystatus[1]=0; ! 2956: smkmenuframe(1); ! 2957: smkshowmenu(); ! 2958: } ! 2959: ! 2960: if( (keystatus[1] == 0) && (keystatus[28] == 0) && ! 2961: (keystatus[57] == 0) && (keystatus[38] == 0) ) { ! 2962: goto choosingmission; ! 2963: } ! 2964: ! 2965: if( keystatus[38] != 0 ) { ! 2966: mission=8; ! 2967: keystatus[38]=0; ! 2968: activemenu=6; ! 2969: } ! 2970: ! 2971: nogo=0; ! 2972: switch( mission ) { ! 2973: case 0: if( symbols[0] ) nogo=1; break; ! 2974: case 1: if( symbols[1] ) nogo=1; break; ! 2975: case 2: if( symbols[2] ) nogo=1; break; ! 2976: case 3: if( symbols[3] ) nogo=1; break; ! 2977: case 4: if( symbols[4] ) nogo=1; break; ! 2978: case 5: if( symbols[5] ) nogo=1; break; ! 2979: case 6: if( symbols[6] ) nogo=1; break; ! 2980: } ! 2981: if( nogo ) { ! 2982: playsound(S_BEEP,0,0,0,ST_IMMEDIATE); ! 2983: goto choosingmission; ! 2984: } ! 2985: ! 2986: keystatus[1] =0; ! 2987: keystatus[28]=0; ! 2988: keystatus[57]=0; ! 2989: smkclosemenu(); ! 2990: ! 2991: musicfade(); ! 2992: fadeout(0,255,0,0,0,50); ! 2993: ! 2994: switch( mission ) { ! 2995: case 2: ! 2996: smkplayseq("ROSSI1"); ! 2997: strcpy(&boardfilename,"subway1.map"); ! 2998: break; ! 2999: case 1: ! 3000: smkplayseq("DIMARCO1"); ! 3001: strcpy(&boardfilename,"subway0.map"); ! 3002: break; ! 3003: case 5: ! 3004: smkplayseq("CONNOR1"); ! 3005: strcpy(&boardfilename,"subway2.map"); ! 3006: break; ! 3007: case 4: ! 3008: smkplayseq("SONNY1"); ! 3009: strcpy(&boardfilename,"subway2.map"); ! 3010: break; ! 3011: case 6: ! 3012: smkplayseq("JANUS1"); ! 3013: strcpy(&boardfilename,"subway3.map"); ! 3014: break; ! 3015: case 3: ! 3016: smkplayseq("LOWELL1"); ! 3017: strcpy(&boardfilename,"subway1.map"); ! 3018: break; ! 3019: case 0: ! 3020: smkplayseq("DOLLAR1"); ! 3021: strcpy(&boardfilename,"subway0.map"); ! 3022: break; ! 3023: case 8: ! 3024: strcpy(&boardfilename,"load.map"); ! 3025: break; ! 3026: } ! 3027: ! 3028: donewgame: ! 3029: ! 3030: gameover=0; ! 3031: numlives=0; ! 3032: civillianskilled=0; ! 3033: mission_accomplished=0; ! 3034: ! 3035: fadeout(0,255,0,0,0,50); ! 3036: ! 3037: memcpy(palette1, palette, 768); ! 3038: memset(palette, 0, 768); ! 3039: clearview(0); ! 3040: qsetmode=201L; ! 3041: setgamemode(); ! 3042: clearview(0); ! 3043: switch( mission ) { ! 3044: case 0: ! 3045: case 1: ! 3046: newgame("subway0.map"); ! 3047: break; ! 3048: case 2: ! 3049: case 3: ! 3050: newgame("subway1.map"); ! 3051: break; ! 3052: case 4: ! 3053: case 5: ! 3054: newgame("subway2.map"); ! 3055: break; ! 3056: case 6: ! 3057: newgame("subway3.map"); ! 3058: break; ! 3059: case 7: ! 3060: newgame("matrix.map"); ! 3061: locselectedgun=7; ! 3062: keystatus[keys[6]]=1; ! 3063: break; ! 3064: case 8: ! 3065: newgame("load.map"); ! 3066: break; ! 3067: case 9: ! 3068: newgame("final1.map"); ! 3069: break; ! 3070: } ! 3071: clearview(0); ! 3072: memcpy(palette, palette1, 768); ! 3073: dofadein=32; ! 3074: initpaletteshifts(); ! 3075: ! 3076: if( mission == 7 ) { ! 3077: #ifdef MUSICINMATRIX ! 3078: startmusic(rand()%7); ! 3079: #endif ! 3080: } ! 3081: else { ! 3082: menusong(1); ! 3083: } ! 3084: if( cdstopped ) { ! 3085: cd_play(); ! 3086: } ! 3087: ! 3088: // if matrix, reset time ! 3089: if( mission == 7 ) { ! 3090: seconds=minutes=hours=0; ! 3091: } ! 3092: ! 3093: return(1); ! 3094: } ! 3095: ! 3096: void ! 3097: teksavemissioninfo(int fil) ! 3098: { ! 3099: int rv; ! 3100: ! 3101: rv=write(fil,symbols,sizeof(symbols)); ! 3102: rv=write(fil,symbolsdeposited,sizeof(symbolsdeposited)); ! 3103: rv=write(fil,&difficulty,sizeof(difficulty)); ! 3104: rv=write(fil,¤tmapno,sizeof(currentmapno)); ! 3105: #if 0 ! 3106: rv=write(fil,&warpretang,sizeof(warpretang)); ! 3107: rv=write(fil,&warpretsect,sizeof(warpretsect)); ! 3108: rv=write(fil,&warpretx,sizeof(warpretx)); ! 3109: rv=write(fil,&warprety,sizeof(warprety)); ! 3110: rv=write(fil,&warpretz,sizeof(warpretz)); ! 3111: #endif ! 3112: rv=write(fil,&mission,sizeof(mission)); ! 3113: rv=write(fil,&numlives,sizeof(numlives)); ! 3114: rv=write(fil,&mission_accomplished,sizeof(mission_accomplished)); ! 3115: rv=write(fil,&civillianskilled,sizeof(civillianskilled)); ! 3116: rv=write(fil,&generalplay,sizeof(generalplay)); ! 3117: rv=write(fil,&singlemapmode,sizeof(singlemapmode)); ! 3118: rv=write(fil,&allsymsdeposited,sizeof(allsymsdeposited)); ! 3119: rv=write(fil,&killedsonny,sizeof(killedsonny)); ! 3120: } ! 3121: ! 3122: void ! 3123: tekloadmissioninfo(int fil) ! 3124: { ! 3125: int rv; ! 3126: ! 3127: musicfade(); ! 3128: ! 3129: rv=read(fil,symbols,sizeof(symbols)); ! 3130: rv=read(fil,symbolsdeposited,sizeof(symbolsdeposited)); ! 3131: rv=read(fil,&difficulty,sizeof(difficulty)); ! 3132: rv=read(fil,¤tmapno,sizeof(currentmapno)); ! 3133: #if 0 ! 3134: rv=read(fil,&warpretang,sizeof(warpretang)); ! 3135: rv=read(fil,&warpretsect,sizeof(warpretsect)); ! 3136: rv=read(fil,&warpretx,sizeof(warpretx)); ! 3137: rv=read(fil,&warprety,sizeof(warprety)); ! 3138: rv=read(fil,&warpretz,sizeof(warpretz)); ! 3139: #endif ! 3140: rv=read(fil,&mission,sizeof(mission)); ! 3141: rv=read(fil,&numlives,sizeof(numlives)); ! 3142: rv=read(fil,&mission_accomplished,sizeof(mission_accomplished)); ! 3143: rv=read(fil,&civillianskilled,sizeof(civillianskilled)); ! 3144: rv=read(fil,&generalplay,sizeof(generalplay)); ! 3145: rv=read(fil,&singlemapmode,sizeof(singlemapmode)); ! 3146: rv=read(fil,&allsymsdeposited,sizeof(allsymsdeposited)); ! 3147: rv=read(fil,&killedsonny,sizeof(killedsonny)); ! 3148: ! 3149: if( generalplay == 1 ) { ! 3150: startmusic(rand()%7); ! 3151: } ! 3152: else { ! 3153: startmusic(mission); ! 3154: } ! 3155: } ! 3156: ! 3157: teknetmenu() ! 3158: { ! 3159: initpaletteshifts(); ! 3160: ! 3161: memcpy(palette1, palette, 768); ! 3162: memset(palette, 0, 768); ! 3163: ! 3164: clearview(0); ! 3165: strcpy(boardfilename,"NET1.MAP"); ! 3166: prepareboard(boardfilename); ! 3167: precache(); ! 3168: ! 3169: clearview(0); ! 3170: memcpy(palette, palette1, 768); ! 3171: fadein(0,255,16); ! 3172: } ! 3173: ! 3174: void ! 3175: copyrightscreen() ! 3176: { ! 3177: clearview(); ! 3178: smkopenmenu("smkgm.smk"); ! 3179: smkmenuframe(81); ! 3180: smkshowmenu(); ! 3181: fadein(0,255,10); ! 3182: while( (keystatus[1] == 0) && ! 3183: (keystatus[28] == 0) && ! 3184: (keystatus[57] == 0) && ! 3185: (keystatus[38] == 0) && ! 3186: (keystatus[203] == 0) && ! 3187: (keystatus[205] == 0) && ! 3188: (keystatus[200] == 0) && ! 3189: (keystatus[31] == 0) && ! 3190: (keystatus[35] == 0) && ! 3191: (keystatus[208] == 0) ) { ! 3192: }; ! 3193: smkclosemenu(); ! 3194: } ! 3195: ! 3196: int ! 3197: choosemap() ! 3198: { ! 3199: int lastmap,map,set; ! 3200: long clock,helpclock,stall; ! 3201: ! 3202: musicfade(); ! 3203: ! 3204: fadeout(0,255,0,0,0,25); ! 3205: ! 3206: stopallsounds(); ! 3207: menusong(0); ! 3208: ! 3209: smkopenmenu("smkgm.smk"); ! 3210: lastmap=map=0; ! 3211: keystatus[1]=0; ! 3212: activemenu=0; ! 3213: set=0; ! 3214: smkmenuframe(1); ! 3215: ! 3216: choosingmap: ! 3217: ! 3218: if( lastmap != map ) { ! 3219: if( set == 0 ) { ! 3220: switch( lastmap ) { ! 3221: case 0: smkmenuframe( 5); break; ! 3222: case 1: smkmenuframe( 9); break; ! 3223: case 2: smkmenuframe(13); break; ! 3224: case 3: smkmenuframe(17); break; ! 3225: case 4: smkmenuframe(21); break; ! 3226: case 5: smkmenuframe(25); break; ! 3227: case 6: smkmenuframe(29); break; ! 3228: case 7: smkmenuframe(33); break; ! 3229: case 8: smkmenuframe(37); break; ! 3230: } ! 3231: } ! 3232: else { ! 3233: switch( lastmap ) { ! 3234: case 0: smkmenuframe(41); break; ! 3235: case 1: smkmenuframe(45); break; ! 3236: case 2: smkmenuframe(49); break; ! 3237: case 3: smkmenuframe(53); break; ! 3238: case 4: smkmenuframe(57); break; ! 3239: case 5: smkmenuframe(61); break; ! 3240: case 6: smkmenuframe(65); break; ! 3241: case 7: smkmenuframe(69); break; ! 3242: case 8: smkmenuframe(73); break; ! 3243: } ! 3244: } ! 3245: } ! 3246: if( set == 0 ) { ! 3247: switch( map ) { ! 3248: case 0: smkmenuframe( 7); break; ! 3249: case 1: smkmenuframe(11); break; ! 3250: case 2: smkmenuframe(15); break; ! 3251: case 3: smkmenuframe(19); break; ! 3252: case 4: smkmenuframe(23); break; ! 3253: case 5: smkmenuframe(27); break; ! 3254: case 6: smkmenuframe(31); break; ! 3255: case 7: smkmenuframe(35); break; ! 3256: case 8: smkmenuframe(39); break; ! 3257: } ! 3258: } ! 3259: else { ! 3260: switch( map ) { ! 3261: case 0: smkmenuframe(43); break; ! 3262: case 1: smkmenuframe(47); break; ! 3263: case 2: smkmenuframe(51); break; ! 3264: case 3: smkmenuframe(55); break; ! 3265: case 4: smkmenuframe(59); break; ! 3266: case 5: smkmenuframe(63); break; ! 3267: case 6: smkmenuframe(67); break; ! 3268: case 7: smkmenuframe(71); break; ! 3269: case 8: smkmenuframe(75); break; ! 3270: } ! 3271: } ! 3272: smkshowmenu(); ! 3273: lastmap=map; ! 3274: ! 3275: helpclock=totalclock; ! 3276: while( (keystatus[1] == 0) && ! 3277: (keystatus[28] == 0) && ! 3278: (keystatus[57] == 0) && ! 3279: (keystatus[38] == 0) && ! 3280: (keystatus[203] == 0) && ! 3281: (keystatus[205] == 0) && ! 3282: (keystatus[200] == 0) && ! 3283: (keystatus[31] == 0) && ! 3284: (keystatus[35] == 0) && ! 3285: (keystatus[208] == 0) ) { ! 3286: if( (totalclock - helpclock) > 1024 ) { ! 3287: keystatus[35]=1; ! 3288: } ! 3289: }; ! 3290: ! 3291: if( keystatus[203] != 0 ) { // LF ! 3292: map--; ! 3293: if( map < 0 ) { ! 3294: map=8; ! 3295: } ! 3296: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 3297: } ! 3298: else if( keystatus[205] != 0 ) { // RT ! 3299: map++; ! 3300: if( map > 8 ) { ! 3301: map=0; ! 3302: } ! 3303: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 3304: } ! 3305: else if( keystatus[200] != 0 ) { // UP ! 3306: switch( map ) { ! 3307: case 0: map=6; break; ! 3308: case 3: map=0; break; ! 3309: case 6: map=3; break; ! 3310: case 1: map=7; break; ! 3311: case 4: map=1; break; ! 3312: case 7: map=4; break; ! 3313: case 2: map=8; break; ! 3314: case 5: map=2; break; ! 3315: case 8: map=5; break; ! 3316: } ! 3317: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 3318: } ! 3319: else if( keystatus[208] != 0 ) { // DN ! 3320: switch( map ) { ! 3321: case 0: map=3; break; ! 3322: case 3: map=6; break; ! 3323: case 6: map=0; break; ! 3324: case 1: map=4; break; ! 3325: case 4: map=7; break; ! 3326: case 7: map=1; break; ! 3327: case 2: map=5; break; ! 3328: case 5: map=8; break; ! 3329: case 8: map=2; break; ! 3330: } ! 3331: playsound(S_MENUSOUND1,0,0,0,ST_IMMEDIATE); ! 3332: } ! 3333: ! 3334: keystatus[203]=0; ! 3335: keystatus[205]=0; ! 3336: keystatus[200]=0; ! 3337: keystatus[208]=0; ! 3338: ! 3339: if( keystatus[1] != 0 ) { ! 3340: playsound(S_PICKUP_BONUS,0,0,0,ST_IMMEDIATE); ! 3341: smkmenuframe(77); ! 3342: smkshowmenu(); ! 3343: keystatus[1]=0; ! 3344: while( (keystatus[1] == 0) && ! 3345: (keystatus[21] == 0) && ! 3346: (keystatus[49] == 0) ) { ! 3347: } ! 3348: if( (keystatus[49] == 1) || (keystatus[1] == 1) ) { ! 3349: keystatus[49]=0; ! 3350: keystatus[1]=0; ! 3351: switch( set ) { ! 3352: case 0: smkmenuframe(1); break; ! 3353: case 1: smkmenuframe(3); break; ! 3354: } ! 3355: smkshowmenu(); ! 3356: } ! 3357: else { ! 3358: fadeout(0,255,0,0,0,50); ! 3359: return(0); ! 3360: } ! 3361: } ! 3362: ! 3363: if( keystatus[35] != 0 ) { ! 3364: playsound(S_PICKUP_BONUS,0,0,0,ST_IMMEDIATE); ! 3365: keystatus[35]=0; ! 3366: smkmenuframe(79); ! 3367: smkshowmenu(); ! 3368: keystatus[1]=0; ! 3369: helpclock=totalclock; ! 3370: while( (keystatus[1] == 0) && ! 3371: (keystatus[28] == 0) && ! 3372: (keystatus[57] == 0) ) { ! 3373: if( (totalclock-helpclock) > 2048 ) { ! 3374: keystatus[1]=1; ! 3375: } ! 3376: } ! 3377: keystatus[28]=0; ! 3378: keystatus[57]=0; ! 3379: keystatus[1]=0; ! 3380: switch( set ) { ! 3381: case 0: smkmenuframe(1); break; ! 3382: case 1: smkmenuframe(3); break; ! 3383: } ! 3384: smkshowmenu(); ! 3385: } ! 3386: ! 3387: if( (keystatus[1] == 0) && (keystatus[28] == 0) && ! 3388: (keystatus[57] == 0) && (keystatus[38] == 0) ) { ! 3389: goto choosingmap; ! 3390: } ! 3391: if( (keystatus[57] != 0) || (keystatus[28] != 0) ) { ! 3392: switch( map ) { ! 3393: case 4: ! 3394: stall=totalclock; ! 3395: while( (totalclock-stall) < 32 ) ! 3396: ; ! 3397: if( set == 0 ) { ! 3398: set=1; ! 3399: smkmenuframe(3); ! 3400: smkshowmenu(); ! 3401: } ! 3402: else { ! 3403: set=0; ! 3404: smkmenuframe(1); ! 3405: smkshowmenu(); ! 3406: } ! 3407: goto choosingmap; ! 3408: default: ! 3409: break; ! 3410: } ! 3411: } ! 3412: ! 3413: smkclosemenu(); ! 3414: ! 3415: gameover=0; ! 3416: numlives=0; ! 3417: civillianskilled=0; ! 3418: mission_accomplished=0; ! 3419: ! 3420: fadeout(0,255,0,0,0,50); ! 3421: ! 3422: memcpy(palette1, palette, 768); ! 3423: memset(palette, 0, 768); ! 3424: clearview(0); ! 3425: qsetmode=201L; ! 3426: setgamemode(); ! 3427: ! 3428: if( set == 0 ) { ! 3429: switch( map ) { ! 3430: case 0: newgame("level1.map"); break; ! 3431: case 1: newgame("level2.map"); break; ! 3432: case 2: newgame("city1.map"); break; ! 3433: case 3: newgame("beach1.map"); break; ! 3434: ! 3435: case 5: newgame("park1.map"); break; ! 3436: case 6: newgame("mid1.map"); break; ! 3437: case 7: newgame("mid2.map"); break; ! 3438: case 8: newgame("mid3.map"); break; ! 3439: default: crash("chsmp: bad map num"); ! 3440: } ! 3441: } ! 3442: else { ! 3443: switch( map ) { ! 3444: case 0: newgame("sewer1.map"); break; ! 3445: case 1: newgame("sewer2.map"); break; ! 3446: case 2: newgame("inds1.map"); break; ! 3447: case 3: newgame("free1.map"); break; ! 3448: ! 3449: case 5: newgame("free2.map"); break; ! 3450: case 6: newgame("ware1.map"); break; ! 3451: case 7: newgame("ware2.map"); break; ! 3452: case 8: newgame("ware3.map"); break; ! 3453: default: crash("chsmp: bad map num"); ! 3454: } ! 3455: } ! 3456: ! 3457: clearview(0); ! 3458: memcpy(palette, palette1, 768); ! 3459: dofadein=32; ! 3460: initpaletteshifts(); ! 3461: ! 3462: musicfade(); ! 3463: startmusic(rand()%7); ! 3464: ! 3465: return(1); ! 3466: } ! 3467: ! 3468: void ! 3469: missionaccomplished(int sn) ! 3470: { ! 3471: int ext; ! 3472: char results=0; ! 3473: ! 3474: if( option[4] != 0 ) { ! 3475: return; ! 3476: } ! 3477: ! 3478: ext=sprptr[sn]->extra; ! 3479: if( !validext(ext) ) { ! 3480: return; ! 3481: } ! 3482: ! 3483: if( sprXTptr[ext]->class == CLASS_CIVILLIAN ) { ! 3484: civillianskilled++; ! 3485: } ! 3486: if( sprXTptr[ext]->class != CLASS_TEKLORD ) { ! 3487: return; ! 3488: } ! 3489: ! 3490: switch( sprXTptr[ext]->deathpic ) { ! 3491: case WINGDEATHPIC: ! 3492: symbols[0]=1; ! 3493: mission_accomplished=1; ! 3494: gameover=1; ! 3495: break; ! 3496: case DIDEATHPIC: ! 3497: symbols[1]=1; ! 3498: mission_accomplished=1; ! 3499: gameover=1; ! 3500: break; ! 3501: case SFRODEATHPIC: ! 3502: symbols[2]=1; ! 3503: mission_accomplished=1; ! 3504: gameover=1; ! 3505: break; ! 3506: case ANTDEATHPIC: ! 3507: symbols[3]=1; ! 3508: mission_accomplished=1; ! 3509: gameover=1; ! 3510: break; ! 3511: case SGOLDEATHPIC: ! 3512: symbols[4]=1; ! 3513: mission_accomplished=1; ! 3514: gameover=1; ! 3515: break; ! 3516: case SUNGDEATHPIC: ! 3517: symbols[5]=1; ! 3518: mission_accomplished=1; ! 3519: gameover=1; ! 3520: break; ! 3521: case REDHDEATHPIC: ! 3522: symbols[6]=1; ! 3523: mission_accomplished=1; ! 3524: gameover=1; ! 3525: break; ! 3526: case SSALDEATHPIC: ! 3527: killedsonny=1; ! 3528: mission_accomplished=1; ! 3529: gameover=1; ! 3530: break; ! 3531: } ! 3532: } ! 3533: ! 3534: void ! 3535: depositsymbol(int snum) ! 3536: { ! 3537: int i,findpic; ! 3538: int sym=sector[cursectnum[snum]].hitag; ! 3539: ! 3540: switch( sym ) { ! 3541: case 0: findpic=3600; break; ! 3542: case 1: findpic=3604; break; ! 3543: case 2: findpic=3608; break; ! 3544: case 3: findpic=3612; break; ! 3545: case 4: findpic=3592; break; ! 3546: case 5: findpic=3596; break; ! 3547: case 6: findpic=3616; break; ! 3548: } ! 3549: ! 3550: if( symbols[sym] ) { ! 3551: for( i=0; i<MAXSPRITES; i++ ) { ! 3552: if( sprptr[i]->picnum == findpic ) { ! 3553: sprptr[i]->picnum=findpic+1; ! 3554: symbolsdeposited[sym]=1; ! 3555: break; ! 3556: } ! 3557: } ! 3558: } ! 3559: ! 3560: if( symbolsdeposited[0] && ! 3561: symbolsdeposited[1] && ! 3562: symbolsdeposited[2] && ! 3563: symbolsdeposited[3] && ! 3564: symbolsdeposited[4] && ! 3565: symbolsdeposited[5] && ! 3566: symbolsdeposited[6] ) { ! 3567: allsymsdeposited=1; ! 3568: gameover=1; ! 3569: } ! 3570: } ! 3571: ! 3572: int ! 3573: missionfailed() ! 3574: { ! 3575: if( option[4] != 0 ) { ! 3576: return(0); ! 3577: } ! 3578: ! 3579: numlives++; ! 3580: ! 3581: switch( difficulty ) { ! 3582: case 0: ! 3583: case 1: ! 3584: if( numlives < 6 ) ! 3585: return(0); ! 3586: break; ! 3587: case 2: ! 3588: if( numlives < 4 ) ! 3589: return(0); ! 3590: break; ! 3591: default: ! 3592: if( numlives < 2 ) ! 3593: return(0); ! 3594: break; ! 3595: } ! 3596: ! 3597: mission_accomplished=0; ! 3598: gameover=1; ! 3599: return(1); ! 3600: } ! 3601: ! 3602: void ! 3603: debriefing() ! 3604: { ! 3605: if( mission_accomplished ) { ! 3606: if( civillianskilled == 0 ) { ! 3607: switch( mission ) { ! 3608: case 2: ! 3609: smkplayseq("ROSSI2"); ! 3610: break; ! 3611: case 1: ! 3612: smkplayseq("DIMARCO2"); ! 3613: break; ! 3614: case 5: ! 3615: smkplayseq("CONNOR2"); ! 3616: break; ! 3617: case 4: ! 3618: smkplayseq("SONNY2"); ! 3619: break; ! 3620: case 6: ! 3621: smkplayseq("JANUS2"); ! 3622: break; ! 3623: case 3: ! 3624: smkplayseq("LOWELL2"); ! 3625: break; ! 3626: case 0: ! 3627: smkplayseq("DOLLAR2"); ! 3628: break; ! 3629: } ! 3630: } ! 3631: else { ! 3632: switch( mission ) { ! 3633: case 2: ! 3634: smkplayseq("ROSSI3"); ! 3635: break; ! 3636: case 1: ! 3637: smkplayseq("DIMARCO3"); ! 3638: break; ! 3639: case 5: ! 3640: smkplayseq("CONNOR3"); ! 3641: break; ! 3642: case 4: ! 3643: smkplayseq("SONNY3"); ! 3644: break; ! 3645: case 6: ! 3646: smkplayseq("JANUS3"); ! 3647: break; ! 3648: case 3: ! 3649: smkplayseq("LOWELL3"); ! 3650: break; ! 3651: case 0: ! 3652: smkplayseq("DOLLAR3"); ! 3653: break; ! 3654: } ! 3655: } ! 3656: } ! 3657: else { ! 3658: if( civillianskilled == 0 ) { ! 3659: switch( mission ) { ! 3660: case 2: ! 3661: smkplayseq("ROSSI4"); ! 3662: break; ! 3663: case 1: ! 3664: smkplayseq("DIMARCO4"); ! 3665: break; ! 3666: case 5: ! 3667: smkplayseq("CONNOR4"); ! 3668: break; ! 3669: case 4: ! 3670: smkplayseq("SONNY4"); ! 3671: break; ! 3672: case 6: ! 3673: smkplayseq("JANUS4"); ! 3674: break; ! 3675: case 3: ! 3676: smkplayseq("LOWELL4"); ! 3677: break; ! 3678: case 0: ! 3679: smkplayseq("DOLLAR4"); ! 3680: break; ! 3681: } ! 3682: } ! 3683: else { ! 3684: switch( mission ) { ! 3685: case 2: ! 3686: smkplayseq("ROSSI5"); ! 3687: break; ! 3688: case 1: ! 3689: smkplayseq("DIMARCO5"); ! 3690: break; ! 3691: case 5: ! 3692: smkplayseq("CONNOR5"); ! 3693: break; ! 3694: case 4: ! 3695: smkplayseq("SONNY5"); ! 3696: break; ! 3697: case 6: ! 3698: smkplayseq("JANUS5"); ! 3699: break; ! 3700: case 3: ! 3701: smkplayseq("LOWELL5"); ! 3702: break; ! 3703: case 0: ! 3704: smkplayseq("DOLLAR5"); ! 3705: break; ! 3706: } ! 3707: } ! 3708: } ! 3709: } ! 3710:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.