input: changed target change from look to a new keybind (#1519)

Resolves #1503.
This commit is contained in:
walkawayy 2024-09-14 14:39:50 -04:00 committed by GitHub
parent 30c2bc2b89
commit e5d7036b52
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 22 additions and 28 deletions

View file

@ -1,6 +1,7 @@
## [Unreleased](https://github.com/LostArtefacts/TR1X/compare/stable...develop) - ××××-××-××
- added `/exit` command (#1462)
- added reflections to Midas Hand death animation and savegame crystals (#154)
- changed the target change functionality from the look key to a new, standalone key (default `z` on keyboard, `left analog click` on controller) (#1503)
- fixed `/play`, `/load`, `/demo` and similar commands not working in stats, credits, cinematics and fmvs (#1477)
- fixed console commands being able to interfere with demos, cutscenes and the title screen (#1489, regression from 3.0)
- fixed reopening the compass not resetting its needle (#1472, regression from 4.0)

View file

@ -541,7 +541,7 @@ Not all options are turned on by default. Refer to `TR1X_ConfigTool.exe` for det
- fixed not being able to close level stats with Escape
- fixed Lara jumping forever when alt+tabbing out of the game
- stopped the default controls from functioning when the user unbound them
- added the option to change weapon targets by tapping the look key like in TR4+
- added the option to change weapon targets by tapping the new target change key
- added three targeting lock options:
- full lock: always keep target lock even if the enemy moves out of sight or dies (OG TR1)
- semi lock: keep target lock if the enemy moves out of sight but lose target lock if the enemy dies

View file

@ -658,6 +658,7 @@
"KEYMAP_LEVEL_SKIP_CHEAT": "Level Skip",
"KEYMAP_TURBO_CHEAT": "Turbo Speed",
"KEYMAP_ENTER_CONSOLE": "Enter Console",
"KEYMAP_CHANGE_TARGET": "Change Target",
"KEYMAP_CAMERA_UP": "Camera Up",
"KEYMAP_CAMERA_DOWN": "Camera Down",
"KEYMAP_CAMERA_LEFT": "Camera Left",

View file

@ -154,6 +154,7 @@
"KEYMAP_LEVEL_SKIP_CHEAT": "Level Skip",
"KEYMAP_TURBO_CHEAT": "Turbo Speed",
"KEYMAP_ENTER_CONSOLE": "Enter Console",
"KEYMAP_CHANGE_TARGET": "Change Target",
"KEYMAP_CAMERA_UP": "Camera Up",
"KEYMAP_CAMERA_DOWN": "Camera Down",
"KEYMAP_CAMERA_LEFT": "Camera Left",

View file

@ -226,6 +226,7 @@
"KEYMAP_LEVEL_SKIP_CHEAT": "Level Skip",
"KEYMAP_TURBO_CHEAT": "Turbo Speed",
"KEYMAP_ENTER_CONSOLE": "Enter Console",
"KEYMAP_CHANGE_TARGET": "Change Target",
"KEYMAP_CAMERA_UP": "Camera Up",
"KEYMAP_CAMERA_DOWN": "Camera Down",
"KEYMAP_CAMERA_LEFT": "Camera Left",

View file

@ -71,6 +71,7 @@ GS_DEFINE(KEYMAP_ITEM_CHEAT, "Item Cheat")
GS_DEFINE(KEYMAP_LEVEL_SKIP_CHEAT, "Level Skip")
GS_DEFINE(KEYMAP_TURBO_CHEAT, "Turbo Speed")
GS_DEFINE(KEYMAP_ENTER_CONSOLE, "Enter Console")
GS_DEFINE(KEYMAP_CHANGE_TARGET, "Change Target")
GS_DEFINE(KEYMAP_CAMERA_UP, "Camera Up")
GS_DEFINE(KEYMAP_CAMERA_DOWN, "Camera Down")
GS_DEFINE(KEYMAP_CAMERA_LEFT, "Camera Left")

View file

@ -19,33 +19,9 @@ static bool m_KeyConflict[INPUT_ROLE_NUMBER_OF] = { false };
static bool m_BtnConflict[INPUT_ROLE_NUMBER_OF] = { false };
static int32_t m_HoldBack = 0;
static int32_t m_HoldForward = 0;
static int32_t m_HoldLook = 0;
static void Input_CheckChangeTarget(INPUT_STATE *input);
static INPUT_STATE Input_GetDebounced(INPUT_STATE input);
static void Input_CheckChangeTarget(INPUT_STATE *input)
{
if (g_Lara.gun_status != LGS_READY) {
return;
}
const int32_t frame = Clock_GetLogicalFrame();
if (input->look) {
if (m_HoldLook == 0 || frame - m_HoldLook < LOOK_HOLD_TIME) {
input->look = 0;
if (m_HoldLook == 0) {
m_HoldLook = frame;
}
}
} else {
if (m_HoldLook > 0 && frame - m_HoldLook < LOOK_HOLD_TIME) {
input->change_target = 1;
}
m_HoldLook = 0;
}
}
static INPUT_STATE Input_GetDebounced(INPUT_STATE input)
{
INPUT_STATE result;
@ -173,8 +149,8 @@ void Input_Update(void)
}
}
if (g_Config.enable_target_change) {
Input_CheckChangeTarget(&g_Input);
if (!g_Config.enable_target_change || g_Lara.gun_status != LGS_READY) {
g_Input.change_target = 0;
}
g_InputDB = Input_GetDebounced(g_Input);

View file

@ -127,6 +127,7 @@ static const TEXT_COLUMN_PLACEMENT CtrlTextPlacementNormal[] = {
{ INPUT_ROLE_STEP_R, GS_KEYMAP_STEP_RIGHT, true },
{ INPUT_ROLE_OPTION, GS_KEYMAP_INVENTORY, false },
{ INPUT_ROLE_PAUSE, GS_KEYMAP_PAUSE, true },
{ INPUT_ROLE_CHANGE_TARGET, GS_KEYMAP_CHANGE_TARGET, true },
{ INPUT_ROLE_CAMERA_UP, GS_KEYMAP_CAMERA_UP, true },
{ INPUT_ROLE_CAMERA_DOWN, GS_KEYMAP_CAMERA_DOWN, true },
{ INPUT_ROLE_CAMERA_LEFT, GS_KEYMAP_CAMERA_LEFT, true },
@ -162,6 +163,7 @@ static const TEXT_COLUMN_PLACEMENT CtrlTextPlacementCheats[] = {
{ INPUT_ROLE_STEP_R, GS_KEYMAP_STEP_RIGHT, true },
{ INPUT_ROLE_OPTION, GS_KEYMAP_INVENTORY, false },
{ INPUT_ROLE_PAUSE, GS_KEYMAP_PAUSE, true },
{ INPUT_ROLE_CHANGE_TARGET, GS_KEYMAP_CHANGE_TARGET, true },
{ INPUT_ROLE_CAMERA_UP, GS_KEYMAP_CAMERA_UP, true },
{ INPUT_ROLE_CAMERA_DOWN, GS_KEYMAP_CAMERA_DOWN, true },
{ INPUT_ROLE_CAMERA_LEFT, GS_KEYMAP_CAMERA_LEFT, true },

View file

@ -1803,7 +1803,8 @@ typedef enum INPUT_ROLE {
INPUT_ROLE_FPS = 31,
INPUT_ROLE_BILINEAR = 32,
INPUT_ROLE_ENTER_CONSOLE = 33,
INPUT_ROLE_NUMBER_OF = 34,
INPUT_ROLE_CHANGE_TARGET = 34,
INPUT_ROLE_NUMBER_OF = 35,
} INPUT_ROLE;
typedef enum INPUT_LAYOUT {

View file

@ -63,6 +63,7 @@ static INPUT_SCANCODE m_Layout[INPUT_LAYOUT_NUMBER_OF][INPUT_ROLE_NUMBER_OF] = {
SDL_SCANCODE_F2, // INPUT_ROLE_FPS
SDL_SCANCODE_F3, // INPUT_ROLE_BILINEAR
SDL_SCANCODE_SLASH, // INPUT_ROLE_ENTER_CONSOLE
SDL_SCANCODE_Z, // INPUT_ROLE_CHANGE_TARGET
},
// custom user controls
@ -101,6 +102,7 @@ static INPUT_SCANCODE m_Layout[INPUT_LAYOUT_NUMBER_OF][INPUT_ROLE_NUMBER_OF] = {
SDL_SCANCODE_F2, // INPUT_ROLE_FPS
SDL_SCANCODE_F3, // INPUT_ROLE_BILINEAR
SDL_SCANCODE_SLASH, // INPUT_ROLE_ENTER_CONSOLE
SDL_SCANCODE_Z, // INPUT_ROLE_CHANGE_TARGET
},
{
@ -138,6 +140,7 @@ static INPUT_SCANCODE m_Layout[INPUT_LAYOUT_NUMBER_OF][INPUT_ROLE_NUMBER_OF] = {
SDL_SCANCODE_F2, // INPUT_ROLE_FPS
SDL_SCANCODE_F3, // INPUT_ROLE_BILINEAR
SDL_SCANCODE_SLASH, // INPUT_ROLE_ENTER_CONSOLE
SDL_SCANCODE_Z, // INPUT_ROLE_CHANGE_TARGET
},
{
@ -175,6 +178,7 @@ static INPUT_SCANCODE m_Layout[INPUT_LAYOUT_NUMBER_OF][INPUT_ROLE_NUMBER_OF] = {
SDL_SCANCODE_F2, // INPUT_ROLE_FPS
SDL_SCANCODE_F3, // INPUT_ROLE_BILINEAR
SDL_SCANCODE_SLASH, // INPUT_ROLE_ENTER_CONSOLE
SDL_SCANCODE_Z, // INPUT_ROLE_CHANGE_TARGET
}
// clang-format on
};
@ -217,6 +221,7 @@ static CONTROLLER_MAP
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_FPS
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_BILINEAR
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_ENTER_CONSOLE
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_LEFTSTICK}, 0 }, // INPUT_ROLE_CHANGE_TARGET
},
{
@ -254,6 +259,7 @@ static CONTROLLER_MAP
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_FPS
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_BILINEAR
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_ENTER_CONSOLE
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_LEFTSTICK}, 0 }, // INPUT_ROLE_CHANGE_TARGET
},
{
@ -291,6 +297,7 @@ static CONTROLLER_MAP
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_FPS
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_BILINEAR
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_ENTER_CONSOLE
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_LEFTSTICK}, 0 }, // INPUT_ROLE_CHANGE_TARGET
},
{
@ -328,6 +335,7 @@ static CONTROLLER_MAP
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_FPS
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_BILINEAR
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_INVALID}, 0 }, // INPUT_ROLE_ENTER_CONSOLE
{ BT_BUTTON, {SDL_CONTROLLER_BUTTON_LEFTSTICK}, 0 }, // INPUT_ROLE_CHANGE_TARGET
}
// clang-format on
};
@ -863,6 +871,7 @@ static INPUT_STATE S_Input_GetControllerState(
state.load |= S_Input_GetBindState(INPUT_ROLE_LOAD, cntlr_layout_num);
state.toggle_fps_counter |= S_Input_GetBindState(INPUT_ROLE_FPS, cntlr_layout_num);
state.toggle_bilinear_filter |= S_Input_GetBindState(INPUT_ROLE_BILINEAR, cntlr_layout_num);
state.change_target |= S_Input_GetBindState(INPUT_ROLE_CHANGE_TARGET, cntlr_layout_num);
state.menu_confirm |= S_Input_JoyBtn(SDL_CONTROLLER_BUTTON_A);
state.menu_back |= S_Input_JoyBtn(SDL_CONTROLLER_BUTTON_B);
state.menu_back |= S_Input_JoyBtn(SDL_CONTROLLER_BUTTON_Y);
@ -946,6 +955,7 @@ INPUT_STATE S_Input_GetCurrentState(
linput.camera_left = S_Input_Key(INPUT_ROLE_CAMERA_LEFT, layout_num);
linput.camera_right = S_Input_Key(INPUT_ROLE_CAMERA_RIGHT, layout_num);
linput.camera_reset = S_Input_Key(INPUT_ROLE_CAMERA_RESET, layout_num);
linput.change_target = S_Input_Key(INPUT_ROLE_CHANGE_TARGET, layout_num);
linput.item_cheat = S_Input_Key(INPUT_ROLE_ITEM_CHEAT, layout_num);
linput.fly_cheat = S_Input_Key(INPUT_ROLE_FLY_CHEAT, layout_num);