diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm index a2f8be4cd014..3642a9eb52f8 100644 --- a/code/datums/components/shell.dm +++ b/code/datums/components/shell.dm @@ -339,7 +339,7 @@ COMSIG_CIRCUIT_ADD_COMPONENT_MANUALLY, COMSIG_CIRCUIT_PRE_POWER_USAGE, )) - if(attached_circuit.loc == parent || (!QDELETED(attached_circuit) && attached_circuit.loc == null)) + if(!QDELETED(attached_circuit) && (attached_circuit.loc == parent || (attached_circuit.loc == null))) var/atom/parent_atom = parent attached_circuit.forceMove(parent_atom.drop_location()) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a2ab65d44429..004b99dbb652 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -687,6 +687,9 @@ * most of the time you want forceMove()FALS */ /atom/movable/proc/abstract_move(atom/new_loc) + if(QDELING(src)) + CRASH("Illegal abstract_move() on [type]!") + var/atom/old_loc = loc var/direction = get_dir(old_loc, new_loc) loc = new_loc @@ -766,11 +769,17 @@ if(oldarea != newarea) newarea.Entered(src, oldarea) + if(loc != newloc) // Something moved us out of where we just moved to, Abort!!! + return + Moved(oldloc, direction, FALSE, old_locs) //////////////////////////////////////// /atom/movable/Move(atom/newloc, direct, glide_size_override = 0) + if(QDELING(src)) + CRASH("Illegal Move()! on [type]") + var/atom/movable/pullee = pulling var/turf/current_turf = loc if(!moving_from_pull) @@ -1184,6 +1193,9 @@ return currently_z_moving > old_z_moving_value /atom/movable/proc/forceMove(atom/destination) + if(QDELING(src)) + CRASH("Illegal forceMove() on [type]!") + . = FALSE if(destination) . = doMove(destination) @@ -1291,6 +1303,9 @@ * * continuous_move - If this check is coming from something in the context of already drifting */ /atom/movable/proc/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) + if(anchored) + return TRUE + if(has_gravity()) return TRUE diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index d20a7f9af331..3feab27406e8 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -43,6 +43,7 @@ ///The abstract effect ignores even more effects and is often typechecked for atoms that should truly not be fucked with. /obj/effect/abstract + anchored = TRUE /obj/effect/abstract/singularity_pull() return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index aadd1a5e697e..50207ec1bc75 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -391,7 +391,6 @@ GLOBAL_LIST_EMPTY(station_turfs) return TRUE /turf/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() if(arrived.flags_2 & ATMOS_SENSITIVE_2) LAZYDISTINCTADD(atmos_sensitive_contents, arrived) @@ -399,14 +398,14 @@ GLOBAL_LIST_EMPTY(station_turfs) if(isnull(zone.atmos_sensitive_contents)) SSzas.zones_with_sensitive_contents += zone LAZYDISTINCTADD(zone.atmos_sensitive_contents, arrived) + // Spatial grid tracking needs to happen before the signal is sent + . = ..() if (!arrived.bound_overlay && !(arrived.zmm_flags & ZMM_IGNORE) && arrived.invisibility != INVISIBILITY_ABSTRACT && TURF_IS_MIMICKING(above)) above.update_mimic() /turf/Exited(atom/movable/gone, direction) - . = ..() - if(gone.flags_2 & ATMOS_SENSITIVE_2) if(!isnull(atmos_sensitive_contents)) LAZYREMOVE(atmos_sensitive_contents, gone) @@ -415,6 +414,9 @@ GLOBAL_LIST_EMPTY(station_turfs) if(isnull(zone.atmos_sensitive_contents)) SSzas.zones_with_sensitive_contents -= zone + // Spatial grid tracking needs to happen before the signal is sent + . = ..() + // A proc in case it needs to be recreated or badmins want to change the baseturfs /turf/proc/assemble_baseturfs(turf/fake_baseturf_type) var/static/list/created_baseturf_lists = list() diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 8dc132c4d33a..6b1621eb265a 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -88,9 +88,10 @@ /obj/item/clothing/head/hooded/Destroy() if(suit) - suit.RemoveHood() + var/obj/item/clothing/suit/hooded/old_suit = suit suit.hood = null suit = null + old_suit.RemoveHood() return ..() /obj/item/clothing/head/hooded/dropped()