diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index c2cd74ffac..fd7a995b20 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -32,13 +32,11 @@ #define BE_PAI 0x8000 //VOREStation Add #define BE_LOSTDRONE 0x10000 -#define BE_MAINTPRED 0x20000 -#define BE_MAINTLURKER 0x40000 -#define BE_MORPH 0x80000 -#define BE_CORGI 0x100000 -#define BE_CURSEDSWORD 0x200000 -#define BE_SURVIVOR 0x400000 -#define BE_EVENT 0x800000 +#define BE_MAINTCRITTER 0x20000 +#define BE_CORGI 0x40000 +#define BE_CURSEDSWORD 0x80000 +#define BE_SURVIVOR 0x100000 +#define BE_EVENT 0x200000 //VOREStation Add End var/list/be_special_flags = list( @@ -60,9 +58,7 @@ var/list/be_special_flags = list( "pAI" = BE_PAI, //VOREStation Add "Lost Drone" = BE_LOSTDRONE, - "Maint Pred" = BE_MAINTPRED, - "Stowaway" = BE_MAINTLURKER, // CHOMPEdit - "Morph" = BE_MORPH, + "Maint Critter" = BE_MAINTCRITTER, "Corgi" = BE_CORGI, "Cursed Sword" = BE_CURSEDSWORD, "Ship Survivor" = BE_SURVIVOR diff --git a/code/datums/ghost_query_vr.dm b/code/datums/ghost_query_vr.dm index 8f29b14bb3..82152edbcb 100644 --- a/code/datums/ghost_query_vr.dm +++ b/code/datums/ghost_query_vr.dm @@ -1,17 +1,25 @@ +/* /datum/ghost_query/morph role_name = "Morph" be_special_flag = BE_MORPH - question = "A weird morphic creature appears to have snuck onstation. Do you want to play as it? ((Expect to be treated as vore predator.))" + question = "A weird morphic creature has appeared in maintenance. Do you want to play as it? ((You get to play as a weird shapeshifting \'morph\' that can mimic objects and people.))" cutoff_number = 1 /datum/ghost_query/maints_pred - role_name = "Maintenance Predator" + role_name = "Maintenance Critter" be_special_flag = BE_MAINTPRED - 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.))" + question = "It appears a critter of some kind, possibly predatory, is lurking in maintenance. Do you want to play as it? ((You get to choose from a wide range of critters.))" 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.))" + 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, but your arrival will not be announced and you will not appear on the manifest.))" + cutoff_number = 1 +*/ + +/datum/ghost_query/maints_spawner + role_name = "Maintenance Spawner" + be_special_flag = BE_MAINTCRITTER + question = "An opportunity to spawn as a Maintenance Critter has appeared. You can spawn as your choice of a mob (from a fairly large list), a morph (a shapeshifting creature capable of mimicking objects or other creatures), or your currently loaded character slot in a special \'lurker\' role." cutoff_number = 1 diff --git a/code/datums/ghost_spawn.dm b/code/datums/ghost_spawn.dm index 01bb3a9073..4491abf3aa 100644 --- a/code/datums/ghost_spawn.dm +++ b/code/datums/ghost_spawn.dm @@ -85,15 +85,9 @@ GLOBAL_VAR_INIT(allowed_ghost_spawns, 2) if("lost_drone_spawn") join_lost(ui.user) . = TRUE - if("maintpred_spawn") - join_maintpred(ui.user) - . = TRUE if("gravekeeper_spawn") join_grave(ui.user) . = TRUE - if("morph_spawn") - join_morpth(ui.user) - . = TRUE /datum/tgui_module/ghost_spawn_menu/proc/compile_pod_data() var/list/compiled_pods = list() diff --git a/code/datums/ghost_spawn_options.dm b/code/datums/ghost_spawn_options.dm index dcf7255169..ad476cd83a 100644 --- a/code/datums/ghost_spawn_options.dm +++ b/code/datums/ghost_spawn_options.dm @@ -262,25 +262,6 @@ var/obj/structure/ghost_pod/manual/lost_drone/dogborg/lost = new(get_turf(spawnspot)) lost.create_occupant(user) -/datum/tgui_module/ghost_spawn_menu/proc/join_maintpred(mob/observer/dead/user) - if(jobban_isbanned(user, JOB_GHOSTROLES)) - to_chat(user, span_danger("You are banned from playing ghost roles and cannot spawn as a maint pred.")) - return - - if(GLOB.allowed_ghost_spawns <= 0) - to_chat(user, span_warning("There're no free ghost join slots.")) - return - - var/obj/effect/landmark/spawnspot = get_ghost_role_spawn() - if(!spawnspot) - to_chat(user, span_warning("No spawnpoint available.")) - return - - GLOB.allowed_ghost_spawns-- - announce_ghost_joinleave(user, 0, "They are now a maint pred.") - var/obj/structure/ghost_pod/ghost_activated/maintpred/no_announce/mpred = new(get_turf(spawnspot)) - mpred.create_occupant(user) - /datum/tgui_module/ghost_spawn_menu/proc/join_grave(mob/observer/dead/user) if(jobban_isbanned(user, JOB_CYBORG)) to_chat(user, span_danger("You are banned from playing synthetics and cannot spawn as a gravekeeper.")) @@ -300,25 +281,6 @@ var/obj/structure/ghost_pod/automatic/gravekeeper_drone/grave = new(get_turf(spawnspot)) grave.create_occupant(user) -/datum/tgui_module/ghost_spawn_menu/proc/join_morpth(mob/observer/dead/user) - if(jobban_isbanned(user, JOB_GHOSTROLES)) - to_chat(user, span_danger("You are banned from playing ghost roles and cannot spawn as a morph.")) - return - - if(GLOB.allowed_ghost_spawns <= 0) - to_chat(user, span_warning("There're no free ghost join slots.")) - return - - var/obj/effect/landmark/spawnspot = get_ghost_role_spawn() - if(!spawnspot) - to_chat(user, span_warning("No spawnpoint available.")) - return - - GLOB.allowed_ghost_spawns-- - announce_ghost_joinleave(user, 0, "They are now a morph.") - var/obj/structure/ghost_pod/ghost_activated/morphspawn/no_announce/morph = new(get_turf(spawnspot)) - morph.create_occupant(user) - /datum/tgui_module/ghost_spawn_menu/proc/get_ghost_role_spawn() var/list/possibleSpawnspots = list() for(var/obj/effect/landmark/L in GLOB.landmarks_list) diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index b35c25f2b2..9d4ed06c5f 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -10,7 +10,6 @@ icon_state = "tunnel_hole" icon_state_opened = "tunnel_hole" density = FALSE - ghost_query_type = /datum/ghost_query/maints_pred anchored = TRUE invisibility = INVISIBILITY_OBSERVER spawn_active = TRUE @@ -76,7 +75,6 @@ icon_state = "morph" icon_state_opened = "morph_dead" density = FALSE - ghost_query_type = /datum/ghost_query/morph anchored = TRUE invisibility = INVISIBILITY_OBSERVER spawn_active = TRUE @@ -132,7 +130,6 @@ icon_state = "tunnel_hole" icon_state_opened = "tunnel_hole" density = FALSE - ghost_query_type = /datum/ghost_query/maints_lurker anchored = TRUE invisibility = INVISIBILITY_OBSERVER spawn_active = TRUE diff --git a/code/game/objects/structures/ghost_pods/unified_ghost_hole.dm b/code/game/objects/structures/ghost_pods/unified_ghost_hole.dm new file mode 100644 index 0000000000..d528e522fd --- /dev/null +++ b/code/game/objects/structures/ghost_pods/unified_ghost_hole.dm @@ -0,0 +1,164 @@ +/obj/structure/ghost_pod/ghost_activated/unified_hole + name = "maintenance critter hole" + desc = "This is my hole! It was made for me!" + icon = 'icons/effects/effects.dmi' + icon_state = "rift" + icon_state_opened = "tendril_dead" + density = FALSE + ghost_query_type = /datum/ghost_query/maints_spawner + anchored = TRUE + invisibility = INVISIBILITY_OBSERVER + spawn_active = TRUE + var/redgate_restricted = FALSE + +//override the standard attack_ghost proc for custom messages +/obj/structure/ghost_pod/ghost_activated/unified_hole/attack_ghost(var/mob/observer/dead/user) + var/choice + 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 + + //No OOC notes/FT + if(not_has_ooc_text(user)) + //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 + + if(redgate_restricted) + choice = tgui_alert(user, "Which type of critter do you wish to spawn as? Note that this is a Redgate Spawner: if you choose the Lurker role you will not be able to leave through the redgate until another character grants you permission by clicking on the redgate with you nearby. Are you absolutely sure you wish to continue?", "Redgate Critter Spawner", list("Mob", "Morph", "Lurker", "Cancel")) + else + choice = tgui_alert(user, "Which type of critter do you wish to spawn as?", "Critter Spawner", list("Mob", "Morph", "Lurker", "Cancel")) + + + if(choice == "Mob") + create_simplemob(user) + else if(choice == "Morph") + create_morph(user) + else if(choice == "Lurker") + if(!is_alien_whitelisted(user.client, GLOB.all_species[user.client.prefs.species])) + to_chat(user, span_warning("You cannot use this spawnpoint to spawn as a species you are not whitelisted for!")) + return + else + create_lurker(user) + else if(choice == "Cancel") + return + +/obj/structure/ghost_pod/ghost_activated/unified_hole/proc/create_simplemob(var/mob/M) + var/choice + var/finalized = FALSE + GLOB.active_ghost_pods -= src + + if(needscharger) + new /obj/machinery/recharge_station/ghost_pod_recharger(src.loc) + + while(!finalized && M.client) + choice = tgui_input_list(M, "What type of critter do you want to play as?", "Critter Choice", GLOB.maint_mob_pred_options) + if(!choice) //We probably pushed the cancel button on the mob selection. Let's just put the ghost pod back in the list. + to_chat(M, span_notice("No mob selected, cancelling.")) + reset_ghostpod() + return + + if(choice) + finalized = tgui_alert(M, "Are you sure you want to play as [choice]?","Confirmation",list("No","Yes")) + + if(!choice) //If somehow we ended up here and we don't have a choice, let's just reset things! + reset_ghostpod() + return + + var/mobtype = GLOB.maint_mob_pred_options[choice] + var/mob/living/simple_mob/newPred = new mobtype(get_turf(src)) + qdel(newPred.ai_holder) + newPred.ai_holder = null + //newPred.movement_cooldown = 0 // The "needless artificial speed cap" exists for a reason + // R.has_hands = TRUE // Downstream + if(M.mind) + M.mind.transfer_to(newPred) + to_chat(M, span_notice("You are " + span_bold("[newPred]") + ", somehow having stowed away in search of food, shelter, or safety. The environment around you is a strange and unfamiliar one, but sooner or later you'll have to leave your hiding place in search of food. How you choose to do so is up to you, just beware that you don't end up falling prey to some other creature.")) + to_chat(M, span_critical("Please be advised, this role is NOT AN ANTAGONIST.")) + to_chat(M, span_warning("You may be a spooky (or cute!) space critter, but your role is to facilitate roleplay, not to fight the station and slaughter people. You're free to get into any kind of roleplay scene you like if OOC prefs align, but emphasis is on the 'roleplay' here. If you intend to be an actual threat, you MUST seek permission from staff first. GENERALLY, this role should avoid well populated areas, but you might be able to get away with it if you spawn as something relatively innocuous.")) + newPred.ckey = M.ckey + newPred.visible_message(span_warning("[newPred] emerges from somewhere!")) + log_and_message_admins("successfully used a Maintenance Critter spawner to spawn in as a [newPred].", newPred) + if(tgui_alert(newPred, "Do you want to load the vore bellies from your current slot?", "Load Bellies", list("Yes", "No")) == "Yes") + newPred.copy_from_prefs_vr() + if(LAZYLEN(newPred.vore_organs)) + newPred.vore_selected = newPred.vore_organs[1] + qdel(src) + +/obj/structure/ghost_pod/ghost_activated/unified_hole/proc/create_morph(var/mob/M) + GLOB.active_ghost_pods -= src + var/mob/living/simple_mob/vore/morph/newMorph = new /mob/living/simple_mob/vore/morph(get_turf(src)) + newMorph.voremob_loaded = TRUE // On-demand belly loading. + if(M.mind) + M.mind.transfer_to(newMorph) + to_chat(M, span_notice("You are a " + span_bold("Morph") + ", somehow having stowed away in your wandering. You are in a strange and unfamiliar place, but one that's sure to be full of tasty treats and learning opportunities. If you want to survive here for long you should probably seek a convincing disguise, or at the very least take advantage of your amorphous form to slither through the ventilation system and avoid danger that way.")) + to_chat(M, span_notice("You can use shift + click on objects and creatures to disguise yourself as them, but your strikes are nearly useless when you are disguised. \ + You can undisguise yourself by shift + clicking yourself, but changing your shape (whether changing to a false form or returning to your natural form) has a short cooldown. You can also ventcrawl, \ + by using alt + click on the vent or scrubber. Note that it may be impossible to impersonate certain people due to mechanical preference settings.")) + to_chat(M, span_critical("Please be advised, this role is NOT AN ANTAGONIST.")) + to_chat(M, span_warning("You may be a weird goopy creature, but your role is to facilitate weird goopy creature roleplay, not to fight the station and slaughter people. You're free to get into any kind of roleplay scene you like if OOC prefs align, but emphasis is on the 'roleplay' here. If you intend to be an actual threat, you MUST seek permission from staff first. GENERALLY, this role should avoid well populated areas, but you might be able to get away with it if you play your cards right.")) + + newMorph.ckey = M.ckey + newMorph.visible_message(span_warning("A morph appears to crawl out of somewhere.")) + log_and_message_admins("successfully used a Maintenance Critter spawner to spawn in as a Morph.", newMorph) + if(tgui_alert(newMorph, "Do you want to load the vore bellies from your current slot?", "Load Bellies", list("Yes", "No")) == "Yes") + newMorph.copy_from_prefs_vr() + if(LAZYLEN(newMorph.vore_organs)) + newMorph.vore_selected = newMorph.vore_organs[1] + qdel(src) + +/obj/structure/ghost_pod/ghost_activated/unified_hole/proc/create_lurker(var/mob/M) + var/picked_ckey = M.ckey + var/picked_slot = M.client.prefs.default_slot + GLOB.active_ghost_pods -= src + + var/mob/living/carbon/human/new_character = new(src.loc) + if(!new_character) + to_chat(M, span_warning("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 Critter spawner to spawn in as their loaded character.", M) + + M.client.prefs.copy_to(new_character) + new_character.dna.ResetUIFrom(new_character) + new_character.sync_organ_dna() + new_character.sync_addictions() + new_character.key = M.key + new_character.mind.loaded_from_ckey = picked_ckey + new_character.mind.loaded_from_slot = picked_slot + + 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] + if(chosen_language) + if(is_lang_whitelisted(M, chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs))) + new_character.add_language(lang) + + SEND_SIGNAL(new_character, COMSIG_HUMAN_DNA_FINALIZED) + + new_character.regenerate_icons() + + new_character.update_transform() + if(redgate_restricted) + new_character.redgate_restricted = TRUE + to_chat(new_character, span_notice("You are an inhabitant of this redgate location, 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 basic doors, and should possess all of your chosen loadout items that are not role restricted, and can make use of anything you can find in the redgate map.")) + else + to_chat(new_character, span_notice("You are a " + span_bold(JOB_MAINT_LURKER) + ", a loose end, stowaway, drifter, or somesuch. 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, and should possess all of your chosen loadout items that are not role restricted. You also have a PDA which you can use for messaging purposes, and are free to 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/unified_hole/Initialize(mapload) + . = ..() + GLOB.active_ghost_pods += src + +/obj/structure/ghost_pod/ghost_activated/unified_hole/Destroy() + . = ..() + GLOB.active_ghost_pods -= src + +/obj/structure/ghost_pod/ghost_activated/unified_hole/redgate + name = "Redspace inhabitant hole" + desc = "A starting location for critters who exist inside of the redgate!" + redgate_restricted = TRUE diff --git a/code/modules/events/maint_spawner.dm b/code/modules/events/maint_spawner.dm new file mode 100644 index 0000000000..774fb64116 --- /dev/null +++ b/code/modules/events/maint_spawner.dm @@ -0,0 +1,22 @@ +/datum/event/maintenance_critter + startWhen = 1 + endWhen = 30 + +/datum/event/maintenance_critter/start() + + var/obj/effect/landmark/spawnspot = null + var/list/possibleSpawnspots = list() + for(var/obj/effect/landmark/L in GLOB.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/unified_hole(get_turf(spawnspot)) diff --git a/code/modules/events/morph_spawn_vr.dm b/code/modules/events/morph_spawn_vr.dm index 9f2b3a738d..f044c23760 100644 --- a/code/modules/events/morph_spawn_vr.dm +++ b/code/modules/events/morph_spawn_vr.dm @@ -20,7 +20,3 @@ return new /obj/structure/ghost_pod/ghost_activated/morphspawn(get_turf(spawnspot)) - -//YW Addition: Adding named landmark for events -/obj/effect/landmark/event_spawn/morphspawn - name = "morphspawn" diff --git a/maps/groundbase/groundbase_events.dm b/maps/groundbase/groundbase_events.dm index 3b9c604ec3..86e9fca61a 100644 --- a/maps/groundbase/groundbase_events.dm +++ b/maps/groundbase/groundbase_events.dm @@ -59,9 +59,7 @@ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 0, list(DEPARTMENT_SECURITY = 30), 1, min_jobs = list(DEPARTMENT_SECURITY = 2)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(DEPARTMENT_SECURITY = 15, DEPARTMENT_ENGINEERING = 30), 1, min_jobs = list(DEPARTMENT_SECURITY = 1, DEPARTMENT_ENGINEERING = 1)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(DEPARTMENT_RESEARCH = 40), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(DEPARTMENT_ANY = 5), 0), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(DEPARTMENT_ANY = 5), 0), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Lurker", /datum/event/maintenance_lurker, 100, list(DEPARTMENT_ANY = 5), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Critter", /datum/event/maintenance_critter, 175, list(DEPARTMENT_ANY = 5), 0), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Roaming Wildlife", /datum/event/roaming_wildlife, 20, list(DEPARTMENT_SECURITY = 20, DEPARTMENT_MEDICAL = 5), min_jobs = list(DEPARTMENT_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 88896116aa..85f458ca73 100644 --- a/maps/stellar_delight/stellar_delight_events.dm +++ b/maps/stellar_delight/stellar_delight_events.dm @@ -75,9 +75,7 @@ //Evil grubs that drain station power slightly new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(DEPARTMENT_SECURITY = 15, DEPARTMENT_ENGINEERING = 30), 1, min_jobs = list(DEPARTMENT_SECURITY = 1, DEPARTMENT_ENGINEERING = 1)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(DEPARTMENT_RESEARCH = 40), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(DEPARTMENT_ANY = 5), 0), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(DEPARTMENT_ANY = 5), 0), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Lurker", /datum/event/maintenance_lurker, 100, list(DEPARTMENT_ANY = 5), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Critter", /datum/event/maintenance_critter, 175, list(DEPARTMENT_ANY = 5), 0), ) add_disabled_events(list( new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(DEPARTMENT_MEDICAL = 30), 1), diff --git a/maps/tether/tether_events.dm b/maps/tether/tether_events.dm index 9000e66d9e..8467a1a64b 100644 --- a/maps/tether/tether_events.dm +++ b/maps/tether/tether_events.dm @@ -75,9 +75,7 @@ //Evil grubs that drain station power slightly new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(DEPARTMENT_SECURITY = 10, DEPARTMENT_ENGINEERING = 30), 1, min_jobs = list(DEPARTMENT_SECURITY = 1, DEPARTMENT_ENGINEERING = 1)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(DEPARTMENT_RESEARCH = 40), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(DEPARTMENT_ANY = 5), 0), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(DEPARTMENT_ANY = 5), 0), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Lurker", /datum/event/maintenance_lurker, 100, list(DEPARTMENT_ANY = 5), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Critter", /datum/event/maintenance_critter, 175, list(DEPARTMENT_ANY = 5), 0), ) add_disabled_events(list( new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(DEPARTMENT_MEDICAL = 30), 1), diff --git a/modular_chomp/code/modules/event/event_container_ch.dm b/modular_chomp/code/modules/event/event_container_ch.dm index c12772f629..77ab9b3b61 100644 --- a/modular_chomp/code/modules/event/event_container_ch.dm +++ b/modular_chomp/code/modules/event/event_container_ch.dm @@ -75,11 +75,9 @@ // Pure RP fun, no mechanical effects. new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, -125, list(JOB_AI = 80, JOB_CYBORG = 50, DEPARTMENT_ENGINEERING = 15, DEPARTMENT_RESEARCH = 5), min_jobs = list(JOB_CYBORG = 3)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 5, list(DEPARTMENT_ANY = 1, DEPARTMENT_SECURITY = 5, DEPARTMENT_MEDICAL = 3), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 75, list(DEPARTMENT_SECURITY = 25, DEPARTMENT_RESEARCH = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Lurker", /datum/event/maintenance_lurker, 100, list(DEPARTMENT_ANY = 5), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Critter", /datum/event/maintenance_critter, 175, list(DEPARTMENT_ANY = 5), 0), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ore Shower", /datum/event/meteor_wave/meatyores, -50, list(DEPARTMENT_ENGINEERING = 45), 1, min_jobs = list(DEPARTMENT_ENGINEERING = 2)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, -50, list(DEPARTMENT_ENGINEERING = 45), 1, min_jobs = list(DEPARTMENT_ENGINEERING = 2)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(DEPARTMENT_ANY = 5), 0), //New CHOMPStation event. Mice and lizards grow into rats and lizardmen respectively. new /datum/event_meta(EVENT_LEVEL_MODERATE, "Mutants", /datum/event/mutants, 20, list(DEPARTMENT_ANY = 15, DEPARTMENT_SECURITY = 25), 1), // Opens doors in brig. So just RP fun diff --git a/modular_chomp/code/modules/event/landmarks.dm b/modular_chomp/code/modules/event/landmarks.dm new file mode 100644 index 0000000000..8885a65ea6 --- /dev/null +++ b/modular_chomp/code/modules/event/landmarks.dm @@ -0,0 +1,2 @@ +/obj/effect/landmark/event_spawn/morphspawn + name = "morphspawn" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx index b1d724eb1b..a289255b8c 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx @@ -11,19 +11,21 @@ import { const extra_desc = (name: string) => { switch (name) { case 'Be positronic brain': - return 'This unlocks opportunities to become a positronic borg brain when you are a ghost.'; + return 'This notifies you when there is an opportunity to become a positronic borg brain.'; case 'Be pAI candidate': - return 'This unlocks opportunities to become a personal AI assistant when you are a ghost.'; + return 'This notifies you when there is an opportunity to become a personal AI assistant.'; case 'Be lost drone': - return 'This unlocks opportunities to become a spooky lost drone when you are a ghost.'; + return 'This notifies you when there is an opportunity to become a spooky lost drone.'; case 'Be maint pred': - return 'This unlocks opportunities to become use a maintenance predator spawner.'; + return 'This notifies you when there is an opportunity to become use a maintenance predator spawner.'; case 'Be maint lurker': - return 'This unlocks opportunities to become use a maintenance mob spawner.'; + return 'This notifies you when there is an opportunity to use a maintenance mob spawner.'; + case 'Be maint critter': + return 'This notifies you when there is an opportunity to use a maintenance critter spawner to become a mob, a morph, or a lurker.'; case 'Be morph': - return 'This is totally useless, but once allowed you to become a shapeshifting mimic.'; + return 'This notifies you when there is an opportunity to become a morph, a goopy shapeshifting critter.'; case 'Be corgi': - return 'This is totally useless, but once allowed you to become a corgi.'; + return 'This notifies you when there is an opportunity to become a corgi.'; case 'Be cursed sword': return 'This is totally useless, but once allowed you to become a cursed sword.'; case 'Be Ship Survivor': diff --git a/vorestation.dme b/vorestation.dme index b1857d09fe..d691dfaf21 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2007,6 +2007,7 @@ #include "code\game\objects\structures\ghost_pods\silicon.dm" #include "code\game\objects\structures\ghost_pods\silicon_vr.dm" #include "code\game\objects\structures\ghost_pods\survivor.dm" +#include "code\game\objects\structures\ghost_pods\unified_ghost_hole.dm" #include "code\game\objects\structures\props\alien_props.dm" #include "code\game\objects\structures\props\alien_props_vr.dm" #include "code\game\objects\structures\props\altevian.dm" @@ -2760,14 +2761,12 @@ #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\maint_spawner.dm" #include "code\modules\events\meteor_strike_vr.dm" #include "code\modules\events\meteors.dm" #include "code\modules\events\money_hacker.dm" #include "code\modules\events\money_lotto.dm" #include "code\modules\events\money_spam.dm" -#include "code\modules\events\morph_spawn_vr.dm" #include "code\modules\events\prison_break.dm" #include "code\modules\events\radiation_storm.dm" #include "code\modules\events\random_antagonist.dm" @@ -5176,6 +5175,7 @@ #include "modular_chomp\code\modules\event\heavydangerinfestation.dm" #include "modular_chomp\code\modules\event\horde_infestation.dm" #include "modular_chomp\code\modules\event\infectedroom.dm" +#include "modular_chomp\code\modules\event\landmarks.dm" #include "modular_chomp\code\modules\event\meatyores.dm" #include "modular_chomp\code\modules\event\metroid_infestation.dm" #include "modular_chomp\code\modules\event\mutants.dm"