Foam can pass through tables and computers and grilles (#89636)

This commit is contained in:
Jacquerel
2025-02-24 13:12:31 +01:00
committed by GitHub
parent 2f16d37a57
commit 20fdcea5c8
4 changed files with 20 additions and 0 deletions
+4
View File
@@ -582,6 +582,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Does the mob ignore elevation? (e.g. xeno larvas on hiding)
#define TRAIT_IGNORE_ELEVATION "ignore_elevation"
/// Is the mob currently elevated? (eg standing on a table)
#define TRAIT_MOB_ELEVATED "mob_elevated"
/// Prevents you from twohanding weapons.
#define TRAIT_NO_TWOHANDING "no_twohanding"
@@ -1096,6 +1098,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NO_MIRROR_REFLECTION "no_mirror_reflection"
/// If this movable is currently treading in a turf with the immerse element.
#define TRAIT_IMMERSED "immersed"
/// From [/datum/element/elevation] for purpose of checking if the object causes things in its turf to become elevated
#define TRAIT_ELEVATING_OBJECT "elevating_object"
/// From [/datum/element/elevation_core] for purpose of checking if the turf has the trait from an instance of the element
#define TRAIT_ELEVATED_TURF "elevated_turf"
/**
+2
View File
@@ -19,6 +19,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_DO_NOT_SPLASH" = TRAIT_DO_NOT_SPLASH,
"TRAIT_DRIED" = TRAIT_DRIED,
"TRAIT_DRYABLE" = TRAIT_DRYABLE,
"TRAIT_ELEVATING_OBJECT" = TRAIT_ELEVATING_OBJECT,
"TRAIT_FISHING_SPOT" = TRAIT_FISHING_SPOT,
"TRAIT_FOOD_CHEF_MADE" = TRAIT_FOOD_CHEF_MADE,
"TRAIT_FOOD_FRIED" = TRAIT_FOOD_FRIED,
@@ -355,6 +356,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_MOB_BREEDER" = TRAIT_MOB_BREEDER,
"TRAIT_MOB_CAN_DIG" = TRAIT_MOB_CAN_DIG,
"TRAIT_MOB_EATER" = TRAIT_MOB_EATER,
"TRAIT_MOB_ELEVATED" = TRAIT_MOB_ELEVATED,
"TRAIT_MOB_HATCHED" = TRAIT_MOB_HATCHED,
"TRAIT_MOB_HIDE_HAPPINESS" = TRAIT_MOB_HIDE_HAPPINESS,
"TRAIT_MOB_MERGE_STACKS" = TRAIT_MOB_MERGE_STACKS,
+5
View File
@@ -13,6 +13,8 @@
if(!isatom(target) || isarea(target))
return ELEMENT_INCOMPATIBLE
ADD_TRAIT(target, TRAIT_ELEVATING_OBJECT, ref(src))
src.pixel_shift = pixel_shift
if(ismovable(target))
@@ -29,6 +31,7 @@
/datum/element/elevation/Detach(atom/movable/source)
unregister_turf(source, source.loc)
REMOVE_TRAIT(source, TRAIT_ELEVATING_OBJECT, ref(src))
return ..()
/datum/element/elevation/proc/reset_elevation(turf/target)
@@ -175,6 +178,7 @@
// we want to avoid accidentally double-elevating anything they're buckled to (namely vehicles)
if(target.has_offset(source = ELEVATION_SOURCE(src)))
return
ADD_TRAIT(target, TRAIT_MOB_ELEVATED, ELEVATION_SOURCE(src))
// We are buckled to something
if(target.buckled)
// We are buckled to a vehicle, so it also must be elevated
@@ -190,6 +194,7 @@
/// Reverts elevation of the mob.
/datum/element/elevation_core/proc/deelevate_mob(mob/living/target, elevate_time = ELEVATE_TIME)
REMOVE_TRAIT(target, TRAIT_MOB_ELEVATED, ELEVATION_SOURCE(src))
target.remove_offsets(ELEVATION_SOURCE(src), animate = elevate_time > 0)
if(isvehicle(target.buckled))
animate(target.buckled, pixel_z = -pixel_shift, time = elevate_time, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL)
@@ -39,6 +39,8 @@
. = ..()
if(slippery_foam)
AddComponent(/datum/component/slippery, 100)
if(HAS_TRAIT(loc, TRAIT_ELEVATED_TURF))
layer = WATER_LEVEL_LAYER
create_reagents(1000, REAGENT_HOLDER_INSTANT_REACT)
playsound(src, 'sound/effects/bubbles/bubbles2.ogg', 80, TRUE, -3)
AddElement(/datum/element/atmos_sensitive, mapload)
@@ -96,10 +98,14 @@
continue
if(turf_location.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && HAS_TRAIT(object, TRAIT_T_RAY_VISIBLE))
continue
if (HAS_TRAIT(loc, TRAIT_ELEVATED_TURF) && !HAS_TRAIT(object, TRAIT_ELEVATING_OBJECT))
continue // Do expose tables, don't expose items on tables
reagents.expose(object, VAPOR, fraction)
var/hit = 0
for(var/mob/living/foamer in loc)
if (HAS_TRAIT(foamer, TRAIT_MOB_ELEVATED))
continue
hit += foam_mob(foamer, seconds_per_tick)
if(hit)
lifetime += ds_seconds_per_tick //this is so the decrease from mobs hit and the natural decrease don't cumulate.
@@ -137,6 +143,7 @@
return FALSE
var/datum/can_pass_info/info = new(no_id = TRUE)
info.pass_flags = PASSTABLE | PASSGRILLE | PASSMACHINE | PASSSTRUCTURE
for(var/iter_dir in GLOB.cardinals)
var/turf/spread_turf = get_step(src, iter_dir)
if(spread_turf?.density || spread_turf.LinkBlockedWithAccess(spread_turf, info))
@@ -149,6 +156,8 @@
continue
for(var/mob/living/foaming in spread_turf)
if (HAS_TRAIT(foaming, TRAIT_MOB_ELEVATED))
continue
foam_mob(foaming, seconds_per_tick)
var/obj/effect/particle_effect/fluid/foam/spread_foam = new type(spread_turf, group, src)