From c00f551d0d0c385f7c383b6adc40676ab7876d9a Mon Sep 17 00:00:00 2001 From: Superlagg Date: Sun, 25 Jun 2023 21:26:23 -0700 Subject: [PATCH 1/4] scared! --- code/__DEFINES/traits.dm | 2 + code/_globalvars/traits.dm | 2 + code/_onclick/item_attack.dm | 37 +++++++++++-------- code/datums/martial/_martial.dm | 2 + .../game/objects/items/devices/instruments.dm | 2 +- .../objects/items/implants/implant_misc.dm | 16 +++++++- code/modules/fallout/reagents/drugs.dm | 1 - .../mob/living/carbon/carbon_sprint.dm | 21 ++++++----- .../mob/living/carbon/human/species.dm | 2 + .../chemistry/reagents/medicine_reagents.dm | 33 +++++++++++++++++ 10 files changed, 90 insertions(+), 28 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e244633c51a..3d6d07e24ab 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -281,6 +281,8 @@ #define TRAIT_AUTOBREW "autobrewery-syndrome" #define TRAIT_ZOOMIES "zoomies" #define TRAIT_SUPER_ZOOMIES "super zoomies" +#define TRAIT_ENDLESS_RUNNER "endless_runner" +#define TRAIT_PANICKED_ATTACKER "panicked_attacker" // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 603db233968..0192c50fc8a 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -139,6 +139,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CANNIBAL" = TRAIT_LONGPORKLOVER, "TRAIT_ZOOMIES" = TRAIT_ZOOMIES, "TRAIT_SUPER_ZOOMIES" = TRAIT_SUPER_ZOOMIES, + "TRAIT_ENDLESS_RUNNER" = TRAIT_ENDLESS_RUNNER, + "TRAIT_PANICKED_ATTACKER" = TRAIT_PANICKED_ATTACKER, "TRAIT_EXPLOSIVE_CRAFTING" = TRAIT_EXPLOSIVE_CRAFTING, "TRAIT_ADVANCED_EXPLOSIVE_CRAFTING" = TRAIT_ADVANCED_EXPLOSIVE_CRAFTING, "TRAIT_HEAL_TONGUE" = TRAIT_HEAL_TONGUE, diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index d2bcafc6b50..74053630764 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -110,29 +110,34 @@ var/force_modifier = 0 if(force >= 5) - if(HAS_TRAIT(user, TRAIT_BIG_LEAGUES)) - force_modifier += 10 + if(HAS_TRAIT(user, TRAIT_PANICKED_ATTACKER)) + force_modifier = (-force * 0.8) // You do 20% damage cus ur scared + else + if(HAS_TRAIT(user, TRAIT_BIG_LEAGUES)) + force_modifier += 5 + + if(HAS_TRAIT(user, TRAIT_LITTLE_LEAGUES)) + force_modifier += 3 - if(HAS_TRAIT(user, TRAIT_LITTLE_LEAGUES)) - force_modifier += 5 + if(HAS_TRAIT(user, TRAIT_GENTLE)) + force_modifier += -5 - if(HAS_TRAIT(user, TRAIT_GENTLE)) - force_modifier += -5 + if(HAS_TRAIT(user, TRAIT_WIMPY)) + force_modifier += -10 - if(HAS_TRAIT(user, TRAIT_WIMPY)) - force_modifier += -10 + if(HAS_TRAIT(user, TRAIT_BUFFOUT_BUFF)) + force_modifier += (force * 0.25) // maxes out your damage - if(HAS_TRAIT(user, TRAIT_BUFFOUT_BUFF)) - force_modifier += (force * 0.25) + if(HAS_TRAIT(user, TRAIT_FEV)) + force_modifier += (force * 0.1) - if(HAS_TRAIT(user, TRAIT_FEV)) - force_modifier += (force * 0.35) + if(HAS_TRAIT(user, TRAIT_SMUTANT)) + force_modifier += (force * 0.1) - if(HAS_TRAIT(user, TRAIT_SMUTANT)) - force_modifier += (force * 0.25) + if(HAS_TRAIT(user, TRAIT_GHOULMELEE)) //negative trait + force_modifier += (-force * 0.8) - if(HAS_TRAIT(user, TRAIT_GHOULMELEE)) //negative trait - force_modifier += (-force * 0.25) + force_modifier = clamp(force_modifier, -force, force * 0.25) var/force_out = force + force_modifier if(force_out <= 0) diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index 2721630ee43..25f682e50eb 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -58,6 +58,8 @@ if(!isliving(defender)) return var/armormult = clamp(defender.getarmor(zone, armor_type), 0, 1) + if(HAS_TRAIT(attacker, TRAIT_PANICKED_ATTACKER)) + damage *= 0.2 defender.apply_damage(damage, damage_type, BODY_ZONE_CHEST, blocked = armormult, wound_bonus = woundbonus) log_combat(attacker, defender, "martial art ([src])") diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm index aa6b9e1e9ff..75ae5ab3c77 100644 --- a/code/game/objects/items/devices/instruments.dm +++ b/code/game/objects/items/devices/instruments.dm @@ -55,7 +55,7 @@ /obj/item/instrument/violin/golden name = "golden violin" desc = "A golden musical instrument with four strings and a bow." - force_wielded = 45 + force_wielded = 45 icon_state = "golden_violin" item_state = "golden_violin" resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index 97102b6fe69..6806d8c60d3 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -33,7 +33,21 @@ /obj/item/implant/adrenalin/activate() . = ..() uses-- - imp_in.do_adrenaline(150, TRUE, 0, 0, TRUE, list(/datum/reagent/medicine/inaprovaline = 3, /datum/reagent/medicine/synaptizine = 10, /datum/reagent/medicine/regen_jelly = 10, /datum/reagent/medicine/stimulants = 10), span_boldnotice("You feel a sudden surge of energy!")) + imp_in.do_adrenaline( + stamina_boost = 150, + put_on_feet = TRUE, + clamp_unconsciousness_to = 0, + clamp_immobilty_to = 0, + reset_misc = TRUE, + healing_chems = list( + /datum/reagent/medicine/epinephrine = 10, + /datum/reagent/medicine/coagulant = 19, + /datum/reagent/medicine/salglu_solution = 100, + /datum/reagent/medicine/regen_jelly = 10, + /datum/reagent/medicine/stimulants = 10), + message = span_boldnotice("You feel a sudden surge of energy!") + ) + to_chat(imp_in, span_notice("You feel a sudden surge of energy!")) if(!uses) qdel(src) diff --git a/code/modules/fallout/reagents/drugs.dm b/code/modules/fallout/reagents/drugs.dm index 7361528d286..a8e096c6c2b 100644 --- a/code/modules/fallout/reagents/drugs.dm +++ b/code/modules/fallout/reagents/drugs.dm @@ -206,7 +206,6 @@ M.AdjustStun(-25, 0) M.AdjustKnockdown(-25, 0) M.AdjustUnconscious(-25, 0) - M.adjustStaminaLoss(-5, 0) M.Jitter(2) if(M.mind) var/datum/job/job = SSjob.GetJob(M.mind.assigned_role) diff --git a/code/modules/mob/living/carbon/carbon_sprint.dm b/code/modules/mob/living/carbon/carbon_sprint.dm index fa8ed0fbcfe..c5eeace2d26 100644 --- a/code/modules/mob/living/carbon/carbon_sprint.dm +++ b/code/modules/mob/living/carbon/carbon_sprint.dm @@ -3,10 +3,12 @@ doSprintBufferRegen(FALSE) //first regen. if(sprint_buffer) var/use = min(tiles, sprint_buffer) - if(HAS_TRAIT(src, TRAIT_ZOOMIES)) - sprint_buffer -= use * 1.3 - if(HAS_TRAIT(src, TRAIT_SUPER_ZOOMIES)) - sprint_buffer -= use * 2 + if(HAS_TRAIT(src, TRAIT_ENDLESS_RUNNER)) + use = 0 + else if(HAS_TRAIT(src, TRAIT_ZOOMIES)) + use *= 0.65 + else if(HAS_TRAIT(src, TRAIT_SUPER_ZOOMIES)) + use *= 0.35 else sprint_buffer -= use tiles -= use @@ -18,11 +20,12 @@ if(!client || !((client in sprint_bind.is_down) || (client in sprint_hold_bind.is_down))) // there are two keybinds, apparently disable_intentional_sprint_mode() return // if you're not holding it, you stop sprinting when you run out - if(HAS_TRAIT(src, TRAIT_ZOOMIES)) - adjustStaminaLoss(tiles * sprint_stamina_cost * -0.7) - if(HAS_TRAIT(src, TRAIT_SUPER_ZOOMIES)) - adjustStaminaLoss(tiles * sprint_stamina_cost * -0.5) - return + if(HAS_TRAIT(src, TRAIT_ENDLESS_RUNNER)) + return // you don't stop sprinting if you have this trait + else if(HAS_TRAIT(src, TRAIT_ZOOMIES)) + adjustStaminaLoss(tiles * sprint_stamina_cost * 0.7) + else if(HAS_TRAIT(src, TRAIT_SUPER_ZOOMIES)) + adjustStaminaLoss(tiles * sprint_stamina_cost * 0.5) else adjustStaminaLoss(tiles * sprint_stamina_cost) //use stamina to cover deficit. diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index a71092e2a03..d6de1c454ab 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1491,6 +1491,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) if(HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) // unit test no-miss trait damage = user.dna.species.punchdamagehigh + if(HAS_TRAIT(user, TRAIT_PANICKED_ATTACKER)) + damage *= 0.2 // too scared! var/punchedstam = target.getStaminaLoss() var/punchedbrute = target.getBruteLoss() diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 95a1dea3031..8849da1f56b 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1803,3 +1803,36 @@ for(var/i in user.all_wounds) var/datum/wound/iter_wound = i iter_wound.blood_flow = max(0, iter_wound.blood_flow - bleed_reduction_rate) + +//used for changeling's adrenaline power +/datum/reagent/medicine/adrenaline + name = "Synthetic Adrenaline" + description = "A synthetic cocktail of drugs designed to set a person's fight or flight to FLIGHT." + color = "#918e53" + value = REAGENT_VALUE_VERY_RARE + metabolization_rate = 5 * REAGENTS_METABOLISM + ghoulfriendly = TRUE + +/datum/reagent/medicine/adrenaline/on_mob_metabolize(mob/living/L) + ..() + ADD_TRAIT(L, TRAIT_PANICKED_ATTACKER, type) + ADD_TRAIT(L, TRAIT_NOSOFTCRIT, type) + L.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) + ADD_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, "[type]") + to_chat(L, span_danger("Your body surges with panicked energy! You feel like you could run forever, but your shaking \ + hands make it next to impossible to fight!")) + +/datum/reagent/medicine/adrenaline/on_mob_end_metabolize(mob/living/L) + REMOVE_TRAIT(L, TRAIT_PANICKED_ATTACKER, type) + REMOVE_TRAIT(L, TRAIT_NOSOFTCRIT, type) + L.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) + REMOVE_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, "[type]") + ..() + +/datum/reagent/medicine/adrenaline/on_mob_life(mob/living/carbon/M as mob) + M.AdjustUnconscious(-20, 0) + M.AdjustAllImmobility(-20, 0) + M.AdjustSleeping(-20, 0) + ..() + return TRUE + From 02f91e484081112735d625a4e3b362cafd007f2d Mon Sep 17 00:00:00 2001 From: Superlagg Date: Mon, 26 Jun 2023 18:39:19 -0700 Subject: [PATCH 2/4] big salty nerfs --- code/_onclick/item_attack.dm | 12 +-- code/game/objects/items/implants/implant.dm | 8 +- .../objects/items/implants/implant_misc.dm | 58 ++++++++++----- code/modules/mob/living/carbon/carbon.dm | 2 +- .../mob/living/carbon/carbon_sprint.dm | 9 +-- .../mob/living/carbon/human/human_mobility.dm | 40 +++++----- code/modules/mob/living/living.dm | 1 + code/modules/mob/living/living_mobility.dm | 4 +- .../modules/projectiles/ammunition/_firing.dm | 6 +- .../chemistry/reagents/medicine_reagents.dm | 69 +++++++++++++++++- sound/effects/autoinjector_beeps.ogg | Bin 0 -> 18241 bytes 11 files changed, 147 insertions(+), 62 deletions(-) create mode 100644 sound/effects/autoinjector_beeps.ogg diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 7e6bf96fe4d..00d3fc8a858 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -110,33 +110,23 @@ var/force_modifier = 0 if(force >= 5) - if(HAS_TRAIT(user, TRAIT_PANICKED_ATTACKER)) + if(HAS_TRAIT(user, TRAIT_PANICKED_ATTACKER) || HAS_TRAIT(user, TRAIT_GHOULMELEE)) force_modifier = (-force * 0.8) // You do 20% damage cus ur scared else if(HAS_TRAIT(user, TRAIT_BIG_LEAGUES)) force_modifier += 5 - if(HAS_TRAIT(user, TRAIT_LITTLE_LEAGUES)) force_modifier += 3 - if(HAS_TRAIT(user, TRAIT_GENTLE)) force_modifier += -5 - if(HAS_TRAIT(user, TRAIT_WIMPY)) force_modifier += -10 - if(HAS_TRAIT(user, TRAIT_BUFFOUT_BUFF)) force_modifier += (force * 0.25) // maxes out your damage - if(HAS_TRAIT(user, TRAIT_FEV)) force_modifier += (force * 0.1) - if(HAS_TRAIT(user, TRAIT_SMUTANT)) force_modifier += (force * 0.1) - - if(HAS_TRAIT(user, TRAIT_GHOULMELEE)) //negative trait - force_modifier += (-force * 0.8) - force_modifier = clamp(force_modifier, -force, force * 0.25) var/force_out = force + force_modifier diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index cc2ae3631e9..cae699981ca 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -35,7 +35,11 @@ /mob/living/simple_animal/can_be_implanted() return healable //Applies to robots and most non-organics, exceptions can override. +/obj/item/implant/proc/post_implant(mob/living/target, mob/living/user, silent = FALSE) + return +/obj/item/implant/proc/post_removed(mob/living/source, silent = FALSE, special = 0) + return //What does the implant do upon injection? //return 1 if the implant injects @@ -85,7 +89,7 @@ if(user) log_combat(user, target, "implanted", "\a [name]") - + post_implant(target, user, silent) return TRUE /obj/item/implant/proc/removed(mob/living/source, silent = FALSE, special = 0) @@ -98,7 +102,7 @@ if(ishuman(source)) var/mob/living/carbon/human/H = source H.sec_hud_set_implants() - + post_removed(source, silent, special) return 1 /obj/item/implant/Destroy() diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index 543e49820c3..fee0d39653d 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -14,42 +14,60 @@ /obj/item/implant/adrenalin - name = "adrenal implant" - desc = "Removes all stuns." + name = "FighterFlight adrenal implant" + desc = "An implantable device that delivers a potent mix of rescue drugs when it detects critical injuries. May cause weakness, muscle spasms, and the complete inability to shoot straight. \ +

