Bugfixes - Slowdowns, Sofa spinning, Turbolift squishing, and more (#22043)

Fixes https://github.com/Aurorastation/Aurora.3/issues/21669
Fixes https://github.com/Aurorastation/Aurora.3/issues/21951
Fixes https://github.com/Aurorastation/Aurora.3/issues/21972
Fixes https://github.com/Aurorastation/Aurora.3/issues/22077

changes:
- bugfix: "All movespeed_modifier slowdown data now applied correctly
post-smooth movement PR. IE: active magboots, duffel bags, etc. again
slow you down."
  - bugfix: "Sofas no longer able to be rotated while anchored."
- bugfix: "Attempting to use crowbars, fire axes, hammers on airlocks
while in the Hurt intent will now make you attack the airlock."
- bugfix: "Fixes graphical bug with open lid graphics for crates painted
in any engineering color variants."
- bugfix: "Individual butterfly knife parts are no longer larger than
butterfly knives themselves."
- bugfix: "Elevators that squish mobs (any type of mob/living) will now
appropriately gib instead of just quietly deleting them."
- rscadd: "Miniature fusion reactor explosions now use subsystem
radiation instead of manually applying rad damage to all mobs in range."
This commit is contained in:
Batrachophreno
2026-03-30 18:44:39 +00:00
committed by GitHub
parent d883a05005
commit 71c18374db
8 changed files with 83 additions and 40 deletions
+5
View File
@@ -299,6 +299,11 @@
var/tally = mob.movement_delay() + GLOB.config.walk_speed
// Factor in delay from sources handled by the mob's movespeed_modifier datum (this is what we Should be using).
var/movespeed_modifier_delay = mob.cached_multiplicative_slowdown
move_delay += movespeed_modifier_delay
// Apply human specific modifiers.
var/mob_is_human = ishuman(mob) // Only check this once and just reuse the value.
var/sprint_tally = 0
+28 -22
View File
@@ -21,7 +21,7 @@
. += "Upgraded <b>capacitors</b> will increase maximum power output."
/obj/machinery/power/portgen/feedback_hints(mob/user, distance, is_adjacent)
. = ..()
. += ..()
if(active)
. += "The generator is on."
else
@@ -120,18 +120,28 @@
temperature_gain and max_temperature are set so that the max safe power level is 4.
Setting to 5 or higher can only be done temporarily before the generator overheats.
*/
power_gen = 50000 //Watts output per power_output level
var/max_power_output = 5 //The maximum power setting without emagging.
var/max_safe_output = 4 // For UI use, maximal output that won't cause overheat.
var/time_per_sheet = 576 //fuel efficiency - how long 1 sheet lasts at power level 1
var/max_sheets = 50 //max capacity of the hopper
var/max_temperature = 300 //max temperature before overheating increases
var/temperature_gain = 50 //how much the temperature increases per power output level, in degrees per level
var/sheets = 0 //How many sheets of material are loaded in the generator
var/sheet_left = 0 //How much is left of the current sheet
var/temperature = 0 //The current temperature
var/overheating = 0 //if this gets high enough the generator explodes
/// Watts output per power_output level
power_gen = 50000
/// The maximum power setting without emagging.
var/max_power_output = 5
/// For UI use, maximal output that won't cause overheat.
var/max_safe_output = 4
/// Fuel efficiency - how long 1 sheet lasts at power level 1
var/time_per_sheet = 576
/// Max capacity of the hopper
var/max_sheets = 50
/// Max temperature before overheating increases
var/max_temperature = 300
/// How much the temperature increases per power output level, in degrees per level
var/temperature_gain = 50
/// How many sheets of material are loaded in the generator
var/sheets = 0
/// How much is left of the current sheet
var/sheet_left = 0
/// The current temperature
var/temperature = 0
/// If this gets high enough the generator explodes
var/overheating = 0
component_types = list(
/obj/item/stock_parts/matter_bin,
@@ -428,7 +438,7 @@
/obj/machinery/power/portgen/basic/advanced/explode()
//a nice burst of radiation
var/rads = 50 + (sheets + sheet_left)*1.5
var/rads = 20 + (sheets + sheet_left)*1.5
SSradiation.radiate(src, max(40, rads))
explosion(loc, 3, 3, 5, 3)
qdel(src)
@@ -467,8 +477,8 @@
base_icon = "reactor"
portgen_lightcolour = "#458943"
max_safe_output = 5
max_power_output = 8 //The maximum power setting without emagging.
temperature_gain = 70 //how much the temperature increases per power output level, in degrees per level
max_power_output = 8
temperature_gain = 70
max_temperature = 450
time_per_sheet = 400
@@ -485,12 +495,8 @@
/obj/machinery/power/portgen/basic/fusion/explode()
//a nice burst of radiation
var/rads = 50 + (sheets + sheet_left)*1.5
for (var/mob/living/L in range(src, 10))
//should really fall with the square of the distance, but that makes the rads value drop too fast
//I dunno, maybe physics works different when you live in 2D -- SM radiation also works like this, apparently
L.apply_damage(max(20, round(rads/get_dist(L,src))), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
var/rads = 40 + (sheets + sheet_left)*1.5
SSradiation.radiate(src, max(50, rads))
explosion(loc, 3, 6, 12, 16, 1)
qdel(src)
+11 -2
View File
@@ -95,13 +95,22 @@
if(!moving_upwards)
for(var/turf/T in destination)
for(var/atom/movable/AM in T)
AM.crush_act()
// for most Atom Movables, we'll more or less just delete them. Mobs get special treatment.
if(istype(AM, /mob/living))
var/mob/living/safety_hater = AM
safety_hater.gib()
else
AM.crush_act()
else
for(var/turf/simulated/wall/W in origin)
var/turf/T = GET_TURF_ABOVE(W)
for(var/atom/movable/AM in T)
if(next_floor == floors[floors.len])
AM.crush_act()
if(istype(AM, /mob/living))
var/mob/living/safety_hater = AM
safety_hater.gib()
else
AM.crush_act()
else
move_candidates += AM