Annotation of src/whinp.c, revision 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.