WARNING: This implant is not intended for use by the elderly, the infirm, or the pregnant. Multiple implants may have unintended effects. No refunds." icon_state = "adrenal" uses = 1 + actions_types = list() + var/juicing + /obj/item/implant/adrenalin/get_data() var/dat = {"Implant Specifications:
- Name: Cybersun Industries Adrenaline Implant
- Life: Five days.
- Important Notes: Illegal
+ Name: Nash Salvage and Research Endogenous Rescue Implant
+ Life: 48 hours.

- Implant Details: Subjects injected with implant can activate an injection of medical cocktails.
+ Implant Details: Delivers a dose of rescue drugs to the host upon critial injury.
+ Contents: Epinephrine, Coagulant, Water, Adrenaline.
Function: Removes stuns, increases speed, and has a mild healing effect.
- Integrity: Implant can only be used three times before reserves are depleted."} + Integrity: Implant is destroyed on use."} return dat -/obj/item/implant/adrenalin/activate() - . = ..() - uses-- +/obj/item/implant/adrenalin/post_implant(mob/living/target, mob/living/user, silent = FALSE) + RegisterSignal(target, COMSIG_MOB_STATCHANGE, .proc/prejuice) + return + +/obj/item/implant/adrenalin/post_removed(mob/living/source, silent = FALSE, special = 0) + UnregisterSignal(source, COMSIG_MOB_STATCHANGE) + return + +/obj/item/implant/adrenalin/proc/prejuice(datum/source, newstat) + if(juicing) + return + if(newstat == CONSCIOUS) + return + playsound(imp_in, 'sound/effects/autoinjector_beeps.ogg', 75, TRUE) + addtimer(CALLBACK(src, .proc/juice), 2 SECONDS) + + +/obj/item/implant/adrenalin/proc/juice() + playsound(imp_in, 'sound/effects/bamf.ogg', 75, TRUE) imp_in.do_adrenaline( - stamina_boost = 150, + stamina_boost = 75, put_on_feet = TRUE, - clamp_unconsciousness_to = 0, - clamp_immobilty_to = 0, + clamp_unconscious_to = 0, + clamp_immobility_to = 0, reset_misc = TRUE, healing_chems = list( /datum/reagent/medicine/epinephrine = 10, /datum/reagent/medicine/coagulant = 19, - /datum/reagent/medicine/salglu_solution = 100, - /datum/reagent/medicine/regen_jelly = 10, - /datum/reagent/medicine/stimulants = 10), - message = span_boldnotice("You feel a sudden surge of energy!") + /datum/reagent/water = 100, + /datum/reagent/medicine/adrenaline = 100 + ) ) - - to_chat(imp_in, span_notice("You feel a sudden surge of energy!")) - if(!uses) + to_chat(imp_in, span_userdanger("You feel your adrenal implant burst!")) + if(uses-- <= 0) qdel(src) /obj/item/implant/warp diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 58f94995439..1607f4f3e49 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -227,7 +227,7 @@ thrown_thing.safe_throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed + power_throw, src, null, null, null, move_force, random_turn) /mob/living/carbon/restrained(ignore_grab) - . = (handcuffed || (!ignore_grab && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE)) + . = (handcuffed || (!ignore_grab && pulledby && pulledby.grab_state >= GRAB_NECK)) /mob/living/carbon/proc/canBeHandcuffed() return 0 diff --git a/code/modules/mob/living/carbon/carbon_sprint.dm b/code/modules/mob/living/carbon/carbon_sprint.dm index c5eeace2d26..269089d56be 100644 --- a/code/modules/mob/living/carbon/carbon_sprint.dm +++ b/code/modules/mob/living/carbon/carbon_sprint.dm @@ -1,16 +1,13 @@ /// Sprint buffer /// /mob/living/carbon/doSprintLossTiles(tiles) doSprintBufferRegen(FALSE) //first regen. - if(sprint_buffer) + if(sprint_buffer && !HAS_TRAIT(src, TRAIT_ENDLESS_RUNNER)) var/use = min(tiles, sprint_buffer) - if(HAS_TRAIT(src, TRAIT_ENDLESS_RUNNER)) - use = 0 - else if(HAS_TRAIT(src, TRAIT_ZOOMIES)) + if(HAS_TRAIT(src, TRAIT_ZOOMIES)) use *= 0.65 else if(HAS_TRAIT(src, TRAIT_SUPER_ZOOMIES)) use *= 0.35 - else - sprint_buffer -= use + sprint_buffer -= use tiles -= use update_hud_sprint_bar() if(!tiles) //we had enough, we're done! diff --git a/code/modules/mob/living/carbon/human/human_mobility.dm b/code/modules/mob/living/carbon/human/human_mobility.dm index 2406a85e1b8..17ba8cfc0d3 100644 --- a/code/modules/mob/living/carbon/human/human_mobility.dm +++ b/code/modules/mob/living/carbon/human/human_mobility.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/resist_a_rest(automatic = FALSE, ignoretimer = FALSE) +/mob/living/carbon/human/resist_a_rest(automatic = FALSE, ignoretimer = FALSE, silent = FALSE) if(!resting || stat || (combat_flags & COMBAT_FLAG_RESISTING_REST)) return FALSE if(ignoretimer) @@ -8,12 +8,12 @@ set_resting(FALSE, FALSE) return TRUE else if(!CHECK_MOBILITY(src, MOBILITY_RESIST)) - if(!automatic) + if(!automatic && !silent) to_chat(src, span_warning("You are unable to stand up right now.")) return FALSE else var/totaldelay = 3 //A little bit less than half of a second as a baseline for getting up from a rest - if(IS_STAMCRIT(src)) + if(IS_STAMCRIT(src) && !silent) to_chat(src, "You're too exhausted to get up!") return FALSE combat_flags |= COMBAT_FLAG_RESISTING_REST @@ -21,20 +21,23 @@ if(!has_gravity()) health_deficiency = health_deficiency*0.2 totaldelay += health_deficiency - var/standupwarning = "[src] and everyone around them should probably yell at the dev team" - switch(health_deficiency) - if(-INFINITY to 10) - standupwarning = "[src] stands right up!" - if(10 to 35) - standupwarning = "[src] tries to stand up." - if(35 to 60) - standupwarning = "[src] slowly pushes [p_them()]self upright." - if(60 to 80) - standupwarning = "[src] weakly attempts to stand up." - if(80 to INFINITY) - standupwarning = "[src] struggles to stand up." - var/usernotice = automatic ? span_notice("You are now getting up. (Auto)") : span_notice("You are now getting up.") - visible_message(span_notice("[standupwarning]"), usernotice, vision_distance = 5) + if(!silent) + var/standupwarning = "[src] and everyone around them should probably yell at the dev team" + switch(health_deficiency) + if(-INFINITY to 10) + standupwarning = "[src] stands right up!" + if(10 to 35) + standupwarning = "[src] tries to stand up." + if(35 to 60) + standupwarning = "[src] slowly pushes [p_them()]self upright." + if(60 to 80) + standupwarning = "[src] weakly attempts to stand up." + if(80 to INFINITY) + standupwarning = "[src] struggles to stand up." + var/usernotice = automatic ? span_notice("You are now getting up. (Auto)") : span_notice("You are now getting up.") + visible_message(span_notice("[standupwarning]"), usernotice, vision_distance = 5) + if(HAS_TRAIT(src, TRAIT_ENDLESS_RUNNER)) + totaldelay = 0.1 SECONDS // =3 if(do_after(src, totaldelay, target = src, required_mobility_flags = MOBILITY_RESIST)) set_resting(FALSE, TRUE) @@ -43,7 +46,8 @@ else combat_flags &= ~COMBAT_FLAG_RESISTING_REST if(resting) //we didn't shove ourselves up or something - visible_message(span_notice("[src] falls right back down."), span_notice("You fall right back down.")) + if(!silent) + visible_message(span_notice("[src] falls right back down."), span_notice("You fall right back down.")) if(has_gravity()) playsound(src, "bodyfall", 20, 1) return FALSE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e772b5f6588..ccb32d1a052 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1378,6 +1378,7 @@ update_stamina() update_mobility() if(healing_chems) + reagents.remove_all(999) reagents.add_reagent_list(healing_chems) /mob/living/canface() diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index a40312d0b12..354e6bd9b6a 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -58,7 +58,7 @@ else resist_a_rest() -/mob/living/proc/resist_a_rest(automatic = FALSE, ignoretimer = FALSE) //Lets mobs resist out of resting. Major QOL change with combat reworks. +/mob/living/proc/resist_a_rest(automatic = FALSE, ignoretimer = FALSE, silent = FALSE) //Lets mobs resist out of resting. Major QOL change with combat reworks. set_resting(FALSE, TRUE) return TRUE @@ -81,7 +81,7 @@ var/chokehold = pulledby && pulledby.grab_state >= GRAB_NECK var/restrained = restrained() - var/pinned = resting && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE // Cit change - adds pinning for aggressive-grabbing people on the ground + var/pinned = resting && pulledby && pulledby.grab_state >= GRAB_NECK // Cit change - adds pinning for aggressive-grabbing people on the ground var/has_limbs = has_arms || ignore_legs || has_legs var/canmove = !immobilize && !stun && conscious && !paralyze && (!stat_softcrit || !pulledby) && !chokehold && !IsFrozen() && has_limbs && !pinned && !(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) var/canresist = !stun && conscious && !stat_softcrit && !paralyze && has_limbs && !(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 5ee3ea8ee64..bbbf13425f6 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -39,7 +39,9 @@ gun_bullet_spread += distro || 0 // gun's inaccuracy gun_bullet_spread += variance || 0 // cartridge's inaccuracy var/player_spread = spread // spread is the player's recoil - if(HAS_TRAIT(user,TRAIT_INSANE_AIM)) + if(HAS_TRAIT(user,TRAIT_PANICKED_ATTACKER)) + player_spread = 100 // lol + else if(HAS_TRAIT(user,TRAIT_INSANE_AIM)) player_spread = 0 // nice shot else if(HAS_TRAIT(user,TRAIT_FEV)) //You really shouldn't try this at home. @@ -66,6 +68,8 @@ BB.def_zone = user.zone_selected BB.suppressed = quiet BB.damage_threshold_penetration = damage_threshold_penetration + if(HAS_TRAIT(user,TRAIT_PANICKED_ATTACKER)) + BB.damage *= 0.2 // lol if(isgun(fired_from)) var/obj/item/gun/G = fired_from diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 8849da1f56b..c24e5f2ef55 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1810,29 +1810,96 @@ description = "A synthetic cocktail of drugs designed to set a person's fight or flight to FLIGHT." color = "#918e53" value = REAGENT_VALUE_VERY_RARE - metabolization_rate = 5 * REAGENTS_METABOLISM + overdose_threshold = 100 + metabolization_rate = 20 * REAGENTS_METABOLISM ghoulfriendly = TRUE /datum/reagent/medicine/adrenaline/on_mob_metabolize(mob/living/L) ..() ADD_TRAIT(L, TRAIT_PANICKED_ATTACKER, type) + ADD_TRAIT(L, TRAIT_ENDLESS_RUNNER, type) ADD_TRAIT(L, TRAIT_NOSOFTCRIT, type) L.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) ADD_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, "[type]") to_chat(L, span_danger("Your body surges with panicked energy! You feel like you could run forever, but your shaking \ hands make it next to impossible to fight!")) + L.resist_a_rest(automatic = TRUE, ignoretimer = TRUE, silent = TRUE) /datum/reagent/medicine/adrenaline/on_mob_end_metabolize(mob/living/L) + to_chat(L, span_danger("Your body's panicked energy fades away. The shakes are gone, but you feel exhausted.")) REMOVE_TRAIT(L, TRAIT_PANICKED_ATTACKER, type) + REMOVE_TRAIT(L, TRAIT_ENDLESS_RUNNER, type) REMOVE_TRAIT(L, TRAIT_NOSOFTCRIT, type) L.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) REMOVE_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, "[type]") + L.adjustStaminaLoss(200) ..() /datum/reagent/medicine/adrenaline/on_mob_life(mob/living/carbon/M as mob) M.AdjustUnconscious(-20, 0) M.AdjustAllImmobility(-20, 0) M.AdjustSleeping(-20, 0) + M.jitteriness = 20 + switch(rand(1,100)) + if(1 to 10) + M.emote("scream") + if(10 to 15) + M.emote("twitch") + var/obj/item/mainhand = M.get_active_held_item() + if(mainhand) + M.drop_all_held_items() + to_chat(M, span_userdanger("Your hands flinch and fumble your [mainhand] to the ground!!")) + else + if(prob(50)) + var/emote_to_do = pick( + "twitch", + "shake", + "shiver", + "tremble", + "twitch_s", + "sway", + "whimper", + "drool", + "scrungy", + ) + M.emote(emote_to_do) ..() return TRUE +/datum/reagent/medicine/adrenaline/overdose_process(mob/living/M) + . = ..() + if(prob(50)) + return + switch(rand(1,9)) + if(1) + to_chat(M, span_danger("Your legs wont stop shaking!")) + M.confused = clamp(M.confused + 2, 1, 200) + if(2) + to_chat(M, span_danger("Your eyes ache!")) + M.blur_eyes(5) + if(3) + emote("gasp") + M.losebreath = clamp(M.losebreath + 3, 1, 10) + if(4) + to_chat(M, span_danger("You feel your veins burn!")) + M.adjustToxLoss(2) + if(5) + to_chat(M, span_danger("Your insides feel like they're on fire!")) + M.adjustOrganLoss(ORGAN_SLOT_EYES, 3) + M.adjustOrganLoss(ORGAN_SLOT_LUNGS, 1, 40) + M.adjustOrganLoss(ORGAN_SLOT_HEART, 1, 40) + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2, BRAIN_DAMAGE_MILD) + if(6) + to_chat(M, span_danger("You feel sick to your stomach!")) + M.disgust = max(0, M.disgust+50) + if(7) + to_chat(M, span_danger("Your heart is beating so fast you can feel it in your throat!")) + M.adjustStaminaLoss(10*REAGENTS_EFFECT_MULTIPLIER) + if(8) + M.Jitter(20) + if(9) + M.playsound_local(M, 'sound/effects/singlebeat.ogg', 100, 0) + if(10) + to_chat(M, span_danger("You throw up everything you've eaten in the past week and some blood to boot. You're pretty sure your heart just stopped for a second, too.")) + M.vomit(30, 1, 1, 5, 0, 0, 0, 60) + diff --git a/sound/effects/autoinjector_beeps.ogg b/sound/effects/autoinjector_beeps.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cc8eeb8bc2af21191de476ee8a38a96844a79fb7 GIT binary patch literal 18241 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 literal 0 HcmV?d00001 From 694a52c55a5ad3cafb1a9a68762083510c13ee84 Mon Sep 17 00:00:00 2001 From: Superlagg Date: Mon, 26 Jun 2023 19:04:43 -0700 Subject: [PATCH 3/4] you can move and choke me, daddy --- code/modules/mob/living/living_defense.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 948782b7ba7..fb1da3a8e1f 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -255,7 +255,7 @@ if(user.grab_state) //only the first upgrade is instantaneous var/old_grab_state = user.grab_state - var/grab_upgrade_time = instant ? 0 : 30 + var/grab_upgrade_time = instant ? 0 : 3 SECONDS visible_message(span_danger("[user] starts to tighten [user.p_their()] grip on [src]!"), \ span_userdanger("[user] starts to tighten [user.p_their()] grip on you!"), target = user, target_message = span_danger("You start to tighten your grip on [src]!")) @@ -264,7 +264,7 @@ log_combat(user, src, "attempted to neck grab", addition="neck grab") if(GRAB_NECK) log_combat(user, src, "attempted to strangle", addition="kill grab") - if(!do_mob(user, src, grab_upgrade_time)) + if(!do_mob(user, src, grab_upgrade_time, allow_movement = TRUE, public_progbar = TRUE)) return 0 if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state || user.a_intent != INTENT_GRAB) return 0 From 68cab57a8dd51bb0124bc5f6155ba8b33ec526c5 Mon Sep 17 00:00:00 2001 From: Superlagg Date: Mon, 26 Jun 2023 19:29:45 -0700 Subject: [PATCH 4/4] choke --- .../reagents/chemistry/reagents/medicine_reagents.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index c24e5f2ef55..00410445394 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1866,11 +1866,13 @@ ..() return TRUE -/datum/reagent/medicine/adrenaline/overdose_process(mob/living/M) +/datum/reagent/medicine/adrenaline/overdose_process(mob/living/carbon/M) . = ..() + if(!iscarbon(M)) + return if(prob(50)) return - switch(rand(1,9)) + switch(rand(1,10)) if(1) to_chat(M, span_danger("Your legs wont stop shaking!")) M.confused = clamp(M.confused + 2, 1, 200) @@ -1878,7 +1880,7 @@ to_chat(M, span_danger("Your eyes ache!")) M.blur_eyes(5) if(3) - emote("gasp") + M.emote("gasp") M.losebreath = clamp(M.losebreath + 3, 1, 10) if(4) to_chat(M, span_danger("You feel your veins burn!"))