From b4f0c114b91ca7e5aa3b3f4c9e691b087117ed19 Mon Sep 17 00:00:00 2001 From: Pithlit Date: Wed, 14 Aug 2024 21:19:54 +0200 Subject: [PATCH] self descruct code bypass (designed for hardware key-switches) # Conflicts: # src/spaceObjects/playerSpaceship.cpp --- src/gui/hotkeyConfig.cpp | 2 ++ src/gui/hotkeyConfig.h | 1 + src/screenComponents/selfDestructButton.cpp | 4 ++++ src/spaceObjects/playerSpaceship.cpp | 22 +++++++++++++++++++++ src/spaceObjects/playerSpaceship.h | 1 + 5 files changed, 30 insertions(+) diff --git a/src/gui/hotkeyConfig.cpp b/src/gui/hotkeyConfig.cpp index bf81006706..eca0c50409 100644 --- a/src/gui/hotkeyConfig.cpp +++ b/src/gui/hotkeyConfig.cpp @@ -267,6 +267,7 @@ Keys::Keys() : engineering_repair_crew_right("ENGINEERING_REPAIR_CREW_RIGHT", "Right"), engineering_self_destruct_start("ENGINEERING_SELF_DESTRUCT_START"), engineering_self_destruct_confirm("ENGINEERING_SELF_DESTRUCT_CONFIRM"), + engineering_self_destruct_bypass("ENGINEERING_SELF_DESTRUCT_BYPASS"), engineering_self_destruct_cancel("ENGINEERING_SELF_DESTRUCT_CANCEL"), engineering_set_power_for_system{ {"ENGINEERING_SET_SYSTEM_POWER_REACTOR"}, @@ -474,6 +475,7 @@ void Keys::init() //Various spectator_show_callsigns.setLabel(tr("hotkey_menu", "Various"), tr("hotkey_various", "Show callsigns (spectator)")); + engineering_self_destruct_bypass.setLabel(tr("hotkey_menu", "Various"), tr("hotkey_various", "key-operated switch")); //Debug debug_show_fps.setLabel(tr("hotkey_menu", "Various"), tr("hotkey_debug", "Show FPS")); diff --git a/src/gui/hotkeyConfig.h b/src/gui/hotkeyConfig.h index af3cd917e9..a90838da1d 100644 --- a/src/gui/hotkeyConfig.h +++ b/src/gui/hotkeyConfig.h @@ -134,6 +134,7 @@ class Keys sp::io::Keybinding engineering_repair_crew_right; sp::io::Keybinding engineering_self_destruct_start; sp::io::Keybinding engineering_self_destruct_confirm; + sp::io::Keybinding engineering_self_destruct_bypass; sp::io::Keybinding engineering_self_destruct_cancel; sp::io::Keybinding engineering_set_power_for_system[SYS_COUNT]; diff --git a/src/screenComponents/selfDestructButton.cpp b/src/screenComponents/selfDestructButton.cpp index 21ed53e7b4..8bae10de51 100644 --- a/src/screenComponents/selfDestructButton.cpp +++ b/src/screenComponents/selfDestructButton.cpp @@ -49,6 +49,10 @@ void GuiSelfDestructButton::onUpdate() confirm_button->hide(); my_spaceship->commandActivateSelfDestruct(); } + if (keys.engineering_self_destruct_bypass.getDown() && cancel_button->isVisible()) + { + my_spaceship->commandBypassSelfDestruct(); + } if (keys.engineering_self_destruct_cancel.getDown() && cancel_button->isVisible()) { activate_button->show(); diff --git a/src/spaceObjects/playerSpaceship.cpp b/src/spaceObjects/playerSpaceship.cpp index c54717eaea..b86aaad60e 100644 --- a/src/spaceObjects/playerSpaceship.cpp +++ b/src/spaceObjects/playerSpaceship.cpp @@ -314,6 +314,10 @@ REGISTER_SCRIPT_SUBCLASS(PlayerSpaceship, SpaceShip) /// Codes are 0-indexed. Index 0 corresponds to code A, 1 to B, etc. /// Example: player:commandConfirmDestructCode(0,46223) -- commands submitting 46223 as self-destruct confirmation code A REGISTER_SCRIPT_CLASS_FUNCTION(PlayerSpaceship, commandConfirmDestructCode); + /// Commands this PlayerSpaceship to bypass the self-destruct authorization code for the code request with the given index. + /// Codes are 0-indexed. Index 0 corresponds to code A, 1 to B, etc. + /// Example: player:commandConfirmDestructCode(0) -- commands bypassing self-destruct confirmation code A + REGISTER_SCRIPT_CLASS_FUNCTION(PlayerSpaceship, commandBypassSelfDestruct); /// Commands this PlayerSpaceship to set its forward combat maneuver to the given value. /// Valid values are any from -1.0 (full reverse) to 1.0 (full forward). /// The maneuver continues until the ship's combat maneuver reserves are depleted. @@ -500,6 +504,11 @@ static const int16_t CMD_SET_MAIN_SCREEN_OVERLAY = 0x0027; static const int16_t CMD_HACKING_FINISHED = 0x0028; static const int16_t CMD_CUSTOM_FUNCTION = 0x0029; static const int16_t CMD_TURN_SPEED = 0x002A; +static const int16_t CMD_SET_REPAIR_DOCKED = 0x002B; +static const int16_t CMD_SET_SHARES_ENERGY = 0x002C; +static const int16_t CMD_SET_RESTOCKS_PROBES = 0x002D; +static const int16_t CMD_SET_RESTOCKS_MISSILES = 0x002E; +static const int16_t CMD_CONFIRM_SELF_DESTRUCT_BYPASS = 0x002F; string alertLevelToString(EAlertLevel level) { @@ -1776,6 +1785,12 @@ void PlayerSpaceship::onReceiveClientCommand(int32_t client_id, sp::io::DataBuff self_destruct_code_confirmed[index] = true; } break; + case CMD_CONFIRM_SELF_DESTRUCT_BYPASS: + { + for (int8_t index = 0; index < max_self_destruct_codes; index++) + self_destruct_code_confirmed[index] = true; + } + break; case CMD_COMBAT_MANEUVER_BOOST: { float request_amount; @@ -2131,6 +2146,13 @@ void PlayerSpaceship::commandConfirmDestructCode(int8_t index, uint32_t code) sendClientCommand(packet); } +void PlayerSpaceship::commandBypassSelfDestruct() +{ + sp::io::DataBuffer packet; + packet << CMD_CONFIRM_SELF_DESTRUCT_BYPASS; + sendClientCommand(packet); +} + void PlayerSpaceship::commandCombatManeuverBoost(float amount) { combat_maneuver_boost_request = amount; diff --git a/src/spaceObjects/playerSpaceship.h b/src/spaceObjects/playerSpaceship.h index 7952a81e2d..77603c9d70 100644 --- a/src/spaceObjects/playerSpaceship.h +++ b/src/spaceObjects/playerSpaceship.h @@ -279,6 +279,7 @@ class PlayerSpaceship : public SpaceShip void commandActivateSelfDestruct(); void commandCancelSelfDestruct(); void commandConfirmDestructCode(int8_t index, uint32_t code); + void commandBypassSelfDestruct(); void commandCombatManeuverBoost(float amount); void commandCombatManeuverStrafe(float strafe); void commandLaunchProbe(glm::vec2 target_position);