1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150 |
- //
- // Configure controllers
- //
- #include <dos.h>
- #include <conio.h>
- #include <bios.h>
- #include "main.h"
- void Pos(item_t *item)
- {
- gotoxy(item->x+1,item->y+1);
- }
- void Clear(item_t *item)
- {
- int i;
- Pos(item);
- for (i = 0;i < item->w; i++)
- cprintf(" ");
- gotoxy(1,25);
- }
- //
- // Get keyboard scan code
- //
- int GetScanCode (void)
- {
- volatile unsigned short rval;
- while (kbhit())
- getch();
- SaveScreen();
- DrawPup(&askpres);
- while(1)
- {
- rval = _bios_keybrd ( _KEYBRD_SHIFTSTATUS );
- if ( rval & 0x0004 )
- {
- rval = SC_CTRL;
- break;
- }
- else if ( rval & 0x0008 )
- {
- rval = SC_ALT;
- break;
- }
- else if ( (rval & 0x0001) || (rval & 0x0002) )
- {
- rval = SC_RIGHT_SHIFT;
- break;
- }
- else
- {
- rval = _bios_keybrd ( _KEYBRD_READY );
- rval = rval >> 8;
- #ifndef STRIFE
- if ( rval == SC_ENTER ) rval = 0;
- if ( rval == SC_BACKSPACE ) rval = 0;
- #endif
- if ( rval ) break;
- }
- }
- RestoreScreen();
- while (kbhit())
- getch();
- return ( rval );
- }
- enum {FORWARD,BACKWARD,LEFT,RIGHT,
- #ifdef HERETIC
- LOOKD,LOOKC,LOOKU,FLYD,FLYC,FLYU,
- #endif
- USE,FIRE,SPEED,STRAFE,STRAFE_LEFT,STRAFE_RIGHT,
- #ifdef HERETIC
- INVL,INVR,
- #endif
- #ifdef STRIFE
- INVL,INVR,INVH,INVE,INVU,INVD,INVPOP,INVQ,HEALTHU,JUMP,LOOKU,LOOKD,
- #endif
- MAXKEYS};
- item_t idkeyselitems[]=
- {
- #ifdef HERETIC
- {FORWARD, 39,5,8, -1,-1},
- {BACKWARD, 39,6,8, -1,-1},
- {LEFT, 39,7,8, -1,-1},
- {RIGHT, 39,8,8, -1,-1},
- {LOOKD, 29,10,8, -1,LOOKC, RIGHT,FLYD},
- {LOOKC, 39,10,8, LOOKD,LOOKU, RIGHT,FLYC},
- {LOOKU, 49,10,8, LOOKC,-1, RIGHT,FLYU},
- {FLYD, 29,11,8, -1,FLYC, LOOKD,USE},
- {FLYC, 39,11,8, FLYD,FLYU, LOOKC,USE},
- {FLYU, 49,11,8, FLYC,-1, LOOKU,SPEED},
- {USE, 29,13,8, -1,SPEED, FLYD},
- {FIRE, 29,14,8, -1,STRAFE},
- {SPEED, 49,13,8, USE,-1, FLYU},
- {STRAFE, 49,14,8, FIRE,-1},
- {STRAFE_LEFT, 42,15,8, -1,-1, FIRE},
- {STRAFE_RIGHT, 42,16,8, -1,-1},
- {INVL, 42,17,8, -1,-1},
- {INVR, 42,18,8, -1,-1}
- #endif
- #ifdef STRIFE
- {FORWARD, 30,5,8, -1,-1},
- {BACKWARD, 30,6,8, -1,-1},
- {LEFT, 30,7,8, -1,STRAFE_LEFT,BACKWARD,RIGHT},
- {RIGHT, 30,8,8, -1,STRAFE_RIGHT,LEFT,INVL},
- {USE, 30,15,8, -1,SPEED,INVPOP,FIRE},
- {FIRE, 30,16,8, -1,STRAFE,USE,JUMP},
- {SPEED, 52,15,8, USE,-1, INVQ, STRAFE},
- {STRAFE, 52,16,8, FIRE,-1,SPEED,LOOKU},
- {STRAFE_LEFT, 52,7,8, LEFT,-1, HEALTHU, STRAFE_RIGHT},
- {STRAFE_RIGHT, 52,8,8, RIGHT,-1, STRAFE_LEFT,INVR},
- {INVL, 30,10,8, -1,INVR,RIGHT,INVH},
- {INVR, 52,10,8, INVL,-1,STRAFE_RIGHT,INVE},
- {INVH, 30,11,8, -1,INVE,INVL,INVU},
- {INVE, 52,11,8, INVH,-1,INVR,INVD},
- {INVU, 30,12,8, -1,INVD,INVH,INVPOP},
- {INVD, 52,12,8, INVU,-1,INVE,INVQ},
- {INVPOP, 30,13,8, -1,INVQ,INVU,USE},
- {INVQ, 52,13,8, INVPOP,-1,INVD,SPEED},
- {HEALTHU, 30,18,8, -1,LOOKD,JUMP,STRAFE_LEFT},
- {JUMP, 30,17,8, -1,LOOKU,FIRE,HEALTHU},
- {LOOKU, 52,17,8, JUMP,-1,STRAFE,LOOKD},
- {LOOKD, 52,18,8, HEALTHU,-1,LOOKU,0},
- #else
- {FORWARD, 47,5,8, -1,-1},
- {BACKWARD, 47,6,8, -1,-1},
- {LEFT, 47,7,8, -1,-1},
- {RIGHT, 47,8,8, -1,-1},
- {USE, 47,12,8, -1,-1},
- {FIRE, 47,13,8, -1,-1},
- {SPEED, 47,14,8, -1,-1},
- {STRAFE, 47,15,8, -1,-1},
- {STRAFE_LEFT, 47,16,8, -1,-1},
- {STRAFE_RIGHT, 47,17,8, -1,-1},
- #endif
- };
- menu_t idkeyselmenu=
- {
- &idkeyselitems[0],
- FORWARD,
- MAXKEYS,
- 0x7f
- };
- void IDConfigKeyboard(void)
- {
- short field;
- short key;
- CONTS turk;
- int rval;
- SaveScreen();
- DrawPup(&idkeysel);
- turk = curk;
- textbackground(1);
- textcolor(15);
- Clear(&idkeyselitems[FORWARD]);
- Pos(&idkeyselitems[FORWARD]);
- cprintf("%s",keydesc[turk.up] );
- Clear(&idkeyselitems[BACKWARD]);
- Pos(&idkeyselitems[BACKWARD]);
- cprintf("%s",keydesc[turk.down] );
- Clear(&idkeyselitems[LEFT]);
- Pos(&idkeyselitems[LEFT]);
- cprintf("%s",keydesc[turk.left] );
- Clear(&idkeyselitems[RIGHT]);
- Pos(&idkeyselitems[RIGHT]);
- cprintf("%s",keydesc[turk.right] );
- Clear(&idkeyselitems[USE]);
- Pos(&idkeyselitems[USE]);
- cprintf("%s",keydesc[turk.use] );
- Clear(&idkeyselitems[FIRE]);
- Pos(&idkeyselitems[FIRE]);
- cprintf("%s",keydesc[turk.fire] );
- Clear(&idkeyselitems[SPEED]);
- Pos(&idkeyselitems[SPEED]);
- cprintf("%s",keydesc[turk.key2] );
- Clear(&idkeyselitems[STRAFE]);
- Pos(&idkeyselitems[STRAFE]);
- cprintf("%s",keydesc[turk.key1] );
- Clear(&idkeyselitems[STRAFE_LEFT]);
- Pos(&idkeyselitems[STRAFE_LEFT]);
- cprintf("%s",keydesc[turk.key3] );
- Clear(&idkeyselitems[STRAFE_RIGHT]);
- Pos(&idkeyselitems[STRAFE_RIGHT]);
- cprintf("%s",keydesc[turk.key4] );
- #ifdef HERETIC
- Clear(&idkeyselitems[LOOKD]);
- Pos(&idkeyselitems[LOOKD]);
- cprintf("%s",keydesc[turk.lookdown] );
- Clear(&idkeyselitems[LOOKC]);
- Pos(&idkeyselitems[LOOKC]);
- cprintf("%s",keydesc[turk.lookcenter] );
- Clear(&idkeyselitems[LOOKU]);
- Pos(&idkeyselitems[LOOKU]);
- cprintf("%s",keydesc[turk.lookup] );
- Clear(&idkeyselitems[FLYD]);
- Pos(&idkeyselitems[FLYD]);
- cprintf("%s",keydesc[turk.flydown] );
- Clear(&idkeyselitems[FLYC]);
- Pos(&idkeyselitems[FLYC]);
- cprintf("%s",keydesc[turk.flycenter] );
- Clear(&idkeyselitems[FLYU]);
- Pos(&idkeyselitems[FLYU]);
- cprintf("%s",keydesc[turk.flyup] );
- Clear(&idkeyselitems[INVL]);
- Pos(&idkeyselitems[INVL]);
- cprintf("%s",keydesc[turk.invleft] );
- Clear(&idkeyselitems[INVR]);
- Pos(&idkeyselitems[INVR]);
- cprintf("%s",keydesc[turk.invright] );
- #endif
- #ifdef STRIFE
- Clear(&idkeyselitems[INVL]);
- Pos(&idkeyselitems[INVL]);
- cprintf("%s",keydesc[turk.invleft] );
- Clear(&idkeyselitems[INVR]);
- Pos(&idkeyselitems[INVR]);
- cprintf("%s",keydesc[turk.invright] );
- Clear(&idkeyselitems[INVH]);
- Pos(&idkeyselitems[INVH]);
- cprintf("%s",keydesc[turk.invhome] );
- Clear(&idkeyselitems[INVE]);
- Pos(&idkeyselitems[INVE]);
- cprintf("%s",keydesc[turk.invend] );
- Clear(&idkeyselitems[INVU]);
- Pos(&idkeyselitems[INVU]);
- cprintf("%s",keydesc[turk.invuse] );
- Clear(&idkeyselitems[INVD]);
- Pos(&idkeyselitems[INVD]);
- cprintf("%s",keydesc[turk.invdrop] );
- Clear(&idkeyselitems[INVPOP]);
- Pos(&idkeyselitems[INVPOP]);
- cprintf("%s",keydesc[turk.invpop] );
- Clear(&idkeyselitems[INVQ]);
- Pos(&idkeyselitems[INVQ]);
- cprintf("%s",keydesc[turk.invquery] );
- Clear(&idkeyselitems[HEALTHU]);
- Pos(&idkeyselitems[HEALTHU]);
- cprintf("%s",keydesc[turk.healthuse] );
- Clear(&idkeyselitems[JUMP]);
- Pos(&idkeyselitems[JUMP]);
- cprintf("%s",keydesc[turk.jump] );
- Clear(&idkeyselitems[LOOKD]);
- Pos(&idkeyselitems[LOOKD]);
- cprintf("%s",keydesc[turk.lookdown] );
- Clear(&idkeyselitems[LOOKU]);
- Pos(&idkeyselitems[LOOKU]);
- cprintf("%s",keydesc[turk.lookup] );
- #endif
- gotoxy(1,25);
- while(1)
- {
- SetupMenu(&idkeyselmenu);
- field = GetMenuInput();
- key = menukey;
- switch ( key )
- {
- case KEY_ESC:
- goto func_exit;
- case KEY_F10:
- curk = turk;
- goto func_exit;
- case KEY_ENTER:
- switch ( field )
- {
- case FORWARD:
- rval = GetScanCode();
- if ( rval )
- {
- turk.up = rval;
- Clear(&idkeyselitems[FORWARD]);
- Pos(&idkeyselitems[FORWARD]);
- cprintf("%s",keydesc[turk.up] );
- }
- break;
- case BACKWARD:
- rval = GetScanCode();
- if ( rval )
- {
- turk.down = rval;
- Clear(&idkeyselitems[BACKWARD]);
- Pos(&idkeyselitems[BACKWARD]);
- cprintf("%s",keydesc[turk.down] );
- }
- break;
- case LEFT:
- rval = GetScanCode();
- if ( rval )
- {
- turk.left = rval;
- Clear(&idkeyselitems[LEFT]);
- Pos(&idkeyselitems[LEFT]);
- cprintf("%s",keydesc[turk.left] );
- }
- break;
- case RIGHT:
- rval = GetScanCode();
- if ( rval )
- {
- turk.right = rval;
- Clear(&idkeyselitems[RIGHT]);
- Pos(&idkeyselitems[RIGHT]);
- cprintf("%s",keydesc[turk.right] );
- }
- break;
- case USE:
- rval = GetScanCode();
- if ( rval )
- {
- turk.use = rval;
- Clear(&idkeyselitems[USE]);
- Pos(&idkeyselitems[USE]);
- cprintf("%s",keydesc[turk.use] );
- }
- break;
- case FIRE:
- rval = GetScanCode();
- if ( rval )
- {
- turk.fire = rval;
- Clear(&idkeyselitems[FIRE]);
- Pos(&idkeyselitems[FIRE]);
- cprintf("%s",keydesc[turk.fire] );
- }
- break;
- case SPEED:
- rval = GetScanCode();
- if ( rval )
- {
- turk.key2 = rval;
- Clear(&idkeyselitems[SPEED]);
- Pos(&idkeyselitems[SPEED]);
- cprintf("%s",keydesc[turk.key2] );
- }
- break;
- case STRAFE:
- rval = GetScanCode();
- if ( rval )
- {
- turk.key1 = rval;
- Clear(&idkeyselitems[STRAFE]);
- Pos(&idkeyselitems[STRAFE]);
- cprintf("%s",keydesc[turk.key1] );
- }
- break;
- case STRAFE_LEFT:
- rval = GetScanCode();
- if ( rval )
- {
- turk.key3 = rval;
- Clear(&idkeyselitems[STRAFE_LEFT]);
- Pos(&idkeyselitems[STRAFE_LEFT]);
- cprintf("%s",keydesc[turk.key3] );
- }
- break;
- case STRAFE_RIGHT:
- rval = GetScanCode();
- if ( rval )
- {
- turk.key4 = rval;
- Clear(&idkeyselitems[STRAFE_RIGHT]);
- Pos(&idkeyselitems[STRAFE_RIGHT]);
- cprintf("%s",keydesc[turk.key4] );
- }
- break;
- #ifdef HERETIC
- case LOOKD:
- rval = GetScanCode();
- if ( rval )
- {
- turk.lookdown = rval;
- Clear(&idkeyselitems[LOOKD]);
- Pos(&idkeyselitems[LOOKD]);
- cprintf("%s",keydesc[turk.lookdown] );
- }
- break;
- case LOOKC:
- rval = GetScanCode();
- if ( rval )
- {
- turk.lookcenter = rval;
- Clear(&idkeyselitems[LOOKC]);
- Pos(&idkeyselitems[LOOKC]);
- cprintf("%s",keydesc[turk.lookcenter] );
- }
- break;
- case LOOKU:
- rval = GetScanCode();
- if ( rval )
- {
- turk.lookup = rval;
- Clear(&idkeyselitems[LOOKU]);
- Pos(&idkeyselitems[LOOKU]);
- cprintf("%s",keydesc[turk.lookup] );
- }
- break;
- case FLYD:
- rval = GetScanCode();
- if ( rval )
- {
- turk.flydown = rval;
- Clear(&idkeyselitems[FLYD]);
- Pos(&idkeyselitems[FLYD]);
- cprintf("%s",keydesc[turk.flydown] );
- }
- break;
- case FLYC:
- rval = GetScanCode();
- if ( rval )
- {
- turk.flycenter = rval;
- Clear(&idkeyselitems[FLYC]);
- Pos(&idkeyselitems[FLYC]);
- cprintf("%s",keydesc[turk.flycenter] );
- }
- break;
- case FLYU:
- rval = GetScanCode();
- if ( rval )
- {
- turk.flyup = rval;
- Clear(&idkeyselitems[FLYU]);
- Pos(&idkeyselitems[FLYU]);
- cprintf("%s",keydesc[turk.flyup] );
- }
- break;
- case INVL:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invleft = rval;
- Clear(&idkeyselitems[INVL]);
- Pos(&idkeyselitems[INVL]);
- cprintf("%s",keydesc[turk.invleft] );
- }
- break;
- case INVR:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invright = rval;
- Clear(&idkeyselitems[INVR]);
- Pos(&idkeyselitems[INVR]);
- cprintf("%s",keydesc[turk.invright] );
- }
- break;
- #endif
- #ifdef STRIFE
- case LOOKD:
- rval = GetScanCode();
- if ( rval )
- {
- turk.lookdown = rval;
- Clear(&idkeyselitems[LOOKD]);
- Pos(&idkeyselitems[LOOKD]);
- cprintf("%s",keydesc[turk.lookdown] );
- }
- break;
- case LOOKU:
- rval = GetScanCode();
- if ( rval )
- {
- turk.lookup = rval;
- Clear(&idkeyselitems[LOOKU]);
- Pos(&idkeyselitems[LOOKU]);
- cprintf("%s",keydesc[turk.lookup] );
- }
- break;
-
case INVL:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invleft = rval;
- Clear(&idkeyselitems[INVL]);
- Pos(&idkeyselitems[INVL]);
- cprintf("%s",keydesc[turk.invleft] );
- }
- break;
- case INVR:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invright = rval;
- Clear(&idkeyselitems[INVR]);
- Pos(&idkeyselitems[INVR]);
- cprintf("%s",keydesc[turk.invright] );
- }
- break;
- case INVH:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invhome = rval;
- Clear(&idkeyselitems[INVH]);
- Pos(&idkeyselitems[INVH]);
- cprintf("%s",keydesc[turk.invhome] );
- }
- break;
- case INVE:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invend = rval;
- Clear(&idkeyselitems[INVE]);
- Pos(&idkeyselitems[INVE]);
- cprintf("%s",keydesc[turk.invend] );
- }
- break;
- case INVU:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invuse = rval;
- Clear(&idkeyselitems[INVU]);
- Pos(&idkeyselitems[INVU]);
- cprintf("%s",keydesc[turk.invuse] );
- }
- break;
- case INVD:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invdrop = rval;
- Clear(&idkeyselitems[INVD]);
- Pos(&idkeyselitems[INVD]);
- cprintf("%s",keydesc[turk.invdrop] );
- }
- break;
- case INVPOP:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invpop = rval;
- Clear(&idkeyselitems[INVPOP]);
- Pos(&idkeyselitems[INVPOP]);
- cprintf("%s",keydesc[turk.invpop] );
- }
- break;
- case INVQ:
- rval = GetScanCode();
- if ( rval )
- {
- turk.invquery = rval;
- Clear(&idkeyselitems[INVQ]);
- Pos(&idkeyselitems[INVQ]);
- cprintf("%s",keydesc[turk.invquery] );
- }
- break;
- case HEALTHU:
- rval = GetScanCode();
- if ( rval )
- {
- turk.healthuse = rval;
- Clear(&idkeyselitems[HEALTHU]);
- Pos(&idkeyselitems[HEALTHU]);
- cprintf("%s",keydesc[turk.healthuse] );
- }
- break;
- case JUMP:
- rval = GetScanCode();
- if ( rval )
- {
- turk.jump = rval;
- Clear(&idkeyselitems[JUMP]);
- Pos(&idkeyselitems[JUMP]);
- cprintf("%s",keydesc[turk.jump] );
- }
- break;
- #endif
- }
- gotoxy(1,25);
- break;
- }
- }
- func_exit:
- RestoreScreen();
- return;
- }
- //
- // Configure joystick buttons
- //
- enum
- {
- J_FIRE,
- J_FORWARD,
- J_USE,
- J_STRAFE,
- J_MAX
- };
- item_t idjoyselitems[]=
- {
- {J_FIRE, 42,10,9, -1,-1},
- {J_FORWARD, 42,11,9, -1,-1},
- {J_USE, 42,12,9, -1,-1},
- {J_STRAFE, 42,13,9, -1,-1}
- };
- menu_t idjoyselmenu=
- {
- &idjoyselitems[0],
- J_FIRE,
- J_MAX,
- 0x7f
- };
- //
- // Get joystick button
- //
- int GetJoyButton (void)
- {
- int rval = -1;
- int num;
- int c;
- SaveScreen();
- DrawPup(&mousentr);
- while(kbhit())
- getch();
- while(1)
- {
- num = inp ( 0x201 );
- num = num >> 4;
- if ( ! ( num & 1 ) )
- {
- rval = 0;
- break;
- }
- if ( ! ( num & 2 ) )
- {
- rval = 1;
- break;
- }
- if ( ! ( num & 4 ) )
- {
- rval = 2;
- break;
- }
- if ( ! ( num & 8 ) )
- {
- rval = 3;
- break;
- }
- if (kbhit())
- {
- c=_bios_keybrd( _KEYBRD_READY ) >> 8;
- if (c == SC_ESC)
- break;
- getch();
- }
- // if ( ( _bios_keybrd ( _KEYBRD_READY ) >> 8 ) == SC_ESC ) break;
- }
- RestoreScreen();
- while(kbhit())
- getch();
- return ( rval );
- }
- void IDConfigJoy (void)
- {
- short key;
- short field;
- int rval;
- CONTS turk;
- char joybuts [4][20] =
- {
- "BUTTON 1",
- "BUTTON 2",
- "BUTTON 3",
- "BUTTON 4"
- };
- int fire;
- int frwd;
- int strf;
- int use;
- SaveScreen();
- DrawPup(&idjoysel);
- turk = curk;
- fire = turk.joy[ ID_FIRE ];
- frwd = turk.joy[ ID_FORWARD ];
- strf = turk.joy[ ID_STRAFE ];
- use = turk.joy[ ID_USE ];
- textbackground(1);
- textcolor(15);
- Clear(&idjoyselitems[J_FIRE]);
- Pos(&idjoyselitems[J_FIRE]);
- if (fire >= 0)
- cprintf("%s",joybuts[fire]);
- Clear(&idjoyselitems[J_FORWARD]);
- Pos(&idjoyselitems[J_FORWARD]);
- if (frwd >= 0)
- cprintf("%s",joybuts[ frwd ] );
- Clear(&idjoyselitems[J_STRAFE]);
- Pos(&idjoyselitems[J_STRAFE]);
- if (strf >= 0)
- cprintf("%s",joybuts[ strf ] );
- Clear(&idjoyselitems[J_USE]);
- Pos(&idjoyselitems[J_USE]);
- if (use >= 0)
- cprintf("%s",joybuts[ use ] );
- gotoxy(1,25);
- while(1)
- {
- SetupMenu(&idjoyselmenu);
- field = GetMenuInput();
- key = menukey;
- switch ( key )
- {
- case KEY_ESC:
- goto func_exit;
- case KEY_F10:
- curk = turk;
- goto func_exit;
- case KEY_ENTER:
- switch ( field )
- {
- case J_FIRE:
- rval = GetJoyButton();
- if ( rval != -1 )
- {
- turk.joy [ ID_FIRE ] = rval;
- Clear(&idjoyselitems[J_FIRE]);
- Pos(&idjoyselitems[J_FIRE]);
- cprintf("%s",joybuts[ rval ] );
- if (turk.joy [ ID_FORWARD ] == rval)
- {
- turk.joy [ ID_FORWARD ] = -1;
- Clear(&idjoyselitems[J_FORWARD]);
- }
- if (turk.joy [ ID_USE ] == rval)
- {
- turk.joy [ ID_USE ] = -1;
- Clear(&idjoyselitems[J_USE]);
- }
- if (turk.joy [ ID_STRAFE ] == rval)
- {
- turk.joy [ ID_STRAFE ] = -1;
- Clear(&idjoyselitems[J_STRAFE]);
- }
- }
- break;
- case J_FORWARD:
- rval = GetJoyButton();
- if ( rval != -1 )
- {
- turk.joy [ ID_FORWARD ] = rval;
- Clear(&idjoyselitems[J_FORWARD]);
- Pos(&idjoyselitems[J_FORWARD]);
- cprintf("%s",joybuts[rval]);
- if (turk.joy [ ID_FIRE ] == rval)
- {
- turk.joy [ ID_FIRE ] = -1;
- Clear(&idjoyselitems[J_FIRE]);
- }
- if (turk.joy [ ID_USE ] == rval)
- {
- turk.joy [ ID_USE ] = -1;
- Clear(&idjoyselitems[J_USE]);
- }
- if (turk.joy [ ID_STRAFE ] == rval)
- {
- turk.joy [ ID_STRAFE ] = -1;
- Clear(&idjoyselitems[J_STRAFE]);
- }
- }
- break;
- case J_USE:
- rval = GetJoyButton();
- if ( rval != -1 )
- {
- turk.joy [ ID_USE ] = rval;
- Clear(&idjoyselitems[J_USE]);
- Pos(&idjoyselitems[J_USE]);
- cprintf("%s",joybuts[rval]);
- if (turk.joy [ ID_FORWARD ] == rval)
- {
- turk.joy [ ID_FORWARD ] = -1;
- Clear(&idjoyselitems[J_FORWARD]);
- }
- if (turk.joy [ ID_FIRE ] == rval)
- {
- turk.joy [ ID_FIRE ] = -1;
- Clear(&idjoyselitems[J_FIRE]);
- }
- if (turk.joy [ ID_STRAFE ] == rval)
- {
- turk.joy [ ID_STRAFE ] = -1;
- Clear(&idjoyselitems[J_STRAFE]);
- }
- }
- break;
- case J_STRAFE:
- rval = GetJoyButton();
- if ( rval != -1 )
- {
- turk.joy [ ID_STRAFE ] = rval;
- Clear(&idjoyselitems[J_STRAFE]);
- Pos(&idjoyselitems[J_STRAFE]);
- cprintf("%s",joybuts[rval]);
- if (turk.joy [ ID_FORWARD ] == rval)
- {
- turk.joy [ ID_FORWARD ] = -1;
- Clear(&idjoyselitems[J_FORWARD]);
- }
- if (turk.joy [ ID_USE ] == rval)
- {
- turk.joy [ ID_USE ] = -1;
- Clear(&idjoyselitems[J_USE]);
- }
- if (turk.joy [ ID_FIRE ] == rval)
- {
- turk.joy [ ID_FIRE ] = -1;
- Clear(&idjoyselitems[J_FIRE]);
- }
- }
- break;
- }
- gotoxy(1,25);
- break;
- }
- }
- func_exit:
- RestoreScreen();
- return;
- }
- //
- // Configure mouse buttons
- //
- enum {M_FIRE,M_FORWARD,M_STRAFE,M_MAX};
- item_t idmouselitems[]=
- {
- {M_FIRE, 44,9,13, -1,-1},
- {M_FORWARD, 44,10,13, -1,-1},
- {M_STRAFE, 44,11,13, -1,-1}
- };
- menu_t idmouselmenu=
- {
- &idmouselitems[0],
- M_FIRE,
- M_MAX,
- 0x7f
- };
- //
- // Get mouse button
- //
- int GetMouseButton (void)
- {
- int rval = -1;
- union REGS r;
- SaveScreen();
- DrawPup(&mousentr);
- while(1)
- {
- r.x.ax = 3;
- int86 ( 0x33, &r, &r );
- if ( r.x.bx & 1 )
- rval = 0;
- else if ( r.x.bx & 2 )
- rval = 1;
- else if ( r.x.bx & 4 )
- rval = 2;
- if ( rval != -1 ) break;
- if ( ( _bios_keybrd ( _KEYBRD_READY ) >> 8 ) == SC_ESC ) break;
- }
- RestoreScreen();
- while(kbhit())
- getch();
- return ( rval );
- }
- void IDConfigMouse (void)
- {
- short key;
- short field;
- int rval;
- CONTS turk;
- char mousebuts [3][20] = {
- "LEFT BUTTON",
- "RIGHT BUTTON",
- "MID BUTTON"
- };
- int fire;
- int frwd;
- int strf;
- SaveScreen();
- DrawPup(&idmousel);
- turk = curk;
- fire = turk.mouse[ ID_FIRE ];
- frwd = turk.mouse[ ID_FORWARD ];
- strf = turk.mouse[ ID_STRAFE ];
- textbackground(1);
- textcolor(15);
- Clear(&idmouselitems[M_FIRE]);
- Pos(&idmouselitems[M_FIRE]);
- if (fire >= 0)
- cprintf("%s",mousebuts[ fire ] );
- Clear(&idmouselitems[M_FORWARD]);
- Pos(&idmouselitems[M_FORWARD]);
- if (frwd >= 0)
- cprintf("%s",mousebuts[ frwd ] );
- Clear(&idmouselitems[M_STRAFE]);
- Pos(&idmouselitems[M_STRAFE]);
- if (strf >= 0)
- cprintf("%s",mousebuts[ strf ] );
- gotoxy(1,25);
- while(1)
- {
- SetupMenu(&idmouselmenu);
- field = GetMenuInput();
- key = menukey;
- switch ( key )
- {
- case KEY_ESC:
- goto func_exit;
- case KEY_F10:
- curk = turk;
- goto func_exit;
- case KEY_ENTER:
- switch ( field )
- {
- case M_FIRE:
- rval = GetMouseButton();
- if ( rval != -1 )
- {
- turk.mouse [ ID_FIRE ] = rval;
- Clear(&idmouselitems[M_FIRE]);
- Pos(&idmouselitems[M_FIRE]);
- cprintf("%s",mousebuts [ rval ] );
- if (turk.mouse [ ID_STRAFE ] == rval)
- {
- turk.mouse [ ID_STRAFE ] = -1;
- Clear(&idmouselitems[M_STRAFE]);
- }
- if (turk.mouse [ ID_FORWARD ] == rval)
- {
- turk.mouse [ ID_FORWARD ] = -1;
- Clear(&idmouselitems[M_FORWARD]);
- }
- }
- break;
- case M_FORWARD:
- rval = GetMouseButton();
- if ( rval != -1 )
- {
- turk.mouse [ ID_FORWARD ] = rval;
- Clear(&idmouselitems[M_FORWARD]);
- Pos(&idmouselitems[M_FORWARD]);
- cprintf("%s",mousebuts [ rval ] );
- if (turk.mouse [ ID_STRAFE ] == rval)
- {
- turk.mouse [ ID_STRAFE ] = -1;
- Clear(&idmouselitems[M_STRAFE]);
- }
- if (turk.mouse [ ID_FIRE ] == rval)
- {
- turk.mouse [ ID_FIRE ] = -1;
- Clear(&idmouselitems[M_FIRE]);
- }
- }
- break;
- case M_STRAFE:
- rval = GetMouseButton();
- if ( rval != -1 )
- {
- turk.mouse [ ID_STRAFE ] = rval;
- Clear(&idmouselitems[M_STRAFE]);
- Pos(&idmouselitems[M_STRAFE]);
- cprintf("%s",mousebuts[rval]);
- if (turk.mouse [ ID_FORWARD ] == rval)
- {
- turk.mouse [ ID_FORWARD ] = -1;
- Clear(&idmouselitems[M_FORWARD]);
- }
- if (turk.mouse [ ID_FIRE ] == rval)
- {
- turk.mouse [ ID_FIRE ] = -1;
- Clear(&idmouselitems[M_FIRE]);
- }
- }
- break;
- }
- gotoxy(1,25);
- break;
- }
- }
- func_exit:
- RestoreScreen();
- return;
- }
- //
- // Choose which controller to configure!
- //
- enum {CFG_KEY,CFG_MOUSE,CFG_JOY,CFG_MAX};
- item_t conselitems[]=
- {
- {CFG_KEY, 31,11,14, -1,-1},
- {CFG_MOUSE, 31,12,14, -1,-1},
- {CFG_JOY, 31,13,14, -1,-1}
- };
- menu_t conselmenu=
- {
- &conselitems[0],
- CFG_KEY,
- CFG_MAX,
- 0x7f
- };
- void ConfigControl (void)
- {
- short key;
- short field;
- SaveScreen();
- DrawPup(&consel);
- while(1)
- {
- SetupMenu(&conselmenu);
- field = GetMenuInput();
- key = menukey;
- if ( key == KEY_ESC )
- break;
- if ( key != KEY_ENTER && key != KEY_F10 ) continue;
- switch ( field )
- {
- default:
- case CFG_KEY:
- IDConfigKeyboard();
- goto func_exit;
- case CFG_MOUSE:
- if ( !mousepresent )
- {
- ErrorWindow(&mouspres);
- break;
- }
- IDConfigMouse();
- goto func_exit;
- case CFG_JOY:
- IDConfigJoy();
- goto func_exit;
- }
- }
- func_exit:
- RestoreScreen();
- return;
- }
|