Files
Bubberstation/code/modules
Jacquerel 2ff892757f Correct instances of destroying baseturfs in ChangeTurf & Select dimensional anomaly theme (#73177)
## About The Pull Request

This is starting to hit an atomisation threshold but I promise all of
these fixes are related (they need the same new proc in their fix)

First of all, I needed to debug specific types of dimensional anomaly
because some of them replace the floor with floor tiles and some of them
replace the floor with underlay tiles (like glass plating), so I added
an event override to allow you to pick which to activate.
This actually could be easily removed into another PR if desired, or
even delayed until after the freeze if you don't think it's appropriate,
it just seemed like after I wrote it then I might as well include it and
I'll still need it to retest after addressing any reviews here.

Fixes #39222
Fixes #70161

In both of these instances we were using `ChangeTurf` to turn one kind
of floor into another kind of floor, but this is naive because in both
cases we are also using a mix of "under" floors and "over" floors (from
now on I will refer to these as "plating" and "floor tiles" because
those are easier to understand).

Transforming a plating into a plating, or a tile into a tile works fine
and preserves expected behaviour.
Transforming a tile into a plating is also fine, it just deletes the
"over" layer and leaves you with some floor you can't remove with a
crowbar.
Transforming a plating into a tile creates a floor that you can remove
with a crowbar _and which has no baseturf underneath_, instantly
breaching it to space (or making a hole to the lower z level). This
isn't expected behaviour for either of these effects.

In order to fix this I added a helper proc to `turf/open` called
`replace_floor`.
If you pass this proc a plating it will simply replace the existing
turf. If you pass it a tile then it will _always_ ensure that there is a
plating underneath, making it breach-safe for any future effect (or
other existing one I have forgotten about) which wants to transform
floors.

Also I generally refactored the "transform an area" version of the
colossus crystal because that code was old and smelled bad.

Fixes #55821

Finally I also fixed this for cult constructs, which was a similar but
different bug.
This was creating a _wall_ on top of a plating with changeturf which
would _also_ destroy the plating and leave a void underneath.
I haven't found any other instances of this so I fixed it in the Conjure
spell rather than with a helper proc, but I can make one instead if
desired.

## Why It's Good For The Game

All three of these cases result in unexpected hull breaches, which can
be quite annoying.
In the case of both anomalous items they can cover quite a wide area in
floor which can be trivially breached with a crowbar and then tedious to
replace after it has destroyed all of the air.
In the case of the artificer it could create breaches in cult bases
(very frequently built in maint, which is mostly plating) which would
immediately start suffocating your team. This is obviously not ideal.

Also being able to pick the theme of the anomaly is fun.

## Changelog

🆑
fix: Plating replaced by floor tiles from a dimensional anomaly or
colossus crystal will now still have plating underneath when crowbarred,
instead of space (or open space on z level maps).
fix: Summoning a cult wall on plating as an Artificer will leave the
plating intact underneath when it is removed, rather than replacing it
with a void.
admin: Admins can pick the initial flavour of a manually triggered
dimensional anomaly.
/🆑
2023-02-10 03:45:14 +00:00
..
2023-02-05 12:42:07 -07:00