Files
Bubberstation/code/game/objects/effects/landmarks.dm
SkyratBot 5764f24f98 [MIRROR] Departmental officers are now put together, rather than separate, if possible (#4285)
* Departmental officers are now put together, rather than separate, if possible (#57685)

Security officers will now be paired up together in the same department, across departments. This means that, instead of 4 officers being split across 4 departments, there'll now be 2 groups of 2.

Late-join officers will be put into any department with only 1 officer. If none exist, the least populous department will be chosen, with their preference having priority.

Updates the maps to have more spawns for departmental officers. Delta previously had none, and now has some. Fixed a bug where MetaStation's security departmental officer was a supply one instead.

Removes the "random" departmental preference. All security officers are now given a department. The "none" preference still exists, but just to show that you don't care which department you're put into.

Updates the config to comment out SEC_START_BRIG. This is what the configuration was already on live servers.

This is something that should likely be test merged, but it mucks with savefiles. Luckily, the only damage it does is changing random departments to none, so if a TM is reverted, only that will have to be changed.

* Departmental officers are now put together, rather than separate, if possible

* Update preferences.dm

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2021-03-21 23:12:41 +00:00

504 lines
12 KiB
Plaintext

/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
/obj/effect/landmark/singularity_pull()
return
INITIALIZE_IMMEDIATE(/obj/effect/landmark)
/obj/effect/landmark/Initialize()
. = ..()
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
/obj/effect/landmark/start/proc/after_round_start()
if(delete_after_roundstart)
qdel(src)
/obj/effect/landmark/start/Initialize()
. = ..()
GLOB.start_landmarks_list += src
if(jobspawn_override)
LAZYADDASSOCLIST(GLOB.jobspawn_overrides, name, src)
if(name != "start")
tag = "start*[name]"
/obj/effect/landmark/start/Destroy()
GLOB.start_landmarks_list -= src
if(jobspawn_override)
LAZYREMOVEASSOC(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" //icon_state is case sensitive. why are all of these capitalized? because fuck you that's why
/obj/effect/landmark/start/assistant/override
jobspawn_override = TRUE
delete_after_roundstart = FALSE
/obj/effect/landmark/start/prisoner
name = "Prisoner"
icon_state = "Prisoner"
// SKYRAT EDIT: Start - Latejoin prisoners!
/obj/effect/landmark/start/prisoner/latejoin
name = "Latejoin Prisoner"
jobspawn_override = TRUE
delete_after_roundstart = FALSE
// SKYRAT EDIT: End - Latejoin prisoners!
/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/psychologist
name = "Psychologist"
icon_state = "Psychologist"
/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/ai_core/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"
/// What department this spawner is for
var/department
/obj/effect/landmark/start/depsec/New()
..()
LAZYADDASSOCLIST(GLOB.department_security_spawns, department, src)
/obj/effect/landmark/start/depsec/Destroy()
LAZYREMOVEASSOC(GLOB.department_security_spawns, department, src)
return ..()
/obj/effect/landmark/start/depsec/supply
name = "supply_sec"
department = SEC_DEPT_SUPPLY
/obj/effect/landmark/start/depsec/medical
name = "medical_sec"
department = SEC_DEPT_MEDICAL
/obj/effect/landmark/start/depsec/engineering
name = "engineering_sec"
department = SEC_DEPT_ENGINEERING
/obj/effect/landmark/start/depsec/science
name = "science_sec"
department = SEC_DEPT_SCIENCE
//Antagonist spawns
/obj/effect/landmark/start/wizard
name = "wizard"
icon = 'icons/effects/landmarks_static.dmi'
icon_state = "wiznerd_spawn"
/obj/effect/landmark/start/wizard/Initialize()
..()
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()
..()
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()
..()
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()
..()
GLOB.newplayer_start += loc
return INITIALIZE_HINT_QDEL
/obj/effect/landmark/latejoin
name = "JoinLate"
/obj/effect/landmark/latejoin/Initialize(mapload)
..()
SSjob.latejoin_trackers += loc
return INITIALIZE_HINT_QDEL
//space carps, magicarps, lone ops, slaughter demons, possibly revenants spawn here
/obj/effect/landmark/carpspawn
name = "carpspawn"
icon_state = "carp_spawn"
//observer start
/obj/effect/landmark/observer_start
name = "Observer-Start"
icon_state = "observer_start"
//xenos, morphs and nightmares spawn here
/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
//objects with the stationloving component (nuke disk) respawn here.
//also blobs that have their spawn forcemoved (running out of time when picking their spawn spot) and santa
/obj/effect/landmark/blobstart
name = "blobstart"
icon_state = "blob_start"
/obj/effect/landmark/blobstart/Initialize(mapload)
..()
GLOB.blobstart += loc
return INITIALIZE_HINT_QDEL
//spawns sec equipment lockers depending on the number of sec officers
/obj/effect/landmark/secequipment
name = "secequipment"
icon_state = "secequipment"
/obj/effect/landmark/secequipment/Initialize(mapload)
..()
GLOB.secequipment += loc
return INITIALIZE_HINT_QDEL
//players that get put in admin jail show up here
/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
//ninja energy nets teleport victims here
/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
//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
. = ..()
// handled in portals.dm, id connected to one-way portal
/obj/effect/landmark/portal_exit
name = "portal exit"
icon_state = "portal_exit"
var/id
/// Marks the bottom left of the testing zone.
/// In landmarks.dm and not unit_test.dm so it is always active in the mapping tools.
/obj/effect/landmark/unit_test_bottom_left
name = "unit test zone bottom left"
/// Marks the top right of the testing zone.
/// In landmarks.dm and not unit_test.dm so it is always active in the mapping tools.
/obj/effect/landmark/unit_test_top_right
name = "unit test zone top right"
/obj/effect/landmark/start/hangover
name = "hangover spawn"
icon_state = "hangover_spawn"
/obj/effect/landmark/start/hangover/Initialize()
. = ..()
if(!HAS_TRAIT(SSstation, STATION_TRAIT_HANGOVER))
return
if(prob(60))
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
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.Sleeping(rand(2 SECONDS, 5 SECONDS))
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/M, buckle)
. = ..()
make_hungover(M)
/obj/effect/landmark/start/hangover/closet
name = "hangover spawn closet"
icon_state = "hangover_spawn_closet"
/obj/effect/landmark/start/hangover/closet/JoinPlayerHere(mob/M, buckle)
make_hungover(M)
for(var/obj/structure/closet/closet in contents)
if(closet.opened)
continue
M.forceMove(closet)
return
..() //Call parent as fallback