Annotation of src/whinp.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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