mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-11 15:14:27 +01:00
1d538adc1d
* Documentation. * Documentation. * Testing reqs update * Post feature-freeze code of conduct updates * spell checking * Style Guidelines * wrap * link up, bring headers up one level * wrap * fix old link * support github admonition syntax for mkdocs * link rules, rename to guard clauses * ffffucking vscode --------- Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
197 lines
9.6 KiB
Markdown
197 lines
9.6 KiB
Markdown
# Mapping Requirements
|
|
|
|
In order for mapping changes to comply with our existing codebase, conventions,
|
|
and in-game systems, there are several guidelines that must be followed.
|
|
|
|
## Technical Standards
|
|
|
|
### Atmospherics and Cables
|
|
|
|
1. Unless absolutely necessary, do not run atmospherics pipes or disposals pipes
|
|
under wall turfs. **NEVER** run cables under wall turfs.
|
|
|
|
2. Every room should contain at least one air vent and scrubber. Use the
|
|
following "on" subtype of vents and scrubbers as opposed to varediting:
|
|
`/obj/machinery/atmospherics/unary/vent_scrubber/on` and
|
|
`/obj/machinery/atmospherics/unary/vent_pump/on`.
|
|
|
|
3. Run air pipes together where possible. The first example below is to be
|
|
avoided, the second is optimal:
|
|
|
|
 
|
|
|
|
Pipe layouts should be logical and predictable, easy to understand at a
|
|
glance. Always avoid complex layouts like in this example:
|
|
|
|

