Files
0bd4b0820f Adds TGMC Tactical maps to the game and to Nuclear Operatives! (#96068)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Brought to you by Team Powercrèpe.(same group of people that delivered
the Heretic Overhaul)

This PR ports the TGMC Tacmaps and grants em to our NukeOps.

Code by Me, @Xander3359, @Arturlang, @Absolucy.

Mapping by @RipGrayson 

Sprites by @KillerOrcaCora

Writing bits by @necromanceranne

Tacmaps are essentially dynamically generated minimaps,

<img width="1711" height="1335" alt="Tac map examples"
src="https://github.com/user-attachments/assets/f936fac0-fb7c-4b84-970d-7195b4995ca7"
/>



<img width="1274" height="714" alt="Tac-Maps Icons"
src="https://github.com/user-attachments/assets/0f04e388-af4b-4955-be7a-04650cfd746b"
/>






As you can see from the screenshots above, departments are classified by
color, hovering your cursor over an area or a team mate, will display
their name, the system does allow the user to switch between Multi-Z,
and lastly you can draw and add labels to the map, although the last
option is only available to the NukeOps Leader and OW agents.


The functionality is tied to the Syndicate implants nukies start with,
Cayenne, Syndie borgs and Mechs also have the ability to toggle the map.

Likewise, the tacmaps will display the positioning of the following in
real time!

- Nuke ops agents

- Syndie borgs and Mechs

- Cayenne

- Location of the nuclear fission device (and beer nuke)

- Location of the Nuclear Authentication Disk.

<img width="1274" height="714" alt="SkyBridge OFF"
src="https://github.com/user-attachments/assets/3915e7d7-644a-4e9a-b213-997834dde2ea"
/>

<img width="1274" height="714" alt="SkyBridge ON"
src="https://github.com/user-attachments/assets/13748290-fd16-42ba-a9c4-a6b4f7e69c79"
/>

<img width="566" height="459" alt="Holo table done"
src="https://github.com/user-attachments/assets/1a43c5b7-ee51-4794-9c09-16b4fb50e2ad"
/>






https://github.com/user-attachments/assets/caf38538-ef04-4330-992c-3137a67ea0d0






Lastly The tactiical map implant cannot be be used on the nuke ops
base,If the team wishes to interact with the map they'll have to
Interact with the "Reconnaisance Platform" (Sprite by Orcacora) in the
briefing room, which has seen some mapping changes (Brought to you by
TheLastGrayson).



<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game

Originally this feature was planned for the Upcoming Contractor Rework
our team is currently working on, but given the massive size of it all,
we decided to atomize it.

But without that consideration in mind, I think it makes sense for
Nuclear operatives of all antagonists to have the means to Recon and
plot an assault plan onto the station and actually be able to know the
whereabouts of their teammates.

Obviously this feature has a lot of other potential applications, we
have wanted to have functional Maps for a very long time, if someone
wants to give it a go once the feature is merged, by all means.

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Tactical Maps have been added to the game!
add: Nuclear Operatives implants now grant the ability to open a
Minimap, this map will display and show the names of various areas of
the station, and the positioning of the Nukeops team,borgs,mechs,Cayenne
and the nuke disk in real time!
add: Nukie leaders and OW agents can also draw and apply labels to the
map.
add: the "Recoinassance Platform" has been added to the Nukie Base, it
allows displaying of the Tactical maps while on the Syndicate Base Z
level.
map: The briefing room in the NukeOps base has been remapped to better
accomodate the new Holographic table.
map: Changed the front shutters on the Syndicate Infiltrator to the more
fitting Syndicate Shutters.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Co-authored-by: Artur Lang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: RipGrayson <49290523+RipGrayson@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2026-06-09 16:38:00 +02:00

316 lines
9.7 KiB
Plaintext

