📄 input.c
字号:
if (command_buffer!=19) // the check for this is currently done in mainprog(), so don't clear command_buffer if command_buffer==19
{
command_buffer=0;
}
#endif
switch (k) {
case 10: /* Cheat! */
if (playing) { /* Why was this "!gauntlet"? */
playing=FALSE;
drfvalid=FALSE;
}
break;
case 11: /* Increase speed */
if (ftime>10000l)
ftime-=10000l;
break;
case 12: /* Decrease speed */
ftime+=10000l;
break;
case 13: /* Toggle music */
musicflag=!musicflag;
break;
case 14: /* Toggle sound */
soundflag=!soundflag;
break;
case 15: /* Exit */
escape=TRUE;
break;
case 16: /* Pause */
pausef=TRUE;
break;
#ifdef _WINDOWS
case 17:
savedrf=TRUE;
break;
}
#else
}
if (akeypressed==ASCIIF8) /* Save DRF */
savedrf=TRUE;
if (akeypressed!=27 && akeypressed!='n' && akeypressed!='N')
start=TRUE; /* Change number of players */
#endif
}
}
/* Joystick not yet implemented. It will be, though, using gethrt on platform
DOSPC. */
void readjoy(void)
{
#ifdef _WINDOWS
JOYINFO ji;
if (joyGetPos(0,&ji)==JOYERR_NOERROR)
{
joyx=(Sint4) (ji.wXpos / 655);
joyy=(Sint4) (ji.wYpos / 655);
joybut1=ji.wButtons & JOY_BUTTON1;
joybut2=ji.wButtons & JOY_BUTTON2;
}
#endif
}
void detectjoy(void)
{
#ifdef _WINDOWS
init_joystick();
#else
joyflag=FALSE;
#endif
staticdir=dynamicdir=DIR_NONE;
}
/* Contrary to some beliefs, you don't need a separate OS call to flush the
keyboard buffer. */
void flushkeybuf(void)
{
while (kbhit())
getkey();
aleftpressed=arightpressed=auppressed=adownpressed=af1pressed=FALSE;
aleft2pressed=aright2pressed=aup2pressed=adown2pressed=af12pressed=FALSE;
}
void clearfire(int n)
{
if (n==0)
af1pressed=FALSE;
else
af12pressed=FALSE;
}
bool oupressed=FALSE,odpressed=FALSE,olpressed=FALSE,orpressed=FALSE;
bool ou2pressed=FALSE,od2pressed=FALSE,ol2pressed=FALSE,or2pressed=FALSE;
void readdir(int n)
{
Sint4 j;
bool u=FALSE,d=FALSE,l=FALSE,r=FALSE;
bool u2=FALSE,d2=FALSE,l2=FALSE,r2=FALSE;
if (n==0) {
if (auppressed || uppressed) { u=TRUE; auppressed=FALSE; }
if (adownpressed || downpressed) { d=TRUE; adownpressed=FALSE; }
if (aleftpressed || leftpressed) { l=TRUE; aleftpressed=FALSE; }
if (arightpressed || rightpressed) { r=TRUE; arightpressed=FALSE; }
if (f1pressed || af1pressed) {
firepflag=TRUE;
af1pressed=FALSE;
}
else
firepflag=FALSE;
if (u && !oupressed)
staticdir=dynamicdir=DIR_UP;
if (d && !odpressed)
staticdir=dynamicdir=DIR_DOWN;
if (l && !olpressed)
staticdir=dynamicdir=DIR_LEFT;
if (r && !orpressed)
staticdir=dynamicdir=DIR_RIGHT;
if ((oupressed && !u && dynamicdir==DIR_UP) ||
(odpressed && !d && dynamicdir==DIR_DOWN) ||
(olpressed && !l && dynamicdir==DIR_LEFT) ||
(orpressed && !r && dynamicdir==DIR_RIGHT)) {
dynamicdir=DIR_NONE;
if (u) dynamicdir=staticdir=2;
if (d) dynamicdir=staticdir=6;
if (l) dynamicdir=staticdir=4;
if (r) dynamicdir=staticdir=0;
}
oupressed=u;
odpressed=d;
olpressed=l;
orpressed=r;
keydir=staticdir;
if (dynamicdir!=DIR_NONE)
keydir=dynamicdir;
staticdir=DIR_NONE;
}
else {
if (aup2pressed || up2pressed) { u2=TRUE; aup2pressed=FALSE; }
if (adown2pressed || down2pressed) { d2=TRUE; adown2pressed=FALSE; }
if (aleft2pressed || left2pressed) { l2=TRUE; aleft2pressed=FALSE; }
if (aright2pressed || right2pressed) { r2=TRUE; aright2pressed=FALSE; }
if (f12pressed || af12pressed) {
fire2pflag=TRUE;
af12pressed=FALSE;
}
else
fire2pflag=FALSE;
if (u2 && !ou2pressed)
staticdir2=dynamicdir2=DIR_UP;
if (d2 && !od2pressed)
staticdir2=dynamicdir2=DIR_DOWN;
if (l2 && !ol2pressed)
staticdir2=dynamicdir2=DIR_LEFT;
if (r2 && !or2pressed)
staticdir2=dynamicdir2=DIR_RIGHT;
if ((ou2pressed && !u2 && dynamicdir2==DIR_UP) ||
(od2pressed && !d2 && dynamicdir2==DIR_DOWN) ||
(ol2pressed && !l2 && dynamicdir2==DIR_LEFT) ||
(or2pressed && !r2 && dynamicdir2==DIR_RIGHT)) {
dynamicdir2=DIR_NONE;
if (u2) dynamicdir2=staticdir2=2;
if (d2) dynamicdir2=staticdir2=6;
if (l2) dynamicdir2=staticdir2=4;
if (r2) dynamicdir2=staticdir2=0;
}
ou2pressed=u2;
od2pressed=d2;
ol2pressed=l2;
or2pressed=r2;
keydir2=staticdir2;
if (dynamicdir2!=DIR_NONE)
keydir2=dynamicdir2;
staticdir2=DIR_NONE;
}
#ifdef _WINDOWS
readjoy();
if (joybut1)
firepflag=TRUE;
#else
if (joyflag) {
incpenalty();
incpenalty();
joyanay=0;
joyanax=0;
for (j=0;j<4;j++) {
readjoy();
joyanax+=joyx;
joyanay+=joyy;
}
joyx=joyanax>>2;
joyy=joyanay>>2;
if (joybut1)
firepflag=TRUE;
else
firepflag=FALSE;
}
#endif
}
/* Calibrate joystick while waiting at title screen. This works more
effectively if the user waggles the joystick in the title screen. */
bool teststart(void)
{
Sint4 j;
bool startf=FALSE;
if (joyflag) {
readjoy();
if (joybut1)
startf=TRUE;
}
if (start) {
start=FALSE;
startf=TRUE;
#ifndef _WINDOWS
joyflag=FALSE;
#endif
}
if (!startf)
return FALSE;
if (joyflag) {
joyanay=0;
joyanax=0;
for (j=0;j<50;j++) {
readjoy();
joyanax+=joyx;
joyanay+=joyy;
}
joyx=joyanax/50;
joyy=joyanay/50;
jleftthresh=joyx-35;
if (jleftthresh<0)
jleftthresh=0;
jleftthresh+=10;
jupthresh=joyy-35;
if (jupthresh<0)
jupthresh=0;
jupthresh+=10;
jrightthresh=joyx+35;
if (jrightthresh>255)
jrightthresh=255;
jrightthresh-=10;
jdownthresh=joyy+35;
if (jdownthresh>255)
jdownthresh=255;
jdownthresh-=10;
joyanax=joyx;
joyanay=joyy;
}
return TRUE;
}
/* Why the joystick reading is split between readdir and getdir like this is a
mystery to me. */
Sint4 getdir(int n)
{
Sint4 dir=((n==0) ? keydir : keydir2);
if (joyflag) {
#ifdef _WINDOWS
if (abs(joyx-50) > abs(joyy-50)) {
if (joyx<jleftthresh)
dir=DIR_LEFT;
if (joyx>jrightthresh)
dir=DIR_RIGHT;
}
else {
if (joyy<jupthresh)
dir=DIR_UP;
if (joyy>jdownthresh)
dir=DIR_DOWN;
}
#else
dir=DIR_NONE;
if (joyx<jleftthresh)
dir=DIR_LEFT;
if (joyx>jrightthresh)
dir=DIR_RIGHT;
if (joyx>=jleftthresh && joyx<=jrightthresh) {
if (joyy<jupthresh)
dir=DIR_UP;
if (joyy>jdownthresh)
dir=DIR_DOWN;
}
#endif
}
if (n==0) {
if (playing)
playgetdir(&dir,&firepflag);
recputdir(dir,firepflag);
}
else {
if (playing)
playgetdir(&dir,&fire2pflag);
recputdir(dir,fire2pflag);
}
return dir;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -