|
|
1.1 ! root 1: /*************************************************************************** ! 2: * WHINP.C - main game code for Apogee engine * ! 3: * * ! 4: ***************************************************************************/ ! 5: ! 6: #include "icorp.h" ! 7: #include "keydefs.h" // Les 07/24/95 ! 8: #include "jstick.h" // Les 07/27/95 ! 9: ! 10: int soundcontrol; ! 11: int musiclevel; ! 12: int digilevel; ! 13: int soundtoggle; ! 14: ! 15: extern int mapon; ! 16: ! 17: int followmode=0; ! 18: extern long followx; ! 19: extern long followy; ! 20: ! 21: //JSA BLORB ! 22: extern int lavasnd; ! 23: int justplayed=0; ! 24: int lopoint=0; ! 25: int walktoggle=0; ! 26: int runningtime=0; ! 27: ! 28: short cybyaw,cybpit,cybrol; ! 29: ! 30: int charsperline=0; ! 31: char nettemp[80]; ! 32: extern char typemessage[]; ! 33: extern char typemessageleng, typemode; ! 34: extern char scantoasc[]; ! 35: extern char scantoascwithshift[]; ! 36: int nettypemode=0; ! 37: ! 38: //scantoasc ! 39: ! 40: extern char displaybuf[]; ! 41: extern char tempbuf[]; ! 42: extern int displaytime; ! 43: extern int spiked; ! 44: ! 45: int mousecalibrate=0; ! 46: int mousespeed=3; ! 47: int mousxspeed=3, ! 48: mousyspeed=3; ! 49: ! 50: long angvel, ! 51: svel, ! 52: vel; ! 53: ! 54: ! 55: extern int escapetomenu; ! 56: extern int currweaponflip; ! 57: extern int invincibletime; ! 58: extern int manatime; ! 59: ! 60: long lockclock; ! 61: ! 62: long oldhoriz; ! 63: ! 64: int pressedkey; ! 65: int testpaleffects=0; ! 66: ! 67: char joyb, ! 68: oldjoyb, ! 69: oldbstatus, ! 70: butbit[]={0x10,0x20,0x40,0x80}, ! 71: mbutbit[]={0x01,0x02}; ! 72: ! 73: short jcalibration=0, ! 74: jctrx, ! 75: jctry, ! 76: jlowx,jhighx, ! 77: jlowy,jhighy, ! 78: jmovespeed=16; ! 79: joyx,joyy, ! 80: joykeys[4], ! 81: jstickenabled=0, ! 82: jturnspeed=16; ! 83: ! 84: short mousekeys[2]; ! 85: ! 86: char option2[7]; ! 87: ! 88: extern int wet; ! 89: extern char foggy; ! 90: extern char tremors; ! 91: extern char flashflag; ! 92: ! 93: extern int currweaponfired; ! 94: ! 95: extern int currentorb; ! 96: extern int currentpotion; ! 97: extern long selectedgun; ! 98: extern int currweapon; ! 99: extern int hasshot; ! 100: extern int orbshot; ! 101: extern int showstatusbar; ! 102: extern int showheart; ! 103: extern int showbook; ! 104: ! 105: short oldmousestatus, brightness, gbrightness; ! 106: extern short compass; ! 107: extern int playerdie; ! 108: ! 109: extern ! 110: int iglassenabled, ! 111: vfx1enabled; ! 112: ! 113: extern ! 114: char vfx1_cyberpuck; ! 115: ! 116: int cybpuckused; ! 117: ! 118: short pitch, ! 119: roll, ! 120: yaw; ! 121: ! 122: long vrangle,vrangle2, ! 123: vrdelta, ! 124: vrpitch; ! 125: ! 126: extern ! 127: char puckbuttons; ! 128: ! 129: extern ! 130: short puckpitch, ! 131: puckroll, ! 132: puckbutton[]; ! 133: ! 134: void ! 135: initjstick(void) ! 136: { ! 137: jcalibration=1; ! 138: jstickenabled=0; ! 139: if (option2[3] == 0) { ! 140: option2[3]=KEYFIRE; ! 141: } ! 142: if (option2[4] == 0) { ! 143: option2[4]=KEYUSE; ! 144: } ! 145: if (option2[5] == 0) { ! 146: option2[5]=KEYUSEP; ! 147: } ! 148: if (option2[6] == 0) { ! 149: option2[6]=KEYSTRAFE; ! 150: } ! 151: joykeys[0]=option2[3]; ! 152: joykeys[1]=option2[4]; ! 153: joykeys[2]=option2[5]; ! 154: joykeys[3]=option2[6]; ! 155: } ! 156: ! 157: void ! 158: keytimerstuff(void) ! 159: { ! 160: ! 161: if(keystatus[keys[KEYSTRAFE]] == 0) { ! 162: if(keystatus[keys[KEYLEFT]] > 0 || keystatus[RLEFT] > 0) { ! 163: angvel-=16; ! 164: if(angvel < -128) { ! 165: angvel=-128; ! 166: } ! 167: } ! 168: if(keystatus[keys[KEYRIGHT]] > 0 || keystatus[RRIGHT] > 0) { ! 169: angvel+=16; ! 170: if(angvel > 127) { ! 171: angvel=127; ! 172: } ! 173: } ! 174: } ! 175: else { ! 176: if(keystatus[keys[KEYLEFT]] > 0 || keystatus[RLEFT] > 0) { ! 177: svel+=8; ! 178: if(svel > 127) { ! 179: svel=127; ! 180: } ! 181: } ! 182: if(keystatus[keys[KEYRIGHT]] > 0 || keystatus[RRIGHT] > 0) { ! 183: svel-=8; ! 184: if(svel < -128) { ! 185: svel=-128; ! 186: } ! 187: } ! 188: } ! 189: ! 190: if (keystatus[keys[KEYSTFL]] != 0) { ! 191: svel+=8; ! 192: if (svel > 127) { ! 193: svel=127; ! 194: } ! 195: } ! 196: else if (keystatus[keys[KEYSTFR]] != 0) { ! 197: svel-=8; ! 198: if (svel < -128) { ! 199: svel=-128; ! 200: } ! 201: } ! 202: ! 203: if(keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) { ! 204: vel+=8; ! 205: if(vel > 201) { ! 206: vel=201; ! 207: } ! 208: } ! 209: ! 210: if(keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) { ! 211: vel-=8; ! 212: if(vel < -201) { ! 213: vel=-201; ! 214: } ! 215: } ! 216: ! 217: if(angvel < 0) { ! 218: angvel+=12; ! 219: if(angvel > 0) { ! 220: angvel=0; ! 221: } ! 222: } ! 223: ! 224: if(angvel > 0) { ! 225: angvel-=12; ! 226: if(angvel < 0) { ! 227: angvel=0; ! 228: } ! 229: } ! 230: ! 231: if(svel < 0) { ! 232: svel+=2; ! 233: if(svel > 0) { ! 234: svel=0; ! 235: } ! 236: } ! 237: ! 238: if(svel > 0) { ! 239: svel-=2; ! 240: if(svel < 0) { ! 241: svel=0; ! 242: } ! 243: } ! 244: ! 245: if(vel < 0) { ! 246: vel+=2; ! 247: if(vel > 0) { ! 248: vel=0; ! 249: } ! 250: } ! 251: ! 252: if(vel > 0) { ! 253: vel-=2; ! 254: if(vel < 0) { ! 255: vel=0; ! 256: } ! 257: } ! 258: ! 259: } ! 260: ! 261: void ! 262: dophysics(struct player *plr,long goalz,short flyupdn,int v) ! 263: { ! 264: if (plr->orbactive[5] > 0) { ! 265: if (v > 0) { ! 266: if (plr->horiz > 125) ! 267: plr->hvel-=(synctics<<6); ! 268: else if (plr->horiz < 75) ! 269: plr->hvel+=(synctics<<6); ! 270: } ! 271: else { ! 272: if (flyupdn > 0) { ! 273: plr->hvel-=(synctics<<7); ! 274: } ! 275: if (flyupdn < 0) { ! 276: plr->hvel+=(synctics<<7); ! 277: } ! 278: } ! 279: plr->hvel+=(sintable[(lockclock<<4)&2047]>>6); ! 280: plr->fallz=0L; ! 281: } ! 282: else if (plr->z < goalz) { ! 283: plr->hvel+=GRAVITYCONSTANT; ! 284: plr->onsomething&=~(GROUNDBIT|PLATFORMBIT); ! 285: plr->fallz+=plr->hvel; ! 286: } ! 287: else if (plr->z > goalz) { ! 288: plr->hvel-=((plr->z-goalz)>>6); ! 289: plr->onsomething|=GROUNDBIT; ! 290: plr->fallz=0L; ! 291: } ! 292: else { ! 293: plr->fallz=0L; ! 294: } ! 295: plr->z+=plr->hvel; ! 296: if (plr->hvel > 0 && plr->z > goalz) { ! 297: plr->hvel>>=2; ! 298: } ! 299: else if (plr->onsomething != 0) { ! 300: if (plr->hvel < 0 && plr->z < goalz) { ! 301: plr->hvel=0; ! 302: plr->z=goalz; ! 303: } ! 304: } ! 305: if (plr->z < sector[plr->sector].ceilingz) { ! 306: plr->z=sector[plr->sector].ceilingz+(plr->height>>2); ! 307: plr->hvel=0; ! 308: } ! 309: else if (plr->z > sector[plr->sector].floorz) { ! 310: plr->z=sector[plr->sector].floorz-(plr->height>>4); ! 311: plr->hvel=0; ! 312: } ! 313: #if 0 ! 314: if (plr->forcev != 0) { ! 315: *xvect=(long)((plr->forcev*(long)sintable[(plr->forcea+512)&2047])>>3); ! 316: *yvect=(long)((plr->forcev*(long)sintable[plr->forcea])>>3); ! 317: plr->forcev>>=1; ! 318: } ! 319: #endif ! 320: } ! 321: ! 322: void processinput(struct player *plr) { ! 323: ! 324: short bstatus,mousx,mousy; ! 325: long goalz,hihit,hiz,i,lohit,loz,tics,xvect,yvect; ! 326: long dax,dax2,day,day2,odax,odax2,oday,oday2; ! 327: int a,s,v; ! 328: static int mv; ! 329: long oldposx, oldposy; ! 330: long dist; ! 331: long feetoffground; ! 332: char *ptr; ! 333: short hitobject, onsprite=-1; ! 334: static short tempsectornum; ! 335: short onground; ! 336: ! 337: a=angvel; ! 338: s=svel; ! 339: v=vel; ! 340: ! 341: //if backspace > 0 then type mode = 1 ! 342: //backspace = 0 ! 343: ! 344: if( keystatus[0xe] > 0 ) { ! 345: if( netgame == 0 ) { ! 346: if(typemode == 1) { ! 347: typemode=0; ! 348: charsperline=0; ! 349: typemessageleng=0; ! 350: } ! 351: else { ! 352: typemode=1; ! 353: } ! 354: keystatus[0xe]=0; ! 355: } ! 356: else { ! 357: if(nettypemode == 1) { ! 358: nettypemode=0; ! 359: charsperline=0; ! 360: typemessageleng=0; ! 361: strcpy(nettemp,""); ! 362: } ! 363: else { ! 364: nettypemode=1; ! 365: typemessageleng=0; ! 366: } ! 367: keystatus[0xe]=0; ! 368: } ! 369: } ! 370: ! 371: if (typemode == 1) { ! 372: typeletter(); ! 373: } ! 374: ! 375: if (nettypemode == 1) { ! 376: nettypeletter(); ! 377: } ! 378: ! 379: ! 380: if(keystatus[1] > 0) { ! 381: keystatus[1]=0; ! 382: if(plr->z < sector[plr->sector].floorz-((PLAYERHEIGHT+8)<<8) ! 383: // || sector[plr->sector].floorpicnum == LAVA ! 384: // || sector[plr->sector].floorpicnum == SLIME ! 385: // || sector[plr->sector].floorpicnum == WATER ! 386: // || sector[plr->sector].floorpicnum == HEALTHWATER ! 387: // || sector[plr->sector].floorpicnum == ANILAVA ! 388: // || sector[plr->sector].floorpicnum == LAVA1 ! 389: // || sector[plr->sector].floorpicnum == LAVA2 ) ! 390: ) { ! 391: strcpy(displaybuf,"must be on the ground"); ! 392: displaytime=360; ! 393: } ! 394: else { ! 395: escapetomenu=1; ! 396: plr->z=sector[plr->sector].floorz-(PLAYERHEIGHT<<8); ! 397: setsprite(plr->spritenum,plr->x,plr->y,plr->z+(plr->height<<8)); ! 398: sprite[plr->spritenum].ang=plr->ang; ! 399: //visibility=2048; ! 400: visibility=1024; ! 401: } ! 402: } ! 403: ! 404: if( followmode == 1) { ! 405: if(keystatus[keys[KEYLEFT]] > 0 || keystatus[RLEFT] > 0) { ! 406: followx-=synctics<<5; ! 407: } ! 408: if(keystatus[keys[KEYRIGHT]] > 0 || keystatus[RRIGHT] > 0) { ! 409: followx+=synctics<<5; ! 410: } ! 411: if(keystatus[keys[KEYFWD]] > 0 || keystatus[RUP] > 0) { ! 412: followy-=synctics<<5; ! 413: } ! 414: if(keystatus[keys[KEYBACK]] > 0 || keystatus[RDN] > 0) { ! 415: followy+=synctics<<5; ! 416: } ! 417: ! 418: if( labs(followx) >= 65536-1024 ) ! 419: followx=65536-1024; ! 420: ! 421: if( labs(followy) >= 65536-1024 ) ! 422: followy=65536-1024; ! 423: ! 424: if( keystatus[0x21] > 0) { ! 425: followmode=0; ! 426: keystatus[0x21]=0; ! 427: } ! 428: return; ! 429: } ! 430: ! 431: ! 432: if (keystatus[0x44] > 0) { //F10 - brightness ! 433: keystatus[0x44]=0; ! 434: gbrightness=brightness++; ! 435: if (brightness > 8) brightness=0 , gbrightness=0; ! 436: setbrightness(brightness); ! 437: } ! 438: ! 439: ! 440: if( keystatus[0x43] > 0 ) { //F9 sound controls ! 441: if( soundtoggle == 1) ! 442: soundtoggle=0; ! 443: else ! 444: soundtoggle=1; ! 445: } ! 446: ! 447: if( soundtoggle == 1) { ! 448: dosoundthing(); ! 449: } ! 450: ! 451: ! 452: if( option[3] != 0 ) { ! 453: if( keystatus[0x58] > 0 ) { ! 454: if( mousecalibrate == 1 ) { ! 455: mousecalibrate=0; ! 456: strcpy(displaybuf,"Mouse calibrate off"); ! 457: displaytime=40; ! 458: } ! 459: else { ! 460: mousecalibrate=1; ! 461: strcpy(displaybuf,"Mouse calibrate on"); ! 462: displaytime=360; ! 463: } ! 464: keystatus[0x58]=0; ! 465: } ! 466: } ! 467: ! 468: if( mousecalibrate == 1 ) { ! 469: if( keystatus[keys[KEYRIGHT]] != 0 ) { ! 470: mousxspeed++; ! 471: if( mousxspeed > 16 ) ! 472: mousxspeed=16; ! 473: ! 474: itoa(mousxspeed,tempbuf,10); ! 475: strcpy(displaybuf,"Mouse Speed x "); ! 476: strcat(displaybuf,tempbuf); ! 477: displaytime=40; ! 478: ! 479: } ! 480: if( keystatus[keys[KEYLEFT]] != 0 ) { ! 481: mousxspeed--; ! 482: if( mousxspeed < 1 ) ! 483: mousxspeed=1; ! 484: ! 485: itoa(mousxspeed,tempbuf,10); ! 486: strcpy(displaybuf,"Mouse Speed x "); ! 487: strcat(displaybuf,tempbuf); ! 488: displaytime=40; ! 489: ! 490: } ! 491: if( keystatus[keys[KEYFWD]] != 0 ) { ! 492: mousyspeed++; ! 493: if( mousyspeed > 16 ) ! 494: mousyspeed=16; ! 495: ! 496: itoa(mousyspeed,tempbuf,10); ! 497: strcpy(displaybuf,"Mouse Speed y "); ! 498: strcat(displaybuf,tempbuf); ! 499: displaytime=40; ! 500: ! 501: } ! 502: if( keystatus[keys[KEYBACK]] != 0 ) { ! 503: mousyspeed--; ! 504: if( mousyspeed < 1 ) ! 505: mousyspeed=1; ! 506: ! 507: itoa(mousyspeed,tempbuf,10); ! 508: strcpy(displaybuf,"Mouse Speed y "); ! 509: strcat(displaybuf,tempbuf); ! 510: displaytime=40; ! 511: ! 512: } ! 513: } ! 514: ! 515: if (jstickenabled) { ! 516: jstick(); ! 517: //sprintf(displaybuf,"%d %d %X",joyx,joyy,joyb); ! 518: //displaytime=360; ! 519: if (keystatus[0x57] != 0) { // recalibrate joystick (F11) ! 520: jstickenabled=0; ! 521: jcalibration=1; ! 522: } ! 523: ! 524: if (joyx < jlowx) { ! 525: //a-=(jturnspeed<<3); ! 526: keystatus[keys[KEYLEFT]]=1; ! 527: } ! 528: else ! 529: keystatus[keys[KEYLEFT]]=0; ! 530: ! 531: if (joyx > jhighx) { ! 532: //a+=(jturnspeed<<3); ! 533: keystatus[keys[KEYRIGHT]]=1; ! 534: } ! 535: else ! 536: keystatus[keys[KEYRIGHT]]=0; ! 537: ! 538: if (joyy < jlowy) { ! 539: v+=(jmovespeed<<3); ! 540: } ! 541: else if (joyy > jhighy) { ! 542: v-=(jmovespeed<<3); ! 543: } ! 544: ! 545: for (i=0 ; i < 4 ; i++) { ! 546: if (((joyb&butbit[i]) != butbit[i]) // button is down ! 547: && ((oldjoyb&butbit[i]) == butbit[i])) { ! 548: keystatus[keys[joykeys[i]]]=1; ! 549: if (joykeys[i] == KEYRUN) { ! 550: keystatus[keys[KEYFWD]]=1; ! 551: } ! 552: } ! 553: else if (((joyb&butbit[i]) != butbit[i]) // button still down ! 554: && ((oldjoyb&butbit[i]) != butbit[i])) { ! 555: if (joykeys[i] == KEYUSE // ..one-time actions ! 556: || joykeys[i] == KEYJUMP ! 557: || joykeys[i] == KEYMAP ! 558: || joykeys[i] == KEYUSEP ! 559: || joykeys[i] == KEYCAST) { ! 560: keystatus[keys[joykeys[i]]]=0; ! 561: } ! 562: } ! 563: else if (((joyb&butbit[i]) == butbit[i]) // button released ! 564: && ((oldjoyb&butbit[i]) != butbit[i])) { ! 565: keystatus[keys[joykeys[i]]]=0; ! 566: if (joykeys[i] == KEYRUN) { ! 567: keystatus[keys[KEYFWD]]=0; ! 568: } ! 569: } ! 570: } ! 571: oldjoyb=joyb; ! 572: } ! 573: else if (jcalibration) { ! 574: jstick(); ! 575: switch (jcalibration) { ! 576: case 1: ! 577: strcpy(displaybuf,"center stick press button"); ! 578: displaytime=360; ! 579: if (((joyb&0xF0) != 0xF0) && ((oldjoyb&0xF0) == 0xF0)) { ! 580: jctrx=joyx; ! 581: jctry=joyy; ! 582: jcalibration++; ! 583: } ! 584: break; ! 585: case 2: ! 586: strcpy(displaybuf,"top left press button"); ! 587: displaytime=360; ! 588: if (((joyb&0xF0) != 0xF0) && ((oldjoyb&0xF0) == 0xF0)) { ! 589: jlowx=jctrx-((jctrx-joyx)/4); ! 590: jlowy=jctry-((jctry-joyy)/4); ! 591: jcalibration++; ! 592: } ! 593: break; ! 594: case 3: ! 595: strcpy(displaybuf,"lower right press button"); ! 596: displaytime=360; ! 597: if (((joyb&0xF0) != 0xF0) && ((oldjoyb&0xF0) == 0xF0)) { ! 598: jhighx=jctrx+((joyx-jctrx)/4); ! 599: jhighy=jctry+((joyy-jctry)/4); ! 600: jcalibration=0; ! 601: jstickenabled=1; ! 602: } ! 603: break; ! 604: } ! 605: oldjoyb=joyb; ! 606: } ! 607: ! 608: if (v < -201) v=-201; ! 609: else if (v > 201) v=201; ! 610: ! 611: v+=v>>1;// SUPER MARIO BROTHERS ! 612: ! 613: if (s < -201) s=-201; ! 614: else if (s > 201) s=201; ! 615: ! 616: if (a < -112) a=-112; ! 617: else if (a > 112) a=112; ! 618: ! 619: if(option[3] != 0) { ! 620: getmousevalues(&mousx,&mousy,&bstatus); ! 621: if(keystatus[keys[KEYSTRAFE]] != 0) { ! 622: i=s; ! 623: i-=(mousx*mousxspeed); ! 624: } ! 625: else { ! 626: i=a; ! 627: i+=(mousx*mousxspeed); // Les 07/24/95 ! 628: } ! 629: ! 630: //i=a; ! 631: // i+=(mousx<<3); ! 632: // i+=(mousx*mousxspeed); // Les 07/24/95 ! 633: ! 634: if (i < -128) i=-128; ! 635: if (i > 127) i=127; ! 636: ! 637: //a=i; ! 638: if(keystatus[keys[KEYSTRAFE]] != 0) ! 639: s=i; ! 640: else ! 641: a=i; ! 642: ! 643: // Les START - 07/24/95 - if key KEYLOOKING is held, mouse fwd/back looks up/down ! 644: if (keystatus[keys[KEYLOOKING]]) { ! 645: i=plr->horiz; ! 646: i+=(mousy>>4); ! 647: if(i < 100-(YDIM>>1)) i=100-(YDIM>>1); ! 648: else if(i > 100+(YDIM>>1)) i=100+(YDIM>>1); ! 649: plr->horiz=i; ! 650: } ! 651: // else mouse fwd/back moves fwd/back ! 652: else { ! 653: i=v; ! 654: // i+=(mousy<<3); ! 655: i-=(mousy*mousyspeed); // Les 07/24/95 ! 656: if (i < -128) { ! 657: i=-128; ! 658: } ! 659: else if (i > 127) { ! 660: i=127; ! 661: } ! 662: v=i; ! 663: } ! 664: for (i=0 ; i < 2 ; i++) { ! 665: if (((bstatus&mbutbit[i]) == mbutbit[i]) // button is down ! 666: && ((oldbstatus&mbutbit[i]) != mbutbit[i])) { ! 667: keystatus[keys[mousekeys[i]]]=1; ! 668: if (mousekeys[i] == KEYRUN) { ! 669: keystatus[keys[KEYFWD]]=1; ! 670: } ! 671: } ! 672: else if (((bstatus&mbutbit[i]) == mbutbit[i])// button still down ! 673: && ((oldbstatus&mbutbit[i]) == mbutbit[i])) { ! 674: if (mousekeys[i] == KEYUSE // ..one-time actions ! 675: || mousekeys[i] == KEYJUMP ! 676: || mousekeys[i] == KEYMAP ! 677: || mousekeys[i] == KEYUSEP ! 678: || mousekeys[i] == KEYCAST) { ! 679: keystatus[keys[mousekeys[i]]]=0; ! 680: } ! 681: } ! 682: else if (((bstatus&mbutbit[i]) != mbutbit[i])// button released ! 683: && ((oldbstatus&mbutbit[i]) == mbutbit[i])) { ! 684: keystatus[keys[mousekeys[i]]]=0; ! 685: if (mousekeys[i] == KEYRUN) { ! 686: keystatus[keys[KEYFWD]]=0; ! 687: } ! 688: } ! 689: } ! 690: oldbstatus=bstatus; ! 691: #if 0 // Les 07/27/95 ! 692: // if((bstatus&0x02) != 0 && keystatus[keys[KEYFWD]] == 0 && keystatus[keys[KEYBACK]] == 0) { ! 693: if ((bstatus&0x02) != 0) { ! 694: mv+=16; ! 695: // if(mv > 201) { ! 696: // mv=201; ! 697: // } ! 698: v+=mv; ! 699: if (v > 201) { // Les 07/24/95 ! 700: v=201; // Les 07/24/95 ! 701: } // Les 07/24/95 ! 702: } ! 703: else ! 704: mv=0; ! 705: #endif // Les 07/27/95 ! 706: } ! 707: ! 708: if (vfx1enabled || iglassenabled || cyberenabled) { ! 709: if (iglassenabled || cyberenabled) { ! 710: vio_read(&yaw,&pitch,&roll); ! 711: } ! 712: else { ! 713: vfx1_read(&yaw,&pitch,&roll,&puckpitch,&puckroll,&puckbuttons); ! 714: } ! 715: vrangle=(1024-(yaw>>4))&2047; ! 716: vrpitch=100+(pitch/82); ! 717: if (vrpitch < 0) { ! 718: vrpitch=0; ! 719: } ! 720: else if (vrpitch > 200) { ! 721: vrpitch=200; ! 722: } ! 723: plr->ang=(plr->ang+vrangle-vrangle2)&2047; ! 724: plr->horiz=vrpitch; ! 725: vrangle2=vrangle; ! 726: if (vfx1_cyberpuck) { ! 727: for (i=0 ; i < 3 ; i++) { ! 728: if ((puckbuttons&(1<<i)) != 0) { ! 729: keystatus[keys[puckbutton[i]]]=1; ! 730: cybpuckused=1; ! 731: } ! 732: else if (cybpuckused) { ! 733: keystatus[keys[puckbutton[i]]]=0; ! 734: } ! 735: } ! 736: if (puckpitch < -1024) { ! 737: vel=-max(puckpitch>>6,-128); ! 738: } ! 739: else if (puckpitch > 1024) { ! 740: vel=-min(puckpitch>>6,127); ! 741: } ! 742: if (puckroll < -1024) { ! 743: svel=-max(puckroll>>5,-128); ! 744: } ! 745: else if (puckroll > 1024) { ! 746: svel=-min(puckroll>>5,127); ! 747: } ! 748: } ! 749: } ! 750: ! 751: i=totalclock-lockclock; ! 752: if (i > 255) ! 753: i=255; ! 754: ! 755: synctics=tics=i; ! 756: lockclock+=(long)synctics; ! 757: ! 758: ! 759: sprite[plr->spritenum].cstat^=1; ! 760: getzrange(plr->x,plr->y,plr->z,plr->sector,&hiz,&hihit,&loz,&lohit,128L,0); ! 761: sprite[plr->spritenum].cstat^=1; ! 762: ! 763: if ((lohit&0xc000) == 49152) { ! 764: if( (sprite[lohit&4095].z-plr->z) <= (PLAYERHEIGHT<<8) ) ! 765: onsprite=(lohit&4095); ! 766: } ! 767: else ! 768: onsprite=-1; ! 769: ! 770: feetoffground=(sector[plr->sector].floorz-plr->z); ! 771: ! 772: if((keystatus[keys[KEYRUN]] != 0 || keystatus[RSHIFT] != 0) || v > 201) { ! 773: // if (keystatus[keys[KEYRUN]] != 0 || v > 201) { // Les 07/24/95 ! 774: ! 775: if(v > 201) ! 776: v=201; ! 777: ! 778: v+=v>>1;// SUPER MARIO BROTHERS ! 779: ! 780: if(feetoffground > (32<<8)) ! 781: tics+=tics>>1; ! 782: } ! 783: ! 784: // if(keystatus[0xd1] != 0 ) { ! 785: if (keystatus[keys[KEYLKDN]] != 0 ) { ! 786: if(plr->horiz > 100-(YDIM>>1)) { ! 787: plr->horiz-=(synctics<<1); ! 788: autohoriz=0; ! 789: } ! 790: } ! 791: ! 792: // else if(keystatus[0xc9] != 0) { ! 793: else if (keystatus[keys[KEYLKUP]] != 0) { ! 794: if(plr->horiz < 100+(YDIM>>1)) ! 795: plr->horiz+=(synctics<<1); ! 796: autohoriz=0; ! 797: } ! 798: ! 799: if(keystatus[0xcf] != 0) ! 800: // if (keystatus[keys[KEYUNCAST]] != 0) // Les 07/24/95 ! 801: plr->orbactive[5]=-1; ! 802: ! 803: // oldmousestatus=bstatus&0x01; // Les 07/27/95 ! 804: ! 805: // if(keystatus[keys[KEYFIRE]] != 0 || keystatus[0x9d] != 0 || (oldmousestatus) != 0 && hasshot == 0) { ! 806: // if (keystatus[keys[KEYFIRE]] != 0 || (oldmousestatus) != 0 && hasshot == 0) { // Les 07/24/95 ! 807: if (keystatus[keys[KEYFIRE]] != 0 && hasshot == 0) { // Les 07/27/95 ! 808: if(currweaponfired == 0) ! 809: plrfireweapon(plr); ! 810: } ! 811: ! 812: // cast ! 813: // if( ( keystatus[LALT] > 0 || keystatus[RALT] > 0 ) && orbshot == 0 && currweaponflip == 0) { ! 814: if (keystatus[keys[KEYCAST]] > 0 && orbshot == 0 && currweaponflip == 0) { // Les 07/24/95 ! 815: if(plr->orb[currentorb] == 1 && selectedgun == 0) { ! 816: if(lvlspellcheck(plr)) { ! 817: orbshot=1; ! 818: //JSA_NEW ! 819: activatedaorb(plr); ! 820: } ! 821: } ! 822: if(selectedgun != 0) ! 823: keystatus[WEAPONONE]=1; ! 824: ! 825: // keystatus[LALT] = 0 , keystatus[RALT] = 0; ! 826: keystatus[keys[KEYCAST]]=0; // Les 07/24/95 ! 827: } ! 828: ! 829: // if(keystatus[0x1c] > 0) { ! 830: if (keystatus[keys[KEYUSEP]] > 0) { // Les 07/24/95 ! 831: // keystatus[0x1c]=0; ! 832: keystatus[keys[KEYUSEP]]=0; // Les 07/24/95 ! 833: if(plr->potion[currentpotion] > 0) { ! 834: usapotion(plr); ! 835: } ! 836: } ! 837: ! 838: if(keystatus[keys[KEYUSE]] != 0) { ! 839: keystatus[keys[KEYUSE]]=0; ! 840: if (netgame) { ! 841: netdropflag(); ! 842: } ! 843: else { ! 844: plruse(plr); ! 845: } ! 846: } ! 847: ! 848: if((sector[plr->sector].floorpicnum != LAVA ! 849: || sector[plr->sector].floorpicnum != SLIME ! 850: || sector[plr->sector].floorpicnum != WATER ! 851: || sector[plr->sector].floorpicnum != HEALTHWATER ! 852: || sector[plr->sector].floorpicnum != ANILAVA ! 853: || sector[plr->sector].floorpicnum != LAVA1 ! 854: || sector[plr->sector].floorpicnum != LAVA2) ! 855: && feetoffground <= (32<<8) ) ! 856: v>>=1; ! 857: ! 858: ! 859: if((sector[plr->sector].floorpicnum == LAVA ! 860: || sector[plr->sector].floorpicnum == SLIME ! 861: || sector[plr->sector].floorpicnum == WATER ! 862: || sector[plr->sector].floorpicnum == HEALTHWATER ! 863: || sector[plr->sector].floorpicnum == ANILAVA ! 864: || sector[plr->sector].floorpicnum == LAVA1 ! 865: || sector[plr->sector].floorpicnum == LAVA2) ! 866: && plr->orbactive[5] < 0 //loz ! 867: && plr->z >= sector[plr->sector].floorz-(plr->height<<8)-(8<<8) ) { ! 868: //goalz = loz-(24<<8); ! 869: goalz = loz-(32<<8); ! 870: switch( sector[plr->sector].floorpicnum ) { ! 871: case ANILAVA: ! 872: case LAVA: ! 873: case LAVA1: ! 874: case LAVA2: ! 875: //if( plr->treasure[5] == 0) { ! 876: //v-=v>>3; ! 877: if( plr->treasure[5] == 1) { ! 878: goalz=loz-(PLAYERHEIGHT<<8); ! 879: break; ! 880: } ! 881: else ! 882: v-=v>>3; ! 883: ! 884: if( invincibletime > 0 || manatime > 0 ) ! 885: break; ! 886: else { ! 887: if( lavasnd == -1 ) { ! 888: lavasnd=SND_PlaySound(S_FIRELOOP1,0,0,0,-1); ! 889: } ! 890: healthpic(-1); ! 891: startredflash(10); ! 892: } ! 893: ! 894: //} ! 895: break; ! 896: case WATER: ! 897: //if( plr->treasure[4] == 0) { ! 898: //v-=v>>3; ! 899: if( plr->treasure[4] == 1) { ! 900: goalz=loz-(PLAYERHEIGHT<<8); ! 901: } ! 902: else ! 903: v-=v>>3; ! 904: ! 905: //} ! 906: break; ! 907: case HEALTHWATER: ! 908: if( plr->health < plr->maxhealth) { ! 909: healthpic(1); ! 910: startblueflash(5); ! 911: } ! 912: break; ! 913: } ! 914: } ! 915: else if(plr->orbactive[5] > 0) { ! 916: goalz=plr->z-(plr->height<<8); ! 917: plr->hvel=0; ! 918: } ! 919: else ! 920: goalz=loz-(plr->height<<8); ! 921: ! 922: // if( plr->z < sector[plr->sector].floorz-(12<<8) ) ! 923: if (keystatus[keys[KEYJUMP]] != 0) { // Les 07/24/95 ! 924: if (plr->onsomething) { ! 925: plr->hvel-=JUMPVEL; ! 926: plr->onsomething=0; ! 927: } ! 928: keystatus[keys[KEYJUMP]]=0;//WANGO ! 929: } ! 930: ! 931: if (keystatus[keys[KEYCROUCH]] != 0) { // Les 07/24/95 ! 932: if(goalz<((sector[plr->sector].floorz)-(plr->height>>3))) ! 933: //goalz+=(32<<8); ! 934: goalz+=(24<<8); ! 935: ! 936: } ! 937: ! 938: if(keystatus[keys[KEYMAP]] != 0) { // Les 07/24/95 ! 939: if(plr->dimension == 3) { ! 940: plr->dimension=2; ! 941: strcpy(displaybuf,"map "); ! 942: itoa(mapon,tempbuf,10); ! 943: strcat(displaybuf,tempbuf); ! 944: displaytime=720; ! 945: } ! 946: else { ! 947: plr->dimension=3; ! 948: followmode=0; ! 949: } ! 950: keystatus[keys[KEYMAP]]=0; // Les 07/24/95 ! 951: } ! 952: ! 953: if(plr->dimension == 2) { ! 954: if(keystatus[keys[KEYZOOMO]] > 0) // Les 07/24/95 ! 955: if(plr->zoom > 48) ! 956: plr->zoom-=(plr->zoom>>4); ! 957: if(keystatus[keys[KEYZOOMI]] > 0) // Les 07/24/95 ! 958: if(plr->zoom < 4096) ! 959: plr->zoom+=(plr->zoom>>4); ! 960: if(keystatus[0x21] > 0) { ! 961: if(followmode == 0) { ! 962: strcpy(displaybuf,"Map "); ! 963: itoa(mapon,tempbuf,10); ! 964: strcat(displaybuf,tempbuf); ! 965: displaytime=360; ! 966: followmode=1; ! 967: followx=0L; ! 968: followy=0L; ! 969: } ! 970: else ! 971: followmode=0; ! 972: keystatus[0x21]=0; ! 973: } ! 974: } ! 975: ! 976: ! 977: else if(plr->dimension == 3 && svga == 0) { ! 978: if (keystatus[keys[KEYZOOMO]] != 0 && plr->screensize > 64) { // Les 07/24/95 ! 979: if(plr->screensize <= 320) { ! 980: updatepics(); ! 981: } ! 982: plr->screensize-=8; ! 983: dax=(XDIM>>1)-(plr->screensize>>1); ! 984: dax2=dax+plr->screensize-1; ! 985: day=(STATUSSCREEN>>1)-(((plr->screensize*STATUSSCREEN)/XDIM)>>1); ! 986: day2=day+((plr->screensize*STATUSSCREEN)/XDIM)-1; ! 987: setview(dax,day,dax2,day2); ! 988: odax=(YDIM>>1)-((plr->screensize+8)>>1); ! 989: odax2=dax+(plr->screensize+8)-1; ! 990: oday=(STATUSSCREEN>>1)-((((plr->screensize+8)*STATUSSCREEN)/XDIM)>>1); ! 991: oday2=day+(((plr->screensize+8)*STATUSSCREEN)/XDIM)-1; ! 992: permanentwritesprite(0,0,BACKGROUND,0,odax,oday,dax-1,oday2,0); ! 993: permanentwritesprite(0,0,BACKGROUND,0,dax2+1,oday,odax2,oday2,0); ! 994: permanentwritesprite(0,0,BACKGROUND,0,dax,oday,dax2,day-1,0); ! 995: permanentwritesprite(0,0,BACKGROUND,0,dax,day2+1,dax2,oday2,0); ! 996: if(plr->screensize == XDIM) { ! 997: permanentwritesprite(0,200-46,NEWSTATUSBAR,0,0,0,XDIM-1,YDIM-1,0); ! 998: updatepics(); ! 999: } ! 1000: } ! 1001: ! 1002: if (keystatus[keys[KEYZOOMI]] != 0 && plr->screensize <= XDIM) { // Les 07/24/95 ! 1003: plr->screensize+=8; ! 1004: if(plr->screensize > XDIM) { ! 1005: dax=day=0; ! 1006: dax2=XDIM-1; ! 1007: day2=YDIM-1; ! 1008: } ! 1009: else { ! 1010: dax=(XDIM>>1)-(plr->screensize>>1); ! 1011: dax2=dax+plr->screensize-1; ! 1012: day=(STATUSSCREEN>>1)-(((plr->screensize*STATUSSCREEN)/XDIM)>>1); ! 1013: day2=day+((plr->screensize*STATUSSCREEN)/XDIM)-1; ! 1014: } ! 1015: setview(dax,day,dax2,day2); ! 1016: } ! 1017: } ! 1018: ! 1019: //SVGA STUFF WANGO ! 1020: if(plr->dimension == 3 && svga == 1) { ! 1021: if (keystatus[keys[KEYZOOMO]] != 0) { ! 1022: plr->screensize=320; ! 1023: setview(0,0,640-1,372-1); ! 1024: overwritesprite(0,372,SSTATUSBAR,0,0,0); ! 1025: updatepics(); ! 1026: } ! 1027: ! 1028: if (keystatus[keys[KEYZOOMI]] != 0 ) { ! 1029: plr->screensize=328; ! 1030: setview(0,0,640-1,480-1); ! 1031: } ! 1032: } ! 1033: // SVGA END WANGO ! 1034: ! 1035: onground=plr->onsomething; ! 1036: if (keystatus[keys[KEYFLYUP]]) { ! 1037: dophysics(plr,goalz,1,v); ! 1038: } ! 1039: else if (keystatus[keys[KEYFLYDN]]) { ! 1040: dophysics(plr,goalz,-1,v); ! 1041: } ! 1042: else { ! 1043: dophysics(plr,goalz,0,v); ! 1044: } ! 1045: if (!onground && plr->onsomething) { ! 1046: if (plr->fallz > 32768L) { ! 1047: if(rand()%2) ! 1048: playsound_loc(S_PLRPAIN1+(rand()%2),plr->x,plr->y); ! 1049: else ! 1050: playsound_loc(S_PUSH1+(rand()%2),plr->x,plr->y); ! 1051: ! 1052: healthpic(-(plr->fallz>>13)); ! 1053: plr->fallz=0L;//wango ! 1054: } ! 1055: else if (plr->fallz > 8192L) { ! 1056: playsound_loc(S_BREATH1+(rand()%2),plr->x,plr->y); ! 1057: ! 1058: } ! 1059: } ! 1060: ! 1061: if( ihaveflag > 0 ) ! 1062: v-=v>>2; ! 1063: ! 1064: if(v != 0 || s != 0) { ! 1065: xvect=yvect=0; ! 1066: if (v != 0) { ! 1067: xvect=(v*(long)tics*(long)sintable[((plr->ang+2560)&2047)])>>3; ! 1068: yvect=(v*(long)tics*(long)sintable[((plr->ang+2048)&2047)])>>3; ! 1069: } ! 1070: if (s != 0) { ! 1071: xvect+=((s*(long)tics*(long)sintable[((plr->ang+2048)&2047)])>>3); ! 1072: yvect+=((s*(long)tics*(long)sintable[((plr->ang+1536)&2047)])>>3); ! 1073: } ! 1074: ! 1075: oldposx=plr->x; oldposy=plr->y; ! 1076: ! 1077: clipmove(&plr->x,&plr->y,&plr->z,&plr->sector,xvect,yvect,128L,4<<8,4<<8,0); ! 1078: ! 1079: ! 1080: //JSA BLORB ! 1081: ! 1082: if (plr->sector!=tempsectornum) { ! 1083: if( lavasnd != -1 ) ! 1084: switch( sector[plr->sector].floorpicnum ) { ! 1085: case ANILAVA: ! 1086: case LAVA: ! 1087: case LAVA1: ! 1088: case LAVA2: ! 1089: break; ! 1090: default: ! 1091: SND_StopLoop(lavasnd); ! 1092: lavasnd=-1; ! 1093: break; ! 1094: } ! 1095: sectorsounds(); ! 1096: } ! 1097: ! 1098: tempsectornum=plr->sector; ! 1099: ! 1100: ! 1101: //walking on sprite ! 1102: plr->horiz-=oldhoriz; ! 1103: ! 1104: dist=ksqrt((plr->x-oldposx)*(plr->x-oldposx)+(plr->y-oldposy)*(plr->y-oldposy)); ! 1105: ! 1106: if (keystatus[keys[KEYRUN]] > 0) // Les 07/24/95 ! 1107: dist>>=2; ! 1108: ! 1109: if( dist > 0 && feetoffground <= (plr->height<<8) || onsprite != -1) { ! 1110: if( svga == 1) ! 1111: oldhoriz = ((dist*sintable[(totalclock<<5)&2047])>>19)>>2; ! 1112: else ! 1113: oldhoriz = ((dist*sintable[(totalclock<<5)&2047])>>19)>>1; ! 1114: plr->horiz += oldhoriz; ! 1115: } ! 1116: else ! 1117: oldhoriz=0; ! 1118: ! 1119: if( plr->horiz > 200) plr->horiz=200; ! 1120: if( plr->horiz < 0) plr->horiz=0; ! 1121: ! 1122: if( onsprite != -1 && dist > 50 && lopoint == 1 && justplayed == 0) { ! 1123: //JSA SPOOGE ! 1124: switch(sprite[onsprite].picnum) { ! 1125: case WALLARROW: ! 1126: case OPENCHEST: ! 1127: case GIFTBOX: ! 1128: if(walktoggle) ! 1129: playsound_loc(S_WOOD1,(plr->x+3000),plr->y); ! 1130: else ! 1131: playsound_loc(S_WOOD1,plr->x,(plr->y+3000)); ! 1132: walktoggle^=1; ! 1133: justplayed=1; ! 1134: break; ! 1135: case WOODPLANK: //wood planks ! 1136: if(walktoggle) ! 1137: playsound_loc(S_SOFTCHAINWALK,(plr->x+3000),plr->y); ! 1138: else ! 1139: playsound_loc(S_SOFTCHAINWALK,plr->x,(plr->y+3000)); ! 1140: walktoggle^=1; ! 1141: justplayed=1; ! 1142: ! 1143: break; ! 1144: case SQUAREGRATE: //square grating ! 1145: case SQUAREGRATE+1: ! 1146: if(walktoggle) ! 1147: playsound_loc(S_LOUDCHAINWALK,(plr->x+3000),plr->y); ! 1148: else ! 1149: playsound_loc(S_LOUDCHAINWALK,plr->x,(plr->y+3000)); ! 1150: walktoggle^=1; ! 1151: justplayed=1; ! 1152: break; ! 1153: case SPACEPLANK: //spaced planks ! 1154: if(walktoggle) ! 1155: playsound_loc(S_SOFTCREAKWALK,(plr->x+3000),plr->y); ! 1156: else ! 1157: playsound_loc(S_SOFTCREAKWALK,plr->x,(plr->y+3000)); ! 1158: walktoggle^=1; ! 1159: justplayed=1; ! 1160: break; ! 1161: case RAT: ! 1162: playsound_loc(S_RATS1+(rand()%2),sprite[i].x,sprite[i].y); ! 1163: justplayed=1; ! 1164: deletesprite((short)i); ! 1165: break; ! 1166: case SPIDER: ! 1167: //STOMP ! 1168: playsound_loc(S_DEADSTEP,sprite[i].x,sprite[i].y); ! 1169: justplayed=1; ! 1170: newstatus(i,DIE); ! 1171: break; ! 1172: ! 1173: case FREDDEAD: ! 1174: case 1980: ! 1175: case 1981: ! 1176: case 1984: ! 1177: case 1979: ! 1178: case 1957: ! 1179: case 1955: ! 1180: case 1953: ! 1181: case 1952: ! 1182: case 1941: ! 1183: case 1940: ! 1184: playsound_loc(S_DEADSTEP,plr->x,plr->y); ! 1185: justplayed=1; ! 1186: ! 1187: break; ! 1188: ! 1189: default: ! 1190: break; ! 1191: } ! 1192: ! 1193: } ! 1194: ! 1195: if( lopoint == 0 && oldhoriz == -2 && justplayed == 0) ! 1196: lopoint=1; ! 1197: ! 1198: if( lopoint == 1 && oldhoriz != -2 && justplayed == 1) { ! 1199: lopoint=0; ! 1200: justplayed=0; ! 1201: } ! 1202: ! 1203: ! 1204: if( vel > 199 || vel < -199 && dist > 10) ! 1205: runningtime+=synctics; ! 1206: else ! 1207: runningtime-=synctics; ! 1208: ! 1209: if( runningtime < -360 ) ! 1210: runningtime=0; ! 1211: ! 1212: if( runningtime > 360 ) { ! 1213: SND_PlaySound(S_PLRPAIN1,0,0,0,0); ! 1214: runningtime=0; ! 1215: } ! 1216: ! 1217: ! 1218: } ! 1219: if (a != 0) { ! 1220: plr->ang+=((a*(long)synctics)>>4); ! 1221: plr->ang=(plr->ang+2048)&2047; ! 1222: } ! 1223: ! 1224: setsprite(plr->spritenum,plr->x,plr->y,plr->z+(plr->height<<8)); ! 1225: sprite[plr->spritenum].ang=plr->ang; ! 1226: ! 1227: ! 1228: if(sector[plr->sector].ceilingz > sector[plr->sector].floorz-(8<<8) ) ! 1229: healthpic(-10); ! 1230: ! 1231: ! 1232: if(plr->health <= 0 ) { ! 1233: ! 1234: //JSA BLORB ! 1235: SND_CheckLoops(); ! 1236: ! 1237: playerdead(plr); ! 1238: } ! 1239: ! 1240: // if( keystatus[0xc7] > 0) { // home key ! 1241: if (keystatus[keys[KEYCNTR]] > 0) { // home key Les 07/24/95 ! 1242: autohoriz=1; ! 1243: keystatus[keys[KEYCNTR]]=0; ! 1244: } ! 1245: if(autohoriz == 1) ! 1246: autothehoriz(plr); ! 1247: ! 1248: singleshot(bstatus); ! 1249: ! 1250: weaponchange(); ! 1251: ! 1252: } ! 1253: ! 1254: void autothehoriz(struct player *plr) { ! 1255: ! 1256: if(plr->horiz < 100) ! 1257: plr->horiz+=synctics<<1; ! 1258: if(plr->horiz > 100) ! 1259: plr->horiz-=synctics<<1; ! 1260: if(plr->horiz >= 90 && plr->horiz <= 110) ! 1261: autohoriz=0; ! 1262: ! 1263: } ! 1264: ! 1265: #if 0 ! 1266: int gimmer=0; ! 1267: int gimmes=0; ! 1268: int gimmev=0; ! 1269: int gimmep=0; ! 1270: ! 1271: void cheatkeys(struct player *plr) { ! 1272: ! 1273: int i; ! 1274: ! 1275: /* ! 1276: the cheat code is R S V P ! 1277: */ ! 1278: ! 1279: if(keystatus[0x13] > 0) { ! 1280: gimmer=1; ! 1281: // keystatus[0x13]=0; // Les 07/24/95 ! 1282: } ! 1283: if(gimmer == 1 && keystatus[0x1f] > 0) { ! 1284: gimmes=1; ! 1285: // keystatus[0x1f]=0; // Les 07/24/95 ! 1286: } ! 1287: if(gimmes == 1 && keystatus[0x2f] > 0) { ! 1288: gimmev=1; ! 1289: // keystatus[0x2f]=0; // Les 07/24/95 ! 1290: } ! 1291: if(gimmev == 1 && keystatus[0x19] > 0) { ! 1292: gimmep=1; ! 1293: // keystatus[0x19]=0; // Les 07/24/95 ! 1294: } ! 1295: if(gimmep == 1) { ! 1296: gimmer=gimmes=gimmev=gimmep=0; ! 1297: ! 1298: // spiked=1; ! 1299: ! 1300: ! 1301: for(i=0;i<MAXPOTIONS;i++) { ! 1302: plr->potion[i]=9; ! 1303: } ! 1304: ! 1305: plr->weapon[1]=1;plr->ammo[1]=45; //DAGGER ! 1306: plr->weapon[2]=1;plr->ammo[2]=55; //MORNINGSTAR ! 1307: plr->weapon[3]=1;plr->ammo[3]=50; //SHORT SWORD ! 1308: plr->weapon[4]=1;plr->ammo[4]=80; //BROAD SWORD ! 1309: plr->weapon[5]=1;plr->ammo[5]=100; //BATTLE AXE ! 1310: plr->weapon[6]=1;plr->ammo[6]=50; // BOW ! 1311: plr->weapon[7]=2;plr->ammo[7]=40; //PIKE ! 1312: plr->weapon[8]=1;plr->ammo[8]=250; //TWO HANDED ! 1313: plr->weapon[9]=1;plr->ammo[9]=50; ! 1314: ! 1315: for(i=0;i<8;i++) { ! 1316: plr->orb[i]=1; ! 1317: plr->orbammo[i]=9; ! 1318: } ! 1319: ! 1320: currweapon=selectedgun=4; ! 1321: plr->health=0; ! 1322: healthpic(200); ! 1323: plr->armor=150; ! 1324: plr->armortype=3; ! 1325: plr->lvl=7; ! 1326: plr->maxhealth=200; ! 1327: plr->treasure[14]=1; ! 1328: plr->treasure[15]=1; ! 1329: plr->treasure[16]=1; ! 1330: plr->treasure[17]=1; ! 1331: updatepics(); ! 1332: ! 1333: } ! 1334: ! 1335: ! 1336: //if(keystatus[0x20] > 0 && keystatus[0x18] > 0 && keystatus[0x31] > 0) ! 1337: //if( keystatus[0x58] > 0 ) ! 1338: // invincibletime=65000; ! 1339: ! 1340: return; ! 1341: // OHM ! 1342: if(keystatus[0x18] > 0 && keystatus[0x23] > 0 && keystatus[0x32] > 0) ! 1343: for(i=0;i<MAXWEAPONS;i++) { ! 1344: plr->weapon[i]=1; ! 1345: plr->ammo[i]=999; ! 1346: } ! 1347: ! 1348: // BINGO ! 1349: if(keystatus[0x30] > 0 && keystatus[0x17] > 0 && keystatus[0x31] > 0 && keystatus[0x22] > 0 && keystatus[0x18] > 0) { ! 1350: plr->health=1; ! 1351: healthpic(99); ! 1352: } ! 1353: ! 1354: ! 1355: } ! 1356: #endif ! 1357: ! 1358: ! 1359: extern char fancy[]; ! 1360: ! 1361: void nettypeletter(void) { ! 1362: ! 1363: int i; ! 1364: ! 1365: strcpy(nettemp,""); ! 1366: ! 1367: if(typemessageleng <= 40) { ! 1368: for(i=0;i<128;i++) { ! 1369: if( keystatus[i] > 0 ) { ! 1370: nettemp[typemessageleng]=scantoasc[i]; ! 1371: typemessageleng++; ! 1372: nettemp[typemessageleng]='\0'; ! 1373: keystatus[i]=0; ! 1374: } ! 1375: } ! 1376: printext256(0L,0L,31,-1,strupr(nettemp),1); ! 1377: } ! 1378: ! 1379: } ! 1380: ! 1381: void typeletter(void) { ! 1382: ! 1383: int i; ! 1384: int j; ! 1385: int exit=0; ! 1386: char temp[20]; ! 1387: ! 1388: keystatus[0x1c]=keystatus[0x9c]=0; ! 1389: ! 1390: for(i=0;i<128;i++) ! 1391: keystatus[i]=0; ! 1392: ! 1393: strcpy(temp,""); ! 1394: ! 1395: while( !exit ) { ! 1396: ! 1397: if(typemessageleng <= 10) ! 1398: for(i=0;i<128;i++) { ! 1399: if(keystatus[i] > 0 ! 1400: && keystatus[0x0e] == 0 // keypressed not ! 1401: && keystatus[1] == 0 // esc ! 1402: && keystatus[0x1c] == 0 // enter l or r ! 1403: && keystatus[0x9c] == 0) { // backspace ! 1404: for(j=0;j<41;j++) { ! 1405: if(scantoasc[i] == ' ') continue; ! 1406: else if(scantoasc[i] == fancy[j]) { ! 1407: temp[typemessageleng]=fancy[j]; ! 1408: typemessageleng++; ! 1409: temp[typemessageleng]='\0'; ! 1410: keystatus[i]=0; ! 1411: } ! 1412: else ! 1413: keystatus[i]=0; ! 1414: } ! 1415: } ! 1416: } ! 1417: ! 1418: if( keystatus[1] > 0) { ! 1419: exit=1; ! 1420: keystatus[1]=0; ! 1421: } ! 1422: if ( keystatus[0x1c] > 0 || keystatus[0x9c] > 0) { ! 1423: exit=2; ! 1424: keystatus[0x1c]=keystatus[0x9c]=0; ! 1425: } ! 1426: strcpy(displaybuf,temp); ! 1427: fancyfontscreen(18,24,THEFONT,displaybuf); ! 1428: nextpage(); ! 1429: } ! 1430: ! 1431: if( exit == 2 ) { ! 1432: keystatus[0x1c]=keystatus[0x9c]=0; ! 1433: } ! 1434: ! 1435: checkcheat(); ! 1436: lockclock=totalclock; ! 1437: typemode=0; ! 1438: typemessageleng=0; ! 1439: ! 1440: } ! 1441: ! 1442: void checkcheat(void) { ! 1443: ! 1444: int i; ! 1445: struct player *plr; ! 1446: ! 1447: plr=&player[pyrn]; ! 1448: ! 1449: strupr(displaybuf); ! 1450: ! 1451: if(strcmp(displaybuf,"RSVP") == 0) { ! 1452: healthpic(-plr->health); ! 1453: plr->horiz=200; ! 1454: updatepics(); ! 1455: } ! 1456: else if(strcmp(displaybuf,"RAMBO") == 0) { ! 1457: healthpic(-plr->health); ! 1458: plr->horiz=200; ! 1459: updatepics(); ! 1460: } ! 1461: else if(strcmp(displaybuf,"IDKFA") == 0) { ! 1462: healthpic(-plr->health); ! 1463: plr->horiz=200; ! 1464: updatepics(); ! 1465: } ! 1466: else if(strcmp(displaybuf,"SCOOTER") == 0) { ! 1467: plr->weapon[1]=1;plr->ammo[1]=45; //DAGGER ! 1468: plr->weapon[2]=1;plr->ammo[2]=55; //MORNINGSTAR ! 1469: plr->weapon[3]=1;plr->ammo[3]=50; //SHORT SWORD ! 1470: plr->weapon[4]=1;plr->ammo[4]=80; //BROAD SWORD ! 1471: plr->weapon[5]=1;plr->ammo[5]=100; //BATTLE AXE ! 1472: plr->weapon[6]=1;plr->ammo[6]=50; // BOW ! 1473: plr->weapon[7]=2;plr->ammo[7]=40; //PIKE ! 1474: plr->weapon[8]=1;plr->ammo[8]=250; //TWO HANDED ! 1475: plr->weapon[9]=1;plr->ammo[9]=50; ! 1476: currweapon=selectedgun=4; ! 1477: updatepics(); ! 1478: } ! 1479: else if(strcmp(displaybuf,"MOMMY") == 0) { ! 1480: for(i=0;i<MAXPOTIONS;i++) { ! 1481: plr->potion[i]=9; ! 1482: } ! 1483: updatepics(); ! 1484: } ! 1485: else if(strcmp(displaybuf,"WANGO") == 0) { ! 1486: for(i=0;i<8;i++) { ! 1487: plr->orb[i]=1; ! 1488: plr->orbammo[i]=9; ! 1489: } ! 1490: plr->health=0; ! 1491: healthpic(200); ! 1492: plr->armor=150; ! 1493: plr->armortype=3; ! 1494: plr->lvl=7; ! 1495: plr->maxhealth=200; ! 1496: plr->treasure[14]=1; ! 1497: plr->treasure[15]=1; ! 1498: plr->treasure[16]=1; ! 1499: plr->treasure[17]=1; ! 1500: updatepics(); ! 1501: } ! 1502: strcpy(displaybuf,""); ! 1503: ! 1504: } ! 1505: ! 1506: void typecheat(char ch) { ! 1507: ! 1508: int i; ! 1509: int j; ! 1510: char tempbuf[40]; ! 1511: ! 1512: charsperline=40; ! 1513: ! 1514: for(i=0;i<=typemessageleng;i+=charsperline) { ! 1515: for(j=0;j<charsperline;j++) ! 1516: tempbuf[j]=typemessage[i+j]; ! 1517: if (typemessageleng < i+charsperline) { ! 1518: tempbuf[(typemessageleng-i)]='-'; ! 1519: tempbuf[(typemessageleng-i)+1]=0; ! 1520: } ! 1521: else ! 1522: tempbuf[charsperline]=0; ! 1523: } ! 1524: ! 1525: strcpy(displaybuf,tempbuf); ! 1526: displaytime=360; ! 1527: ! 1528: ! 1529: } ! 1530: ! 1531: void dosoundthing(void) { ! 1532: ! 1533: musiclevel=(wMIDIVol>>3); ! 1534: digilevel=(wDIGIVol>>11); ! 1535: ! 1536: if( keystatus[keys[KEYFWD]] > 0) ! 1537: soundcontrol++; ! 1538: if( keystatus[keys[KEYBACK]] > 0) ! 1539: soundcontrol--; ! 1540: if( soundcontrol > 1) ! 1541: soundcontrol=1; ! 1542: if( soundcontrol < 0) ! 1543: soundcontrol=0; ! 1544: switch(soundcontrol) { ! 1545: case 0: ! 1546: if( keystatus[keys[KEYLEFT]] > 0) { ! 1547: musiclevel--; ! 1548: if( musiclevel < 0) { ! 1549: musiclevel=0; ! 1550: strcpy(displaybuf,"Music "); ! 1551: itoa(musiclevel,tempbuf,10); ! 1552: strcat(displaybuf,tempbuf); ! 1553: displaytime=10; ! 1554: } ! 1555: else { ! 1556: strcpy(displaybuf,"Music "); ! 1557: itoa(musiclevel,tempbuf,10); ! 1558: strcat(displaybuf,tempbuf); ! 1559: displaytime=10; ! 1560: SND_Mixer(1,musiclevel); ! 1561: } ! 1562: break; ! 1563: } ! 1564: ! 1565: else if( keystatus[keys[KEYRIGHT]] > 0) { ! 1566: musiclevel++; ! 1567: if( musiclevel > 16 ) { ! 1568: musiclevel=16; ! 1569: strcpy(displaybuf,"Music "); ! 1570: itoa(musiclevel,tempbuf,10); ! 1571: strcat(displaybuf,tempbuf); ! 1572: displaytime=10; ! 1573: } ! 1574: else { ! 1575: strcpy(displaybuf,"Music "); ! 1576: itoa(musiclevel,tempbuf,10); ! 1577: strcat(displaybuf,tempbuf); ! 1578: displaytime=10; ! 1579: SND_Mixer(1,musiclevel); ! 1580: } ! 1581: break; ! 1582: } ! 1583: ! 1584: else { ! 1585: strcpy(displaybuf,"Music "); ! 1586: itoa(musiclevel,tempbuf,10); ! 1587: strcat(displaybuf,tempbuf); ! 1588: displaytime=10; ! 1589: } ! 1590: break; ! 1591: ! 1592: case 1: ! 1593: if( keystatus[keys[KEYLEFT]] > 0) { ! 1594: digilevel--; ! 1595: if( digilevel <0 ) { ! 1596: digilevel=0; ! 1597: strcpy(displaybuf,"Sounds "); ! 1598: itoa(digilevel,tempbuf,10); ! 1599: strcat(displaybuf,tempbuf); ! 1600: displaytime=10; ! 1601: } ! 1602: else { ! 1603: strcpy(displaybuf,"Sounds "); ! 1604: itoa(digilevel,tempbuf,10); ! 1605: strcat(displaybuf,tempbuf); ! 1606: displaytime=10; ! 1607: SND_Mixer(0,digilevel); ! 1608: SND_Sound(S_LOUDCHAINWALK); ! 1609: } ! 1610: break; ! 1611: } ! 1612: ! 1613: else if( keystatus[keys[KEYRIGHT]] > 0) { ! 1614: digilevel++; ! 1615: if( digilevel > 16 ) { ! 1616: digilevel=16; ! 1617: strcpy(displaybuf,"Sounds "); ! 1618: itoa(digilevel,tempbuf,10); ! 1619: strcat(displaybuf,tempbuf); ! 1620: displaytime=10; ! 1621: } ! 1622: else { ! 1623: strcpy(displaybuf,"Sounds "); ! 1624: itoa(digilevel,tempbuf,10); ! 1625: strcat(displaybuf,tempbuf); ! 1626: displaytime=10; ! 1627: SND_Mixer(0,digilevel); ! 1628: SND_Sound(S_LOUDCHAINWALK); ! 1629: } ! 1630: break; ! 1631: } ! 1632: ! 1633: else { ! 1634: strcpy(displaybuf,"Sounds "); ! 1635: itoa(digilevel,tempbuf,10); ! 1636: strcat(displaybuf,tempbuf); ! 1637: displaytime=10; ! 1638: } ! 1639: break; ! 1640: ! 1641: } ! 1642: ! 1643: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.