# Mapping/In-game Logic Fidelity Project
## Goal
The goal of this project is to make all the changes necessary to support players being able to build anything in-game that we allow based on our mapping technical standards.
## Why It's Important
The station and game world as it exists is the foundation for how players change it. Players may want to build new things, from bars in maintenance to Lavaland station events. They may want to change things, such as rearrange their office or department. They may be required to rebuild things, such as engineering recreating an area after an explosion.
Historically, there was less attention paid to this, so the rules about what is buildable and what is not are arbitrary, which is confusing and frustrating to players. Mappers, in turn, may not have a sense of if what they're mapping is something that players can change or work with in the manners above. As well, admins should, to the best of our abilities, be equally be able to rapidly build and deploy constructions.
Coders/Mappers should enable this flexibility and freedom, and expose these possibilities to players in useful and intuitive ways, and in the future, new buildable objects should be built with these considerations in mind.
## Glossary
Just to quickly define some terms:
- _Premapped_ refers to any object or object behavior which exists in a map file.
- _Unbuildable_ refers to any object which players cannot construct without admin intervention.
- _Unmakeable_ refers to any object which cannot even be quickly constructed/configured with admin intervention. Will need admin input to know what should be added here.
## Proposed Solution
The proposed solution is to make all of the relevant items constructable, configurable, and deconstructable. Some of this may be as simple as creating a "frame" style assembly similar to wallbumps; others may require crafting recipes; others may require more extensive implementation work.
While an overall plan is necessary to find common problems and necessary refactorings, this work is ultimately swarmable, and can be worked on by many people in parallel.
## Categories
There are several kinds of issues we currently have that can be loosely grouped:
### Unbuildable Premapped Objects
There are many, many objects which are premapped and unbuildable. This is not an exhaustive list but the goal is to use this as a jumping off point to make that list.
Some of these may require extensive implementation work. For example, pod doors and shutters would not only need to be constructable, but would require some diegetic way to link them to the desired door control, maybe something like a multitool.
It can be assumed that objects on this list may also be invulnerable or have no deconstruction steps, requiring brute force to remove in-game.
While possible, I'd like to avoid deprecating the use of some of these completely if we can't find a good way to implement them, such as water tiles.
| Object | Path |
| ---------------------------------- | ---------------------------------------------------------------------- |
| ATM | `/obj/machinery/economy/atm` |
| Barber pole | `/obj/structure/sign/barber` |
| Drone Fabricator* | `/obj/machinery/drone_fabricator` |
| Emergency O2 Locker | `/obj/structure/closet/walllocker/emerglocker` |
| Firing range console | `/obj/machinery/magnetic_controller` |
| Flasher button | `/obj/machinery/flasher_button` |
| Floodlight†† | `/obj/machinery/floodlight` |
| Gravity generator | `/obj/machinery/gravity_generator/main` |
| Green-shade desk lamp | `/obj/item/flashlight/lamp/green` |
| Guest pass terminal | `/obj/machinery/computer/guestpass` |
| Library Computer | `/obj/machinery/computer/library` |
| Medical laptop | `/obj/machinery/computer/med_data/laptop` |
| PDA Painter | `/obj/machinery/pdapainter` |
| Personal closet | `/obj/structure/closet/secure_closet/personal` |
| Pod door and Shutter | `/obj/machinery/door/poddoor` |
| Pool controller | `/obj/machinery/poolcontroller` |
| Requests console | `/obj/machinery/requests_console` |
| Secure safe | `/obj/item/storage/secure/safe` |
| Security laptop | `/obj/machinery/computer/secure_data/laptop` |
| Shooting target | `/obj/item/target` |
| Shutter control | `/obj/machinery/door_control` |
| Signage† | `/obj/structure/sign` |
| Surgical tray | `/obj/item/storage/surgical_tray` |
| Target stake | `/obj/item/target_stake` |
| Television | `/obj/machinery/computer/security/telescreen/entertainment/television` |
| Wall-mounted flasher | `/obj/machinery/flasher` |
| Wall-mounted fuel tank | `/obj/structure/reagent_dispensers/fueltank/chem` |
| Wall-mounted pepper-spray refiller | `/obj/structure/reagent_dispensers/peppertank` |
| Water cooler | `/obj/structure/reagent_dispensers/water_cooler` |
| Water tile | `/turf/simulated/floor/beach/water` |
| Weight machine | `/obj/structure/weightmachine` |
*_Debatable._
†_Nearly every mapped sign type cannot be constructed by players._
††_Requires nerfing in exchange for buildability._
### Buildable Unconfigurable Objects
These are objects which can be built, but cannot be built in such a way that the result works as desired. These are typically objects whose configuration is hardcoded or varedited.
Solutions to these will typically require some diegetic way to configure or construct them in such a way that the desireable behavior is included. For example, using a specific material on an airlock during construction in order to make them fireproof.
| Object | Relevant Path | Explanation |
| ----------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Heatproof airlock | `/obj/machinery/door/airlock` | Var `heat_proof` edited. Critically important for engine, turbine, etc. |
| Light switch | `/obj/machinery/light_switch` | Light switches and tint controls are often nudged together on the same wall. There is no in-game way to arrange them in a similar manner. |
### Orderable Unbuildable/Undeconstructable Premapped Objects
These are objects which exist in game but cannot be constructed because their availability via Cargo is considered sufficient.
This list is included only for completeness' sake, to indicate why they're not on other lists.
| Object | Path |
| ---------------------- | ------------------------------------------------- |
| Filing cabinet* | `/obj/structure/filingcabinet` |
| Showerhead | `/obj/item/mounted/shower` |
*_Maybe?_
### Purposefully Unbuildable/Undeconstructable Premapped Objects
There are handful of objects which exist in-game, but should not be buildable, typically because they are "magic" in a way that would mess with game mechanics in undesireable ways. These shouldn't be considered part of this project and kept only makeable by admins. We should try and keep this list small.
| Object | Path | Purpose |
| -------------------- | ----------------------------------------------------------------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Fan/Tiny fan | `/obj/structure/fans` | Used in rare cases where full atmos infrastructure would be too cumbersome, such as bluespace shelter capsule airlocks, mass driver egress points, and admin/event/mining/labor camp shuttle airlocks. |
| Indestructible Turfs | `/turf/simulated/wall/indestructible`, `/turf/simulated/floor/indestructible` | Used on toxins test range so bombs always have a backstop. Would be chaos if given to players. |
| Crematorium | `/obj/structure/crematorium` | Constructable crematoria have severe implications for Changeling; the current compromise is indestructible, repairable structures as per [PR 19878][]. |
| Fax machine | `/obj/machinery/photocopier/faxmachine` | Fax machines are highly guarded and should always be provided by admins in the event of their loss. |
| Cyberiad Statue | `/obj/structure/statue/cyberiad` | One-of-a-kind. |
| Message Server | `/obj/machinery/message_server` | Probably required to only be one, with replacements provided by admins. |
| Blackbox Recorder | `/obj/machinery/blackbox_recorder` | Probably required to only be one, with replacements provided by admins. |
| Crypod control | `/obj/machinery/computer/cryopod` | Should not be destructable, holds items which may be critically important |
| Blast doors | `/obj/machinery/door/poddoor` | Should be repairable but not constructable. |
[PR 19878]: https://github.com/ParadiseSS13/Paradise/pull/19878