mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 19:52:40 +00:00
Merge branch 'release' of https://github.com/VOREStation/VOREStation # Conflicts: # code/controllers/autotransfer.dm # code/controllers/subsystems/inactivity.dm # code/game/area/Away Mission areas.dm # code/game/area/Space Station 13 areas.dm # code/game/jobs/job/captain.dm # code/game/jobs/job/civilian.dm # code/game/jobs/job/security.dm # code/game/jobs/jobs.dm # code/game/machinery/air_alarm.dm # code/game/machinery/suit_storage_unit.dm # code/game/machinery/suit_storage_unit_vr.dm # code/game/mecha/combat/gorilla.dm # code/game/turfs/simulated/dungeon/wall.dm # code/game/turfs/simulated/wall_types.dm # code/modules/client/preference_setup/loadout/loadout_utility_vr.dm # code/modules/clothing/glasses/glasses.dm # code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm # code/modules/clothing/spacesuits/void/void_vr.dm # code/modules/clothing/under/accessories/holster.dm # code/modules/mob/language/station_vr.dm # code/modules/mob/living/carbon/human/emote_vr.dm # code/modules/mob/living/carbon/human/species/station/station_vr.dm # code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm # code/modules/mob/new_player/sprite_accessories_vr.dm # code/modules/power/apc.dm # code/modules/power/lighting.dm # code/modules/resleeving/machines.dm # config/jobwhitelist.txt # icons/mob/species/seromi/head.dmi # icons/mob/species/seromi/suit.dmi # icons/mob/species/vulpkanin/helmet.dmi # icons/mob/species/vulpkanin/suit.dmi # maps/tether/submaps/_tether_submaps.dm # maps/tether/tether_areas2.dm # maps/tether/tether_defines.dm # maps/tether/tether_shuttles.dm # nano/templates/apc.tmpl # vorestation.dme
127 lines
4.2 KiB
Plaintext
127 lines
4.2 KiB
Plaintext
//
|
|
// Mapping subsystem handles initialization of random map elements at server start
|
|
// On VOREStation that means loading our random roundstart engine!
|
|
//
|
|
SUBSYSTEM_DEF(mapping)
|
|
name = "Mapping"
|
|
init_order = INIT_ORDER_MAPPING
|
|
flags = SS_NO_FIRE
|
|
|
|
var/list/map_templates = list()
|
|
var/dmm_suite/maploader = null
|
|
var/obj/effect/landmark/engine_loader/engine_loader
|
|
var/obj/effect/landmark/engine_loader_pickable/engine_loader_pickable
|
|
|
|
var/list/shelter_templates = list()
|
|
|
|
/datum/controller/subsystem/mapping/Recover()
|
|
flags |= SS_NO_INIT // Make extra sure we don't initialize twice.
|
|
shelter_templates = SSmapping.shelter_templates
|
|
|
|
/datum/controller/subsystem/mapping/Initialize(timeofday)
|
|
if(subsystem_initialized)
|
|
return
|
|
world.max_z_changed() // This is to set up the player z-level list, maxz hasn't actually changed (probably)
|
|
maploader = new()
|
|
load_map_templates()
|
|
|
|
if(config.generate_map)
|
|
// Map-gen is still very specific to the map, however putting it here should ensure it loads in the correct order.
|
|
using_map.perform_map_generation()
|
|
|
|
loadEngine()
|
|
preloadShelterTemplates()
|
|
// Mining generation probably should be here too
|
|
// TODO - Other stuff related to maps and areas could be moved here too. Look at /tg
|
|
if(using_map)
|
|
loadLateMaps()
|
|
..()
|
|
|
|
/datum/controller/subsystem/mapping/proc/load_map_templates()
|
|
for(var/T in subtypesof(/datum/map_template))
|
|
var/datum/map_template/template = T
|
|
if(!(initial(template.mappath))) // If it's missing the actual path its probably a base type or being used for inheritence.
|
|
continue
|
|
template = new T()
|
|
map_templates[template.name] = template
|
|
return TRUE
|
|
|
|
/datum/controller/subsystem/mapping/proc/loadEngine()
|
|
if(!engine_loader)
|
|
return // Seems this map doesn't need an engine loaded.
|
|
|
|
var/turf/T = get_turf(engine_loader)
|
|
if(!isturf(T))
|
|
to_world_log("[log_info_line(engine_loader)] not on a turf! Cannot place engine template.")
|
|
return
|
|
|
|
// Choose an engine type
|
|
var/datum/map_template/engine/chosen_type = null
|
|
if (LAZYLEN(config.engine_map))
|
|
var/chosen_name = pick(config.engine_map)
|
|
chosen_type = map_templates[chosen_name]
|
|
if(!istype(chosen_type))
|
|
error("Configured engine map [chosen_name] is not a valid engine map name!")
|
|
if(!istype(chosen_type))
|
|
var/list/engine_types = list()
|
|
for(var/map in map_templates)
|
|
var/datum/map_template/engine/MT = map_templates[map]
|
|
if(istype(MT))
|
|
engine_types += MT
|
|
chosen_type = pick(engine_types)
|
|
to_world_log("Chose Engine Map: [chosen_type.name]")
|
|
admin_notice("<span class='danger'>Chose Engine Map: [chosen_type.name]</span>", R_DEBUG)
|
|
|
|
// Annihilate movable atoms
|
|
engine_loader.annihilate_bounds()
|
|
//CHECK_TICK //Don't let anything else happen for now
|
|
// Actually load it
|
|
chosen_type.load(T)
|
|
|
|
/datum/controller/subsystem/mapping/proc/loadLateMaps()
|
|
var/list/deffo_load = using_map.lateload_z_levels
|
|
var/list/maybe_load = using_map.lateload_single_pick
|
|
|
|
for(var/list/maplist in deffo_load)
|
|
if(!islist(maplist))
|
|
error("Lateload Z level [maplist] is not a list! Must be in a list!")
|
|
continue
|
|
for(var/mapname in maplist)
|
|
var/datum/map_template/MT = map_templates[mapname]
|
|
if(!istype(MT))
|
|
error("Lateload Z level \"[mapname]\" is not a valid map!")
|
|
continue
|
|
MT.load_new_z(centered = FALSE)
|
|
CHECK_TICK
|
|
|
|
if(LAZYLEN(maybe_load))
|
|
var/picklist = pick(maybe_load)
|
|
|
|
if(!picklist) //No lateload maps at all
|
|
return
|
|
|
|
if(!islist(picklist)) //So you can have a 'chain' of z-levels that make up one away mission
|
|
error("Randompick Z level [picklist] is not a list! Must be in a list!")
|
|
return
|
|
|
|
for(var/map in picklist)
|
|
var/datum/map_template/MT = map_templates[map]
|
|
if(!istype(MT))
|
|
error("Randompick Z level \"[map]\" is not a valid map!")
|
|
else
|
|
MT.load_new_z(centered = FALSE)
|
|
|
|
/datum/controller/subsystem/mapping/proc/preloadShelterTemplates()
|
|
for(var/item in subtypesof(/datum/map_template/shelter))
|
|
var/datum/map_template/shelter/shelter_type = item
|
|
if(!(initial(shelter_type.mappath)))
|
|
continue
|
|
var/datum/map_template/shelter/S = new shelter_type()
|
|
|
|
shelter_templates[S.shelter_id] = S
|
|
|
|
/datum/controller/subsystem/mapping/stat_entry(msg)
|
|
if (!Debug2)
|
|
return // Only show up in stat panel if debugging is enabled.
|
|
. = ..()
|