diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index 6fcac62c8cb..8b2ea7bf320 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -100,52 +100,55 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 /// This atom is a pseudo-floor that blocks map generation's checkPlaceAtom() from placing things like trees ontop of it. #define TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES (1<<8) - ////////////////Area flags\\\\\\\\\\\\\\ /// If it's a valid territory for cult summoning or the CRAB-17 phone to spawn #define VALID_TERRITORY (1<<0) /// If blobs can spawn there and if it counts towards their score. #define BLOBS_ALLOWED (1<<1) -/// If mining tunnel generation is allowed in this area -#define CAVES_ALLOWED (1<<2) -/// If flora are allowed to spawn in this area randomly through tunnel generation -#define FLORA_ALLOWED (1<<3) -/// If mobs can be spawned by natural random generation -#define MOB_SPAWN_ALLOWED (1<<4) -/// If megafauna can be spawned by natural random generation -#define MEGAFAUNA_SPAWN_ALLOWED (1<<5) /// Are you forbidden from teleporting to the area? (centcom, mobs, wizard, hand teleporter) -#define NOTELEPORT (1<<6) +#define NOTELEPORT (1<<2) /// Hides area from player Teleport function. -#define HIDDEN_AREA (1<<7) -/// If false, loading multiple maps with this area type will create multiple instances. -#define UNIQUE_AREA (1<<8) +#define HIDDEN_AREA (1<<3) /// If people are allowed to suicide in it. Mostly for OOC stuff like minigames -#define BLOCK_SUICIDE (1<<9) +#define BLOCK_SUICIDE (1<<5) /// If set, this area will be innately traversable by Xenobiology camera consoles. -#define XENOBIOLOGY_COMPATIBLE (1<<10) +#define XENOBIOLOGY_COMPATIBLE (1<<6) /// If blood cultists can draw runes or build structures on this AREA. -#define CULT_PERMITTED (1<<11) -/// If engravings are persistent in this area -#define PERSISTENT_ENGRAVINGS (1<<12) +#define CULT_PERMITTED (1<<7) /// Mobs that die in this area don't produce a dead chat message -#define NO_DEATH_MESSAGE (1<<13) +#define NO_DEATH_MESSAGE (1<<8) /// This area should have extra shielding from certain event effects -#define EVENT_PROTECTED (1<<14) +#define EVENT_PROTECTED (1<<9) /// This Area Doesn't have Flood or Bomb Admin Messages, but will still log -#define QUIET_LOGS (1<<15) -/// This area does not allow virtual entities to enter. -#define VIRTUAL_SAFE_AREA (1<<16) +#define QUIET_LOGS (1<<10) /// This area does not allow the Binary channel -#define BINARY_JAMMING (1<<17) +#define BINARY_JAMMING (1<<11) /// This area prevents Bag of Holding rifts from being opened. -#define NO_BOH (1<<18) +#define NO_BOH (1<<12) /// This area prevents fishing from removing unique/limited loot from sources that're also used outside of it. -#define UNLIMITED_FISHING (1<<19) +#define UNLIMITED_FISHING (1<<13) /// This area is prevented from having gravity (ie. space, nearstation, or outside solars) -#define NO_GRAVITY (1<<20) +#define NO_GRAVITY (1<<14) /// This area can be teleported in, but -only- to locations within that same area. -#define LOCAL_TELEPORT (1<<21) +#define LOCAL_TELEPORT (1<<15) + +////////////////Area Mapping Flags\\\\\\\\\\\\\\ +/// If false, loading multiple maps with this area type will create multiple instances. +#define UNIQUE_AREA (1<<0) +/// If mining tunnel generation is allowed in this area +#define CAVES_ALLOWED (1<<1) +/// If flora are allowed to spawn in this area randomly through tunnel generation +#define FLORA_ALLOWED (1<<2) +/// If mobs can be spawned by natural random generation +#define MOB_SPAWN_ALLOWED (1<<3) +/// If megafauna can be spawned by natural random generation +#define MEGAFAUNA_SPAWN_ALLOWED (1<<4) +/// If engravings are persistent in this area +#define PERSISTENT_ENGRAVINGS (1<<5) +/// This is a virtual/bitrunning area +#define VIRTUAL_AREA (1<<6) +/// This area does not allow virtual entities to enter. +#define VIRTUAL_SAFE_AREA (1<<7) /* These defines are used specifically with the atom/pass_flags bitmask diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 50c1a054b77..41339199d34 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -350,3 +350,4 @@ GLOBAL_LIST_INIT(book_types, typecacheof(list( #define is_multi_tile_object(atom) (atom.bound_width > ICON_SIZE_X || atom.bound_height > ICON_SIZE_Y) #define is_area_nearby_station(checked_area) (istype(checked_area, /area/space) || istype(checked_area, /area/space/nearstation) || istype(checked_area, /area/station/asteroid)) +#define is_area_virtual(checked_area) (GLOB.virtual_areas && GLOB.virtual_areas[(checked_area).type]) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index f031c8d7b79..1abddde7448 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -61,22 +61,32 @@ DEFINE_BITFIELD(appearance_flags, list( )) DEFINE_BITFIELD(area_flags, list( - "BLOBS_ALLOWED" = BLOBS_ALLOWED, - "BLOCK_SUICIDE" = BLOCK_SUICIDE, - "CAVES_ALLOWED" = CAVES_ALLOWED, - "CULT_PERMITTED" = CULT_PERMITTED, - "FLORA_ALLOWED" = FLORA_ALLOWED, - "HIDDEN_AREA" = HIDDEN_AREA, - "MEGAFAUNA_SPAWN_ALLOWED" = MEGAFAUNA_SPAWN_ALLOWED, - "MOB_SPAWN_ALLOWED" = MOB_SPAWN_ALLOWED, - "NOTELEPORT" = NOTELEPORT, - "NO_DEATH_MESSAGE" = NO_DEATH_MESSAGE, - "PERSISTENT_ENGRAVINGS" = PERSISTENT_ENGRAVINGS, - "UNIQUE_AREA" = UNIQUE_AREA, "VALID_TERRITORY" = VALID_TERRITORY, + "BLOBS_ALLOWED" = BLOBS_ALLOWED, + "NOTELEPORT" = NOTELEPORT, + "HIDDEN_AREA" = HIDDEN_AREA, + "BLOCK_SUICIDE" = BLOCK_SUICIDE, "XENOBIOLOGY_COMPATIBLE" = XENOBIOLOGY_COMPATIBLE, + "CULT_PERMITTED" = CULT_PERMITTED, + "NO_DEATH_MESSAGE" = NO_DEATH_MESSAGE, + "EVENT_PROTECTED" = EVENT_PROTECTED, + "QUIET_LOGS" = QUIET_LOGS, + "BINARY_JAMMING" = BINARY_JAMMING, "NO_BOH" = NO_BOH, "UNLIMITED_FISHING" = UNLIMITED_FISHING, + "NO_GRAVITY" = NO_GRAVITY, + "LOCAL_TELEPORT" = LOCAL_TELEPORT, +)) + +DEFINE_BITFIELD(area_flags_mapping, list( + "UNIQUE_AREA" = UNIQUE_AREA, + "CAVES_ALLOWED" = CAVES_ALLOWED, + "FLORA_ALLOWED" = FLORA_ALLOWED, + "MOB_SPAWN_ALLOWED" = MOB_SPAWN_ALLOWED, + "MEGAFAUNA_SPAWN_ALLOWED" = MEGAFAUNA_SPAWN_ALLOWED, + "PERSISTENT_ENGRAVINGS" = PERSISTENT_ENGRAVINGS, + "VIRTUAL_AREA" = VIRTUAL_AREA, + "VIRTUAL_SAFE_AREA" = VIRTUAL_SAFE_AREA, )) DEFINE_BITFIELD(turf_flags, list( diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 754aa17880b..caec055f21f 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -486,7 +486,7 @@ GLOBAL_LIST_EMPTY(the_station_areas) /// Generates the global station area list, filling it with typepaths of unique areas found on the station Z. /datum/controller/subsystem/mapping/proc/generate_station_area_list() for(var/area/station/station_area in GLOB.areas) - if (!(station_area.area_flags & UNIQUE_AREA)) + if (!(station_area.area_flags_mapping & UNIQUE_AREA)) continue if (is_station_level(station_area.z)) GLOB.the_station_areas += station_area.type diff --git a/code/controllers/subsystem/persistence/engravings.dm b/code/controllers/subsystem/persistence/engravings.dm index ad00c7909d7..c60f5ae524b 100644 --- a/code/controllers/subsystem/persistence/engravings.dm +++ b/code/controllers/subsystem/persistence/engravings.dm @@ -62,7 +62,7 @@ if(!engraving.persistent_save) continue var/area/engraved_area = get_area(engraving.parent) - if(!(engraved_area.area_flags & PERSISTENT_ENGRAVINGS)) + if(!(engraved_area.area_flags_mapping & PERSISTENT_ENGRAVINGS)) continue saved_data["entries"] += engraving.save_persistent() diff --git a/code/datums/mapgen/CaveGenerator.dm b/code/datums/mapgen/CaveGenerator.dm index ec27a7d4b8f..3641edb4d93 100644 --- a/code/datums/mapgen/CaveGenerator.dm +++ b/code/datums/mapgen/CaveGenerator.dm @@ -104,7 +104,7 @@ /datum/map_generator/cave_generator/generate_terrain(list/turfs, area/generate_in) . = ..() - if(!(generate_in.area_flags & CAVES_ALLOWED)) + if(!(generate_in.area_flags_mapping & CAVES_ALLOWED)) return if(length(possible_biomes)) @@ -138,7 +138,7 @@ * you're probably doing something wrong. */ /datum/map_generator/cave_generator/proc/generate_terrain_with_biomes(list/turfs, area/generate_in) - if(!(generate_in.area_flags & CAVES_ALLOWED)) + if(!(generate_in.area_flags_mapping & CAVES_ALLOWED)) return var/humidity_seed = rand(0, 50000) @@ -212,10 +212,10 @@ return populate_terrain_with_biomes(turfs, generate_in) // Area var pullouts to make accessing in the loop faster - var/flora_allowed = (generate_in.area_flags & FLORA_ALLOWED) && length(flora_spawn_list) - var/feature_allowed = (generate_in.area_flags & FLORA_ALLOWED) && length(feature_spawn_list) - var/mobs_allowed = (generate_in.area_flags & MOB_SPAWN_ALLOWED) && length(mob_spawn_list) - var/megas_allowed = (generate_in.area_flags & MEGAFAUNA_SPAWN_ALLOWED) && length(megafauna_spawn_list) + var/flora_allowed = (generate_in.area_flags_mapping & FLORA_ALLOWED) && length(flora_spawn_list) + var/feature_allowed = (generate_in.area_flags_mapping & FLORA_ALLOWED) && length(feature_spawn_list) + var/mobs_allowed = (generate_in.area_flags_mapping & MOB_SPAWN_ALLOWED) && length(mob_spawn_list) + var/megas_allowed = (generate_in.area_flags_mapping & MEGAFAUNA_SPAWN_ALLOWED) && length(megafauna_spawn_list) var/start_time = REALTIMEOFDAY @@ -310,9 +310,9 @@ */ /datum/map_generator/cave_generator/proc/populate_terrain_with_biomes(list/turfs, area/generate_in) // Area var pullouts to make accessing in the loop faster - var/flora_allowed = (generate_in.area_flags & FLORA_ALLOWED) - var/features_allowed = (generate_in.area_flags & FLORA_ALLOWED) - var/fauna_allowed = (generate_in.area_flags & MOB_SPAWN_ALLOWED) + var/flora_allowed = (generate_in.area_flags_mapping & FLORA_ALLOWED) + var/features_allowed = (generate_in.area_flags_mapping & FLORA_ALLOWED) + var/fauna_allowed = (generate_in.area_flags_mapping & MOB_SPAWN_ALLOWED) var/start_time = REALTIMEOFDAY diff --git a/code/datums/mapgen/biomes/_biome.dm b/code/datums/mapgen/biomes/_biome.dm index a0672059d93..bda1029f431 100644 --- a/code/datums/mapgen/biomes/_biome.dm +++ b/code/datums/mapgen/biomes/_biome.dm @@ -136,7 +136,6 @@ if(!(flora_allowed && length(flora_types)) && !(features_allowed && length(feature_types)) && !(fauna_allowed && length(fauna_types))) return - for(var/turf/target_turf as anything in target_turfs) // We do the CHECK_TICK here because there's a bunch of continue calls // in this. diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6334466534c..c9692021a01 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -24,7 +24,10 @@ /// This uses the same nested list format as turfs_by_zlevel var/list/list/turf/turfs_to_uncontain_by_zlevel = list() - var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + /// General flag for area properties + var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | CULT_PERMITTED + /// Flag for mapping related area properties (such as cavegen) + var/area_flags_mapping = UNIQUE_AREA ///Do we have an active fire alarm? var/fire = FALSE @@ -165,7 +168,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/New() // This interacts with the map loader, so it needs to be set immediately // rather than waiting for atoms to initialize. - if (area_flags & UNIQUE_AREA) + if (area_flags_mapping & UNIQUE_AREA) GLOB.areas_by_type[type] = src GLOB.areas += src energy_usage = new /list(AREA_USAGE_LEN) // Some atoms would like to use power in Initialize() diff --git a/code/game/area/areas/away_content.dm b/code/game/area/areas/away_content.dm index 648ef4c8d31..39d7ebce1db 100644 --- a/code/game/area/areas/away_content.dm +++ b/code/game/area/areas/away_content.dm @@ -11,7 +11,6 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" default_gravity = STANDARD_GRAVITY ambience_index = AMBIENCE_AWAY sound_environment = SOUND_ENVIRONMENT_ROOM - area_flags = UNIQUE_AREA /area/awaymission/museum name = "Nanotrasen Museum" @@ -33,11 +32,11 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" name = "Super Secret Room" static_lighting = FALSE base_lighting_alpha = 255 - area_flags = UNIQUE_AREA|NOTELEPORT + area_flags = NOTELEPORT default_gravity = STANDARD_GRAVITY /area/awaymission/secret - area_flags = UNIQUE_AREA|NOTELEPORT|HIDDEN_AREA + area_flags = NOTELEPORT|HIDDEN_AREA /area/awaymission/secret/unpowered always_unpowered = TRUE diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index 06a87345f9c..58d0439eed3 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -8,7 +8,7 @@ static_lighting = TRUE requires_power = FALSE default_gravity = STANDARD_GRAVITY - area_flags = UNIQUE_AREA | NOTELEPORT + area_flags = NOTELEPORT flags_1 = NONE // This is just to define the category @@ -142,7 +142,6 @@ name = "Thunderdome Observation" icon_state = "thunder_observe" - // ENEMY // Wizard @@ -152,16 +151,15 @@ static_lighting = TRUE requires_power = FALSE default_gravity = STANDARD_GRAVITY - area_flags = UNIQUE_AREA | NOTELEPORT + area_flags = NOTELEPORT flags_1 = NONE - //Abductors /area/centcom/abductor_ship name = "Abductor Ship" icon_state = "abductor_ship" requires_power = FALSE - area_flags = UNIQUE_AREA | NOTELEPORT + area_flags = NOTELEPORT static_lighting = FALSE base_lighting_alpha = 255 default_gravity = STANDARD_GRAVITY @@ -173,7 +171,7 @@ icon_state = "syndie-ship" requires_power = FALSE default_gravity = STANDARD_GRAVITY - area_flags = UNIQUE_AREA | NOTELEPORT + area_flags = NOTELEPORT flags_1 = NONE ambience_index = AMBIENCE_DANGER @@ -218,12 +216,11 @@ name = "Mafia Minigame" icon_state = "mafia" static_lighting = FALSE - base_lighting_alpha = 255 requires_power = FALSE default_gravity = STANDARD_GRAVITY flags_1 = NONE - area_flags = BLOCK_SUICIDE | UNIQUE_AREA + area_flags = BLOCK_SUICIDE //CAPTURE THE FLAG /area/centcom/ctf @@ -234,7 +231,7 @@ base_lighting_alpha = 255 default_gravity = STANDARD_GRAVITY flags_1 = NONE - area_flags = UNIQUE_AREA | NOTELEPORT | NO_DEATH_MESSAGE | BLOCK_SUICIDE + area_flags = NOTELEPORT | NO_DEATH_MESSAGE | BLOCK_SUICIDE /area/centcom/ctf/control_room name = "Control Room A" @@ -278,7 +275,6 @@ icon_state = "asteroid" requires_power = FALSE default_gravity = STANDARD_GRAVITY - area_flags = UNIQUE_AREA ambience_index = AMBIENCE_MINING flags_1 = CAN_BE_DIRTY_1 sound_environment = SOUND_AREA_ASTEROID @@ -288,7 +284,7 @@ ambience_index = AMBIENCE_RUINS always_unpowered = FALSE requires_power = TRUE - area_flags = UNIQUE_AREA | BLOBS_ALLOWED + area_flags = BLOBS_ALLOWED /area/centcom/asteroid/nearstation/bomb_site name = "\improper Bomb Testing Asteroid" diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index 9f0bcfab8f6..3d97da72c39 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -3,7 +3,8 @@ icon = 'icons/area/areas_station.dmi' icon_state = "mining" default_gravity = STANDARD_GRAVITY - area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED | CULT_PERMITTED + area_flags = VALID_TERRITORY | CULT_PERMITTED + area_flags_mapping = UNIQUE_AREA | FLORA_ALLOWED ambient_buzz = 'sound/ambience/lavaland/magma.ogg' /area/mine/lobby @@ -132,7 +133,7 @@ icon_state = "mining" default_gravity = STANDARD_GRAVITY flags_1 = NONE - area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED + area_flags = VALID_TERRITORY | FLORA_ALLOWED sound_environment = SOUND_AREA_LAVALAND ambient_buzz = 'sound/ambience/lavaland/magma.ogg' allow_shuttle_docking = TRUE @@ -146,7 +147,7 @@ power_light = FALSE requires_power = TRUE ambience_index = AMBIENCE_MINING - area_flags = VALID_TERRITORY | UNIQUE_AREA + area_flags = VALID_TERRITORY /area/lavaland/underground name = "Lavaland Caves" @@ -157,7 +158,6 @@ power_equip = FALSE power_light = FALSE ambience_index = AMBIENCE_MINING - area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED /area/lavaland/surface/outdoors name = "Lavaland Wastes" @@ -165,12 +165,14 @@ /area/lavaland/surface/outdoors/unexplored //monsters and ruins spawn here icon_state = "unexplored" - area_flags = VALID_TERRITORY | UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED + 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 | UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED + 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 @@ -178,9 +180,7 @@ /area/lavaland/surface/outdoors/explored name = "Lavaland Labor Camp" - area_flags = VALID_TERRITORY | UNIQUE_AREA - - + area_flags = VALID_TERRITORY /**********************Ice Moon Areas**************************/ @@ -189,7 +189,7 @@ icon_state = "mining" default_gravity = STANDARD_GRAVITY flags_1 = NONE - area_flags = UNIQUE_AREA | FLORA_ALLOWED + area_flags_mapping = UNIQUE_AREA | FLORA_ALLOWED ambience_index = AMBIENCE_ICEMOON sound_environment = SOUND_AREA_ICEMOON ambient_buzz = 'sound/ambience/lavaland/magma.ogg' @@ -203,7 +203,6 @@ power_equip = FALSE power_light = FALSE requires_power = TRUE - area_flags = UNIQUE_AREA | FLORA_ALLOWED /area/icemoon/surface/outdoors // parent that defines if something is on the exterior of the station. name = "Icemoon Wastes" @@ -227,33 +226,33 @@ 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 = MOB_SPAWN_ALLOWED | FLORA_ALLOWED + 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 = MOB_SPAWN_ALLOWED | FLORA_ALLOWED | CAVES_ALLOWED + 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 = MOB_SPAWN_ALLOWED | FLORA_ALLOWED | CAVES_ALLOWED + area_flags_mapping = MOB_SPAWN_ALLOWED | FLORA_ALLOWED | CAVES_ALLOWED /area/icemoon/surface/outdoors/noteleport // for places like the cursed spring water - area_flags = UNIQUE_AREA | FLORA_ALLOWED | NOTELEPORT + 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 = UNIQUE_AREA | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | CAVES_ALLOWED - map_generator = /datum/map_generator/cave_generator/icemoon/surface/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 = UNIQUE_AREA + area_flags_mapping = /area::area_flags_mapping /area/icemoon/surface/outdoors/unexplored //monsters and ruins spawn here icon_state = "unexplored" - area_flags = UNIQUE_AREA | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | CAVES_ALLOWED + 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" @@ -263,10 +262,10 @@ . = ..() if(HAS_TRAIT(SSstation, STATION_TRAIT_FORESTED)) map_generator = /datum/map_generator/cave_generator/icemoon/surface/forested - area_flags |= MOB_SPAWN_ALLOWED //flip this on, the generator has already disabled dangerous fauna + 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 = UNIQUE_AREA | FLORA_ALLOWED | CAVES_ALLOWED + area_flags_mapping = /area/icemoon/::area_flags_mapping | CAVES_ALLOWED /area/icemoon/underground name = "Icemoon Caves" @@ -276,16 +275,15 @@ power_environ = FALSE power_equip = FALSE power_light = FALSE - area_flags = UNIQUE_AREA | FLORA_ALLOWED /area/icemoon/underground/unexplored // mobs and megafauna and ruins spawn here name = "Icemoon Caves" icon_state = "unexplored" - area_flags = CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED + area_flags_mapping = CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED /area/icemoon/underground/unexplored/no_rivers icon_state = "norivers" - area_flags = CAVES_ALLOWED | FLORA_ALLOWED // same rules as "shoreline" turfs since we might need this to pull double-duty + 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 @@ -297,15 +295,15 @@ /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 = UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED + area_flags_mapping = /area/icemoon/::area_flags_mapping | CAVES_ALLOWED /area/icemoon/underground/explored // ruins can't spawn here name = "Icemoon Underground" - area_flags = UNIQUE_AREA + area_flags_mapping = /area::area_flags_mapping /area/icemoon/underground/explored/graveyard name = "Graveyard" - area_flags = UNIQUE_AREA + area_flags_mapping = /area::area_flags_mapping ambience_index = AMBIENCE_SPOOKY icon = 'icons/area/areas_station.dmi' icon_state = "graveyard" diff --git a/code/game/area/areas/misc.dm b/code/game/area/areas/misc.dm index de1cbff381b..ac66943d5d1 100644 --- a/code/game/area/areas/misc.dm +++ b/code/game/area/areas/misc.dm @@ -10,7 +10,7 @@ power_light = FALSE power_equip = FALSE power_environ = FALSE - area_flags = UNIQUE_AREA|NO_GRAVITY + area_flags = NO_GRAVITY outdoors = TRUE ambience_index = AMBIENCE_SPACE flags_1 = CAN_BE_DIRTY_1 diff --git a/code/game/area/areas/ruins/_ruins.dm b/code/game/area/areas/ruins/_ruins.dm index f2ecc7ac73e..92fff19386d 100644 --- a/code/game/area/areas/ruins/_ruins.dm +++ b/code/game/area/areas/ruins/_ruins.dm @@ -5,7 +5,7 @@ icon = 'icons/area/areas_ruins.dmi' icon_state = "ruins" default_gravity = STANDARD_GRAVITY - area_flags = HIDDEN_AREA | UNIQUE_AREA + area_flags = HIDDEN_AREA ambience_index = AMBIENCE_RUINS flags_1 = CAN_BE_DIRTY_1 sound_environment = SOUND_ENVIRONMENT_STONEROOM diff --git a/code/game/area/areas/ruins/icemoon.dm b/code/game/area/areas/ruins/icemoon.dm index 7dff4bdba55..80f8f6bb33a 100644 --- a/code/game/area/areas/ruins/icemoon.dm +++ b/code/game/area/areas/ruins/icemoon.dm @@ -59,10 +59,10 @@ sound_environment = SOUND_AREA_SMALL_ENCLOSED ambience_index = AMBIENCE_DANGER area_flags = NOTELEPORT + area_flags_mapping = NONE mood_bonus = -10 mood_message = "What the fuck." - /area/ruin/planetengi name = "\improper Engineering Outpost" @@ -115,11 +115,13 @@ /area/ruin/outpost31/lab name = "\improper Outpost 31 Lab" area_flags = NOTELEPORT //megafauna arena + area_flags_mapping = NONE requires_power = FALSE /area/ruin/outpost31/lootroom name = "\improper Outpost 31 Secondary Storage" area_flags = NOTELEPORT //megafauna loot room + area_flags_mapping = NONE requires_power = FALSE /area/ruin/outpost31/recroom diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index 4e806bf1c10..cef9e3d308a 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -43,6 +43,7 @@ /area/ruin/unpowered/cultaltar name = "\improper Cult Altar" area_flags = CULT_PERMITTED + area_flags_mapping = NONE ambience_index = AMBIENCE_SPOOKY /area/ruin/thelizardsgas_lavaland diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index c2e32c86bee..24bd482633c 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -2,7 +2,8 @@ /area/ruin/space default_gravity = ZERO_GRAVITY - area_flags = UNIQUE_AREA + area_flags = NONE + area_flags_mapping = UNIQUE_AREA /area/ruin/space/unpowered always_unpowered = TRUE @@ -16,11 +17,10 @@ /area/ruin/space/has_grav/powered requires_power = FALSE - // Ruin solars define, /area/solars was moved to /area/station/solars, causing the solars specific areas to lose their properties /area/ruin/space/solars requires_power = FALSE - area_flags = UNIQUE_AREA + area_flags = NONE flags_1 = NONE ambience_index = AMBIENCE_ENGI airlock_wires = /datum/wires/airlock/engineering @@ -310,7 +310,7 @@ icon = 'icons/area/areas_ruins.dmi' // Solars inheriet areas_misc.dmi, not areas_ruin.dmi icon_state = "os_charlie_solars" requires_power = FALSE - area_flags = UNIQUE_AREA + area_flags = NONE sound_environment = SOUND_AREA_SPACE /area/ruin/space/ancientstation/charlie/storage @@ -534,7 +534,7 @@ /area/ruin/space/djstation/solars name = "\improper DJ Station Solars" icon_state = "DJ" - area_flags = UNIQUE_AREA + area_flags = NONE default_gravity = ZERO_GRAVITY /area/ruin/space/djstation/service @@ -582,7 +582,7 @@ /area/ruin/space/has_grav/hellfactoryoffice name = "\improper Hell Factory Office" - area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | NOTELEPORT + area_flags = VALID_TERRITORY | BLOBS_ALLOWED | NOTELEPORT //Ruin of Spinward Smoothies @@ -600,7 +600,7 @@ /area/ruin/space/has_grav/powered/biooutpost name = "\improper Bioresearch Outpost" - area_flags = UNIQUE_AREA | NOTELEPORT + area_flags = NOTELEPORT /area/ruin/space/has_grav/powered/biooutpost/vault name = "\improper Bioresearch Outpost Secure Testing" diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index c37d53de151..9a651fb5e3d 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -10,6 +10,7 @@ always_unpowered = FALSE // Loading the same shuttle map at a different time will produce distinct area instances. area_flags = NONE + area_flags_mapping = NONE icon = 'icons/area/areas_station.dmi' icon_state = "shuttle" flags_1 = CAN_BE_DIRTY_1 @@ -120,11 +121,9 @@ static_lighting = FALSE base_lighting_alpha = 255 - /area/shuttle/arrival name = "Arrival Shuttle" - area_flags = UNIQUE_AREA// SSjob refers to this area for latejoiners - + area_flags_mapping = UNIQUE_AREA // SSjob refers to this area for latejoiners /area/shuttle/arrival/on_joining_game(mob/living/boarder) if(SSshuttle.arrivals?.mode == SHUTTLE_CALL) @@ -133,22 +132,17 @@ boarder.playsound_local(get_turf(boarder), 'sound/announcer/ApproachingTG.ogg', 25) boarder.update_parallax_teleport() - /area/shuttle/pod_1 name = "Escape Pod One" - area_flags = NONE /area/shuttle/pod_2 name = "Escape Pod Two" - area_flags = NONE /area/shuttle/pod_3 name = "Escape Pod Three" - area_flags = NONE /area/shuttle/pod_4 name = "Escape Pod Four" - area_flags = NONE /area/shuttle/mining name = "Mining Shuttle" @@ -166,10 +160,9 @@ /area/shuttle/escape name = "Emergency Shuttle" - area_flags = BLOBS_ALLOWED + area_flags = CULT_PERMITTED area_limited_icon_smoothing = /area/shuttle/escape flags_1 = CAN_BE_DIRTY_1 - area_flags = CULT_PERMITTED /area/shuttle/escape/backup name = "Backup Emergency Shuttle" diff --git a/code/game/area/areas/station/common.dm b/code/game/area/areas/station/common.dm index 2280215ab6e..1b6eba4dc25 100644 --- a/code/game/area/areas/station/common.dm +++ b/code/game/area/areas/station/common.dm @@ -2,7 +2,7 @@ name = "\improper Crew Facilities" icon_state = "commons" sound_environment = SOUND_AREA_STANDARD_STATION - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED /* * Dorm Areas diff --git a/code/game/area/areas/station/engineering.dm b/code/game/area/areas/station/engineering.dm index 71fe6024d88..feb565ecd53 100644 --- a/code/game/area/areas/station/engineering.dm +++ b/code/game/area/areas/station/engineering.dm @@ -26,7 +26,7 @@ /*outside atmos*/ /area/station/engineering/atmos/space_catwalk name = "\improper Atmospherics Space Catwalk" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED sound_environment = SOUND_AREA_SPACE ambience_index = AMBIENCE_SPACE @@ -63,7 +63,7 @@ /area/station/engineering/atmospherics_engine name = "\improper Atmospherics Engine" icon_state = "atmos_engine" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED /area/station/engineering/lobby name = "\improper Engineering Lobby" @@ -72,7 +72,7 @@ /area/station/engineering/supermatter name = "\improper Supermatter Engine" icon_state = "engine_sm" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED sound_environment = SOUND_AREA_SMALL_ENCLOSED /area/station/engineering/supermatter/waste @@ -119,7 +119,7 @@ /area/station/engineering/storage/tcomms name = "Telecomms Storage" icon_state = "tcom_storage" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED /* * Construction Areas diff --git a/code/game/area/areas/station/hallway.dm b/code/game/area/areas/station/hallway.dm index 9512f20c709..12a5ba6816b 100644 --- a/code/game/area/areas/station/hallway.dm +++ b/code/game/area/areas/station/hallway.dm @@ -83,7 +83,7 @@ /area/station/hallway/secondary/entry name = "\improper Arrival Shuttle Hallway" icon_state = "entry" - area_flags = UNIQUE_AREA | EVENT_PROTECTED + area_flags = EVENT_PROTECTED /area/station/hallway/secondary/dock name = "\improper Secondary Station Dock Hallway" diff --git a/code/game/area/areas/station/maintenance.dm b/code/game/area/areas/station/maintenance.dm index 5e636719e7a..93919536c58 100644 --- a/code/game/area/areas/station/maintenance.dm +++ b/code/game/area/areas/station/maintenance.dm @@ -1,7 +1,7 @@ /area/station/maintenance name = "Generic Maintenance" ambience_index = AMBIENCE_MAINT - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED | PERSISTENT_ENGRAVINGS + area_flags = BLOBS_ALLOWED | CULT_PERMITTED | PERSISTENT_ENGRAVINGS airlock_wires = /datum/wires/airlock/maint sound_environment = SOUND_AREA_TUNNEL_ENCLOSED forced_ambience = TRUE @@ -94,7 +94,7 @@ /area/station/maintenance/department/science/xenobiology name = "Xenobiology Maintenance" icon_state = "xenomaint" - area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | XENOBIOLOGY_COMPATIBLE | CULT_PERMITTED + area_flags = VALID_TERRITORY | BLOBS_ALLOWED | XENOBIOLOGY_COMPATIBLE | CULT_PERMITTED /* * Generic Maintenance Tunnels diff --git a/code/game/area/areas/station/misc.dm b/code/game/area/areas/station/misc.dm index be99950c736..fde6b00bf5f 100644 --- a/code/game/area/areas/station/misc.dm +++ b/code/game/area/areas/station/misc.dm @@ -30,6 +30,6 @@ power_light = FALSE requires_power = TRUE ambience_index = AMBIENCE_MINING - area_flags = UNIQUE_AREA + area_flags = NONE outdoors = TRUE allow_shuttle_docking = TRUE diff --git a/code/game/area/areas/station/science.dm b/code/game/area/areas/station/science.dm index 57623ee6183..b64e7efe75a 100644 --- a/code/game/area/areas/station/science.dm +++ b/code/game/area/areas/station/science.dm @@ -114,23 +114,23 @@ /area/station/science/ordnance/burnchamber name = "\improper Ordnance Burn Chamber" icon_state = "ord_burn" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED /area/station/science/ordnance/freezerchamber name = "\improper Ordnance Freezer Chamber" icon_state = "ord_freeze" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED // Room for equipments and such /area/station/science/ordnance/testlab name = "\improper Ordnance Testing Lab" icon_state = "ord_test" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + area_flags = BLOBS_ALLOWED | CULT_PERMITTED /area/station/science/ordnance/bomb name = "\improper Ordnance Bomb Site" icon_state = "ord_boom" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED | NO_GRAVITY + area_flags = BLOBS_ALLOWED | CULT_PERMITTED | NO_GRAVITY /area/station/science/ordnance/bomb/planet area_flags = /area/station/science/ordnance/bomb::area_flags & ~NO_GRAVITY diff --git a/code/game/area/areas/station/security.dm b/code/game/area/areas/station/security.dm index e1226a6a9a5..8c15638c7f0 100644 --- a/code/game/area/areas/station/security.dm +++ b/code/game/area/areas/station/security.dm @@ -194,7 +194,7 @@ /area/station/security/prison name = "\improper Prison Wing" icon_state = "sec_prison" - area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED | PERSISTENT_ENGRAVINGS + area_flags = VALID_TERRITORY | BLOBS_ALLOWED | CULT_PERMITTED | PERSISTENT_ENGRAVINGS //Rad proof /area/station/security/prison/toilet diff --git a/code/game/area/areas/station/service.dm b/code/game/area/areas/station/service.dm index 23fe166616d..35540656326 100644 --- a/code/game/area/areas/station/service.dm +++ b/code/game/area/areas/station/service.dm @@ -77,7 +77,7 @@ mood_bonus = 5 mood_message = "I love being in the library!" mood_trait = TRAIT_INTROVERT - area_flags = CULT_PERMITTED | BLOBS_ALLOWED | UNIQUE_AREA + area_flags = CULT_PERMITTED | BLOBS_ALLOWED sound_environment = SOUND_AREA_LARGE_SOFTFLOOR /area/station/service/library/garden @@ -180,7 +180,7 @@ /area/station/service/janitor name = "\improper Custodial Closet" icon_state = "janitor" - area_flags = CULT_PERMITTED | BLOBS_ALLOWED | UNIQUE_AREA + area_flags = CULT_PERMITTED | BLOBS_ALLOWED sound_environment = SOUND_AREA_SMALL_ENCLOSED /area/station/service/barber diff --git a/code/game/area/areas/station/solars.dm b/code/game/area/areas/station/solars.dm index 8d3a81420e7..569a7f0a169 100644 --- a/code/game/area/areas/station/solars.dm +++ b/code/game/area/areas/station/solars.dm @@ -5,7 +5,7 @@ /area/station/solars icon_state = "panels" requires_power = FALSE - area_flags = UNIQUE_AREA|NO_GRAVITY + area_flags = NO_GRAVITY flags_1 = NONE ambience_index = AMBIENCE_ENGI airlock_wires = /datum/wires/airlock/engineering @@ -44,7 +44,7 @@ /area/station/solars/starboard/fore/asteriod name = "\improper Starboard Bow Asteriod Solar Array" icon_state = "panelsFS" - area_flags = UNIQUE_AREA // solar areas directly on asteriod have gravity + area_flags = NONE // solar areas directly on asteriod have gravity /area/station/solars/port name = "\improper Port Solar Array" @@ -53,7 +53,7 @@ /area/station/solars/port/asteriod name = "\improper Port Asteriod Solar Array" icon_state = "panelsP" - area_flags = UNIQUE_AREA // solar areas directly on asteriod have gravity + area_flags = NONE // solar areas directly on asteriod have gravity /area/station/solars/port/aft name = "\improper Port Quarter Solar Array" diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm index 30d9f89a424..726665f97df 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm @@ -65,7 +65,7 @@ GLOBAL_LIST_EMPTY(heretic_sacrifice_landmarks) default_gravity = STANDARD_GRAVITY ambience_index = AMBIENCE_SPOOKY sound_environment = SOUND_ENVIRONMENT_CAVE - area_flags = UNIQUE_AREA | NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE | NO_BOH + area_flags = NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE | NO_BOH /area/centcom/heretic_sacrifice/Initialize(mapload) if(!ambientsounds) diff --git a/code/modules/antagonists/voidwalker/voidwalker_kidnap.dm b/code/modules/antagonists/voidwalker/voidwalker_kidnap.dm index cada56a33eb..a0dad18436f 100644 --- a/code/modules/antagonists/voidwalker/voidwalker_kidnap.dm +++ b/code/modules/antagonists/voidwalker/voidwalker_kidnap.dm @@ -21,7 +21,7 @@ GLOBAL_LIST_EMPTY(voidwalker_void) default_gravity = STANDARD_GRAVITY ambience_index = AMBIENCE_SPOOKY sound_environment = SOUND_ENVIRONMENT_CAVE - area_flags = UNIQUE_AREA | NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE + area_flags = NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE /// Mini car where people drive around in in their mangled corpse to heal a bit before they get dumped back on station /obj/effect/wisp_mobile diff --git a/code/modules/awaymissions/cordon.dm b/code/modules/awaymissions/cordon.dm index 738efa1d7c2..5a84b4381da 100644 --- a/code/modules/awaymissions/cordon.dm +++ b/code/modules/awaymissions/cordon.dm @@ -58,7 +58,7 @@ icon_state = "cordon" static_lighting = FALSE base_lighting_alpha = 255 - area_flags = UNIQUE_AREA|NOTELEPORT|HIDDEN_AREA + area_flags = NOTELEPORT|HIDDEN_AREA requires_power = FALSE /area/misc/cordon/Entered(atom/movable/arrived, area/old_area) diff --git a/code/modules/basketball/basketball_map_loading.dm b/code/modules/basketball/basketball_map_loading.dm index 1dac2043668..319e3cbdc57 100644 --- a/code/modules/basketball/basketball_map_loading.dm +++ b/code/modules/basketball/basketball_map_loading.dm @@ -30,7 +30,7 @@ base_lighting_alpha = 255 default_gravity = STANDARD_GRAVITY flags_1 = NONE - area_flags = UNIQUE_AREA | NOTELEPORT | NO_DEATH_MESSAGE | BLOCK_SUICIDE + area_flags = NOTELEPORT | NO_DEATH_MESSAGE | BLOCK_SUICIDE /datum/lazy_template/basketball map_dir = "_maps/minigame/basketball" diff --git a/code/modules/bitrunning/areas.dm b/code/modules/bitrunning/areas.dm index 74c6aa3c15c..66060559a94 100644 --- a/code/modules/bitrunning/areas.dm +++ b/code/modules/bitrunning/areas.dm @@ -14,7 +14,8 @@ name = "Virtual Domain Ruins" icon_state = "bit_ruin" icon = 'icons/area/areas_station.dmi' - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = LOCAL_TELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags_mapping = VIRTUAL_AREA default_gravity = STANDARD_GRAVITY requires_power = FALSE @@ -26,7 +27,8 @@ /area/virtual_domain/safehouse name = "Virtual Domain Safehouse" - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA | UNLIMITED_FISHING + area_flags = LOCAL_TELEPORT | EVENT_PROTECTED | UNLIMITED_FISHING + area_flags_mapping = UNIQUE_AREA | VIRTUAL_AREA | VIRTUAL_SAFE_AREA icon_state = "bit_safe" requires_power = FALSE sound_environment = SOUND_ENVIRONMENT_ROOM @@ -36,32 +38,49 @@ /area/lavaland/surface/outdoors/virtual_domain name = "Virtual Domain Lava Ruins" icon_state = "bit_ruin" - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = /area/virtual_domain::area_flags + area_flags_mapping = /area/virtual_domain::area_flags_mapping /area/icemoon/underground/explored/virtual_domain name = "Virtual Domain Ice Ruins" icon_state = "bit_ice" - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = /area/virtual_domain::area_flags + area_flags_mapping = /area/virtual_domain::area_flags_mapping /area/ruin/space/virtual_domain name = "Virtual Domain Unexplored Location" icon = 'icons/area/areas_station.dmi' icon_state = "bit_ruin" - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = /area/virtual_domain::area_flags + area_flags_mapping = /area/virtual_domain::area_flags_mapping /area/space/virtual_domain name = "Virtual Domain Space" icon = 'icons/area/areas_station.dmi' icon_state = "bit_space" - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = /area/virtual_domain::area_flags + area_flags_mapping = /area/virtual_domain::area_flags_mapping ///Areas that virtual entities should not be in /area/virtual_domain/protected_space name = "Virtual Domain Safe Zone" - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA | UNLIMITED_FISHING + area_flags = /area/virtual_domain/safehouse::area_flags + area_flags_mapping = /area/virtual_domain/safehouse::area_flags_mapping icon_state = "bit_safe" /area/virtual_domain/protected_space/fullbright static_lighting = FALSE base_lighting_alpha = 255 + +/// A hash lookup list of all the virtual area types +GLOBAL_LIST_INIT_TYPED(virtual_areas, /area, populate_virtual_areas()) + +/// Constructs the list of virtual areas +/proc/populate_virtual_areas() + RETURN_TYPE(/list/area) + var/list/area/virtual_areas = list() + for(var/area/area_type as anything in subtypesof(/area)) + if (area_type::area_flags_mapping & VIRTUAL_AREA) + virtual_areas[area_type] = TRUE + return virtual_areas diff --git a/code/modules/bitrunning/components/virtual_entity.dm b/code/modules/bitrunning/components/virtual_entity.dm index 52a259a6d04..77e387adc1d 100644 --- a/code/modules/bitrunning/components/virtual_entity.dm +++ b/code/modules/bitrunning/components/virtual_entity.dm @@ -38,7 +38,7 @@ stack_trace("Virtual entity entered a location with no area!") return - if(location_area.area_flags & VIRTUAL_SAFE_AREA) + if(location_area.area_flags_mapping & VIRTUAL_SAFE_AREA) source.balloon_alert(source, "out of bounds!") COOLDOWN_START(src, OOB_cooldown, 2 SECONDS) return COMPONENT_MOVABLE_BLOCK_PRE_MOVE diff --git a/code/modules/deathmatch/deathmatch_mapping.dm b/code/modules/deathmatch/deathmatch_mapping.dm index 97c73fd5e9a..2c335fe0788 100644 --- a/code/modules/deathmatch/deathmatch_mapping.dm +++ b/code/modules/deathmatch/deathmatch_mapping.dm @@ -2,7 +2,7 @@ name = "Deathmatch Arena" requires_power = FALSE default_gravity = STANDARD_GRAVITY - area_flags = UNIQUE_AREA | LOCAL_TELEPORT | EVENT_PROTECTED | QUIET_LOGS | NO_DEATH_MESSAGE | BINARY_JAMMING + area_flags = LOCAL_TELEPORT | EVENT_PROTECTED | QUIET_LOGS | NO_DEATH_MESSAGE | BINARY_JAMMING /area/deathmatch/fullbright static_lighting = FALSE diff --git a/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm b/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm index 8a1e4c760e9..6aaba88a89b 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm @@ -75,7 +75,7 @@ icon = 'icons/area/areas_ruins.dmi' icon_state = "anomaly_research" requires_power = FALSE - area_flags = HIDDEN_AREA | UNIQUE_AREA + area_flags = HIDDEN_AREA default_gravity = ZERO_GRAVITY /obj/item/reagent_containers/cup/bottle/wittel diff --git a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm index 419d25d6517..2fb0633bf53 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm @@ -120,4 +120,4 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) name = "Syndicate Forgotten Vault" icon_state = "syndie-ship" ambientsounds = list('sound/ambience/engineering/ambitech2.ogg', 'sound/ambience/engineering/ambitech3.ogg') - area_flags = NOTELEPORT | UNIQUE_AREA + area_flags = NOTELEPORT diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 3dedfd93b41..a706dcf9ca6 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -394,6 +394,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) requires_power = FALSE default_gravity = STANDARD_GRAVITY area_flags = NOTELEPORT | HIDDEN_AREA + area_flags_mapping = NONE static_lighting = TRUE ambientsounds = list('sound/ambience/ruin/servicebell.ogg') var/roomnumber = 0 @@ -482,7 +483,8 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) icon = 'icons/area/areas_ruins.dmi' icon_state = "hilbertshotel" requires_power = FALSE - area_flags = HIDDEN_AREA | NOTELEPORT | UNIQUE_AREA + area_flags = HIDDEN_AREA | NOTELEPORT + area_flags_mapping = UNIQUE_AREA default_gravity = STANDARD_GRAVITY /obj/item/abstracthotelstorage @@ -516,7 +518,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) name = "Hilbert Research Facility" /area/ruin/space/has_grav/powered/hilbertresearchfacility/secretroom - area_flags = UNIQUE_AREA | NOTELEPORT | HIDDEN_AREA + area_flags = NOTELEPORT | HIDDEN_AREA /obj/item/analyzer/hilbertsanalyzer name = "custom rigged analyzer" diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index be27975294b..7ba37130ebc 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -5,7 +5,7 @@ static_lighting = TRUE requires_power = FALSE default_gravity = STANDARD_GRAVITY - area_flags = BLOBS_ALLOWED | UNIQUE_AREA + area_flags = BLOBS_ALLOWED flags_1 = CAN_BE_DIRTY_1 //Survival Capsule diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 148980bd04a..f19defcc748 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -105,7 +105,7 @@ static_lighting = FALSE base_lighting_alpha = 255 - area_flags = NOTELEPORT | HIDDEN_AREA | UNIQUE_AREA + area_flags = NOTELEPORT | HIDDEN_AREA ambientsounds = null flags_1 = NONE diff --git a/code/modules/modular_computers/file_system/programs/nt_pay.dm b/code/modules/modular_computers/file_system/programs/nt_pay.dm index 7fcb42f567c..3138567d448 100644 --- a/code/modules/modular_computers/file_system/programs/nt_pay.dm +++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm @@ -60,6 +60,11 @@ SEND_SIGNAL(computer, COMSIG_MODULAR_COMPUTER_NT_PAY_RESULT, payment_result) /datum/computer_file/program/nt_pay/proc/_pay(token, money_to_send, mob/user) + var/area/user_area = get_area(user) + if(user_area && is_area_virtual(user_area)) + to_chat(user, span_notice("You cannot send virtual money to real accounts.")) + return NT_PAY_STATUS_NO_ACCOUNT + money_to_send = round(money_to_send) if(IS_DEPARTMENTAL_ACCOUNT(current_user))