From 4653deddecf57740477dc5aee3794ae6ed772a8a Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Mon, 28 Jun 2021 12:55:22 -0700 Subject: [PATCH] updates --- code/modules/movespeed/modifiers/reagents.dm | 19 ++++- .../movespeed/modifiers/status_effects.dm | 8 ++ code/modules/ninja/suit/suit.dm | 15 ++-- .../chemistry/reagents/food_reagents.dm | 4 + .../chemistry/reagents/medicine_reagents.dm | 85 +++++++++++++------ .../crossbreeding/_status_effects.dm | 22 +++-- 6 files changed, 108 insertions(+), 45 deletions(-) diff --git a/code/modules/movespeed/modifiers/reagents.dm b/code/modules/movespeed/modifiers/reagents.dm index b7108582d9..0be4230cfe 100644 --- a/code/modules/movespeed/modifiers/reagents.dm +++ b/code/modules/movespeed/modifiers/reagents.dm @@ -5,7 +5,11 @@ multiplicative_slowdown = -0.55 /datum/movespeed_modifier/reagent/ephedrine - multiplicative_slowdown = -0.5 + // strong painkiller effect that caps out at slightly above runspeed + multiplicative_slowdown = -1.5 + priority = -100 + complex_calculation = TRUE + absolute_max_tiles_per_second = 7 /datum/movespeed_modifier/reagent/pepperspray multiplicative_slowdown = 0.25 @@ -14,10 +18,19 @@ multiplicative_slowdown = -0.35 /datum/movespeed_modifier/reagent/changelinghaste - multiplicative_slowdown = -0.8 + // extremely strong painkiller effect: allows user to run at old sprint speeds but not over by cancelling out slowdowns. + // however, will not make user go faster than that + multiplicative_slowdown = -4 + priority = -100 + complex_calculation = TRUE + absolute_max_tiles_per_second = 8 /datum/movespeed_modifier/reagent/methamphetamine - multiplicative_slowdown = -0.65 + // very strong painkiller effect that caps out at slightly above runspeed + multiplicative_slowdown = -2.5 + priority = -100 + complex_calculation = TRUE + absolute_max_tiles_per_second = 7.5 /datum/movespeed_modifier/reagent/nitryl multiplicative_slowdown = -0.65 diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm index 1adfe8b4be..260ee17c21 100644 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -51,3 +51,11 @@ /datum/movespeed_modifier/status_effect/off_balance variable = TRUE + +/datum/movespeed_modifier/status_effect/slime/light_pink + // decently good painkiller + speedup effect + blacklisted_movetypes = FLYING | FLOATING + priority = -150 // someday we really need to make these defines lmao + multiplicative_slowdown = -2 + complex_calculation = TRUE + absolute_max_tiles_per_second = 7 diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index ed711771bf..15071a186f 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -77,6 +77,11 @@ Contents: cell.name = "black power cell" cell.icon_state = "bscell" +/obj/item/clothing/suit/space/space_ninja/Destroy() + if(affecting) + unlock_suit() + return ..() + //Simply deletes all the attachments and self, killing all related procs. /obj/item/clothing/suit/space/space_ninja/proc/terminate() qdel(n_hood) @@ -84,7 +89,6 @@ Contents: qdel(n_shoes) qdel(src) - //Randomizes suit parameters. /obj/item/clothing/suit/space/space_ninja/proc/randomize_param() s_cost = rand(1,20) @@ -93,7 +97,6 @@ Contents: s_bombs = rand(5,20) a_boost = rand(1,7) - //This proc prevents the suit from being taken off. /obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H) if(!istype(H)) @@ -113,14 +116,14 @@ Contents: return FALSE affecting = H ADD_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) //colons make me go all |= - slowdown = 0 n_hood = H.head ADD_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) n_shoes = H.shoes ADD_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes.slowdown -= 0.5 + n_shoes.slowdown = -0.25 n_gloves = H.gloves ADD_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) + ADD_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT) return TRUE /obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H) @@ -133,19 +136,19 @@ Contents: /obj/item/clothing/suit/space/space_ninja/proc/unlock_suit() affecting = null REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) - slowdown = 1 icon_state = "s-ninja" if(n_hood)//Should be attached, might not be attached. REMOVE_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) if(n_shoes) REMOVE_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes.slowdown += 0.5 + n_shoes.slowdown = 0.25 if(n_gloves) n_gloves.icon_state = "s-ninja" n_gloves.item_state = "s-ninja" REMOVE_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) n_gloves.candrain=0 n_gloves.draining=0 + REMOVE_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT) /obj/item/clothing/suit/space/space_ninja/examine(mob/user) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 90082c464b..a9bdff64b2 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -345,6 +345,8 @@ victim.confused = max(M.confused, 3) victim.damageoverlaytemp = 60 victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 3, 15)) + victim.add_movespeed_modifier(/datum/movespeed_modifier/reagent/pepperspray) + addtimer(CALLBACK(victim, /mob.proc/remove_movespeed_modifier, /datum/movespeed_modifier/reagent/pepperspray), 10 SECONDS) return else if ( eyes_covered ) // Eye cover is better than mouth cover victim.blur_eyes(3) @@ -358,6 +360,8 @@ victim.confused = max(M.confused, 6) victim.damageoverlaytemp = 75 victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 5, 25)) + victim.add_movespeed_modifier(/datum/movespeed_modifier/reagent/pepperspray) + addtimer(CALLBACK(victim, /mob.proc/remove_movespeed_modifier, /datum/movespeed_modifier/reagent/pepperspray), 10 SECONDS) victim.update_damage_hud() /datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 65443b65c7..2bda4a97bd 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -706,21 +706,42 @@ addiction_threshold = 30 pH = 12 -/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M) - M.AdjustAllImmobility(-20, FALSE) - M.AdjustUnconscious(-20, FALSE) - M.adjustStaminaLoss(-4.5*REM, FALSE) - M.Jitter(10) - if(prob(50)) - M.confused = max(M.confused, 1) +/datum/reagent/medicine/ephedrine/on_mob_metabolize(mob/living/L) + ..() + L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/ephedrine) + ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type) + +/datum/reagent/medicine/ephedrine/on_mob_end_metabolize(mob/living/L) + L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/ephedrine) + REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type) + ..() + +/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M, delta_time, times_fired) + // if(DT_PROB(10 * (1-creation_purity), delta_time) && iscarbon(M)) + // var/obj/item/I = M.get_active_held_item() + // if(I && M.dropItemToGround(I)) + // to_chat(M, span_notice("Your hands spaz out and you drop what you were holding!")) + // M.Jitter(10) + + M.AdjustAllImmobility(-20 * REM * delta_time * normalise_creation_purity()) + M.adjustStaminaLoss(-1 * REM * delta_time * normalise_creation_purity(), FALSE) ..() return TRUE -/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M) - if(prob(33)) - M.adjustToxLoss(0.5*REM, 0) +/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M, delta_time, times_fired) + if(DT_PROB(1 * normalise_creation_purity(), delta_time) && iscarbon(M)) + var/datum/disease/D = new /datum/disease/heart_failure + M.ForceContractDisease(D) + to_chat(M, span_userdanger("You're pretty sure you just felt your heart stop for a second there..")) + M.playsound_local(M, 'sound/effects/singlebeat.ogg', 100, 0) + + if(DT_PROB(3.5 * normalise_creation_purity(), delta_time)) + to_chat(M, span_notice("[pick("Your head pounds.", "You feel a tight pain in your chest.", "You find it hard to stay still.", "You feel your heart practically beating out of your chest.")]")) + + if(DT_PROB(18 * normalise_creation_purity(), delta_time)) + M.adjustToxLoss(1, 0) M.losebreath++ - . = 1 + . = TRUE return TRUE /datum/reagent/medicine/ephedrine/addiction_act_stage1(mob/living/M) @@ -1415,37 +1436,44 @@ /datum/reagent/medicine/changelingadrenaline name = "Changeling Adrenaline" description = "Reduces the duration of unconciousness, knockdown and stuns. Restores stamina, but deals toxin damage when overdosed." - color = "#918e53" + color = "#C1151D" overdose_threshold = 30 + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED value = REAGENT_VALUE_VERY_RARE +/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/metabolizer, delta_time, times_fired) + ..() + metabolizer.AdjustAllImmobility(-20 * REM * delta_time) + metabolizer.adjustStaminaLoss(-10 * REM * delta_time, 0) + metabolizer.Jitter(10 * REM * delta_time) + metabolizer.Dizzy(10 * REM * delta_time) + return TRUE + /datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L) ..() + ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, type) ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type) + L.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) /datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/L) + ..() + REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, type) REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type) - ..() + L.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) + L.Dizzy(0) + L.Jitter(0) -/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/M as mob) - M.AdjustUnconscious(-20, 0) - M.AdjustAllImmobility(-20, 0) - M.AdjustSleeping(-20, 0) - M.adjustStaminaLoss(-30, 0) - ..() - return TRUE - -/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/M as mob) - M.adjustToxLoss(5, 0) //let's make this mildly more toxic because of the stamina buff +/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/metabolizer, delta_time, times_fired) + metabolizer.adjustToxLoss(1 * REM * delta_time, 0) ..() return TRUE /datum/reagent/medicine/changelinghaste name = "Changeling Haste" description = "Drastically increases movement speed, but deals toxin damage." - color = "#669153" - metabolization_rate = 1 - value = REAGENT_VALUE_VERY_RARE + color = "#AE151D" + metabolization_rate = 2.5 * REAGENTS_METABOLISM + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L) ..() @@ -1455,11 +1483,12 @@ L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste) ..() -/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M) - M.adjustToxLoss(2, 0) +/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/metabolizer, delta_time, times_fired) + metabolizer.adjustToxLoss(2 * REM * delta_time, 0) ..() return TRUE + /datum/reagent/medicine/corazone // Heart attack code will not do damage if corazone is present // because it's SPACE MAGIC ASPIRIN diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index f3e14993ed..9d074fc90d 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -702,16 +702,20 @@ /datum/status_effect/stabilized/sepia id = "stabilizedsepia" colour = "sepia" - var/mod = 0 + var/list/possible = list( + -0.5, + -0.25, + 0, + 0.5, + 1 + ) + +/datum/status_effect/stabilized/sepia/New(list/arguments) + . = ..() + possible = typelist(NAMEOF(src, possible), possible) /datum/status_effect/stabilized/sepia/tick() - if(prob(50) && mod > -1) - mod-- - owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 1) - else if(mod < 1) - mod++ - // yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly - owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0) + owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = safepick(possible)) return ..() /datum/status_effect/stabilized/sepia/on_remove() @@ -932,6 +936,7 @@ /datum/status_effect/stabilized/lightpink/on_apply() ADD_TRAIT(owner, TRAIT_FREESPRINT, "stabilized_slime") + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/slime/light_pink) return ..() /datum/status_effect/stabilized/lightpink/tick() @@ -943,6 +948,7 @@ /datum/status_effect/stabilized/lightpink/on_remove() REMOVE_TRAIT(owner, TRAIT_FREESPRINT, "stabilized_slime") + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/slime/light_pink) return ..() /datum/status_effect/stabilized/adamantine