/obj/effect/landmark name = "landmark" icon = 'icons/effects/landmarks_static.dmi' icon_state = "x2" anchored = TRUE layer = MID_LANDMARK_LAYER invisibility = INVISIBILITY_ABSTRACT resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/effect/landmark/singularity_act() return // Please stop bombing the Observer-Start landmark. /obj/effect/landmark/ex_act(severity, target, origin) return /obj/effect/landmark/singularity_pull() return INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/Initialize(mapload) . = ..() GLOB.landmarks_list += src /obj/effect/landmark/Destroy() GLOB.landmarks_list -= src return ..() /obj/effect/landmark/start name = "start" icon = 'icons/mob/landmarks.dmi' icon_state = "x" anchored = TRUE layer = MOB_LAYER var/jobspawn_override = FALSE var/delete_after_roundstart = TRUE var/used = FALSE var/job_spawnpoint = TRUE //Is it a potential job spawnpoint or should we skip it? /obj/effect/landmark/start/proc/after_round_start() if(delete_after_roundstart) qdel(src) /obj/effect/landmark/start/New() GLOB.start_landmarks_list += src if(jobspawn_override) if(!GLOB.jobspawn_overrides[name]) GLOB.jobspawn_overrides[name] = list() GLOB.jobspawn_overrides[name] += src ..() if(name != "start") tag = "start*[name]" /obj/effect/landmark/start/Destroy() GLOB.start_landmarks_list -= src if(jobspawn_override) GLOB.jobspawn_overrides[name] -= src return ..() // START LANDMARKS FOLLOW. Don't change the names unless // you are refactoring shitty landmark code. /obj/effect/landmark/start/assistant name = "Assistant" icon_state = "Assistant" /obj/effect/landmark/start/prisoner name = "Prisoner" icon_state = "Prisoner" /obj/effect/landmark/start/assistant/override jobspawn_override = TRUE delete_after_roundstart = FALSE /obj/effect/landmark/start/janitor name = "Janitor" icon_state = "Janitor" /obj/effect/landmark/start/cargo_technician name = "Cargo Technician" icon_state = "Cargo Technician" /obj/effect/landmark/start/bartender name = "Bartender" icon_state = "Bartender" /obj/effect/landmark/start/clown name = "Clown" icon_state = "Clown" /obj/effect/landmark/start/mime name = "Mime" icon_state = "Mime" /obj/effect/landmark/start/quartermaster name = "Quartermaster" icon_state = "Quartermaster" /obj/effect/landmark/start/atmospheric_technician name = "Atmospheric Technician" icon_state = "Atmospheric Technician" /obj/effect/landmark/start/cook name = "Cook" icon_state = "Cook" /obj/effect/landmark/start/shaft_miner name = "Shaft Miner" icon_state = "Shaft Miner" /obj/effect/landmark/start/security_officer name = "Security Officer" icon_state = "Security Officer" /obj/effect/landmark/start/botanist name = "Botanist" icon_state = "Botanist" /obj/effect/landmark/start/head_of_security name = "Head of Security" icon_state = "Head of Security" /obj/effect/landmark/start/captain name = "Captain" icon_state = "Captain" /obj/effect/landmark/start/detective name = "Detective" icon_state = "Detective" /obj/effect/landmark/start/warden name = "Warden" icon_state = "Warden" /obj/effect/landmark/start/chief_engineer name = "Chief Engineer" icon_state = "Chief Engineer" /obj/effect/landmark/start/head_of_personnel name = "Head of Personnel" icon_state = "Head of Personnel" /obj/effect/landmark/start/librarian name = "Curator" icon_state = "Curator" /obj/effect/landmark/start/lawyer name = "Lawyer" icon_state = "Lawyer" /obj/effect/landmark/start/station_engineer name = "Station Engineer" icon_state = "Station Engineer" /obj/effect/landmark/start/medical_doctor name = "Medical Doctor" icon_state = "Medical Doctor" /obj/effect/landmark/start/paramedic name = "Paramedic" icon_state = "Paramedic" /obj/effect/landmark/start/scientist name = "Scientist" icon_state = "Scientist" /obj/effect/landmark/start/chemist name = "Chemist" icon_state = "Chemist" /obj/effect/landmark/start/roboticist name = "Roboticist" icon_state = "Roboticist" /obj/effect/landmark/start/research_director name = "Research Director" icon_state = "Research Director" /obj/effect/landmark/start/geneticist name = "Geneticist" icon_state = "Geneticist" /obj/effect/landmark/start/chief_medical_officer name = "Chief Medical Officer" icon_state = "Chief Medical Officer" /obj/effect/landmark/start/virologist name = "Virologist" icon_state = "Virologist" /obj/effect/landmark/start/chaplain name = "Chaplain" icon_state = "Chaplain" /obj/effect/landmark/start/cyborg name = "Cyborg" icon_state = "Cyborg" /obj/effect/landmark/start/ai name = "AI" icon_state = "AI" delete_after_roundstart = FALSE var/primary_ai = TRUE var/latejoin_active = TRUE /obj/effect/landmark/start/ai/after_round_start() if(latejoin_active && !used) new /obj/structure/AIcore/latejoin_inactive(loc) return ..() /obj/effect/landmark/start/ai/secondary icon = 'icons/effects/landmarks_static.dmi' icon_state = "ai_spawn" primary_ai = FALSE latejoin_active = FALSE //Department Security spawns /obj/effect/landmark/start/depsec name = "department_sec" icon_state = "Security Officer" /obj/effect/landmark/start/depsec/New() ..() GLOB.department_security_spawns += src /obj/effect/landmark/start/depsec/Destroy() GLOB.department_security_spawns -= src return ..() /obj/effect/landmark/start/depsec/supply name = "supply_sec" /obj/effect/landmark/start/depsec/medical name = "medical_sec" /obj/effect/landmark/start/depsec/engineering name = "engineering_sec" /obj/effect/landmark/start/depsec/science name = "science_sec" /obj/effect/landmark/start/wizard name = "wizard" icon = 'icons/effects/landmarks_static.dmi' icon_state = "wiznerd_spawn" /obj/effect/landmark/start/wizard/Initialize(mapload) ..() GLOB.wizardstart += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/start/nukeop name = "nukeop" icon = 'icons/effects/landmarks_static.dmi' icon_state = "snukeop_spawn" /obj/effect/landmark/start/nukeop/Initialize(mapload) ..() GLOB.nukeop_start += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/start/nukeop_leader name = "nukeop leader" icon = 'icons/effects/landmarks_static.dmi' icon_state = "snukeop_leader_spawn" /obj/effect/landmark/start/nukeop_leader/Initialize(mapload) ..() GLOB.nukeop_leader_start += loc return INITIALIZE_HINT_QDEL // Must be immediate because players will // join before SSatom initializes everything. INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) /obj/effect/landmark/start/new_player name = "New Player" /obj/effect/landmark/start/new_player/Initialize(mapload) ..() GLOB.newplayer_start += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/start/nuclear_equipment name = "bomb or clown beacon spawner" var/nukie_path = /obj/item/sbeacondrop/bomb var/clown_path = /obj/item/sbeacondrop/clownbomb job_spawnpoint = FALSE /obj/effect/landmark/start/nuclear_equipment/after_round_start() var/npath = nukie_path if(istype(SSticker.mode, /datum/game_mode/nuclear/clown_ops)) npath = clown_path else if(istype(SSticker.mode, /datum/game_mode/dynamic)) var/datum/game_mode/dynamic/D = SSticker.mode if(locate(/datum/dynamic_ruleset/roundstart/nuclear/clown_ops) in D.current_rules) npath = clown_path new npath(loc) return ..() /obj/effect/landmark/start/nuclear_equipment/minibomb name = "minibomb or bombanana spawner" nukie_path = /obj/item/storage/box/minibombs clown_path = /obj/item/storage/box/bombananas /obj/effect/landmark/latejoin name = "JoinLate" /obj/effect/landmark/latejoin/Initialize(mapload) ..() SSjob.latejoin_trackers += loc return INITIALIZE_HINT_QDEL // carp. /obj/effect/landmark/carpspawn name = "carpspawn" icon_state = "carp_spawn" // lone op (optional) /obj/effect/landmark/loneopspawn name = "loneop+ninjaspawn" icon_state = "snukeop_spawn" // observer-start. /obj/effect/landmark/observer_start name = "Observer-Start" icon_state = "observer_start" // xenos. /obj/effect/landmark/xeno_spawn name = "xeno_spawn" icon_state = "xeno_spawn" /obj/effect/landmark/xeno_spawn/Initialize(mapload) ..() GLOB.xeno_spawn += loc return INITIALIZE_HINT_QDEL // blobs. /obj/effect/landmark/blobstart name = "blobstart" icon_state = "blob_start" /obj/effect/landmark/blobstart/Initialize(mapload) ..() GLOB.blobstart += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/secequipment name = "secequipment" icon_state = "secequipment" /obj/effect/landmark/secequipment/Initialize(mapload) ..() GLOB.secequipment += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/prisonwarp name = "prisonwarp" icon_state = "prisonwarp" /obj/effect/landmark/prisonwarp/Initialize(mapload) ..() GLOB.prisonwarp += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/ert_spawn name = "Emergencyresponseteam" icon_state = "ert_spawn" /obj/effect/landmark/ert_spawn/Initialize(mapload) ..() GLOB.emergencyresponseteamspawn += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/holding_facility name = "Holding Facility" icon_state = "holding_facility" /obj/effect/landmark/holding_facility/Initialize(mapload) ..() GLOB.holdingfacility += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/thunderdome/observe name = "tdomeobserve" icon_state = "tdome_observer" /obj/effect/landmark/thunderdome/observe/Initialize(mapload) ..() GLOB.tdomeobserve += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/thunderdome/one name = "tdome1" icon_state = "tdome_t1" /obj/effect/landmark/thunderdome/one/Initialize(mapload) ..() GLOB.tdome1 += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/thunderdome/two name = "tdome2" icon_state = "tdome_t2" /obj/effect/landmark/thunderdome/two/Initialize(mapload) ..() GLOB.tdome2 += loc return INITIALIZE_HINT_QDEL /obj/effect/landmark/thunderdome/admin name = "tdomeadmin" icon_state = "tdome_admin" /obj/effect/landmark/thunderdome/admin/Initialize(mapload) ..() GLOB.tdomeadmin += loc return INITIALIZE_HINT_QDEL //Servant spawn locations /obj/effect/landmark/servant_of_ratvar name = "servant of ratvar spawn" icon_state = "clockwork_orange" layer = MOB_LAYER /obj/effect/landmark/servant_of_ratvar/Initialize(mapload) ..() GLOB.servant_spawns += loc return INITIALIZE_HINT_QDEL //City of Cogs entrances /obj/effect/landmark/city_of_cogs name = "city of cogs entrance" icon_state = "city_of_cogs" /obj/effect/landmark/city_of_cogs/Initialize(mapload) ..() GLOB.city_of_cogs_spawns += loc return INITIALIZE_HINT_QDEL //generic event spawns /obj/effect/landmark/event_spawn name = "generic event spawn" icon_state = "generic_event" layer = HIGH_LANDMARK_LAYER /obj/effect/landmark/event_spawn/New() ..() GLOB.generic_event_spawns += src /obj/effect/landmark/event_spawn/Destroy() GLOB.generic_event_spawns -= src return ..() /obj/effect/landmark/ruin var/datum/map_template/ruin/ruin_template /obj/effect/landmark/ruin/New(loc, my_ruin_template) name = "ruin_[GLOB.ruin_landmarks.len + 1]" ..(loc) ruin_template = my_ruin_template GLOB.ruin_landmarks |= src /obj/effect/landmark/ruin/Destroy() GLOB.ruin_landmarks -= src ruin_template = null . = ..() //------Station Rooms Landmarks------------// /obj/effect/landmark/stationroom var/list/templates = list() layer = BULLET_HOLE_LAYER plane = ABOVE_WALL_PLANE /obj/effect/landmark/stationroom/New() ..() GLOB.stationroom_landmarks += src /obj/effect/landmark/stationroom/Destroy() if(src in GLOB.stationroom_landmarks) GLOB.stationroom_landmarks -= src return ..() /obj/effect/landmark/stationroom/proc/load(template_name) var/turf/T = get_turf(src) if(!T) return FALSE if(!template_name) for(var/t in templates) if(!SSmapping.station_room_templates[t]) log_world("Station room spawner placed at ([T.x], [T.y], [T.z]) has invalid ruin name of \"[t]\" in its list") templates -= t template_name = pickweight(templates, 0) if(!template_name) GLOB.stationroom_landmarks -= src qdel(src) return FALSE var/datum/map_template/template = SSmapping.station_room_templates[template_name] if(!template) return FALSE testing("Room \"[template_name]\" placed at ([T.x], [T.y], [T.z])") template.load(T, centered = FALSE, orientation = dir, rotate_placement_to_orientation = TRUE) template.loaded++ GLOB.stationroom_landmarks -= src qdel(src) return TRUE // The landmark for the Engine on Box /obj/effect/landmark/stationroom/box/engine templates = list("Engine SM" = 3, "Engine Singulo" = 3, "Engine Tesla" = 3) icon = 'icons/rooms/box/engine.dmi' /obj/effect/landmark/stationroom/box/engine/New() . = ..() templates = CONFIG_GET(keyed_list/box_random_engine) // Landmark for the mining station /obj/effect/landmark/stationroom/lavaland/station templates = list("Public Mining Base" = 3) icon = 'icons/rooms/Lavaland/Mining.dmi' // handled in portals.dm, id connected to one-way portal /obj/effect/landmark/portal_exit name = "portal exit" icon_state = "portal_exit" var/id /obj/effect/landmark/start/hangover name = "hangover spawn" icon_state = "hangover_spawn" /// A list of everything this hangover spawn created var/list/debris = list() /obj/effect/landmark/start/hangover/Initialize(mapload) . = ..() return INITIALIZE_HINT_LATELOAD /obj/effect/landmark/start/hangover/Destroy() debris = null return ..() /obj/effect/landmark/start/hangover/LateInitialize() . = ..() if(!HAS_TRAIT(SSstation, STATION_TRAIT_HANGOVER)) return if(prob(60)) debris += new /obj/effect/decal/cleanable/vomit(get_turf(src)) if(prob(70)) var/bottle_count = rand(1, 3) for(var/index in 1 to bottle_count) var/turf/turf_to_spawn_on = get_step(src, pick(GLOB.alldirs)) if(!isopenturf(turf_to_spawn_on)) continue var/dense_object = FALSE for(var/atom/content in turf_to_spawn_on.contents) if(content.density) dense_object = TRUE break if(dense_object) continue debris += new /obj/item/reagent_containers/food/drinks/beer/almost_empty(turf_to_spawn_on) ///Spawns the mob with some drugginess/drunkeness, and some disgust. /obj/effect/landmark/start/hangover/proc/make_hungover(mob/hangover_mob) if(!iscarbon(hangover_mob)) return var/mob/living/carbon/spawned_carbon = hangover_mob spawned_carbon.set_resting(TRUE, silent = TRUE) if(prob(50)) spawned_carbon.adjust_drugginess(rand(15, 20)) else spawned_carbon.drunkenness += rand(15, 25) spawned_carbon.adjust_disgust(rand(5, 55)) //How hungover are you? if(spawned_carbon.head) return /obj/effect/landmark/start/hangover/JoinPlayerHere(mob/joining_mob, buckle) . = ..() make_hungover(joining_mob) /obj/effect/landmark/start/hangover/closet name = "hangover spawn closet" icon_state = "hangover_spawn_closet" /obj/effect/landmark/start/hangover/closet/JoinPlayerHere(mob/joining_mob, buckle) make_hungover(joining_mob) for(var/obj/structure/closet/closet in contents) if(closet.opened) continue joining_mob.forceMove(closet) return return ..() //Call parent as fallback