From 01813cd4d03a942fc40b514633fe6438341918d0 Mon Sep 17 00:00:00 2001 From: Killian Date: Wed, 4 Dec 2024 12:22:40 +0000 Subject: [PATCH] maint lurker setup --- code/__defines/gamemode.dm | 12 +++++----- code/__defines/jobs.dm | 2 +- code/datums/ghost_query_vr.dm | 10 +++++++-- code/datums/outfits/misc.dm | 10 ++++++--- code/game/jobs/job/special.dm | 12 +++++----- .../items/weapons/id cards/id_stacks.dm | 2 +- .../objects/structures/ghost_pods/event_vr.dm | 18 +++++++-------- .../antagonism/02_candidacy.dm | 9 ++++---- code/modules/events/maint_lurker.dm | 22 +++++++++++++++++++ maps/groundbase/groundbase_events.dm | 1 + .../stellar_delight/stellar_delight_events.dm | 1 + maps/tether/tether_events.dm | 1 + vorestation.dme | 1 + 13 files changed, 70 insertions(+), 31 deletions(-) create mode 100644 code/modules/events/maint_lurker.dm diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 990ddc1fa09..74121881ce1 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -40,11 +40,12 @@ //VOREStation Add #define BE_LOSTDRONE 0x10000 #define BE_MAINTPRED 0x20000 -#define BE_MORPH 0x40000 -#define BE_CORGI 0x80000 -#define BE_CURSEDSWORD 0x100000 -#define BE_SURVIVOR 0x200000 -#define BE_EVENT 0x400000 +#define BE_MAINTLURKER 0x40000 +#define BE_MORPH 0x80000 +#define BE_CORGI 0x100000 +#define BE_CURSEDSWORD 0x200000 +#define BE_SURVIVOR 0x400000 +#define BE_EVENT 0x800000 //VOREStation Add End var/list/be_special_flags = list( @@ -67,6 +68,7 @@ var/list/be_special_flags = list( //VOREStation Add "Lost Drone" = BE_LOSTDRONE, "Maint Pred" = BE_MAINTPRED, + "Maint Lurker" = BE_MAINTLURKER, "Morph" = BE_MORPH, "Corgi" = BE_CORGI, "Cursed Sword" = BE_CURSEDSWORD, diff --git a/code/__defines/jobs.dm b/code/__defines/jobs.dm index c8c573b72e9..a4560b36dff 100644 --- a/code/__defines/jobs.dm +++ b/code/__defines/jobs.dm @@ -420,4 +420,4 @@ #define JOB_XENOMORPH "Xenomorph" #define JOB_BORER "Borer" #define JOB_EMERGENCY_RESPONSE_TEAM "Emergency Response Team" -#define JOB_MAINT_STRAGGLER "Maintenance Straggler" +#define JOB_MAINT_LURKER "Maintenance Lurker" diff --git a/code/datums/ghost_query_vr.dm b/code/datums/ghost_query_vr.dm index 75356029be3..8f29b14bb35 100644 --- a/code/datums/ghost_query_vr.dm +++ b/code/datums/ghost_query_vr.dm @@ -7,5 +7,11 @@ /datum/ghost_query/maints_pred role_name = "Maintenance Predator" be_special_flag = BE_MAINTPRED - question = "It appears a predatory critter is lurking in the maintenance. Do you want to play as it? ((You get to choose type of critter. Expect to be treated as vore predator.))" - cutoff_number = 1 \ No newline at end of file + question = "It appears a predatory critter is lurking in maintenance. Do you want to play as it? ((You get to choose type of critter. Expect to be treated as vore predator.))" + cutoff_number = 1 + +/datum/ghost_query/maints_lurker + role_name = "Maintenance Lurker" + be_special_flag = BE_MAINTLURKER + question = "It appears a strange individual is lurking in maintenance. Do you want to play as them? ((You can spawn as your currently loaded character slot. Expect to be treated as vore predator.))" + cutoff_number = 1 diff --git a/code/datums/outfits/misc.dm b/code/datums/outfits/misc.dm index eb687b275c5..13620cbf9a9 100644 --- a/code/datums/outfits/misc.dm +++ b/code/datums/outfits/misc.dm @@ -65,10 +65,14 @@ suit = /obj/item/clothing/suit/space/void/zaddat/ mask = /obj/item/clothing/mask/gas/zaddat -/decl/hierarchy/outfit/maint_straggler - name = "Maintenance Straggler Outfit" +/decl/hierarchy/outfit/maint_lurker + name = "Maintenance Lurker Outfit" id_slot = slot_wear_id - id_type = /obj/item/card/id/civilian/straggler + id_type = /obj/item/card/id/civilian/lurker pda_slot = slot_belt pda_type = /obj/item/pda id_pda_assignment = "NO DATA" + + headset = /obj/item/radio/headset + headset_alt = /obj/item/radio/headset/alt + headset_earbud = /obj/item/radio/headset/earbud diff --git a/code/game/jobs/job/special.dm b/code/game/jobs/job/special.dm index 1c8ba3d789b..cb54e541170 100644 --- a/code/game/jobs/job/special.dm +++ b/code/game/jobs/job/special.dm @@ -109,13 +109,13 @@ else return list(access_entertainment, access_tomfoolery, access_mime) -/obj/item/card/id/civilian/straggler +/obj/item/card/id/civilian/lurker desc = "A rather old and scuffed-looking ID. It seems legit, but something also seems very off somehow. Say, what's the issue/expiry date..?" assignment = "NO DATA" - rank = JOB_MAINT_STRAGGLER + rank = JOB_MAINT_LURKER -/datum/job/maint_straggler - title = JOB_MAINT_STRAGGLER +/datum/job/maint_lurker + title = JOB_MAINT_LURKER departments = list(DEPARTMENT_CIVILIAN) faction = FACTION_STATION total_positions = -1 @@ -123,10 +123,10 @@ supervisors = "nobody save your own common sense and good judgement, though Security may get upset if you're not careful" selection_color = "#515151" account_allowed = FALSE //let's not give the game away by creating accounts that someone might stumble across - job_description = "You are a maintenance straggler! You shouldn't be able to see this description anyway! Go prank the CMO or eat the RD's hat or something instead of looking at this." + job_description = "You are a maintenance lurker! You shouldn't be able to see this description anyway! Go prank the CMO or eat the RD's hat or something instead of looking at this." whitelist_only = 1 latejoin_only = 1 requestable = FALSE - outfit_type = /decl/hierarchy/outfit/maint_straggler + outfit_type = /decl/hierarchy/outfit/maint_lurker access = list(access_maint_tunnels) minimal_access = list(access_maint_tunnels) diff --git a/code/game/objects/items/weapons/id cards/id_stacks.dm b/code/game/objects/items/weapons/id cards/id_stacks.dm index 28497c02a9f..1e0f49133e1 100644 --- a/code/game/objects/items/weapons/id cards/id_stacks.dm +++ b/code/game/objects/items/weapons/id cards/id_stacks.dm @@ -339,6 +339,6 @@ //Special -/obj/item/card/id/civilian/straggler +/obj/item/card/id/civilian/lurker name = "Outdated ID" initial_sprite_stack = list("base-stamp", "stamp-silhouette", "top-olive", "digested") diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index f6f418be3cd..9c91c4edda2 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -173,20 +173,20 @@ if(!(src in active_ghost_pods)) active_ghost_pods += src -/obj/structure/ghost_pod/ghost_activated/maint_straggler +/obj/structure/ghost_pod/ghost_activated/maint_lurker name = "strange maintenance hole" desc = "This is my hole! It was made for me!" icon = 'icons/effects/effects.dmi' icon_state = "tunnel_hole" icon_state_opened = "tunnel_hole" density = FALSE - ghost_query_type = /datum/ghost_query/maints_pred + ghost_query_type = /datum/ghost_query/maints_lurker anchored = TRUE invisibility = INVISIBILITY_OBSERVER spawn_active = TRUE //override the standard attack_ghost proc for custom messages -/obj/structure/ghost_pod/ghost_activated/maint_straggler/attack_ghost(var/mob/observer/dead/user) +/obj/structure/ghost_pod/ghost_activated/maint_lurker/attack_ghost(var/mob/observer/dead/user) if(jobban_isbanned(user, JOB_GHOSTROLES)) to_chat(user, span_warning("You cannot use this spawnpoint because you are banned from playing ghost roles.")) return @@ -201,14 +201,14 @@ //to_chat(user, span_warning("You must have proper out-of-character notes and flavor text configured for your current character slot to use this spawnpoint.")) return - var/choice = tgui_alert(user, "Using this spawner will spawn you as your currently loaded character slot in a special role. It should not be used with characters you regularly play on station. Are you absolutely sure you wish to continue?", "Maint Straggler Spawner", list("Yes", "No")) + var/choice = tgui_alert(user, "Using this spawner will spawn you as your currently loaded character slot in a special role. It should not be used with characters you regularly play on station. Are you absolutely sure you wish to continue?", "Maint Lurker Spawner", list("Yes", "No")) if(!choice || choice == "No") return create_occupant(user) -/obj/structure/ghost_pod/ghost_activated/maint_straggler/create_occupant(var/mob/M) +/obj/structure/ghost_pod/ghost_activated/maint_lurker/create_occupant(var/mob/M) ..() var/picked_ckey = M.ckey @@ -219,7 +219,7 @@ to_chat(src, "Something went wrong and spawning failed. Please check your character slot doesn't have any obvious errors, then either try again or send an adminhelp!") reset_ghostpod() return - log_and_message_admins("successfully used a Maintenance Straggler spawnpoint and became their loaded character.") + log_and_message_admins("successfully used a Maintenance Lurker spawnpoint and became their loaded character.") M.client.prefs.copy_to(new_character) new_character.dna.ResetUIFrom(new_character) @@ -228,7 +228,7 @@ new_character.mind.loaded_from_ckey = picked_ckey new_character.mind.loaded_from_slot = picked_slot - job_master.EquipRank(new_character, JOB_MAINT_STRAGGLER, 1) + job_master.EquipRank(new_character, JOB_MAINT_LURKER, 1) for(var/lang in new_character.client.prefs.alternate_languages) var/datum/language/chosen_language = GLOB.all_languages[lang] @@ -240,14 +240,14 @@ new_character.update_transform() - to_chat(new_character, span_notice("You are a " + span_bold(JOB_MAINT_STRAGGLER) + ", a loose end... you have no special advantages compared to the rest of the crew, so be cautious! You have spawned with an ID that will allow you free access to maintenance areas along with any of your chosen loadout items that are not role restricted, and can make use of anything you can find in maintenance.")) + to_chat(new_character, span_notice("You are a " + span_bold(JOB_MAINT_LURKER) + ", a loose end... you have no special advantages compared to the rest of the crew, so be cautious! You have spawned with an ID that will allow you free access to maintenance areas along with any of your chosen loadout items that are not role restricted, and can make use of anything you can find in maintenance.")) to_chat(new_character, span_critical("Please be advised, this role is " + span_bold("NOT AN ANTAGONIST."))) to_chat(new_character, span_notice("Whoever or whatever your chosen character slot is, your role is to facilitate roleplay focused around that character; this role is not free license to attack and murder people without provocation or explicit out-of-character consent. You should probably be cautious around high-traffic and highly sensitive areas (e.g. Telecomms) as Security personnel would be well within their rights to treat you as a trespasser. That said, good luck!")) new_character.visible_message(span_warning("[new_character] appears to crawl out of somewhere.")) qdel(src) -/obj/structure/ghost_pod/ghost_activated/maint_straggler/Initialize() +/obj/structure/ghost_pod/ghost_activated/maint_lurker/Initialize() ..() if(!(src in active_ghost_pods)) active_ghost_pods += src diff --git a/code/modules/client/preference_setup/antagonism/02_candidacy.dm b/code/modules/client/preference_setup/antagonism/02_candidacy.dm index d4000472749..5c1c58fc72f 100644 --- a/code/modules/client/preference_setup/antagonism/02_candidacy.dm +++ b/code/modules/client/preference_setup/antagonism/02_candidacy.dm @@ -20,10 +20,11 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set //VOREStation Add "lost drone" = 1, // 16 "maint pred" = 1, // 17 - "morph" = 1, // 18 - "corgi" = 1, // 19 - "cursed sword" = 1, // 20 - "Ship Survivor" = 1, // 21 + "maint lurker" = 1, // 18 + "morph" = 1, // 19 + "corgi" = 1, // 20 + "cursed sword" = 1, // 21 + "Ship Survivor" = 1, // 22 //VOREStation Add End ) diff --git a/code/modules/events/maint_lurker.dm b/code/modules/events/maint_lurker.dm new file mode 100644 index 00000000000..e82950fefbc --- /dev/null +++ b/code/modules/events/maint_lurker.dm @@ -0,0 +1,22 @@ +/datum/event/maintenance_lurker + startWhen = 1 + endWhen = 30 + +/datum/event/maintenance_lurker/start() + + var/obj/effect/landmark/spawnspot = null + var/list/possibleSpawnspots = list() + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "maint_pred") + possibleSpawnspots += L + if(possibleSpawnspots.len) + spawnspot = pick(possibleSpawnspots) + else + kill() // To prevent fake announcements + return + + if(!spawnspot) + kill() // To prevent fake announcements + return + + new /obj/structure/ghost_pod/ghost_activated/maint_lurker(get_turf(spawnspot)) diff --git a/maps/groundbase/groundbase_events.dm b/maps/groundbase/groundbase_events.dm index 905ce89875f..e12d41100dd 100644 --- a/maps/groundbase/groundbase_events.dm +++ b/maps/groundbase/groundbase_events.dm @@ -70,6 +70,7 @@ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(ASSIGNMENT_SCIENTIST = 40), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_ANY = 5), 0), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(ASSIGNMENT_ANY = 5), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Lurker", /datum/event/maintenance_lurker, 100, list(ASSIGNMENT_ANY = 5), 0), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Roaming Wildlife", /datum/event/roaming_wildlife, 20, list(ASSIGNMENT_SECURITY = 20, ASSIGNMENT_MEDICAL = 5), min_jobs = list(ASSIGNMENT_SECURITY = 2)), ) add_disabled_events(list( diff --git a/maps/stellar_delight/stellar_delight_events.dm b/maps/stellar_delight/stellar_delight_events.dm index 9511d67a048..d524b2bfcde 100644 --- a/maps/stellar_delight/stellar_delight_events.dm +++ b/maps/stellar_delight/stellar_delight_events.dm @@ -86,6 +86,7 @@ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(ASSIGNMENT_SCIENTIST = 40), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_ANY = 5), 0), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(ASSIGNMENT_ANY = 5), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Lurker", /datum/event/maintenance_lurker, 100, list(ASSIGNMENT_ANY = 5), 0), ) add_disabled_events(list( new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1), diff --git a/maps/tether/tether_events.dm b/maps/tether/tether_events.dm index 5ed863881a3..543e6002f0a 100644 --- a/maps/tether/tether_events.dm +++ b/maps/tether/tether_events.dm @@ -86,6 +86,7 @@ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(ASSIGNMENT_SCIENTIST = 40), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_ANY = 5), 0), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(ASSIGNMENT_ANY = 5), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Lurker", /datum/event/maintenance_lurker, 100, list(ASSIGNMENT_ANY = 5), 0), ) add_disabled_events(list( new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1), diff --git a/vorestation.dme b/vorestation.dme index 057b7057863..b49e13ebe1a 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2417,6 +2417,7 @@ #include "code\modules\events\infestation.dm" #include "code\modules\events\ion_storm.dm" #include "code\modules\events\jellyfish_migration.dm" +#include "code\modules\events\maint_lurker.dm" #include "code\modules\events\maintenance_predator_vr.dm" #include "code\modules\events\meteor_strike_vr.dm" #include "code\modules\events\meteors.dm"