mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-27 15:17:01 +01:00
Updates Strong-Arm implants to be cooldown based, deal entirely lethal damage (but more of it) (#85012)
## About The Pull Request Strong-Arm implants utilize a five second cooldown between activation (this is per implant, not for both). As a result, the implant does a larger chunk of damage in one blow. It does not do stamina damage anymore. If you strike a mob with either the MOB_BEAST or MOB_SPECIAL biotypes, you inflict additional damage (40 extra). You can fit both a toolset implant and a muscle implant into the same arm. ## Why It's Good For The Game Strong-arms were really weird implants in that they were not locked behind any research progression, but instead could be purchased from cargo. However, they were still not exactly amazing to have, so they only really get purchased by bored medical doctors, since the implant was a medical departmental order option (for some reason). I tried giving them a little extra oomph a while ago, but I never felt like they were in a particularly good space even after that update. Borrowing some ideas from an older PR, I've introduced a cooldown to allow for them to work alongside other unarmed features, but still not allow them to stack with other effects. It makes them exceptionally good as opening attacks, but not to the point of being intrusive. They were also a method of infinite stamina damage, so that has been resolved as well. The mob bonus damage makes them a little fun option for miners, really, that's why I added it. I thought it would be a cute feature, and maybe incentivize a few to get augmented. I don't think they will, since augments aren't super useful for miners, but still. The pairing with toolsets is because they're not quite as useful generally as the toolsets, and since they are a weaker arm implant in the progression, I don't feel it is too extreme to have both, because overall most people will gravitate towards toolsets if they had to choose. ## Changelog 🆑 balance: Strong-arm implants go on cooldown when activated, but deal more overall lethal damage on a single blow. balance: The strong-arm implant does additional damage to fauna and some other dangerous mobs. qol: You can pair toolset arm implants with the strong-arm implants. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com>
This commit is contained in:
co-authored by
Jacquerel
parent
98ec0acd3b
commit
9f780d3e35
@@ -86,6 +86,8 @@
|
||||
#define ORGAN_SLOT_MONSTER_CORE "monstercore"
|
||||
#define ORGAN_SLOT_RIGHT_ARM_AUG "r_arm_device"
|
||||
#define ORGAN_SLOT_LEFT_ARM_AUG "l_arm_device" //This one ignores alphabetical order cause the arms should be together
|
||||
#define ORGAN_SLOT_RIGHT_ARM_MUSCLE "r_arm_muscle"
|
||||
#define ORGAN_SLOT_LEFT_ARM_MUSCLE "l_arm_muscle" //same as above
|
||||
#define ORGAN_SLOT_SPINE "spine"
|
||||
#define ORGAN_SLOT_STOMACH "stomach"
|
||||
#define ORGAN_SLOT_STOMACH_AID "stomach_aid"
|
||||
@@ -137,6 +139,8 @@ GLOBAL_LIST_INIT(organ_process_order, list(
|
||||
ORGAN_SLOT_APPENDIX,
|
||||
ORGAN_SLOT_RIGHT_ARM_AUG,
|
||||
ORGAN_SLOT_LEFT_ARM_AUG,
|
||||
ORGAN_SLOT_LEFT_ARM_MUSCLE,
|
||||
ORGAN_SLOT_RIGHT_ARM_MUSCLE,
|
||||
ORGAN_SLOT_STOMACH,
|
||||
ORGAN_SLOT_STOMACH_AID,
|
||||
ORGAN_SLOT_BREATHING_TUBE,
|
||||
|
||||
@@ -187,6 +187,6 @@
|
||||
name = "Strong-Arm Implant Set"
|
||||
desc = "A crate containing two implants, which can be surgically implanted to empower the strength of human arms. Warranty void if exposed to electromagnetic pulses."
|
||||
cost = CARGO_CRATE_VALUE * 6
|
||||
contains = list(/obj/item/organ/internal/cyberimp/arm/muscle = 2)
|
||||
contains = list(/obj/item/organ/internal/cyberimp/arm/strongarm = 2)
|
||||
crate_name = "Strong-Arm implant crate"
|
||||
discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
|
||||
|
||||
@@ -403,7 +403,11 @@
|
||||
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm."
|
||||
id = "ci-surgery"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5)
|
||||
materials = list (
|
||||
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.25,
|
||||
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
|
||||
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
|
||||
)
|
||||
construction_time = 2 SECONDS
|
||||
build_path = /obj/item/organ/internal/cyberimp/arm/surgery
|
||||
category = list(
|
||||
@@ -416,7 +420,11 @@
|
||||
desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm."
|
||||
id = "ci-toolset"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5)
|
||||
materials = list (
|
||||
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.25,
|
||||
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
|
||||
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
|
||||
)
|
||||
construction_time = 2 SECONDS
|
||||
build_path = /obj/item/organ/internal/cyberimp/arm/toolset
|
||||
category = list(
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
var/extend_sound = 'sound/mecha/mechmove03.ogg'
|
||||
/// Sound played when retracting
|
||||
var/retract_sound = 'sound/mecha/mechmove03.ogg'
|
||||
/// Organ slot that the implant occupies for the right arm
|
||||
var/right_arm_organ_slot = ORGAN_SLOT_RIGHT_ARM_AUG
|
||||
/// Organ slot that the implant occupies for the left arm
|
||||
var/left_arm_organ_slot = ORGAN_SLOT_LEFT_ARM_AUG
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -48,9 +52,9 @@
|
||||
/obj/item/organ/internal/cyberimp/arm/proc/SetSlotFromZone()
|
||||
switch(zone)
|
||||
if(BODY_ZONE_L_ARM)
|
||||
slot = ORGAN_SLOT_LEFT_ARM_AUG
|
||||
slot = left_arm_organ_slot
|
||||
if(BODY_ZONE_R_ARM)
|
||||
slot = ORGAN_SLOT_RIGHT_ARM_AUG
|
||||
slot = right_arm_organ_slot
|
||||
else
|
||||
CRASH("Invalid zone for [type]")
|
||||
|
||||
@@ -370,18 +374,24 @@
|
||||
/obj/item/knife/combat/cyborg,
|
||||
)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/muscle
|
||||
/obj/item/organ/internal/cyberimp/arm/strongarm
|
||||
name = "\proper Strong-Arm empowered musculature implant"
|
||||
desc = "When implanted, this cybernetic implant will enhance the muscles of the arm to deliver more power-per-action."
|
||||
icon_state = "muscle_implant"
|
||||
|
||||
zone = BODY_ZONE_R_ARM
|
||||
slot = ORGAN_SLOT_RIGHT_ARM_AUG
|
||||
slot = ORGAN_SLOT_RIGHT_ARM_MUSCLE
|
||||
right_arm_organ_slot = ORGAN_SLOT_RIGHT_ARM_MUSCLE
|
||||
left_arm_organ_slot = ORGAN_SLOT_LEFT_ARM_MUSCLE
|
||||
|
||||
actions_types = list()
|
||||
|
||||
///The amount of damage the implant adds to our unarmed attacks.
|
||||
var/punch_damage = 5
|
||||
///Biotypes we apply an additional amount of damage too
|
||||
var/biotype_bonus_targets = MOB_BEAST | MOB_SPECIAL
|
||||
///Extra damage dealt to our targeted mobs
|
||||
var/biotype_bonus_damage = 20
|
||||
///IF true, the throw attack will not smash people into walls
|
||||
var/non_harmful_throw = TRUE
|
||||
///How far away your attack will throw your oponent
|
||||
@@ -392,17 +402,24 @@
|
||||
var/throw_power_max = 4
|
||||
///How long will the implant malfunction if it is EMP'd
|
||||
var/emp_base_duration = 9 SECONDS
|
||||
///How long before we get another slam punch; consider that these usually come in pairs of two
|
||||
var/slam_cooldown_duration = 5 SECONDS
|
||||
///Tracks how soon we can perform another slam attack
|
||||
COOLDOWN_DECLARE(slam_cooldown)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/muscle/on_mob_insert(mob/living/carbon/arm_owner)
|
||||
/obj/item/organ/internal/cyberimp/arm/strongarm/l
|
||||
zone = BODY_ZONE_L_ARM
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/strongarm/on_mob_insert(mob/living/carbon/arm_owner)
|
||||
. = ..()
|
||||
if(ishuman(arm_owner)) //Sorry, only humans
|
||||
RegisterSignal(arm_owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(on_attack_hand))
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/muscle/on_mob_remove(mob/living/carbon/arm_owner)
|
||||
/obj/item/organ/internal/cyberimp/arm/strongarm/on_mob_remove(mob/living/carbon/arm_owner)
|
||||
. = ..()
|
||||
UnregisterSignal(arm_owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/muscle/emp_act(severity)
|
||||
/obj/item/organ/internal/cyberimp/arm/strongarm/emp_act(severity)
|
||||
. = ..()
|
||||
if((organ_flags & ORGAN_FAILING) || . & EMP_PROTECT_SELF)
|
||||
return
|
||||
@@ -410,11 +427,11 @@
|
||||
organ_flags |= ORGAN_FAILING
|
||||
addtimer(CALLBACK(src, PROC_REF(reboot)), 90 / severity)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/muscle/proc/reboot()
|
||||
/obj/item/organ/internal/cyberimp/arm/strongarm/proc/reboot()
|
||||
organ_flags &= ~ORGAN_FAILING
|
||||
owner.balloon_alert(owner, "your arm stops spasming!")
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/muscle/proc/on_attack_hand(mob/living/carbon/human/source, atom/target, proximity, modifiers)
|
||||
/obj/item/organ/internal/cyberimp/arm/strongarm/proc/on_attack_hand(mob/living/carbon/human/source, atom/target, proximity, modifiers)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(source.get_active_hand() != hand || !proximity)
|
||||
@@ -425,6 +442,8 @@
|
||||
return NONE
|
||||
if(HAS_TRAIT(source, TRAIT_HULK)) //NO HULK
|
||||
return NONE
|
||||
if(!COOLDOWN_FINISHED(src, slam_cooldown))
|
||||
return NONE
|
||||
if(!source.can_unarmed_attack())
|
||||
return COMPONENT_SKIP_ATTACK
|
||||
|
||||
@@ -454,13 +473,16 @@
|
||||
var/obj/item/bodypart/attacking_bodypart = hand
|
||||
potential_damage += rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high)
|
||||
|
||||
var/is_correct_biotype = living_target.mob_biotypes & biotype_bonus_targets
|
||||
if(biotype_bonus_targets && is_correct_biotype) //If we are punching one of our special biotype targets, increase the damage floor by a factor of two.
|
||||
potential_damage += biotype_bonus_damage
|
||||
|
||||
source.do_attack_animation(target, ATTACK_EFFECT_SMASH)
|
||||
playsound(living_target.loc, 'sound/weapons/punch1.ogg', 25, TRUE, -1)
|
||||
|
||||
var/target_zone = living_target.get_random_valid_zone(source.zone_selected)
|
||||
var/armor_block = living_target.run_armor_check(target_zone, MELEE, armour_penetration = attacking_bodypart.unarmed_effectiveness)
|
||||
living_target.apply_damage(potential_damage, attacking_bodypart.attack_type, target_zone, armor_block)
|
||||
living_target.apply_damage(potential_damage*1.5, STAMINA, target_zone, armor_block)
|
||||
living_target.apply_damage(potential_damage * 2, attacking_bodypart.attack_type, target_zone, armor_block)
|
||||
|
||||
if(source.body_position != LYING_DOWN) //Throw them if we are standing
|
||||
var/atom/throw_target = get_edge_target_turf(living_target, source.dir)
|
||||
@@ -478,4 +500,6 @@
|
||||
|
||||
log_combat(source, target, "[picked_hit_type]ed", "muscle implant")
|
||||
|
||||
COOLDOWN_START(src, slam_cooldown, slam_cooldown_duration)
|
||||
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
|
||||
Reference in New Issue
Block a user