diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 686e422b020..3d6a03052f4 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -285,6 +285,7 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( GLOBAL_LIST_INIT(all_body_zones, list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) GLOBAL_LIST_INIT(limb_zones, list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) +GLOBAL_LIST_INIT(leg_zones, list(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) #define BODY_ZONE_PRECISE_EYES "eyes" #define BODY_ZONE_PRECISE_MOUTH "mouth" diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm index 5f96508d690..601c96be340 100644 --- a/code/modules/antagonists/changeling/powers/adrenaline.dm +++ b/code/modules/antagonists/changeling/powers/adrenaline.dm @@ -1,19 +1,50 @@ /datum/action/changeling/adrenaline - name = "Adrenaline Sacs" - desc = "We evolve additional sacs of adrenaline throughout our body. Costs 30 chemicals." - helptext = "Removes all stuns instantly and adds a short-term reduction in further stuns. Can be used while unconscious. Continued use poisons the body." + name = "Repurposed Glands" + desc = "We shift almost all available muscle mass from the arms to the legs, disabling the former but making us unable to be downed for 15 seconds. Costs 10 chemicals." + helptext = "Disables your arms and retracts bioweaponry, but regenerates your legs, grants you speed, and wakes you up from any stun." button_icon_state = "adrenaline" - chemical_cost = 30 - dna_cost = 2 - req_human = TRUE - req_stat = UNCONSCIOUS + chemical_cost = 10 + dna_cost = 1 + req_human = FALSE + req_stat = CONSCIOUS //Recover from stuns. -/datum/action/changeling/adrenaline/sting_action(mob/living/user) +/datum/action/changeling/adrenaline/sting_action(mob/living/carbon/user) ..() - to_chat(user, span_notice("Energy rushes through us.")) - user.SetKnockdown(0) - user.set_resting(FALSE) + to_chat(user, span_changeling("Our arms feel weak, but our legs become unstoppable!")) + + for(var/datum/action/changeling/weapon/weapon_ability in user.actions) + weapon_ability.unequip_held(user) + + // Destroy legcuffs with our IMMENSE LEG STRENGTH. + if(user.legcuffed) + var/obj/O = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED) + if(!istype(O)) + return FALSE + qdel(O) + user.visible_message(span_warning("[user]'s legs suddenly rip [O] apart!"), \ + span_warning("We rip apart our leg restraints!")) + + // Regenerate our legs only. + var/our_leg_zones = (GLOB.all_body_zones - GLOB.leg_zones) + user.regenerate_limbs(excluded_zones = our_leg_zones) // why is this exclusive rather than inclusive + + user.add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) + + // Revert above mob changes. + addtimer(CALLBACK(src, PROC_REF(unsting_action), user), 20 SECONDS) + + // Get us standing up. + user.SetAllImmobility(0) + user.setStaminaLoss(0) + user.set_resting(FALSE, instant = TRUE) + + // Add fast reagents to go fast. user.reagents.add_reagent(/datum/reagent/medicine/changelingadrenaline, 4) //20 seconds - user.reagents.add_reagent(/datum/reagent/medicine/changelinghaste, 3) //6 seconds, for a really quick burst of speed + return TRUE + +/datum/action/changeling/adrenaline/proc/unsting_action(mob/living/user) + to_chat(user, span_changeling("The muscles in our limbs shift back to their usual places.")) + user.remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) + return diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index af7348f7bf1..d82ec1d1318 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -68,6 +68,9 @@ return ..() var/limb_regen = 0 + if(HAS_TRAIT_FROM_ONLY(user, TRAIT_PARALYSIS_L_ARM, CHANGELING_TRAIT) || HAS_TRAIT_FROM_ONLY(user, TRAIT_PARALYSIS_R_ARM, CHANGELING_TRAIT)) + user.balloon_alert(user, "not enough muscle!") // no cheesing repuprosed glands + return if(user.active_hand_index % 2 == 0) //we regen the arm before changing it into the weapon limb_regen = user.regenerate_limb(BODY_ZONE_R_ARM, 1) else diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index e76a524aae9..44123b03a53 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1358,7 +1358,7 @@ /datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/metabolizer, seconds_per_tick, times_fired) . = ..() metabolizer.AdjustAllImmobility(-20 * REM * seconds_per_tick) - if(metabolizer.adjustStaminaLoss(-10 * REM * seconds_per_tick, updating_stamina = FALSE)) + if(metabolizer.adjustStaminaLoss(-30 * REM * seconds_per_tick, updating_stamina = FALSE)) . = UPDATE_MOB_HEALTH metabolizer.set_jitter_if_lower(20 SECONDS * REM * seconds_per_tick) metabolizer.set_dizzy_if_lower(20 SECONDS * REM * seconds_per_tick)