Files
Bubberstation/code/datums/keybinding/living.dm
tonty f91de19b44 Implements [OPTIONAL] Swap Left/Right hand, changes [OPTIONAL] default keybinds to accomodate (#92659)
## About The Pull Request

- Adds **OPTIONAL** keybinds that lets you select a specific hand
- Alters **OPTIONAL** default keybinds as such:
  - Q: Swap to Right Hand (replacing Drop item)
  - E: Swap to Left Hand (replacing Quick equip)
  - R: Quick equip (replacing Toggle Throw Mode)
  - ShiftR: Quick equip belt
  - X: Drop item (replacing Swap hands)
  - Swap hands is Unbound

## Why It's Good For The Game

Swapping hands has always been somewhat awkward. Since it depends on the
currently selected hand, swapping your hands requires you to look away
from what you're doing and mentally process what you're holding and what
you have selected. In the heat of the moment (like a fight) it's really
easy to forget which hand you have selected and do something you did not
want to do (like accidentally hug your target instead of attack them).
This makes it so that, at the very least, you only need to check what
you're holding.

The **OPTIONAL** default keybinds **THAT ARE OPTIONAL YOU DON'T HAVE TO
USE THEM** were altered so that new players use this new feature,
hopefully alleviating some of the hiccups from learning hand swapping.
## Changelog

🆑
qol: Added [OPTIONAL] keybinds to for Swap Left/Right hands. Check your
keybinds. [NOT OPTIONAL]
/🆑
2025-08-25 22:00:25 -07:00

230 lines
6.2 KiB
Plaintext

/datum/keybinding/living
category = CATEGORY_HUMAN
weight = WEIGHT_MOB
/datum/keybinding/living/can_use(client/user)
return isliving(user.mob)
/datum/keybinding/living/resist
hotkey_keys = list("B")
name = "resist"
full_name = "Resist"
description = "Break free of your current state. Handcuffed? on fire? Resist!"
keybind_signal = COMSIG_KB_LIVING_RESIST_DOWN
/datum/keybinding/living/resist/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/owner = user.mob
owner.resist()
if (owner.hud_used?.resist_icon)
owner.hud_used.resist_icon.icon_state = "[owner.hud_used.resist_icon.base_icon_state]_on"
return TRUE
/datum/keybinding/living/resist/up(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/owner = user.mob
if (owner.hud_used?.resist_icon)
owner.hud_used.resist_icon.icon_state = owner.hud_used.resist_icon.base_icon_state
/datum/keybinding/living/look_up
hotkey_keys = list("L")
name = "look up"
full_name = "Look Up"
description = "Look up at the next z-level. Only works if directly below open space."
keybind_signal = COMSIG_KB_LIVING_LOOKUP_DOWN
/datum/keybinding/living/look_up/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/L = user.mob
L.look_up()
return TRUE
/datum/keybinding/living/look_up/up(client/user, turf/target)
. = ..()
var/mob/living/L = user.mob
L.end_look()
return TRUE
/datum/keybinding/living/look_down
hotkey_keys = list(";")
name = "look down"
full_name = "Look Down"
description = "Look down at the previous z-level. Only works if directly above open space."
keybind_signal = COMSIG_KB_LIVING_LOOKDOWN_DOWN
/datum/keybinding/living/look_down/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/L = user.mob
L.look_down()
return TRUE
/datum/keybinding/living/look_down/up(client/user, turf/target)
. = ..()
var/mob/living/L = user.mob
L.end_look()
return TRUE
/datum/keybinding/living/rest
hotkey_keys = list("U")
name = "rest"
full_name = "Rest"
description = "Lay down, or get up."
keybind_signal = COMSIG_KB_LIVING_REST_DOWN
/datum/keybinding/living/rest/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/living_mob = user.mob
living_mob.toggle_resting()
return TRUE
/datum/keybinding/living/toggle_combat_mode
hotkey_keys = list("F")
name = "toggle_combat_mode"
full_name = "Toggle Combat Mode"
description = "Toggles combat mode. Like Help/Harm but cooler."
keybind_signal = COMSIG_KB_LIVING_TOGGLE_COMBAT_DOWN
/datum/keybinding/living/toggle_combat_mode/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/user_mob = user.mob
user_mob.set_combat_mode(!user_mob.combat_mode, FALSE)
/datum/keybinding/living/enable_combat_mode
hotkey_keys = list("4")
name = "enable_combat_mode"
full_name = "Enable Combat Mode"
description = "Enable combat mode."
keybind_signal = COMSIG_KB_LIVING_ENABLE_COMBAT_DOWN
/datum/keybinding/living/enable_combat_mode/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/user_mob = user.mob
user_mob.set_combat_mode(TRUE, silent = FALSE)
/datum/keybinding/living/disable_combat_mode
hotkey_keys = list("1")
name = "disable_combat_mode"
full_name = "Disable Combat Mode"
description = "Disable combat mode."
keybind_signal = COMSIG_KB_LIVING_DISABLE_COMBAT_DOWN
/datum/keybinding/living/disable_combat_mode/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/user_mob = user.mob
user_mob.set_combat_mode(FALSE, silent = FALSE)
/datum/keybinding/living/toggle_move_intent
hotkey_keys = list("C")
name = "toggle_move_intent"
full_name = "Hold to toggle move intent"
description = "Held down to cycle to the other move intent, release to cycle back"
keybind_signal = COMSIG_KB_LIVING_TOGGLEMOVEINTENT_DOWN
/datum/keybinding/living/toggle_move_intent/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/M = user.mob
M.toggle_move_intent()
return TRUE
/datum/keybinding/living/toggle_move_intent/up(client/user, turf/target)
. = ..()
var/mob/living/M = user.mob
M.toggle_move_intent()
return TRUE
/datum/keybinding/living/toggle_move_intent_alternative
hotkey_keys = list("Unbound")
name = "toggle_move_intent_alt"
full_name = "press to cycle move intent"
description = "Pressing this cycle to the opposite move intent, does not cycle back"
keybind_signal = COMSIG_KB_LIVING_TOGGLEMOVEINTENTALT_DOWN
/datum/keybinding/living/toggle_move_intent_alternative/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/M = user.mob
M.toggle_move_intent()
return TRUE
/datum/keybinding/living/toggle_throw_mode
hotkey_keys = list("Southwest") // END
name = "toggle_throw_mode"
full_name = "Toggle throw mode"
description = "Toggle throwing the current item or not."
keybind_signal = COMSIG_KB_LIVING_TOGGLETHROWMODE_DOWN
/datum/keybinding/living/toggle_throw_mode/down(client/user)
. = ..()
if(.)
return
var/mob/living/living_user = user.mob
living_user.toggle_throw_mode()
return TRUE
/datum/keybinding/living/hold_throw_mode
hotkey_keys = list("Space")
name = "hold_throw_mode"
full_name = "Hold throw mode"
description = "Hold this to turn on throw mode, and release it to turn off throw mode"
keybind_signal = COMSIG_KB_LIVING_HOLDTHROWMODE_DOWN
/datum/keybinding/living/hold_throw_mode/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/living_user = user.mob
living_user.throw_mode_on(THROW_MODE_HOLD)
/datum/keybinding/living/hold_throw_mode/up(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/living_user = user.mob
living_user.throw_mode_off(THROW_MODE_HOLD)
/datum/keybinding/living/give
hotkey_keys = list("G")
name = "Give_Item"
full_name = "Give item"
description = "Give the item you're currently holding"
keybind_signal = COMSIG_KB_LIVING_GIVEITEM_DOWN
/datum/keybinding/living/give/can_use(client/user)
. = ..()
if (!.)
return FALSE
if(!user.mob)
return FALSE
if(!HAS_TRAIT(user.mob, TRAIT_CAN_HOLD_ITEMS))
return FALSE
return TRUE
/datum/keybinding/living/give/down(client/user, turf/target)
. = ..()
if(.)
return
var/mob/living/living_user = user.mob
if(!HAS_TRAIT(living_user, TRAIT_CAN_HOLD_ITEMS))
return
living_user.give()