diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm
index 83211d7ee6..9e38d9cf1e 100644
--- a/code/__HELPERS/_cit_helpers.dm
+++ b/code/__HELPERS/_cit_helpers.dm
@@ -108,8 +108,8 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
set desc = "Sets an extended description of your character's features."
set category = "IC"
- var/new_flavor = (input(src, "Enter your new flavor text:", "Flavor text", null) as text|null)
- if(new_flavor)
+ var/new_flavor = input(src, "Enter your new flavor text:", "Flavor text", null) as message|null
+ if(!isnull(new_flavor))
flavor_text = sanitize(new_flavor)
to_chat(src, "Your flavor text has been updated.")
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 2d8b9f70ec..5e663fe411 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -1,4 +1,27 @@
GLOBAL_LIST_INIT(bitfields, list(
+ "appearance_flags" = list(
+ "LONG_GLIDE" = LONG_GLIDE,
+ "RESET_COLOR" = RESET_COLOR,
+ "RESET_ALPHA" = RESET_ALPHA,
+ "RESET_TRANSFORM" = RESET_TRANSFORM,
+ "NO_CLIENT_COLOR" = NO_CLIENT_COLOR,
+ "KEEP_TOGETHER" = KEEP_TOGETHER,
+ "KEEP_APART" = KEEP_APART,
+ "PLANE_MASTER" = PLANE_MASTER,
+ "TILE_BOUND" = TILE_BOUND,
+ "PIXEL_SCALE" = PIXEL_SCALE
+ ),
+ "sight" = list(
+ "SEE_INFRA" = SEE_INFRA,
+ "SEE_SELF" = SEE_SELF,
+ "SEE_MOBS" = SEE_MOBS,
+ "SEE_OBJS" = SEE_OBJS,
+ "SEE_TURFS" = SEE_TURFS,
+ "SEE_PIXELS" = SEE_PIXELS,
+ "SEE_THRU" = SEE_THRU,
+ "SEE_BLACKNESS" = SEE_BLACKNESS,
+ "BLIND" = BLIND
+ ),
"obj_flags" = list(
"EMAGGED" = EMAGGED,
"IN_USE" = IN_USE,
@@ -108,4 +131,4 @@ GLOBAL_LIST_INIT(bitfields, list(
"NO_MAT_REDEMPTION_2" = NO_MAT_REDEMPTION_2,
"LAVA_PROTECT_2" = LAVA_PROTECT_2
)
- ))
+ ))
\ No newline at end of file
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index b662fd4f84..403ad06784 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -165,7 +165,7 @@
var/datum/config_entry/E = entry_type
var/entry_is_abstract = initial(E.abstract_type) == entry_type
if(entry_is_abstract)
- CRASH("Tried to retrieve an abstract config_entry: [entry_type]")
+ CRASH("Tried to set an abstract config_entry: [entry_type]")
E = entries_by_type[entry_type]
if(!E)
CRASH("Missing config entry for [entry_type]!")
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index 426dc2b67e..3de0ebe439 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -226,10 +226,13 @@
/datum/config_entry/keyed_number_list/law_weight
splitter = ","
-/datum/config_entry/number/assistant_cap
+/datum/config_entry/number/overflow_cap
config_entry_value = -1
min_val = -1
+/datum/config_entry/string/overflow_job
+ config_entry_value = "Assistant"
+
/datum/config_entry/flag/starlight
/datum/config_entry/flag/grey_assistants
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index e82da7dd6f..c19345f328 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -21,8 +21,21 @@ SUBSYSTEM_DEF(job)
if(CONFIG_GET(flag/load_jobs_from_txt))
LoadJobs()
generate_selectable_species()
+ set_overflow_role(CONFIG_GET(string/overflow_job))
..()
+/datum/controller/subsystem/job/proc/set_overflow_role(new_overflow_role)
+ var/datum/job/new_overflow = GetJob(new_overflow_role)
+ var/cap = CONFIG_GET(number/overflow_cap)
+
+ new_overflow.spawn_positions = cap
+ new_overflow.total_positions = cap
+
+ if(new_overflow_role != overflow_role)
+ var/datum/job/old_overflow = GetJob(overflow_role)
+ old_overflow.spawn_positions = initial(old_overflow.spawn_positions)
+ old_overflow.total_positions = initial(old_overflow.total_positions)
+ overflow_role = new_overflow_role
/datum/controller/subsystem/job/proc/SetupOccupations(faction = "Station")
occupations = list()
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index bffde1e335..be2b107cb8 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -56,7 +56,7 @@ SUBSYSTEM_DEF(shuttle)
var/lockdown = FALSE //disallow transit after nuke goes off
- var/auto_call = 99000 //CIT CHANGE - time before in deciseconds in which the shuttle is auto called. Default is 2½ hours plus 15 for the shuttle. So total is 3.
+ var/auto_call = 72000 //CIT CHANGE - time before in deciseconds in which the shuttle is auto called. Default is 2½ hours plus 15 for the shuttle. So total is 3.
/datum/controller/subsystem/shuttle/Initialize(timeofday)
ordernum = rand(1, 9000)
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index e3d783d231..16bcbebc70 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -11,9 +11,10 @@ SUBSYSTEM_DEF(traumas)
#define PHOBIA_FILE "phobia.json"
/datum/controller/subsystem/traumas/Initialize()
+ //phobia types is to pull from randomly for brain traumas, e.g. conspiracies is for special assignment only
phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards",
"skeletons", "snakes", "robots", "doctors", "authority", "the supernatural",
- "aliens", "strangers")
+ "aliens", "strangers", "birds", "falling")
phobia_words = list("spiders" = strings(PHOBIA_FILE, "spiders"),
"space" = strings(PHOBIA_FILE, "space"),
@@ -29,7 +30,9 @@ SUBSYSTEM_DEF(traumas)
"the supernatural" = strings(PHOBIA_FILE, "the supernatural"),
"aliens" = strings(PHOBIA_FILE, "aliens"),
"strangers" = strings(PHOBIA_FILE, "strangers"),
- "conspiracies" = strings(PHOBIA_FILE, "conspiracies")
+ "conspiracies" = strings(PHOBIA_FILE, "conspiracies"),
+ "birds" = strings(PHOBIA_FILE, "birds"),
+ "falling" = strings(PHOBIA_FILE, "falling")
)
phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)),
@@ -44,7 +47,10 @@ SUBSYSTEM_DEF(traumas)
/mob/living/simple_animal/hostile/clockwork, /mob/living/simple_animal/drone/cogscarab,
/mob/living/simple_animal/revenant, /mob/living/simple_animal/shade)),
"aliens" = typecacheof(list(/mob/living/carbon/alien, /mob/living/simple_animal/slime)),
- "conspiracies" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209, /mob/living/simple_animal/drone))
+ "conspiracies" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209, /mob/living/simple_animal/drone,
+ /mob/living/simple_animal/pet/penguin)),
+ "birds" = typecacheof(list(/mob/living/simple_animal/parrot, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
+ /mob/living/simple_animal/pet/penguin))
)
phobia_objs = list("snakes" = typecacheof(list(/obj/item/rod_of_asclepius)),
@@ -91,7 +97,8 @@ SUBSYSTEM_DEF(traumas)
/obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/device/healthanalyzer,
/obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper,
/obj/machinery/dna_scannernew, /obj/machinery/atmospherics/components/unary/cryo_cell, /obj/item/surgical_drapes,
- /obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw)),
+ /obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw,
+ /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)),
"authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/research_director,
@@ -122,14 +129,21 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor,
/obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland,
/obj/machinery/abductor, /obj/item/crowbar/abductor, /obj/item/screwdriver/abductor, /obj/item/weldingtool/abductor,
- /obj/item/wirecutters/abductor, /obj/item/wrench/abductor, /obj/item/stack/sheet/mineral/abductor))
+ /obj/item/wirecutters/abductor, /obj/item/wrench/abductor, /obj/item/stack/sheet/mineral/abductor)),
+
+ "birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker,
+ /obj/item/clothing/suit/chickensuit, /obj/item/clothing/head/chicken,
+ /obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/owl, /obj/item/clothing/mask/gas/owl_mask,
+ /obj/item/clothing/under/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin,
+ /obj/item/clothing/head/helmet/space/freedom, /obj/item/clothing/suit/space/freedom))
)
phobia_turfs = list("space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)),
"the supernatural" = typecacheof(list(/turf/open/floor/clockwork, /turf/closed/wall/clockwork,
/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)),
"aliens" = typecacheof(list(/turf/open/floor/plating/abductor, /turf/open/floor/plating/abductor2,
- /turf/open/floor/mineral/abductor, /turf/closed/wall/mineral/abductor))
+ /turf/open/floor/mineral/abductor, /turf/closed/wall/mineral/abductor)),
+ "falling" = typecacheof(list(/turf/open/chasm, /turf/open/floor/fakepit))
)
phobia_species = list("lizards" = typecacheof(list(/datum/species/lizard)),
diff --git a/code/datums/components/swarming.dm b/code/datums/components/swarming.dm
index ee7bee30e4..c80b8ba13b 100644
--- a/code/datums/components/swarming.dm
+++ b/code/datums/components/swarming.dm
@@ -22,7 +22,7 @@
/datum/component/swarming/proc/leave_swarm(atom/movable/AM)
GET_COMPONENT_FROM(other_swarm, /datum/component/swarming, AM)
- if(!other_swarm || !other_swarm in swarm_members)
+ if(!other_swarm || !(other_swarm in swarm_members))
return
swarm_members -= other_swarm
if(!swarm_members.len)
diff --git a/code/datums/traits/_trait.dm b/code/datums/traits/_trait.dm
index 1b51d6a190..a0090a94fa 100644
--- a/code/datums/traits/_trait.dm
+++ b/code/datums/traits/_trait.dm
@@ -56,6 +56,7 @@
/datum/trait/process()
if(QDELETED(trait_holder))
+ trait_holder = null
qdel(src)
return
if(trait_holder.stat == DEAD)
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 8d161db9d5..dcaa4f4545 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -61,7 +61,7 @@
var/list/family_name = splittext(trait_holder.real_name, " ")
heirloom.name = "\improper [family_name[family_name.len]] family [heirloom.name]"
-/datum/trait/family_heirloom/process()
+/datum/trait/family_heirloom/on_process()
if(heirloom in trait_holder.GetAllContents())
trait_holder.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing")
trait_holder.SendSignal(COMSIG_ADD_MOOD_EVENT, "family_heirloom", /datum/mood_event/family_heirloom)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 3c8a42b16c..c439f7e3e5 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -383,6 +383,9 @@
if(throwing)
return 1
+
+ if(!isturf(loc))
+ return 1
if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
return 1
diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm
index 1bb2a2b798..93590e935c 100644
--- a/code/game/turfs/simulated/chasm.dm
+++ b/code/game/turfs/simulated/chasm.dm
@@ -21,7 +21,7 @@
GET_COMPONENT(chasm_component, /datum/component/chasm)
chasm_component.drop(AM)
-/turf/open/chasm/MakeSlippery()
+/turf/open/chasm/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
return
/turf/open/chasm/MakeDry()
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index d3f8d00be7..650a66adf1 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -129,7 +129,7 @@
burnt_states = list("noslip-scorched1","noslip-scorched2")
slowdown = -0.3
-/turf/open/floor/noslip/MakeSlippery()
+/turf/open/floor/noslip/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
return
/turf/open/floor/oldshuttle
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index 34277fbdab..09335314c0 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -33,7 +33,7 @@
/turf/open/floor/plating/asteroid/burn_tile()
return
-/turf/open/floor/plating/asteroid/MakeSlippery()
+/turf/open/floor/plating/asteroid/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
return
/turf/open/floor/plating/asteroid/MakeDry()
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index a040746a9e..a70f44ac3f 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -14,7 +14,7 @@
/turf/open/lava/ex_act(severity, target)
contents_explosion(severity, target)
-/turf/open/lava/MakeSlippery()
+/turf/open/lava/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
return
/turf/open/lava/acid_act(acidpwr, acid_volume)
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 4d69af1563..ed0fa395ea 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -164,7 +164,7 @@
A.newtonian_move(A.inertia_dir)
-/turf/open/space/MakeSlippery()
+/turf/open/space/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
return
/turf/open/space/singularity_act()
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 5e8fe119cf..75263147eb 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1094,14 +1094,18 @@
else if(href_list["deletemessage"])
if(!check_rights(R_ADMIN))
return
- var/message_id = href_list["deletemessage"]
- delete_message(message_id)
+ var/safety = alert("Delete message/note?",,"Yes","No");
+ if (safety == "Yes")
+ var/message_id = href_list["deletemessage"]
+ delete_message(message_id)
else if(href_list["deletemessageempty"])
if(!check_rights(R_ADMIN))
return
- var/message_id = href_list["deletemessageempty"]
- delete_message(message_id, browse = 1)
+ var/safety = alert("Delete message/note?",,"Yes","No");
+ if (safety == "Yes")
+ var/message_id = href_list["deletemessageempty"]
+ delete_message(message_id, browse = TRUE)
else if(href_list["editmessage"])
if(!check_rights(R_ADMIN))
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index eeeee03663..dae760933e 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -348,7 +348,20 @@
return result.Join()
/datum/team/revolution/antag_listing_entry()
- var/common_part = ..()
+ var/common_part = ""
+ var/list/parts = list()
+ parts += "[antag_listing_name()]
"
+ parts += "
"
+
+ var/list/heads = get_team_antags(/datum/antagonist/rev/head,TRUE)
+
+ for(var/datum/antagonist/A in heads | get_team_antags())
+ parts += A.antag_listing_entry()
+
+ parts += "
"
+ parts += antag_listing_footer()
+ common_part = parts.Join()
+
var/heads_report = "Heads of Staff
"
heads_report += ""
for(var/datum/mind/N in SSjob.get_living_heads())
diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm
index aa80178030..e7589aa15f 100644
--- a/code/modules/detectivework/scanner.dm
+++ b/code/modules/detectivework/scanner.dm
@@ -16,6 +16,15 @@
var/list/log = list()
var/range = 8
var/view_check = TRUE
+ actions_types = list(/datum/action/item_action/displayDetectiveScanResults)
+
+/datum/action/item_action/displayDetectiveScanResults
+ name = "Display Forensic Scanner Results"
+
+/datum/action/item_action/displayDetectiveScanResults/Trigger()
+ var/obj/item/device/detective_scanner/scanner = target
+ if(istype(scanner))
+ scanner.displayDetectiveScanResults(usr)
/obj/item/device/detective_scanner/attack_self(mob/user)
if(log.len && !scanning)
@@ -36,6 +45,7 @@
P.info += jointext(log, "
")
P.info += "
Notes:
"
P.info_links = P.info
+ P.updateinfolinks()
if(ismob(loc))
var/mob/M = loc
@@ -165,3 +175,28 @@
/proc/get_timestamp()
return time2text(world.time + 432000, ":ss")
+
+/obj/item/device/detective_scanner/AltClick(mob/living/user)
+ // Best way for checking if a player can use while not incapacitated, etc
+ if(!user.canUseTopic(src, be_close=TRUE))
+ return
+ if(!LAZYLEN(log))
+ to_chat(user, "Cannot clear logs, the scanner has no logs.")
+ return
+ if(scanning)
+ to_chat(user, "Cannot clear logs, the scanner is in use.")
+ return
+ to_chat(user, "The scanner logs are cleared.")
+ log = list()
+
+/obj/item/device/detective_scanner/proc/displayDetectiveScanResults(mob/living/user)
+ // No need for can-use checks since the action button should do proper checks
+ if(!LAZYLEN(log))
+ to_chat(user, "Cannot display logs, the scanner has no logs.")
+ return
+ if(scanning)
+ to_chat(user, "Cannot display logs, the scanner is in use.")
+ return
+ to_chat(user, "Scanner Report")
+ for(var/iterLog in log)
+ to_chat(user, iterLog)
\ No newline at end of file
diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm
index d3f829011e..44a66e0d27 100644
--- a/code/modules/events/anomaly_bluespace.dm
+++ b/code/modules/events/anomaly_bluespace.dm
@@ -10,8 +10,16 @@
/datum/round_event/anomaly/anomaly_bluespace/announce(fake)
- priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
-
+ if(prob(90))
+ priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Unstable bluespace anomaly"
+ P.info = "Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name]."
+ P.update_icon()
/datum/round_event/anomaly/anomaly_bluespace/start()
var/turf/T = safepick(get_area_turfs(impact_area))
diff --git a/code/modules/events/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm
index 30ae7e47af..cc22abe5ab 100644
--- a/code/modules/events/anomaly_flux.dm
+++ b/code/modules/events/anomaly_flux.dm
@@ -11,8 +11,16 @@
announceWhen = 3
/datum/round_event/anomaly/anomaly_flux/announce(fake)
- priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
-
+ if(prob(90))
+ priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Localized hyper-energetic flux wave"
+ P.info = "Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name]."
+ P.update_icon()
/datum/round_event/anomaly/anomaly_flux/start()
var/turf/T = safepick(get_area_turfs(impact_area))
diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm
index 6c4fa46b6c..c240be50d4 100644
--- a/code/modules/events/anomaly_grav.dm
+++ b/code/modules/events/anomaly_grav.dm
@@ -9,7 +9,16 @@
announceWhen = 20
/datum/round_event/anomaly/anomaly_grav/announce(fake)
- priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ if(prob(90))
+ priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Gravitational anomaly"
+ P.info = "Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name]."
+ P.update_icon()
/datum/round_event/anomaly/anomaly_grav/start()
var/turf/T = safepick(get_area_turfs(impact_area))
diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm
index 85da9ca6d4..5a973db95a 100644
--- a/code/modules/events/anomaly_pyro.dm
+++ b/code/modules/events/anomaly_pyro.dm
@@ -9,7 +9,16 @@
announceWhen = 10
/datum/round_event/anomaly/anomaly_pyro/announce(fake)
- priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ if(prob(90))
+ priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Pyroclastic anomaly"
+ P.info = "Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name]."
+ P.update_icon()
/datum/round_event/anomaly/anomaly_pyro/start()
var/turf/T = safepick(get_area_turfs(impact_area))
diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm
index 9fb75af002..b57fe9e67e 100644
--- a/code/modules/events/anomaly_vortex.dm
+++ b/code/modules/events/anomaly_vortex.dm
@@ -11,7 +11,16 @@
announceWhen = 3
/datum/round_event/anomaly/anomaly_vortex/announce(fake)
- priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
+ if(prob(90))
+ priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Vortex anomaly"
+ P.info = "Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]."
+ P.update_icon()
/datum/round_event/anomaly/anomaly_vortex/start()
var/turf/T = safepick(get_area_turfs(impact_area))
diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm
index 54ba811e02..45968df0cf 100644
--- a/code/modules/events/blob.dm
+++ b/code/modules/events/blob.dm
@@ -14,7 +14,16 @@
fakeable = TRUE
/datum/round_event/ghost_role/blob/announce(fake)
- priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg')
+ if(prob(75))
+ priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg')
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "level 5 biohazard"
+ P.info = "Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak."
+ P.update_icon()
/datum/round_event/ghost_role/blob/spawn_role()
if(!GLOB.blobstart.len)
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index c777fea85b..e33cfbd25d 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -28,8 +28,16 @@
source = initial(example.name)
else if(originMachine)
source = originMachine.name
- priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
-
+ if(prob(50))
+ priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Rampant brand intelligence"
+ P.info = "Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source]."
+ P.update_icon()
/datum/round_event/brand_intelligence/start()
for(var/obj/machinery/vending/V in GLOB.machines)
if(!is_station_level(V.z))
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index 0806d065ee..71f19e5fd7 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -14,7 +14,16 @@
startWhen = rand(40, 60)
/datum/round_event/carp_migration/announce(fake)
- priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
+ if(prob(50))
+ priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Biological entities"
+ P.info = "Unknown biological entities have been detected near [station_name()], you may wish to break out arms."
+ P.update_icon()
/datum/round_event/carp_migration/start()
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 0ce5bdb32a..268a863ebc 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -12,8 +12,16 @@
announceWhen = 1
/datum/round_event/electrical_storm/announce(fake)
- priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
-
+ if(prob(50))
+ priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Electrical Storm"
+ P.info = "An electrical storm has been detected in your area, please repair potential electronic overloads."
+ P.update_icon()
/datum/round_event/electrical_storm/start()
var/list/epicentreList = list()
diff --git a/code/modules/events/major_dust.dm b/code/modules/events/major_dust.dm
index 7fb00124a9..d1570ea09d 100644
--- a/code/modules/events/major_dust.dm
+++ b/code/modules/events/major_dust.dm
@@ -16,4 +16,13 @@
some mild debris is expected.",
"A neighbouring station is throwing rocks at you. (Perhaps they've \
grown tired of your messages.)")
- priority_announce(pick(reason), "Collision Alert")
+ if(prob(50))
+ priority_announce(pick(reason), "Collision Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Collision Alert"
+ P.info = "[pick(reason)]"
+ P.update_icon()
\ No newline at end of file
diff --git a/code/modules/events/mice_migration.dm b/code/modules/events/mice_migration.dm
index 0b3a8d8ea9..b01ff4237e 100644
--- a/code/modules/events/mice_migration.dm
+++ b/code/modules/events/mice_migration.dm
@@ -18,10 +18,18 @@
var/movement = pick("migrated", "swarmed", "stampeded", "descended")
var/location = pick("maintenance tunnels", "maintenance areas",
"\[REDACTED\]", "place with all those juicy wires")
-
- priority_announce("Due to [cause], [plural] [name] have [movement] \
+ if(prob(50))
+ priority_announce("Due to [cause], [plural] [name] have [movement] \
into the [location].", "Migration Alert",
'sound/effects/mousesqueek.ogg')
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Rodent Migration"
+ P.info = "Due to [cause], [plural] [name] have [movement] into the [location]."
+ P.update_icon()
/datum/round_event/mice_migration/start()
SSsqueak.trigger_migration(rand(minimum_mice, maximum_mice))
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index 693e194d1c..07110b5aea 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -27,7 +27,7 @@
ship_name = pick(strings(PIRATE_NAMES_FILE, "ship_names"))
/datum/round_event/pirates/announce()
- priority_announce("Incoming subspace communication. Secure channel opened at all communication consoles.", "Incoming Message", 'sound/ai/commandreport.ogg')
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
if(!control) //Means this is false alarm, todo : explicit checks instead of using announceWhen
return
@@ -82,7 +82,8 @@
else
notify_ghosts("Space pirates are waking up!", source = spawner, action=NOTIFY_ATTACK, flashwindow = FALSE)
- priority_announce("Unidentified armed ship detected near the station.")
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') //CITADEL EDIT also metabreak here too
+
//Shuttle equipment
diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm
index 96f5a3917d..89c7997421 100644
--- a/code/modules/events/prison_break.dm
+++ b/code/modules/events/prison_break.dm
@@ -30,7 +30,16 @@
/datum/round_event/grey_tide/announce(fake)
if(areasToOpen && areasToOpen.len > 0)
- priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
+ if(prob(50))
+ priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Gr3y.T1d3 virus"
+ P.info = "Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement."
+ P.update_icon()
else
log_world("ERROR: Could not initate grey-tide. No areas in the list!")
kill()
diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm
index d5fc7fc470..768be52a63 100644
--- a/code/modules/events/shuttle_loan.dm
+++ b/code/modules/events/shuttle_loan.dm
@@ -27,19 +27,73 @@
SSshuttle.shuttle_loan = src
switch(dispatch_type)
if(HIJACK_SYNDIE)
- priority_announce("Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache.","CentCom Counter Intelligence")
+ if(prob(50))
+ priority_announce("Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache.","CentCom Counter Intelligence")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Cargo Report"
+ P.info = "Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache."
+ P.update_icon()
if(RUSKY_PARTY)
- priority_announce("Cargo: A group of angry Russians want to have a party. Can you send them your cargo shuttle then make them disappear?","CentCom Russian Outreach Program")
+ if(prob(50))
+ priority_announce("Cargo: A group of angry Russians want to have a party. Can you send them your cargo shuttle then make them disappear?","CentCom Russian Outreach Program")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Cargo Report"
+ P.info = "Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache."
+ P.update_icon()
if(SPIDER_GIFT)
- priority_announce("Cargo: The Spider Clan has sent us a mysterious gift. Can we ship it to you to see what's inside?","CentCom Diplomatic Corps")
+ if(prob(50))
+ priority_announce("Cargo: The Spider Clan has sent us a mysterious gift. Can we ship it to you to see what's inside?","CentCom Diplomatic Corps")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Cargo Report"
+ P.info = "Cargo: The Spider Clan has sent us a mysterious gift. Can we ship it to you to see what's inside?"
+ P.update_icon()
if(DEPARTMENT_RESUPPLY)
- priority_announce("Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?","CentCom Supply Department")
+ if(prob(50))
+ priority_announce("Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?","CentCom Supply Department")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Cargo Report"
+ P.info = "Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?"
+ P.update_icon()
thanks_msg = "The cargo shuttle should return in 5 minutes."
bonus_points = 0
if(ANTIDOTE_NEEDED)
- priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "CentCom Research Initiatives")
+ if(prob(50))
+ priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "CentCom Research Initiatives")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Cargo Report"
+ P.info = "Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples."
+ P.update_icon()
if (PIZZA_DELIVERY)
- priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead", "CentCom Spacepizza Division")
+ if(prob(50))
+ priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead.", "CentCom Spacepizza Division")
+ else
+ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
+ for(var/obj/machinery/computer/communications/C in GLOB.machines)
+ if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
+ var/obj/item/paper/P = new(C.loc)
+ P.name = "Cargo Report"
+ P.info = "Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead."
+ P.update_icon()
/datum/round_event/shuttle_loan/proc/loan_shuttle()
priority_announce(thanks_msg, "Cargo shuttle commandeered by CentCom.")
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index 988c564245..4f740f4e61 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -153,7 +153,7 @@
begin_month = APRIL
/datum/holiday/april_fools/celebrate()
- SSjob.overflow_role = "Clown"
+ SSjob.set_overflow_role("Clown")
SSticker.login_music = 'sound/ambience/clown.ogg'
for(var/mob/dead/new_player/P in GLOB.mob_list)
if(P.client)
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index a18fe78906..7601d2f245 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -6,8 +6,8 @@ Assistant
flag = ASSISTANT
department_flag = CIVILIAN
faction = "Station"
- total_positions = -1
- spawn_positions = -1
+ total_positions = 5
+ spawn_positions = 5
supervisors = "absolutely everyone"
selection_color = "#dddddd"
access = list() //See /datum/job/assistant/get_access()
@@ -23,15 +23,6 @@ Assistant
else
return ..()
-/datum/job/assistant/config_check()
- var/ac = CONFIG_GET(number/assistant_cap)
- if(ac != 0)
- total_positions = ac
- spawn_positions = ac
- return 1
- return 0
-
-
/datum/outfit/job/assistant
name = "Assistant"
jobtype = /datum/job/assistant
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index e27c0c69dd..73b9a01780 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -868,12 +868,17 @@
.["Toggle Purrbation"] = "?_src_=vars;[HrefToken()];purrbation=[REF(src)]"
/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user)
- if((target != pulling) || (grab_state < GRAB_AGGRESSIVE) || (user != target) || !isliving(user) || stat || user.stat)//Get consent first :^)
- . = ..()
- return
- buckle_mob(target, TRUE, TRUE)
+ //If they dragged themselves and we're currently aggressively grabbing them try to piggyback
+ if(user == target && can_piggyback(target) && pulling == target && grab_state >= GRAB_AGGRESSIVE && stat == CONSCIOUS)
+ buckle_mob(target,TRUE,TRUE)
. = ..()
+//Can C try to piggyback at all.
+/mob/living/carbon/human/proc/can_piggyback(mob/living/carbon/C)
+ if(istype(C) && C.stat == CONSCIOUS)
+ return TRUE
+ return FALSE
+
/mob/living/carbon/human/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE)
if(!force)//humans are only meant to be ridden through piggybacking and special cases
return
@@ -882,24 +887,28 @@
return
var/datum/component/riding/human/riding_datum = LoadComponent(/datum/component/riding/human)
riding_datum.ride_check_rider_incapacitated = TRUE
- riding_datum.ride_check_ridden_incapacitated = TRUE
riding_datum.ride_check_rider_restrained = TRUE
riding_datum.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4)))
if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled || (M.stat != CONSCIOUS))
return
- visible_message("[M] starts to climb onto [src]...")
- if(do_after(M, 15, target = src))
- if(iscarbon(M))
- if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
- M.visible_message("[M] can't hang onto [src]!")
- return
- if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!!
- M.visible_message("[M] can't climb onto [src]!")
- return
- . = ..(M, force, check_loc)
- stop_pulling()
+ if(can_piggyback(M))
+ riding_datum.ride_check_ridden_incapacitated = TRUE
+ visible_message("[M] starts to climb onto [src]...")
+ if(do_after(M, 15, target = src))
+ if(can_piggyback(M))
+ if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
+ M.visible_message("[M] can't hang onto [src]!")
+ return
+ if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!!
+ M.visible_message("[M] can't climb onto [src]!")
+ return
+ . = ..(M, force, check_loc)
+ stop_pulling()
+ else
+ visible_message("[M] fails to climb onto [src]!")
else
- visible_message("[M] fails to climb onto [src]!")
+ . = ..(M,force,check_loc)
+ stop_pulling()
/mob/living/carbon/human/do_after_coefficent()
. = ..()
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 6aed2f241b..405c509d0a 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -137,6 +137,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
var/datum/looping_sound/supermatter/soundloop
+ var/moveable = TRUE
+
/obj/machinery/power/supermatter_shard/Initialize()
. = ..()
uid = gl_uid++
@@ -552,6 +554,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
radiation_pulse(src, 150, 4)
+/obj/machinery/power/supermatter_shard/wrench_act(mob/user, obj/item/tool)
+ if (moveable)
+ default_unfasten_wrench(user, tool, time = 20)
+ return TRUE
/obj/machinery/power/supermatter_shard/CollidedWith(atom/movable/AM)
if(isliving(AM))
@@ -613,6 +619,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
anchored = TRUE
gasefficency = 0.15
explosion_power = 35
+ moveable = FALSE
/obj/machinery/power/supermatter_shard/crystal/engine
is_main_engine = TRUE
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 821fa0510c..42343f8af8 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1397,7 +1397,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#cc0000"
boozepwr = 35
taste_description = "an invigorating bitter freshness which suffuses your being; no enemy of the station will go unrobusted this day"
- glass_icon_state = "glass_red"
+ glass_icon_state = "quadruple_sec"
glass_name = "Quadruple Sec"
glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though."
@@ -1415,7 +1415,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#ff3300"
boozepwr = 80
taste_description = "THE LAW"
- glass_icon_state = "glass_red"
+ glass_icon_state = "quintuple_sec"
glass_name = "Quintuple Sec"
glass_desc = "Now you are become law, destroyer of clowns."
@@ -1436,7 +1436,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "00ff00"
boozepwr = 25
taste_description = "chocolate and mint dancing around your mouth"
- glass_icon_state = "glass_green"
+ glass_icon_state = "grasshopper"
glass_name = "Grasshopper"
glass_desc = "You weren't aware edible beverages could be that green."
@@ -1447,7 +1447,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "ccff99"
boozepwr = 25
taste_description = "a slap on the face in the best possible way"
- glass_icon_state = "glass_white"
+ glass_icon_state = "stinger"
glass_name = "Stinger"
glass_desc = "You wonder what would happen if you pointed this at a heat source..."
diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm
index 1d9b0f769b..df41f1f9e6 100644
--- a/code/modules/shuttle/docking.dm
+++ b/code/modules/shuttle/docking.dm
@@ -46,7 +46,12 @@
// The underlying old area is the area assumed to be under the shuttle's starting location
// If it no longer/has never existed it will be created
- var/area/underlying_old_area = locate(underlying_area_type) in GLOB.sortedAreas
+ var/area/underlying_old_area
+ for(var/i in GLOB.sortedAreas) // Locate grabs subtypes and we want a particular type
+ var/area/place = i
+ if(place.type == underlying_area_type)
+ underlying_old_area = place
+ break
if(!underlying_old_area)
underlying_old_area = new underlying_area_type(null)
diff --git a/config/game_options.txt b/config/game_options.txt
index 8896e6e3e7..b3d6f82a21 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -431,8 +431,11 @@ ROUNDSTART_RACES slimeperson
## Uncomment to give players the choice of joining as a human with mutant bodyparts before they join the game
#JOIN_WITH_MUTANT_HUMANS
-## Assistant slot cap. Set to -1 for unlimited.
-ASSISTANT_CAP -1
+##Overflow job. Default is assistant
+OVERFLOW_JOB Assistant
+
+## Overflow slot cap. Set to -1 for unlimited. If limited, it will still open up if every other job is full.
+OVERFLOW_CAP -1
## Starlight for exterior walls and breaches. Uncomment for starlight!
## This is disabled by default to make testing quicker, should be enabled on production servers or testing servers messing with lighting
diff --git a/modular_citadel/code/modules/arousal/toys/dildos.dm b/modular_citadel/code/modules/arousal/toys/dildos.dm
index 45f4f5a64a..587702762c 100644
--- a/modular_citadel/code/modules/arousal/toys/dildos.dm
+++ b/modular_citadel/code/modules/arousal/toys/dildos.dm
@@ -5,8 +5,9 @@ obj/item/dildo
name = "dildo"
desc = "Floppy!"
icon = 'modular_citadel/icons/obj/genitals/dildo.dmi'
- damtype = BRUTE
- force = 0
+ damtype = AROUSAL
+ force = 5
+ hitsound = 'sound/weapons/tap.ogg'
throwforce = 0
icon_state = "dildo_knotted_2"
alpha = 192//transparent
@@ -129,4 +130,4 @@ obj/item/dildo/custom
can_customize = TRUE
random_color = TRUE
random_shape = TRUE
- random_size = TRUE
\ No newline at end of file
+ random_size = TRUE
diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm
index c2dee71a4f..741e6f0935 100644
--- a/modular_citadel/code/modules/client/preferences.dm
+++ b/modular_citadel/code/modules/client/preferences.dm
@@ -253,8 +253,8 @@
if("input")
switch(href_list["preference"])
if("flavor_text")
- var/msg = stripped_multiline_input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) as message
- if(msg != null)
+ var/msg = stripped_multiline_input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) as null|message
+ if(!isnull(msg))
msg = copytext(msg, 1, MAX_MESSAGE_LEN*2)
features["flavor_text"] = msg
diff --git a/strings/phobia.json b/strings/phobia.json
index 10fdbd9a0c..379dd1829a 100644
--- a/strings/phobia.json
+++ b/strings/phobia.json
@@ -219,5 +219,43 @@
"as (unknown)",
"unknown",
"stranger danger"
+ ],
+
+"birds": [
+ "birdemic",
+ "bird",
+ "beak",
+ "poly",
+ "wing",
+ "claw",
+ "peck",
+ "cracker",
+ "kiki yaya",
+ "ki ki ya ya",
+ "vox",
+ "flap",
+ "feather",
+ "avian",
+ "aviary",
+ "owl",
+ "griffin",
+ "kakaw",
+ "ka kaw",
+ "eagle",
+ "chick",
+ "fowl"
+ ],
+
+"falling": [
+ "hold on",
+ "hang in there",
+ "chasm",
+ "pit",
+ "hole",
+ "fall",
+ "fell",
+ "let go",
+ "i'll catch you",
+ "slip"
]
}