/**********************Mine areas**************************/
/area/mine
icon = 'icons/area/areas_station.dmi'
icon_state = "mining"
default_gravity = STANDARD_GRAVITY
area_flags = VALID_TERRITORY | CULT_PERMITTED
area_flags_mapping = UNIQUE_AREA | FLORA_ALLOWED
ambient_buzz = 'sound/ambience/lavaland/magma.ogg'
/area/mine/lobby
name = "Mining Station"
icon_state = "mining_lobby"
/area/mine/storage
name = "Mining Station Production Storage"
icon_state = "mining_storage"
/area/mine/storage/public
name = "Mining Station Public Storage"
icon_state = "mining_storage"
/area/mine/lobby/raptor
name = "Nanotrasen Raptor Farm"
icon_state = "mining_storage"
/area/mine/production
name = "Mining Station Production Wing"
icon_state = "mining_production"
/area/mine/abandoned
name = "Abandoned Mining Station"
/area/mine/living_quarters
name = "Mining Station Living Quarters"
icon_state = "mining_living"
/area/mine/eva
name = "Mining Station EVA"
icon_state = "mining_eva"
/area/mine/eva/lower
name = "Mining Station Lower EVA"
icon_state = "mining_eva"
/area/mine/maintenance
name = "Mining Station Maintenance"
/area/mine/maintenance/production
name = "Mining Station Production Maintenance"
/area/mine/maintenance/living
name = "Mining Station Living Quarters Maintenance"
/area/mine/maintenance/living/north
name = "Mining Station Living Quarters North Maintenance"
/area/mine/maintenance/living/south
name = "Mining Station Living Quarters South Maintenance"
/area/mine/maintenance/public
name = "Mining Station Public Maintenance"
/area/mine/maintenance/public/north
name = "Mining Station Public North Maintenance"
/area/mine/maintenance/public/south
name = "Mining Station Public South Maintenance"
/area/mine/maintenance/service
name = "Mining Station Service Maintenance"
/area/mine/maintenance/service/disposals
name = "Mining Station Disposals"
/area/mine/maintenance/service/comms
name = "Mining Station Communications"
/area/mine/maintenance/labor
name = "Labor Camp Maintenance"
/area/mine/cafeteria
name = "Mining Station Cafeteria"
icon_state = "mining_cafe"
/area/mine/cafeteria/labor
name = "Labor Camp Cafeteria"
icon_state = "mining_labor_cafe"
/area/mine/hydroponics
name = "Mining Station Hydroponics"
icon_state = "mining_hydro"
/area/mine/medical
name = "Mining Station Emergency Medbay"
/area/mine/mechbay
name = "Mining Station Mech Bay"
icon_state = "mechbay"
/area/mine/lounge
name = "Mining Station Public Lounge"
icon_state = "mining_lounge"
/area/mine/laborcamp
name = "Labor Camp"
icon_state = "mining_labor"
/area/mine/laborcamp/quarters
name = "Labor Camp Quarters"
icon_state = "mining_labor_quarters"
/area/mine/laborcamp/production
name = "Labor Camp Production"
icon_state = "mining_labor_production"
/area/mine/laborcamp/security
name = "Labor Camp Security"
icon_state = "labor_camp_security"
ambience_index = AMBIENCE_DANGER
/area/mine/laborcamp/security/maintenance
name = "Labor Camp Security Maintenance"
icon_state = "labor_camp_security"
ambience_index = AMBIENCE_DANGER
/**********************Lavaland Areas**************************/
/area/lavaland
icon = 'icons/area/areas_station.dmi'
icon_state = "mining"
default_gravity = STANDARD_GRAVITY
flags_1 = NONE
area_flags = VALID_TERRITORY | FLORA_ALLOWED
sound_environment = SOUND_AREA_LAVALAND
ambient_buzz = 'sound/ambience/lavaland/magma.ogg'
allow_shuttle_docking = TRUE
map_generator = /datum/map_generator/cave_generator/lavaland
use_mapgen = FALSE
/area/lavaland/surface
name = "Lavaland"
icon_state = "explored"
always_unpowered = TRUE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
requires_power = TRUE
ambience_index = AMBIENCE_MINING
area_flags = VALID_TERRITORY
/area/lavaland/underground
name = "Lavaland Caves"
icon_state = "unexplored"
always_unpowered = TRUE
requires_power = TRUE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
ambience_index = AMBIENCE_MINING
/area/lavaland/surface/outdoors
name = "Lavaland Wastes"
outdoors = TRUE
/area/lavaland/surface/outdoors/unexplored //monsters and ruins spawn here
icon_state = "unexplored"
area_flags = VALID_TERRITORY
area_flags_mapping = UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED
use_mapgen = TRUE
/area/lavaland/surface/outdoors/unexplored/danger //megafauna will also spawn here
icon_state = "danger"
area_flags = VALID_TERRITORY
area_flags_mapping = parent_type::area_flags_mapping | MEGAFAUNA_SPAWN_ALLOWED
/// Same thing as parent, but uses a different map generator for the icemoon ruin that needs it.
/area/lavaland/surface/outdoors/unexplored/danger/no_ruins
map_generator = /datum/map_generator/cave_generator/lavaland/ruin_version
/area/lavaland/surface/outdoors/explored
name = "Lavaland Labor Camp"
area_flags = VALID_TERRITORY
/**********************Ice Moon Areas**************************/
/area/icemoon
icon = 'icons/area/areas_station.dmi'
icon_state = "mining"
default_gravity = STANDARD_GRAVITY
flags_1 = NONE
area_flags_mapping = UNIQUE_AREA | FLORA_ALLOWED
ambience_index = AMBIENCE_ICEMOON
sound_environment = SOUND_AREA_ICEMOON
ambient_buzz = 'sound/ambience/lavaland/magma.ogg'
allow_shuttle_docking = TRUE
skip_minimap_rendering = TRUE
/area/icemoon/surface
name = "Icemoon"
icon_state = "explored"
always_unpowered = TRUE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
requires_power = TRUE
/area/icemoon/surface/outdoors // parent that defines if something is on the exterior of the station.
name = "Icemoon Wastes"
outdoors = TRUE
/area/icemoon/surface/outdoors/Initialize(mapload)
if(HAS_TRAIT(SSstation, STATION_TRAIT_BRIGHT_DAY))
base_lighting_alpha = 145
return ..()
/// this is the area you use for stuff to not spawn, but if you still want weather.
/area/icemoon/surface/outdoors/nospawn
/area/icemoon/surface/outdoors/less_spawns
icon_state = "less_spawns"
/area/icemoon/surface/outdoors/less_spawns/New()
. = ..()
// this area SOMETIMES does map generation. Often it doesn't at all
// so it SHOULD NOT be used with the genturf turf type, as it is not always replaced
if(HAS_TRAIT(SSstation, STATION_TRAIT_FORESTED))
map_generator = /datum/map_generator/cave_generator/icemoon/surface/forested
// flip this on, the generator has already disabled dangerous fauna
area_flags_mapping = MOB_SPAWN_ALLOWED | FLORA_ALLOWED
/area/icemoon/surface/outdoors/always_forested
icon_state = "forest"
map_generator = /datum/map_generator/cave_generator/icemoon/surface/forested
area_flags_mapping = MOB_SPAWN_ALLOWED | FLORA_ALLOWED | CAVES_ALLOWED
/area/icemoon/surface/outdoors/rocky
icon_state = "rocky"
map_generator = /datum/map_generator/cave_generator/icemoon/surface/rocky
area_flags_mapping = MOB_SPAWN_ALLOWED | FLORA_ALLOWED | CAVES_ALLOWED
/area/icemoon/surface/outdoors/noteleport // for places like the cursed spring water
area_flags_mapping = parent_type::area_flags_mapping | NOTELEPORT
/area/icemoon/surface/outdoors/noruins // when you want random generation without the chance of getting ruins
icon_state = "noruins"
area_flags_mapping = parent_type::area_flags_mapping | MOB_SPAWN_ALLOWED | CAVES_ALLOWED
map_generator = /datum/map_generator/cave_generator/icemoon/surface/noruins
/area/icemoon/surface/outdoors/labor_camp
name = "Icemoon Labor Camp"
area_flags_mapping = /area::area_flags_mapping
/area/icemoon/surface/outdoors/unexplored //monsters and ruins spawn here
icon_state = "unexplored"
area_flags_mapping = parent_type::area_flags_mapping | MOB_SPAWN_ALLOWED | CAVES_ALLOWED
/area/icemoon/surface/outdoors/unexplored/rivers // rivers spawn here
icon_state = "danger"
map_generator = /datum/map_generator/cave_generator/icemoon/surface
/area/icemoon/surface/outdoors/unexplored/rivers/New()
. = ..()
if(HAS_TRAIT(SSstation, STATION_TRAIT_FORESTED))
map_generator = /datum/map_generator/cave_generator/icemoon/surface/forested
area_flags_mapping |= MOB_SPAWN_ALLOWED //flip this on, the generator has already disabled dangerous fauna
/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters
area_flags_mapping = /area/icemoon/::area_flags_mapping | CAVES_ALLOWED
/area/icemoon/underground
name = "Icemoon Caves"
outdoors = TRUE
always_unpowered = TRUE
requires_power = TRUE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
/area/icemoon/underground/unexplored // mobs and megafauna and ruins spawn here
name = "Icemoon Caves"
icon_state = "unexplored"
area_flags_mapping = CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED
/area/icemoon/underground/unexplored/no_rivers
icon_state = "norivers"
area_flags_mapping = CAVES_ALLOWED | FLORA_ALLOWED // same rules as "shoreline" turfs since we might need this to pull double-duty
map_generator = /datum/map_generator/cave_generator/icemoon
/area/icemoon/underground/unexplored/rivers // rivers spawn here
icon_state = "danger"
map_generator = /datum/map_generator/cave_generator/icemoon
/area/icemoon/underground/unexplored/rivers/deep
map_generator = /datum/map_generator/cave_generator/icemoon/deep
/area/icemoon/underground/unexplored/rivers/deep/shoreline //use this for when you don't want mobs to spawn in certain areas in the "deep" portions. Think adjacent to rivers or station structures.
icon_state = "shore"
area_flags_mapping = /area/icemoon/::area_flags_mapping | CAVES_ALLOWED
/area/icemoon/underground/explored // ruins can't spawn here
name = "Icemoon Underground"
area_flags_mapping = /area::area_flags_mapping
/area/icemoon/underground/explored/graveyard
name = "Graveyard"
area_flags_mapping = /area::area_flags_mapping
ambience_index = AMBIENCE_SPOOKY
icon = 'icons/area/areas_station.dmi'
icon_state = "graveyard"
/area/icemoon/underground/explored/graveyard/chapel
name = "Chapel Graveyard"