From 02dc41e46c7b4755f6e2d6b138c4eb22d420aa8e Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Fri, 15 May 2026 20:34:14 -0500 Subject: [PATCH] Buffs the good aspects of Spacer by a little bit, so people might actually notice them (#96009) --- code/datums/quirks/positive_quirks/spacer.dm | 17 ++++-- code/datums/status_effects/debuffs/spacer.dm | 55 ++++++++++++++----- .../reagents/chemistry/holder/mob_life.dm | 2 +- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index 64d9d08633d..dfbc5ad1f7d 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -30,6 +30,11 @@ /// Determines the last state we were in ([LAST_STATE_PLANET], [LAST_STATE_SPACE], or [LAST_STATE_NOGRAV]) VAR_FINAL/last_state + /// Modifier to damage taken from pressure/cold + VAR_FINAL/damage_mod = 0.66 + /// Modifier to drift speed in zero G + VAR_FINAL/drift_mod = 0.75 + /datum/quirk/spacer_born/add(client/client_source) if(isdummy(quirk_holder)) return @@ -45,12 +50,12 @@ update_effects(quirk_holder, skip_timers = TRUE) // drift slightly faster through zero G - quirk_holder.inertia_move_multiplier *= 0.8 + quirk_holder.inertia_move_multiplier *= drift_mod var/mob/living/carbon/human/human_quirker = quirk_holder human_quirker.set_mob_height(modded_height) - human_quirker.physiology.pressure_mod *= 0.8 - human_quirker.physiology.cold_mod *= 0.8 + human_quirker.physiology.pressure_mod *= damage_mod + human_quirker.physiology.cold_mod *= damage_mod /datum/quirk/spacer_born/post_add() var/on_a_planet = SSmapping.is_planetary() @@ -76,15 +81,15 @@ if(QDELING(quirk_holder)) return - quirk_holder.inertia_move_multiplier /= 0.8 + quirk_holder.inertia_move_multiplier /= drift_mod quirk_holder.clear_mood_event("spacer") quirk_holder.remove_movespeed_modifier(/datum/movespeed_modifier/spacer) quirk_holder.remove_status_effect(/datum/status_effect/spacer) var/mob/living/carbon/human/human_quirker = quirk_holder human_quirker.set_mob_height(HUMAN_HEIGHT_MEDIUM) - human_quirker.physiology.pressure_mod /= 0.8 - human_quirker.physiology.cold_mod /= 0.8 + human_quirker.physiology.pressure_mod /= damage_mod + human_quirker.physiology.cold_mod /= damage_mod /// Check on Z change whether we should start or stop timers /datum/quirk/spacer_born/proc/spacer_moved(mob/living/source, turf/old_turf, turf/new_turf, same_z_layer) diff --git a/code/datums/status_effects/debuffs/spacer.dm b/code/datums/status_effects/debuffs/spacer.dm index 99b724b1d35..7fa342370e2 100644 --- a/code/datums/status_effects/debuffs/spacer.dm +++ b/code/datums/status_effects/debuffs/spacer.dm @@ -18,33 +18,58 @@ // The good side (being in space) /datum/status_effect/spacer/gravity_wellness alert_type = null - tick_interval = 3 SECONDS + tick_interval = 1 SECONDS /// How much disgust to heal per tick - var/disgust_healing_per_tick = 1.5 - /// How much of stamina damage to heal per tick when we've been in nograv for a while - var/stamina_heal_per_tick = 3 + var/disgust_healing_per_second = 0.5 + /// How much of stamina damage to heal per tick when we've been in nograv for a while. + var/stamina_heal_per_second = 4 /// How many seconds of stuns to reduce per tick when we've been in nograv for a while - var/stun_heal_per_tick = 3 SECONDS + var/stun_heal_per_second = 2 SECONDS + /// How much to reduce incoming knockdown effects while in nograv for a while + var/knockdown_multiplier = 0.75 /// Tracks how long we've been in no gravity VAR_FINAL/seconds_in_nograv = 0 SECONDS + /// Tracks if we've applied knockdown modifier reduction to the mob + VAR_FINAL/knockdown_mod_applied = FALSE /datum/status_effect/spacer/gravity_wellness/tick(seconds_between_ticks) var/in_nograv = !owner.has_gravity() - var/nograv_mod = in_nograv ? 1 : 0.5 - owner.adjust_disgust(-1 * disgust_healing_per_tick * nograv_mod) + var/nograv_mod = in_nograv ? 2 : 0.5 + owner.adjust_disgust(-1 * nograv_mod * disgust_healing_per_second * seconds_between_ticks) if(!in_nograv) seconds_in_nograv = 0 SECONDS + if(knockdown_mod_applied) + remove_knockdown_mod() return seconds_in_nograv += (seconds_between_ticks * 0.1) - if(seconds_in_nograv >= 3 MINUTES) - // This has some interesting side effects with gravitum or similar negating effects that may be worth nothing - owner.adjust_stamina_loss(-1 * stamina_heal_per_tick) - owner.AdjustAllImmobility(-1 * stun_heal_per_tick) - // For comparison: Ephedrine heals 4 stamina per tick / 2 per second - // and Nicotine heals 5 seconds of stun per tick / 2.5 per second + if(seconds_in_nograv >= 1 MINUTES) + // With 4 stamina healing per second you'd get out of stamcrit in 6 seconds instead of the usual 10 + owner.adjust_stamina_loss(-1 * stamina_heal_per_second * seconds_between_ticks) + if(seconds_in_nograv >= 10 SECONDS) + owner.AdjustAllImmobility(-1 * stun_heal_per_second * seconds_between_ticks) + if(!knockdown_mod_applied) + apply_knockdown_mod() + +/datum/status_effect/spacer/gravity_wellness/on_remove() + . = ..() + remove_knockdown_mod() + +/datum/status_effect/spacer/gravity_wellness/proc/apply_knockdown_mod() + if(knockdown_mod_applied || !ishuman(owner)) + return + var/mob/living/carbon/human/the_spacer = owner + the_spacer.physiology.knockdown_mod *= knockdown_multiplier + knockdown_mod_applied = TRUE + +/datum/status_effect/spacer/gravity_wellness/proc/remove_knockdown_mod() + if(!knockdown_mod_applied || !ishuman(owner)) + return + var/mob/living/carbon/human/the_spacer = owner + the_spacer.physiology.knockdown_mod /= knockdown_multiplier + knockdown_mod_applied = FALSE // The bad side (being on a planet) /datum/status_effect/spacer/gravity_sickness @@ -125,7 +150,7 @@ /datum/movespeed_modifier/spacer/in_space movetypes = FLOATING blacklisted_movetypes = FLYING - multiplicative_slowdown = -0.1 + multiplicative_slowdown = -0.15 /datum/movespeed_modifier/spacer/on_planet movetypes = GROUND|FLYING @@ -136,4 +161,4 @@ multiplicative_slowdown = 0.5 /datum/movespeed_modifier/spacer/on_planet/nerfed - multiplicative_slowdown = 0.25 + multiplicative_slowdown = 0.15 diff --git a/code/modules/reagents/chemistry/holder/mob_life.dm b/code/modules/reagents/chemistry/holder/mob_life.dm index 693dc8bb885..b90d825c6aa 100644 --- a/code/modules/reagents/chemistry/holder/mob_life.dm +++ b/code/modules/reagents/chemistry/holder/mob_life.dm @@ -106,7 +106,7 @@ if(tick_return & COMSIG_MOB_STOP_REAGENT_TICK) return FALSE - if(liverless && !reagent.self_consuming) //need to be metabolized + if(liverless && !reagent.self_consuming) //need to be6 metabolized return FALSE var/need_mob_update = FALSE