diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 288485f016f..7e050b9951a 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1803,6 +1803,9 @@ About the new airlock wires panel: cable.plugin(src, user) return TRUE else if(!repairing && attacking_item.tool_behaviour == TOOL_CROWBAR) + if(user.a_intent == I_HURT) + ..() + return if(istype(attacking_item, /obj/item/melee/arm_blade)) if(arePowerSystemsOn() &&!(stat & BROKEN)) ..() @@ -1841,30 +1844,35 @@ About the new airlock wires panel: else close(1) return TRUE - else if(istype(attacking_item, /obj/item/material/twohanded/fireaxe) && !arePowerSystemsOn()) + else if(istype(attacking_item, /obj/item/material/twohanded/fireaxe)) if(locked && user.a_intent != I_HURT) to_chat(user, SPAN_NOTICE("The airlock's bolts prevent it from being forced.")) - else if(locked && user.a_intent == I_HURT) + else if(user.a_intent == I_HURT) ..() - else if(!welded && !operating) - if(density) - var/obj/item/material/twohanded/fireaxe/F = attacking_item - if(F.wielded) - open(1) + else if(arePowerSystemsOn()) + to_chat(user, SPAN_NOTICE("The airlock's motors resist your efforts to force it.")) + else + if(!welded && !operating) + if(density) + var/obj/item/material/twohanded/fireaxe/F = attacking_item + if(F.wielded) + open(1) + else + to_chat(user, SPAN_WARNING("You need to be wielding \the [attacking_item] to do that.")) else - to_chat(user, SPAN_WARNING("You need to be wielding \the [attacking_item] to do that.")) - else - var/obj/item/material/twohanded/fireaxe/F = attacking_item - if(F.wielded) - close(1) - else - to_chat(user, SPAN_WARNING("You need to be wielding \the [attacking_item] to do that.")) + var/obj/item/material/twohanded/fireaxe/F = attacking_item + if(F.wielded) + close(1) + else + to_chat(user, SPAN_WARNING("You need to be wielding \the [attacking_item] to do that.")) return TRUE - else if(attacking_item.tool_behaviour == TOOL_HAMMER && !arePowerSystemsOn()) + else if(attacking_item.tool_behaviour == TOOL_HAMMER) if(locked && user.a_intent != I_HURT) to_chat(user, SPAN_NOTICE("The airlock's bolts prevent it from being forced.")) - else if(locked && user.a_intent == I_HURT) + else if(user.a_intent == I_HURT) ..() + else if(arePowerSystemsOn()) + to_chat(user, SPAN_NOTICE("The airlock's motors resist your efforts to force it.")) else if(!welded && !operating) if(density) open(1) diff --git a/code/game/objects/items/weapons/improvised_components.dm b/code/game/objects/items/weapons/improvised_components.dm index 039e9b12e19..15d962e225e 100644 --- a/code/game/objects/items/weapons/improvised_components.dm +++ b/code/game/objects/items/weapons/improvised_components.dm @@ -3,6 +3,7 @@ desc = "An unfinished concealed knife, it looks like the screws need to be tightened." icon = 'icons/obj/weapons_build.dmi' icon_state = "butterflystep1" + w_class = WEIGHT_CLASS_SMALL force_divisor = 0.1 thrown_force_divisor = 0.1 @@ -18,6 +19,7 @@ desc = "A knife blade. Unusable as a weapon without a grip." icon = 'icons/obj/weapons_build.dmi' icon_state = "butterfly2" + w_class = WEIGHT_CLASS_SMALL force_divisor = 0.1 thrown_force_divisor = 0.1 @@ -26,6 +28,7 @@ desc = "A plasteel grip with screw fittings for a blade." icon = 'icons/obj/weapons_build.dmi' icon_state = "butterfly1" + w_class = WEIGHT_CLASS_SMALL force_divisor = 0.1 thrown_force_divisor = 0.1 diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index c143390f5ea..1179443a2aa 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -850,6 +850,7 @@ if(istype(src,/obj/structure/closet/crate)) icon_state = paint_color icon_door = "eng" + icon_door_override = TRUE else icon_state = "eng" icon_door = paint_color diff --git a/code/game/objects/structures/stool_bed_chair_nest/sofa.dm b/code/game/objects/structures/stool_bed_chair_nest/sofa.dm index a4a1509944c..d5a3a0a16ef 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/sofa.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/sofa.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/structure/sofa.dmi' icon_state = "sofa_middle" base_icon = "sofa_middle" + obj_flags = OBJ_FLAG_ROTATABLE /obj/structure/bed/stool/chair/sofa/brown/New(var/newloc) ..(newloc, MATERIAL_STEEL, MATERIAL_LEATHER) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 71f42a1730d..8f0a222822b 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -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 diff --git a/code/modules/power/portgen.dm b/code/modules/power/portgen.dm index 9a325b24487..dec97b34016 100644 --- a/code/modules/power/portgen.dm +++ b/code/modules/power/portgen.dm @@ -21,7 +21,7 @@ . += "Upgraded capacitors 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) diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm index a54c3dc30fd..44c5041affc 100644 --- a/code/modules/turbolift/turbolift.dm +++ b/code/modules/turbolift/turbolift.dm @@ -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 diff --git a/html/changelogs/Bat-Bugs.yml b/html/changelogs/Bat-Bugs.yml new file mode 100644 index 00000000000..3f479629b59 --- /dev/null +++ b/html/changelogs/Bat-Bugs.yml @@ -0,0 +1,10 @@ +author: Batrachophrenoboocosmomachia +delete-after: True +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."