mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-18 04:41:27 +01:00
4874f2a117
* biome port * fix * umm * up * prettier on repo level * . * uh * fix that * . * guh * could be deelted * fix query * raccoon * raccoon
128 lines
9.6 KiB
Markdown
128 lines
9.6 KiB
Markdown
# "Landmark" Shuttles Conversion
|
|
|
|
This guide helps with updating maps and shuttle datums from the old "area" based system to the "landmark" based system.
|
|
|
|
## Summary
|
|
|
|
The old shuttle datum worked with areas (`/area`). You are probably familiar with every shuttle having a few cookie-cutter shaped areas it travels between.
|
|
When the shuttle "moved" it was translated from its current area to the destination area. The areas had to be _exactly_ the same shape so
|
|
that each turf in the origin area got translated to the equivalent place at the target.\
|
|
Since _all possible_ destinations had to have a dedicated area (and areas in BYOND can't overlap) this means it is impossible for two shuttles to travel to the same spot, even at different times.
|
|
|
|
In the new system shuttle destinations are represented by "landmark" objects (`/obj/effect/shuttle_landmark`).
|
|
When a shuttle is "moved" it is translated from its current landmark to the destination landmark, with each turf keeping its same position _relative_ to the landmarks.
|
|
In other words, whatever a turf's x/y/z offsets are from the origin landmark, it will be moved to the same x/y/z offset from the destination landmark.
|
|
|
|
## Landmark Objects
|
|
|
|
Shuttle destinations are represented by `/obj/effect/shuttle_landmark` objects on the map.
|
|
|
|
- `name` - Pretty name of the nav point, used on overmap and in messages and console UI.
|
|
- `landmark_tag` - Globally unique ID, used by everything else to refer to this landmark.
|
|
- `docking_controller` - ID of the controller on the dock side (initialize to id_tag, becomes reference). Leave null if not applicable.
|
|
- `base_area` - Type path of the `/area` that should be here when a shuttle is _not_ present.
|
|
- `base_turf` - Type path of the `/turf` that should be here when a shuttle is _not_ present.
|
|
- `shuttle_restricted` - If not null, only the named shuttle is allowed to use this landmark. (TODO: Overmap functionality)
|
|
- `flags` - Bitfield - defaults to `SLANDMARK_FLAG_AUTOSET`, can be any combination of:
|
|
- `SLANDMARK_FLAG_AUTOSET` (1) - If set, will initialize base_area and base_turf to same as where it was spawned at.
|
|
- `SLANDMARK_FLAG_ZERO_G` (2) - If set, Zero-G shuttles moved here will lose gravity unless the area has ambient gravity.
|
|
- `special_dock_targets` - Used to configure shuttles with multiple docking controllers on the shuttle. Map of shuttle `name` -> `id_tag` of the docking controller it should use for this landmark. (Think of a shuttle with airlocks on both sides, each with their own controller. This would tell it which side to use.)
|
|
|
|
## Shuttle Types
|
|
|
|
### Ferry Shuttles
|
|
|
|
These shuttles go back and forth between two locations (normally called "station" and "offsite").
|
|
Examples: Mining shuttle, Arrivals Shuttle, etc.
|
|
|
|
Old Type Path: `/datum/shuttle/ferry`\
|
|
New Type Path: `/datum/shuttle/autodock/ferry`
|
|
|
|
##### New Vars:
|
|
|
|
| Name | Type | Required? | Info |
|
|
| ------------ | ------------------- | --------- | -------------------------------------- |
|
|
| shuttle_area | `/area` typepath(s) | Yes | Can be a single path or list of paths. |
|
|
|
|
##### Replaced vars:
|
|
|
|
| Old | New | Required? | Info |
|
|
| :-----------------: | :-----------------: | :-------: | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
| area_station | landmark_station | Yes | Tag of the landmark for the "station" location. |
|
|
| area_offsite | landmark_offsite | Yes | Tag of the landmark for the "offsite" location. |
|
|
| area_transition | landmark_transition | No | Tag of the landmark for the "transition" location used during long_jump() |
|
|
| dock_target_station | On landmark | No | `id_tag` docking controller _on the dock_ has been moved to the `docking_controller` var on the landmark_station landmark obj. |
|
|
| dock_target_offsite | On landmark | No | `id_tag` docking controller _on the dock_ has been moved to the `docking_controller` var on the landmark_offsite landmark obj. |
|
|
|
|
### Multi Shuttles
|
|
|
|
These shuttles go between a list of configured locations, one of which is its starting location.
|
|
Examples: Skipjack, Syndicate Shuttle
|
|
|
|
Old Type Path: `/datum/shuttle/multi_shuttle`\
|
|
New Type Path: `/datum/shuttle/autodock/multi`
|
|
|
|
##### New Vars:
|
|
|
|
| Name | Type | Required? | Info |
|
|
| ------------ | ------------------- | --------- | -------------------------------------- |
|
|
| shuttle_area | `/area` typepath(s) | Yes | Can be a single path or list of paths. |
|
|
|
|
##### Replaced vars:
|
|
|
|
| Old | New | Required? | Info |
|
|
| :----------------------: | :-----------------: | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| origin | current_location | Yes | Tag of the landmark where the shuttle is at startup. |
|
|
| interim | landmark_transition | No | Tag of the landmark for the "transition" location used during long_jump() |
|
|
| start_location | N/A | No | No longer necessary, automatically determined from the value of `origin` |
|
|
| destinations | destination_tags | Yes | List of destinations the shuttle can travel to. Used to be associative list of _name_ -> _area typepath_, now is normal list of landmark tag ids. Name is now read from the landmark obj. |
|
|
| destination_dock_targets | On landmarks | No | Used to be associative list of _name_ -> _id_tag_ for which docking controller _on the dock_ to use at each destination. This is now specified by the `docking_controller` var on each landmark obj. |
|
|
|
|
### Web Shuttles
|
|
|
|
These shuttles travel along a network of locations connected by routes. Instead of being able to travel to any of its destinations, it can only travel to destinations connected by a route to its current location. Added by Polaris as an upgrade to Multi Shuttles.
|
|
Note: While cool, it is likely that the upcoming "overmap" shuttles will be even cooler, and may eventually replace some web shuttles.
|
|
Examples: Southern Cross' Ninja Shuttle, Tether's Excursion Shuttle
|
|
|
|
Old Type Path: `/datum/shuttle/web_shuttle`\
|
|
New Type Path: `/datum/shuttle/autodock/web_shuttle`
|
|
|
|
##### New Vars:
|
|
|
|
| Name | Type | Required? | Info |
|
|
| ------------ | ------------------- | --------- | -------------------------------------- |
|
|
| shuttle_area | `/area` typepath(s) | Yes | Can be a single path or list of paths. |
|
|
|
|
##### Replaced vars:
|
|
|
|
| Old | New | Required? | Info |
|
|
| :----------: | :--------------: | :-------: | ---------------------------------------------------- |
|
|
| current_area | current_location | Yes | Tag of the landmark where the shuttle is at startup. |
|
|
|
|
#### Web Destination Configuration (`/datum/shuttle_destination`)
|
|
|
|
The network of routes for each web shuttle is configured by defining datums. These are mostly unchanged but use landmarks instead of areas now.
|
|
|
|
##### Replaced vars:
|
|
|
|
| Old | New | Required? | Info |
|
|
| :--------------------: | :-------------------: | :-------: | ------------------------------------------------------------------------------------------------------------------------- |
|
|
| my_area | my_landmark | Yes | Tag of the landmark associated with this destination. |
|
|
| preferred_interim_area | preferred_interim_tag | No | Tag of the landmark for the "transition" location used during long_jump() |
|
|
| dock_target | On landmark | No | `id_tag` docking controller _on the dock_ has been moved to the `docking_controller` var on the my_landmark landmark obj. |
|
|
|
|
### Misc Shuttle Types
|
|
|
|
Other shuttle types that are either unused or unchanged in particular.
|
|
|
|
#### Escape Pods
|
|
|
|
Special case of ferry shuttles that use escape pod berth controllers.
|
|
Type path changed from `/datum/shuttle/ferry/escape_pod` to `/datum/shuttle/autodock/ferry/escape_pod`
|
|
Follow same instructions as for other ferry shuttles.
|
|
|
|
#### Multidock Ferry Shuttles
|
|
|
|
`/datum/shuttle/ferry/multidock` was a variant of ferry shuttles that could use a different docking port at each location.
|
|
Obsolete since is now natively supported by all dockable shuttles.
|