Clears up a hell of a lot of clutter with all of the pre-defined areas of shuttles to properly use the landmarks system. Now there's a ton of free room to build and/or allow larger shuttles to dock with the station, as well as allowing overmap shuttles to dock at the docks.
Ferry shuttles generally shouldn't have to worry about docking codes. Thats for exploration or antag shuttles. Therefore let them read the docking codes and dock anyway.
Given we put this on all ferry shuttles, we don't need specific code for it on the supply shuttle anymore.
Largely ported from the work done at Baystation in https://github.com/Baystation12/Baystation12/pull/17460 and later commits.
- Shuttles no longer require a separate area for each location they jump to.
Instead destinations are indicated by landmark objects, which are not necessarily exclusive to that shuttle.
This means that more than one shuttle could use the same docking port (not at the same time of course).
- Enhanced shuttle control computers to use nanoui if they didn't.
- Organizes shuttle datum code a bit better so there is less re-inventing the wheel in subtypes.
- Allows the possibility of shuttles (or destinations) that start on late-loaded maps.
- Deprecate the "extra" shuttle areas that are no longer needed and update shuttle areas in unit tests
This all required a bit of infrastructure improvements.
- ChangeArea proc, for changing the area of a turf.
- Fixed lighting overlays actually being able to be destroyed.
- Added a few utility macros and procs.
- Added "turf translation" procs which are like move_contents_to but more flexible.
* Adds a flag to controllers that instructs the airlock program to always purge between IN/OUT and also to pump air to "outside" instead of tanks when purging to go OUT.
* Tweak the way the airlock fudges target pressures so it more reliably operates when trying to pump down to vacuum.
* Adds an exterior airlock sensor that reads the air pressure in *front* of it, so it can be mounted on a shuttle but measure air outside the shuttle.
* Yes, all of them.
* Also did a few corrections to redundant New() and broken Destroy() along the way
* Renamed the turf_initializer.initialize() proc to InitializeTurf to avoid confusion.
* Subsumed /area/proc/initialize into /atom/proc/initialize() - Made /area's LateInitialize to get same behavior as before.
Airlock controllers now use a signal_mech_sensor() proc to send commands
to mech sensors. Docking controllers don't appear to store the mech
sensor tag anywhere so the mech sensor code was left commented out.
The undocking conditions for multidocking ports (used by the escape
shuttle) were overly strict, failing if any door was open/unlocked.
Changed to allow undocking if at least one of the inner or outer doors
can close and lock.
Docking ports still don't use filters though, as it would mess with the
docking ports that are also airlocks. Docking is infrequent though so it
should be fine.