// ID Engine\r
// ID_IN.h - Header file for Input Manager\r
// v1.0d1w\r
-// By Jason Blochowiak
+// By Jason Blochowiak\r
// Open Watcom port by sparky4\r
//\r
\r
#ifndef __16_IN__\r
#define __16_IN__\r
-
-#include <string.h>\r
-#include "src/lib/lib_head.h"\r
\r
-//++++#ifdef __DEBUG__\r
+#include <string.h>\r
+#include "src/lib/16_head.h"\r
+#include "src/lib/16_timer.h"\r
+#ifdef __WATCOMC__ //borland C BCEXMM.EXE\r
+#include "src/lib/16_dbg.h"\r
+#include "src/lib/16_sprit.h"\r
+#include "src/lib/bitmap.h" //old format\r
+#endif\r
+#ifdef __DEBUG__\r
#define __DEBUG_InputMgr__\r
-//++++#endif\r
+extern boolean dbg_testkeyin,dbg_testcontrolnoisy;\r
+#endif\r
\r
-#define TESTKEYIN
-#define TESTCONTROLNOISY\r
+//if else for gfxtesting and direction\r
+//player[pn].d == 2 ||\r
+//player[pn].d != 2 ||\r
+#define DIRECTIONIFELSE (player[pn].info.dir == 2)\r
+//#define NDIRECTIONIFELSE (player[pn].info.dir != 2)\r
\r
#define KeyInt 9 // The keyboard ISR number\r
\r
#define MaxPlayers 4\r
#define MaxKbds 2\r
#define MaxJoys 2\r
+#define MaxPads 2\r
#define NumCodes 128\r
\r
typedef byte ScanCode;\r
#define key_BackSpace 0x08\r
#define key_Tab 0x09\r
#define key_Delete 0x7f\r
-
-#define key_LSuper 0x5b
-#define key_RSuper 0x5c
-#define key_Menu 0x5d
+\r
+#define key_LSuper 0x5b\r
+#define key_RSuper 0x5c\r
+#define key_Menu 0x5d\r
\r
// Stuff for the mouse\r
#define MReset 0\r
ctrl_Keyboard1 = ctrl_Keyboard,ctrl_Keyboard2,\r
ctrl_Joystick,\r
ctrl_Joystick1 = ctrl_Joystick,ctrl_Joystick2,\r
- ctrl_Mouse,
- ctrl_Joypad,
- ctrl_Joypad1 = ctrl_Joypad,ctrl_Joypad2\r
+ ctrl_Mouse,\r
} ControlType;\r
typedef enum {\r
motion_Left = -1,motion_Up = -1,\r
} Motion;\r
typedef enum {\r
dir_North,//dir_NorthEast,\r
- dir_East,//dir_SouthEast,\r
- dir_South,//dir_SouthWest,\r
- dir_West,//dir_NorthWest,\r
- dir_None\r
+ dir_West,//dir_Nortinest,\r
+ dir_None,\r
+ dir_East,//,dir_SouthEast,\r
+ dir_South,//dir_Soutinest,\r
} Direction;\r
typedef struct {\r
- boolean button0,button1,button2,button3;\r
- int x,y;\r
- Motion xaxis,yaxis;\r
- Direction dir;\r
+ boolean near button0,button1,button2,button3;\r
+ int near x,y;\r
+ Motion near xaxis,yaxis;\r
+ Direction near dir;\r
} CursorInfo;\r
\r
typedef struct {\r
- ScanCode button0,button1,\r
+ ScanCode near button0,button1,\r
//upleft,\r
up,\r
+ down,\r
+ left,\r
+ right\r
//upright,\r
- left, right,\r
//downleft,\r
- down\r
//,downright\r
;\r
} KeyboardDef;\r
typedef struct {\r
- word joyMinX,joyMinY,\r
+ word near joyMinX,joyMinY,\r
threshMinX,threshMinY,\r
threshMaxX,threshMaxY,\r
joyMaxX,joyMaxY,\r
joyMultXL,joyMultYL,\r
joyMultXH,joyMultYH;\r
- } JoystickDef;
-
-/*typedef struct
-{
- CursorInfo;
-} ControlInfo;*/\r
+ } JoystickDef;\r
+\r
+typedef struct\r
+{\r
+ int x; //player exact position on the viewable map\r
+ int y; //player exact position on the viewable map\r
+ int tx; //player tile position on the viewable map\r
+ int ty; //player tile position on the viewable map\r
+ int triggerx; //player's trigger box tile position on the viewable map\r
+ int triggery; //player's trigger box tile position on the viewable map\r
+ int sheetsetx; //NOT USED YET! player sprite sheet set on the image x\r
+ int sheetsety; //NOT USED YET! player sprite sheet set on the image y\r
+ byte d; //direction to render sprite!! wwww\r
+ byte q; //loop variable for anumation and locking the playing to compleate the animation cycle to prevent issues with misalignment www\r
+ byte near pdir; //previous direction~\r
+ //byte near kd[2]; //array of arrow key pressed\r
+ word speed; //player speed!\r
+ word spt; //speed per tile\r
+//0000 planar_buf_t huge *data; //supposively the sprite sheet data\r
+// planar_buf_t data; //supposively the sprite sheet data\r
+////0000----\r
+#ifdef __WATCOMC__\r
+ struct sprite *spri; //supposively the sprite sheet data\r
+ memptr gr;\r
+#endif\r
+ bitmap_t *data; //supposively the sprite sheet data//old format\r
+ sword hp; //hitpoints of the player\r
+ int persist_aniframe; /* gonna be increased to 1 before being used, so 0 is ok for default */\r
+ CursorInfo info;\r
+ ControlType Controls;\r
+} player_t;\r
+\r
/*\r
=============================================================================\r
\r
\r
=============================================================================\r
*/\r
-\r
-//\r
-// configuration variables\r
-//\r
-static boolean MousePresent;\r
-static boolean JoysPresent[MaxJoys];\r
-static boolean JoyPadPresent;\r
-\r
-// Global variables\r
-// extern boolean JoystickCalibrated; // MDM (GAMERS EDGE) - added\r
-// extern ControlType ControlTypeUsed; // MDM (GAMERS EDGE) - added\r
-\r
- extern boolean Keyboard[NumCodes];\r
- extern boolean Paused;\r
- extern char LastASCII;\r
- extern ScanCode LastScan;\r
-\r
- //extern KeyboardDef KbdDefs[];
- static KeyboardDef KbdDefs[MaxKbds] = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51};\r
- extern JoystickDef JoyDefs[MaxJoys];\r
- extern ControlType Controls[MaxPlayers];\r
-\r
- extern dword MouseDownCount;\r
+/*extern struct inconfig\r
+{\r
+ boolean MousePresent;\r
+ boolean JoysPresent[MaxJoys];\r
+ boolean Keyboard[NumCodes];\r
+ boolean Paused;\r
+ char LastASCII;\r
+ ScanCode LastScan;\r
+\r
+ KeyboardDef KbdDefs[MaxKbds];\r
+ JoystickDef JoyDefs[MaxJoys];\r
+} inpu;*/\r
\r
#ifdef DEMO0\r
static Demo DemoMode = demo_Off;\r
static word DemoOffset,DemoSize;\r
#endif\r
\r
-extern dword far* clockdw;\r
-\r
-/*\r
-=============================================================================\r
-\r
- LOCAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-static byte far ASCIINames[] = // Unshifted ASCII for scan codes\r
- {\r
-// 0 1 2 3 4 5 6 7 8 9 A B C D E F\r
- 0 ,27 ,'1','2','3','4','5','6','7','8','9','0','-','=',8 ,9 , // 0\r
- 'q','w','e','r','t','y','u','i','o','p','[',']',13 ,0 ,'a','s', // 1\r
- 'd','f','g','h','j','k','l',';',39 ,'`',0 ,92 ,'z','x','c','v', // 2\r
- 'b','n','m',',','.','/',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4\r
- '2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7\r
- },\r
- far ShiftNames[] = // Shifted ASCII for scan codes\r
- {\r
-// 0 1 2 3 4 5 6 7 8 9 A B C D E F\r
- 0 ,27 ,'!','@','#','$','%','^','&','*','(',')','_','+',8 ,9 , // 0\r
- 'Q','W','E','R','T','Y','U','I','O','P','{','}',13 ,0 ,'A','S', // 1\r
- 'D','F','G','H','J','K','L',':',34 ,'~',0 ,'|','Z','X','C','V', // 2\r
- 'B','N','M','<','>','?',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4\r
- '2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7\r
- },\r
- far SpecialNames[] = // ASCII for 0xe0 prefixed codes\r
- {\r
-// 0 1 2 3 4 5 6 7 8 9 A B C D E F\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 0\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,13 ,0 ,0 ,0 , // 1\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 2\r
- 0 ,0 ,0 ,0 ,0 ,'/',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 3\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 4\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6\r
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7\r
- },\r
- *ScanNames[] = // Scan code names with single chars\r
- {\r
- "?","?","1","2","3","4","5","6","7","8","9","0","-","+","?","?",\r
- "Q","W","E","R","T","Y","U","I","O","P","[","]","|","?","A","S",\r
- "D","F","G","H","J","K","L",";","\"","?","?","?","Z","X","C","V",\r
- "B","N","M",",",".","/","?","?","?","?","?","?","?","?","?","?",\r
- "?","?","?","?","?","?","?","?","\xf","?","-","\x15","5","\x11","+","?",\r
- "\x13","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",\r
- "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",\r
- "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"\r
- }, // DEBUG - consolidate these\r
- far ExtScanCodes[] = // Scan codes with >1 char names\r
- {\r
- 1,0xe,0xf,0x1d,0x2a,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,\r
- 0x3f,0x40,0x41,0x42,0x43,0x44,0x57,0x59,0x46,0x1c,0x36,\r
- 0x37,0x38,0x47,0x49,0x4f,0x51,0x52,0x53,0x45,0x48,\r
- 0x50,0x4b,0x4d,0x00\r
- },\r
- *ExtScanNames[] = // Names corresponding to ExtScanCodes\r
- {\r
- "Esc","BkSp","Tab","Ctrl","LShft","Space","CapsLk","F1","F2","F3","F4",\r
- "F5","F6","F7","F8","F9","F10","F11","F12","ScrlLk","Enter","RShft",\r
- "PrtSc","Alt","Home","PgUp","End","PgDn","Ins","Del","NumLk","Up",\r
- "Down","Left","Right",""\r
- };
-\r
-static boolean IN_Started;\r
-static boolean CapsLock;\r
-static ScanCode CurCode,LastCode;\r
-\r
-static Direction DirTable[] = // Quick lookup for total direction\r
- {\r
- //dir_NorthWest,\r
- dir_North,\r
- //dir_NorthEast,\r
- dir_West, dir_None, dir_East,\r
- //dir_SouthWest,\r
- dir_South//,dir_SouthEast\r
- };\r
-\r
-static void (*INL_KeyHook)(void);\r
-static void interrupt (*OldKeyVect)(void);\r
-\r
-static char *ParmStringsIN[] = {"nojoys","nomouse",nil};\r
-\r
-// Function prototypes\r
-#define IN_KeyDown(code) (Keyboard[(code)])\r
-#define IN_ClearKey(code) {Keyboard[code] = false; if (code == LastScan) LastScan = sc_None;}\r
-
-// Internal routines
-void interrupt INL_KeyService(void);
-void Mouse(int x);
-//static void INL_GetMouseDelta(int *x,int *y);
-//static word INL_GetMouseButtons(void);
-void IN_GetJoyAbs(word joy,word *xp,word *yp);
-//static void INL_GetJoyDelta(word joy,int *dx,int *dy,boolean adaptive);
-//static word INL_GetJoyButtons(word joy);
-word IN_GetJoyButtonsDB(word joy);
-//static void INL_StartKbd(void);
-//static void INL_ShutKbd(void);
-//static boolean INL_StartMouse(void);
-//static void INL_ShutMouse(void);
-//static void INL_SetJoyScale(word joy);
-void IN_SetupJoy(word joy,word minx,word maxx,word miny,word maxy);
-//static boolean INL_StartJoy(word joy);
-//static void INL_ShutJoy(word joy);
-void IN_Startup(void);
-void IN_Default(boolean gotit,ControlType in);
-void IN_Shutdown(void);
-void IN_SetKeyHook(void (*hook)());
-void IN_ClearKeysDown(void);
-//static void INL_AdjustCursor(CursorInfo *info,word buttons,int dx,int dy);
-void IN_ReadCursor(CursorInfo *info);
-void IN_ReadControl(int player,CursorInfo *info);
-void IN_SetControlType(int player,ControlType type);
-#if DEMO0
-boolean IN_StartDemoRecord(word bufsize);
-void IN_StartDemoPlayback(byte /*__segment*/ *buffer,word bufsize);
-void IN_StopDemo(void);
-void IN_FreeDemoBuffer(void);
-#endif
-byte *IN_GetScanName(ScanCode scan);
-ScanCode IN_WaitForKey(void);
-char IN_WaitForASCII(void);
-void IN_AckBack(void);
-void IN_Ack(void);
-boolean IN_IsUserInput(void);
-boolean IN_UserInput(dword delay,boolean clear);
-
-\r
-/*extern void IN_Startup(void),IN_Shutdown(void),\r
- IN_Default(boolean gotit,ControlType in),\r
- IN_SetKeyHook(void (*)()),\r
- IN_ClearKeysDown(void),\r
- IN_ReadCursor(CursorInfo *),\r
- IN_ReadControl(int,ControlInfo *),\r
- IN_SetControlType(int,ControlType),\r
- IN_GetJoyAbs(word joy,word *xp,word *yp),\r
- IN_SetupJoy(word joy,word minx,word maxx,\r
- word miny,word maxy),\r
- Mouse(int x),\r
-#ifdef DEMO0\r
- IN_StartDemoPlayback(byte __segment *buffer,word bufsize),\r
- IN_StopDemo(void),IN_FreeDemoBuffer(void),\r
+// Internal routines\r
+extern void interrupt INL_KeyService();\r
+extern void Mouse(int x);\r
+//static void INL_GetMouseDelta(int *x,int *y);\r
+//static word INL_GetMouseButtons(void);\r
+extern void IN_GetJoyAbs(word joy,word *xp,word *yp);\r
+//static void INL_GetJoyDelta(word joy,int *dx,int *dy,boolean adaptive);\r
+//static word INL_GetJoyButtons(word joy);\r
+extern word IN_GetJoyButtonsDB(word joy);\r
+//static void INL_StartKbd(void);\r
+//static void INL_ShutKbd(void);\r
+//static boolean INL_StartMouse(void);\r
+//static void INL_ShutMouse(void);\r
+//static void INL_SetJoyScale(word joy);\r
+extern void IN_SetupJoy(word joy,word minx,word maxx,word miny,word maxy);\r
+//static boolean INL_StartJoy(word joy);\r
+//static void INL_ShutJoy(word joy);\r
+extern void IN_Startup();\r
+extern void IN_Default(boolean gotit,player_t *player,ControlType nt);\r
+extern void IN_Shutdown();\r
+extern void IN_SetKeyHook(void (*hook)());\r
+extern void IN_ClearKeysDown();\r
+//static void INL_AdjustCursor(CursorInfo *info,word buttons,int dx,int dy);\r
+extern void IN_ReadCursor(CursorInfo *info);\r
+extern void near IN_ReadControl(int pn,player_t *player);\r
+extern void IN_SetControlType(word pn,player_t *player,ControlType type);\r
+#if DEMO0\r
+extern boolean IN_StartDemoRecord(word bufsize);\r
+extern void IN_StartDemoPlayback(byte /*__segment*/ *buffer,word bufsize);\r
+extern void IN_StopDemo(void);\r
+extern void IN_FreeDemoBuffer(void);\r
#endif\r
- IN_Ack(void),IN_AckBack(void);\r
-extern boolean IN_UserInput(dword delay,boolean clear),\r
- IN_IsUserInput(void)\r
-#ifdef DEMO0\r
- , IN_StartDemoRecord(word bufsize)\r
-#endif\r
-;\r
-extern byte *IN_GetScanName(ScanCode);\r
-extern char IN_WaitForASCII(void);\r
-extern ScanCode IN_WaitForKey(void);\r
-extern word IN_GetJoyButtonsDB(word joy);*/\r
-\r
+extern byte *IN_GetScanName(ScanCode scan);\r
+extern ScanCode IN_WaitForKey();\r
+extern char IN_WaitForASCII();\r
+extern void IN_AckBack();\r
+extern void IN_Ack();\r
+extern boolean IN_IsUserInput();\r
+extern boolean IN_UserInput(dword delay,boolean clear);\r
+extern boolean IN_KeyDown(byte code);\r
+extern void IN_ClearKey(byte code);\r
+extern boolean IN_qb(byte kee);\r
+void IN_initplayer(player_t *player, word pn);\r
\r
-void interrupt INL_KeyService(void);\r
-boolean IN_qb(byte kee);\r
#endif\r