Files
BloopandGitHub 183c5af2e4 Adds flag for virtual areas, fixes being able to send funds from virtualspace to real accounts (#94071)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/90641
Fixes https://github.com/tgstation/tgstation/issues/88366

Eliminates worries over virtualspace currency being sent to real
accounts.

When I was looking into why there were no flags for bitrunning areas.
Then I saw this mess:

<img width="929" height="889" alt="Code_2we2QjDyFp"
src="https://github.com/user-attachments/assets/8a807bfe-b566-4057-a8ea-2b306325687d"
/>

Not having enough space / being too lazy to refactor this is a silly
reason to not include flags for something like these virtual areas where
it can be quite helpful. Fortunately I am not too lazy ~~in this
moment~~ so here we go:

It was fairly logical to move over some of these to a separate flag,
which I've called `area_flags_mapping` since they pertain to maploading
things and terrain generation mostly. `area_flags` stays reserved for
general properties and now has more room than it did before for you
people to fill it with.

In doing this it's also neatened up the code quit a bit, as UNIQUE_AREA
was kind of everywhere and now that it's implied by default less areas
need to have it defined (or explicitly un-defined).

<details> <summary> Working as intended </summary>

<img width="787" height="448" alt="dreamseeker_p0Qts36tG1"
src="https://github.com/user-attachments/assets/25056f34-8d43-4be2-a293-e53df7a7d1db"
/>

<img width="383" height="59" alt="dreamseeker_Ek7TXCcpbA"
src="https://github.com/user-attachments/assets/89622974-9467-4cdb-8345-d684f7c9004b"
/>

</details>

## Why It's Good For The Game

Fixes an exploit, improves the area flags situation slightly.

## Changelog

🆑
fix: you can no longer send money from virtualspace to a real account
code: adds a flag for virtual areas so they can easily be checked, as
well as an easy helper proc, 'is_area_virtual(your_area)'
/🆑
2025-11-22 12:24:41 -07:00

313 lines
9.6 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
/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
map_generator = /datum/map_generator/cave_generator/lavaland
/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
/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"