X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_in.h;h=bb0e8e61929f64fe674f30e8104d8f056d2034d5;hb=7e2906d6f11fc7f6b39c62139cc93312f96fa094;hp=b2b7b367cbf2cce87f12fc6f57f69dc6ce0e8f26;hpb=0c05325b365ec1355fd01a9d94afe45ebf401310;p=16.git diff --git a/src/lib/16_in.h b/src/lib/16_in.h index b2b7b367..bb0e8e61 100644 --- a/src/lib/16_in.h +++ b/src/lib/16_in.h @@ -1,4 +1,4 @@ -/* Catacomb Armageddon Source Code +/* Catacomb Apocalypse Source Code * Copyright (C) 1993-2014 Flat Rock Software * * This program is free software; you can redistribute it and/or modify @@ -20,22 +20,24 @@ // ID Engine // ID_IN.h - Header file for Input Manager // v1.0d1w -// By Jason Blochowiak -// Open Watcom port by sparky4 +// By Jason Blochowiak +// Open Watcom port by sparky4 // #ifndef __16_IN__ #define __16_IN__ - + #include -#include "src/lib/lib_head.h" +#include "src/lib/16_head.h" -//++++#ifdef __DEBUG__ -#define __DEBUG_InputMgr__ -//++++#endif +#ifdef __DEBUG__ +//#define __DEBUG_InputMgr__ +#endif -#define TESTKEYIN -#define TESTCONTROLNOISY +#ifdef __DEBUG_InputMgr__ +#define TESTKEYIN +//#define TESTCONTROLNOISY +#endif #define KeyInt 9 // The keyboard ISR number @@ -47,6 +49,7 @@ #define MaxPlayers 4 #define MaxKbds 2 #define MaxJoys 2 +#define MaxPads 2 #define NumCodes 128 typedef byte ScanCode; @@ -132,10 +135,10 @@ typedef byte ScanCode; #define key_BackSpace 0x08 #define key_Tab 0x09 #define key_Delete 0x7f - -#define key_LSuper 0x5b -#define key_RSuper 0x5c -#define key_Menu 0x5d + +#define key_LSuper 0x5b +#define key_RSuper 0x5c +#define key_Menu 0x5d // Stuff for the mouse #define MReset 0 @@ -149,13 +152,14 @@ typedef enum { } Demo; #endif typedef enum { - ctrl_None, // MDM (GAMERS EDGE) - added + //ctrl_None, // MDM (GAMERS EDGE) - added ctrl_Keyboard, ctrl_Keyboard1 = ctrl_Keyboard,ctrl_Keyboard2, ctrl_Joystick, ctrl_Joystick1 = ctrl_Joystick,ctrl_Joystick2, - ctrl_Mouse, - ctrl_Joypad + ctrl_Mouse, + ctrl_Joypad, + ctrl_Joypad1 = ctrl_Joypad,ctrl_Joypad2 } ControlType; typedef enum { motion_Left = -1,motion_Up = -1, @@ -164,10 +168,10 @@ typedef enum { } Motion; typedef enum { dir_North,//dir_NorthEast, - dir_East,//dir_SouthEast, - dir_South,//dir_SouthWest, - dir_West,//dir_NorthWest, - dir_None + dir_West,//dir_Nortinest, + dir_None, + dir_East,//,dir_SouthEast, + dir_South,//dir_Soutinest, } Direction; typedef struct { boolean button0,button1,button2,button3; @@ -175,16 +179,16 @@ typedef struct { Motion xaxis,yaxis; Direction dir; } CursorInfo; -typedef CursorInfo ControlInfo; typedef struct { ScanCode button0,button1, //upleft, up, + down, + left, + right //upright, - left, right, //downleft, - down //,downright ; } KeyboardDef; @@ -196,6 +200,29 @@ typedef struct { joyMultXL,joyMultYL, joyMultXH,joyMultYH; } JoystickDef; +typedef struct +{ + boolean w; +} JoypadDef; + +typedef struct +{ + int x; //player exact position on the viewable map + int y; //player exact position on the viewable map + int tx; //player tile position on the viewable map + int ty; //player tile position on the viewable map + int triggerx; //player's trigger box tile position on the viewable map + int triggery; //player's trigger box tile position on the viewable map + int setx; //NOT USED YET! player sprite sheet set on the image x + int sety; //NOT USED YET! player sprite sheet set on the image y + word q; //loop variable +// word d; //direction + //bitmap_t data; //supposively the sprite sheet data + int hp; //hitpoints of the player + CursorInfo info; + ControlType Controls; +} player_t; + /* ============================================================================= @@ -203,29 +230,20 @@ typedef struct { ============================================================================= */ - -// -// configuration variables -// -static boolean MousePresent; -static boolean JoysPresent[MaxJoys]; -static boolean JoyPadPresent; - -// Global variables -// extern boolean JoystickCalibrated; // MDM (GAMERS EDGE) - added -// extern ControlType ControlTypeUsed; // MDM (GAMERS EDGE) - added - - extern boolean Keyboard[NumCodes]; - extern boolean Paused; - extern char LastASCII; - extern ScanCode LastScan; - - //extern KeyboardDef KbdDefs[]; - static KeyboardDef KbdDefs[] = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51}; - extern JoystickDef JoyDefs[MaxJoys]; - extern ControlType Controls[MaxPlayers]; - - extern dword MouseDownCount; +/*extern struct inconfig +{ + boolean MousePresent; + boolean JoysPresent[MaxJoys]; + boolean JoyPadPresent[MaxPads]; + boolean Keyboard[NumCodes]; + boolean Paused; + char LastASCII; + ScanCode LastScan; + + KeyboardDef KbdDefs[MaxKbds]; + JoystickDef JoyDefs[MaxJoys]; + JoypadDef JoypadDefs[MaxPads]; +} inpu;*/ #ifdef DEMO0 static Demo DemoMode = demo_Off; @@ -235,205 +253,47 @@ static boolean JoyPadPresent; extern dword far* clockdw; -/* -============================================================================= - - LOCAL VARIABLES - -============================================================================= -*/ -static byte far ASCIINames[] = // Unshifted ASCII for scan codes - { -// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0 ,27 ,'1','2','3','4','5','6','7','8','9','0','-','=',8 ,9 , // 0 - 'q','w','e','r','t','y','u','i','o','p','[',']',13 ,0 ,'a','s', // 1 - 'd','f','g','h','j','k','l',';',39 ,'`',0 ,92 ,'z','x','c','v', // 2 - 'b','n','m',',','.','/',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4 - '2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 - }, - far ShiftNames[] = // Shifted ASCII for scan codes - { -// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0 ,27 ,'!','@','#','$','%','^','&','*','(',')','_','+',8 ,9 , // 0 - 'Q','W','E','R','T','Y','U','I','O','P','{','}',13 ,0 ,'A','S', // 1 - 'D','F','G','H','J','K','L',':',34 ,'~',0 ,'|','Z','X','C','V', // 2 - 'B','N','M','<','>','?',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4 - '2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 - }, - far SpecialNames[] = // ASCII for 0xe0 prefixed codes - { -// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 0 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,13 ,0 ,0 ,0 , // 1 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 2 - 0 ,0 ,0 ,0 ,0 ,'/',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 3 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 4 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6 - 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7 - }; - - -static boolean IN_Started; -static boolean CapsLock; -static ScanCode CurCode,LastCode; - -static Direction DirTable[] = // Quick lookup for total direction - { - //dir_NorthWest, - dir_North, - //dir_NorthEast, - dir_West, dir_None, dir_East, - //dir_SouthWest, - dir_South//,dir_SouthEast - }; - -static void (*INL_KeyHook)(void); -static void interrupt (*OldKeyVect)(void); - -static char *ParmStringsIN[] = {"nojoys","nomouse",nil}; - -// Function prototypes -#define IN_KeyDown(code) (Keyboard[(code)]) -#define IN_ClearKey(code) {Keyboard[code] = false; if (code == LastScan) LastScan = sc_None;} - -// DEBUG - put names in prototypes -/* Catacomb Armageddon Source Code - * Copyright (C) 1993-2014 Flat Rock Software - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -// -// ID Engine -// ID_IN.c - Input Manager -// v1.0d1w -// By Jason Blochowiak -// Open Watcom port by sparky4 -// - -// -// This module handles dealing with the various input devices -// -// Depends on: Memory Mgr (for demo recording), Sound Mgr (for timing stuff), -// User Mgr (for command line parms) -// -// Globals: -// LastScan - The keyboard scan code of the last key pressed -// LastASCII - The ASCII value of the last key pressed -// DEBUG - there are more globals -// - -#include "src/lib/16_in.h" - -/* -============================================================================= - - GLOBAL VARIABLES - -============================================================================= -*/ -// Global variables - boolean JoystickCalibrated=false; // MDM (GAMERS EDGE) - added - ControlType ControlTypeUsed; // MDM (GAMERS EDGE) - added - boolean Keyboard[NumCodes]; - boolean Paused; - char LastASCII; - ScanCode LastScan; - - //KeyboardDef KbdDefs = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51}; - JoystickDef JoyDefs[MaxJoys]; - ControlType Controls[MaxPlayers]; - - dword MouseDownCount; - -// 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,ControlInfo *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); - - -/*extern void IN_Startup(void),IN_Shutdown(void), - IN_Default(boolean gotit,ControlType in), - IN_SetKeyHook(void (*)()), - IN_ClearKeysDown(void), - IN_ReadCursor(CursorInfo *), - IN_ReadControl(int,ControlInfo *), - IN_SetControlType(int,ControlType), - IN_GetJoyAbs(word joy,word *xp,word *yp), - IN_SetupJoy(word joy,word minx,word maxx, - word miny,word maxy), - Mouse(int x), -#ifdef DEMO0 - IN_StartDemoPlayback(byte __segment *buffer,word bufsize), - IN_StopDemo(void),IN_FreeDemoBuffer(void), -#endif - IN_Ack(void),IN_AckBack(void); -extern boolean IN_UserInput(dword delay,boolean clear), - IN_IsUserInput(void) -#ifdef DEMO0 - , IN_StartDemoRecord(word bufsize) +// Internal routines +extern void interrupt INL_KeyService(); +extern void Mouse(int x); +//static void INL_GetMouseDelta(int *x,int *y); +//static word INL_GetMouseButtons(void); +extern 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); +extern 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); +extern 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); +extern void IN_Startup(); +extern void IN_Default(boolean gotit,player_t *player,ControlType nt); +extern void IN_Shutdown(); +extern void IN_SetKeyHook(void (*hook)()); +extern void IN_ClearKeysDown(); +//static void INL_AdjustCursor(CursorInfo *info,word buttons,int dx,int dy); +extern void IN_ReadCursor(CursorInfo *info); +extern void IN_ReadControl(int playnum,player_t *player); +extern void IN_SetControlType(word playnum,player_t *player,ControlType type); +#if DEMO0 +extern boolean IN_StartDemoRecord(word bufsize); +extern void IN_StartDemoPlayback(byte /*__segment*/ *buffer,word bufsize); +extern void IN_StopDemo(void); +extern void IN_FreeDemoBuffer(void); #endif -; -extern byte *IN_GetScanName(ScanCode); -extern char IN_WaitForASCII(void); -extern ScanCode IN_WaitForKey(void); -extern word IN_GetJoyButtonsDB(word joy);*/ - +extern byte *IN_GetScanName(ScanCode scan); +extern ScanCode IN_WaitForKey(); +extern char IN_WaitForASCII(); +extern void IN_AckBack(); +extern void IN_Ack(); +extern boolean IN_IsUserInput(); +extern boolean IN_UserInput(dword delay,boolean clear); +extern boolean IN_KeyDown(byte code); +extern void IN_ClearKey(byte code); +extern boolean IN_qb(byte kee); -void interrupt INL_KeyService(void); -boolean IN_qb(byte kee); #endif