From d30d7b9f1d23fb1a2d5c2560cf4cbbebc7bf64da Mon Sep 17 00:00:00 2001 From: mikomyazaki <47489928+mikomyazaki@users.noreply.github.com> Date: Thu, 19 Nov 2020 22:54:04 +0000 Subject: [PATCH] Mobs crushed by doors while inside an atom wont be forcemoved outside of the atom (#10608) --- code/game/machinery/doors/airlock.dm | 25 ++++++----- .../changelogs/airlock_crush_movement_fix.yml | 41 +++++++++++++++++++ 2 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 html/changelogs/airlock_crush_movement_fix.yml diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 5db477e5e43..624c0568386 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1489,21 +1489,20 @@ About the new airlock wires panel: SetWeakened(5) visible_message(SPAN_DANGER("[src] is crushed in the airlock!"), SPAN_DANGER("You are crushed in the airlock!"), SPAN_NOTICE("You hear airlock actuators momentarily struggle.")) - var/turf/T = get_turf(src) + var/turf/T = loc + if(istype(T)) + var/list/valid_turfs = list() + for(var/dir_to_test in cardinal) + var/turf/new_turf = get_step(T, dir_to_test) + if(!new_turf.contains_dense_objects()) + valid_turfs |= new_turf - var/list/valid_turfs = list() - for(var/dir_to_test in cardinal) - var/turf/new_turf = get_step(T, dir_to_test) - if(!new_turf.contains_dense_objects()) - valid_turfs |= new_turf - - while(valid_turfs.len) - T = pick(valid_turfs) - valid_turfs -= T - - if(src.forceMove(T)) - return + while(valid_turfs.len) + T = pick(valid_turfs) + valid_turfs -= T + if(src.forceMove(T)) + return /mob/living/carbon/airlock_crush(var/crush_damage) . = ..() diff --git a/html/changelogs/airlock_crush_movement_fix.yml b/html/changelogs/airlock_crush_movement_fix.yml new file mode 100644 index 00000000000..473edccec2d --- /dev/null +++ b/html/changelogs/airlock_crush_movement_fix.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: mikomyazaki + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Being crushed by an airlock while inside something (e.g. a locker) will no longer teleport you outside of the thing." \ No newline at end of file