mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-26 09:03:37 +00:00
* Removes virologist job (#82723) As the title says. Removes the job. Whole wing of medical is still there.  (MSO)  It's boring. It's so boring that when it decides to become unboring it just attempts to ruin the fun for everyone else 🆑 del: Due to a need for company restructuring, virologists have been laid off by CentCom and doctors can optionally take their place. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Oh right. * Coroner, Chief Engineer, Bitrunner are no longer exempt from certain Traitor objectives (#83165) ## About The Pull Request While reading traitor objective code for a project, I noticed that both the Coroner and CE are not listed as potential targets for the 'Destroy Heirloom' objectives. Looking into it, I noticed that the Coroner was also not listed for the kidnapping objective. This fixes that. ## Why It's Good For The Game Coroner should not be immune to traitory And the CE should not be exempt from having their heirloom potentially destroyed ## Changelog 🆑 fix: The Coroner and Bitrunner can now be selected as a target for kidnapping and heirloom destruction objectives. fix: The Chief Engineer is now a valid target for heirloom destruction objectives. /🆑 * Remove sleeper protocol objective + Remove the upper limit to sabotage RND server/Telecomms (#83206) <!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Deletes the sleeper protocol objective  https://discord.com/channels/326822144233439242/326831214667235328/1239270421921005570 Removes the upper limit to sabotage telecomms/RND servers  https://discord.com/channels/326822144233439242/326831214667235328/1239269962707636375 <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game Removes a bad objective. Removes a non-sensical upper limit to sabotage rnd/telecomms. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 del: Removes the sleeper protocol traitor objective balance: RND server/Telecomms sabotage can now show up even later in the round /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> * Right, I changed the path. --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> Co-authored-by: norsvenska <73006946+norsvenska@users.noreply.github.com> Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
728 lines
19 KiB
Plaintext
728 lines
19 KiB
Plaintext
/obj/effect/landmark
|
|
name = "landmark"
|
|
icon = 'icons/effects/landmarks_static.dmi'
|
|
icon_state = "x2"
|
|
anchored = TRUE
|
|
layer = OBJ_LAYER
|
|
plane = GAME_PLANE
|
|
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(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
|
|
|
|
/obj/effect/landmark/start/proc/after_round_start()
|
|
// We'd like to keep these around for unit tests, so we can check that they exist.
|
|
#if !defined(UNIT_TESTS) && !defined(MAP_TEST)
|
|
if(delete_after_roundstart)
|
|
qdel(src)
|
|
#endif
|
|
|
|
/obj/effect/landmark/start/Initialize(mapload)
|
|
. = ..()
|
|
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 = JOB_ASSISTANT
|
|
icon_state = JOB_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 - Makes latejoin prisoners spawn in the prison instead of on the interlink.
|
|
jobspawn_override = TRUE
|
|
delete_after_roundstart = FALSE
|
|
//SKYRAT EDIT: End - Makes latejoin prisoners spawn in the prison instead of on the interlink.
|
|
|
|
/obj/effect/landmark/start/prisoner/after_round_start()
|
|
return
|
|
|
|
/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/bitrunner
|
|
name = "Bitrunner"
|
|
icon_state = "Bitrunner"
|
|
|
|
/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/coroner
|
|
name = "Coroner"
|
|
icon_state = "Coroner"
|
|
|
|
/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 = JOB_RESEARCH_DIRECTOR
|
|
icon_state = JOB_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/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"
|
|
//SKYRAT EDIT: Start - Makes latejoin cyborgs spawn in the station instead of on the interlink.
|
|
jobspawn_override = TRUE
|
|
delete_after_roundstart = FALSE
|
|
//SKYRAT EDIT: End - Makes latejoin cyborgs spawn in the station instead of on the interlink.
|
|
|
|
/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/Initialize(mapload)
|
|
. = ..()
|
|
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(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
|
|
|
|
/obj/effect/landmark/start/nukeop_overwatch
|
|
name = "nukeop overwatch"
|
|
icon = 'icons/effects/landmarks_static.dmi'
|
|
icon_state = "snukeop_leader_spawn"
|
|
|
|
/obj/effect/landmark/start/nukeop_overwatch/Initialize(mapload)
|
|
..()
|
|
GLOB.nukeop_overwatch_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/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"
|
|
|
|
//generic maintenance locations
|
|
/obj/effect/landmark/generic_maintenance_landmark
|
|
name = "generic_maintenance_spawn"
|
|
icon_state = "xeno_spawn"
|
|
|
|
/obj/effect/landmark/generic_maintenance_landmark/Initialize(mapload)
|
|
..()
|
|
GLOB.generic_maintenance_landmarks += 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
|
|
|
|
/obj/effect/landmark/ert_shuttle_spawn
|
|
name = "ertshuttlespawn"
|
|
icon_state = "ert_spawn"
|
|
|
|
/obj/effect/landmark/ert_shuttle_brief_spawn
|
|
name = "ertshuttlebriefspawn"
|
|
icon_state = "ert_brief_spawn"
|
|
|
|
//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 spawn points
|
|
*
|
|
* These are placed in locales where there are likely to be players, and places which are identifiable at a glance -
|
|
* Such as public hallways, department rooms, head of staff offices, and non-generic maintenance locations
|
|
*
|
|
* Used in events to cause effects in locations where it is likely to effect players
|
|
*/
|
|
/obj/effect/landmark/event_spawn
|
|
name = "generic event spawn"
|
|
icon_state = "generic_event"
|
|
|
|
/obj/effect/landmark/event_spawn/Initialize(mapload)
|
|
. = ..()
|
|
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/Initialize(mapload, my_ruin_template)
|
|
. = ..()
|
|
name = "ruin_[GLOB.ruin_landmarks.len + 1]"
|
|
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"
|
|
|
|
/// A list of everything this hangover spawn created as part of the hangover station trait
|
|
var/list/hangover_debris = list()
|
|
|
|
/// A list of everything this hangover spawn created as part of the birthday station trait
|
|
var/list/party_debris = list()
|
|
|
|
/obj/effect/landmark/start/hangover/Initialize(mapload)
|
|
. = ..()
|
|
return INITIALIZE_HINT_LATELOAD
|
|
|
|
/obj/effect/landmark/start/hangover/Destroy()
|
|
hangover_debris = null
|
|
party_debris = null
|
|
return ..()
|
|
|
|
/obj/effect/landmark/start/hangover/LateInitialize()
|
|
if(HAS_TRAIT(SSstation, STATION_TRAIT_BIRTHDAY))
|
|
party_debris += new /obj/effect/decal/cleanable/confetti(get_turf(src)) //a birthday celebration can also be a hangover
|
|
var/list/bonus_confetti = GLOB.alldirs
|
|
for(var/confettis in bonus_confetti)
|
|
var/party_turf_to_spawn_on = get_step(src, confettis)
|
|
if(!isopenturf(party_turf_to_spawn_on))
|
|
continue
|
|
var/dense_object = FALSE
|
|
for(var/atom/content in party_turf_to_spawn_on)
|
|
if(content.density)
|
|
dense_object = TRUE
|
|
break
|
|
if(dense_object)
|
|
continue
|
|
if(prob(50))
|
|
party_debris += new /obj/effect/decal/cleanable/confetti(party_turf_to_spawn_on)
|
|
if(prob(10))
|
|
party_debris += new /obj/item/toy/balloon(party_turf_to_spawn_on)
|
|
if(!HAS_TRAIT(SSstation, STATION_TRAIT_HANGOVER))
|
|
return
|
|
if(prob(60))
|
|
hangover_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
|
|
hangover_debris += new /obj/item/reagent_containers/cup/glass/bottle/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(30 SECONDS, 40 SECONDS))
|
|
else
|
|
spawned_carbon.adjust_drunk_effect(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)
|
|
for(var/obj/structure/closet/closet in get_turf(src))
|
|
if(closet.opened)
|
|
continue
|
|
joining_mob.forceMove(closet)
|
|
make_hungover(joining_mob)
|
|
return
|
|
|
|
return ..() //Call parent as fallback
|
|
|
|
//Landmark that creates destinations for the navigate verb to path to
|
|
/obj/effect/landmark/navigate_destination
|
|
name = "navigate verb destination"
|
|
icon_state = "navigate"
|
|
var/location
|
|
|
|
/obj/effect/landmark/navigate_destination/Initialize(mapload)
|
|
. = ..()
|
|
return INITIALIZE_HINT_LATELOAD
|
|
|
|
/obj/effect/landmark/navigate_destination/LateInitialize()
|
|
if(!location)
|
|
var/obj/machinery/door/airlock/A = locate(/obj/machinery/door/airlock) in loc
|
|
location = A ? format_text(A.name) : get_area_name(src, format_text = TRUE)
|
|
|
|
GLOB.navigate_destinations[loc] = location
|
|
|
|
qdel(src)
|
|
|
|
//Command
|
|
/obj/effect/landmark/navigate_destination/bridge
|
|
location = "Bridge"
|
|
|
|
/obj/effect/landmark/navigate_destination/hop
|
|
location = "Head of Personnel's Office"
|
|
|
|
/obj/effect/landmark/navigate_destination/vault
|
|
location = "Vault"
|
|
|
|
/obj/effect/landmark/navigate_destination/teleporter
|
|
location = "Teleporter"
|
|
|
|
/obj/effect/landmark/navigate_destination/gateway
|
|
location = "Gateway"
|
|
|
|
/obj/effect/landmark/navigate_destination/eva
|
|
location = "EVA Storage"
|
|
|
|
/obj/effect/landmark/navigate_destination/aiupload
|
|
location = "AI Upload"
|
|
|
|
/obj/effect/landmark/navigate_destination/minisat_access_ai
|
|
location = "AI MiniSat Access"
|
|
|
|
/obj/effect/landmark/navigate_destination/minisat_access_tcomms
|
|
location = "Telecomms MiniSat Access"
|
|
|
|
/obj/effect/landmark/navigate_destination/minisat_access_tcomms_ai
|
|
location = "AI and Telecomms MiniSat Access"
|
|
|
|
/obj/effect/landmark/navigate_destination/tcomms
|
|
location = "Telecommunications"
|
|
|
|
//Departments
|
|
/obj/effect/landmark/navigate_destination/sec
|
|
location = "Security"
|
|
|
|
/obj/effect/landmark/navigate_destination/det
|
|
location = "Detective's Office"
|
|
|
|
/obj/effect/landmark/navigate_destination/research
|
|
location = "Research"
|
|
|
|
/obj/effect/landmark/navigate_destination/engineering
|
|
location = "Engineering"
|
|
|
|
/obj/effect/landmark/navigate_destination/techstorage
|
|
location = "Technical Storage"
|
|
|
|
/obj/effect/landmark/navigate_destination/atmos
|
|
location = "Atmospherics"
|
|
|
|
/obj/effect/landmark/navigate_destination/med
|
|
location = "Medical"
|
|
|
|
/obj/effect/landmark/navigate_destination/chemfactory
|
|
location = "Chemistry Factory"
|
|
|
|
/obj/effect/landmark/navigate_destination/cargo
|
|
location = "Cargo"
|
|
|
|
//Common areas
|
|
/obj/effect/landmark/navigate_destination/bar
|
|
location = "Bar"
|
|
|
|
/obj/effect/landmark/navigate_destination/dorms
|
|
location = "Dormitories"
|
|
|
|
/obj/effect/landmark/navigate_destination/court
|
|
location = "Courtroom"
|
|
|
|
/obj/effect/landmark/navigate_destination/tools
|
|
location = "Tool Storage"
|
|
|
|
/obj/effect/landmark/navigate_destination/library
|
|
location = "Library"
|
|
|
|
/obj/effect/landmark/navigate_destination/chapel
|
|
location = "Chapel"
|
|
|
|
/obj/effect/landmark/navigate_destination/minisat_access_chapel_library
|
|
location = "Chapel and Library MiniSat Access"
|
|
|
|
//Service
|
|
/obj/effect/landmark/navigate_destination/kitchen
|
|
location = "Kitchen"
|
|
|
|
/obj/effect/landmark/navigate_destination/hydro
|
|
location = "Hydroponics"
|
|
|
|
/obj/effect/landmark/navigate_destination/janitor
|
|
location = "Janitor's Closet"
|
|
|
|
/obj/effect/landmark/navigate_destination/lawyer
|
|
location = "Lawyer's Office"
|
|
|
|
//Shuttle docks
|
|
/obj/effect/landmark/navigate_destination/dockarrival
|
|
location = "Arrival Shuttle Dock"
|
|
|
|
/obj/effect/landmark/navigate_destination/dockesc
|
|
location = "Escape Shuttle Dock"
|
|
|
|
/obj/effect/landmark/navigate_destination/dockescpod
|
|
location = "Escape Pod Dock"
|
|
|
|
/obj/effect/landmark/navigate_destination/dockescpod1
|
|
location = "Escape Pod 1 Dock"
|
|
|
|
/obj/effect/landmark/navigate_destination/dockescpod2
|
|
location = "Escape Pod 2 Dock"
|
|
|
|
/obj/effect/landmark/navigate_destination/dockescpod3
|
|
location = "Escape Pod 3 Dock"
|
|
|
|
/obj/effect/landmark/navigate_destination/dockescpod4
|
|
location = "Escape Pod 4 Dock"
|
|
|
|
/obj/effect/landmark/navigate_destination/dockaux
|
|
location = "Auxiliary Dock"
|
|
|
|
//Maint
|
|
/obj/effect/landmark/navigate_destination/incinerator
|
|
location = "Incinerator"
|
|
|
|
/obj/effect/landmark/navigate_destination/disposals
|
|
location = "Disposals"
|