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