|
|
|
|
4. External areas, or areas where depressurisation is expected and normal,
|
|
should use airless turf variants to prevent additional atmospherics load.
|
|
|
|
5. Tiny fans (`/obj/structure/fans/tiny`) can be used to block airflow into
|
|
problematic areas, but are not a substitute for proper door and firelock
|
|
combinations. They are useful under blast doors that lead to space when
|
|
opened.
|
|
|
|
### Wall Mounts
|
|
|
|
1. Every station area (`/area/station` subtypes) should contain only one APC and
|
|
air alarm.
|
|
|
|
2. Critical infrastructure rooms (such as the engine, arrivals, and medbay
|
|
areas) should be given an APC with a larger power cell. Use the
|
|
`/obj/machinery/power/apc/important` and `/obj/machinery/power/apc/critical`
|
|
mapping helpers for this purpose.
|
|
|
|
3. Every room should contain at least one fire alarm. Fire alarms should not be
|
|
placed next to expected heat sources.
|
|
|
|
4. Every room should contain at least one station intercom. Intercoms should be
|
|
set to frequency `145.9`, and be speaker ON Microphone OFF. This is so radio
|
|
signals can reach people even without headsets on. Larger rooms will require
|
|
more than one at a time.
|
|
|
|
5. Every room should have at least one security camera with the caveats listed
|
|
in the [Design Guide](design.md). Larger rooms may require more than one
|
|
security camera. All security cameras should have a descriptive name that
|
|
makes it easy to find on a camera console. A good example would be the
|
|
template \[Department name\] - \[Area\], so Brig - Cell 1, or Medbay -
|
|
Treatment Center. Consistency is key to good camera naming.
|
|
|
|
6. Every room should have at least one light switch. When possible, light
|
|
switches should be placed in such a position that a player can activate them
|
|
while standing on the same tile as the room's airlock. Players should not
|
|
have to wander through a dark room to find the light switch.
|
|
|
|
7. Head of Staff offices should contain a requests console, using the
|
|
`/obj/machinery/requests_console/directional` helpers. Console department
|
|
names and types should not be varedited.
|
|
|
|
8. Use lights sparingly. They draw a significant amount of power.
|
|
|
|
### Windows, Walls, and Floors
|
|
|
|
1. Electrochromic windows (`/obj/structure/window/reinforced/polarized`) and
|
|
doors/windoors (using the `/obj/effect/mapping_helpers/airlock/polarized`
|
|
helper) are preferred over shutters as the method of restricting view to a
|
|
room through windows. Shutters are sill appropriate in industrial/hazardous
|
|
areas of the station (engine rooms, HoP line, science test chamber, etc.).
|
|
Electrochromic window/windoor/door sets require a unique ID var, and a
|
|
window tint button (`/obj/machinery/button/windowtint`) with a matching ID
|
|
var. The default `range` of the button is 7 tiles but can be amended with a
|
|
varedit.
|
|
|
|
2. Windows to secure areas or external areas should be reinforced. Windows in
|
|
engine areas should be reinforced plasma glass. Windows in high security
|
|
areas, such as the brig, bridge, and head of staff offices, should be
|
|
electrified by placing a wire node under the window.
|
|
|
|
3. Engine areas, or areas with a high probability of receiving explosions,
|
|
should use reinforced flooring if appropriate.
|
|
|
|
### Airlocks, Windoors, and Firelocks
|
|
|
|
1. Firelocks should be used at area boundaries over doors and windoors, but not
|
|
windows. Firelocks can also be used to break up hallways at reasonable
|
|
intervals. Double firelocks are not permitted. Maintenance access doors
|
|
should never have firelocks placed over them.
|
|
|
|
2. Door and windoor access must be correctly set by the
|
|
`/obj/effect/mapping_helpers/airlock/access` and
|
|
`/obj/effect/mapping_helpers/airlock/windoor/access` [helpers][],
|
|
respectively. Pay attention to the `any` and `all` subtypes; the `any`
|
|
subtype allows someone with any of the accesses on the airlock to use it,
|
|
and the `all` subtypes requires the user to have all of the access on the
|
|
airlock to use it.
|
|
|
|
For example, on the Cerebron (Metastation), miners must walk through the
|
|
Cargo Bay to access the Mining Dock. They do not have Cargo Bay access,
|
|
rather the Cargo Bay airlocks have two access helpers on them:
|
|
|
|
- `/obj/effect/mapping_helpers/airlock/access/any/supply/cargo_bay`
|
|
- `/obj/effect/mapping_helpers/airlock/access/any/supply/mining`
|
|
|
|
This allows both cargo technicians and miners to use those airlocks.
|
|
|
|
Old doors that use var edited access should be updated to use the correct
|
|
access helper, and the var edit on the door should be cleaned.
|
|
|
|
### Other
|
|
|
|
1. Edits in mapping tools should almost always be possible to replicate
|
|
in-game. For this reason, avoid stacking multiple structures on the same
|
|
tile (e.g. placing a light and an APC on the same wall).
|
|
|
|
2. When adding new shuttles, or remapping departures areas, contributors must
|
|
ensure that all existing and new shuttles continue to fit and dock to the
|
|
correct airlocks as expected. Any time docking ports are edited, the author
|
|
needs to confirm the `width`, `height`, and `dwidth` variables between the
|
|
two permanent ports and mobile port are compatible.
|
|
|
|
[helpers]: https://github.com/ParadiseSS13/Paradise/blob/master/code/modules/mapping/access_helpers.dm
|
|
|
|
### Varedits
|
|
|
|
*Varediting*, or variable editing, is the term for modifying a variable of an
|
|
object on the map, instead of in code. There are many legitimate reasons to do
|
|
so. For example, since nearly all floor tiles on the station are the same
|
|
object, their `icon_state` and `dir` variables need to be edited to modify their
|
|
appearance.
|
|
|
|
However, there are also cases when varediting is not appropriate. In general,
|
|
when modifying the behavior of an object, creating a subtype in code is almost
|
|
always the better option. For example, let's say you have an `/obj/helmet` with
|
|
a variable, `strength`, which defines how much damage it can take. The default
|
|
is 10. You want to create a stronger helmet, so you add one into a map, and
|
|
varedit its `strength` to be 20. This may work for now, but what if the strength
|
|
of a helmet no longer is based off that variable? Your helmet will no longer
|
|
work as expected. If you instead made an `/obj/helmet/strong`, and made the
|
|
variable change there, then if the implementation for `/obj/helmet` changes,
|
|
your object will benefit from those changes.
|
|
|
|
Another example of inappropriate varediting is doing it to an object with many
|
|
instances on a map, or multiple instances across maps. If you need to change the
|
|
variable, you will then have to find every instance of it across all of the
|
|
maps, and change them all.
|
|
|
|
Areas should **never** be varedited on a map. All areas of a single type,
|
|
altered instance or not, are considered the same area within the code, and
|
|
editing their variables on a map can lead to issues with powernets and event
|
|
subsystems which are difficult to debug.
|
|
|
|
Subtypes only intended to be used on ruins should be contained within an .dm
|
|
file with a name corresponding to that map within `code\modules\ruins`. This is
|
|
so in the event that the map is removed, that subtype will be removed at the
|
|
same time as well to minimize leftover/unused data within the repo.
|
|
|
|
When not using StrongDMM (which handles the following automatically) please
|
|
attempt to clean out any dirty variables that may be contained within items you
|
|
alter through varediting. For example changing the `pixel_x` variable from 23 to
|
|
0 will leave a dirty record in the map's code of `pixel_x = 0`.
|
|
|
|
Unless they require custom placement, when placing the following items use the
|
|
relevant directional mapper, as it has predefined pixel offsets and directions
|
|
that are standardised: APC, Air alarm, Fire alarm, station intercom, newscaster,
|
|
extinguisher cabinet, light switches.
|
|
|
|
## Mapper Contribution Guidelines
|
|
|
|
These guidelines apply to **all** mapping contributors.
|
|
|
|
For mapping PRs, we do not accept 'change for the sake of change' remaps, unless
|
|
you have very good reasoning to do so. Maintainers reserve the right to close
|
|
your PR if we disagree with your reasoning. Large remaps, such as those to a
|
|
department, must be justified with clear, specific reasons.
|
|
|
|
Before committing a map change, you **MUST** run Mapmerge to normalise your
|
|
changes. You can do this manually before every commit with
|
|
`tools\mapmerge2\Run Before Committing.bat` or by letting the
|
|
[git hooks](./quickstart.md#mapmerge) do it for you. Failure to run Mapmerge on
|
|
a map after editing greatly increases the risk of the map's key dictionary
|
|
becoming corrupted by future edits after running map merge. Resolving the
|
|
corruption issue involves rebuilding the map's key dictionary.
|
|
|
|
If you are making non-minor edits to an area or room, (non-minor being anything
|
|
more than moving a few objects or fixing small bugs) then you should ensure the
|
|
entire area/room is updated to meet these standards.
|