#pragma once // same as RW skeleton /* enum Key { // ascii... KEY_ESC = 128, KEY_F1 = 129, KEY_F2 = 130, KEY_F3 = 131, KEY_F4 = 132, KEY_F5 = 133, KEY_F6 = 134, KEY_F7 = 135, KEY_F8 = 136, KEY_F9 = 137, KEY_F10 = 138, KEY_F11 = 139, KEY_F12 = 140, KEY_INS = 141, KEY_DEL = 142, KEY_HOME = 143, KEY_END = 144, KEY_PGUP = 145, KEY_PGDN = 146, KEY_UP = 147, KEY_DOWN = 148, KEY_LEFT = 149, KEY_RIGHT = 150, // some stuff ommitted KEY_BACKSP = 168, KEY_TAB = 169, KEY_CAPSLK = 170, KEY_ENTER = 171, KEY_LSHIFT = 172, KEY_RSHIFT = 173, KEY_LCTRL = 174, KEY_RCTRL = 175, KEY_LALT = 176, KEY_RALT = 177, KEY_NULL, // unused KEY_NUMKEYS }; */ class CControllerState { public: int16 LeftStickX, LeftStickY; int16 RightStickX, RightStickY; int16 LeftShoulder1, LeftShoulder2; int16 RightShoulder1, RightShoulder2; int16 DPadUp, DPadDown, DPadLeft, DPadRight; int16 Start, Select; int16 Square, Triangle, Cross, Circle; int16 LeftShock, RightShock; int16 NetworkTalk; float GetLeftStickX(void) { return LeftStickX/32767.0f; }; float GetLeftStickY(void) { return LeftStickY/32767.0f; }; float GetRightStickX(void) { return RightStickX/32767.0f; }; float GetRightStickY(void) { return RightStickY/32767.0f; }; void Clear(void); }; VALIDATE_SIZE(CControllerState, 0x2A); class CMouseControllerState { public: //uint32 btns; // bit 0-2 button 1-3 Bool LMB; Bool RMB; Bool MMB; Bool WHEELUP; Bool WHEELDN; Bool MXB1; Bool MXB2; char _pad0; Float x, y; CMouseControllerState(); void Clear(); }; VALIDATE_SIZE(CMouseControllerState, 0x10); class CMousePointerStateHelper { public: Bool bInvertHorizontally; Bool bInvertVertically; CMouseControllerState GetMouseSetUp(); }; VALIDATE_SIZE(CMousePointerStateHelper, 0x2); extern CMousePointerStateHelper &MousePointerStateHelper; class CKeyboardState { public: Int16 F[12]; Int16 VK_KEYS[256]; Int16 ESC; Int16 INS; Int16 DEL; Int16 HOME; Int16 END; Int16 PGUP; Int16 PGDN; Int16 UP; Int16 DOWN; Int16 LEFT; Int16 RIGHT; Int16 SCROLLLOCK; Int16 PAUSE; Int16 NUMLOCK; Int16 DIV; Int16 MUL; Int16 SUB; Int16 ADD; Int16 ENTER; Int16 DECIMAL; Int16 NUM1; Int16 NUM2; Int16 NUM3; Int16 NUM4; Int16 NUM5; Int16 NUM6; Int16 NUM7; Int16 NUM8; Int16 NUM9; Int16 NUM0; Int16 BACKSP; Int16 TAB; Int16 CAPSLOCK; Int16 EXTENTER; Int16 LSHIFT; Int16 RSHIFT; Int16 SHIFT; Int16 LCTRL; Int16 RCTRL; Int16 LALT; Int16 RALT; Int16 LWIN; Int16 RWIN; Int16 APPS; void Clear(); }; VALIDATE_SIZE(CKeyboardState, 0x270); enum { // taken from miss2 PAD1 = 0, PAD2, MAX_PADS }; class CPad { public: CControllerState NewState; CControllerState OldState; CControllerState PCTempKeyState; CControllerState PCTempJoyState; CControllerState PCTempMouseState; // straight out of my IDB int16 Phase; int16 Mode; int16 ShakeDur; UInt8 ShakeFreq; int8 bHornHistory[5]; UInt8 iCurrHornHistory; Bool DisablePlayerControls; int8 bApplyBrakes; Char _unk[12]; //int32 unk[3]; char _pad0[3]; int32 LastTimeTouched; int32 AverageWeapon; int32 AverageEntries; CPad() { } ~CPad() { } static Bool &bDisplayNoControllerMessage; static Bool &bObsoleteControllerMessage; static Bool &m_bMapPadOneToPadTwo; static CKeyboardState &OldKeyState; static CKeyboardState &NewKeyState; static CKeyboardState &TempKeyState; static Char KeyBoardCheatString[18]; static CMouseControllerState &OldMouseControllerState; static CMouseControllerState &NewMouseControllerState; static CMouseControllerState &PCTempMouseControllerState; void Clear(Bool bResetPlayerControls); void ClearMouseHistory(); void UpdateMouse(); CControllerState ReconcileTwoControllersInput(CControllerState const &State1, CControllerState const &State2); void StartShake(Int16 nDur, UInt8 nFreq); void StartShake_Distance(Int16 nDur, UInt8 nFreq, Float fX, Float fY, Float fz); void StartShake_Train(Float fX, Float fY); void AddToPCCheatString(Char c); static void UpdatePads(void); void ProcessPCSpecificStuff(void); void Update(Int16 unk); static void DoCheats(void); void DoCheats(Int16 unk); static void StopPadsShaking(void); void StopShaking(Int16 unk); static CPad *GetPad(Int32 pad); Int16 GetSteeringLeftRight(void); Int16 GetSteeringUpDown(void); Int16 GetCarGunUpDown(void); Int16 GetCarGunLeftRight(void); Int16 GetPedWalkLeftRight(void); Int16 GetPedWalkUpDown(void); Int16 GetAnalogueUpDown(void); Bool GetLookLeft(void); Bool GetLookRight(void); Bool GetLookBehindForCar(void); Bool GetLookBehindForPed(void); Bool GetHorn(void); Bool HornJustDown(void); Bool GetCarGunFired(void); Bool CarGunJustDown(void); Int16 GetHandBrake(void); Int16 GetBrake(void); Bool GetExitVehicle(void); Bool ExitVehicleJustDown(void); Int32 GetWeapon(void); Bool WeaponJustDown(void); Int16 GetAccelerate(void); Bool CycleCameraModeUpJustDown(void); Bool CycleCameraModeDownJustDown(void); Bool ChangeStationJustDown(void); Bool CycleWeaponLeftJustDown(void); Bool CycleWeaponRightJustDown(void); Bool GetTarget(void); Bool TargetJustDown(void); Bool JumpJustDown(void); Bool GetSprint(void); Bool ShiftTargetLeftJustDown(void); Bool ShiftTargetRightJustDown(void); Bool GetAnaloguePadUp(void); Bool GetAnaloguePadDown(void); Bool GetAnaloguePadLeft(void); Bool GetAnaloguePadRight(void); Bool GetAnaloguePadLeftJustUp(void); Bool GetAnaloguePadRightJustUp(void); Bool ForceCameraBehindPlayer(void); Bool SniperZoomIn(void); Bool SniperZoomOut(void); Int16 SniperModeLookLeftRight(void); Int16 SniperModeLookUpDown(void); Int16 LookAroundLeftRight(void); Int16 LookAroundUpDown(void); void ResetAverageWeapon(void); static void PrintErrorMessage(void); static void ResetCheats(void); static Char *EditString(Char *pStr, Int32 nSize); static Int32 *EditCodesForControls(Int32 *pRsKeys, Int32 nSize); // mouse inline Bool GetLeftMouseJustDown() { return !!(NewMouseControllerState.LMB && !OldMouseControllerState.LMB); } // keyboard inline Bool GetCharJustDown(Char c) { return !!(NewKeyState.VK_KEYS[c] && !OldKeyState.VK_KEYS[c]); } inline Bool GetFJustDown(Int32 n) { return !!(NewKeyState.F[n] && !OldKeyState.F[n]); } inline Bool GetEscapeJustDown() { return !!(NewKeyState.ESC && !OldKeyState.ESC); } inline Bool GetInsertJustDown() { return !!(NewKeyState.INS && !OldKeyState.INS); } inline Bool GetDeleteJustDown() { return !!(NewKeyState.DEL && !OldKeyState.DEL); } inline Bool GetHomeJustDown() { return !!(NewKeyState.HOME && !OldKeyState.HOME); } inline Bool GetEndJustDown() { return !!(NewKeyState.END && !OldKeyState.END); } inline Bool GetPageUpJustDown() { return !!(NewKeyState.PGUP && !OldKeyState.PGUP); } inline Bool GetPageDownJustDown() { return !!(NewKeyState.PGDN && !OldKeyState.PGDN); } inline Bool GetUpJustDown() { return !!(NewKeyState.UP && !OldKeyState.UP); } inline Bool GetDownJustDown() { return !!(NewKeyState.DOWN && !OldKeyState.DOWN); } inline Bool GetLeftJustDown() { return !!(NewKeyState.LEFT && !OldKeyState.LEFT); } inline Bool GetRightJustDown() { return !!(NewKeyState.RIGHT && !OldKeyState.RIGHT); } inline Bool GetScrollLockJustDown() { return !!(NewKeyState.SCROLLLOCK && !OldKeyState.SCROLLLOCK); } inline Bool GetPauseJustDown() { return !!(NewKeyState.PAUSE && !OldKeyState.PAUSE); } inline Bool GetNumLockJustDown() { return !!(NewKeyState.NUMLOCK && !OldKeyState.NUMLOCK); } inline Bool GetDivideJustDown() { return !!(NewKeyState.DIV && !OldKeyState.DIV); } inline Bool GetTimesJustDown() { return !!(NewKeyState.MUL && !OldKeyState.MUL); } inline Bool GetMinusJustDown() { return !!(NewKeyState.SUB && !OldKeyState.SUB); } inline Bool GetPlusJustDown() { return !!(NewKeyState.ADD && !OldKeyState.ADD); } inline Bool GetPadEnterJustDown() { return !!(NewKeyState.ENTER && !OldKeyState.ENTER); } // GetEnterJustDown inline Bool GetPadDelJustDown() { return !!(NewKeyState.DECIMAL && !OldKeyState.DECIMAL); } inline Bool GetPad1JustDown() { return !!(NewKeyState.NUM1 && !OldKeyState.NUM1); } inline Bool GetPad2JustDown() { return !!(NewKeyState.NUM2 && !OldKeyState.NUM2); } inline Bool GetPad3JustDown() { return !!(NewKeyState.NUM3 && !OldKeyState.NUM3); } inline Bool GetPad4JustDown() { return !!(NewKeyState.NUM4 && !OldKeyState.NUM4); } inline Bool GetPad5JustDown() { return !!(NewKeyState.NUM5 && !OldKeyState.NUM5); } inline Bool GetPad6JustDown() { return !!(NewKeyState.NUM6 && !OldKeyState.NUM6); } inline Bool GetPad7JustDown() { return !!(NewKeyState.NUM7 && !OldKeyState.NUM7); } inline Bool GetPad8JustDown() { return !!(NewKeyState.NUM8 && !OldKeyState.NUM8); } inline Bool GetPad9JustDown() { return !!(NewKeyState.NUM9 && !OldKeyState.NUM9); } inline Bool GetPad0JustDown() { return !!(NewKeyState.NUM0 && !OldKeyState.NUM0); } inline Bool GetBackspaceJustDown() { return !!(NewKeyState.BACKSP && !OldKeyState.BACKSP); } inline Bool GetTabJustDown() { return !!(NewKeyState.TAB && !OldKeyState.TAB); } inline Bool GetCapsLockJustDown() { return !!(NewKeyState.CAPSLOCK && !OldKeyState.CAPSLOCK); } inline Bool GetEnterJustDown() { return !!(NewKeyState.EXTENTER && !OldKeyState.EXTENTER); } inline Bool GetLeftShiftJustDown() { return !!(NewKeyState.LSHIFT && !OldKeyState.LSHIFT); } inline Bool GetShiftJustDown() { return !!(NewKeyState.SHIFT && !OldKeyState.SHIFT); } inline Bool GetRightShiftJustDown() { return !!(NewKeyState.RSHIFT && !OldKeyState.RSHIFT); } inline Bool GetLeftCtrlJustDown() { return !!(NewKeyState.LCTRL && !OldKeyState.LCTRL); } inline Bool GetRightCtrlJustDown() { return !!(NewKeyState.RCTRL && !OldKeyState.RCTRL); } inline Bool GetLeftAltJustDown() { return !!(NewKeyState.LALT && !OldKeyState.LALT); } inline Bool GetRightAltJustDown() { return !!(NewKeyState.RALT && !OldKeyState.RALT); } inline Bool GetLeftWinJustDown() { return !!(NewKeyState.LWIN && !OldKeyState.LWIN); } inline Bool GetRightWinJustDown() { return !!(NewKeyState.RWIN && !OldKeyState.RWIN); } inline Bool GetAppsJustDown() { return !!(NewKeyState.APPS && !OldKeyState.APPS); } // pad inline Bool GetTriangleJustDown() { return !!(NewState.Triangle && !OldState.Triangle); } inline Bool GetCircleJustDown() { return !!(NewState.Circle && !OldState.Circle); } inline Bool GetCrossJustDown() { return !!(NewState.Cross && !OldState.Cross); } inline Bool GetSquareJustDown() { return !!(NewState.Square && !OldState.Square); } inline Bool GetDPadUpJustDown() { return !!(NewState.DPadUp && !OldState.DPadUp); } inline Bool GetDPadDownJustDown() { return !!(NewState.DPadDown && !OldState.DPadDown); } inline Bool GetDPadLeftJustDown() { return !!(NewState.DPadLeft && !OldState.DPadLeft); } inline Bool GetDPadRightJustDown() { return !!(NewState.DPadRight && !OldState.DPadRight); } inline Bool GetLeftShoulder1JustDown() { return !!(NewState.LeftShoulder1 && !OldState.LeftShoulder1); } inline Bool GetLeftShoulder2JustDown() { return !!(NewState.LeftShoulder2 && !OldState.LeftShoulder2); } inline Bool GetRightShoulder1JustDown() { return !!(NewState.RightShoulder1 && !OldState.RightShoulder1); } inline Bool GetRightShoulder2JustDown() { return !!(NewState.RightShoulder2 && !OldState.RightShoulder2); } inline Int32 GetLeftShoulder1(void) { return NewState.LeftShoulder1; } inline Int32 GetLeftShoulder2(void) { return NewState.LeftShoulder2; } inline Int32 GetRightShoulder1(void) { return NewState.RightShoulder1; } inline Int32 GetRightShoulder2(void) { return NewState.RightShoulder2; } }; VALIDATE_SIZE(CPad, 0xFC); #define IsButtonJustDown(pad, btn) \ (!(pad)->OldState.btn && (pad)->NewState.btn) void LittleTest(void);