From 5fa23b7e714d01914c8cf7f739ff8b69647e757b Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sat, 14 Oct 2023 20:53:57 -0400
Subject: [PATCH 01/85] need run_event from upstream
---
code/__DEFINES/~monkestation/storytellers.dm | 95 ++
code/controllers/subsystem/statpanel.dm | 1 +
code/controllers/subsystem/ticker.dm | 6 +-
code/modules/admin/topic.dm | 1 +
code/modules/events/_event.dm | 73 ++
code/modules/events/aurora_caelus.dm | 2 +
code/modules/events/brain_trauma.dm | 2 +
code/modules/events/brand_intelligence.dm | 2 +
code/modules/events/bureaucratic_error.dm | 2 +
code/modules/events/camerafailure.dm | 2 +
code/modules/events/carp_migration.dm | 2 +
.../modules/events/communications_blackout.dm | 2 +
code/modules/events/creep_awakening.dm | 2 +
code/modules/events/disease_outbreak.dm | 2 +
code/modules/events/dust.dm | 2 +
code/modules/events/electrical_storm.dm | 2 +
code/modules/events/fake_virus.dm | 2 +
code/modules/events/false_alarm.dm | 2 +
code/modules/events/ghost_role/abductor.dm | 2 +
.../events/ghost_role/alien_infestation.dm | 2 +
code/modules/events/ghost_role/blob.dm | 2 +
.../events/ghost_role/changeling_event.dm | 2 +
.../events/ghost_role/fugitive_event.dm | 2 +
code/modules/events/ghost_role/morph_event.dm | 2 +
code/modules/events/ghost_role/nightmare.dm | 2 +
code/modules/events/ghost_role/operative.dm | 2 +
.../events/ghost_role/revenant_event.dm | 3 +-
code/modules/events/ghost_role/sentience.dm | 2 +
.../events/ghost_role/sentient_disease.dm | 2 +
.../events/ghost_role/slaughter_event.dm | 2 +
.../modules/events/ghost_role/space_dragon.dm | 2 +
code/modules/events/ghost_role/space_ninja.dm | 2 +
.../events/gravity_generator_blackout.dm | 2 +
code/modules/events/grey_tide.dm | 2 +
code/modules/events/grid_check.dm | 2 +
code/modules/events/heart_attack.dm | 2 +
.../immovable_rod/immovable_rod_event.dm | 2 +
code/modules/events/ion_storm.dm | 2 +
code/modules/events/mass_hallucination.dm | 2 +
.../events/meteors/meteor_wave_events.dm | 2 +
.../events/meteors/stray_meteor_event.dm | 2 +
code/modules/events/mice_migration.dm | 2 +
code/modules/events/portal_storm.dm | 2 +
code/modules/events/processor_overload.dm | 2 +
code/modules/events/radiation_leak.dm | 2 +
code/modules/events/radiation_storm.dm | 4 +-
code/modules/events/sandstorm.dm | 2 +
code/modules/events/scrubber_clog.dm | 2 +
code/modules/events/scrubber_overflow.dm | 2 +
code/modules/events/shuttle_catastrophe.dm | 2 +
code/modules/events/shuttle_insurance.dm | 2 +
code/modules/events/space_vines/vine_event.dm | 6 +-
code/modules/events/spider_infestation.dm | 2 +
code/modules/events/stray_cargo.dm | 2 +
code/modules/events/tram_malfunction.dm | 2 +
code/modules/events/wisdomcow.dm | 6 +-
code/modules/events/wormholes.dm | 2 +
config/events.json | 13 +
config/game_options.txt | 47 +
.../new_antagonists/slasher/ghost_role.dm | 2 +-
.../code/modules/storytellers/config.dm | 149 +++
.../storytellers/gamemode_subsystem.dm | 1070 +++++++++++++++++
.../code/modules/storytellers/readme.md | 44 +
.../modules/storytellers/scheduled_events.dm | 94 ++
.../storytellers/storytellers/_storyteller.dm | 145 +++
.../storytellers/storytellers/ghost.dm | 6 +
.../storytellers/storytellers/jester.dm | 13 +
.../storytellers/storytellers/sleeper.dm | 13 +
.../modules/storytellers/storytellers/vote.dm | 4 +
.../storytellers/storytellers/warrior.dm | 12 +
tgstation.dme | 9 +
71 files changed, 1904 insertions(+), 8 deletions(-)
create mode 100644 code/__DEFINES/~monkestation/storytellers.dm
create mode 100644 config/events.json
create mode 100644 monkestation/code/modules/storytellers/config.dm
create mode 100644 monkestation/code/modules/storytellers/gamemode_subsystem.dm
create mode 100644 monkestation/code/modules/storytellers/readme.md
create mode 100644 monkestation/code/modules/storytellers/scheduled_events.dm
create mode 100644 monkestation/code/modules/storytellers/storytellers/_storyteller.dm
create mode 100644 monkestation/code/modules/storytellers/storytellers/ghost.dm
create mode 100644 monkestation/code/modules/storytellers/storytellers/jester.dm
create mode 100644 monkestation/code/modules/storytellers/storytellers/sleeper.dm
create mode 100644 monkestation/code/modules/storytellers/storytellers/vote.dm
create mode 100644 monkestation/code/modules/storytellers/storytellers/warrior.dm
diff --git a/code/__DEFINES/~monkestation/storytellers.dm b/code/__DEFINES/~monkestation/storytellers.dm
new file mode 100644
index 000000000000..f4248d740d3e
--- /dev/null
+++ b/code/__DEFINES/~monkestation/storytellers.dm
@@ -0,0 +1,95 @@
+
+//Could be bitflags, but that would require a good amount of translations, which eh, either way works for me
+/// When the event is combat oriented (spawning monsters, inherently hostile antags)
+#define TAG_COMBAT "combat"
+/// When the event is spooky (broken lights, some antags)
+#define TAG_SPOOKY "spooky"
+/// When the event is destructive in a decent capacity (meteors, blob)
+#define TAG_DESTRUCTIVE "destructive"
+/// When the event impacts most of the crewmembers in some capacity (comms blackout)
+#define TAG_COMMUNAL "communal"
+/// When the event targets a person for something (appendix, heart attack)
+#define TAG_TARGETED "targeted"
+/// When the event is positive and helps the crew, in some capacity (Shuttle Loan, Supply Pod)
+#define TAG_POSITIVE "positive"
+/// When one of the crewmembers becomes an antagonist
+#define TAG_CREW_ANTAG "crew_antag"
+/// When the antagonist event is focused around team cooperation.
+#define TAG_TEAM_ANTAG "team_antag"
+/// When one of the non-crewmember players becomes an antagonist
+#define TAG_OUTSIDER_ANTAG "away_antag"
+/// When the event impacts the overmap
+#define TAG_OVERMAP "overmap"
+/// When the event requires the station to be in space (meteors, carp)
+#define TAG_SPACE "space"
+/// When the event requires the station to be on planetary.
+#define TAG_PLANETARY "planetary"
+
+#define EVENT_TRACK_MUNDANE "Mundane"
+#define EVENT_TRACK_MODERATE "Moderate"
+#define EVENT_TRACK_MAJOR "Major"
+#define EVENT_TRACK_ROLESET "Roleset"
+#define EVENT_TRACK_OBJECTIVES "Objectives"
+
+#define ALL_EVENTS "All"
+#define UNCATEGORIZED_EVENTS "Uncategorized"
+
+#define STORYTELLER_WAIT_TIME 5 SECONDS
+
+#define EVENT_POINT_GAINED_PER_SECOND 0.05
+
+#define TRACK_FAIL_POINT_PENALTY_MULTIPLIER 0.5
+
+#define GAMEMODE_PANEL_MAIN "Main"
+#define GAMEMODE_PANEL_VARIABLES "Variables"
+
+#define MUNDANE_POINT_THRESHOLD 40
+#define MODERATE_POINT_THRESHOLD 70
+#define MAJOR_POINT_THRESHOLD 130
+#define ROLESET_POINT_THRESHOLD 150
+#define OBJECTIVES_POINT_THRESHOLD 170
+
+#define MUNDANE_MIN_POP 4
+#define MODERATE_MIN_POP 6
+#define MAJOR_MIN_POP 20
+#define ROLESET_MIN_POP 25
+#define OBJECTIVES_MIN_POP 20
+
+/// Defines for how much pop do we need to stop applying a pop scalling penalty to event frequency.
+#define MUNDANE_POP_SCALE_THRESHOLD 25
+#define MODERATE_POP_SCALE_THRESHOLD 32
+#define MAJOR_POP_SCALE_THRESHOLD 45
+#define ROLESET_POP_SCALE_THRESHOLD 45
+#define OBJECTIVES_POP_SCALE_THRESHOLD 45
+
+/// The maximum penalty coming from pop scalling, when we're at the most minimum point, easing into 0 as we reach the SCALE_THRESHOLD. This is treated as a percentage.
+#define MUNDANE_POP_SCALE_PENALTY 35
+#define MODERATE_POP_SCALE_PENALTY 35
+#define MAJOR_POP_SCALE_PENALTY 35
+#define ROLESET_POP_SCALE_PENALTY 35
+#define OBJECTIVES_POP_SCALE_PENALTY 35
+
+#define STORYTELLER_VOTE "storyteller"
+
+#define EVENT_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_ROLESET, EVENT_TRACK_OBJECTIVES)
+#define EVENT_PANEL_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_ROLESET, EVENT_TRACK_OBJECTIVES, UNCATEGORIZED_EVENTS, ALL_EVENTS)
+
+/// Defines for the antag cap to prevent midround injections.
+#define ANTAG_CAP_FLAT 2
+#define ANTAG_CAP_DENOMINATOR 9
+
+///Below are defines for roundstart point pool. The GAIN ones are multiplied by ready population
+#define ROUNDSTART_MUNDANE_BASE 20
+#define ROUNDSTART_MUNDANE_GAIN 0.5
+
+#define ROUNDSTART_MODERATE_BASE 35
+#define ROUNDSTART_MODERATE_GAIN 1.2
+
+#define ROUNDSTART_MAJOR_BASE 40
+#define ROUNDSTART_MAJOR_GAIN 2
+
+#define ROUNDSTART_ROLESET_BASE 60
+#define ROUNDSTART_ROLESET_GAIN 4
+
+#define ROUNDSTART_OBJECTIVES_BASE 40
+#define ROUNDSTART_OBJECTIVES_GAIN 2
diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index 13df2be77ba9..517c26798a60 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -26,6 +26,7 @@ SUBSYSTEM_DEF(statpanels)
global_data = list(
"Map: [SSmapping.config?.map_name || "Loading..."]",
cached ? "Next Map: [cached.map_name]" : null,
+ "Storyteller: [SSgamemode.storyteller ? SSgamemode.storyteller.name : "N/A"]", //monkestation addition
"Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]",
"Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]",
"Round Time: [ROUND_TIME()]",
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index aed9754a2a46..0bd73935655e 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -225,10 +225,14 @@ SUBSYSTEM_DEF(ticker)
var/init_start = world.timeofday
mode = new /datum/game_mode/dynamic
-
+ SSgamemode.init_storyteller() //monkestation addition
CHECK_TICK
//Configure mode and assign player to special mode stuff
var/can_continue = 0
+ //monkestation addition start
+ can_continue = SSgamemode.pre_setup()
+ CHECK_TICK
+ //monkestation addition end
can_continue = src.mode.pre_setup() //Choose antagonists
CHECK_TICK
can_continue = can_continue && SSjob.DivideOccupations() //Distribute jobs
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index cc21cc3ebe45..b3600978a9a6 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -70,6 +70,7 @@
if(!check_rights(R_ADMIN))
return
SSticker.mode.admin_panel()
+ SSgamemode.admin_panel(usr) //monkestation addition
else if(href_list["call_shuttle"])
if(!check_rights(R_ADMIN))
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index a5a7b699bea4..ca86be587ba7 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -42,6 +42,21 @@
/// Flags dictating whether this event should be run on certain kinds of map
var/map_flags = NONE
+ //monkestation vars starts
+ var/roundstart = FALSE // BUBBER EDIT
+ var/cost = 1 // BUBBER EDIT
+ var/reoccurence_penalty_multiplier = 0.75
+ var/shared_occurence_type
+ var/track = EVENT_TRACK_MODERATE
+ /// Last calculated weight that the storyteller assigned this event
+ var/calculated_weight = 0
+ var/tags = list() /// Tags of the event
+ /// List of the shared occurence types.
+ var/static/list/shared_occurences = list()
+ /// Whether a roundstart event can happen post roundstart. Very important for events which override job assignments.
+ var/can_run_post_roundstart = TRUE
+ //monkestation vars end
+
/datum/round_event_control/New()
if(config && !wizardevent) // Magic is unaffected by configs
earliest_start = CEILING(earliest_start * CONFIG_GET(number/events_min_time_mul), 1)
@@ -203,8 +218,12 @@ Runs the event
var/fakeable = TRUE
/// Whether a admin wants this event to be cancelled
var/cancel_event = FALSE
+ //monkestation vars starts
///canceled on oshan
var/oshan_blocked = FALSE
+ /// Whether the event called its start() yet or not.
+ var/has_started = FALSE
+ //monkestation vars end
//Called first before processing.
//Allows you to setup your event, such as randomly
@@ -228,6 +247,60 @@ Runs the event
SHOULD_CALL_PARENT(FALSE)
return
+//monkestation addition starts - STORYTELLERS
+/// This section of event processing is in a proc because roundstart events may get their start invoked.
+/datum/round_event/proc/try_start()
+ if(has_started)
+ return
+ has_started = TRUE
+ processing = FALSE
+ start()
+ processing = TRUE
+
+/datum/round_event_control/roundstart
+ roundstart = TRUE
+ earliest_start = 0
+
+///Adds an occurence. Has to use the setter to properly handle shared occurences
+/datum/round_event_control/proc/add_occurence()
+ if(shared_occurence_type)
+ if(!shared_occurences[shared_occurence_type])
+ shared_occurences[shared_occurence_type] = 0
+ shared_occurences[shared_occurence_type]++
+ occurrences++
+
+///Subtracts an occurence. Has to use the setter to properly handle shared occurences
+/datum/round_event_control/proc/subtract_occurence()
+ if(shared_occurence_type)
+ if(!shared_occurences[shared_occurence_type])
+ shared_occurences[shared_occurence_type] = 0
+ shared_occurences[shared_occurence_type]--
+ occurrences--
+
+///Gets occurences. Has to use the getter to properly handle shared occurences
+/datum/round_event_control/proc/get_occurences()
+ if(shared_occurence_type)
+ if(!shared_occurences[shared_occurence_type])
+ shared_occurences[shared_occurence_type] = 0
+ return shared_occurences[shared_occurence_type]
+ return occurrences
+
+/// Prints the action buttons for this event.
+/datum/round_event_control/proc/get_href_actions()
+ if(SSticker.HasRoundStarted())
+ if(roundstart)
+ if(!can_run_post_roundstart)
+ return "Fire Schedule "
+ return "Fire Schedule "
+ else
+ return "Fire Schedule Force Next "
+ else
+ if(roundstart)
+ return "Add Roundstart Force Roundstart "
+ else
+ return "Fire Schedule Force Next "
+//monkestation addition ends - STORYTELLERS
+
//Called after something followable has been spawned by an event
//Provides ghosts a follow link to an atom if possible
//Only called once.
diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm
index 8ce6fcdd89a3..c4094d0a9909 100644
--- a/code/modules/events/aurora_caelus.dm
+++ b/code/modules/events/aurora_caelus.dm
@@ -6,6 +6,8 @@
earliest_start = 5 MINUTES
category = EVENT_CATEGORY_FRIENDLY
description = "A colourful display can be seen through select windows. And the kitchen."
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL, TAG_POSITIVE, TAG_SPACE)
/datum/round_event_control/aurora_caelus/can_spawn_event(players, allow_magic = FALSE)
if(!SSmapping.empty_space)
diff --git a/code/modules/events/brain_trauma.dm b/code/modules/events/brain_trauma.dm
index 77d17ce5ecbb..40df052b1ecd 100644
--- a/code/modules/events/brain_trauma.dm
+++ b/code/modules/events/brain_trauma.dm
@@ -6,6 +6,8 @@
description = "A crewmember gains a random trauma."
min_wizard_trigger_potency = 2
max_wizard_trigger_potency = 6
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_TARGETED)
/datum/round_event/brain_trauma
fakeable = FALSE
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index 813be9b3d8ba..1a829cdaf37e 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -9,6 +9,8 @@
min_wizard_trigger_potency = 2
max_wizard_trigger_potency = 6
admin_setup = list(/datum/event_admin_setup/listed_options/brand_intelligence)
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_DESTRUCTIVE, TAG_COMMUNAL)
/datum/round_event/brand_intelligence
announce_when = 21
diff --git a/code/modules/events/bureaucratic_error.dm b/code/modules/events/bureaucratic_error.dm
index 5f206134a921..89e2e0bd7ad6 100644
--- a/code/modules/events/bureaucratic_error.dm
+++ b/code/modules/events/bureaucratic_error.dm
@@ -5,6 +5,8 @@
weight = 5
category = EVENT_CATEGORY_BUREAUCRATIC
description = "Randomly opens and closes job slots, along with changing the overflow role."
+ track = EVENT_TRACK_MAJOR // if you've ever dealt with 10 mimes you understand why.
+ tags = list(TAG_COMMUNAL)
/datum/round_event/bureaucratic_error
announce_when = 1
diff --git a/code/modules/events/camerafailure.dm b/code/modules/events/camerafailure.dm
index 453b919c5b88..7459a575dc05 100644
--- a/code/modules/events/camerafailure.dm
+++ b/code/modules/events/camerafailure.dm
@@ -6,6 +6,8 @@
alert_observers = FALSE
category = EVENT_CATEGORY_ENGINEERING
description = "Turns off a random amount of cameras."
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL, TAG_SPOOKY)
/datum/round_event/camera_failure
fakeable = FALSE
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index e62d26598c23..22b64c9bdf21 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -10,6 +10,8 @@
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 3
admin_setup = list(/datum/event_admin_setup/carp_migration)
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event_control/carp_migration/New()
. = ..()
diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm
index 0747998e6744..f0e7c4694aa0 100644
--- a/code/modules/events/communications_blackout.dm
+++ b/code/modules/events/communications_blackout.dm
@@ -6,6 +6,8 @@
description = "Heavily emps all telecommunication machines, blocking all communication for a while."
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 3
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL, TAG_SPOOKY)
/datum/round_event/communications_blackout
announce_when = 1
diff --git a/code/modules/events/creep_awakening.dm b/code/modules/events/creep_awakening.dm
index 648c2cc9db04..a519ee9430bd 100644
--- a/code/modules/events/creep_awakening.dm
+++ b/code/modules/events/creep_awakening.dm
@@ -5,6 +5,8 @@
min_players = 20
category = EVENT_CATEGORY_HEALTH
description = "A random crewmember becomes obsessed with another."
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_CREW_ANTAG, TAG_TARGETED)
/datum/round_event/obsessed
fakeable = FALSE
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index f57ed1774d4c..fdaeb012c2fc 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -32,6 +32,8 @@
admin_setup = list(/datum/event_admin_setup/minimum_candidate_requirement/disease_outbreak, /datum/event_admin_setup/listed_options/disease_outbreak)
///Disease recipient candidates
var/list/disease_candidates = list()
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_TARGETED)
/datum/round_event_control/disease_outbreak/can_spawn_event(players_amt, allow_magic = FALSE)
. = ..()
diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm
index c12b86d5803c..0ebe81a5ef5d 100644
--- a/code/modules/events/dust.dm
+++ b/code/modules/events/dust.dm
@@ -8,6 +8,8 @@
category = EVENT_CATEGORY_SPACE
description = "A single space dust is hurled at the station."
map_flags = EVENT_SPACE_ONLY
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_DESTRUCTIVE, TAG_SPACE)
/datum/round_event/space_dust
start_when = 1
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 1309887d4b73..8ec4e485bcbc 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -8,6 +8,8 @@
description = "Destroys all lights in a large area."
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 4
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_SPOOKY)
/datum/round_event/electrical_storm
var/lightsoutAmount = 1
diff --git a/code/modules/events/fake_virus.dm b/code/modules/events/fake_virus.dm
index fb6bfd5be975..36ce68dd61cf 100644
--- a/code/modules/events/fake_virus.dm
+++ b/code/modules/events/fake_virus.dm
@@ -4,6 +4,8 @@
weight = 20
category = EVENT_CATEGORY_HEALTH
description = "Some crewmembers suffer from temporary hypochondria."
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_TARGETED)
/datum/round_event/fake_virus/start()
var/list/fake_virus_victims = list()
diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm
index 6e5cfdc61a1f..303425f7a8c0 100644
--- a/code/modules/events/false_alarm.dm
+++ b/code/modules/events/false_alarm.dm
@@ -6,6 +6,8 @@
category = EVENT_CATEGORY_BUREAUCRATIC
description = "Fakes an event announcement."
admin_setup = list(/datum/event_admin_setup/listed_options/false_alarm)
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL)
/datum/round_event_control/falsealarm/can_spawn_event(players_amt, allow_magic = FALSE)
. = ..()
diff --git a/code/modules/events/ghost_role/abductor.dm b/code/modules/events/ghost_role/abductor.dm
index f6928222cfdc..654a8eeb1f46 100644
--- a/code/modules/events/ghost_role/abductor.dm
+++ b/code/modules/events/ghost_role/abductor.dm
@@ -7,6 +7,8 @@
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_INVASION
description = "One or more abductor teams spawns, and they plan to experiment on the crew."
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_TARGETED, TAG_SPOOKY)
/datum/round_event/ghost_role/abductor
minimum_required = 2
diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm
index 72ef044229b4..0d0036ac910d 100644
--- a/code/modules/events/ghost_role/alien_infestation.dm
+++ b/code/modules/events/ghost_role/alien_infestation.dm
@@ -9,6 +9,8 @@
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
description = "A xenomorph larva spawns on a random vent."
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMBAT)
/datum/round_event_control/alien_infestation/can_spawn_event(players_amt, allow_magic = FALSE)
. = ..()
diff --git a/code/modules/events/ghost_role/blob.dm b/code/modules/events/ghost_role/blob.dm
index a07d9d1be594..560612a782b3 100644
--- a/code/modules/events/ghost_role/blob.dm
+++ b/code/modules/events/ghost_role/blob.dm
@@ -10,6 +10,8 @@
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
description = "Spawns a new blob overmind."
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_DESTRUCTIVE, TAG_COMBAT)
/datum/round_event_control/blob/can_spawn_event(players, allow_magic = FALSE)
if(EMERGENCY_PAST_POINT_OF_NO_RETURN) // no blobs if the shuttle is past the point of no return
diff --git a/code/modules/events/ghost_role/changeling_event.dm b/code/modules/events/ghost_role/changeling_event.dm
index 570a6166093d..7248c4147829 100644
--- a/code/modules/events/ghost_role/changeling_event.dm
+++ b/code/modules/events/ghost_role/changeling_event.dm
@@ -14,6 +14,8 @@
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
description = "A meteor containing a changeling is summoned and thrown at the exterior of the station."
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMBAT)
/datum/round_event/ghost_role/changeling
minimum_required = 1
diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm
index 24aa4798c79c..ac5257c3d75e 100644
--- a/code/modules/events/ghost_role/fugitive_event.dm
+++ b/code/modules/events/ghost_role/fugitive_event.dm
@@ -9,6 +9,8 @@
category = EVENT_CATEGORY_INVASION
description = "Fugitives will hide on the station, followed by hunters."
map_flags = EVENT_SPACE_ONLY
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMBAT)
/datum/round_event/ghost_role/fugitives
minimum_required = 1
diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm
index e0b75119c282..b04b0e3349bc 100644
--- a/code/modules/events/ghost_role/morph_event.dm
+++ b/code/modules/events/ghost_role/morph_event.dm
@@ -7,6 +7,8 @@
description = "Spawns a hungry shapeshifting blobby creature."
min_wizard_trigger_potency = 4
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_ROLESET
+ tags = list(TAG_COMBAT, TAG_SPOOKY)
/datum/round_event/ghost_role/morph
minimum_required = 1
diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm
index 57b942988cdb..0e5f6c786e89 100644
--- a/code/modules/events/ghost_role/nightmare.dm
+++ b/code/modules/events/ghost_role/nightmare.dm
@@ -8,6 +8,8 @@
description = "Spawns a nightmare, aiming to darken the station."
min_wizard_trigger_potency = 6
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_ROLESET
+ tags = list(TAG_COMBAT, TAG_SPOOKY)
/datum/round_event/ghost_role/nightmare
minimum_required = 1
diff --git a/code/modules/events/ghost_role/operative.dm b/code/modules/events/ghost_role/operative.dm
index 33cd9e059f09..a7d076b68b7e 100644
--- a/code/modules/events/ghost_role/operative.dm
+++ b/code/modules/events/ghost_role/operative.dm
@@ -5,6 +5,8 @@
max_occurrences = 1
category = EVENT_CATEGORY_INVASION
description = "A single nuclear operative assaults the station."
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_DESTRUCTIVE, TAG_COMBAT)
/datum/round_event/ghost_role/operative
minimum_required = 1
diff --git a/code/modules/events/ghost_role/revenant_event.dm b/code/modules/events/ghost_role/revenant_event.dm
index 27f3597a7ad2..607a57dfca42 100644
--- a/code/modules/events/ghost_role/revenant_event.dm
+++ b/code/modules/events/ghost_role/revenant_event.dm
@@ -11,7 +11,8 @@
description = "Spawns an angry, soul sucking ghost."
min_wizard_trigger_potency = 4
max_wizard_trigger_potency = 7
-
+ track = EVENT_TRACK_ROLESET
+ tags = list(TAG_DESTRUCTIVE, TAG_SPOOKY)
/datum/round_event/ghost_role/revenant
var/ignore_mobcheck = FALSE
diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm
index 646fcbe2e9c7..cc38f7202447 100644
--- a/code/modules/events/ghost_role/sentience.dm
+++ b/code/modules/events/ghost_role/sentience.dm
@@ -22,6 +22,8 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list(
description = "An animal or robot becomes sentient!"
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL, TAG_SPOOKY)
/datum/round_event/ghost_role/sentience
diff --git a/code/modules/events/ghost_role/sentient_disease.dm b/code/modules/events/ghost_role/sentient_disease.dm
index 662f6de22c8a..78f8097b8acf 100644
--- a/code/modules/events/ghost_role/sentient_disease.dm
+++ b/code/modules/events/ghost_role/sentient_disease.dm
@@ -9,6 +9,8 @@
description = "Spawns a sentient disease, who wants to infect as many people as possible."
min_wizard_trigger_potency = 4
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMBAT, TAG_DESTRUCTIVE)
/datum/round_event/ghost_role/sentient_disease
role_name = "sentient disease"
diff --git a/code/modules/events/ghost_role/slaughter_event.dm b/code/modules/events/ghost_role/slaughter_event.dm
index 8cb2b729aa4e..0c0234ba3ac1 100644
--- a/code/modules/events/ghost_role/slaughter_event.dm
+++ b/code/modules/events/ghost_role/slaughter_event.dm
@@ -10,6 +10,8 @@
description = "Spawns a slaughter demon, to hunt by travelling through pools of blood."
min_wizard_trigger_potency = 6
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMBAT, TAG_SPOOKY)
/datum/round_event/ghost_role/slaughter
minimum_required = 1
diff --git a/code/modules/events/ghost_role/space_dragon.dm b/code/modules/events/ghost_role/space_dragon.dm
index 735d6d1dcb8f..c6f268290231 100644
--- a/code/modules/events/ghost_role/space_dragon.dm
+++ b/code/modules/events/ghost_role/space_dragon.dm
@@ -10,6 +10,8 @@
description = "Spawns a space dragon, which will try to take over the station."
min_wizard_trigger_potency = 6
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_ROLESET
+ tags = list(TAG_COMBAT)
/datum/round_event/ghost_role/space_dragon
minimum_required = 1
diff --git a/code/modules/events/ghost_role/space_ninja.dm b/code/modules/events/ghost_role/space_ninja.dm
index a14511b72779..e345daa30668 100644
--- a/code/modules/events/ghost_role/space_ninja.dm
+++ b/code/modules/events/ghost_role/space_ninja.dm
@@ -8,6 +8,8 @@
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_INVASION
description = "A space ninja infiltrates the station."
+ track = EVENT_TRACK_ROLESET
+ tags = list(TAG_COMBAT)
/datum/round_event/ghost_role/space_ninja
minimum_required = 1
diff --git a/code/modules/events/gravity_generator_blackout.dm b/code/modules/events/gravity_generator_blackout.dm
index 89cc5a43367e..7992f52bb75a 100644
--- a/code/modules/events/gravity_generator_blackout.dm
+++ b/code/modules/events/gravity_generator_blackout.dm
@@ -6,6 +6,8 @@
description = "Turns off the gravity generator."
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 4
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL, TAG_SPACE)
/datum/round_event_control/gravity_generator_blackout/can_spawn_event(players_amt, allow_magic = FALSE)
. = ..()
diff --git a/code/modules/events/grey_tide.dm b/code/modules/events/grey_tide.dm
index 7c7e23950a96..86f20f9670da 100644
--- a/code/modules/events/grey_tide.dm
+++ b/code/modules/events/grey_tide.dm
@@ -8,6 +8,8 @@
description = "Bolts open all doors in one or more departments."
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_DESTRUCTIVE, TAG_SPOOKY)
/datum/round_event/grey_tide
announce_when = 50
diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm
index ecc70df98bcd..2743c4d839d9 100644
--- a/code/modules/events/grid_check.dm
+++ b/code/modules/events/grid_check.dm
@@ -10,6 +10,8 @@
/// Cooldown for the announement associated with this event.
/// Necessary due to the fact that this event is player triggerable.
COOLDOWN_DECLARE(announcement_spam_protection)
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL, TAG_SPOOKY)
/datum/round_event/grid_check
announce_when = 1
diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm
index 8a8902d5724c..eb995acefdb1 100644
--- a/code/modules/events/heart_attack.dm
+++ b/code/modules/events/heart_attack.dm
@@ -11,6 +11,8 @@
admin_setup = list(/datum/event_admin_setup/minimum_candidate_requirement/heart_attack, /datum/event_admin_setup/input_number/heart_attack)
///Candidates for recieving a healthy dose of heart disease
var/list/heart_attack_candidates = list()
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_TARGETED)
/datum/round_event_control/heart_attack/can_spawn_event(players_amt, allow_magic = FALSE)
. = ..()
diff --git a/code/modules/events/immovable_rod/immovable_rod_event.dm b/code/modules/events/immovable_rod/immovable_rod_event.dm
index 63d2e79b3911..0b8437cf4f9d 100644
--- a/code/modules/events/immovable_rod/immovable_rod_event.dm
+++ b/code/modules/events/immovable_rod/immovable_rod_event.dm
@@ -11,6 +11,8 @@
min_wizard_trigger_potency = 6
max_wizard_trigger_potency = 7
admin_setup = list(/datum/event_admin_setup/set_location/immovable_rod, /datum/event_admin_setup/question/immovable_rod)
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_DESTRUCTIVE)
/datum/round_event/immovable_rod
announce_when = 5
diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm
index 772d1576cdc0..f2edeac485a6 100644
--- a/code/modules/events/ion_storm.dm
+++ b/code/modules/events/ion_storm.dm
@@ -7,6 +7,8 @@
description = "Gives the AI a new, randomized law."
min_wizard_trigger_potency = 2
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_TARGETED)
/datum/round_event/ion_storm
var/replaceLawsetChance = 25 //chance the AI's lawset is completely replaced with something else per config weights
diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm
index 85b1ef024775..2e2baf9a85f7 100644
--- a/code/modules/events/mass_hallucination.dm
+++ b/code/modules/events/mass_hallucination.dm
@@ -9,6 +9,8 @@
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 2
admin_setup = list(/datum/event_admin_setup/mass_hallucination)
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event/mass_hallucination
fakeable = FALSE
diff --git a/code/modules/events/meteors/meteor_wave_events.dm b/code/modules/events/meteors/meteor_wave_events.dm
index e45c2b3fda97..475e3265b8c8 100644
--- a/code/modules/events/meteors/meteor_wave_events.dm
+++ b/code/modules/events/meteors/meteor_wave_events.dm
@@ -10,6 +10,8 @@
category = EVENT_CATEGORY_SPACE
description = "A regular meteor wave."
map_flags = EVENT_SPACE_ONLY
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMMUNAL, TAG_SPACE, TAG_DESTRUCTIVE)
/datum/round_event/meteor_wave
start_when = 6
diff --git a/code/modules/events/meteors/stray_meteor_event.dm b/code/modules/events/meteors/stray_meteor_event.dm
index 53daff1ac8a1..849be38b6a09 100644
--- a/code/modules/events/meteors/stray_meteor_event.dm
+++ b/code/modules/events/meteors/stray_meteor_event.dm
@@ -11,6 +11,8 @@
max_wizard_trigger_potency = 7
admin_setup = list(/datum/event_admin_setup/listed_options/stray_meteor)
map_flags = EVENT_SPACE_ONLY
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_DESTRUCTIVE, TAG_SPACE)
/datum/round_event/stray_meteor
announce_when = 1
diff --git a/code/modules/events/mice_migration.dm b/code/modules/events/mice_migration.dm
index e7f31567f4c9..038ee8bcb193 100644
--- a/code/modules/events/mice_migration.dm
+++ b/code/modules/events/mice_migration.dm
@@ -4,6 +4,8 @@
weight = 10
category = EVENT_CATEGORY_ENTITIES
description = "A horde of mice arrives, and perhaps even the Rat King themselves."
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_DESTRUCTIVE)
/datum/round_event/mice_migration
var/minimum_mice = 5
diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm
index 5f2bca5071ba..5fc32a413a74 100644
--- a/code/modules/events/portal_storm.dm
+++ b/code/modules/events/portal_storm.dm
@@ -6,6 +6,8 @@
earliest_start = 30 MINUTES
category = EVENT_CATEGORY_ENTITIES
description = "Syndicate troops pour out of portals."
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMBAT)
/datum/round_event/portal_storm/syndicate_shocktroop
boss_types = list(/mob/living/basic/syndicate/melee/space/stormtrooper = 2)
diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm
index ebcbb27f2781..9a18da1bd3c9 100644
--- a/code/modules/events/processor_overload.dm
+++ b/code/modules/events/processor_overload.dm
@@ -5,6 +5,8 @@
min_players = 20
category = EVENT_CATEGORY_ENGINEERING
description = "Emps the telecomm processors, scrambling radio speech. Might blow up a few."
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event/processor_overload
announce_when = 1
diff --git a/code/modules/events/radiation_leak.dm b/code/modules/events/radiation_leak.dm
index 0fbe29927666..ed074e1459df 100644
--- a/code/modules/events/radiation_leak.dm
+++ b/code/modules/events/radiation_leak.dm
@@ -8,6 +8,8 @@
category = EVENT_CATEGORY_ENGINEERING
min_wizard_trigger_potency = 3
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event/radiation_leak
start_when = 1 // 2 seconds in
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index 5b2b6b71ea1d..a0d055ef2860 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -1,11 +1,13 @@
/datum/round_event_control/radiation_storm
name = "Radiation Storm"
typepath = /datum/round_event/radiation_storm
- max_occurrences = 1
+ max_occurrences = 2 //monkestation edit - STORYTELLERS
category = EVENT_CATEGORY_SPACE
description = "Radiation storm affects the station, forcing the crew to escape to maintenance."
min_wizard_trigger_potency = 3
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event/radiation_storm
diff --git a/code/modules/events/sandstorm.dm b/code/modules/events/sandstorm.dm
index 0288b32ec207..81abd914d200 100644
--- a/code/modules/events/sandstorm.dm
+++ b/code/modules/events/sandstorm.dm
@@ -19,6 +19,8 @@
max_wizard_trigger_potency = 7
admin_setup = list(/datum/event_admin_setup/listed_options/sandstorm)
map_flags = EVENT_SPACE_ONLY
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_DESTRUCTIVE)
/datum/round_event/sandstorm
start_when = 60
diff --git a/code/modules/events/scrubber_clog.dm b/code/modules/events/scrubber_clog.dm
index 0bbb0801182a..bb236e166e2b 100644
--- a/code/modules/events/scrubber_clog.dm
+++ b/code/modules/events/scrubber_clog.dm
@@ -6,6 +6,8 @@
earliest_start = 5 MINUTES
category = EVENT_CATEGORY_JANITORIAL
description = "Harmless mobs climb out of a scrubber."
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL)
/datum/round_event/scrubber_clog
announce_when = 10
diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm
index 897d07110317..507c5d046509 100644
--- a/code/modules/events/scrubber_overflow.dm
+++ b/code/modules/events/scrubber_overflow.dm
@@ -7,6 +7,8 @@
category = EVENT_CATEGORY_JANITORIAL
description = "The scrubbers release a tide of mostly harmless froth."
admin_setup = list(/datum/event_admin_setup/listed_options/scrubber_overflow)
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL)
/datum/round_event/scrubber_overflow
announce_when = 1
diff --git a/code/modules/events/shuttle_catastrophe.dm b/code/modules/events/shuttle_catastrophe.dm
index ed64c52a836a..28b9571a9e19 100644
--- a/code/modules/events/shuttle_catastrophe.dm
+++ b/code/modules/events/shuttle_catastrophe.dm
@@ -6,6 +6,8 @@
category = EVENT_CATEGORY_BUREAUCRATIC
description = "Replaces the emergency shuttle with a random one."
admin_setup = list(/datum/event_admin_setup/warn_admin/shuttle_catastrophe, /datum/event_admin_setup/listed_options/shuttle_catastrophe)
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event_control/shuttle_catastrophe/can_spawn_event(players, allow_magic = FALSE)
. = ..()
diff --git a/code/modules/events/shuttle_insurance.dm b/code/modules/events/shuttle_insurance.dm
index d1e39125e346..d00875ead0ca 100644
--- a/code/modules/events/shuttle_insurance.dm
+++ b/code/modules/events/shuttle_insurance.dm
@@ -6,6 +6,8 @@
max_occurrences = 1
category = EVENT_CATEGORY_BUREAUCRATIC
description = "A sketchy but legit insurance offer."
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event_control/shuttle_insurance/can_spawn_event(players, allow_magic = FALSE)
. = ..()
diff --git a/code/modules/events/space_vines/vine_event.dm b/code/modules/events/space_vines/vine_event.dm
index a668f036cac3..014f5c2c71a5 100644
--- a/code/modules/events/space_vines/vine_event.dm
+++ b/code/modules/events/space_vines/vine_event.dm
@@ -14,6 +14,8 @@
/datum/event_admin_setup/input_number/spacevine_potency,
/datum/event_admin_setup/input_number/spacevine_production,
)
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMMUNAL, TAG_COMBAT)
/datum/round_event/spacevine
fakeable = FALSE
@@ -64,7 +66,7 @@
/datum/event_admin_setup/set_location/spacevine/apply_to_event(datum/round_event/spacevine/event)
event.override_turf = chosen_turf
-
+
/datum/event_admin_setup/multiple_choice/spacevine
input_text = "Select starting mutations."
min_choices = 0
@@ -88,7 +90,7 @@
type_choices += text2path(choice)
event.mutations_overridden = TRUE
event.override_mutations = type_choices
-
+
/datum/event_admin_setup/input_number/spacevine_potency
input_text = "Set vine's potency (effects mutation frequency + max severity)"
max_value = 100
diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm
index 52ad7474694d..95c8f357cc14 100644
--- a/code/modules/events/spider_infestation.dm
+++ b/code/modules/events/spider_infestation.dm
@@ -10,6 +10,8 @@
description = "Spawns spider eggs, ready to hatch."
min_wizard_trigger_potency = 5
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_ROLESET
+ tags = list(TAG_COMBAT)
/datum/round_event/spider_infestation
announce_when = 400
diff --git a/code/modules/events/stray_cargo.dm b/code/modules/events/stray_cargo.dm
index e783f18ec025..0d0b9d478d03 100644
--- a/code/modules/events/stray_cargo.dm
+++ b/code/modules/events/stray_cargo.dm
@@ -8,6 +8,8 @@
category = EVENT_CATEGORY_BUREAUCRATIC
description = "A pod containing a random supply crate lands on the station."
admin_setup = list(/datum/event_admin_setup/set_location/stray_cargo, /datum/event_admin_setup/listed_options/stray_cargo)
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL)
/datum/event_admin_setup/set_location/stray_cargo
input_text = "Aim pod at turf we're on?"
diff --git a/code/modules/events/tram_malfunction.dm b/code/modules/events/tram_malfunction.dm
index b5130a8c6934..312d045512ea 100644
--- a/code/modules/events/tram_malfunction.dm
+++ b/code/modules/events/tram_malfunction.dm
@@ -11,6 +11,8 @@
description = "Tram crossing signals malfunction, tram collision damage is increased."
min_wizard_trigger_potency = 0
max_wizard_trigger_potency = 3
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_DESTRUCTIVE)
//Check if there's a tram we can cause to malfunction.
/datum/round_event_control/tram_malfunction/can_spawn_event(players_amt, allow_magic = FALSE)
diff --git a/code/modules/events/wisdomcow.dm b/code/modules/events/wisdomcow.dm
index 1ecd43797e58..7aa24b45a27f 100644
--- a/code/modules/events/wisdomcow.dm
+++ b/code/modules/events/wisdomcow.dm
@@ -10,6 +10,8 @@
/datum/event_admin_setup/listed_options/wisdom_cow,
/datum/event_admin_setup/input_number/wisdom_cow,
)
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL, TAG_POSITIVE)
/datum/round_event/wisdomcow
///Location override that, if set causes the cow to spawn in a pre-determined locaction instead of randomly.
@@ -56,5 +58,5 @@
/datum/event_admin_setup/input_number/wisdom_cow/apply_to_event(datum/round_event/wisdomcow/event)
event.selected_experience = chosen_value
-
-
+
+
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index f80d432c8920..6bde3d3c738e 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -10,6 +10,8 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to
description = "Space time anomalies appear on the station, randomly teleporting people who walk into them."
min_wizard_trigger_potency = 3
max_wizard_trigger_potency = 7
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_COMMUNAL)
/datum/round_event/wormholes
announce_when = 10
diff --git a/config/events.json b/config/events.json
new file mode 100644
index 000000000000..a30ccaf58ab5
--- /dev/null
+++ b/config/events.json
@@ -0,0 +1,13 @@
+{
+ "/datum/round_event_control":
+ {
+ "weight" : 10,
+ "min_players" : 0,
+ "max_occurrences" : 100,
+ "earliest_start" : 20,
+ "track" : "Moderate",
+ "cost" : 1,
+ "reoccurence_penalty_multiplier" : 1,
+ "shared_occurence_type" : null
+ }
+}
diff --git a/config/game_options.txt b/config/game_options.txt
index ce6d491a57af..94e6203385ca 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -540,3 +540,50 @@ MAXFINE 2000
METACURRENCY_NAME Metacoin
TWITCH_KEY mrhouse
+
+## Gamemode configurations
+
+## Multipliers for points gained over time for event tracks.
+MUNDANE_POINT_GAIN_MULTIPLIER 1
+MODERATE_POINT_GAIN_MULTIPLIER 1
+MAJOR_POINT_GAIN_MULTIPLIER 1
+ROLESET_POINT_GAIN_MULTIPLIER 1
+OBJECTIVES_POINT_GAIN_MULTIPLIER 1
+
+## Multipliers for points to spend on roundstart events.
+MUNDANE_ROUNDSTART_POINT_MULTIPLIER 1
+MODERATE_ROUNDSTART_POINT_MULTIPLIER 1
+MAJOR_ROUNDSTART_POINT_MULTIPLIER 1
+ROLESET_ROUNDSTART_POINT_MULTIPLIER 1
+OBJECTIVES_ROUNDSTART_POINT_MULTIPLIER 1
+
+## Minimum population caps for event tracks to run their events.
+MUNDANE_MIN_POP 0
+MODERATE_MIN_POP 0
+MAJOR_MIN_POP 0
+ROLESET_MIN_POP 0
+OBJECTIVES_MIN_POP 0
+
+## Point thresholds for tracks to run events. The lesser the more frequent events will be.
+MUNDANE_POINT_THRESHOLD 25
+MODERATE_POINT_THRESHOLD 50
+MAJOR_POINT_THRESHOLD 90
+ROLESET_POINT_THRESHOLD 120
+OBJECTIVES_POINT_THRESHOLD 130
+
+## Allows the storyteller to scale event frequencies based on population
+ALLOW_STORYTELLER_POP_SCALING
+
+## Thresholds that population frequency scalling penalize up to.
+MUNDANE_POP_SCALE_THRESHOLD 10
+MODERATE_POP_SCALE_THRESHOLD 15
+MAJOR_POP_SCALE_THRESHOLD 40
+ROLESET_POP_SCALE_THRESHOLD 45
+OBJECTIVES_POP_SCALE_THRESHOLD 40
+
+## The maximum penalties population scalling will apply to the tracks for having less pop than POP_SCALE_THRESHOLD. This is treated as percentages
+MUNDANE_POP_SCALE_PENALTY 30
+MODERATE_POP_SCALE_PENALTY 30
+MAJOR_POP_SCALE_PENALTY 30
+ROLESET_POP_SCALE_PENALTY 30
+OBJECTIVES_POP_SCALE_PENALTY 30
diff --git a/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm b/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
index 216e9d103eaf..839af842845a 100644
--- a/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
+++ b/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
@@ -1,7 +1,7 @@
/datum/round_event_control/slasher
name = "Slasher"
typepath = /datum/round_event/ghost_role/slasher
- weight = 0 // for now
+ weight = 14 // for now
max_occurrences = 3
/datum/round_event/ghost_role/slasher
diff --git a/monkestation/code/modules/storytellers/config.dm b/monkestation/code/modules/storytellers/config.dm
new file mode 100644
index 000000000000..121a512099d1
--- /dev/null
+++ b/monkestation/code/modules/storytellers/config.dm
@@ -0,0 +1,149 @@
+///Gamemode related configs below
+// Point Gain Multipliers
+/datum/config_entry/number/mundane_point_gain_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/moderate_point_gain_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/major_point_gain_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/roleset_point_gain_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/objectives_point_gain_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+// Roundstart points Multipliers
+/datum/config_entry/number/mundane_roundstart_point_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/moderate_roundstart_point_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/major_roundstart_point_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/roleset_roundstart_point_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/objectives_roundstart_point_multiplier
+ config_entry_value = 1
+ min_val = 0
+
+// Minimum population
+/datum/config_entry/number/mundane_min_pop
+ config_entry_value = MUNDANE_MIN_POP
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/moderate_min_pop
+ config_entry_value = MODERATE_MIN_POP
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/major_min_pop
+ config_entry_value = MAJOR_MIN_POP
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/roleset_min_pop
+ config_entry_value = ROLESET_MIN_POP
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/objectives_min_pop
+ config_entry_value = OBJECTIVES_MIN_POP
+ integer = TRUE
+ min_val = 0
+
+// Point Thresholds
+/datum/config_entry/number/mundane_point_threshold
+ config_entry_value = MUNDANE_POINT_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/moderate_point_threshold
+ config_entry_value = MODERATE_POINT_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/major_point_threshold
+ config_entry_value = MAJOR_POINT_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/roleset_point_threshold
+ config_entry_value = ROLESET_POINT_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/objectives_point_threshold
+ config_entry_value = OBJECTIVES_POINT_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+
+/datum/config_entry/flag/allow_storyteller_pop_scaling // Allows storyteller to scale down the event frequency by population
+
+// Pop scalling thresholds
+/datum/config_entry/number/mundane_pop_scale_threshold
+ config_entry_value = MUNDANE_POP_SCALE_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/moderate_pop_scale_threshold
+ config_entry_value = MODERATE_POP_SCALE_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/major_pop_scale_threshold
+ config_entry_value = MAJOR_POP_SCALE_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/roleset_pop_scale_threshold
+ config_entry_value = ROLESET_POP_SCALE_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/objectives_pop_scale_threshold
+ config_entry_value = OBJECTIVES_POP_SCALE_THRESHOLD
+ integer = TRUE
+ min_val = 0
+
+// Pop scalling penalties
+/datum/config_entry/number/mundane_pop_scale_penalty
+ config_entry_value = MUNDANE_POP_SCALE_PENALTY
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/moderate_pop_scale_penalty
+ config_entry_value = MODERATE_POP_SCALE_PENALTY
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/major_pop_scale_penalty
+ config_entry_value = MAJOR_POP_SCALE_PENALTY
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/roleset_pop_scale_penalty
+ config_entry_value = ROLESET_POP_SCALE_PENALTY
+ integer = TRUE
+ min_val = 0
+
+/datum/config_entry/number/objectives_pop_scale_penalty
+ config_entry_value = OBJECTIVES_POP_SCALE_PENALTY
+ integer = TRUE
+ min_val = 0
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
new file mode 100644
index 000000000000..d25ba06c5c43
--- /dev/null
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -0,0 +1,1070 @@
+#define INIT_ORDER_GAMEMODE 70
+
+SUBSYSTEM_DEF(gamemode)
+ name = "Gamemode"
+ init_order = INIT_ORDER_GAMEMODE
+ runlevels = RUNLEVEL_GAME
+ flags = SS_BACKGROUND | SS_KEEP_TIMING
+ wait = 2 SECONDS
+
+ /// List of our event tracks for fast access during for loops.
+ var/list/event_tracks = EVENT_TRACKS
+ /// Our storyteller. He progresses our trackboards and picks out events
+ var/datum/storyteller/storyteller
+ /// Result of the storyteller vote. Defaults to the guide.
+ var/voted_storyteller = /datum/storyteller/guide
+ /// List of all the storytellers. Populated at init. Associative from type
+ var/list/storytellers = list()
+ /// Next process for our storyteller. The wait time is STORYTELLER_WAIT_TIME
+ var/next_storyteller_process = 0
+ /// Associative list of even track points.
+ var/list/event_track_points = list(
+ EVENT_TRACK_MUNDANE = 0,
+ EVENT_TRACK_MODERATE = 0,
+ EVENT_TRACK_MAJOR = 0,
+ EVENT_TRACK_ROLESET = 0,
+ EVENT_TRACK_OBJECTIVES = 0
+ )
+ /// Last point amount gained of each track. Those are recorded for purposes of estimating how long until next event.
+ var/list/last_point_gains = list(
+ EVENT_TRACK_MUNDANE = 0,
+ EVENT_TRACK_MODERATE = 0,
+ EVENT_TRACK_MAJOR = 0,
+ EVENT_TRACK_ROLESET = 0,
+ EVENT_TRACK_OBJECTIVES = 0
+ )
+ /// Point thresholds at which the events are supposed to be rolled, it is also the base cost for events.
+ var/list/point_thresholds = list(
+ EVENT_TRACK_MUNDANE = MUNDANE_POINT_THRESHOLD,
+ EVENT_TRACK_MODERATE = MODERATE_POINT_THRESHOLD,
+ EVENT_TRACK_MAJOR = MAJOR_POINT_THRESHOLD,
+ EVENT_TRACK_ROLESET = ROLESET_POINT_THRESHOLD,
+ EVENT_TRACK_OBJECTIVES = OBJECTIVES_POINT_THRESHOLD
+ )
+
+ /// Minimum population thresholds for the tracks to fire off events.
+ var/list/min_pop_thresholds = list(
+ EVENT_TRACK_MUNDANE = MUNDANE_MIN_POP,
+ EVENT_TRACK_MODERATE = MODERATE_MIN_POP,
+ EVENT_TRACK_MAJOR = MAJOR_MIN_POP,
+ EVENT_TRACK_ROLESET = ROLESET_MIN_POP,
+ EVENT_TRACK_OBJECTIVES = OBJECTIVES_MIN_POP
+ )
+
+ /// Configurable multipliers for point gain over time.
+ var/list/point_gain_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1,
+ EVENT_TRACK_MODERATE = 1,
+ EVENT_TRACK_MAJOR = 1,
+ EVENT_TRACK_ROLESET = 1,
+ EVENT_TRACK_OBJECTIVES = 1
+ )
+ /// Configurable multipliers for roundstart points.
+ var/list/roundstart_point_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1,
+ EVENT_TRACK_MODERATE = 1,
+ EVENT_TRACK_MAJOR = 1,
+ EVENT_TRACK_ROLESET = 1,
+ EVENT_TRACK_OBJECTIVES = 1
+ )
+ /// Whether we allow pop scaling. This is configured by config, or the storyteller UI
+ var/allow_pop_scaling = TRUE
+
+ /// Associative list of pop scale thresholds.
+ var/list/pop_scale_thresholds = list(
+ EVENT_TRACK_MUNDANE = MUNDANE_POP_SCALE_THRESHOLD,
+ EVENT_TRACK_MODERATE = MODERATE_POP_SCALE_THRESHOLD,
+ EVENT_TRACK_MAJOR = MAJOR_POP_SCALE_THRESHOLD,
+ EVENT_TRACK_ROLESET = ROLESET_POP_SCALE_THRESHOLD,
+ EVENT_TRACK_OBJECTIVES = OBJECTIVES_POP_SCALE_THRESHOLD
+ )
+
+ /// Associative list of pop scale penalties.
+ var/list/pop_scale_penalties = list(
+ EVENT_TRACK_MUNDANE = MUNDANE_POP_SCALE_PENALTY,
+ EVENT_TRACK_MODERATE = MODERATE_POP_SCALE_PENALTY,
+ EVENT_TRACK_MAJOR = MAJOR_POP_SCALE_PENALTY,
+ EVENT_TRACK_ROLESET = ROLESET_POP_SCALE_PENALTY,
+ EVENT_TRACK_OBJECTIVES = OBJECTIVES_POP_SCALE_PENALTY
+ )
+
+ /// Associative list of active multipliers from pop scale penalty.
+ var/list/current_pop_scale_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1,
+ EVENT_TRACK_MODERATE = 1,
+ EVENT_TRACK_MAJOR = 1,
+ EVENT_TRACK_ROLESET = 1,
+ EVENT_TRACK_OBJECTIVES = 1,
+ )
+
+
+
+ /// Associative list of control events by their track category. Compiled in Init
+ var/list/event_pools = list()
+
+ /// Events that we have scheduled to run in the nearby future
+ var/list/scheduled_events = list()
+
+ /// Associative list of tracks to forced event controls. For admins to force events (though they can still invoke them freely outside of the track system)
+ var/list/forced_next_events = list()
+
+ var/list/control = list() //list of all datum/round_event_control. Used for selecting events based on weight and occurrences.
+ var/list/running = list() //list of all existing /datum/round_event
+ var/list/currentrun = list()
+
+ /// List of all uncategorized events, because they were wizard or holiday events
+ var/list/uncategorized = list()
+
+ var/list/holidays //List of all holidays occuring today or null if no holidays
+
+ /// Event frequency multiplier, it exists because wizard, eugh.
+ var/event_frequency_multiplier = 1
+
+ /// Current preview page for the statistics UI.
+ var/statistics_track_page = EVENT_TRACK_MUNDANE
+ /// Page of the UI panel.
+ var/panel_page = GAMEMODE_PANEL_MAIN
+ /// Whether we are viewing the roundstart events or not
+ var/roundstart_event_view = TRUE
+
+ /// Whether the storyteller has been halted
+ var/halted_storyteller = FALSE
+
+ /// Ready players for roundstart events.
+ var/ready_players = 0
+ var/active_players = 0
+ var/head_crew = 0
+ var/eng_crew = 0
+ var/sec_crew = 0
+ var/med_crew = 0
+
+ var/wizardmode = FALSE
+
+/datum/controller/subsystem/gamemode/Initialize(time, zlevel)
+ // Populate event pools
+ for(var/track in event_tracks)
+ event_pools[track] = list()
+
+ // Populate storytellers
+ for(var/type in subtypesof(/datum/storyteller))
+ storytellers[type] = new type()
+
+ for(var/type in typesof(/datum/round_event_control))
+ var/datum/round_event_control/event = new type()
+ if(!event.typepath || !event.name)
+ continue //don't want this one! leave it for the garbage collector
+ control += event //add it to the list of all events (controls)
+ getHoliday()
+
+ load_config_vars()
+ load_event_config_vars()
+
+ ///Seeding events into track event pools needs to happen after event config vars are loaded
+ for(var/datum/round_event_control/event as anything in control)
+ if(event.holidayID || event.wizardevent)
+ uncategorized += event
+ continue
+ event_pools[event.track] += event //Add it to the categorized event pools
+// return ..()
+
+
+/datum/controller/subsystem/gamemode/fire(resumed = FALSE)
+ if(!resumed)
+ src.currentrun = running.Copy()
+
+ ///Handle scheduled events
+ for(var/datum/scheduled_event/sch_event in scheduled_events)
+ if(world.time >= sch_event.start_time)
+ sch_event.try_fire()
+ else if(!sch_event.alerted_admins && world.time >= sch_event.start_time - 1 MINUTES)
+ ///Alert admins 1 minute before running and allow them to cancel or refund the event, once again.
+ sch_event.alerted_admins = TRUE
+ message_admins("Scheduled Event: [sch_event.event] will run in [(sch_event.start_time - world.time) / 10] seconds. (CANCEL ) (REFUND )")
+
+ if(!halted_storyteller && next_storyteller_process <= world.time && storyteller)
+ // We update crew information here to adjust population scalling and event thresholds for the storyteller.
+ update_crew_infos()
+ next_storyteller_process = world.time + STORYTELLER_WAIT_TIME
+ storyteller.process(STORYTELLER_WAIT_TIME * 0.1)
+
+ //cache for sanic speed (lists are references anyways)
+ var/list/currentrun = src.currentrun
+
+ while(currentrun.len)
+ var/datum/thing = currentrun[currentrun.len]
+ currentrun.len--
+ if(thing)
+ thing.process(wait * 0.1)
+ else
+ running.Remove(thing)
+ if (MC_TICK_CHECK)
+ return
+
+/// Gets the number of antagonists the antagonist injection events will stop rolling after.
+/datum/controller/subsystem/gamemode/proc/get_antag_cap()
+ var/cap = FLOOR((get_correct_popcount() / ANTAG_CAP_DENOMINATOR), 1) + ANTAG_CAP_FLAT
+ return cap
+
+/// Whether events can inject more antagonists into the round
+/datum/controller/subsystem/gamemode/proc/can_inject_antags()
+ return (get_antag_cap() > GLOB.antagonists.len)
+
+/// Gets candidates for antagonist roles.
+/datum/controller/subsystem/gamemode/proc/get_candidates(be_special, job_ban, observers, ready_newplayers, living_players, required_time, inherit_required_time = TRUE, midround_antag_pref, no_antags = TRUE, list/restricted_roles)
+ var/list/candidates = list()
+ var/list/candidate_candidates = list() //lol
+
+ for(var/mob/player as anything in GLOB.player_list)
+ if(ready_newplayers && isnewplayer(player))
+ var/mob/dead/new_player/new_player = player
+ if(new_player.ready == PLAYER_READY_TO_PLAY && new_player.mind && new_player.check_preferences())
+ candidate_candidates += player
+ else if (observers && isobserver(player))
+ candidate_candidates += player
+ else if (living_players && isliving(player))
+ candidate_candidates += player
+
+ for(var/mob/candidate as anything in candidate_candidates)
+ if(QDELETED(candidate) || !candidate.key || !candidate.client || !candidate.mind)
+ continue
+ if(no_antags && candidate.mind.special_role)
+ continue
+ if(restricted_roles && (candidate.mind.assigned_role.title in restricted_roles))
+ continue
+ if(be_special)
+ if(!(candidate.client.prefs) || !(be_special in candidate.client.prefs.be_special))
+ continue
+
+ var/time_to_check
+ if(required_time)
+ time_to_check = required_time
+ else if (inherit_required_time)
+ time_to_check = GLOB.special_roles[be_special]
+
+ if(time_to_check && candidate.client.get_remaining_days(time_to_check) > 0)
+ continue
+
+ if(midround_antag_pref)
+ continue
+
+ if(job_ban && is_banned_from(candidate.ckey, list(job_ban, ROLE_SYNDICATE)))
+ continue
+ candidates += candidate
+ return candidates
+
+/// Gets the correct popcount, returning READY people if roundstart, and active people if not.
+/datum/controller/subsystem/gamemode/proc/get_correct_popcount()
+ if(SSticker.HasRoundStarted())
+ update_crew_infos()
+ return active_players
+ else
+ calculate_ready_players()
+ return ready_players
+
+/// Refunds and removes a scheduled event.
+/datum/controller/subsystem/gamemode/proc/refund_scheduled_event(datum/scheduled_event/refunded)
+ if(refunded.cost)
+ var/track_type = refunded.event.track
+ event_track_points[track_type] += refunded.cost
+ remove_scheduled_event(refunded)
+
+/// Removes a scheduled event.
+/datum/controller/subsystem/gamemode/proc/remove_scheduled_event(datum/scheduled_event/removed)
+ scheduled_events -= removed
+ qdel(removed)
+
+/// We need to calculate ready players for the sake of roundstart events becoming eligible.
+/datum/controller/subsystem/gamemode/proc/calculate_ready_players()
+ ready_players = 0
+ for(var/mob/dead/new_player/player as anything in GLOB.new_player_list)
+ if(player.ready == PLAYER_READY_TO_PLAY)
+ ready_players++
+
+/// We roll points to be spent for roundstart events, including antagonists.
+/datum/controller/subsystem/gamemode/proc/roll_pre_setup_points()
+ if(storyteller.disable_distribution || halted_storyteller)
+ return
+ /// Distribute points
+ for(var/track in event_track_points)
+ var/base_amt
+ var/gain_amt
+ switch(track)
+ if(EVENT_TRACK_MUNDANE)
+ base_amt = ROUNDSTART_MUNDANE_BASE
+ gain_amt = ROUNDSTART_MUNDANE_GAIN
+ if(EVENT_TRACK_MODERATE)
+ base_amt = ROUNDSTART_MODERATE_BASE
+ gain_amt = ROUNDSTART_MODERATE_GAIN
+ if(EVENT_TRACK_MAJOR)
+ base_amt = ROUNDSTART_MAJOR_BASE
+ gain_amt = ROUNDSTART_MAJOR_GAIN
+ if(EVENT_TRACK_ROLESET)
+ base_amt = ROUNDSTART_ROLESET_BASE
+ gain_amt = ROUNDSTART_ROLESET_GAIN
+ if(EVENT_TRACK_OBJECTIVES)
+ base_amt = ROUNDSTART_OBJECTIVES_BASE
+ gain_amt = ROUNDSTART_OBJECTIVES_GAIN
+ var/calc_value = base_amt + (gain_amt * ready_players)
+ calc_value *= roundstart_point_multipliers[track]
+ calc_value *= storyteller.starting_point_multipliers[track]
+ calc_value *= (rand(100 - storyteller.roundstart_points_variance,100 + storyteller.roundstart_points_variance)/100)
+ event_track_points[track] = round(calc_value)
+
+ /// If the storyteller guarantees an antagonist roll, add points to make it so.
+ if(storyteller.guarantees_roundstart_roleset && event_track_points[EVENT_TRACK_ROLESET] < point_thresholds[EVENT_TRACK_ROLESET])
+ event_track_points[EVENT_TRACK_ROLESET] = point_thresholds[EVENT_TRACK_ROLESET]
+
+ /// If we have any forced events, ensure we get enough points for them
+ for(var/track in event_tracks)
+ if(forced_next_events[track] && event_track_points[track] < point_thresholds[track])
+ event_track_points[track] = point_thresholds[track]
+
+/// At this point we've rolled roundstart events and antags and we handle leftover points here.
+/datum/controller/subsystem/gamemode/proc/handle_post_setup_points()
+ for(var/track in event_track_points) //Just halve the points for now.
+ event_track_points[track] *= 0.5
+
+/// Because roundstart events need 2 steps of firing for purposes of antags, here is the first step handled, happening before occupation division.
+/datum/controller/subsystem/gamemode/proc/handle_pre_setup_roundstart_events()
+ if(storyteller.disable_distribution)
+ return
+ if(halted_storyteller)
+ message_admins("WARNING: Didn't roll roundstart events (including antagonists) due to the storyteller being halted.")
+ return
+ while(TRUE)
+ if(!storyteller.handle_tracks())
+ break
+
+/// Second step of handlind roundstart events, happening after people spawn.
+/datum/controller/subsystem/gamemode/proc/handle_post_setup_roundstart_events()
+ /// Start all roundstart events on post_setup immediately
+ for(var/datum/round_event/event as anything in running)
+ if(!event.control.roundstart)
+ continue
+ ASYNC
+ event.try_start()
+// INVOKE_ASYNC(event, /datum/round_event.proc/try_start)
+
+/// Schedules an event to run later.
+/datum/controller/subsystem/gamemode/proc/schedule_event(datum/round_event_control/passed_event, passed_time, passed_cost, passed_ignore, passed_announce)
+ var/datum/scheduled_event/scheduled = new (passed_event, world.time + passed_time, passed_cost, passed_ignore, passed_announce)
+ var/round_started = SSticker.HasRoundStarted()
+ if(round_started)
+ message_admins("Event: [passed_event] has been scheduled to run in [passed_time / 10] seconds. (CANCEL ) (REFUND )")
+ else //Only roundstart events can be scheduled before round start
+ message_admins("Event: [passed_event] has been scheduled to run on roundstart. (CANCEL )")
+ scheduled_events += scheduled
+
+/datum/controller/subsystem/gamemode/proc/update_crew_infos()
+ // Very similar logic to `get_active_player_count()`
+ active_players = 0
+ head_crew = 0
+ eng_crew = 0
+ med_crew = 0
+ sec_crew = 0
+ for(var/mob/player_mob as anything in GLOB.player_list)
+ if(!player_mob.client)
+ continue
+ if(player_mob.stat) //If they're alive
+ continue
+ if(player_mob.client.is_afk()) //If afk
+ continue
+ if(!ishuman(player_mob))
+ continue
+ active_players++
+ if(player_mob.mind?.assigned_role)
+ var/datum/job/player_role = player_mob.mind.assigned_role
+ if(player_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
+ head_crew++
+ if(player_role.departments_bitflags & DEPARTMENT_BITFLAG_ENGINEERING)
+ eng_crew++
+ if(player_role.departments_bitflags & DEPARTMENT_BITFLAG_MEDICAL)
+ med_crew++
+ if(player_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY)
+ sec_crew++
+ update_pop_scaling()
+
+/datum/controller/subsystem/gamemode/proc/update_pop_scaling()
+ for(var/track in event_tracks)
+ var/low_pop_bound = min_pop_thresholds[track]
+ var/high_pop_bound = pop_scale_thresholds[track]
+ var/scale_penalty = pop_scale_penalties[track]
+
+ var/perceived_pop = min(max(low_pop_bound, active_players), high_pop_bound)
+
+ var/divisor = high_pop_bound - low_pop_bound
+ /// If the bounds are equal, we'd be dividing by zero or worse, if upper is smaller than lower, we'd be increasing the factor, just make it 1 and continue.
+ /// this is only a problem for bad configs
+ if(divisor <= 0)
+ current_pop_scale_multipliers[track] = 1
+ continue
+ var/scalar = (perceived_pop - low_pop_bound) / divisor
+ var/penalty = scale_penalty - (scale_penalty * scalar)
+ var/calculated_multiplier = 1 - (penalty / 100)
+
+ current_pop_scale_multipliers[track] = calculated_multiplier
+
+/datum/controller/subsystem/gamemode/proc/TriggerEvent(datum/round_event_control/event)
+ . = event.preRunEvent()
+ if(. == EVENT_CANT_RUN)//we couldn't run this event for some reason, set its max_occurrences to 0
+ event.max_occurrences = 0
+ else if(. == EVENT_READY)
+ event.run_event(random = TRUE) // fallback to dynamic
+
+///Resets frequency multiplier.
+/datum/controller/subsystem/gamemode/proc/resetFrequency()
+ event_frequency_multiplier = 1
+
+/* /client/proc/forceEvent()
+ set name = "Trigger Event"
+ set category = "Admin.Events"
+ if(!holder ||!check_rights(R_FUN))
+ return
+ holder.forceEvent(usr) */
+
+/* /datum/admins/forceEvent(mob/user)
+ SSgamemode.event_panel(user) */
+
+
+//////////////
+// HOLIDAYS //
+//////////////
+//Uncommenting ALLOW_HOLIDAYS in config.txt will enable holidays
+
+//It's easy to add stuff. Just add a holiday datum in code/modules/holiday/holidays.dm
+//You can then check if it's a special day in any code in the game by doing if(SSgamemode.holidays["Groundhog Day"])
+
+//You can also make holiday random events easily thanks to Pete/Gia's system.
+//simply make a random event normally, then assign it a holidayID string which matches the holiday's name.
+//Anything with a holidayID, which isn't in the holidays list, will never occur.
+
+//Please, Don't spam stuff up with stupid stuff (key example being april-fools Pooh/ERP/etc),
+//And don't forget: CHECK YOUR CODE!!!! We don't want any zero-day bugs which happen only on holidays and never get found/fixed!
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////
+//ALSO, MOST IMPORTANTLY: Don't add stupid stuff! Discuss bonus content with Project-Heads first please!//
+//////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+//sets up the holidays and holidays list
+/datum/controller/subsystem/gamemode/proc/getHoliday()
+ if(!CONFIG_GET(flag/allow_holidays))
+ return // Holiday stuff was not enabled in the config!
+ for(var/H in subtypesof(/datum/holiday))
+ var/datum/holiday/holiday = new H()
+ var/delete_holiday = TRUE
+ for(var/timezone in holiday.timezones)
+ var/time_in_timezone = world.realtime + timezone HOURS
+
+ var/YYYY = text2num(time2text(time_in_timezone, "YYYY")) // get the current year
+ var/MM = text2num(time2text(time_in_timezone, "MM")) // get the current month
+ var/DD = text2num(time2text(time_in_timezone, "DD")) // get the current day
+ var/DDD = time2text(time_in_timezone, "DDD") // get the current weekday
+
+ if(holiday.shouldCelebrate(DD, MM, YYYY, DDD))
+ holiday.celebrate()
+ LAZYSET(holidays, holiday.name, holiday)
+ delete_holiday = FALSE
+ break
+ if(delete_holiday)
+ qdel(holiday)
+
+ if(holidays)
+ holidays = shuffle(holidays)
+ // regenerate station name because holiday prefixes.
+ set_station_name(new_station_name())
+ world.update_status()
+
+/datum/controller/subsystem/gamemode/proc/toggleWizardmode()
+ wizardmode = !wizardmode //TODO: decide what to do with wiz events
+ message_admins("Summon Events has been [wizardmode ? "enabled, events will occur [SSgamemode.event_frequency_multiplier] times as fast" : "disabled"]!")
+ log_game("Summon Events was [wizardmode ? "enabled" : "disabled"]!")
+
+///Attempts to select players for special roles the mode might have.
+/datum/controller/subsystem/gamemode/proc/pre_setup()
+ calculate_ready_players()
+ roll_pre_setup_points()
+ handle_pre_setup_roundstart_events()
+ return TRUE
+
+///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things
+/datum/controller/subsystem/gamemode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report.
+ if(!report)
+ report = !CONFIG_GET(flag/no_intercept_report)
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME)
+
+ if(CONFIG_GET(flag/reopen_roundstart_suicide_roles))
+ var/delay = CONFIG_GET(number/reopen_roundstart_suicide_roles_delay)
+ if(delay)
+ delay = (delay SECONDS)
+ else
+ delay = (4 MINUTES) //default to 4 minutes if the delay isn't defined.
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/reopen_roundstart_suicide_roles), delay)
+
+ if(SSdbcore.Connect())
+ var/list/to_set = list()
+ var/arguments = list()
+ if(storyteller)
+ to_set += "game_mode = :game_mode"
+ arguments["game_mode"] = storyteller.name
+ if(GLOB.revdata.originmastercommit)
+ to_set += "commit_hash = :commit_hash"
+ arguments["commit_hash"] = GLOB.revdata.originmastercommit
+ if(to_set.len)
+ arguments["round_id"] = GLOB.round_id
+ var/datum/db_query/query_round_game_mode = SSdbcore.NewQuery(
+ "UPDATE [format_table_name("round")] SET [to_set.Join(", ")] WHERE id = :round_id",
+ arguments
+ )
+ query_round_game_mode.Execute()
+ qdel(query_round_game_mode)
+ generate_station_goals()
+ handle_post_setup_roundstart_events()
+ handle_post_setup_points()
+ roundstart_event_view = FALSE
+ return TRUE
+
+
+///Handles late-join antag assignments
+/datum/controller/subsystem/gamemode/proc/make_antag_chance(mob/living/carbon/human/character)
+ return
+
+/datum/controller/subsystem/gamemode/proc/check_finished(force_ending) //to be called by SSticker
+ if(!SSticker.setup_done)
+ return FALSE
+ if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME))
+ return TRUE
+ if(GLOB.station_was_nuked)
+ return TRUE
+ if(force_ending)
+ return TRUE
+
+/*
+ * Generate a list of station goals available to purchase to report to the crew.
+ *
+ * Returns a formatted string all station goals that are available to the station.
+ */
+/datum/controller/subsystem/gamemode/proc/generate_station_goal_report()
+ if(!GLOB.station_goals.len)
+ return
+ . = "
Special Orders for [station_name()]: "
+ for(var/datum/station_goal/station_goal as anything in GLOB.station_goals)
+ station_goal.on_report()
+ . += station_goal.get_report()
+ return
+
+/*
+ * Generate a list of active station traits to report to the crew.
+ *
+ * Returns a formatted string of all station traits (that are shown) affecting the station.
+ */
+/datum/controller/subsystem/gamemode/proc/generate_station_trait_report()
+ if(!SSstation.station_traits.len)
+ return
+ . = "Identified shift divergencies: "
+ for(var/datum/station_trait/station_trait as anything in SSstation.station_traits)
+ if(!station_trait.show_in_report)
+ continue
+ . += "[station_trait.get_report()] "
+ return
+
+/* /proc/reopen_roundstart_suicide_roles()
+ var/include_command = CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions)
+ var/list/reopened_jobs = list()
+ for(var/mob/living/quitter in GLOB.suicided_mob_list)
+ var/datum/job/job = SSjob.GetJob(quitter.job)
+ if(!job || !(job.job_flags & JOB_REOPEN_ON_ROUNDSTART_LOSS))
+ continue
+ if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
+ continue
+ job.current_positions = max(job.current_positions - 1, 0)
+ reopened_jobs += quitter.job
+ if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report))
+ if(reopened_jobs.len)
+ var/reopened_job_report_positions
+ for(var/dead_dudes_job in reopened_jobs)
+ reopened_job_report_positions = "[reopened_job_report_positions ? "[reopened_job_report_positions]\n":""][dead_dudes_job]"
+ var/suicide_command_report = "Central Command Human Resources Board \
+ Notice of Personnel Change \
+ To personnel management staff aboard [station_name()]: \
+ Our medical staff have detected a series of anomalies in the vital sensors \
+ of some of the staff aboard your station. \
+ Further investigation into the situation on our end resulted in us discovering \
+ a series of rather... unforturnate decisions that were made on the part of said staff. \
+ As such, we have taken the liberty to automatically reopen employment opportunities for the positions of the crew members \
+ who have decided not to partake in our research. We will be forwarding their cases to our employment review board \
+ to determine their eligibility for continued service with the company (and of course the \
+ continued storage of cloning records within the central medical backup server.) \
+ The following positions have been reopened on our behalf: \
+ [reopened_job_report_positions] "
+ print_command_report(suicide_command_report, "Central Command Personnel Update") */
+
+//////////////////////////
+//Reports player logouts//
+//////////////////////////
+/* /proc/display_roundstart_logout_report()
+ var/list/msg = list("[SPAN_BOLDNOTICE("Roundstart logout report")]\n\n")
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
+ var/mob/living/carbon/C = L
+ if (istype(C) && !C.last_mind)
+ continue // never had a client
+ if(L.ckey && !GLOB.directory[L.ckey])
+ msg += "[L.name] ([L.key]), the [L.job] (Disconnected )\n"
+ if(L.ckey && L.client)
+ var/failed = FALSE
+ if(L.client.inactivity >= (ROUNDSTART_LOGOUT_REPORT_TIME / 2)) //Connected, but inactive (alt+tabbed or something)
+ msg += "[L.name] ([L.key]), the [L.job] (Connected, Inactive )\n"
+ failed = TRUE //AFK client
+ if(!failed && L.stat)
+ if(L.suiciding) //Suicider
+ msg += "[L.name] ([L.key]), the [L.job] ([SPAN_BOLDANNOUNCE("Suicide")])\n"
+ failed = TRUE //Disconnected client
+ if(!failed && (L.stat == UNCONSCIOUS || L.stat == HARD_CRIT))
+ msg += "[L.name] ([L.key]), the [L.job] (Dying)\n"
+ failed = TRUE //Unconscious
+ if(!failed && L.stat == DEAD)
+ msg += "[L.name] ([L.key]), the [L.job] (Dead)\n"
+ failed = TRUE //Dead
+ continue //Happy connected client
+ for(var/mob/dead/observer/D in GLOB.dead_mob_list)
+ if(D.mind && D.mind.current == L)
+ if(L.stat == DEAD)
+ if(L.suiciding) //Suicider
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([SPAN_BOLDANNOUNCE("Suicide")])\n"
+ continue //Disconnected client
+ else
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n"
+ continue //Dead mob, ghost abandoned
+ else
+ if(D.can_reenter_corpse)
+ continue //Adminghost, or cult/wizard ghost
+ else
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([SPAN_BOLDANNOUNCE("Ghosted")])\n"
+ continue //Ghosted while alive
+ for (var/C in GLOB.admins)
+ to_chat(C, msg.Join()) */
+
+/datum/controller/subsystem/gamemode/proc/generate_station_goals()
+ var/list/possible = subtypesof(/datum/station_goal)
+ var/goal_weights = 0
+ while(possible.len && goal_weights < 1) // station goal budget is 1
+ var/datum/station_goal/picked = pick_n_take(possible)
+ goal_weights += initial(picked.weight)
+ GLOB.station_goals += new picked
+
+//Set result and news report here
+/datum/controller/subsystem/gamemode/proc/set_round_result()
+ SSticker.mode_result = "undefined"
+ if(GLOB.station_was_nuked)
+ SSticker.news_report = STATION_DESTROYED_NUKE
+ if(EMERGENCY_ESCAPED_OR_ENDGAMED)
+ SSticker.news_report = STATION_EVACUATED
+ if(SSshuttle.emergency.is_hijacked())
+ SSticker.news_report = SHUTTLE_HIJACK
+
+/// Loads json event config values from events.txt
+/datum/controller/subsystem/gamemode/proc/load_event_config_vars()
+ var/json_file = file("[global.config.directory]/events.json")
+ if(!fexists(json_file))
+ return
+ var/list/decoded = json_decode(file2text(json_file))
+ for(var/event_text_path in decoded)
+ var/event_path = text2path(event_text_path)
+ var/datum/round_event_control/event
+ for(var/datum/round_event_control/iterated_event as anything in control)
+ if(iterated_event.type == event_path)
+ event = iterated_event
+ break
+ if(!event)
+ continue
+ var/list/var_list = decoded[event_text_path]
+ for(var/variable in var_list)
+ var/value = var_list[variable]
+ switch(variable)
+ if("weight")
+ event.weight = value
+ if("min_players")
+ event.min_players = value
+ if("max_occurrences")
+ event.max_occurrences = value
+ if("earliest_start")
+ event.earliest_start = value * (1 MINUTES)
+ if("track")
+ if(value in event_tracks)
+ event.track = value
+ if("cost")
+ event.cost = value
+ if("reoccurence_penalty_multiplier")
+ event.reoccurence_penalty_multiplier = value
+ if("shared_occurence_type")
+ if(!isnull(value))
+ value = text2path(value)
+ event.shared_occurence_type = value
+
+/// Loads config values from game_options.txt
+/datum/controller/subsystem/gamemode/proc/load_config_vars()
+ point_gain_multipliers[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_point_gain_multiplier)
+ point_gain_multipliers[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_point_gain_multiplier)
+ point_gain_multipliers[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_point_gain_multiplier)
+ point_gain_multipliers[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_point_gain_multiplier)
+ point_gain_multipliers[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_point_gain_multiplier)
+
+ roundstart_point_multipliers[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_roundstart_point_multiplier)
+ roundstart_point_multipliers[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_roundstart_point_multiplier)
+ roundstart_point_multipliers[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_roundstart_point_multiplier)
+ roundstart_point_multipliers[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_roundstart_point_multiplier)
+ roundstart_point_multipliers[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_roundstart_point_multiplier)
+
+ min_pop_thresholds[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_min_pop)
+ min_pop_thresholds[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_min_pop)
+ min_pop_thresholds[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_min_pop)
+ min_pop_thresholds[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_min_pop)
+ min_pop_thresholds[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_min_pop)
+
+ point_thresholds[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_point_threshold)
+ point_thresholds[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_point_threshold)
+ point_thresholds[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_point_threshold)
+ point_thresholds[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_point_threshold)
+ point_thresholds[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_point_threshold)
+
+/datum/controller/subsystem/gamemode/proc/storyteller_vote_choices()
+ var/client_amount = GLOB.clients.len
+ var/list/choices = list()
+ for(var/storyteller_type in storytellers)
+ var/datum/storyteller/storyboy = storytellers[storyteller_type]
+ if(!storyboy.votable)
+ continue
+ if((storyboy.population_min && storyboy.population_min > client_amount) || (storyboy.population_max && storyboy.population_max < client_amount))
+ continue
+ choices += storyboy.name
+ ///Because the vote subsystem is dumb and does not support any descriptions, we dump them into world.
+ to_chat(world, span_notice("[storyboy.name] "))
+ to_chat(world, span_notice("[storyboy.desc]"))
+ return choices
+
+/datum/controller/subsystem/gamemode/proc/storyteller_vote_result(winner_name)
+ /// Find the winner
+ /// Hijacking the proc because we don't have a vote right now..
+ var/datum/storyteller/storyteller = pick(storytellers)
+ message_admins("We picked [storyteller]")
+ voted_storyteller = storyteller
+ if(storyteller)
+ return
+ for(var/storyteller_type in storytellers)
+ var/datum/storyteller/storyboy = storytellers[storyteller_type]
+ if(storyboy.name == winner_name)
+ voted_storyteller = storyteller_type
+ break
+
+/datum/controller/subsystem/gamemode/proc/init_storyteller()
+ /// Hijacking the proc because we don't have a vote right now..
+ var/datum/storyteller/storyteller_pick = pick(storytellers)
+ message_admins("We picked [storyteller_pick] for this rounds storyteller, randomly.")
+ voted_storyteller = storyteller_pick
+ if(storyteller) // If this is true, then an admin bussed one, don't overwrite it
+ return
+ set_storyteller(voted_storyteller)
+
+/datum/controller/subsystem/gamemode/proc/set_storyteller(passed_type)
+ if(!storytellers[passed_type])
+ message_admins("Attempted to set an invalid storyteller type: [passed_type].")
+ CRASH("Attempted to set an invalid storyteller type: [passed_type].")
+ storyteller = storytellers[passed_type]
+ to_chat(world, span_notice("Storyteller is [storyteller.name]! "))
+ to_chat(world, span_notice("[storyteller.welcome_text]"))
+
+/// Panel containing information, variables and controls about the gamemode and scheduled event
+/datum/controller/subsystem/gamemode/proc/admin_panel(mob/user)
+ update_crew_infos()
+ var/round_started = SSticker.HasRoundStarted()
+ var/list/dat = list()
+ dat += "Storyteller: [storyteller ? "[storyteller.name]" : "None"] "
+ dat += " HALT Storyteller Event Panel Set Storyteller Refresh "
+ dat += "Storyteller determines points gained, event chances, and is the entity responsible for rolling events. "
+ dat += " Active Players: [active_players] (Head: [head_crew], Sec: [sec_crew], Eng: [eng_crew], Med: [med_crew])"
+ dat += " "
+ dat += "Main "
+ dat += " Variables "
+ dat += " "
+ switch(panel_page)
+ if(GAMEMODE_PANEL_VARIABLES)
+ dat += "Reload Config Vars Configs located in game_options.txt. "
+ dat += "Point Gains Multipliers (only over time): "
+ dat += "This affects points gained over time towards scheduling new events of the tracks. "
+ for(var/track in event_tracks)
+ dat += " [track]: [point_gain_multipliers[track]] "
+ dat += " "
+
+ dat += "Roundstart Points Multipliers: "
+ dat += "This affects points generated for roundstart events and antagonists. "
+ for(var/track in event_tracks)
+ dat += " [track]: [roundstart_point_multipliers[track]] "
+ dat += " "
+
+ dat += "Minimum Population for Tracks: "
+ dat += "This are the minimum population caps for events to be able to run. "
+ for(var/track in event_tracks)
+ dat += " [track]: [min_pop_thresholds[track]] "
+ dat += " "
+
+ dat += "Point Thresholds: "
+ dat += "Those are thresholds the tracks require to reach with points to make an event. "
+ for(var/track in event_tracks)
+ dat += " [track]: [point_thresholds[track]] "
+
+ if(GAMEMODE_PANEL_MAIN)
+ var/even = TRUE
+ dat += "Event Tracks: "
+ dat += "Every track represents progression towards scheduling an event of it's severity "
+ dat += ""
+ dat += ""
+ dat += "Track "
+ dat += "Progress "
+ dat += "Next "
+ dat += "Forced "
+ dat += "Actions "
+ dat += " "
+ for(var/track in event_tracks)
+ even = !even
+ var/background_cl = even ? "#17191C" : "#23273C"
+ var/lower = event_track_points[track]
+ var/upper = point_thresholds[track]
+ var/percent = round((lower/upper)*100)
+ var/next = 0
+ var/last_points = last_point_gains[track]
+ if(last_points)
+ next = round((upper - lower) / last_points / STORYTELLER_WAIT_TIME * 40 / 6) / 10
+ dat += ""
+ dat += "[track] " //Track
+ dat += "[percent]% ([lower]/[upper]) " //Progress
+ dat += "~[next] m. " //Next
+ var/datum/round_event_control/forced_event = forced_next_events[track]
+ var/forced = forced_event ? "[forced_event.name] X " : ""
+ dat += "[forced] " //Forced
+ dat += "Set Pts. Next Event " //Actions
+ dat += " "
+ dat += "
"
+
+ dat += "Scheduled Events: "
+ dat += ""
+ dat += ""
+ dat += "Name "
+ dat += "Severity "
+ dat += "Time "
+ dat += "Actions "
+ dat += " "
+ var/sorted_scheduled = list()
+ for(var/datum/scheduled_event/scheduled as anything in scheduled_events)
+ sorted_scheduled[scheduled] = scheduled.start_time
+ sortTim(sorted_scheduled, cmp=/proc/cmp_numeric_asc, associative = TRUE)
+ even = TRUE
+ for(var/datum/scheduled_event/scheduled as anything in sorted_scheduled)
+ even = !even
+ var/background_cl = even ? "#17191C" : "#23273C"
+ dat += ""
+ dat += "[scheduled.event.name] " //Name
+ dat += "[scheduled.event.track] " //Severity
+ var/time = (scheduled.event.roundstart && !round_started) ? "ROUNDSTART" : "[(scheduled.start_time - world.time) / (1 SECONDS)] s."
+ dat += "[time] " //Time
+ dat += "[scheduled.get_href_actions()] " //Actions
+ dat += " "
+ dat += "
"
+
+ dat += "Running Events: "
+ dat += ""
+ dat += ""
+ dat += "Name "
+ dat += "Actions "
+ dat += " "
+ even = TRUE
+ for(var/datum/round_event/event as anything in running)
+ even = !even
+ var/background_cl = even ? "#17191C" : "#23273C"
+ dat += ""
+ dat += "[event.control.name] " //Name
+ dat += "-TBA- " //Actions
+ dat += " "
+ dat += "
"
+
+ var/datum/browser/popup = new(user, "gamemode_admin_panel", "Gamemode Panel", 670, 650)
+ popup.set_content(dat.Join())
+ popup.open()
+
+ /// Panel containing information and actions regarding events
+/datum/controller/subsystem/gamemode/proc/event_panel(mob/user)
+ var/list/dat = list()
+ if(storyteller)
+ dat += "Storyteller: [storyteller.name]"
+ dat += " Repetition penalty multiplier: [storyteller.event_repetition_multiplier]"
+ dat += " Cost variance: [storyteller.cost_variance]"
+ if(storyteller.tag_multipliers)
+ dat += " Tag multipliers:"
+ for(var/tag in storyteller.tag_multipliers)
+ dat += "[tag]:[storyteller.tag_multipliers[tag]] | "
+ storyteller.calculate_weights(statistics_track_page)
+ else
+ dat += "Storyteller: None Weight and chance statistics will be inaccurate due to the present lack of a storyteller."
+ dat += "Roundstart Events Forced Roundstart events will use rolled points, and are guaranteed to trigger (even if the used points are not enough)"
+ dat += " Avg. event intervals: "
+ for(var/track in event_tracks)
+ if(last_point_gains[track])
+ var/est_time = round(point_thresholds[track] / last_point_gains[track] / STORYTELLER_WAIT_TIME * 40 / 6) / 10
+ dat += "[track]: ~[est_time] m. | "
+ dat += " "
+ for(var/track in EVENT_PANEL_TRACKS)
+ dat += "[track] "
+ dat += " "
+ /// Create event info and stats table
+ dat += ""
+ dat += ""
+ dat += "Name "
+ dat += "Tags "
+ dat += "Occurences "
+ dat += "M.Pop "
+ dat += "M.Time "
+ dat += "Can Occur "
+ dat += "Weight "
+ dat += "Actions "
+ dat += " "
+ var/even = TRUE
+ var/total_weight = 0
+ var/list/event_lookup
+ switch(statistics_track_page)
+ if(ALL_EVENTS)
+ event_lookup = control
+ if(UNCATEGORIZED_EVENTS)
+ event_lookup = uncategorized
+ else
+ event_lookup = event_pools[statistics_track_page]
+ var/list/assoc_spawn_weight = list()
+ for(var/datum/round_event_control/event as anything in event_lookup)
+ if(event.roundstart != roundstart_event_view)
+ continue
+ if(event.can_spawn_event())
+ total_weight += event.calculated_weight
+ assoc_spawn_weight[event] = event.calculated_weight
+ else
+ assoc_spawn_weight[event] = 0
+ sortTim(assoc_spawn_weight, cmp=/proc/cmp_numeric_dsc, associative = TRUE)
+ for(var/datum/round_event_control/event as anything in assoc_spawn_weight)
+ even = !even
+ var/background_cl = even ? "#17191C" : "#23273C"
+ dat += ""
+ dat += "[event.name] " //Name
+ dat += "" //Tags
+ for(var/tag in event.tags)
+ dat += "[tag] "
+ dat += " "
+ var/occurence_string = "[event.occurrences]"
+ if(event.shared_occurence_type)
+ occurence_string += " (shared: [event.get_occurences()])"
+ dat += "[occurence_string] " //Occurences
+ dat += "[event.min_players] " //Minimum pop
+ dat += "[event.earliest_start / (1 MINUTES)] m. " //Minimum time
+ dat += "[assoc_spawn_weight[event] ? "Yes" : "No"] " //Can happen?
+ var/weight_string = "([event.calculated_weight] /raw.[event.weight])"
+ if(assoc_spawn_weight[event])
+ var/percent = round((event.calculated_weight / total_weight) * 100)
+ weight_string = "[percent]% - [weight_string]"
+ dat += "[weight_string] " //Weight
+ dat += "[event.get_href_actions()] " //Actions
+ dat += " "
+ dat += "
"
+ var/datum/browser/popup = new(user, "gamemode_event_panel", "Event Panel", 1000, 600)
+ popup.set_content(dat.Join())
+ popup.open()
+
+/datum/controller/subsystem/gamemode/Topic(href, href_list)
+ . = ..()
+ var/mob/user = usr
+ if(!check_rights(R_ADMIN))
+ return
+ switch(href_list["panel"])
+ if("main")
+ switch(href_list["action"])
+ if("set_storyteller")
+ message_admins("[key_name_admin(usr)] is picking a new Storyteller.")
+ var/list/name_list = list()
+ for(var/storyteller_type in storytellers)
+ var/datum/storyteller/storyboy = storytellers[storyteller_type]
+ name_list[storyboy.name] = storyboy.type
+ var/new_storyteller_name = input(usr, "Choose new storyteller (circumvents voted one):", "Storyteller") as null|anything in name_list
+ if(!new_storyteller_name)
+ message_admins("[key_name_admin(usr)] has cancelled picking a Storyteller.")
+ return
+ message_admins("[key_name_admin(usr)] has chosen [new_storyteller_name] as the new Storyteller.")
+ var/new_storyteller_type = name_list[new_storyteller_name]
+ set_storyteller(new_storyteller_type)
+ if("halt_storyteller")
+ halted_storyteller = !halted_storyteller
+ message_admins("[key_name_admin(usr)] has [halted_storyteller ? "HALTED" : "un-halted"] the Storyteller.")
+ if("vars")
+ var/track = href_list["track"]
+ switch(href_list["var"])
+ if("pts_multiplier")
+ var/new_value = input(usr, "New value:", "Set new value") as num|null
+ if(isnull(new_value) || new_value < 0)
+ return
+ message_admins("[key_name_admin(usr)] set point gain multiplier for [track] track to [new_value].")
+ point_gain_multipliers[track] = new_value
+ if("roundstart_pts")
+ var/new_value = input(usr, "New value:", "Set new value") as num|null
+ if(isnull(new_value) || new_value < 0)
+ return
+ message_admins("[key_name_admin(usr)] set roundstart pts multiplier for [track] track to [new_value].")
+ roundstart_point_multipliers[track] = new_value
+ if("min_pop")
+ var/new_value = input(usr, "New value:", "Set new value") as num|null
+ if(isnull(new_value) || new_value < 0)
+ return
+ message_admins("[key_name_admin(usr)] set minimum population for [track] track to [new_value].")
+ min_pop_thresholds[track] = new_value
+ if("pts_threshold")
+ var/new_value = input(usr, "New value:", "Set new value") as num|null
+ if(isnull(new_value) || new_value < 0)
+ return
+ message_admins("[key_name_admin(usr)] set point threshold of [track] track to [new_value].")
+ point_thresholds[track] = new_value
+ if("reload_config_vars")
+ message_admins("[key_name_admin(usr)] reloaded gamemode config vars.")
+ load_config_vars()
+ if("tab")
+ var/tab = href_list["tab"]
+ panel_page = tab
+ if("open_stats")
+ event_panel(user)
+ return
+ if("track_action")
+ var/track = href_list["track"]
+ if(!(track in event_tracks))
+ return
+ switch(href_list["track_action"])
+ if("remove_forced")
+ if(forced_next_events[track])
+ var/datum/round_event_control/event = forced_next_events[track]
+ message_admins("[key_name_admin(usr)] removed forced event [event.name] from track [track].")
+ forced_next_events -= track
+ if("set_pts")
+ var/set_pts = input(usr, "New point amount ([point_thresholds[track]]+ invokes event):", "Set points for [track]") as num|null
+ if(isnull(set_pts))
+ return
+ event_track_points[track] = set_pts
+ message_admins("[key_name_admin(usr)] set points of [track] track to [set_pts].")
+ log_admin_private("[key_name(usr)] set points of [track] track to [set_pts].")
+ if("next_event")
+ message_admins("[key_name_admin(usr)] invoked next event for [track] track.")
+ log_admin_private("[key_name(usr)] invoked next event for [track] track.")
+ event_track_points[track] = point_thresholds[track]
+ if(storyteller)
+ storyteller.handle_tracks()
+ admin_panel(user)
+ if("stats")
+ switch(href_list["action"])
+ if("set_roundstart")
+ roundstart_event_view = !roundstart_event_view
+ if("set_cat")
+ var/new_category = href_list["cat"]
+ if(new_category in EVENT_PANEL_TRACKS)
+ statistics_track_page = new_category
+ event_panel(user)
diff --git a/monkestation/code/modules/storytellers/readme.md b/monkestation/code/modules/storytellers/readme.md
new file mode 100644
index 000000000000..ace62b725afa
--- /dev/null
+++ b/monkestation/code/modules/storytellers/readme.md
@@ -0,0 +1,44 @@
+## Title:
+
+
+MODULE ID: STORYTELLERS
+
+### Description:
+
+This PR adds adds on to the current dynamic system by having events be guided by storytellers, this also caches the events ran last round and depending on severity cuts their weights by x % to make rounds not repeat as often.
+
+
+
+
+### TG Proc/File Changes:
+
+
+ - N/A
+
+### Defines:
+
+
+ - code\__DEFINES\~monkestation\storytellers.dm
+
+### Master file additions
+
+- code\modules\events\_event.dm
+- code\modules\admin\topic.dm
+- code\controllers\subsystem\ticker.dm
+- code\controllers\subsystem\statpanel.dm
+- all event files
+
+
+
+### Included files that are not contained in this module:
+
+- N/A
+
+
+### Credits:
+
+
+
+Made by Unknown Coders on Horizon (Horizon's Repo atleast as of 10/14/2023 no longer exists if this changes please let me know on discord #Borbop)
+
+Ported by Dwasint
diff --git a/monkestation/code/modules/storytellers/scheduled_events.dm b/monkestation/code/modules/storytellers/scheduled_events.dm
new file mode 100644
index 000000000000..60414cc948eb
--- /dev/null
+++ b/monkestation/code/modules/storytellers/scheduled_events.dm
@@ -0,0 +1,94 @@
+///Scheduled event datum for SSgamemode to put events into.
+/datum/scheduled_event
+ /// What event are scheduling.
+ var/datum/round_event_control/event
+ /// When do we start our event
+ var/start_time = 0
+ /// If we were created by a storyteller, here's a cost to refund in case.
+ var/cost
+ /// Whether we alerted admins about this schedule when it's close to being invoked.
+ var/alerted_admins = FALSE
+ /// Whether we are faking an occurence or not
+ var/fakes_occurence = TRUE
+ /// Whether this ignores event can run checks. If bussed by an admin, you want to ignore checks
+ var/ignores_checks
+ /// Whether the scheduled event will override the announcement change. If null it won't. TRUE = force yes. FALSE = force no.
+ var/announce_change
+
+/datum/scheduled_event/New(datum/round_event_control/passed_event, passed_time, passed_cost, passed_ignore, passed_announce)
+ . = ..()
+ event = passed_event
+ start_time = passed_time
+ cost = passed_cost
+ ignores_checks = passed_ignore
+ announce_change = passed_announce
+ /// Add a fake occurence to make the weightings/checks properly respect the scheduled event.
+ event.add_occurence()
+ fakes_occurence = TRUE
+
+/datum/scheduled_event/proc/remove_occurence()
+ if(fakes_occurence)
+ /// Remove the fake occurence if we still have it
+ event.subtract_occurence()
+ fakes_occurence = FALSE
+
+/// For admins who want to reschedule the event.
+/datum/scheduled_event/proc/reschedule(new_time)
+ start_time = new_time
+ alerted_admins = FALSE
+
+/datum/scheduled_event/proc/get_href_actions()
+ var/round_started = SSticker.HasRoundStarted()
+ if(round_started)
+ return "Fire Reschedule Cancel Refund "
+ else
+ return "Cancel "
+
+/// Try and fire off the scheduled event
+/datum/scheduled_event/proc/try_fire()
+ /// Remove our fake occurence pre-emptively for the checks.
+ remove_occurence()
+
+ ///If we can't spawn the scheduled event, refund it.
+ if(!ignores_checks && !event.can_spawn_event(FALSE)) //FALSE argument to ignore popchecks, to prevent scheduled events from failing from people dying/cryoing etc.
+ message_admins("Scheduled Event: [event] was unable to run and has been refunded.")
+ SSgamemode.refund_scheduled_event(src)
+ return
+
+ ///Trigger the event and remove the scheduled datum
+ message_admins("Scheduled Event: [event] successfully triggered.")
+ SSgamemode.TriggerEvent(event)
+ SSgamemode.remove_scheduled_event(src)
+
+/datum/scheduled_event/Destroy()
+ remove_occurence()
+ event = null
+ return ..()
+
+/datum/scheduled_event/Topic(href, href_list)
+ . = ..()
+ if(QDELETED(src))
+ return
+ var/round_started = SSticker.HasRoundStarted()
+ switch(href_list["action"])
+ if("cancel")
+ message_admins("[key_name_admin(usr)] cancelled scheduled event [event.name].")
+ log_admin_private("[key_name(usr)] cancelled scheduled event [event.name].")
+ SSgamemode.remove_scheduled_event(src)
+ if("refund")
+ message_admins("[key_name_admin(usr)] refunded scheduled event [event.name].")
+ log_admin_private("[key_name(usr)] refunded scheduled event [event.name].")
+ SSgamemode.refund_scheduled_event(src)
+ if("reschedule")
+ var/new_schedule = input(usr, "New schedule time (in seconds):", "Reschedule Event") as num|null
+ if(isnull(new_schedule) || QDELETED(src))
+ return
+ start_time = world.time + new_schedule * 1 SECONDS
+ message_admins("[key_name_admin(usr)] rescheduled event [event.name] to [new_schedule] seconds.")
+ log_admin_private("[key_name(usr)] rescheduled event [event.name] to [new_schedule] seconds.")
+ if("fire")
+ if(!round_started)
+ return
+ message_admins("[key_name_admin(usr)] has fired scheduled event [event.name].")
+ log_admin_private("[key_name(usr)] has fired scheduled event [event.name].")
+ try_fire()
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
new file mode 100644
index 000000000000..9910b47a1272
--- /dev/null
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -0,0 +1,145 @@
+
+///The storyteller datum. He operates with the SSgamemode data to run events
+/datum/storyteller
+ /// Name of our storyteller.
+ var/name = "Badly coded storyteller"
+ /// Description of our storyteller.
+ var/desc = "Report this to the coders."
+ /// Text that the players will be greeted with when this storyteller is chosen.
+ var/welcome_text = "Set your eyes on the horizon."
+ /// This is the multiplier for repetition penalty in event weight. The lower the harsher it is
+ var/event_repetition_multiplier = 0.6
+ /// Multipliers for starting points.
+ var/list/starting_point_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1,
+ EVENT_TRACK_MODERATE = 1,
+ EVENT_TRACK_MAJOR = 1,
+ EVENT_TRACK_ROLESET = 1,
+ EVENT_TRACK_OBJECTIVES = 1
+ )
+ /// Multipliers for point gains.
+ var/list/point_gains_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1,
+ EVENT_TRACK_MODERATE = 1,
+ EVENT_TRACK_MAJOR = 1,
+ EVENT_TRACK_ROLESET = 1,
+ EVENT_TRACK_OBJECTIVES = 1
+ )
+ /// Multipliers of weight to apply for each tag of an event.
+ var/list/tag_multipliers
+
+ /// Variance in cost of the purchased events. Effectively affects frequency of events
+ var/cost_variance = 15
+
+ /// Variance in the budget of roundstart points.
+ var/roundstart_points_variance = 15
+
+ /// Whether the storyteller guaranteed a roleset roll (antag) on roundstart. (Still needs to pass pop check)
+ var/guarantees_roundstart_roleset = TRUE
+
+ /// Whether the storyteller has the distributions disabled. Important for ghost storytellers
+ var/disable_distribution = FALSE
+
+ /// Whether people can vote for the storyteller
+ var/votable = TRUE
+ /// If defined, will need a minimum of population to be votable
+ var/population_min
+ /// If defined, it will not be votable if exceeding the population
+ var/population_max
+
+/datum/storyteller/process(delta_time)
+ if(disable_distribution)
+ return
+ add_points(delta_time)
+ handle_tracks()
+
+/// Add points to all tracks while respecting the multipliers.
+/datum/storyteller/proc/add_points(delta_time)
+ var/datum/controller/subsystem/gamemode/mode = SSgamemode
+ var/base_point = EVENT_POINT_GAINED_PER_SECOND * delta_time * mode.event_frequency_multiplier
+ for(var/track in mode.event_track_points)
+ var/point_gain = base_point * point_gains_multipliers[track] * mode.point_gain_multipliers[track]
+ if(mode.allow_pop_scaling)
+ point_gain *= mode.current_pop_scale_multipliers[track]
+ mode.event_track_points[track] += point_gain
+ mode.last_point_gains[track] = point_gain
+
+/// Goes through every track of the gamemode and checks if it passes a threshold to buy an event, if does, buys one.
+/datum/storyteller/proc/handle_tracks()
+ . = FALSE //Has return value for the roundstart loop
+ var/datum/controller/subsystem/gamemode/mode = SSgamemode
+ for(var/track in mode.event_track_points)
+ var/points = mode.event_track_points[track]
+ if(points >= mode.point_thresholds[track] && find_and_buy_event_from_track(track))
+ . = TRUE
+
+/// Find and buy a valid event from a track.
+/datum/storyteller/proc/find_and_buy_event_from_track(track)
+ . = FALSE
+ var/datum/controller/subsystem/gamemode/mode = SSgamemode
+ var/datum/round_event_control/picked_event
+ if(mode.forced_next_events[track]) //Forced event by admin
+ /// Dont check any prerequisites, it has been forced by an admin
+ picked_event = mode.forced_next_events[track]
+ mode.forced_next_events -= track
+ else
+ mode.update_crew_infos()
+ var/pop_required = mode.min_pop_thresholds[track]
+ if(mode.active_players < pop_required)
+ message_admins("Storyteller failed to pick an event for track of [track] due to insufficient population. (required: [pop_required] active pop for [track]. Current: [mode.active_players])")
+ mode.event_track_points[track] *= TRACK_FAIL_POINT_PENALTY_MULTIPLIER
+ return
+ calculate_weights(track)
+ var/list/valid_events = list()
+ // Determine which events are valid to pick
+ for(var/datum/round_event_control/event as anything in mode.event_pools[track])
+ if(event.can_spawn_event())
+ valid_events[event] = event.calculated_weight
+ ///If we didn't get any events, remove the points inform admins and dont do anything
+ if(!length(valid_events))
+ message_admins("Storyteller failed to pick an event for track of [track].")
+ mode.event_track_points[track] *= TRACK_FAIL_POINT_PENALTY_MULTIPLIER
+ return
+ picked_event = pick_weight(valid_events)
+ if(!picked_event)
+ message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
+ stack_trace("WARNING: Storyteller picked a null from event pool.")
+ return
+ buy_event(picked_event, track)
+ . = TRUE
+
+/// Find and buy a valid event from a track.
+/datum/storyteller/proc/buy_event(datum/round_event_control/bought_event, track)
+ var/datum/controller/subsystem/gamemode/mode = SSgamemode
+ // Perhaps use some bell curve instead of a flat variance?
+ var/total_cost = bought_event.cost * mode.point_thresholds[track]
+ if(!bought_event.roundstart)
+ total_cost *= (1 + (rand(-cost_variance, cost_variance)/100)) //Apply cost variance if not roundstart event
+ mode.event_track_points[track] -= total_cost
+ message_admins("Storyteller purchased and triggered [bought_event] event, on [track] track, for [total_cost] cost.")
+ if(bought_event.roundstart)
+ mode.TriggerEvent(bought_event)
+ else
+ mode.schedule_event(bought_event, (rand(3, 4) MINUTES), total_cost)
+
+/// Calculates the weights of the events from a passed track.
+/datum/storyteller/proc/calculate_weights(track)
+ var/datum/controller/subsystem/gamemode/mode = SSgamemode
+ for(var/datum/round_event_control/event as anything in mode.event_pools[track])
+ var/weight_total = event.weight
+ /// Apply tag multipliers if able
+ if(tag_multipliers)
+ for(var/tag in tag_multipliers)
+ if(tag in event.tags)
+ weight_total *= tag_multipliers[tag]
+ /// Apply occurence multipliers if able
+ var/occurences = event.get_occurences()
+ if(occurences)
+ ///If the event has occured already, apply a penalty multiplier based on amount of occurences
+ weight_total -= event.reoccurence_penalty_multiplier * weight_total * (1 - (event_repetition_multiplier ** occurences))
+ /// Write it
+ event.calculated_weight = weight_total
+
+/datum/storyteller/guide
+ name = "The Guide"
+ desc = "The Guide will provide a balanced and varied experience. Consider this the default experience."
diff --git a/monkestation/code/modules/storytellers/storytellers/ghost.dm b/monkestation/code/modules/storytellers/storytellers/ghost.dm
new file mode 100644
index 000000000000..b5f697567ae7
--- /dev/null
+++ b/monkestation/code/modules/storytellers/storytellers/ghost.dm
@@ -0,0 +1,6 @@
+
+/datum/storyteller/ghost
+ name = "The Ghost"
+ desc = "The Ghost will not run a single event or create an antagonist."
+ disable_distribution = TRUE
+ population_max = 10
diff --git a/monkestation/code/modules/storytellers/storytellers/jester.dm b/monkestation/code/modules/storytellers/storytellers/jester.dm
new file mode 100644
index 000000000000..83de9ea12245
--- /dev/null
+++ b/monkestation/code/modules/storytellers/storytellers/jester.dm
@@ -0,0 +1,13 @@
+
+/datum/storyteller/jester
+ name = "The Jester"
+ desc = "The Jester will create much more events, with higher possibilities of them repeating."
+ event_repetition_multiplier = 0.8
+ point_gains_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1.2,
+ EVENT_TRACK_MODERATE = 1.4,
+ EVENT_TRACK_MAJOR = 1.4,
+ EVENT_TRACK_ROLESET = 1,
+ EVENT_TRACK_OBJECTIVES = 1
+ )
+ population_min = 10
diff --git a/monkestation/code/modules/storytellers/storytellers/sleeper.dm b/monkestation/code/modules/storytellers/storytellers/sleeper.dm
new file mode 100644
index 000000000000..5455566b544b
--- /dev/null
+++ b/monkestation/code/modules/storytellers/storytellers/sleeper.dm
@@ -0,0 +1,13 @@
+
+/datum/storyteller/sleeper
+ name = "The Sleeper"
+ desc = "The Sleeper will create less impactful events, especially ones involving combat or destruction. The chill experience."
+ point_gains_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1,
+ EVENT_TRACK_MODERATE = 0.7,
+ EVENT_TRACK_MAJOR = 0.7,
+ EVENT_TRACK_ROLESET = 0.7,
+ EVENT_TRACK_OBJECTIVES = 1
+ )
+ guarantees_roundstart_roleset = FALSE
+ tag_multipliers = list(TAG_COMBAT = 0.6, TAG_DESTRUCTIVE = 0.7)
diff --git a/monkestation/code/modules/storytellers/storytellers/vote.dm b/monkestation/code/modules/storytellers/storytellers/vote.dm
new file mode 100644
index 000000000000..6bf8ebc10bc3
--- /dev/null
+++ b/monkestation/code/modules/storytellers/storytellers/vote.dm
@@ -0,0 +1,4 @@
+/datum/vote/storyteller
+/datum/vote/storyteller/can_be_initiated(forced)
+ choices = SSgamemode.storyteller_vote_choices()
+ . = ..()
diff --git a/monkestation/code/modules/storytellers/storytellers/warrior.dm b/monkestation/code/modules/storytellers/storytellers/warrior.dm
new file mode 100644
index 000000000000..d1eb510aac66
--- /dev/null
+++ b/monkestation/code/modules/storytellers/storytellers/warrior.dm
@@ -0,0 +1,12 @@
+/datum/storyteller/warrior
+ name = "The Warrior"
+ desc = "The Warrior will create more impactful events, often focused on combat."
+ point_gains_multipliers = list(
+ EVENT_TRACK_MUNDANE = 1,
+ EVENT_TRACK_MODERATE = 1.3,
+ EVENT_TRACK_MAJOR = 1.3,
+ EVENT_TRACK_ROLESET = 1,
+ EVENT_TRACK_OBJECTIVES = 1
+ )
+ tag_multipliers = list(TAG_COMBAT = 1.5)
+ population_min = 10
diff --git a/tgstation.dme b/tgstation.dme
index 43a71fe4e469..6d1c436cfc1b 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -390,6 +390,7 @@
#include "code\__DEFINES\~monkestation\smoothing.dm"
#include "code\__DEFINES\~monkestation\span.dm"
#include "code\__DEFINES\~monkestation\status_effects.dm"
+#include "code\__DEFINES\~monkestation\storytellers.dm"
#include "code\__DEFINES\~monkestation\traits.dm"
#include "code\__DEFINES\~monkestation\dcs\signals\signals_atom.dm"
#include "code\__DEFINES\~monkestation\dcs\signals\signals_carbon.dm"
@@ -6266,6 +6267,14 @@
#include "monkestation\code\modules\store\store_items\suits.dm"
#include "monkestation\code\modules\store\store_items\toys.dm"
#include "monkestation\code\modules\store\store_items\under.dm"
+#include "monkestation\code\modules\storytellers\config.dm"
+#include "monkestation\code\modules\storytellers\gamemode_subsystem.dm"
+#include "monkestation\code\modules\storytellers\scheduled_events.dm"
+#include "monkestation\code\modules\storytellers\storytellers\_storyteller.dm"
+#include "monkestation\code\modules\storytellers\storytellers\ghost.dm"
+#include "monkestation\code\modules\storytellers\storytellers\jester.dm"
+#include "monkestation\code\modules\storytellers\storytellers\sleeper.dm"
+#include "monkestation\code\modules\storytellers\storytellers\vote.dm"
#include "monkestation\code\modules\surgery\bodyparts\arachnid_bodyparts.dm"
#include "monkestation\code\modules\surgery\bodyparts\clockwork_bodyparts.dm"
#include "monkestation\code\modules\surgery\bodyparts\ipc_bodyparts.dm"
From 20d1da35be204479aa6080d0a47b238d2ac21aa3 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sat, 14 Oct 2023 20:54:15 -0400
Subject: [PATCH 02/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index d25ba06c5c43..6b69e3f0e1a9 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -409,7 +409,7 @@ SUBSYSTEM_DEF(gamemode)
if(. == EVENT_CANT_RUN)//we couldn't run this event for some reason, set its max_occurrences to 0
event.max_occurrences = 0
else if(. == EVENT_READY)
- event.run_event(random = TRUE) // fallback to dynamic
+ event.runEvent(random = TRUE) // fallback to dynamic
///Resets frequency multiplier.
/datum/controller/subsystem/gamemode/proc/resetFrequency()
From b8e5496ebe9c758eb8efbf66db00454115e06d3e Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sat, 14 Oct 2023 21:12:33 -0400
Subject: [PATCH 03/85] start of it all
---
.../code/modules/antagonists/florida_man/florida_events.dm | 2 ++
monkestation/code/modules/new_antagonists/slasher/ghost_role.dm | 2 ++
2 files changed, 4 insertions(+)
diff --git a/monkestation/code/modules/antagonists/florida_man/florida_events.dm b/monkestation/code/modules/antagonists/florida_man/florida_events.dm
index aa63c44d3cda..e54a5044a74f 100644
--- a/monkestation/code/modules/antagonists/florida_man/florida_events.dm
+++ b/monkestation/code/modules/antagonists/florida_man/florida_events.dm
@@ -3,6 +3,8 @@
typepath = /datum/round_event/ghost_role/florida_man
weight = 14
max_occurrences = 3
+ track = EVENT_TRACK_MUNDANE
+ tags = list(TAG_COMMUNAL, TAG_COMBAT)
/datum/round_event/ghost_role/florida_man
minimum_required = 1
diff --git a/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm b/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
index 839af842845a..8914aa86b0da 100644
--- a/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
+++ b/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
@@ -3,6 +3,8 @@
typepath = /datum/round_event/ghost_role/slasher
weight = 14 // for now
max_occurrences = 3
+ track = EVENT_TRACK_MODERATE
+ tags = list(TAG_SPOOKY, TAG_COMBAT)
/datum/round_event/ghost_role/slasher
minimum_required = 1
From 98e1a4b1fbbb53491cffcc25f1e70a12781ab9d8 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 01:09:21 -0400
Subject: [PATCH 04/85] tons of stuff
---
code/controllers/master.dm | 2 +
code/controllers/subsystem/vote.dm | 4 +
code/game/gamemodes/dynamic/dynamic.dm | 2 +-
code/modules/events/_event.dm | 6 +-
.../converted_events/_base_event.dm | 99 +++++++++++++++++++
.../converted_events/solo/changeling.dm | 29 ++++++
.../converted_events/solo/heretic.dm | 31 ++++++
.../converted_events/solo/traitor.dm | 28 ++++++
.../converted_events/solo/wizard.dm | 27 +++++
.../storytellers/gamemode_subsystem.dm | 27 +++--
.../storytellers/storytellers/jester.dm | 2 +-
.../modules/storytellers/storytellers/vote.dm | 30 +++++-
.../storytellers/storytellers/warrior.dm | 2 +-
tgstation.dme | 4 +
tgui/packages/tgui/interfaces/VotePanel.tsx | 3 +
15 files changed, 274 insertions(+), 22 deletions(-)
create mode 100644 monkestation/code/modules/storytellers/converted_events/_base_event.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/changeling.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/heretic.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/traitor.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index a7013f058ed6..f44a5f5161e9 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -282,6 +282,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
if(sleep_offline_after_initializations && CONFIG_GET(flag/resume_after_initializations))
world.sleep_offline = FALSE
initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10
+ /// run votes
+ SSvote.initiate_vote(/datum/vote/storyteller, "pick round storyteller", forced = TRUE) // idk where else to run this lol
/**
* Initialize a given subsystem and handle the results.
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index 0513c666b774..787748405aaa 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -285,12 +285,16 @@ SUBSYSTEM_DEF(vote)
"message" = vote.message,
)
+ if(vote.has_desc)
+ vote_data += list("desc" = vote.return_desc(vote_name))
+
if(vote == current_vote)
var/list/choices = list()
for(var/key in current_vote.choices)
choices += list(list(
"name" = key,
"votes" = current_vote.choices[key],
+ "desc" = current_vote.return_desc(key)
))
data["currentVote"] = list(
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index c8c1b2d45064..022de70d54a6 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -135,7 +135,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
var/waittime_h = 1800
/// Maximum amount of threat allowed to generate.
- var/max_threat_level = 50
+ var/max_threat_level = 0 //disables dynamic threat PLEASE DONT LET ME MERGE THIS
/// The extra chance multiplier that a heavy impact midround ruleset will run next time.
/// For example, if this is set to 50, then the next heavy roll will be about 50% more likely to happen.
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index ca86be587ba7..a6d2092990d7 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -43,8 +43,8 @@
var/map_flags = NONE
//monkestation vars starts
- var/roundstart = FALSE // BUBBER EDIT
- var/cost = 1 // BUBBER EDIT
+ var/roundstart = FALSE
+ var/cost = 1
var/reoccurence_penalty_multiplier = 0.75
var/shared_occurence_type
var/track = EVENT_TRACK_MODERATE
@@ -88,6 +88,8 @@
// Admin-created events override this.
/datum/round_event_control/proc/can_spawn_event(players_amt, allow_magic = FALSE)
SHOULD_CALL_PARENT(TRUE)
+ if(roundstart && world.time-SSticker.round_start_time >= 2 MINUTES)
+ return FALSE
if(occurrences >= max_occurrences)
return FALSE
if(earliest_start >= world.time-SSticker.round_start_time)
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
new file mode 100644
index 000000000000..0f2c2f457862
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -0,0 +1,99 @@
+/datum/round_event_control/antagonist
+ reoccurence_penalty_multiplier = 0
+ track = EVENT_TRACK_ROLESET
+ /// Protected roles from the antag roll. People will not get those roles if a config is enabled
+ var/list/protected_roles
+ /// Restricted roles from the antag roll
+ var/list/restricted_roles
+
+/datum/round_event_control/antagonist/New()
+ . = ..()
+ if(CONFIG_GET(flag/protect_roles_from_antagonist))
+ restricted_roles |= protected_roles
+
+/datum/round_event_control/antagonist/can_spawn_event(popchecks = TRUE, allow_magic)
+ . = ..()
+ if(!.)
+ return
+ if(!roundstart && !SSgamemode.can_inject_antags())
+ return FALSE
+
+/datum/round_event_control/antagonist/solo
+ typepath = /datum/round_event/antagonist/solo
+ /// How many baseline antags do we spawn
+ var/base_antags = 1
+ /// How many maximum antags can we spawn
+ var/maximum_antags = 3
+ /// For this many players we'll add 1 up to the maximum antag amount
+ var/denominator = 20
+ /// The antag flag to be used
+ var/antag_flag
+ /// The antag datum to be applied
+ var/antag_datum
+ /// Prompt players for consent to turn them into antags before doing so. Dont allow this for roundstart.
+ var/prompted_picking = FALSE
+
+/datum/round_event_control/antagonist/solo/can_spawn_event(popchecks = TRUE, allow_magic)
+ . = ..()
+ if(!.)
+ return
+ var/antag_amt = get_antag_amount()
+ var/list/candidates = get_candidates()
+ if(candidates.len < antag_amt)
+ return FALSE
+
+/datum/round_event_control/antagonist/solo/proc/get_antag_amount()
+ var/people = SSgamemode.get_correct_popcount()
+ var/amount = base_antags + FLOOR(people / denominator, 1)
+ return min(amount, maximum_antags)
+
+/datum/round_event_control/antagonist/solo/proc/get_candidates()
+ var/round_started = SSticker.HasRoundStarted()
+ var/new_players_arg = round_started ? FALSE : TRUE
+ var/living_players_arg = round_started ? TRUE : FALSE
+ var/midround_antag_pref_arg = round_started ? FALSE : TRUE
+
+ var/list/candidates = SSgamemode.get_candidates(antag_flag, antag_flag, ready_newplayers = new_players_arg, living_players = living_players_arg, midround_antag_pref = midround_antag_pref_arg, restricted_roles = restricted_roles)
+ return candidates
+
+/datum/round_event/antagonist
+ fakeable = FALSE
+ end_when = 60 //This is so prompted picking events have time to run //TODO: refactor events so they can be the masters of themselves, instead of relying on some weirdly timed vars
+
+/datum/round_event/antagonist/solo
+ // ALL of those variables are internal. Check the control event to change them
+ /// The antag flag passed from control
+ var/antag_flag
+ /// The antag datum passed from control
+ var/antag_datum
+ /// The antag count passed from control
+ var/antag_count
+ /// The restricted roles (jobs) passed from control
+ var/list/restricted_roles
+ /// The minds we've setup in setup() and need to finalize in start()
+ var/list/setup_minds = list()
+ /// Whether we prompt the players before picking them.
+ var/prompted_picking = FALSE //TODO: Implement this
+
+/datum/round_event/antagonist/solo/setup()
+ var/datum/round_event_control/antagonist/solo/cast_control = control
+ antag_count = cast_control.get_antag_amount()
+ antag_flag = cast_control.antag_flag
+ antag_datum = cast_control.antag_datum
+ restricted_roles = cast_control.restricted_roles
+ prompted_picking = cast_control.prompted_picking
+ var/list/candidates = cast_control.get_candidates()
+ for(var/i in 1 to antag_count)
+ if(!candidates.len)
+ break
+ var/mob/candidate = pick_n_take(candidates)
+ setup_minds += candidate.mind
+ candidate.mind.special_role = antag_flag
+ candidate.mind.restricted_roles = restricted_roles
+
+/datum/round_event/antagonist/solo/start()
+ for(var/datum/mind/antag_mind as anything in setup_minds)
+ add_datum_to_mind(antag_mind)
+
+/datum/round_event/antagonist/solo/proc/add_datum_to_mind(datum/mind/antag_mind)
+ antag_mind.add_antag_datum(antag_datum)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm
new file mode 100644
index 000000000000..a34fe92bb3ce
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm
@@ -0,0 +1,29 @@
+/datum/round_event_control/antagonist/solo/changeling
+ antag_flag = ROLE_CHANGELING
+ antag_datum = /datum/antagonist/changeling
+ protected_roles = list(
+ JOB_CAPTAIN,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ )
+ min_players = 20
+
+/datum/round_event_control/antagonist/solo/changeling/roundstart
+ name = "Changelings"
+ roundstart = TRUE
+ earliest_start = 0
+
+/datum/round_event_control/antagonist/solo/changeling/midround
+ name = "Genome Awakening (Changelings)"
+ prompted_picking = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm b/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm
new file mode 100644
index 000000000000..070845820619
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm
@@ -0,0 +1,31 @@
+/datum/round_event_control/antagonist/solo/heretic
+ antag_flag = ROLE_HERETIC
+ antag_datum = /datum/antagonist/heretic
+ protected_roles = list(
+ JOB_CAPTAIN,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ )
+ weight = 4
+ min_players = 20
+
+/datum/round_event_control/antagonist/solo/heretic/roundstart
+ name = "Heretics"
+ roundstart = TRUE
+ earliest_start = 0
+
+/datum/round_event_control/antagonist/solo/heretic/midround
+ name = "Midround Heretics"
+ prompted_picking = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm
new file mode 100644
index 000000000000..f48a4ff726a1
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm
@@ -0,0 +1,28 @@
+/datum/round_event_control/antagonist/solo/traitor
+ antag_flag = ROLE_TRAITOR
+ antag_datum = /datum/antagonist/traitor
+ protected_roles = list(
+ JOB_CAPTAIN,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ )
+
+/datum/round_event_control/antagonist/solo/traitor/roundstart
+ name = "Traitors"
+ roundstart = TRUE
+ earliest_start = 0 SECONDS
+
+/datum/round_event_control/antagonist/solo/traitor/midround
+ name = "Sleeper Agents (Traitors)"
+ prompted_picking = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
new file mode 100644
index 000000000000..081dbf45f4f3
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
@@ -0,0 +1,27 @@
+/datum/round_event_control/antagonist/solo/wizard
+ name = "Wizard"
+ typepath = /datum/round_event/antagonist/solo/wizard
+ antag_flag = ROLE_WIZARD
+ antag_datum = /datum/antagonist/wizard
+ restricted_roles = list(
+ JOB_CAPTAIN,
+ JOB_HEAD_OF_SECURITY,
+ ) // Just to be sure that a wizard getting picked won't ever imply a Captain or HoS not getting drafted
+ maximum_antags = 1
+ roundstart = TRUE
+ weight = 2
+ min_players = 35
+ max_occurrences = 1
+
+/datum/round_event_control/antagonist/solo/wizard/can_spawn_event(popchecks = TRUE, allow_magic)
+ . = ..()
+ if(!.)
+ return
+ if(GLOB.wizardstart.len == 0)
+ return FALSE
+
+/datum/round_event/antagonist/solo/wizard
+
+/datum/round_event/antagonist/solo/wizard/add_datum_to_mind(datum/mind/antag_mind)
+ . = ..()
+ antag_mind.current.forceMove(pick(GLOB.wizardstart))
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 6b69e3f0e1a9..66b617ec63c8 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -165,6 +165,7 @@ SUBSYSTEM_DEF(gamemode)
uncategorized += event
continue
event_pools[event.track] += event //Add it to the categorized event pools
+
// return ..()
@@ -244,8 +245,8 @@ SUBSYSTEM_DEF(gamemode)
if(time_to_check && candidate.client.get_remaining_days(time_to_check) > 0)
continue
- if(midround_antag_pref)
- continue
+ //if(midround_antag_pref)
+ //continue
if(job_ban && is_banned_from(candidate.ckey, list(job_ban, ROLE_SYNDICATE)))
continue
@@ -738,19 +739,21 @@ SUBSYSTEM_DEF(gamemode)
if((storyboy.population_min && storyboy.population_min > client_amount) || (storyboy.population_max && storyboy.population_max < client_amount))
continue
choices += storyboy.name
+ choices[storyboy.name] = 0
///Because the vote subsystem is dumb and does not support any descriptions, we dump them into world.
to_chat(world, span_notice("[storyboy.name] "))
to_chat(world, span_notice("[storyboy.desc]"))
return choices
+/datum/controller/subsystem/gamemode/proc/storyteller_desc(storyteller_name)
+ for(var/storyteller_type in storytellers)
+ var/datum/storyteller/storyboy = storytellers[storyteller_type]
+ if(storyboy.name != storyteller_name)
+ continue
+ return storyboy.desc
+
+
/datum/controller/subsystem/gamemode/proc/storyteller_vote_result(winner_name)
- /// Find the winner
- /// Hijacking the proc because we don't have a vote right now..
- var/datum/storyteller/storyteller = pick(storytellers)
- message_admins("We picked [storyteller]")
- voted_storyteller = storyteller
- if(storyteller)
- return
for(var/storyteller_type in storytellers)
var/datum/storyteller/storyboy = storytellers[storyteller_type]
if(storyboy.name == winner_name)
@@ -758,12 +761,6 @@ SUBSYSTEM_DEF(gamemode)
break
/datum/controller/subsystem/gamemode/proc/init_storyteller()
- /// Hijacking the proc because we don't have a vote right now..
- var/datum/storyteller/storyteller_pick = pick(storytellers)
- message_admins("We picked [storyteller_pick] for this rounds storyteller, randomly.")
- voted_storyteller = storyteller_pick
- if(storyteller) // If this is true, then an admin bussed one, don't overwrite it
- return
set_storyteller(voted_storyteller)
/datum/controller/subsystem/gamemode/proc/set_storyteller(passed_type)
diff --git a/monkestation/code/modules/storytellers/storytellers/jester.dm b/monkestation/code/modules/storytellers/storytellers/jester.dm
index 83de9ea12245..a85dd5329110 100644
--- a/monkestation/code/modules/storytellers/storytellers/jester.dm
+++ b/monkestation/code/modules/storytellers/storytellers/jester.dm
@@ -10,4 +10,4 @@
EVENT_TRACK_ROLESET = 1,
EVENT_TRACK_OBJECTIVES = 1
)
- population_min = 10
+ //population_min = 10
diff --git a/monkestation/code/modules/storytellers/storytellers/vote.dm b/monkestation/code/modules/storytellers/storytellers/vote.dm
index 6bf8ebc10bc3..705b9a5f733b 100644
--- a/monkestation/code/modules/storytellers/storytellers/vote.dm
+++ b/monkestation/code/modules/storytellers/storytellers/vote.dm
@@ -1,4 +1,30 @@
+/datum/vote/var/has_desc = FALSE
+
+/datum/vote/proc/return_desc(vote_name)
+ return ""
+
/datum/vote/storyteller
-/datum/vote/storyteller/can_be_initiated(forced)
- choices = SSgamemode.storyteller_vote_choices()
+ name = "Storyteller"
+ message = "Vote for the storyteller!"
+ has_desc = TRUE
+
+
+/datum/vote/storyteller/New()
. = ..()
+ default_choices = list()
+ default_choices = SSgamemode.storyteller_vote_choices()
+
+
+/datum/vote/storyteller/return_desc(vote_name)
+ return SSgamemode.storyteller_desc(vote_name)
+
+/datum/vote/storyteller/create_vote()
+ . = ..()
+ if((length(choices) == 1)) // Only one choice, no need to vote. Let's just auto-rotate it to the only remaining map because it would just happen anyways.
+ var/de_facto_winner = choices[1]
+ SSgamemode.storyteller_vote_result(de_facto_winner)
+ to_chat(world, span_boldannounce("The storyteller vote has been skipped because there is only one storyteller left to vote for. The map has been changed to [de_facto_winner]."))
+ return FALSE
+
+/datum/vote/storyteller/finalize_vote(winning_option)
+ SSgamemode.storyteller_vote_result(winning_option)
diff --git a/monkestation/code/modules/storytellers/storytellers/warrior.dm b/monkestation/code/modules/storytellers/storytellers/warrior.dm
index d1eb510aac66..e54c94992977 100644
--- a/monkestation/code/modules/storytellers/storytellers/warrior.dm
+++ b/monkestation/code/modules/storytellers/storytellers/warrior.dm
@@ -9,4 +9,4 @@
EVENT_TRACK_OBJECTIVES = 1
)
tag_multipliers = list(TAG_COMBAT = 1.5)
- population_min = 10
+ //population_min = 10
diff --git a/tgstation.dme b/tgstation.dme
index 6d1c436cfc1b..de1d24cd0818 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6270,6 +6270,10 @@
#include "monkestation\code\modules\storytellers\config.dm"
#include "monkestation\code\modules\storytellers\gamemode_subsystem.dm"
#include "monkestation\code\modules\storytellers\scheduled_events.dm"
+#include "monkestation\code\modules\storytellers\converted_events\_base_event.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\changeling.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\traitor.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\wizard.dm"
#include "monkestation\code\modules\storytellers\storytellers\_storyteller.dm"
#include "monkestation\code\modules\storytellers\storytellers\ghost.dm"
#include "monkestation\code\modules\storytellers\storytellers\jester.dm"
diff --git a/tgui/packages/tgui/interfaces/VotePanel.tsx b/tgui/packages/tgui/interfaces/VotePanel.tsx
index 0b4dfbe76383..13eacc5d1a9f 100644
--- a/tgui/packages/tgui/interfaces/VotePanel.tsx
+++ b/tgui/packages/tgui/interfaces/VotePanel.tsx
@@ -19,6 +19,7 @@ type Vote = {
type Option = {
name: string;
votes: number;
+ desc: string;
};
type ActiveVote = {
@@ -180,6 +181,7 @@ const ChoicesPanel = (props, context) => {
textAlign="right"
buttons={
{
act('voteSingle', { voteOption: choice.name });
@@ -217,6 +219,7 @@ const ChoicesPanel = (props, context) => {
textAlign="right"
buttons={
{
act('voteMulti', { voteOption: choice.name });
}}>
From 0ac3fb7c1c76b46e1f6d54485353266a87a91a68 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 01:39:43 -0400
Subject: [PATCH 05/85] coolshit
---
code/controllers/subsystem/ticker.dm | 1 +
code/modules/events/_event.dm | 3 +-
.../converted_events/_base_event.dm | 40 +++++++++++++++++++
.../converted_events/solo/malf.dm | 37 +++++++++++++++++
.../storytellers/gamemode_subsystem.dm | 2 +-
.../storytellers/storytellers/_storyteller.dm | 4 ++
tgstation.dme | 1 +
7 files changed, 86 insertions(+), 2 deletions(-)
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/malf.dm
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 0bd73935655e..f601e1414673 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -299,6 +299,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/PostSetup()
set waitfor = FALSE
+ SSgamemode.storyteller.round_started = TRUE
mode.post_setup()
GLOB.start_state = new /datum/station_state()
GLOB.start_state.count()
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index a6d2092990d7..75a394f4ec1e 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -123,7 +123,8 @@
// We sleep HERE, in pre-event setup (because there's no sense doing it in runEvent() since the event is already running!) for the given amount of time to make an admin has enough time to cancel an event un-fitting of the present round.
if(alert_observers)
message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL )")
- sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)
+ if(!roundstart)
+ sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)
var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE)
if(!can_spawn_event(players_amt))
message_admins("Second pre-condition check for [name] failed, skipping...")
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 0f2c2f457862..c57228f9f836 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -1,10 +1,43 @@
/datum/round_event_control/antagonist
reoccurence_penalty_multiplier = 0
track = EVENT_TRACK_ROLESET
+ ///list of required roles, needed for this to form
+ var/list/exclusive_roles
/// Protected roles from the antag roll. People will not get those roles if a config is enabled
var/list/protected_roles
/// Restricted roles from the antag roll
var/list/restricted_roles
+ /// List of enemy roles, will check if x amount of these exist exist
+ var/list/enemy_roles
+ ///required number of enemies in roles to exist
+ var/required_enemies = 0
+
+/datum/round_event_control/antagonist/proc/check_required()
+ if(roundstart)
+ return TRUE ///FIX LATER
+
+ for (var/mob/M in GLOB.alive_player_list)
+ if (M.stat == DEAD)
+ continue // Dead players cannot count as passing requirements
+ if(M.mind && (M.mind.assigned_role.title in exclusive_roles))
+ return TRUE
+
+/datum/round_event_control/antagonist/proc/trim_candidates(list/candidates)
+ return candidates
+
+/datum/round_event_control/antagonist/proc/check_enemies()
+ if(roundstart)
+ return TRUE ///FIX LATER
+
+ if(!length(enemy_roles))
+ return TRUE
+ var/job_check = 0
+ for (var/mob/M in GLOB.alive_player_list)
+ if (M.stat == DEAD)
+ continue // Dead players cannot count as opponents
+ if (M.mind && (M.mind.assigned_role.title in enemy_roles))
+ job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
+ return job_check >= required_enemies
/datum/round_event_control/antagonist/New()
. = ..()
@@ -13,6 +46,11 @@
/datum/round_event_control/antagonist/can_spawn_event(popchecks = TRUE, allow_magic)
. = ..()
+ if(!check_enemies())
+ return FALSE
+ if(!check_required())
+ return FALSE
+
if(!.)
return
if(!roundstart && !SSgamemode.can_inject_antags())
@@ -54,6 +92,7 @@
var/midround_antag_pref_arg = round_started ? FALSE : TRUE
var/list/candidates = SSgamemode.get_candidates(antag_flag, antag_flag, ready_newplayers = new_players_arg, living_players = living_players_arg, midround_antag_pref = midround_antag_pref_arg, restricted_roles = restricted_roles)
+ candidates = trim_candidates(candidates)
return candidates
/datum/round_event/antagonist
@@ -83,6 +122,7 @@
restricted_roles = cast_control.restricted_roles
prompted_picking = cast_control.prompted_picking
var/list/candidates = cast_control.get_candidates()
+
for(var/i in 1 to antag_count)
if(!candidates.len)
break
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
new file mode 100644
index 000000000000..e9f9d446399c
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
@@ -0,0 +1,37 @@
+/datum/round_event_control/antagonist/solo/malf
+ antag_datum = /datum/antagonist/malf_ai
+ antag_flag = ROLE_MALF
+ enemy_roles = list(
+ JOB_CHEMIST,
+ JOB_CHIEF_ENGINEER,
+ JOB_HEAD_OF_SECURITY,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_SCIENTIST,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ exclusive_roles = list(JOB_AI)
+ required_enemies = 4
+ weight = 2
+
+/datum/round_event_control/antagonist/solo/malf/trim_candidates(list/candidates)
+ for(var/mob/living/player in candidates)
+ if(!isAI(player))
+ candidates -= player
+ continue
+
+ if(is_centcom_level(player.z))
+ candidates -= player
+ continue
+
+ if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0))
+ candidates -= player
+
+ return candidates
+
+/datum/round_event_control/antagonist/solo/malf/midround
+ name = "Malfunctioning AI Midround"
+ antag_flag = ROLE_MALF_MIDROUND
+
+/datum/round_event_control/antagonist/solo/malf/roundstart
+ name = "Roundstart Malf AI"
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 66b617ec63c8..af53c8bf9f31 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -485,7 +485,7 @@ SUBSYSTEM_DEF(gamemode)
/datum/controller/subsystem/gamemode/proc/pre_setup()
calculate_ready_players()
roll_pre_setup_points()
- handle_pre_setup_roundstart_events()
+ //handle_pre_setup_roundstart_events()
return TRUE
///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index 9910b47a1272..1fcdb4d889eb 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -46,8 +46,12 @@
var/population_min
/// If defined, it will not be votable if exceeding the population
var/population_max
+ /// has the round gotten to the point where jobs are pre-created?
+ var/round_started = FALSE
/datum/storyteller/process(delta_time)
+ if(!round_started) // we are differing roundstarted ones until base roundstart so we can get cooler stuff
+ return
if(disable_distribution)
return
add_points(delta_time)
diff --git a/tgstation.dme b/tgstation.dme
index de1d24cd0818..3891b38072e9 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6272,6 +6272,7 @@
#include "monkestation\code\modules\storytellers\scheduled_events.dm"
#include "monkestation\code\modules\storytellers\converted_events\_base_event.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\changeling.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\malf.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\traitor.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\wizard.dm"
#include "monkestation\code\modules\storytellers\storytellers\_storyteller.dm"
From 0ddc266e00e924429bd4bf90f45be175b7af5747 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 01:40:15 -0400
Subject: [PATCH 06/85] was fixed
---
.../modules/storytellers/converted_events/_base_event.dm | 6 ------
1 file changed, 6 deletions(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index c57228f9f836..f75bbf3a425c 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -13,9 +13,6 @@
var/required_enemies = 0
/datum/round_event_control/antagonist/proc/check_required()
- if(roundstart)
- return TRUE ///FIX LATER
-
for (var/mob/M in GLOB.alive_player_list)
if (M.stat == DEAD)
continue // Dead players cannot count as passing requirements
@@ -26,9 +23,6 @@
return candidates
/datum/round_event_control/antagonist/proc/check_enemies()
- if(roundstart)
- return TRUE ///FIX LATER
-
if(!length(enemy_roles))
return TRUE
var/job_check = 0
From 41f44555c6a2cb48e2f520e86fb4ab673a0dd0d6 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 01:43:15 -0400
Subject: [PATCH 07/85] Update malf.dm
---
.../code/modules/storytellers/converted_events/solo/malf.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
index e9f9d446399c..af4dd9c2e6df 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
@@ -35,3 +35,5 @@
/datum/round_event_control/antagonist/solo/malf/roundstart
name = "Roundstart Malf AI"
+ roundstart = TRUE
+ earliest_start = 0
From 876513961768a5e1cd03f750d14e84f3c875e6ae Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 01:57:35 -0400
Subject: [PATCH 08/85] start of ghosts adds warrior
---
.../modules/storytellers/converted_events/_base_event.dm | 8 ++++++++
.../code/modules/storytellers/storytellers/jester.dm | 2 +-
.../code/modules/storytellers/storytellers/warrior.dm | 2 +-
tgstation.dme | 1 +
4 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index f75bbf3a425c..9b5f166759f7 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -65,6 +65,14 @@
/// Prompt players for consent to turn them into antags before doing so. Dont allow this for roundstart.
var/prompted_picking = FALSE
+/datum/round_event_control/antagonist/solo/ghost/get_candidates()
+ var/round_started = SSticker.HasRoundStarted()
+ var/midround_antag_pref_arg = round_started ? FALSE : TRUE
+
+ var/list/candidates = SSgamemode.get_candidates(antag_flag, antag_flag, observers = TRUE, midround_antag_pref = midround_antag_pref_arg, restricted_roles = restricted_roles)
+ candidates = trim_candidates(candidates)
+ return candidates
+
/datum/round_event_control/antagonist/solo/can_spawn_event(popchecks = TRUE, allow_magic)
. = ..()
if(!.)
diff --git a/monkestation/code/modules/storytellers/storytellers/jester.dm b/monkestation/code/modules/storytellers/storytellers/jester.dm
index a85dd5329110..83de9ea12245 100644
--- a/monkestation/code/modules/storytellers/storytellers/jester.dm
+++ b/monkestation/code/modules/storytellers/storytellers/jester.dm
@@ -10,4 +10,4 @@
EVENT_TRACK_ROLESET = 1,
EVENT_TRACK_OBJECTIVES = 1
)
- //population_min = 10
+ population_min = 10
diff --git a/monkestation/code/modules/storytellers/storytellers/warrior.dm b/monkestation/code/modules/storytellers/storytellers/warrior.dm
index e54c94992977..d1eb510aac66 100644
--- a/monkestation/code/modules/storytellers/storytellers/warrior.dm
+++ b/monkestation/code/modules/storytellers/storytellers/warrior.dm
@@ -9,4 +9,4 @@
EVENT_TRACK_OBJECTIVES = 1
)
tag_multipliers = list(TAG_COMBAT = 1.5)
- //population_min = 10
+ population_min = 10
diff --git a/tgstation.dme b/tgstation.dme
index 3891b38072e9..accfeacaa66e 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6280,6 +6280,7 @@
#include "monkestation\code\modules\storytellers\storytellers\jester.dm"
#include "monkestation\code\modules\storytellers\storytellers\sleeper.dm"
#include "monkestation\code\modules\storytellers\storytellers\vote.dm"
+#include "monkestation\code\modules\storytellers\storytellers\warrior.dm"
#include "monkestation\code\modules\surgery\bodyparts\arachnid_bodyparts.dm"
#include "monkestation\code\modules\surgery\bodyparts\clockwork_bodyparts.dm"
#include "monkestation\code\modules\surgery\bodyparts\ipc_bodyparts.dm"
From af5c38a5345c4df61d858cadee591b97082a76ec Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 15:44:36 -0400
Subject: [PATCH 09/85] blood cult and nuke op
---
code/__HELPERS/roundend.dm | 1 +
.../converted_events/_base_event.dm | 13 +++
.../converted_events/solo/bloodcult.dm | 71 ++++++++++++++
.../solo/nuclear_operative.dm | 93 +++++++++++++++++++
.../converted_events/solo/revolutionary.dm | 64 +++++++++++++
.../storytellers/gamemode_subsystem.dm | 9 ++
tgstation.dme | 3 +
7 files changed, 254 insertions(+)
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index eed6ad7d1d12..92b44389cf9a 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -236,6 +236,7 @@ GLOBAL_LIST_INIT(round_end_images, world.file2list("data/image_urls.txt"))
//Set news report and mode result
mode.set_round_result()
+ SSgamemode.round_end_report()
to_chat(world, span_infoplain(span_big(span_bold(" The round has ended."))))
log_game("The round has ended.")
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 9b5f166759f7..1a37e3f1f896 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -13,6 +13,8 @@
var/required_enemies = 0
/datum/round_event_control/antagonist/proc/check_required()
+ if(!length(exclusive_roles))
+ return TRUE
for (var/mob/M in GLOB.alive_player_list)
if (M.stat == DEAD)
continue // Dead players cannot count as passing requirements
@@ -97,6 +99,17 @@
candidates = trim_candidates(candidates)
return candidates
+/datum/round_event
+ var/excute_round_end_reports = FALSE
+
+/datum/round_event/proc/round_end_report()
+ return
+
+/datum/round_event/setup()
+ . = ..()
+ if(excute_round_end_reports)
+ SSgamemode.round_end_data |= src
+
/datum/round_event/antagonist
fakeable = FALSE
end_when = 60 //This is so prompted picking events have time to run //TODO: refactor events so they can be the masters of themselves, instead of relying on some weirdly timed vars
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
new file mode 100644
index 000000000000..629d845e2d24
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
@@ -0,0 +1,71 @@
+/datum/round_event_control/antagonist/solo/bloodcult
+ name = "Blood Cult"
+ antag_flag = ROLE_CULTIST
+ antag_datum = /datum/antagonist/cult
+ typepath = /datum/round_event/antagonist/solo/bloodcult
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CAPTAIN,
+ JOB_CHAPLAIN,
+ JOB_CYBORG,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ maximum_antags = 3
+ enemy_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = 3
+ base_antags = 2
+ // I give up, just there should be enough heads with 35 players...
+ min_players = 30
+ roundstart = TRUE
+ earliest_start = 0 SECONDS
+
+/datum/round_event/antagonist/solo/bloodcult
+ excute_round_end_reports = TRUE
+ end_when = 60000
+ var/static/datum/team/cult/main_cult
+
+/datum/round_event/antagonist/solo/bloodcult/setup()
+ . = ..()
+ if(!main_cult)
+ main_cult = new()
+
+/datum/round_event/antagonist/solo/bloodcult/add_datum_to_mind(datum/mind/antag_mind)
+ var/datum/antagonist/cult/new_cultist = new antag_datum()
+ new_cultist.cult_team = main_cult
+ new_cultist.give_equipment = TRUE
+ antag_mind.add_antag_datum(new_cultist)
+ main_cult.setup_objectives()
+
+/datum/round_event/antagonist/solo/bloodcult/round_end_report()
+ if(main_cult.check_cult_victory())
+ SSticker.mode_result = "win - cult win"
+ SSticker.news_report = CULT_SUMMON
+ return
+
+ SSticker.mode_result = "loss - staff stopped the cult"
+
+ if(main_cult.size_at_maximum == 0)
+ CRASH("Cult team existed with a size_at_maximum of 0 at round end!")
+
+ // If more than a certain ratio of our cultists have escaped, give the "cult escape" resport.
+ // Otherwise, give the "cult failure" report.
+ var/ratio_to_be_considered_escaped = 0.5
+ var/escaped_cultists = 0
+ for(var/datum/mind/escapee as anything in main_cult.members)
+ if(considered_escaped(escapee))
+ escaped_cultists++
+
+ SSticker.news_report = (escaped_cultists / main_cult.size_at_maximum) >= ratio_to_be_considered_escaped ? CULT_ESCAPE : CULT_FAILURE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
new file mode 100644
index 000000000000..069603af4188
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
@@ -0,0 +1,93 @@
+/datum/round_event_control/antagonist/solo/nuclear_operative
+ name = "Roundstart Nuclear Operative"
+ antag_flag = ROLE_OPERATIVE
+ antag_datum = /datum/antagonist/nukeop
+ typepath = /datum/round_event/antagonist/solo/nuclear_operative
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CAPTAIN,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_CYBORG,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ base_antags = 3
+ maximum_antags = 5
+ enemy_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = 5
+ // I give up, just there should be enough heads with 35 players...
+ min_players = 35
+ roundstart = TRUE
+ earliest_start = 0 SECONDS
+
+/datum/round_event/antagonist/solo/nuclear_operative
+ excute_round_end_reports = TRUE
+ end_when = 60000 /// we will end on our own when revs win
+ var/static/datum/team/nuclear/nuke_team
+ var/datum/antagonist/antag_leader_datum = /datum/antagonist/nukeop/leader
+ var/set_leader = FALSE
+
+/datum/round_event/antagonist/solo/nuclear_operative/add_datum_to_mind(datum/mind/antag_mind)
+ var/datum/mind/most_experienced = get_most_experienced(assigned, required_role)
+ if(!most_experienced)
+ most_experienced = antag_mind
+
+ if(!set_leader)
+ set_leader = TRUE
+ var/datum/antagonist/nukeop/leader/leader = most_experienced.add_antag_datum(antag_leader_datum)
+ nuke_team = leader.nuke_team
+
+ if(antag_mind == most_experienced)
+ return
+
+ var/datum/antagonist/nukeop/new_op = new antag_datum()
+ antag_mind.add_antag_datum(new_op)
+
+
+/datum/round_event/antagonist/solo/revolutionary/round_end_report()
+ var/result = nuke_team.get_result()
+ switch(result)
+ if(NUKE_RESULT_FLUKE)
+ SSticker.mode_result = "loss - syndicate nuked - disk secured"
+ SSticker.news_report = NUKE_SYNDICATE_BASE
+ if(NUKE_RESULT_NUKE_WIN)
+ SSticker.mode_result = "win - syndicate nuke"
+ SSticker.news_report = STATION_DESTROYED_NUKE
+ if(NUKE_RESULT_NOSURVIVORS)
+ SSticker.mode_result = "halfwin - syndicate nuke - did not evacuate in time"
+ SSticker.news_report = STATION_DESTROYED_NUKE
+ if(NUKE_RESULT_WRONG_STATION)
+ SSticker.mode_result = "halfwin - blew wrong station"
+ SSticker.news_report = NUKE_MISS
+ if(NUKE_RESULT_WRONG_STATION_DEAD)
+ SSticker.mode_result = "halfwin - blew wrong station - did not evacuate in time"
+ SSticker.news_report = NUKE_MISS
+ if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD)
+ SSticker.mode_result = "loss - evacuation - disk secured - syndi team dead"
+ SSticker.news_report = OPERATIVES_KILLED
+ if(NUKE_RESULT_CREW_WIN)
+ SSticker.mode_result = "loss - evacuation - disk secured"
+ SSticker.news_report = OPERATIVES_KILLED
+ if(NUKE_RESULT_DISK_LOST)
+ SSticker.mode_result = "halfwin - evacuation - disk not secured"
+ SSticker.news_report = OPERATIVE_SKIRMISH
+ if(NUKE_RESULT_DISK_STOLEN)
+ SSticker.mode_result = "halfwin - detonation averted"
+ SSticker.news_report = OPERATIVE_SKIRMISH
+ else
+ SSticker.mode_result = "halfwin - interrupted"
+ SSticker.news_report = OPERATIVE_SKIRMISH
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
new file mode 100644
index 000000000000..37a4f44ed0b3
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
@@ -0,0 +1,64 @@
+/datum/round_event_control/antagonist/solo/revolutionary
+ name = "Roundstart Revolution"
+ antag_flag = ROLE_REV_HEAD
+ antag_datum = /datum/antagonist/rev/head/event_trigger
+ typepath = /datum/round_event/antagonist/solo/revolutionary
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CAPTAIN,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_CYBORG,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ base_antags = 2
+ enemy_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = 3
+ // I give up, just there should be enough heads with 35 players...
+ min_players = 35
+ roundstart = TRUE
+ earliest_start = 0 SECONDS
+
+/datum/antagonist/rev/head/event_trigger
+ remove_clumsy = TRUE
+ give_flash = TRUE
+
+/datum/round_event/antagonist/solo/revolutionary
+ excute_round_end_reports = TRUE
+ end_when = 60000 /// we will end on our own when revs win
+ var/static/datum/team/revolution/revolution
+ var/static/finished = FALSE
+
+/datum/round_event/antagonist/solo/revolutionary/setup()
+ . = ..()
+ if(!revolution)
+ revolution = new()
+
+/datum/round_event/antagonist/solo/revolutionary/add_datum_to_mind(datum/mind/antag_mind)
+ antag_mind.add_antag_datum(antag_datum, revolution)
+ if(revolution.members.len)
+ revolution.update_objectives()
+ revolution.update_heads()
+ SSshuttle.registerHostileEnvironment(revolution)
+
+
+/datum/round_event/antagonist/solo/revolutionary/round_end_report()
+ var/winner = revolution.process_victory()
+ if (isnull(winner))
+ return
+ finished = TRUE
+ revolution.round_result(finished)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index af53c8bf9f31..0205bd0c907a 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -110,6 +110,7 @@ SUBSYSTEM_DEF(gamemode)
var/list/control = list() //list of all datum/round_event_control. Used for selecting events based on weight and occurrences.
var/list/running = list() //list of all existing /datum/round_event
+ var/list/round_end_data = list() //list of all reports that need to add round end reports
var/list/currentrun = list()
/// List of all uncategorized events, because they were wizard or holiday events
@@ -1065,3 +1066,11 @@ SUBSYSTEM_DEF(gamemode)
if(new_category in EVENT_PANEL_TRACKS)
statistics_track_page = new_category
event_panel(user)
+
+/datum/controller/subsystem/gamemode/proc/round_end_report()
+ if(!length(round_end_data))
+ return
+ for(var/datum/round_event/event as anything in round_end_data)
+ if(!istype(event))
+ continue
+ event.round_end_report()
diff --git a/tgstation.dme b/tgstation.dme
index accfeacaa66e..22dc85e513a5 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6271,8 +6271,11 @@
#include "monkestation\code\modules\storytellers\gamemode_subsystem.dm"
#include "monkestation\code\modules\storytellers\scheduled_events.dm"
#include "monkestation\code\modules\storytellers\converted_events\_base_event.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\bloodcult.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\changeling.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\malf.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\nuclear_operative.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\revolutionary.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\traitor.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\wizard.dm"
#include "monkestation\code\modules\storytellers\storytellers\_storyteller.dm"
From 7226eca3d75cc2f7e17a2dc69240750075cbf525 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 15:45:16 -0400
Subject: [PATCH 10/85] Update nuclear_operative.dm
---
.../storytellers/converted_events/solo/nuclear_operative.dm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
index 069603af4188..7cc3e440a855 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
@@ -40,9 +40,10 @@
var/static/datum/team/nuclear/nuke_team
var/datum/antagonist/antag_leader_datum = /datum/antagonist/nukeop/leader
var/set_leader = FALSE
+ var/required_role = ROLE_NUCLEAR_OPERATIVE
/datum/round_event/antagonist/solo/nuclear_operative/add_datum_to_mind(datum/mind/antag_mind)
- var/datum/mind/most_experienced = get_most_experienced(assigned, required_role)
+ var/datum/mind/most_experienced = get_most_experienced(setup_minds, required_role)
if(!most_experienced)
most_experienced = antag_mind
@@ -58,7 +59,7 @@
antag_mind.add_antag_datum(new_op)
-/datum/round_event/antagonist/solo/revolutionary/round_end_report()
+/datum/round_event/antagonist/solo/nuclear_operative/round_end_report()
var/result = nuke_team.get_result()
switch(result)
if(NUKE_RESULT_FLUKE)
From 850723d7ff9c1b6e8ebc2eadf39726c2e2911a0a Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 15:54:58 -0400
Subject: [PATCH 11/85] whoops forgot to enable event system for admins
---
code/modules/admin/force_event.dm | 3 ++-
.../code/modules/storytellers/gamemode_subsystem.dm | 8 ++++----
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/code/modules/admin/force_event.dm b/code/modules/admin/force_event.dm
index 1c97936ac48d..e519d2f4ed8a 100644
--- a/code/modules/admin/force_event.dm
+++ b/code/modules/admin/force_event.dm
@@ -1,4 +1,5 @@
///Allows an admin to force an event
+/*
/client/proc/forceEvent()
set name = "Trigger Event"
set category = "Admin.Events"
@@ -15,7 +16,7 @@
var/datum/force_event/ui = new(usr)
ui.ui_interact(usr)
-
+*/
/// Force Event Panel
/datum/force_event
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 0205bd0c907a..77ba5f21a6df 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -417,15 +417,15 @@ SUBSYSTEM_DEF(gamemode)
/datum/controller/subsystem/gamemode/proc/resetFrequency()
event_frequency_multiplier = 1
-/* /client/proc/forceEvent()
+/client/proc/forceEvent()
set name = "Trigger Event"
set category = "Admin.Events"
if(!holder ||!check_rights(R_FUN))
return
- holder.forceEvent(usr) */
+ holder.forceEvent(usr)
-/* /datum/admins/forceEvent(mob/user)
- SSgamemode.event_panel(user) */
+/datum/admins/forceEvent(mob/user)
+ SSgamemode.event_panel(user)
//////////////
From 2b806a610bd897f76837a66ac59fe42c2e6840c0 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 15:55:32 -0400
Subject: [PATCH 12/85] whoopsie 2
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 77ba5f21a6df..b4e2fa3fd32a 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -424,7 +424,7 @@ SUBSYSTEM_DEF(gamemode)
return
holder.forceEvent(usr)
-/datum/admins/forceEvent(mob/user)
+/datum/admins/proc/forceEvent(mob/user)
SSgamemode.event_panel(user)
From 7e66c35842d5693cc59ed8d566af5c08fc9846e9 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 16:13:42 -0400
Subject: [PATCH 13/85] forgot to add handlers to actually buy events using the
event menu
---
code/modules/events/_event.dm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index 75a394f4ec1e..2694fc185bbc 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -302,6 +302,22 @@ Runs the event
return "Add Roundstart Force Roundstart "
else
return "Fire Schedule Force Next "
+
+
+/datum/round_event_control/Topic(href, href_list)
+ . = ..()
+ if(QDELETED(src))
+ return
+ switch(href_list["action"])
+ if("schedule")
+ message_admins("[key_name_admin(usr)] scheduled event [src.name].")
+ log_admin_private("[key_name(usr)] scheduled [src.name].")
+ SSgamemode.storyteller.buy_event(src, src.track)
+ if("force_next")
+ message_admins("[key_name_admin(usr)] force scheduled event [src.name].")
+ log_admin_private("[key_name(usr)] force scheduled event [src.name].")
+ SSgamemode.forced_next_events[src.track] += src
+
//monkestation addition ends - STORYTELLERS
//Called after something followable has been spawned by an event
From 6979fe63d5ce0005099144e397954db2761b9b9e Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 17:13:01 -0400
Subject: [PATCH 14/85] more stuff
---
code/modules/admin/admin_verbs.dm | 1 +
code/modules/events/_event.dm | 6 ++++--
code/modules/events/dust.dm | 4 ++--
.../modules/storytellers/gamemode_subsystem.dm | 17 ++++++++++++++---
.../storytellers/storytellers/_storyteller.dm | 13 ++++++++-----
5 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 86ca881ef3bc..c01ab9e5b21d 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -118,6 +118,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/drop_dynex_bomb,
/client/proc/flip_ghost_spawn,
/client/proc/forceEvent,
+ /client/proc/forceGamemode,
/client/proc/generate_bulk_code, //monkestation addition
/client/proc/generate_code, //monkestation addition
/client/proc/mass_add_metacoins, //monkestation addition
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index 2694fc185bbc..f50ae0620fb5 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -111,7 +111,7 @@
return TRUE
-/datum/round_event_control/proc/preRunEvent()
+/datum/round_event_control/proc/preRunEvent(forced = FALSE)
if(!ispath(typepath, /datum/round_event))
return EVENT_CANT_RUN
@@ -126,9 +126,11 @@
if(!roundstart)
sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)
var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE)
- if(!can_spawn_event(players_amt))
+ if(!can_spawn_event(players_amt) && !forced)
message_admins("Second pre-condition check for [name] failed, skipping...")
return EVENT_INTERRUPTED
+ if(!can_spawn_event(players_amt) && forced)
+ message_admins("Second pre-condition check for [name] failed, but event forced, running event regardless this may have issues...")
if(!triggering)
return EVENT_CANCELLED //admin cancelled
diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm
index 0ebe81a5ef5d..71f97a4e2fbc 100644
--- a/code/modules/events/dust.dm
+++ b/code/modules/events/dust.dm
@@ -1,8 +1,8 @@
/datum/round_event_control/space_dust
name = "Space Dust: Minor"
typepath = /datum/round_event/space_dust
- weight = 200
- max_occurrences = 1000
+ weight = 200 // why the hell was this so much
+ max_occurrences = 10
earliest_start = 0 MINUTES
alert_observers = FALSE
category = EVENT_CATEGORY_SPACE
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index b4e2fa3fd32a..ce49e5516de9 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -406,8 +406,8 @@ SUBSYSTEM_DEF(gamemode)
current_pop_scale_multipliers[track] = calculated_multiplier
-/datum/controller/subsystem/gamemode/proc/TriggerEvent(datum/round_event_control/event)
- . = event.preRunEvent()
+/datum/controller/subsystem/gamemode/proc/TriggerEvent(datum/round_event_control/event, forced = FALSE)
+ . = event.preRunEvent(forced)
if(. == EVENT_CANT_RUN)//we couldn't run this event for some reason, set its max_occurrences to 0
event.max_occurrences = 0
else if(. == EVENT_READY)
@@ -427,6 +427,16 @@ SUBSYSTEM_DEF(gamemode)
/datum/admins/proc/forceEvent(mob/user)
SSgamemode.event_panel(user)
+/client/proc/forceGamemode()
+ set name = "Open Gamemode Panel"
+ set category = "Admin.Events"
+ if(!holder ||!check_rights(R_FUN))
+ return
+ holder.forceGamemode(usr)
+
+/datum/admins/proc/forceGamemode(mob/user)
+ SSgamemode.admin_panel(user)
+
//////////////
// HOLIDAYS //
@@ -937,9 +947,10 @@ SUBSYSTEM_DEF(gamemode)
event_lookup = event_pools[statistics_track_page]
var/list/assoc_spawn_weight = list()
for(var/datum/round_event_control/event as anything in event_lookup)
+ var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
if(event.roundstart != roundstart_event_view)
continue
- if(event.can_spawn_event())
+ if(event.can_spawn_event(players_amt))
total_weight += event.calculated_weight
assoc_spawn_weight[event] = event.calculated_weight
else
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index 1fcdb4d889eb..3dd696870a9c 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -80,12 +80,14 @@
/// Find and buy a valid event from a track.
/datum/storyteller/proc/find_and_buy_event_from_track(track)
. = FALSE
+ var/are_forced = FALSE
var/datum/controller/subsystem/gamemode/mode = SSgamemode
var/datum/round_event_control/picked_event
if(mode.forced_next_events[track]) //Forced event by admin
/// Dont check any prerequisites, it has been forced by an admin
picked_event = mode.forced_next_events[track]
mode.forced_next_events -= track
+ are_forced = TRUE
else
mode.update_crew_infos()
var/pop_required = mode.min_pop_thresholds[track]
@@ -97,7 +99,8 @@
var/list/valid_events = list()
// Determine which events are valid to pick
for(var/datum/round_event_control/event as anything in mode.event_pools[track])
- if(event.can_spawn_event())
+ var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
+ if(event.can_spawn_event(players_amt))
valid_events[event] = event.calculated_weight
///If we didn't get any events, remove the points inform admins and dont do anything
if(!length(valid_events))
@@ -109,11 +112,11 @@
message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
stack_trace("WARNING: Storyteller picked a null from event pool.")
return
- buy_event(picked_event, track)
+ buy_event(picked_event, track, are_forced)
. = TRUE
/// Find and buy a valid event from a track.
-/datum/storyteller/proc/buy_event(datum/round_event_control/bought_event, track)
+/datum/storyteller/proc/buy_event(datum/round_event_control/bought_event, track, forced = FALSE)
var/datum/controller/subsystem/gamemode/mode = SSgamemode
// Perhaps use some bell curve instead of a flat variance?
var/total_cost = bought_event.cost * mode.point_thresholds[track]
@@ -122,9 +125,9 @@
mode.event_track_points[track] -= total_cost
message_admins("Storyteller purchased and triggered [bought_event] event, on [track] track, for [total_cost] cost.")
if(bought_event.roundstart)
- mode.TriggerEvent(bought_event)
+ mode.TriggerEvent(bought_event, forced)
else
- mode.schedule_event(bought_event, (rand(3, 4) MINUTES), total_cost)
+ mode.schedule_event(bought_event, (rand(3, 4) MINUTES), total_cost, _forced = forced)
/// Calculates the weights of the events from a passed track.
/datum/storyteller/proc/calculate_weights(track)
From b08518ece2480daf389a3b450c9c55e9e90efb2c Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 17:36:58 -0400
Subject: [PATCH 15/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index ce49e5516de9..2f61bff3dad2 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -392,7 +392,7 @@ SUBSYSTEM_DEF(gamemode)
var/high_pop_bound = pop_scale_thresholds[track]
var/scale_penalty = pop_scale_penalties[track]
- var/perceived_pop = min(max(low_pop_bound, active_players), high_pop_bound)
+ var/perceived_pop = max(low_pop_bound, active_players) // after max pop we start generating even more threat
var/divisor = high_pop_bound - low_pop_bound
/// If the bounds are equal, we'd be dividing by zero or worse, if upper is smaller than lower, we'd be increasing the factor, just make it 1 and continue.
@@ -972,7 +972,7 @@ SUBSYSTEM_DEF(gamemode)
dat += "[event.min_players] " //Minimum pop
dat += "[event.earliest_start / (1 MINUTES)] m. " //Minimum time
dat += "[assoc_spawn_weight[event] ? "Yes" : "No"] " //Can happen?
- var/weight_string = "([event.calculated_weight] /raw.[event.weight])"
+ var/weight_string = "(new.[event.calculated_weight] /raw.[event.weight])"
if(assoc_spawn_weight[event])
var/percent = round((event.calculated_weight / total_weight) * 100)
weight_string = "[percent]% - [weight_string]"
From 33302a152e8153c98bdaa6e0444e3bd8dd21588e Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 18:02:49 -0400
Subject: [PATCH 16/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 2f61bff3dad2..55e7a8ebcd91 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -348,7 +348,7 @@ SUBSYSTEM_DEF(gamemode)
// INVOKE_ASYNC(event, /datum/round_event.proc/try_start)
/// Schedules an event to run later.
-/datum/controller/subsystem/gamemode/proc/schedule_event(datum/round_event_control/passed_event, passed_time, passed_cost, passed_ignore, passed_announce)
+/datum/controller/subsystem/gamemode/proc/schedule_event(datum/round_event_control/passed_event, passed_time, passed_cost, passed_ignore, passed_announce, _forced = FALSE)
var/datum/scheduled_event/scheduled = new (passed_event, world.time + passed_time, passed_cost, passed_ignore, passed_announce)
var/round_started = SSticker.HasRoundStarted()
if(round_started)
From ce7b4db708814a46b365651416afb4e0fe5d01de Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 18:15:01 -0400
Subject: [PATCH 17/85] makes gamemode panel easier to understand slightly
---
.../code/modules/storytellers/gamemode_subsystem.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 55e7a8ebcd91..b0a835db52df 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -842,11 +842,11 @@ SUBSYSTEM_DEF(gamemode)
var/next = 0
var/last_points = last_point_gains[track]
if(last_points)
- next = round((upper - lower) / last_points / STORYTELLER_WAIT_TIME * 40 / 6) / 10
+ next = round(((upper - lower) / last_points / STORYTELLER_WAIT_TIME) / 60)
dat += ""
- dat += "[track] " //Track
+ dat += "[track] - [last_points] per process. " //Track
dat += "[percent]% ([lower]/[upper]) " //Progress
- dat += "~[next] m. " //Next
+ dat += "~[next] minutes " //Next
var/datum/round_event_control/forced_event = forced_next_events[track]
var/forced = forced_event ? "[forced_event.name] X " : ""
dat += "[forced] " //Forced
From 99348e62e6fac97230e64167042250217142b050 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 18:33:52 -0400
Subject: [PATCH 18/85] changes to make stuff work better
---
.../modules/storytellers/converted_events/_base_event.dm | 5 ++++-
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 4 ++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 1a37e3f1f896..2f45798d6117 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -33,7 +33,10 @@
continue // Dead players cannot count as opponents
if (M.mind && (M.mind.assigned_role.title in enemy_roles))
job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
- return job_check >= required_enemies
+
+ if(job_check >= required_enemies)
+ return TRUE
+ return FALSE
/datum/round_event_control/antagonist/New()
. = ..()
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index b0a835db52df..59e71901205f 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -842,11 +842,11 @@ SUBSYSTEM_DEF(gamemode)
var/next = 0
var/last_points = last_point_gains[track]
if(last_points)
- next = round(((upper - lower) / last_points / STORYTELLER_WAIT_TIME) / 60)
+ next = round(((upper - lower) / last_points / STORYTELLER_WAIT_TIME))
dat += " "
dat += "[track] - [last_points] per process. " //Track
dat += "[percent]% ([lower]/[upper]) " //Progress
- dat += "~[next] minutes " //Next
+ dat += "~[next] seconds " //Next
var/datum/round_event_control/forced_event = forced_next_events[track]
var/forced = forced_event ? "[forced_event.name] X " : ""
dat += "[forced] " //Forced
From 3ef8fd29abb9c24306ac7f3a9da5c75b50523708 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 19:37:29 -0400
Subject: [PATCH 19/85] fixes nukies and bloodcult
---
.../storytellers/converted_events/solo/bloodcult.dm | 5 ++++-
.../converted_events/solo/nuclear_operative.dm | 7 +++++++
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
index 629d845e2d24..edf232c2ad07 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
@@ -42,12 +42,15 @@
if(!main_cult)
main_cult = new()
+/datum/round_event/antagonist/solo/start()
+ . = ..()
+ main_cult.setup_objectives()
+
/datum/round_event/antagonist/solo/bloodcult/add_datum_to_mind(datum/mind/antag_mind)
var/datum/antagonist/cult/new_cultist = new antag_datum()
new_cultist.cult_team = main_cult
new_cultist.give_equipment = TRUE
antag_mind.add_antag_datum(new_cultist)
- main_cult.setup_objectives()
/datum/round_event/antagonist/solo/bloodcult/round_end_report()
if(main_cult.check_cult_victory())
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
index 7cc3e440a855..ea6d2d3869c5 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
@@ -43,6 +43,13 @@
var/required_role = ROLE_NUCLEAR_OPERATIVE
/datum/round_event/antagonist/solo/nuclear_operative/add_datum_to_mind(datum/mind/antag_mind)
+ var/mob/living/current_mob = antag_mind.current
+ SSjob.FreeRole(antag_mind.assigned_role.title)
+ var/list/items = current_mob.get_equipped_items(TRUE)
+ current_mob.unequip_everything()
+ for(var/obj/item/item as anything in items)
+ qdel(item)
+
var/datum/mind/most_experienced = get_most_experienced(setup_minds, required_role)
if(!most_experienced)
most_experienced = antag_mind
From 6d86b754c561914c804692294bd915523cbc6e1d Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 19:42:51 -0400
Subject: [PATCH 20/85] roundstart fixes
---
code/modules/events/_event.dm | 2 +-
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 3 +++
.../code/modules/storytellers/storytellers/_storyteller.dm | 1 +
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index f50ae0620fb5..1eb77ec047d1 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -88,7 +88,7 @@
// Admin-created events override this.
/datum/round_event_control/proc/can_spawn_event(players_amt, allow_magic = FALSE)
SHOULD_CALL_PARENT(TRUE)
- if(roundstart && world.time-SSticker.round_start_time >= 2 MINUTES)
+ if(roundstart && (world.time-SSticker.round_start_time >= 2 MINUTES || SSgamemode.ran_roundstart))
return FALSE
if(occurrences >= max_occurrences)
return FALSE
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 59e71901205f..8cbe9c73627e 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -141,6 +141,9 @@ SUBSYSTEM_DEF(gamemode)
var/wizardmode = FALSE
+ var/list/last_round_events = list()
+ var/ran_roundstart = FALSE
+
/datum/controller/subsystem/gamemode/Initialize(time, zlevel)
// Populate event pools
for(var/track in event_tracks)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index 3dd696870a9c..118bf844599f 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -125,6 +125,7 @@
mode.event_track_points[track] -= total_cost
message_admins("Storyteller purchased and triggered [bought_event] event, on [track] track, for [total_cost] cost.")
if(bought_event.roundstart)
+ SSgamemode.ran_roundstart = TRUE
mode.TriggerEvent(bought_event, forced)
else
mode.schedule_event(bought_event, (rand(3, 4) MINUTES), total_cost, _forced = forced)
From 59931f60004fc2720e5e58e03577747ae89661c9 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 19:45:33 -0400
Subject: [PATCH 21/85] Update _storyteller.dm
---
.../modules/storytellers/storytellers/_storyteller.dm | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index 118bf844599f..f1f433c9d8a4 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -48,12 +48,20 @@
var/population_max
/// has the round gotten to the point where jobs are pre-created?
var/round_started = FALSE
+ ///have we done roundstart checks?
+ var/roundstart_checks = FALSE
+ ///prob of roundstart antag
+ var/roundstart_prob = 25
/datum/storyteller/process(delta_time)
if(!round_started) // we are differing roundstarted ones until base roundstart so we can get cooler stuff
return
if(disable_distribution)
return
+ if(!guarantees_roundstart_roleset && prob(roundstart_prob) && !roundstart_checks)
+ roundstart_checks = TRUE
+ SSgamemode.ran_roundstart = TRUE
+
add_points(delta_time)
handle_tracks()
From 9cc1cf0637d9922b070c736ba9d7c329eff7213f Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 19:47:56 -0400
Subject: [PATCH 22/85] there we go jester is fucked
---
.../modules/storytellers/storytellers/_storyteller.dm | 8 ++++++--
.../code/modules/storytellers/storytellers/jester.dm | 1 +
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index f1f433c9d8a4..bfddfdec5d20 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -52,6 +52,8 @@
var/roundstart_checks = FALSE
///prob of roundstart antag
var/roundstart_prob = 25
+ ///do we ignore ran_roundstart
+ var/ignores_roundstart = FALSE
/datum/storyteller/process(delta_time)
if(!round_started) // we are differing roundstarted ones until base roundstart so we can get cooler stuff
@@ -60,7 +62,8 @@
return
if(!guarantees_roundstart_roleset && prob(roundstart_prob) && !roundstart_checks)
roundstart_checks = TRUE
- SSgamemode.ran_roundstart = TRUE
+ if(!ignores_roundstart)
+ SSgamemode.ran_roundstart = TRUE
add_points(delta_time)
handle_tracks()
@@ -133,7 +136,8 @@
mode.event_track_points[track] -= total_cost
message_admins("Storyteller purchased and triggered [bought_event] event, on [track] track, for [total_cost] cost.")
if(bought_event.roundstart)
- SSgamemode.ran_roundstart = TRUE
+ if(!ignores_roundstart)
+ SSgamemode.ran_roundstart = TRUE
mode.TriggerEvent(bought_event, forced)
else
mode.schedule_event(bought_event, (rand(3, 4) MINUTES), total_cost, _forced = forced)
diff --git a/monkestation/code/modules/storytellers/storytellers/jester.dm b/monkestation/code/modules/storytellers/storytellers/jester.dm
index 83de9ea12245..de7ef07e901c 100644
--- a/monkestation/code/modules/storytellers/storytellers/jester.dm
+++ b/monkestation/code/modules/storytellers/storytellers/jester.dm
@@ -11,3 +11,4 @@
EVENT_TRACK_OBJECTIVES = 1
)
population_min = 10
+ ignores_roundstart = TRUE
From 6c20d6467bb463616cfb6ebe5ff7f2ea2bf38683 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 19:53:12 -0400
Subject: [PATCH 23/85] Update bloodcult.dm
---
.../modules/storytellers/converted_events/solo/bloodcult.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
index edf232c2ad07..e7af43c5cc90 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
@@ -42,7 +42,7 @@
if(!main_cult)
main_cult = new()
-/datum/round_event/antagonist/solo/start()
+/datum/round_event/antagonist/solo/bloodcult/start()
. = ..()
main_cult.setup_objectives()
From 216217020f42384662ffd5360745666c4cd5f5b2 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 20:51:10 -0400
Subject: [PATCH 24/85] buffs to spawning
---
code/__DEFINES/~monkestation/storytellers.dm | 4 ++--
code/modules/events/_event.dm | 8 ++++----
.../code/modules/storytellers/gamemode_subsystem.dm | 2 +-
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/code/__DEFINES/~monkestation/storytellers.dm b/code/__DEFINES/~monkestation/storytellers.dm
index f4248d740d3e..a706f3804d87 100644
--- a/code/__DEFINES/~monkestation/storytellers.dm
+++ b/code/__DEFINES/~monkestation/storytellers.dm
@@ -36,9 +36,9 @@
#define STORYTELLER_WAIT_TIME 5 SECONDS
-#define EVENT_POINT_GAINED_PER_SECOND 0.05
+#define EVENT_POINT_GAINED_PER_SECOND 0.08
-#define TRACK_FAIL_POINT_PENALTY_MULTIPLIER 0.5
+#define TRACK_FAIL_POINT_PENALTY_MULTIPLIER 0.75
#define GAMEMODE_PANEL_MAIN "Main"
#define GAMEMODE_PANEL_VARIABLES "Variables"
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index 1eb77ec047d1..f1e05d02f53d 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -86,9 +86,9 @@
// Checks if the event can be spawned. Used by event controller and "false alarm" event.
// Admin-created events override this.
-/datum/round_event_control/proc/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/proc/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
SHOULD_CALL_PARENT(TRUE)
- if(roundstart && (world.time-SSticker.round_start_time >= 2 MINUTES || SSgamemode.ran_roundstart))
+ if(roundstart && (world.time-SSticker.round_start_time >= 2 MINUTES || (SSgamemode.ran_roundstart && !fake_check)))
return FALSE
if(occurrences >= max_occurrences)
return FALSE
@@ -126,10 +126,10 @@
if(!roundstart)
sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)
var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE)
- if(!can_spawn_event(players_amt) && !forced)
+ if(!can_spawn_event(players_amt, fake_check = TRUE) && !forced)
message_admins("Second pre-condition check for [name] failed, skipping...")
return EVENT_INTERRUPTED
- if(!can_spawn_event(players_amt) && forced)
+ if(!can_spawn_event(players_amt, fake_check = TRUE) && forced)
message_admins("Second pre-condition check for [name] failed, but event forced, running event regardless this may have issues...")
if(!triggering)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 8cbe9c73627e..bd2b8e36ebc5 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -187,7 +187,7 @@ SUBSYSTEM_DEF(gamemode)
message_admins("Scheduled Event: [sch_event.event] will run in [(sch_event.start_time - world.time) / 10] seconds. (CANCEL ) (REFUND )")
if(!halted_storyteller && next_storyteller_process <= world.time && storyteller)
- // We update crew information here to adjust population scalling and event thresholds for the storyteller.
+ // We update crew information here to adjust population scalling and event thresholds for the storyteller.
update_crew_infos()
next_storyteller_process = world.time + STORYTELLER_WAIT_TIME
storyteller.process(STORYTELLER_WAIT_TIME * 0.1)
From 33448513dccfa43ce32c8c3ad2eaf55afae2feb9 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 21:25:22 -0400
Subject: [PATCH 25/85] fixes
---
code/modules/bitrunning/event.dm | 2 +-
code/modules/events/aurora_caelus.dm | 2 +-
code/modules/events/disease_outbreak.dm | 2 +-
code/modules/events/false_alarm.dm | 2 +-
code/modules/events/ghost_role/alien_infestation.dm | 2 +-
code/modules/events/ghost_role/blob.dm | 2 +-
code/modules/events/gravity_generator_blackout.dm | 2 +-
code/modules/events/heart_attack.dm | 2 +-
code/modules/events/scrubber_clog.dm | 2 +-
code/modules/events/scrubber_overflow.dm | 2 +-
code/modules/events/shuttle_catastrophe.dm | 2 +-
code/modules/events/shuttle_insurance.dm | 2 +-
code/modules/events/shuttle_loan/shuttle_loan_event.dm | 2 +-
code/modules/events/tram_malfunction.dm | 2 +-
code/modules/events/wizard/embeddies.dm | 2 +-
code/modules/events/wizard/identity_spoof.dm | 2 +-
.../code/modules/storytellers/converted_events/_base_event.dm | 4 ++--
.../code/modules/storytellers/converted_events/solo/wizard.dm | 2 +-
18 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm
index 0ac35a2df8f2..daae0d15c09e 100644
--- a/code/modules/bitrunning/event.dm
+++ b/code/modules/bitrunning/event.dm
@@ -18,7 +18,7 @@
ROLE_CYBER_POLICE,
)
-/datum/round_event_control/bitrunning_glitch/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/bitrunning_glitch/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm
index c4094d0a9909..83b3612b9b2a 100644
--- a/code/modules/events/aurora_caelus.dm
+++ b/code/modules/events/aurora_caelus.dm
@@ -9,7 +9,7 @@
track = EVENT_TRACK_MUNDANE
tags = list(TAG_COMMUNAL, TAG_POSITIVE, TAG_SPACE)
-/datum/round_event_control/aurora_caelus/can_spawn_event(players, allow_magic = FALSE)
+/datum/round_event_control/aurora_caelus/can_spawn_event(players, allow_magic = FALSE, fake_check = FALSE)
if(!SSmapping.empty_space)
return FALSE
return ..()
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index fdaeb012c2fc..7934ed0ae016 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -35,7 +35,7 @@
track = EVENT_TRACK_MUNDANE
tags = list(TAG_TARGETED)
-/datum/round_event_control/disease_outbreak/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/disease_outbreak/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm
index 303425f7a8c0..ff0be53939f2 100644
--- a/code/modules/events/false_alarm.dm
+++ b/code/modules/events/false_alarm.dm
@@ -9,7 +9,7 @@
track = EVENT_TRACK_MUNDANE
tags = list(TAG_COMMUNAL)
-/datum/round_event_control/falsealarm/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/falsealarm/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm
index 0d0036ac910d..5d4dcbe19893 100644
--- a/code/modules/events/ghost_role/alien_infestation.dm
+++ b/code/modules/events/ghost_role/alien_infestation.dm
@@ -12,7 +12,7 @@
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMBAT)
-/datum/round_event_control/alien_infestation/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/alien_infestation/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/ghost_role/blob.dm b/code/modules/events/ghost_role/blob.dm
index 560612a782b3..5bc8ed7a6009 100644
--- a/code/modules/events/ghost_role/blob.dm
+++ b/code/modules/events/ghost_role/blob.dm
@@ -13,7 +13,7 @@
track = EVENT_TRACK_MAJOR
tags = list(TAG_DESTRUCTIVE, TAG_COMBAT)
-/datum/round_event_control/blob/can_spawn_event(players, allow_magic = FALSE)
+/datum/round_event_control/blob/can_spawn_event(players, allow_magic = FALSE, fake_check = FALSE)
if(EMERGENCY_PAST_POINT_OF_NO_RETURN) // no blobs if the shuttle is past the point of no return
return FALSE
diff --git a/code/modules/events/gravity_generator_blackout.dm b/code/modules/events/gravity_generator_blackout.dm
index 7992f52bb75a..6384c8030656 100644
--- a/code/modules/events/gravity_generator_blackout.dm
+++ b/code/modules/events/gravity_generator_blackout.dm
@@ -9,7 +9,7 @@
track = EVENT_TRACK_MODERATE
tags = list(TAG_COMMUNAL, TAG_SPACE)
-/datum/round_event_control/gravity_generator_blackout/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/gravity_generator_blackout/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm
index eb995acefdb1..4980225e7836 100644
--- a/code/modules/events/heart_attack.dm
+++ b/code/modules/events/heart_attack.dm
@@ -14,7 +14,7 @@
track = EVENT_TRACK_MODERATE
tags = list(TAG_TARGETED)
-/datum/round_event_control/heart_attack/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/heart_attack/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/scrubber_clog.dm b/code/modules/events/scrubber_clog.dm
index bb236e166e2b..2d48d25d8eff 100644
--- a/code/modules/events/scrubber_clog.dm
+++ b/code/modules/events/scrubber_clog.dm
@@ -88,7 +88,7 @@
scrubber_list += scrubber
return pick(scrubber_list)
-/datum/round_event_control/scrubber_clog/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/scrubber_clog/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return
diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm
index 507c5d046509..ab8d925a7d65 100644
--- a/code/modules/events/scrubber_overflow.dm
+++ b/code/modules/events/scrubber_overflow.dm
@@ -87,7 +87,7 @@
if(!scrubbers.len)
return kill()
-/datum/round_event_control/scrubber_overflow/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/scrubber_overflow/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return
diff --git a/code/modules/events/shuttle_catastrophe.dm b/code/modules/events/shuttle_catastrophe.dm
index 28b9571a9e19..6092d3e2f2b9 100644
--- a/code/modules/events/shuttle_catastrophe.dm
+++ b/code/modules/events/shuttle_catastrophe.dm
@@ -9,7 +9,7 @@
track = EVENT_TRACK_MODERATE
tags = list(TAG_COMMUNAL)
-/datum/round_event_control/shuttle_catastrophe/can_spawn_event(players, allow_magic = FALSE)
+/datum/round_event_control/shuttle_catastrophe/can_spawn_event(players, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/shuttle_insurance.dm b/code/modules/events/shuttle_insurance.dm
index d00875ead0ca..bac5acbe20e4 100644
--- a/code/modules/events/shuttle_insurance.dm
+++ b/code/modules/events/shuttle_insurance.dm
@@ -9,7 +9,7 @@
track = EVENT_TRACK_MODERATE
tags = list(TAG_COMMUNAL)
-/datum/round_event_control/shuttle_insurance/can_spawn_event(players, allow_magic = FALSE)
+/datum/round_event_control/shuttle_insurance/can_spawn_event(players, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm
index 96db32c044d6..dfebbc0cd020 100644
--- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm
+++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm
@@ -10,7 +10,7 @@
admin_setup = list(/datum/event_admin_setup/listed_options/shuttle_loan)
var/list/run_situations = list()
-/datum/round_event_control/shuttle_loan/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/shuttle_loan/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
for(var/datum/round_event/running_event in SSevents.running)
if(istype(running_event, /datum/round_event/shuttle_loan)) //Make sure two of these don't happen at once.
diff --git a/code/modules/events/tram_malfunction.dm b/code/modules/events/tram_malfunction.dm
index 312d045512ea..d1eb6028bdc1 100644
--- a/code/modules/events/tram_malfunction.dm
+++ b/code/modules/events/tram_malfunction.dm
@@ -15,7 +15,7 @@
tags = list(TAG_DESTRUCTIVE)
//Check if there's a tram we can cause to malfunction.
-/datum/round_event_control/tram_malfunction/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/tram_malfunction/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if (!.)
return FALSE
diff --git a/code/modules/events/wizard/embeddies.dm b/code/modules/events/wizard/embeddies.dm
index ea8c5fd176bc..ee4f803699a6 100644
--- a/code/modules/events/wizard/embeddies.dm
+++ b/code/modules/events/wizard/embeddies.dm
@@ -9,7 +9,7 @@
max_wizard_trigger_potency = 7
///behold... the only reason sticky is a subtype...
-/datum/round_event_control/wizard/embedpocalypse/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/wizard/embedpocalypse/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/code/modules/events/wizard/identity_spoof.dm b/code/modules/events/wizard/identity_spoof.dm
index dcd923c2776a..bdad88e9ab84 100644
--- a/code/modules/events/wizard/identity_spoof.dm
+++ b/code/modules/events/wizard/identity_spoof.dm
@@ -5,7 +5,7 @@
max_occurrences = 1
description = "Makes everyone dressed up like a wizard."
-/datum/round_event_control/wizard/identity_spoof/can_spawn_event(players_amt, allow_magic = FALSE)
+/datum/round_event_control/wizard/identity_spoof/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
if(!.)
return .
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 2f45798d6117..40bd92c1d650 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -43,7 +43,7 @@
if(CONFIG_GET(flag/protect_roles_from_antagonist))
restricted_roles |= protected_roles
-/datum/round_event_control/antagonist/can_spawn_event(popchecks = TRUE, allow_magic)
+/datum/round_event_control/antagonist/can_spawn_event(popchecks = TRUE, allow_magic, fake_check = FALSE)
. = ..()
if(!check_enemies())
return FALSE
@@ -78,7 +78,7 @@
candidates = trim_candidates(candidates)
return candidates
-/datum/round_event_control/antagonist/solo/can_spawn_event(popchecks = TRUE, allow_magic)
+/datum/round_event_control/antagonist/solo/can_spawn_event(popchecks = TRUE, allow_magic, fake_check = FALSE)
. = ..()
if(!.)
return
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
index 081dbf45f4f3..52061be9352c 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
@@ -13,7 +13,7 @@
min_players = 35
max_occurrences = 1
-/datum/round_event_control/antagonist/solo/wizard/can_spawn_event(popchecks = TRUE, allow_magic)
+/datum/round_event_control/antagonist/solo/wizard/can_spawn_event(popchecks = TRUE, allow_magic, fake_check = FALSE)
. = ..()
if(!.)
return
From b5291a6c8859e69e49a67b9809653bb911d997d7 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 15 Oct 2023 23:44:04 -0400
Subject: [PATCH 26/85] adds previous round weighting to events, so that we
aren't as likely to double roll large events like blood cult
---
code/__HELPERS/roundend.dm | 1 +
.../converted_events/_base_event.dm | 1 -
.../converted_events/solo/bloodcult.dm | 1 +
.../converted_events/solo/malf.dm | 2 +-
.../solo/nuclear_operative.dm | 1 +
.../converted_events/solo/revolutionary.dm | 1 +
.../storytellers/gamemode_subsystem.dm | 28 +++++++++++++++++++
.../storytellers/storytellers/_storyteller.dm | 2 ++
8 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index 92b44389cf9a..8aa52fd5e81c 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -237,6 +237,7 @@ GLOBAL_LIST_INIT(round_end_images, world.file2list("data/image_urls.txt"))
//Set news report and mode result
mode.set_round_result()
SSgamemode.round_end_report()
+ SSgamemode.store_roundend_data() // store data on roundend for next round
to_chat(world, span_infoplain(span_big(span_bold(" The round has ended."))))
log_game("The round has ended.")
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 40bd92c1d650..22b0e6a05f3b 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -1,5 +1,4 @@
/datum/round_event_control/antagonist
- reoccurence_penalty_multiplier = 0
track = EVENT_TRACK_ROLESET
///list of required roles, needed for this to form
var/list/exclusive_roles
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
index e7af43c5cc90..07c2a4f7ffbb 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
@@ -31,6 +31,7 @@
min_players = 30
roundstart = TRUE
earliest_start = 0 SECONDS
+ weight = 4
/datum/round_event/antagonist/solo/bloodcult
excute_round_end_reports = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
index af4dd9c2e6df..50949b9f652f 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
@@ -12,7 +12,7 @@
)
exclusive_roles = list(JOB_AI)
required_enemies = 4
- weight = 2
+ weight = 4
/datum/round_event_control/antagonist/solo/malf/trim_candidates(list/candidates)
for(var/mob/living/player in candidates)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
index ea6d2d3869c5..2f8b08b206b1 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
@@ -33,6 +33,7 @@
min_players = 35
roundstart = TRUE
earliest_start = 0 SECONDS
+ weight = 4
/datum/round_event/antagonist/solo/nuclear_operative
excute_round_end_reports = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
index 37a4f44ed0b3..a5110178f51f 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
@@ -32,6 +32,7 @@
min_players = 35
roundstart = TRUE
earliest_start = 0 SECONDS
+ weight = 4
/datum/antagonist/rev/head/event_trigger
remove_clumsy = TRUE
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index bd2b8e36ebc5..22161071bc5f 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -141,8 +141,10 @@ SUBSYSTEM_DEF(gamemode)
var/wizardmode = FALSE
+ var/datum/round_event_control/current_roundstart_event
var/list/last_round_events = list()
var/ran_roundstart = FALSE
+ var/list/triggered_round_events = list()
/datum/controller/subsystem/gamemode/Initialize(time, zlevel)
// Populate event pools
@@ -170,6 +172,8 @@ SUBSYSTEM_DEF(gamemode)
continue
event_pools[event.track] += event //Add it to the categorized event pools
+ load_roundstart_data()
+
// return ..()
@@ -1088,3 +1092,27 @@ SUBSYSTEM_DEF(gamemode)
if(!istype(event))
continue
event.round_end_report()
+
+
+/datum/controller/subsystem/gamemode/proc/store_roundend_data()
+ var/congealed_string = ""
+ for(var/event_name as anything in triggered_round_events)
+ congealed_string += event_name
+ congealed_string += ","
+ text2file(congealed_string, "data/last_round_events.txt")
+
+/datum/controller/subsystem/gamemode/proc/load_roundstart_data()
+ var/massive_string = trim(file2text("data/last_round_events.txt"))
+ if(fexists("data/last_round_events.txt"))
+ fdel("data/last_round_events.txt")
+ if(!massive_string)
+ return
+ last_round_events = splittext(massive_string, ",")
+
+ if(!length(last_round_events))
+ return
+ for(var/event_name as anything in last_round_events)
+ for(var/datum/round_event_control/listed as anything in control)
+ if(listed.name != event_name)
+ continue
+ listed.occurrences++
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index bfddfdec5d20..a07988713dd6 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -138,9 +138,11 @@
if(bought_event.roundstart)
if(!ignores_roundstart)
SSgamemode.ran_roundstart = TRUE
+ SSgamemode.current_roundstart_event = bought_event
mode.TriggerEvent(bought_event, forced)
else
mode.schedule_event(bought_event, (rand(3, 4) MINUTES), total_cost, _forced = forced)
+ SSgamemode.triggered_round_events |= bought_event.name
/// Calculates the weights of the events from a passed track.
/datum/storyteller/proc/calculate_weights(track)
From cd1cca87025474aa0e9f1023b0f40385483b2bf7 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 01:54:11 -0400
Subject: [PATCH 27/85] adds clock cult and clown ops to roundstart
---
.../converted_events/solo/clockwork_cult.dm | 45 +++++++
.../converted_events/solo/clown_operative.dm | 114 ++++++++++++++++++
tgstation.dme | 2 +
3 files changed, 161 insertions(+)
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
new file mode 100644
index 000000000000..0a9b2dadea82
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
@@ -0,0 +1,45 @@
+/datum/round_event_control/antagonist/solo/clockcult
+ name = "Clock Cult"
+ antag_flag = ROLE_CLOCK_CULTIST
+ antag_datum = /datum/antagonist/clock_cultist
+ typepath = /datum/round_event/antagonist/solo/clockcult
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CAPTAIN,
+ JOB_CHAPLAIN,
+ JOB_CYBORG,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ maximum_antags = 3
+ enemy_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = 3
+ base_antags = 2
+ // I give up, just there should be enough heads with 35 players...
+ min_players = 30
+ roundstart = TRUE
+ earliest_start = 0 SECONDS
+ weight = 4
+
+/datum/round_event/antagonist/solo/clockcult
+ end_when = 60000
+
+/datum/round_event/antagonist/solo/clockcult/setup()
+ . = ..()
+ INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(spawn_reebe))
+
+/datum/round_event/antagonist/solo/clockcult/add_datum_to_mind(datum/mind/antag_mind)
+ antag_mind.special_role = ROLE_CLOCK_CULTIST
+ antag_mind.add_antag_datum(antag_datum)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm
new file mode 100644
index 000000000000..0008c893e5af
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm
@@ -0,0 +1,114 @@
+/datum/round_event_control/antagonist/solo/clown_operative
+ name = "Roundstart Clown Operative"
+ antag_flag = ROLE_CLOWN_OPERATIVE
+ antag_datum = /datum/antagonist/nukeop/clownop
+ typepath = /datum/round_event/antagonist/solo/clown_operative
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CAPTAIN,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_CYBORG,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ base_antags = 3
+ maximum_antags = 5
+ enemy_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = 5
+ // I give up, just there should be enough heads with 35 players...
+ min_players = 35
+ roundstart = TRUE
+ earliest_start = 0 SECONDS
+ weight = 4
+
+/datum/round_event/antagonist/solo/clown_operative
+ excute_round_end_reports = TRUE
+ end_when = 60000 /// we will end on our own when revs win
+ var/static/datum/team/nuclear/nuke_team
+ var/datum/antagonist/antag_leader_datum = /datum/antagonist/nukeop/leader
+ var/set_leader = FALSE
+ var/required_role = ROLE_CLOWN_OPERATIVE
+
+/datum/round_event/antagonist/solo/clown_operative/setup()
+ . = ..()
+ var/obj/machinery/nuclearbomb/syndicate/syndicate_nuke = locate() in GLOB.nuke_list
+ if(syndicate_nuke)
+ var/turf/nuke_turf = get_turf(syndicate_nuke)
+ if(nuke_turf)
+ new /obj/machinery/nuclearbomb/syndicate/bananium(nuke_turf)
+ qdel(syndicate_nuke)
+
+/datum/round_event/antagonist/solo/clown_operative/add_datum_to_mind(datum/mind/antag_mind)
+ var/mob/living/current_mob = antag_mind.current
+ SSjob.FreeRole(antag_mind.assigned_role.title)
+ var/list/items = current_mob.get_equipped_items(TRUE)
+ current_mob.unequip_everything()
+ for(var/obj/item/item as anything in items)
+ qdel(item)
+
+ antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/clown_operative))
+ antag_mind.special_role = ROLE_CLOWN_OPERATIVE
+
+ var/datum/mind/most_experienced = get_most_experienced(setup_minds, required_role)
+ if(!most_experienced)
+ most_experienced = antag_mind
+
+ if(!set_leader)
+ set_leader = TRUE
+ var/datum/antagonist/nukeop/leader/leader = most_experienced.add_antag_datum(antag_leader_datum)
+ nuke_team = leader.nuke_team
+
+ if(antag_mind == most_experienced)
+ return
+
+ var/datum/antagonist/nukeop/new_op = new antag_datum()
+ antag_mind.add_antag_datum(new_op)
+
+
+/datum/round_event/antagonist/solo/clown_operative/round_end_report()
+ var/result = nuke_team.get_result()
+ switch(result)
+ if(NUKE_RESULT_FLUKE)
+ SSticker.mode_result = "loss - syndicate nuked - disk secured"
+ SSticker.news_report = NUKE_SYNDICATE_BASE
+ if(NUKE_RESULT_NUKE_WIN)
+ SSticker.mode_result = "win - syndicate nuke"
+ SSticker.news_report = STATION_DESTROYED_NUKE
+ if(NUKE_RESULT_NOSURVIVORS)
+ SSticker.mode_result = "halfwin - syndicate nuke - did not evacuate in time"
+ SSticker.news_report = STATION_DESTROYED_NUKE
+ if(NUKE_RESULT_WRONG_STATION)
+ SSticker.mode_result = "halfwin - blew wrong station"
+ SSticker.news_report = NUKE_MISS
+ if(NUKE_RESULT_WRONG_STATION_DEAD)
+ SSticker.mode_result = "halfwin - blew wrong station - did not evacuate in time"
+ SSticker.news_report = NUKE_MISS
+ if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD)
+ SSticker.mode_result = "loss - evacuation - disk secured - syndi team dead"
+ SSticker.news_report = OPERATIVES_KILLED
+ if(NUKE_RESULT_CREW_WIN)
+ SSticker.mode_result = "loss - evacuation - disk secured"
+ SSticker.news_report = OPERATIVES_KILLED
+ if(NUKE_RESULT_DISK_LOST)
+ SSticker.mode_result = "halfwin - evacuation - disk not secured"
+ SSticker.news_report = OPERATIVE_SKIRMISH
+ if(NUKE_RESULT_DISK_STOLEN)
+ SSticker.mode_result = "halfwin - detonation averted"
+ SSticker.news_report = OPERATIVE_SKIRMISH
+ else
+ SSticker.mode_result = "halfwin - interrupted"
+ SSticker.news_report = OPERATIVE_SKIRMISH
diff --git a/tgstation.dme b/tgstation.dme
index 22dc85e513a5..472f79fce35a 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6273,6 +6273,8 @@
#include "monkestation\code\modules\storytellers\converted_events\_base_event.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\bloodcult.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\changeling.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\clockwork_cult.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\clown_operative.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\malf.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\nuclear_operative.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\revolutionary.dm"
From d8dfb43b127ee2ea17958f7b73846a4ef3ec9cb7 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 01:57:56 -0400
Subject: [PATCH 28/85] misc balancing
---
.../modules/storytellers/converted_events/solo/bloodcult.dm | 4 +---
.../storytellers/converted_events/solo/clockwork_cult.dm | 5 ++---
.../storytellers/converted_events/solo/revolutionary.dm | 4 +---
3 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
index 07c2a4f7ffbb..e479c1d60cee 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
@@ -17,15 +17,13 @@
)
maximum_antags = 3
enemy_roles = list(
- JOB_AI,
- JOB_CYBORG,
JOB_CAPTAIN,
JOB_DETECTIVE,
JOB_HEAD_OF_SECURITY,
JOB_SECURITY_OFFICER,
JOB_WARDEN,
)
- required_enemies = 3
+ required_enemies = 5
base_antags = 2
// I give up, just there should be enough heads with 35 players...
min_players = 30
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
index 0a9b2dadea82..3c3fbd817ad9 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
@@ -17,8 +17,6 @@
)
maximum_antags = 3
enemy_roles = list(
- JOB_AI,
- JOB_CYBORG,
JOB_CAPTAIN,
JOB_DETECTIVE,
JOB_HEAD_OF_SECURITY,
@@ -26,7 +24,8 @@
JOB_WARDEN,
)
required_enemies = 3
- base_antags = 2
+ base_antags = 4
+ maximum_antags = 4
// I give up, just there should be enough heads with 35 players...
min_players = 30
roundstart = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
index a5110178f51f..8d44e6b0411b 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
@@ -19,15 +19,13 @@
)
base_antags = 2
enemy_roles = list(
- JOB_AI,
- JOB_CYBORG,
JOB_CAPTAIN,
JOB_DETECTIVE,
JOB_HEAD_OF_SECURITY,
JOB_SECURITY_OFFICER,
JOB_WARDEN,
)
- required_enemies = 3
+ required_enemies = 6
// I give up, just there should be enough heads with 35 players...
min_players = 35
roundstart = TRUE
From 694e975ea7d92b7cec971c1ae172199f6c499f24 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 02:27:53 -0400
Subject: [PATCH 29/85] this is called a pro gamer move fellas
---
code/controllers/master.dm | 2 ++
code/modules/antagonists/nukeop/nukeop.dm | 2 --
code/modules/antagonists/wizard/wizard.dm | 3 ---
3 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index f44a5f5161e9..068b1cb8846f 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -284,6 +284,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10
/// run votes
SSvote.initiate_vote(/datum/vote/storyteller, "pick round storyteller", forced = TRUE) // idk where else to run this lol
+ SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
+ SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
/**
* Initialize a given subsystem and handle the results.
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index 2b21764e0835..3ceb60ae7712 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -119,8 +119,6 @@
/// Actually moves our nukie to where they should be
/datum/antagonist/nukeop/proc/move_to_spawnpoint()
- // Ensure that the nukiebase is loaded, and wait for it if required
- SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
var/turf/destination = get_spawnpoint()
owner.current.forceMove(destination)
if(!owner.current.onSyndieBase())
diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm
index 5f7ff984dc1f..cced5fe3f251 100644
--- a/code/modules/antagonists/wizard/wizard.dm
+++ b/code/modules/antagonists/wizard/wizard.dm
@@ -115,9 +115,6 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key)
RegisterSignal(ritual, COMSIG_GRAND_RITUAL_FINAL_COMPLETE, PROC_REF(on_ritual_complete))
/datum/antagonist/wizard/proc/send_to_lair()
- // And now we ensure that its loaded
- SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
-
if(!owner.current)
return
if(!GLOB.wizardstart.len)
From 16189e0a807ea6ffc4d820d6bb7165b2b85c8151 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 02:39:26 -0400
Subject: [PATCH 30/85] Update ticker.dm
---
code/controllers/subsystem/ticker.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index f601e1414673..c94405a1afa3 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -299,6 +299,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/PostSetup()
set waitfor = FALSE
+ SSgamemode.storyteller.process(STORYTELLER_WAIT_TIME * 0.1) // we want this asap
SSgamemode.storyteller.round_started = TRUE
mode.post_setup()
GLOB.start_state = new /datum/station_state()
From b22a76c4fa41c592262ac9345edfb2a7d4380fb0 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 02:41:37 -0400
Subject: [PATCH 31/85] maybe fixes slasher
---
.../code/modules/new_antagonists/slasher/slasher_datum.dm | 6 ------
1 file changed, 6 deletions(-)
diff --git a/monkestation/code/modules/new_antagonists/slasher/slasher_datum.dm b/monkestation/code/modules/new_antagonists/slasher/slasher_datum.dm
index 103f96f82d2d..66f5d4a77a7d 100644
--- a/monkestation/code/modules/new_antagonists/slasher/slasher_datum.dm
+++ b/monkestation/code/modules/new_antagonists/slasher/slasher_datum.dm
@@ -154,9 +154,6 @@
if(linked_machette)
linked_machette.force += 2.5
linked_machette.throwforce += 2.5
- if(owner.current.team_monitor.tracking[stalked_human.tracking_beacon])
- qdel(owner.current.team_monitor.tracking[stalked_human.tracking_beacon])
- qdel(stalked_human.tracking_beacon)
stalked_human = null
/datum/antagonist/slasher/proc/failed_stalking()
@@ -164,7 +161,4 @@
if(linked_machette)
linked_machette.force -= 5
linked_machette.throwforce -= 5
- if(owner.current.team_monitor.tracking[stalked_human.tracking_beacon])
- qdel(owner.current.team_monitor.tracking[stalked_human.tracking_beacon])
- qdel(stalked_human.tracking_beacon)
stalked_human = null
From e3bd11a24757e916873f1ce36b0b5e5aab5b7c03 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 12:09:16 -0400
Subject: [PATCH 32/85] Update _storyteller.dm
---
.../code/modules/storytellers/storytellers/_storyteller.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index a07988713dd6..c5cfec85e68e 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -112,6 +112,9 @@
for(var/datum/round_event_control/event as anything in mode.event_pools[track])
var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
if(event.can_spawn_event(players_amt))
+ if(QDELETED(event))
+ message_admins("[event.name] was deleted!")
+ continue
valid_events[event] = event.calculated_weight
///If we didn't get any events, remove the points inform admins and dont do anything
if(!length(valid_events))
@@ -120,6 +123,7 @@
return
picked_event = pick_weight(valid_events)
if(!picked_event)
+ message_admins("WARNING: Storyteller picked a null event from picked_events when it had a length of [length(picked_events)]")
message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
stack_trace("WARNING: Storyteller picked a null from event pool.")
return
From c7af0f9f0ce57eece97ff5c6973f9519c8a743d8 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 12:18:08 -0400
Subject: [PATCH 33/85] Update _storyteller.dm
---
.../code/modules/storytellers/storytellers/_storyteller.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index c5cfec85e68e..32bce61ff881 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -123,7 +123,7 @@
return
picked_event = pick_weight(valid_events)
if(!picked_event)
- message_admins("WARNING: Storyteller picked a null event from picked_events when it had a length of [length(picked_events)]")
+ message_admins("WARNING: Storyteller picked a null event from picked_events when it had a length of [length(valid_events)]")
message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
stack_trace("WARNING: Storyteller picked a null from event pool.")
return
From 81ad7bec6c5a80dbe822fb696fab0ef5f564ed7d Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 13:37:10 -0400
Subject: [PATCH 34/85] tags galore also adds more info to the gamemode panel
---
.../modules/storytellers/converted_events/solo/bloodcult.dm | 2 ++
.../storytellers/converted_events/solo/changeling.dm | 1 +
.../storytellers/converted_events/solo/clockwork_cult.dm | 2 ++
.../storytellers/converted_events/solo/clown_operative.dm | 2 ++
.../modules/storytellers/converted_events/solo/heretic.dm | 1 +
.../code/modules/storytellers/converted_events/solo/malf.dm | 2 ++
.../storytellers/converted_events/solo/nuclear_operative.dm | 2 ++
.../storytellers/converted_events/solo/revolutionary.dm | 2 ++
.../modules/storytellers/converted_events/solo/traitor.dm | 1 +
.../modules/storytellers/converted_events/solo/wizard.dm | 1 +
.../code/modules/storytellers/gamemode_subsystem.dm | 6 +++++-
.../code/modules/storytellers/storytellers/_storyteller.dm | 2 +-
12 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
index e479c1d60cee..486811654337 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/bloodcult
name = "Blood Cult"
+ tags = list(TAG_SPOOKY, TAG_DESTRUCTIVE, TAG_COMBAT, TAG_TEAM_ANTAG)
antag_flag = ROLE_CULTIST
antag_datum = /datum/antagonist/cult
typepath = /datum/round_event/antagonist/solo/bloodcult
@@ -30,6 +31,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
+ max_occurrences = 1
/datum/round_event/antagonist/solo/bloodcult
excute_round_end_reports = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm
index a34fe92bb3ce..0171f36d42ae 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/changeling
antag_flag = ROLE_CHANGELING
+ tags = list(TAG_COMBAT)
antag_datum = /datum/antagonist/changeling
protected_roles = list(
JOB_CAPTAIN,
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
index 3c3fbd817ad9..9ee7702f2363 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/clockcult
name = "Clock Cult"
+ tags = list(TAG_SPOOKY, TAG_DESTRUCTIVE, TAG_COMBAT, TAG_TEAM_ANTAG)
antag_flag = ROLE_CLOCK_CULTIST
antag_datum = /datum/antagonist/clock_cultist
typepath = /datum/round_event/antagonist/solo/clockcult
@@ -31,6 +32,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
+ max_occurrences = 1
/datum/round_event/antagonist/solo/clockcult
end_when = 60000
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm
index 0008c893e5af..03d1866b32f4 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/clown_operative
name = "Roundstart Clown Operative"
+ tags = list(TAG_DESTRUCTIVE, TAG_COMBAT, TAG_TEAM_ANTAG)
antag_flag = ROLE_CLOWN_OPERATIVE
antag_datum = /datum/antagonist/nukeop/clownop
typepath = /datum/round_event/antagonist/solo/clown_operative
@@ -34,6 +35,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
+ max_occurrences = 1
/datum/round_event/antagonist/solo/clown_operative
excute_round_end_reports = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm b/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm
index 070845820619..cb0c244a83d7 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/heretic
antag_flag = ROLE_HERETIC
+ tags = list(TAG_COMBAT, TAG_SPOOKY)
antag_datum = /datum/antagonist/heretic
protected_roles = list(
JOB_CAPTAIN,
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
index 50949b9f652f..0c17035a1c46 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/malf.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/malf
antag_datum = /datum/antagonist/malf_ai
+ tags = list(TAG_COMBAT, TAG_DESTRUCTIVE)
antag_flag = ROLE_MALF
enemy_roles = list(
JOB_CHEMIST,
@@ -13,6 +14,7 @@
exclusive_roles = list(JOB_AI)
required_enemies = 4
weight = 4
+ max_occurrences = 1
/datum/round_event_control/antagonist/solo/malf/trim_candidates(list/candidates)
for(var/mob/living/player in candidates)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
index 2f8b08b206b1..401c280e9ffb 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/nuclear_operative
name = "Roundstart Nuclear Operative"
+ tags = list(TAG_DESTRUCTIVE, TAG_COMBAT, TAG_TEAM_ANTAG)
antag_flag = ROLE_OPERATIVE
antag_datum = /datum/antagonist/nukeop
typepath = /datum/round_event/antagonist/solo/nuclear_operative
@@ -34,6 +35,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
+ max_occurrences = 1
/datum/round_event/antagonist/solo/nuclear_operative
excute_round_end_reports = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
index 8d44e6b0411b..5bf9e1d81fcd 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/revolutionary.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/revolutionary
name = "Roundstart Revolution"
+ tags = list(TAG_COMMUNAL, TAG_DESTRUCTIVE, TAG_COMBAT, TAG_TEAM_ANTAG)
antag_flag = ROLE_REV_HEAD
antag_datum = /datum/antagonist/rev/head/event_trigger
typepath = /datum/round_event/antagonist/solo/revolutionary
@@ -31,6 +32,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
+ max_occurrences = 1
/datum/antagonist/rev/head/event_trigger
remove_clumsy = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm
index f48a4ff726a1..3100c3a50250 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/traitor
antag_flag = ROLE_TRAITOR
+ tags = list(TAG_COMBAT)
antag_datum = /datum/antagonist/traitor
protected_roles = list(
JOB_CAPTAIN,
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
index 52061be9352c..73c860443dd4 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
@@ -1,5 +1,6 @@
/datum/round_event_control/antagonist/solo/wizard
name = "Wizard"
+ tags = list(TAG_COMBAT, TAG_DESTRUCTIVE)
typepath = /datum/round_event/antagonist/solo/wizard
antag_flag = ROLE_WIZARD
antag_datum = /datum/antagonist/wizard
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 22161071bc5f..c603cef40414 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -798,6 +798,7 @@ SUBSYSTEM_DEF(gamemode)
dat += " HALT Storyteller Event Panel Set Storyteller Refresh "
dat += "Storyteller determines points gained, event chances, and is the entity responsible for rolling events. "
dat += " Active Players: [active_players] (Head: [head_crew], Sec: [sec_crew], Eng: [eng_crew], Med: [med_crew])"
+ dat += " Antagonist Count vs Maximum: [GLOB.antagonists.len] / [get_antag_cap()]"
dat += " "
dat += "Main "
dat += " Variables "
@@ -936,6 +937,7 @@ SUBSYSTEM_DEF(gamemode)
dat += "Name "
dat += "Tags "
dat += "Occurences "
+ dat += "Max Occurences "
dat += "M.Pop "
dat += "M.Time "
dat += "Can Occur "
@@ -975,7 +977,9 @@ SUBSYSTEM_DEF(gamemode)
var/occurence_string = "[event.occurrences]"
if(event.shared_occurence_type)
occurence_string += " (shared: [event.get_occurences()])"
+ var/max_occurence_string = "[event.max_occurrences]"
dat += "[occurence_string] " //Occurences
+ dat += "[max_occurence_string] " //Max Occurences
dat += "[event.min_players] " //Minimum pop
dat += "[event.earliest_start / (1 MINUTES)] m. " //Minimum time
dat += "[assoc_spawn_weight[event] ? "Yes" : "No"] " //Can happen?
@@ -987,7 +991,7 @@ SUBSYSTEM_DEF(gamemode)
dat += "[event.get_href_actions()] " //Actions
dat += " "
dat += ""
- var/datum/browser/popup = new(user, "gamemode_event_panel", "Event Panel", 1000, 600)
+ var/datum/browser/popup = new(user, "gamemode_event_panel", "Event Panel", 1100, 600)
popup.set_content(dat.Join())
popup.open()
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index 32bce61ff881..5240be005c31 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -145,7 +145,7 @@
SSgamemode.current_roundstart_event = bought_event
mode.TriggerEvent(bought_event, forced)
else
- mode.schedule_event(bought_event, (rand(3, 4) MINUTES), total_cost, _forced = forced)
+ mode.schedule_event(bought_event, (rand(120, 240) SECONDS), total_cost, _forced = forced)
SSgamemode.triggered_round_events |= bought_event.name
/// Calculates the weights of the events from a passed track.
From bd1efe283823b56536c8d1ff3372efb7c0f5f423 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 13:59:50 -0400
Subject: [PATCH 35/85] :(
---
.../modules/storytellers/gamemode_subsystem.dm | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index c603cef40414..f5c44ec935e3 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -146,6 +146,8 @@ SUBSYSTEM_DEF(gamemode)
var/ran_roundstart = FALSE
var/list/triggered_round_events = list()
+ var/total_valid_antags = 0
+
/datum/controller/subsystem/gamemode/Initialize(time, zlevel)
// Populate event pools
for(var/track in event_tracks)
@@ -216,7 +218,13 @@ SUBSYSTEM_DEF(gamemode)
/// Whether events can inject more antagonists into the round
/datum/controller/subsystem/gamemode/proc/can_inject_antags()
- return (get_antag_cap() > GLOB.antagonists.len)
+ total_valid_antags = 0
+ for(var/datum/antagonist/A in GLOB.antagonists)
+ if(!A.owner)
+ continue
+ total_valid_antags++
+
+ return (get_antag_cap() > total_valid_antags)
/// Gets candidates for antagonist roles.
/datum/controller/subsystem/gamemode/proc/get_candidates(be_special, job_ban, observers, ready_newplayers, living_players, required_time, inherit_required_time = TRUE, midround_antag_pref, no_antags = TRUE, list/restricted_roles)
@@ -792,13 +800,19 @@ SUBSYSTEM_DEF(gamemode)
/// Panel containing information, variables and controls about the gamemode and scheduled event
/datum/controller/subsystem/gamemode/proc/admin_panel(mob/user)
update_crew_infos()
+ total_valid_antags = 0
+ for(var/datum/antagonist/A in GLOB.antagonists)
+ if(!A.owner)
+ continue
+ total_valid_antags++
+
var/round_started = SSticker.HasRoundStarted()
var/list/dat = list()
dat += "Storyteller: [storyteller ? "[storyteller.name]" : "None"] "
dat += " HALT Storyteller Event Panel Set Storyteller Refresh "
dat += "Storyteller determines points gained, event chances, and is the entity responsible for rolling events. "
dat += " Active Players: [active_players] (Head: [head_crew], Sec: [sec_crew], Eng: [eng_crew], Med: [med_crew])"
- dat += " Antagonist Count vs Maximum: [GLOB.antagonists.len] / [get_antag_cap()]"
+ dat += " Antagonist Count vs Maximum: [total_valid_antags] / [get_antag_cap()]"
dat += " "
dat += "Main "
dat += " Variables "
From f0a90d27edc2837d39f4ec7c85d6ad879c9abf2a Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 14:59:14 -0400
Subject: [PATCH 36/85] oopsie poopsie
---
code/datums/components/food/edible.dm | 23 ++++++++++++++++++
goon/icons/obj/food.dmi | Bin 0 -> 12978 bytes
.../new_antagonists/slasher/ghost_role.dm | 2 +-
.../converted_events/_base_event.dm | 4 +--
.../converted_events/solo/wizard.dm | 2 +-
.../modules/storytellers/scheduled_events.dm | 3 ++-
6 files changed, 29 insertions(+), 5 deletions(-)
create mode 100644 goon/icons/obj/food.dmi
diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm
index 221d4945c0e2..1323b71875ff 100644
--- a/code/datums/components/food/edible.dm
+++ b/code/datums/components/food/edible.dm
@@ -42,6 +42,9 @@ Behavior that's still missing from this component that original food items had t
var/list/tastes
///The buffs these foods give when eaten
var/food_buffs
+ ///how many bites we can get
+ var/total_bites = 0
+ var/current_mask
/datum/component/edible/Initialize(
list/initial_reagents,
@@ -74,6 +77,7 @@ Behavior that's still missing from this component that original food items had t
src.tastes = string_assoc_list(tastes)
src.check_liked = check_liked
+
setup_initial_reagents(initial_reagents)
/datum/component/edible/RegisterWithParent()
@@ -214,6 +218,8 @@ Behavior that's still missing from this component that original food items had t
else
owner.reagents.add_reagent(rid, amount)
+ total_bites = round(owner.reagents.total_volume / bite_consumption)
+
/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
@@ -438,6 +444,14 @@ Behavior that's still missing from this component that original food items had t
var/fraction = min(bite_consumption / owner.reagents.total_volume, 1)
owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, methods = INGEST)
bitecount++
+ var/desired_mask = (total_bites / bitecount)
+ desired_mask = round(desired_mask)
+ desired_mask = max(1,desired_mask)
+ desired_mask = min(desired_mask, 4)
+
+ if(desired_mask != current_mask)
+ current_mask = desired_mask
+ parent.add_filter("bite", 0, alpha_mask_filter(icon=icon('goon/icons/obj/food.dmi', "eating[desired_mask]")))
checkLiked(fraction, eater)
if(!owner.reagents.total_volume)
On_Consume(eater, feeder)
@@ -565,6 +579,15 @@ Behavior that's still missing from this component that original food items had t
if(bitecount == 0 || prob(50))
L.manual_emote("nibbles away at \the [parent].")
bitecount++
+ var/desired_mask = (total_bites / bitecount)
+ desired_mask = round(desired_mask)
+ desired_mask = max(1,desired_mask)
+ desired_mask = min(desired_mask, 4)
+
+ if(desired_mask != current_mask)
+ current_mask = desired_mask
+ src.add_filter("bite", 0, alpha_mask_filter(icon=icon('goon/icons/obj/food.dmi', "eating[desired_mask]")))
+
. = COMPONENT_CANCEL_ATTACK_CHAIN
L.taste(owner.reagents) // why should carbons get all the fun?
if(bitecount >= 5)
diff --git a/goon/icons/obj/food.dmi b/goon/icons/obj/food.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..c8ca42d14f4913a727199cfcbf8f236a5069eda4
GIT binary patch
literal 12978
zcmb7rbx>Tvv+m;VPH+nj!QI_qahIS$65K7gySqz*yF&=>nqZ5&`=W32t9tdSZr%H;
z?jL7%&+M7A-QRpY-KVEdq?(E>8Zt35002Ofmy^~3;;msdu!^t
zN?E#CINN@8wRLg?06cS27bYElQJ^ARx?JN{2z%&@x=&ataNo`JNbF)Fs3FR1{_uGr
z<#6cCToZdT3)&O)x$}Q*6V~+UUChsDC@vs&^YZ#xUH;)ul}xUxo8>Ig_z4{+dzH+Y
z73_Kcvyl-RtL0*ag;6Y$mEm&l*8+CwIh+Q$8ytkw{i25A@s=_La&mruw342U7
zN{BrtM_*us9qJCy?i>1hBGasHM`EaAFu9cejQYJM7G+Z!kUYV%j!5f}LfF)t^H8ueUK40Iyj{)g6;2*WWcfH^*O0DuA@FD0(&nRAxw
z<%z4+QwLI!;F+VzO+ahFL`4cArG$l2$JC1v5GdYc-;RqKr-<9RGad>ZkI}g(KP1H)
zBn_7)QRf=NhQpez8>tEk5lfotahI@GmGcYGteVRWb@lK@^4>TYonI`kI??PnIRjnf
z0F7jmUp6feVWF2d_m5#P5&g#zq2Qnis9YTlGY%_tu20_yDq`
zhRd(3PUqL07g4+i4&9%pV6tH~2eWfLi2z_}cpD~{rieG9lTxg=jYse;CsS>u)4t}A
z_oyEBhT+R6<-*yl4;x++TeIgKQ97l4Z|9mz#(lTyh1JfMV9AT{vul6)S@h3WjBl3-
z@O^yDX^{Ys9}Q`@bC4wHxe^!#sCysIVNFjxh}%tUU-fyRdOV2p!tcet#}dglL0+Gm|*ANnIqHxPAOvan=WaTFBX;=VE2H)qy1%M
z?JTJjTc6f+urR)~KQRd436J`FdNsQtSi-I(NGfD}^~F=eX_D2!TuqKMw6r0_T2;}I
zM+i-a+xn(u?4$YaBnJPkVtL03%eM@oP+upk8$CG#tFmclLz=uN^oQ%L7i=CQ*dm
z@!{p+?6qy@zUZT5S3*?yMmbxQ@dMSAB&&)3;bm2p=a*!(wa#0WJpcRmLN=CzGu{nr
z^FLz2Z?7FCQZllepB8Wei6nOxI4r%^c#GNnfyWh9T2xd6Bhzf!`5vwI4EXuYWr=L;
z%us=2+pf^Rup^K$3LDyTg1Z#TV&b-CKT3(yLgT01!(@@_X|)cPIwjN)mctYX`F&5x
ztQ)C$zj4E>RR}6PKScRZQR!ILfDfIWRawacIJ4dFzo(njMIX91FCMly4W4II0?ARrA4-dEUk}Hb!NfNtbFZ1XGsx
ztA}L(;cTHVEIW#)UAKjx)c(?GYEz^*fUvZ`tNFy5@dI}bLv6zs;h@*`*(a~!SVyUR
zo#AP{w9-77CXtsMEfu%e4<_(;Juouz!it=41c3>g0ELGyNSSt@@5?(!GrsYwQ^L%q
zrxm}`g#PVSwc48;?Rp)0Mn6g+y1p`ZcGRn7h1p$e$jiXx$1%(6{=#LgAf;B$md?-n
z0*KMc@4XpPi+-@yf{j63t}M!Bnket+LQDXv(_SAv@t<#J9T0p}D8#Zrj3tybl_LqF
z{Fa+Wo=J3C=LGsU4K7cl>F@lf%g^9_3ly
zVS}QDXicP{&)n`-c#E@jS^lIl+U?ElzVA1z
zN#&_C@I;NP4tc;>QgL@rS5kZ&(c@vpi~k>Lyw{m$v&poF*7~DrZ*>26m~MI5+G@|m
zvK=pQ^)F(rfgn{Jjzz?8URIkT2y1$jpnk3=s9-f;N&h!hieqftT_DL@xL=T-I
znXB4$kYEWJ(75fPA|)U6_Oh71pDnB(tqe97H>Ukg4HJ2LQ%F%erzB$GKpJ-pMT(0h
zDXQw!*icYGsMT}xTY9~#!DH9K&qzbSaLr(x-qEoXqK41#D9HUOSfC|;!s>a{{+RKY
z)EQMlK)`uSS;~lvQ4v2eqP{FHu~?>9R6BfWI=zB2eRSu$!>Uwl-uy|2$=h+={$4Hm
zm*W#VO|V2T3?dS`S}Q+kpAr$g()b*jd%6h*dr2r&Ms
zlbmZ`=b=Sld2pcf^(N`Q=C7BBZ&3WQSM|M_(Z`7r1FolqhlP}ZnYE~z{A@{Dk-sp=F_^Fg}kXC9eu@zeSOuA0P>u0#lp;>zviucvZ
za>hkVpR2-$U&I^ftIk7nP5|~LMcn;!u@la~rfxkOzbCUFPG#)8ima>pF-zqpwLTJf
zEnSx;N%6JhcgzU8hq9Y~3(Jd}J14_i+s-!0m&L8TruKGpU-DiB&2YhQ+8)C15^M4Sia0EkqvjG)>?;Z@O3C%&IjFa8nWUpOLTqCW)zh~vI=
z6l->hzB?C!$mFiiNp13o?t@R~vd1T61x9-MN;T;wyx2Atvj?R}#3cA|4D-3&Q4;0X
z8T(vptWIplm(x{#*G&MNbm&Wl$+uC%Oc2gL*Sru%sJ7=Kvks#%P}?{qp9zifp0aTSnl)l>_&T3
zS!x2-Z?pZIMdhD73*(9Ynmc9DQlj+CrtLu_&q&l$NR4WH4Tow)uUm}N>Qa`^E%2;z?r{ENz}
z4~Wmrv{|-L8w4I7_&y7p3N^ho5muAx_ZHXbi@i%{3d;l^qkU6(Ke#{@9lNcz<`ACz
z%RSyC)Dd;0Grb!<`$?r5h~>2MDhZf@AHlv1_C?_KiFnMq$CFS0N(-Ph5s6=(n+1eO
zi!S%5_v1$u0})4*>9((rnl$n1vwkHB)3D=A!%DZsjo;URW_9nPJ*9gnU-$Hqob9IF
zJMEp2s)ZcWlAH)vcib8B$vt$DiM_mri5LWuALbd#OA1<_9g_Bi!R&ycD%?i5sEAb)
z&!0NjjMv<0FR*=~aFR&TZ{!77mr3L(Er5hfz0l=2(nt6^+3Z_-7ALuIbZ^u*1cl2?(|5Z!f$(Ha#k9TZ_d-s
zCfmOwsH-#vrWjNxytS>K(J9phybez-UfGoTD((h-4;K8%#+GtH;OU`7s?-|rTDErH
zDxc;4jv1rHKsbeq&25WR&*ngVa`oYpcB$zP1+y1Hf)Vd)GtVvVQGBGm@%hI=S{K=<*t=Nsv+_mS($5hfSpJOSudPP
zMf_Aju`iQ0^WIv!eHePI+26T?4zJW#wO!y0+J}(083A__+n)7VpEZcMBS%Ns+4f18
zV%fJ9zCK=oH{Q@O&aRVPGa}?QRQVEzZmP2yT2kN|w!(ByJl7~!BPq$ov+Afz#Dvw|
zMQcvLY7anw!)sndzG}J*f5gs5G6gYXu{W*0`8&J68{yeYq_(`x9sA&w+xc-^dYDjU
z8q@W<-`Du&&ZejsDZL&D<^Vkj>shT`gXUv29>=w*DlI41_KiH(6jgCv`vk_KEv3T0
z0>3gP#$sEh059&57|NH-?^(fL0-~)W-33z{Y@$fpG}6BBjkDGeWl3zC%#%Hxr2A4
z5Yg|h6$2bvvsG{tCgR* Cb572@IBKdyb
zMa1-82Oj4;Uz0!DTN}VOpeY_-Ap0!V7L24fd46J7$~QAP_Ycx#rDO@#DP
zCzqK`2n`SR{;czS*Df!ZFIS?>y|)dtFgMRg_hVXpcKTM~3y9wnK@-!u9u|6dV%c48
znGV~H!R6YyWw7dE3Fz~=2#vbAUe8w^CkdhgJ$kU#J&(BoJ`4B2CJ36wZBS49m$>$j
zbjv!jc*KM)UH({wucW*X5Q46n9h~m(F2lswy;V&V<9&8oaCpPuKKoM1xZP(h2!(j*
z(Er}xS*5bFL{eYkZ~54db@#p97cf+d&gpaW4v`umkjIg}5``R&qS=A8AWbhRN}pvj
zn!McRg@6+615ZpCyk1~d7V-W!rmZdK^H-DwqlH^CDs*S5Vuv-ErHEdND-)d6wm(Nyb+#4sj8A#}9ENDvDa_t#=P;
zCBLJ!3X`;1e`R=~JFKbAE!7S`-ZBAf4pcvXp5t;8q{V~d`!d!_%^na*6cxJ~|fqj=Uyg19$ezj>BzG(EVCnrBW-fCg|
zBhfY*`3pmi;G33|3d~EFFPA9@jOqBWN)wxN6uG5D>C?*Hk~-EX{(8=K?O9A!l;lm;
zJxsb@C*B?9kGzri%a-p_%2F}CXy|EKH4}4zYGnd
zyJXrOg1;ERgEEzW(c*9LJHN{|pR24saUnFmD3{G+*Jfw8vV4B2R!7hfpw;p>`(4#2
z{b|w6m0Gf6qa8^*9)|H3X06Tcr}m#0WeMJhOF!iI@l3q#Nn~SS$oR1-(Ug@=o!5^K
zQ|-JNF(h|a{Z2n#eMg&{MDXCGwQbRFxyhoO01L?ay;UHhHXa#(E=YvzO3@{)mmSOnpj?6
z?1B-LiWYXzHA%LG2nEJ2Wd~PJi-P8Y&_pXwW!tC
z_ts1ja6mh>al;2d>pj(IWf1X}^3yDe4?Y@os)hwjx3JC$Jx?jl{XRxu)$e5?X>;fZ
zQ+_TXI$Vr^cSc6OR9tzmO96g{)l-T$6!vMX61=GW;7z;9`(;YZ%F4;zjJvF1^1XHk
zV8tPjR8c{HTfMRU67?+b^F!S+OZWuP*m-!mkCZF#5iq@e5Fzl?YX?4yr@h%az5r-q
zoz0&6{Ap8ysW5sR26-Wg;bBowQRJ*WfWo0*F3BmTadTFewq~=Fd#R&Bj21DRSLdD=?rD<3F?%)QrI}v{bH=dnMH2!o}=snG^HFmY1+_+=HK7V~Cwifmrh=5ZtZLR79?#L)9cRJJDbaASX
zlwoV8P7E-FK0<*er%w+m2ki$_R|^`tbSY(V&OSE0usTjoy=(%SJA#u{-}
zWT!no;GDAyitucCOx|6t_;oknjpiOt9g=|SjYmK;bBRQaEGu&*FcWwDjC+8&t_Cah
zr&yps_^H%EWTee<$J3OEEA{kXUHMh_veVnS+d_WrrFnN`!PRlnn4w15n--cJwOyt-
zqTH7f*1tz*WsCP$(N5iC8m?lww_@T|HdLFv4KqLi*4~aUjxvA}&{6m4Gs*hWiQHk!
zJ)UirwuC5S9{n`_tuomm8u#D0>E@*nR}YVk4(`dybJ48@jm>}34c
zG^{L=!TiZu=BXi3o=9){1N$S%WN&7D?_a6tQ}5V>;QBD%#Rm43C|IrVt>^C>18RNK
zn;^6Qx0g3GBV-itxtx6SbF4uvEeV9B-oEbmc-)wz$I4;*j9uL{z9Tdu_J~Bk`3G&r
z9#6{HCBDD#?}#k0N-(<$QiU4gDJrSqzr7YE95>kVw16UCAVA95;Vh`ne*FjFdDzt;
ztYskz(f7hzSV0gc#{uilC!tQNvKB{F
zI~*7qknV_lSnt?{fyUu;-YxBzz
zpK8lzoCZ052*5X^{tPC*xHw7XHQ5K^i41wXX(qI?$QE
zk}JmiaB%d@OeZuZy6bRL2D$+{FCs;{#GKk`7?1=73~V@RVHp=NwYJ6h&Achym$cXf
zI7;beBzh(WIPdwHv+~qkvL!j96&D!>1+zOXNx%^{$##lhx|IxEO?zm(9IZT*D7ZEF
z`TK_Ip1y#JJWqhTqn~Pf7-Z8^SU#2YUMh=CE&QjtGe%s1B@~`oJ&$Ff6Aw_gTaJw0
zBF#&?r>Qad-HT<7_@Htu-Dn2-yYNKI5mIY+b!lXFkLfx{rz)7CfdLDhVxc%OiW!`;
zaX-L0@w%f7SbJTv>$`l+(Z$dkW=rrrnuVF5C;FFyzD$HT33CSxD1$Yx8aHV1ZR7tOrFKGN<
zVjCjz1TGiM=tabbf*ux^j|PUCr2F4^+%f{0rzmpqmP8%KXJAxI9ISpaM9Mn57t^Y>dfgHmpyQhz;pTfvPcHF2QT
zC40j>MnbOtKP++6Qq^^}%c43&?*z-HdXk>c^W-529(l3kICV_zG76X*WepC&DYpxW-!}a?`!5$pv0GA428J+2!77bs
zxJcP?e)K5>uXk
zydeJcLEP^f$TBp5hye~I1&*gt_J??LWu-#>$m>eLSPBT0RUsndw^aJT4F};Oi$B|j
z!2@b^zHi=mQknD8&oInMIS4R-ig@v$oyob0(_0u=xVQt~Z#a}$iU0f+r-=?`5z(lY
zx&_fDxKueml*%L_|3%0sOX2GX=Ju~JwRL7yJS$@GX_mJ!o+3nPuAXaqwaFppI4-4P
z2rwJQ*p{XIo<8zTdEUu~Vck-^r@vPf-*~g*aFbiW1tf{5QY-M_vJui!U>?&6OX(`E
z>yf4tgKvQ#5yHkrjw27z2w%s~?k*OIA=MtB5dtPQnZ;s1J-q{Wt_e{XF*t-LHjw}B
zr(Gwy>H3~HGq_Shg*Pap-+5Kd%YVKQxnXrMn&?zq&ln|b!n$+&=%Iow=>pJm$O2A#
zgt%-4`D|A_y#u5uQd4{+sAd>=wc<^Llis5CvFU9diV^IxRyVHoJ5Vcht22*-D2>v-
zZ~aRz1~R(U`vz_>^eV6@O2O;xzM$_4m0XxGVO~SUf)nEW7y$5%-_<7l=M*V*T_VgG
zbkAMu8+~WUULl02%4N0ekG^D`Ed0S04#DGJV6qI#CN3y*7+7kWMz5;%kgBzLIVE=c
ztL8oMLx_5Dy2{V(FG`1NRV$af>yNd1^SKsak%8=$K+OgH##ORjSAB2)Hm~_$cy+14
zj*vWBx}dv|9h!}#0pE)YYfyWd>?gR=Ttd!2-zh~L?MLmm7tRRCnS1NbSQx07rSN7x
z3TYVmAN{;XGS?P*C9BrnC`FfqFsRBwy!2E_8z~U-L}^B>Pf#bRp&<*H-$STLE=TBP
zwq?Bd=@ZtOCN%uF=@nv6%^nj?SL=~R$0q~Fth%{j==8#jlX(;vt)Ejo&nlZ|^Y^^GH0x
ziUxEXUu{k&<(@l1e;srNEi$mQHUI!%A^fWact{u&Gzr0(5zPQi3yFV|W(phf^na`j
z>!c%T@i|61`-M({(ZzHv&3g*B@>|gDnj^={Hj9eVl&&Z#Sf85wmL1&&A4!=Vw>5ly
zj;dXq1e>fl%KGP5Qd=c2BfGJO?X9i593sXCU#|t?5qd#IQ`Y0l@4=N{1N9iI3Q|&=
z2R`L~G#sLDV#aU6xpX0!b`&tSXC=
zQ#q&KClORdRGO-}Ox;JXu!MU?G)H&8rKCf@t>eLkz_ov?`bsGJqWRs}2{LM*5+^uHEx{HHTw6&o3rC#hlR8sy;~9s$X;$I^)Yd4BFihJp(=
zo-sfQ{qK_RgX|%FHEkD;7g^*xd*ic}5ARh00e@Eu5h+dC+FT~>7*HNJ(AQ^MF3%HM
zOPr!#^gy0p^7%$(d)xK1>br0Ead~KB>sOPoBS92F`7~i9l4G#Z2ToE-v(u^A-VBlH
ztefG)`^k>m&Bs6&)w$D;#(pQ+*fP`$^1gAnNMTZ-EUSL_b6j4SpC9J`+7$G2o|?-Mz$pvs
z78Q5DuaD#o)5&!fFG-Y%x>-SWG8Y$0)p`Lbb^3&FdPP}(ct5&)BUlL
zHv~>xLMX{vLNqb41sfTquLr}^ai7eC1*z%UIG-QM!u_!C+irhQYnK*~78?haFNao@
z$$0Ex^)XS5*k|XhM5h&uv_5OXImAPRXI!_V$%4v?O?7;}F4dlQ_|twxAS*p!M65TE
z=|JxGgC?Cn+RgUupDJm3*CcQd(0?f2v>F(EeR<<8rG_Z8opSE{-7f<337trW#dg;wM0?t8LBfL^P
zcoz#;wCINVnKtpzajVUrIO*CV=dEK<$(LAlEVSUtt{Jv-MJ!-rlrnIYjZ$B&NJw9=Zg70Nre&o&0f{DTb5Zgi}~!8mqec@06Pb`+B!)@QQbcV$}$u=VT$
zVGB7yG_1Rr^~y8V+bH2gI>LrY3ZT68j^Q@aP!XR3p*NZXP9i4j&<#C)FYm>zV_
z(x5-Kao$FKv)YD}iY-$JNW#Kd178EdQ-_W57l|6f#tt4hq=~`$cuUKcj$+h&?*YLoZJ0@d>
z><;&;>h|Ma1z&$|;cOBlc>5aSTBb{5>YiCHebydWMGPUakrA~rAva*jZ8JF!
zQKvDiGY!i0jMDXLcU}?T=FMJ+VG}r0-Jr{c@V9_>C$Q3@c8Oj%=Yz5E)Qn9faQ6c-
z%Qse?@6;;+aRX(Fvr0a~%7SLTFwm5>BlZUK)#mo4ol|)Hiz%zYYFkYzgh1yUV+({R
z?~Orym5uj|A&UpQqgsb)Wob>hNzeGLEcG8=7BEQGrtgCJ*CWEbv-Lnawshlh>#=sj
z*p($gw_OQ?&-UpT8o&0xh%3{cqSppe&~vWnhblnaa*gB7k&$+zl3s_~Je9#fXl6r*
zMVIgBhdgD}zg93;@u=jbQEtv`RG?Da*FI#ZZs_0z
zE=?l;L)=#Z`+%pI*_!2G#_oJb@O*4nwYYchz?eg287KMR2!$TuUuKvA&e*5#6TAj^
ztD0A?3SvsL(~@>;{stbZi%Cl2gmEgPl9y=->ZN=VOJEZQs<8?KYv7v0ef3=4_>vrJ
z>?>Kv(gYJa+~rsJV}%~i897`?aqc>b+1|3YH1KMu@geDN-;5TAK%*fh
z3c1(n>Z+2Os=3oSP9Iqj>5}#G6>5DWWp2odwd4oZsJ2~I{X3MH%NB|uRQ9(tF#xSz
zk@}tg#{9IY&Vc)5?giX3lJ91Folng+gwKZ_y^rwEt9cyf#$&~{Z7O>DD>w@)c@ZNcZko2?8Qs{zXH(zA*krD4cp^2qGstmB2Itp
zFf-dmw1phi$E|vODcsexI`1ix6l%H|d=hi;uvmCF(M&Xkkdr8K{;(2T&L361Ixts|
z6tej?vU+bHc1p5I`MeoB;mnciVPm5wc)m9GI`g*7KQY+2Nb2!6{k)x0uj3%>Gs8f6
z?|ko-kx_tZ8zZ*9L9a5jd#b+xC+X|YW%8|gld-83r`O*5JGY5UKkliNzQsF_P}^H5
zu;a#5%FNQ!88MX6I_nF|;(MQ@qVDsPz}@WMwvM+r`j5T+rtAjiCwHs97REs*BU3`Z
zR4C{i2?c=Nmju93{G<4PadUj|ZL&jWavt%eNv_gR^LEV)gM#ybXzy`G@
zTVM~+=8?5_CHW6ooVoew+J7gnbjK$C^V~@-XJpOtpXwh&_P_1nMdk>#VHA&&&`lkO
zwBN5V@GOIh16y)j@6Sn_?gI=WC(*16>o~EN_;=WSQaavwoT$D)K0w^8U
z5WI#gpQ^GWJ`nhJ+;Mx;Y?U~wey56vWIn6x;`K6#_5vPiKYhN!glu(gFFFX4==a)s
z1jy#_pPH&dXhHf-`<64cwqpg%DWROt5jhN6>kGl;M>BMtHw<6)`UGaRWF>-1Cihj^
zsp@xBJa*r&2R}c1=)0FiJo~4VQ)G)+Vyl~pA4W4RaLCT(`lj36epi(1>xrrEA;dkZ
zs;-_aapi*iHS}k!yWeTJXQ5%I)y)|tqdoZ6+XTKOynz*@fBhe*JXI?`=elKi-
zfm~?+=oxX;|D_d1PWH?oRht`m>e0
z;`u!nt5*pz@%-O-+x(pnGXGEYF1x&Gr_Rf!_KY=n5z&T`G;nHF(fH483k?nKt=3ahAZh8b3XP@U{M`_%F&pMB_mlmH
zI;P5wRh3Bh6=f$ys#jb?h1(;@$OOnh<&Vm=K;R@#6Ses)*|RnyiASo{OuZAW%%HjJ
z_9qnBr5S6uQ$}wF?5c6Giq(@q_pen9Z?xkMU3m5Q%IFsAb_g@&
zS8W`nu%3qb7KKc)ne;mSK0FU*wLKU)IXSiBLSd@Hx3X34fNQ3dp6AOCzQey^oHePd
z8hu5!9CF#@EeHpZ0IbPl^g?Pf@-V0oikRC-Ph8q}!8L6bL0n$fyDEES5-Z==LDtTD
zXN?O7EIkAQqX-$&zZYGqCeExU9TgjAJKEO
z4+_vZUS1%F7-&qUfN@&RovdEC<1)`dnODGOkr)WMv)oOvcJ;l#0M)UZbou=Xgb%ke
z(9gC|750t
Date: Mon, 16 Oct 2023 15:00:25 -0400
Subject: [PATCH 37/85] Update scheduled_events.dm
---
monkestation/code/modules/storytellers/scheduled_events.dm | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/scheduled_events.dm b/monkestation/code/modules/storytellers/scheduled_events.dm
index bbb4730992de..3440f09fcb07 100644
--- a/monkestation/code/modules/storytellers/scheduled_events.dm
+++ b/monkestation/code/modules/storytellers/scheduled_events.dm
@@ -49,9 +49,8 @@
/// Remove our fake occurence pre-emptively for the checks.
remove_occurence()
- var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
///If we can't spawn the scheduled event, refund it.
- if(!ignores_checks && !event.can_spawn_event(players_amt)) //FALSE argument to ignore popchecks, to prevent scheduled events from failing from people dying/cryoing etc.
+ if(!ignores_checks && !event.can_spawn_event(1000)) //FALSE argument to ignore popchecks, to prevent scheduled events from failing from people dying/cryoing etc.
message_admins("Scheduled Event: [event] was unable to run and has been refunded.")
SSgamemode.refund_scheduled_event(src)
return
From e5e929570852f2f35c27f9c4ac9883c0f6977328 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 15:05:00 -0400
Subject: [PATCH 38/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 3 ---
1 file changed, 3 deletions(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index f5c44ec935e3..cf49f036be4a 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -766,9 +766,6 @@ SUBSYSTEM_DEF(gamemode)
continue
choices += storyboy.name
choices[storyboy.name] = 0
- ///Because the vote subsystem is dumb and does not support any descriptions, we dump them into world.
- to_chat(world, span_notice("[storyboy.name] "))
- to_chat(world, span_notice("[storyboy.desc]"))
return choices
/datum/controller/subsystem/gamemode/proc/storyteller_desc(storyteller_name)
From a134d8392acbde5996ae85499f93308a7dd13aa4 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 15:22:46 -0400
Subject: [PATCH 39/85] should fix the error sprite issue
---
code/modules/hydroponics/seeds.dm | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 88468a7a7bc3..7106acc5c543 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -178,6 +178,11 @@
copy_seed.reagents_add = reagents_add.Copy() // Faster than grabbing the list from genes.
copy_seed.harvest_age = harvest_age
+ if(istype(src, /obj/item/seeds/spliced))
+ var/obj/item/seeds/spliced/spliced_seed = src
+ var/obj/item/seeds/spliced/new_spliced_seed = S
+ new_spliced_seed.produce_list += spliced_seed.produce_list
+
return copy_seed
/obj/item/seeds/proc/get_gene(typepath)
From 5a493535af2f93b335182ce871e28d90c8275a34 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 15:24:44 -0400
Subject: [PATCH 40/85] whoops
---
code/modules/hydroponics/seeds.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 7106acc5c543..b4a106e2ee7c 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -180,7 +180,7 @@
if(istype(src, /obj/item/seeds/spliced))
var/obj/item/seeds/spliced/spliced_seed = src
- var/obj/item/seeds/spliced/new_spliced_seed = S
+ var/obj/item/seeds/spliced/new_spliced_seed = copy_seed
new_spliced_seed.produce_list += spliced_seed.produce_list
return copy_seed
From 52e067f4f40f3b2f5aaffd8dff93c26129f3f808 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 16:24:02 -0400
Subject: [PATCH 41/85] Update seeds.dm
---
code/modules/hydroponics/seeds.dm | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index b4a106e2ee7c..3ca0bc5d48b0 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -175,9 +175,19 @@
copy_seed.desc = desc
copy_seed.productdesc = productdesc
- copy_seed.reagents_add = reagents_add.Copy() // Faster than grabbing the list from genes.
+ copy_seed.reagents_add = reagents_add.Copy() // Fastetr than grabbing the list from genes.
copy_seed.harvest_age = harvest_age
+ copy_seed.harvest_age = harvest_age
+ copy_seed.species = species
+ copy_seed.icon_grow = icon_grow
+ copy_seed.icon_harvest = icon_harvest
+ copy_seed.icon_dead = icon_dead
+ copy_seed.growthstages = growthstages
+ copy_seed.growing_icon = growing_icon
+ copy_seed.seed_offset = seed_offset
+ copy_seed.traits_in_progress = traits_in_progress
+
if(istype(src, /obj/item/seeds/spliced))
var/obj/item/seeds/spliced/spliced_seed = src
var/obj/item/seeds/spliced/new_spliced_seed = copy_seed
From d19c0c02739d2db6425c218bb3acdc2c61e3d87f Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 16:24:11 -0400
Subject: [PATCH 42/85] Update seeds.dm
---
code/modules/hydroponics/seeds.dm | 1 -
1 file changed, 1 deletion(-)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 3ca0bc5d48b0..51c7ba004a50 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -178,7 +178,6 @@
copy_seed.reagents_add = reagents_add.Copy() // Fastetr than grabbing the list from genes.
copy_seed.harvest_age = harvest_age
- copy_seed.harvest_age = harvest_age
copy_seed.species = species
copy_seed.icon_grow = icon_grow
copy_seed.icon_harvest = icon_harvest
From c3d8044040b84b4deaa49e0d216845af728783e7 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 20:05:39 -0400
Subject: [PATCH 43/85] fixes non station mobs becoming antag from antag roles
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index cf49f036be4a..1ddc5ac82cfa 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -239,6 +239,8 @@ SUBSYSTEM_DEF(gamemode)
else if (observers && isobserver(player))
candidate_candidates += player
else if (living_players && isliving(player))
+ if(!(player.z in SSmapping.levels_by_trait(ZTRAIT_STATION)))
+ continue
candidate_candidates += player
for(var/mob/candidate as anything in candidate_candidates)
From 31594b2bcf3724621dbac8355d4f2357e04ada9b Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 16 Oct 2023 20:50:53 -0400
Subject: [PATCH 44/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 1ddc5ac82cfa..6622bad7c744 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -222,6 +222,8 @@ SUBSYSTEM_DEF(gamemode)
for(var/datum/antagonist/A in GLOB.antagonists)
if(!A.owner)
continue
+ if(istype(A, /datum/antagonist/abductee))
+ continue
total_valid_antags++
return (get_antag_cap() > total_valid_antags)
From 0542616aa8513d477d30bb8261edead65dd8da5f Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Tue, 17 Oct 2023 15:34:56 -0400
Subject: [PATCH 45/85] first ghost role done god have mercy on my soul
---
code/modules/events/_event.dm | 5 +++
.../converted_events/_base_event.dm | 42 ++++++++++++++++++-
.../converted_events/solo/ghosts/wizard.dm | 28 +++++++++++++
.../converted_events/solo/wizard.dm | 8 ++++
.../storytellers/gamemode_subsystem.dm | 11 ++---
tgstation.dme | 1 +
6 files changed, 88 insertions(+), 7 deletions(-)
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index f1e05d02f53d..e4062cb23974 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -228,6 +228,8 @@ Runs the event
var/oshan_blocked = FALSE
/// Whether the event called its start() yet or not.
var/has_started = FALSE
+ ///have we finished setup?
+ var/setup = FALSE
//monkestation vars end
//Called first before processing.
@@ -239,6 +241,7 @@ Runs the event
//This is really only for setting defaults which can be overridden later when New() finishes.
/datum/round_event/proc/setup()
SHOULD_CALL_PARENT(FALSE)
+ setup = TRUE
return
///Annouces the event name to deadchat, override this if what an event should show to deadchat is different to its event name.
@@ -359,6 +362,8 @@ Runs the event
//This proc will handle the calls to the appropiate procs.
/datum/round_event/process()
SHOULD_NOT_OVERRIDE(TRUE)
+ if(!setup)
+ return
if(!processing)
return
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 1c2cc199b902..dfb104ceb2c8 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -69,7 +69,7 @@
/// Prompt players for consent to turn them into antags before doing so. Dont allow this for roundstart.
var/prompted_picking = FALSE
-/datum/round_event_control/antagonist/solo/ghost/get_candidates()
+/datum/round_event_control/antagonist/solo/from_ghosts/get_candidates()
var/round_started = SSticker.HasRoundStarted()
var/midround_antag_pref_arg = round_started ? FALSE : TRUE
@@ -139,18 +139,56 @@
restricted_roles = cast_control.restricted_roles
prompted_picking = cast_control.prompted_picking
var/list/candidates = cast_control.get_candidates()
+ if(prompted_picking)
+ candidates = poll_candidates("Would you like to be a [cast_control.name]", antag_flag, antag_flag, 20 SECONDS, FALSE, FALSE, candidates)
for(var/i in 1 to antag_count)
if(!candidates.len)
break
var/mob/candidate = pick_n_take(candidates)
+ if(!candidate.mind)
+ candidate.mind = new /datum/mind(candidate.key)
+
setup_minds += candidate.mind
candidate.mind.special_role = antag_flag
candidate.mind.restricted_roles = restricted_roles
+ setup = TRUE
+
+
+/datum/round_event/antagonist/solo/ghost/setup()
+ var/datum/round_event_control/antagonist/solo/cast_control = control
+ antag_count = cast_control.get_antag_amount()
+ antag_flag = cast_control.antag_flag
+ antag_datum = cast_control.antag_datum
+ restricted_roles = cast_control.restricted_roles
+ prompted_picking = cast_control.prompted_picking
+ var/list/candidates = cast_control.get_candidates()
+ if(prompted_picking)
+ candidates = poll_candidates("Would you like to be a [cast_control.name]", antag_flag, antag_flag, 20 SECONDS, FALSE, FALSE, candidates)
+
+ for(var/i in 1 to antag_count)
+ if(!candidates.len)
+ break
+ var/mob/candidate = pick_n_take(candidates)
+ if(!candidate.mind)
+ candidate.mind = new /datum/mind(candidate.key)
+
+ setup_minds += candidate.mind
+ var/mob/living/carbon/human/new_human = make_body(candidate)
+ candidate.mind.set_current(new_human)
+ candidate.mind.special_role = antag_flag
+ candidate.mind.restricted_roles = restricted_roles
+ setup = TRUE
+
/datum/round_event/antagonist/solo/start()
for(var/datum/mind/antag_mind as anything in setup_minds)
- add_datum_to_mind(antag_mind)
+ add_datum_to_mind(antag_mind, antag_mind.current)
/datum/round_event/antagonist/solo/proc/add_datum_to_mind(datum/mind/antag_mind)
antag_mind.add_antag_datum(antag_datum)
+
+/datum/round_event/antagonist/solo/ghost/start()
+ for(var/datum/mind/antag_mind as anything in setup_minds)
+ add_datum_to_mind(antag_mind)
+
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm
new file mode 100644
index 000000000000..a8720fcf90fa
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/wizard.dm
@@ -0,0 +1,28 @@
+/datum/round_event_control/antagonist/solo/from_ghosts/wizard
+ name = "Ghost Wizard"
+ tags = list(TAG_COMBAT, TAG_DESTRUCTIVE)
+ typepath = /datum/round_event/antagonist/solo/ghost/wizard
+ antag_flag = ROLE_WIZARD
+ antag_datum = /datum/antagonist/wizard
+ restricted_roles = list(
+ JOB_CAPTAIN,
+ JOB_HEAD_OF_SECURITY,
+ ) // Just to be sure that a wizard getting picked won't ever imply a Captain or HoS not getting drafted
+ maximum_antags = 1
+ weight = 2
+ min_players = 35
+ max_occurrences = 1
+ prompted_picking = TRUE
+
+/datum/round_event_control/antagonist/solo/ghost/wizard/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
+ . = ..()
+ if(!.)
+ return
+ if(GLOB.wizardstart.len == 0)
+ return FALSE
+
+/datum/round_event/antagonist/solo/ghost/wizard
+
+/datum/round_event/antagonist/solo/ghost/wizard/add_datum_to_mind(datum/mind/antag_mind)
+ . = ..()
+ antag_mind.current.forceMove(pick(GLOB.wizardstart))
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
index bb5fa439758f..a0069ece6634 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/wizard.dm
@@ -10,6 +10,7 @@
) // Just to be sure that a wizard getting picked won't ever imply a Captain or HoS not getting drafted
maximum_antags = 1
roundstart = TRUE
+ earliest_start = 0 SECONDS
weight = 2
min_players = 35
max_occurrences = 1
@@ -25,4 +26,11 @@
/datum/round_event/antagonist/solo/wizard/add_datum_to_mind(datum/mind/antag_mind)
. = ..()
+ var/mob/living/current_mob = antag_mind.current
+ SSjob.FreeRole(antag_mind.assigned_role.title)
+ var/list/items = current_mob.get_equipped_items(TRUE)
+ current_mob.unequip_everything()
+ for(var/obj/item/item as anything in items)
+ qdel(item)
+
antag_mind.current.forceMove(pick(GLOB.wizardstart))
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 6622bad7c744..fc780ae058d0 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -246,12 +246,13 @@ SUBSYSTEM_DEF(gamemode)
candidate_candidates += player
for(var/mob/candidate as anything in candidate_candidates)
- if(QDELETED(candidate) || !candidate.key || !candidate.client || !candidate.mind)
- continue
- if(no_antags && candidate.mind.special_role)
- continue
- if(restricted_roles && (candidate.mind.assigned_role.title in restricted_roles))
+ if(QDELETED(candidate) || !candidate.key || !candidate.client || (!observers && !candidate.mind))
continue
+ if(!observers)
+ if(no_antags && candidate.mind.special_role)
+ continue
+ if(restricted_roles && (candidate.mind.assigned_role.title in restricted_roles))
+ continue
if(be_special)
if(!(candidate.client.prefs) || !(be_special in candidate.client.prefs.be_special))
continue
diff --git a/tgstation.dme b/tgstation.dme
index 472f79fce35a..9b0717ec102c 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6280,6 +6280,7 @@
#include "monkestation\code\modules\storytellers\converted_events\solo\revolutionary.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\traitor.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\wizard.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\ghosts\wizard.dm"
#include "monkestation\code\modules\storytellers\storytellers\_storyteller.dm"
#include "monkestation\code\modules\storytellers\storytellers\ghost.dm"
#include "monkestation\code\modules\storytellers\storytellers\jester.dm"
From 9faaf60f900df0afb65fb85927000aa7e9674621 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Wed, 18 Oct 2023 01:20:25 -0400
Subject: [PATCH 46/85] fixes
---
monkestation/code/modules/loadouts/items/under/under.dm | 4 ++++
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 1 +
tgui/packages/tgui/interfaces/Changelog.js | 2 +-
3 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/monkestation/code/modules/loadouts/items/under/under.dm b/monkestation/code/modules/loadouts/items/under/under.dm
index e3cc7646ab7a..a8b52d2c1f44 100644
--- a/monkestation/code/modules/loadouts/items/under/under.dm
+++ b/monkestation/code/modules/loadouts/items/under/under.dm
@@ -477,3 +477,7 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/donator
donator_only = TRUE
requires_purchase = FALSE
+
+/datum/loadout_item/under/miscellaneous/shrine
+ name = "Shrine Priestess Kimono"
+ item_path = /obj/item/clothing/under/dress/shrine_priestess
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index fc780ae058d0..033aa28a8912 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -1136,3 +1136,4 @@ SUBSYSTEM_DEF(gamemode)
if(listed.name != event_name)
continue
listed.occurrences++
+ listed.occurrences++
diff --git a/tgui/packages/tgui/interfaces/Changelog.js b/tgui/packages/tgui/interfaces/Changelog.js
index f5974964b081..9ee1a7b49719 100644
--- a/tgui/packages/tgui/interfaces/Changelog.js
+++ b/tgui/packages/tgui/interfaces/Changelog.js
@@ -193,7 +193,7 @@ export class Changelog extends Component {
{'You can also join our discord '}
- here .
+ here .
{dateDropdown}
From 60100e26b7a9f715640a219791cafd85ec0e0c1c Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Thu, 19 Oct 2023 12:34:17 -0400
Subject: [PATCH 47/85] sets points to a flat 0 incase of issue
---
.../code/modules/storytellers/storytellers/_storyteller.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index 5240be005c31..704c72239dbb 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -126,6 +126,7 @@
message_admins("WARNING: Storyteller picked a null event from picked_events when it had a length of [length(valid_events)]")
message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
stack_trace("WARNING: Storyteller picked a null from event pool.")
+ SSgamemode.event_track_points[track] = 0
return
buy_event(picked_event, track, are_forced)
. = TRUE
From 503cee2aaf928ba6e5901c24406e8248a39ce5da Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 00:36:02 -0400
Subject: [PATCH 48/85] antag events tagged. new tab to see failures
---
code/modules/events/_event.dm | 6 ++
code/modules/events/ghost_role/abductor.dm | 1 +
.../events/ghost_role/alien_infestation.dm | 3 +-
code/modules/events/ghost_role/blob.dm | 3 +-
.../events/ghost_role/changeling_event.dm | 1 +
.../events/ghost_role/fugitive_event.dm | 1 +
code/modules/events/ghost_role/morph_event.dm | 1 +
code/modules/events/ghost_role/nightmare.dm | 1 +
code/modules/events/ghost_role/operative.dm | 1 +
.../events/ghost_role/revenant_event.dm | 1 +
.../events/ghost_role/sentient_disease.dm | 1 +
.../events/ghost_role/slaughter_event.dm | 1 +
.../modules/events/ghost_role/space_dragon.dm | 1 +
code/modules/events/ghost_role/space_ninja.dm | 1 +
code/modules/events/space_vines/vine_event.dm | 1 +
.../antagonists/florida_man/florida_events.dm | 1 +
.../new_antagonists/slasher/ghost_role.dm | 1 +
.../converted_events/_base_event.dm | 62 ++++++++++++++++++-
.../storytellers/gamemode_subsystem.dm | 2 +
19 files changed, 86 insertions(+), 4 deletions(-)
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index e4062cb23974..00e39b87f6a7 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -105,6 +105,12 @@
if(ispath(typepath, /datum/round_event/ghost_role) && !(GLOB.ghost_role_flags & GHOSTROLE_MIDROUND_EVENT))
return FALSE
+ //monkestation edit start - STORYTELLERS
+ if(checks_antag_cap)
+ if(!roundstart && !SSgamemode.can_inject_antags())
+ return FALSE
+ //monkestation edit end - STORYTELLERS
+
var/datum/game_mode/dynamic/dynamic = SSticker.mode
if (istype(dynamic) && dynamic_should_hijack && dynamic.random_event_hijacked != HIJACKED_NOTHING)
return FALSE
diff --git a/code/modules/events/ghost_role/abductor.dm b/code/modules/events/ghost_role/abductor.dm
index 654a8eeb1f46..5188f3ef6293 100644
--- a/code/modules/events/ghost_role/abductor.dm
+++ b/code/modules/events/ghost_role/abductor.dm
@@ -9,6 +9,7 @@
description = "One or more abductor teams spawns, and they plan to experiment on the crew."
track = EVENT_TRACK_MAJOR
tags = list(TAG_TARGETED, TAG_SPOOKY)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/abductor
minimum_required = 2
diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm
index 5d4dcbe19893..fb6e04610928 100644
--- a/code/modules/events/ghost_role/alien_infestation.dm
+++ b/code/modules/events/ghost_role/alien_infestation.dm
@@ -5,12 +5,13 @@
min_players = 35 //monkie edit: 10 to 35 (tg what the fuck)
- earliest_start = 90 MINUTES //monkie edit: 20 to 90
+ earliest_start = 60 MINUTES //monkie edit: 20 to 90
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
description = "A xenomorph larva spawns on a random vent."
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event_control/alien_infestation/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
diff --git a/code/modules/events/ghost_role/blob.dm b/code/modules/events/ghost_role/blob.dm
index 5bc8ed7a6009..2278ca8cca18 100644
--- a/code/modules/events/ghost_role/blob.dm
+++ b/code/modules/events/ghost_role/blob.dm
@@ -6,12 +6,13 @@
min_players = 35 //monkie edit: 20 to 35
- earliest_start = 90 MINUTES //monkie edit: 20 to 90
+ earliest_start = 60 MINUTES //monkie edit: 20 to 90
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
description = "Spawns a new blob overmind."
track = EVENT_TRACK_MAJOR
tags = list(TAG_DESTRUCTIVE, TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event_control/blob/can_spawn_event(players, allow_magic = FALSE, fake_check = FALSE)
if(EMERGENCY_PAST_POINT_OF_NO_RETURN) // no blobs if the shuttle is past the point of no return
diff --git a/code/modules/events/ghost_role/changeling_event.dm b/code/modules/events/ghost_role/changeling_event.dm
index 7248c4147829..3bd3770da4b7 100644
--- a/code/modules/events/ghost_role/changeling_event.dm
+++ b/code/modules/events/ghost_role/changeling_event.dm
@@ -16,6 +16,7 @@
description = "A meteor containing a changeling is summoned and thrown at the exterior of the station."
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/changeling
minimum_required = 1
diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm
index ac5257c3d75e..08f1390889aa 100644
--- a/code/modules/events/ghost_role/fugitive_event.dm
+++ b/code/modules/events/ghost_role/fugitive_event.dm
@@ -11,6 +11,7 @@
map_flags = EVENT_SPACE_ONLY
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/fugitives
minimum_required = 1
diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm
index b04b0e3349bc..8ec6b9a0d72c 100644
--- a/code/modules/events/ghost_role/morph_event.dm
+++ b/code/modules/events/ghost_role/morph_event.dm
@@ -9,6 +9,7 @@
max_wizard_trigger_potency = 7
track = EVENT_TRACK_ROLESET
tags = list(TAG_COMBAT, TAG_SPOOKY)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/morph
minimum_required = 1
diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm
index 0e5f6c786e89..20a70e542454 100644
--- a/code/modules/events/ghost_role/nightmare.dm
+++ b/code/modules/events/ghost_role/nightmare.dm
@@ -10,6 +10,7 @@
max_wizard_trigger_potency = 7
track = EVENT_TRACK_ROLESET
tags = list(TAG_COMBAT, TAG_SPOOKY)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/nightmare
minimum_required = 1
diff --git a/code/modules/events/ghost_role/operative.dm b/code/modules/events/ghost_role/operative.dm
index a7d076b68b7e..6db5885bfd40 100644
--- a/code/modules/events/ghost_role/operative.dm
+++ b/code/modules/events/ghost_role/operative.dm
@@ -7,6 +7,7 @@
description = "A single nuclear operative assaults the station."
track = EVENT_TRACK_MAJOR
tags = list(TAG_DESTRUCTIVE, TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/operative
minimum_required = 1
diff --git a/code/modules/events/ghost_role/revenant_event.dm b/code/modules/events/ghost_role/revenant_event.dm
index 607a57dfca42..b15d6e9aa543 100644
--- a/code/modules/events/ghost_role/revenant_event.dm
+++ b/code/modules/events/ghost_role/revenant_event.dm
@@ -13,6 +13,7 @@
max_wizard_trigger_potency = 7
track = EVENT_TRACK_ROLESET
tags = list(TAG_DESTRUCTIVE, TAG_SPOOKY)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/revenant
var/ignore_mobcheck = FALSE
diff --git a/code/modules/events/ghost_role/sentient_disease.dm b/code/modules/events/ghost_role/sentient_disease.dm
index 78f8097b8acf..b8e769ab27fe 100644
--- a/code/modules/events/ghost_role/sentient_disease.dm
+++ b/code/modules/events/ghost_role/sentient_disease.dm
@@ -11,6 +11,7 @@
max_wizard_trigger_potency = 7
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMBAT, TAG_DESTRUCTIVE)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/sentient_disease
role_name = "sentient disease"
diff --git a/code/modules/events/ghost_role/slaughter_event.dm b/code/modules/events/ghost_role/slaughter_event.dm
index 0c0234ba3ac1..b9892fb5cecc 100644
--- a/code/modules/events/ghost_role/slaughter_event.dm
+++ b/code/modules/events/ghost_role/slaughter_event.dm
@@ -12,6 +12,7 @@
max_wizard_trigger_potency = 7
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMBAT, TAG_SPOOKY)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/slaughter
minimum_required = 1
diff --git a/code/modules/events/ghost_role/space_dragon.dm b/code/modules/events/ghost_role/space_dragon.dm
index c6f268290231..8b579abad17d 100644
--- a/code/modules/events/ghost_role/space_dragon.dm
+++ b/code/modules/events/ghost_role/space_dragon.dm
@@ -12,6 +12,7 @@
max_wizard_trigger_potency = 7
track = EVENT_TRACK_ROLESET
tags = list(TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/space_dragon
minimum_required = 1
diff --git a/code/modules/events/ghost_role/space_ninja.dm b/code/modules/events/ghost_role/space_ninja.dm
index e345daa30668..894e092a1c21 100644
--- a/code/modules/events/ghost_role/space_ninja.dm
+++ b/code/modules/events/ghost_role/space_ninja.dm
@@ -10,6 +10,7 @@
description = "A space ninja infiltrates the station."
track = EVENT_TRACK_ROLESET
tags = list(TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/space_ninja
minimum_required = 1
diff --git a/code/modules/events/space_vines/vine_event.dm b/code/modules/events/space_vines/vine_event.dm
index 014f5c2c71a5..825244ad7f3b 100644
--- a/code/modules/events/space_vines/vine_event.dm
+++ b/code/modules/events/space_vines/vine_event.dm
@@ -16,6 +16,7 @@
)
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMMUNAL, TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/spacevine
fakeable = FALSE
diff --git a/monkestation/code/modules/antagonists/florida_man/florida_events.dm b/monkestation/code/modules/antagonists/florida_man/florida_events.dm
index e54a5044a74f..1055348961ea 100644
--- a/monkestation/code/modules/antagonists/florida_man/florida_events.dm
+++ b/monkestation/code/modules/antagonists/florida_man/florida_events.dm
@@ -5,6 +5,7 @@
max_occurrences = 3
track = EVENT_TRACK_MUNDANE
tags = list(TAG_COMMUNAL, TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/florida_man
minimum_required = 1
diff --git a/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm b/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
index 73c5d95f467d..a10fe8c00c5c 100644
--- a/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
+++ b/monkestation/code/modules/new_antagonists/slasher/ghost_role.dm
@@ -5,6 +5,7 @@
max_occurrences = 2
track = EVENT_TRACK_MODERATE
tags = list(TAG_SPOOKY, TAG_COMBAT)
+ checks_antag_cap = TRUE
/datum/round_event/ghost_role/slasher
minimum_required = 1
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index dfb104ceb2c8..57261c6426ea 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -1,4 +1,64 @@
+/datum/round_event_control
+ ///do we check against the antag cap before attempting a spawn?
+ var/checks_antag_cap = FALSE
+
+/datum/round_event_control/proc/return_failure_string(players_amt)
+ var/string
+ if(roundstart && (world.time-SSticker.round_start_time >= 2 MINUTES))
+ string += "Roundstart"
+ if(occurrences >= max_occurrences)
+ if(string)
+ string += ","
+ string += "Cap Reached"
+ if(earliest_start >= world.time-SSticker.round_start_time)
+ if(string)
+ string += ","
+ string +="Too Soon"
+ if(players_amt < min_players)
+ if(string)
+ string += ","
+ string += "Lack of players"
+ if(holidayID && !check_holidays(holidayID))
+ if(string)
+ string += ","
+ string += "Holiday Event"
+ if(EMERGENCY_ESCAPED_OR_ENDGAMED)
+ if(string)
+ string += ","
+ string += "Round End"
+ if(checks_antag_cap)
+ if(!roundstart && !SSgamemode.can_inject_antags())
+ if(string)
+ string += ","
+ string += "Too Many Antags"
+ return string
+
+/datum/round_event_control/antagonist/return_failure_string(players_amt)
+ . =..()
+ if(!check_enemies())
+ if(.)
+ . += ", "
+ . += "No Enemies"
+ if(!check_required())
+ if(.)
+ . += ", "
+ . += "No Required"
+ return .
+
+/datum/round_event_control/antagonist/solo/return_failure_string(players_amt)
+ . =..()
+
+ var/antag_amt = get_antag_amount()
+ var/list/candidates = get_candidates()
+ if(candidates.len < antag_amt)
+ if(.)
+ . += ", "
+ . += "Not Enough Candidates!"
+
+ return .
+
/datum/round_event_control/antagonist
+ checks_antag_cap = TRUE
track = EVENT_TRACK_ROLESET
///list of required roles, needed for this to form
var/list/exclusive_roles
@@ -51,8 +111,6 @@
if(!.)
return
- if(!roundstart && !SSgamemode.can_inject_antags())
- return FALSE
/datum/round_event_control/antagonist/solo
typepath = /datum/round_event/antagonist/solo
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 033aa28a8912..6201dfb0422b 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -957,6 +957,7 @@ SUBSYSTEM_DEF(gamemode)
dat += "M.Pop "
dat += "M.Time "
dat += "Can Occur "
+ dat += "Failure Reason "
dat += "Weight "
dat += "Actions "
dat += ""
@@ -999,6 +1000,7 @@ SUBSYSTEM_DEF(gamemode)
dat += "[event.min_players] " //Minimum pop
dat += "[event.earliest_start / (1 MINUTES)] m. " //Minimum time
dat += "[assoc_spawn_weight[event] ? "Yes" : "No"] " //Can happen?
+ dat += "[event.return_failure_string(active_players)] " //Why can't happen?
var/weight_string = "(new.[event.calculated_weight] /raw.[event.weight])"
if(assoc_spawn_weight[event])
var/percent = round((event.calculated_weight / total_weight) * 100)
From 3f767978bf79c425cbb2d638e4a989bea75d311e Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 00:40:12 -0400
Subject: [PATCH 49/85] fixes events failing to account for space
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 6201dfb0422b..f6eaf7296540 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -161,6 +161,8 @@ SUBSYSTEM_DEF(gamemode)
var/datum/round_event_control/event = new type()
if(!event.typepath || !event.name)
continue //don't want this one! leave it for the garbage collector
+ if(!event.valid_for_map())
+ continue // event isn't good for this map no point in trying to add it to the list
control += event //add it to the list of all events (controls)
getHoliday()
From f6d6c539abffd97f77217b8d55a488cfb49f7453 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 00:43:26 -0400
Subject: [PATCH 50/85] Update master.dm
---
code/controllers/master.dm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 068b1cb8846f..17922b3dc3b9 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -256,6 +256,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// Loop.
Master.StartProcessing(0)
+ SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
+ SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
+
var/time = (REALTIMEOFDAY - start_timeofday) / 10
@@ -284,8 +287,6 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10
/// run votes
SSvote.initiate_vote(/datum/vote/storyteller, "pick round storyteller", forced = TRUE) // idk where else to run this lol
- SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
- SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
/**
* Initialize a given subsystem and handle the results.
From ee40b4c3bb7d63fb553241d77e7f26b621c9b4cc Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 00:54:35 -0400
Subject: [PATCH 51/85] Update master.dm
---
code/controllers/master.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 17922b3dc3b9..8587b32be33c 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -256,8 +256,12 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// Loop.
Master.StartProcessing(0)
+#ifdef SPACEMAN_DMM
+ to_chat(world, span_boldannounce("SKIPPING LAZY LOADING FOR LINTERS!"))
+#else
SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
+#endif
var/time = (REALTIMEOFDAY - start_timeofday) / 10
From 15c47ce118902d36056ea86f3b6a56da375b21df Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 01:13:32 -0400
Subject: [PATCH 52/85] Update master.dm
---
code/controllers/master.dm | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 8587b32be33c..8453a9d918a2 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -256,9 +256,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// Loop.
Master.StartProcessing(0)
-#ifdef SPACEMAN_DMM
- to_chat(world, span_boldannounce("SKIPPING LAZY LOADING FOR LINTERS!"))
-#else
+#if !defined(SPACEMAN_DMM)
SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
#endif
From 06114cca53525347c594bec30bc07ee9768a29cb Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 01:15:56 -0400
Subject: [PATCH 53/85] Update master.dm
---
code/controllers/master.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 8453a9d918a2..a204dcdd0f06 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -256,10 +256,10 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// Loop.
Master.StartProcessing(0)
-#if !defined(SPACEMAN_DMM)
+ #ifndef SPACEMAN_DMM
SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
-#endif
+ #endif
var/time = (REALTIMEOFDAY - start_timeofday) / 10
From aef0b28e3b0fdeed04369fba17991e8838bc53a0 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 01:32:30 -0400
Subject: [PATCH 54/85] okay no lazy loading of roundstart rulesets IG
---
_maps/map_files/generic/CentCom.dmm | 22177 ++++++++++++++++----------
code/controllers/master.dm | 5 -
2 files changed, 13600 insertions(+), 8582 deletions(-)
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 224e6319e2d6..8201547dc790 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -28,6 +28,11 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"ag" = (
+/obj/structure/table/wood,
+/obj/item/pai_card,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
"aj" = (
/obj/effect/turf_decal/siding/dark/corner{
dir = 4
@@ -81,6 +86,18 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"at" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/structure/closet/syndicate/personal,
+/obj/structure/sign/poster/contraband/gorlex_recruitment{
+ pixel_y = 32
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/red/full,
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"au" = (
/obj/structure/table/reinforced,
/obj/item/stack/sheet/iron/fifty,
@@ -136,6 +153,12 @@
},
/turf/open/floor/stone,
/area/centcom/central_command_areas/hall)
+"aB" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"aC" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -144,6 +167,20 @@
/obj/machinery/oven/range,
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/kitchen)
+"aD" = (
+/obj/docking_port/stationary{
+ area_type = /area/centcom/syndicate_mothership;
+ dheight = 1;
+ dir = 4;
+ dwidth = 12;
+ height = 17;
+ name = "syndicate recon outpost";
+ roundstart_template = /datum/map_template/shuttle/infiltrator/basic;
+ shuttle_id = "syndicate_away";
+ width = 23
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"aE" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -213,6 +250,11 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"aN" = (
+/obj/effect/turf_decal/trimline/red,
+/obj/effect/turf_decal/trimline/red,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"aO" = (
/obj/structure/window/plasma/spawner/directional/east,
/obj/structure/window/plasma/spawner/directional/north,
@@ -232,6 +274,14 @@
/obj/machinery/light/directional/south,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"aQ" = (
+/obj/structure/flora/rock/pile/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"aR" = (
/obj/item/kirbyplants{
icon_state = "plant-22"
@@ -269,6 +319,12 @@
},
/turf/open/floor/carpet/purple,
/area/centcom/central_command_areas/admin)
+"aX" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"aZ" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/table/reinforced,
@@ -305,6 +361,21 @@
/obj/structure/sink/directional/south,
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/kitchen)
+"bg" = (
+/obj/structure/table/reinforced/plasmarglass,
+/obj/item/paper_bin{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
+"bh" = (
+/obj/machinery/camera/autoname/directional/north{
+ network = list("nukie")
+ },
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"bi" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -320,6 +391,10 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/armory)
+"bk" = (
+/obj/machinery/vending/boozeomat,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
"bl" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -335,6 +410,12 @@
/obj/effect/turf_decal/tile/green,
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"bn" = (
+/obj/structure/table/reinforced,
+/obj/item/papercutter,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"bo" = (
/obj/effect/turf_decal/siding/green{
dir = 8
@@ -367,6 +448,17 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
+"bs" = (
+/obj/structure/closet/cardboard,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"bu" = (
+/obj/structure/table/wood/fancy,
+/obj/item/skub{
+ pixel_y = 16
+ },
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
"bv" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -421,6 +513,13 @@
/obj/structure/fake_stairs/wood/directional/east,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"bD" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"bE" = (
/obj/effect/turf_decal/trimline/green/corner{
dir = 4
@@ -437,6 +536,13 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"bG" = (
+/obj/structure/dresser,
+/obj/structure/noticeboard/directional/south,
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
"bH" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -451,6 +557,31 @@
/obj/machinery/status_display/ai/directional/east,
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"bJ" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/airlock/public/glass{
+ name = "Cafeteria"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
+"bK" = (
+/obj/effect/turf_decal/box,
+/obj/structure/punching_bag,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"bL" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"bM" = (
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/evacuation)
@@ -468,6 +599,11 @@
/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"bP" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/components/binary/pump/on,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"bQ" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/landmark/prisonwarp,
@@ -483,12 +619,25 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/ghost_spawn)
+"bT" = (
+/obj/structure/table/wood/fancy,
+/obj/item/storage/dice{
+ icon_state = "magicdicebag"
+ },
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"bU" = (
/obj/machinery/light/directional/south,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/vending/boozeomat,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"bW" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"bX" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/light/floor/has_bulb,
@@ -549,6 +698,11 @@
/obj/effect/turf_decal/tile/dark/opposingcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/borbop)
+"cf" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction,
+/turf/open/space/basic,
+/area/space/nearstation)
"cg" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/evacuation)
@@ -580,6 +734,15 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
+"ck" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 10
+ },
+/obj/structure/sign/poster/contraband/energy_swords{
+ pixel_x = -32
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"cl" = (
/obj/structure/bed/roller,
/obj/machinery/iv_drip,
@@ -607,6 +770,19 @@
},
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/admin_hangout)
+"cp" = (
+/obj/structure/sign/plaques/kiddie/badger{
+ desc = "A list of names is engraved on this plaque. 'May their heroic sacrifices inspire your bravery' is carved at the bottom.";
+ name = "\improper Operative Remembrance Plaque";
+ pixel_y = 27
+ },
+/obj/structure/bed/dogbed/cayenne,
+/mob/living/basic/carp/pet/cayenne,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
"cq" = (
/obj/structure/railing/wood,
/turf/open/floor/glass/reinforced,
@@ -662,6 +838,16 @@
dir = 8
},
/area/centcom/central_command_areas/hall)
+"cA" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 6
+ },
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/structure/sign/poster/contraband/gorlex_recruitment{
+ pixel_y = -32
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"cB" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -675,6 +861,13 @@
/obj/structure/light_prism,
/turf/open/floor/plating/abductor,
/area/centcom/central_command_areas/admin)
+"cD" = (
+/obj/structure/destructible/cult/item_dispenser/altar{
+ desc = "An altar dedicated to the Wizard Federation."
+ },
+/obj/item/knife/ritual,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"cE" = (
/obj/structure/fake_stairs/wood/directional/north,
/turf/open/floor/wood/large,
@@ -733,6 +926,13 @@
/obj/effect/turf_decal/siding/dark/corner,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/prison/cells)
+"cO" = (
+/obj/structure/closet/cardboard,
+/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{
+ pixel_x = 32
+ },
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
"cP" = (
/obj/structure/window/reinforced/survival_pod/spawner/directional/north,
/turf/open/floor/plating,
@@ -794,10 +994,33 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"cW" = (
+/obj/structure/flora/rock/icy/style_random{
+ pixel_x = -7
+ },
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"cX" = (
+/obj/structure/flora/tree/pine/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"cY" = (
/obj/structure/fake_stairs/wood/directional/east,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"cZ" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red/corner{
+ dir = 8
+ },
+/obj/item/folder/red,
+/obj/item/pen/red,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"da" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 4
@@ -822,6 +1045,23 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"dc" = (
+/obj/structure/table/reinforced,
+/obj/item/knife/combat/survival{
+ pixel_x = 7;
+ pixel_y = 17
+ },
+/obj/item/reagent_containers/cup/glass/bottle/rum{
+ pixel_x = -5;
+ pixel_y = 17
+ },
+/obj/structure/sign/poster/contraband/red_rum{
+ pixel_x = 32
+ },
+/obj/machinery/recharger,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"dd" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/stripes/line{
@@ -844,6 +1084,25 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"di" = (
+/obj/machinery/door/airlock/external/ruin,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"dj" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"dk" = (
/obj/structure/table/reinforced/plastitaniumglass{
name = "Andrea's Desk"
@@ -869,6 +1128,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/supply)
+"dp" = (
+/obj/structure/fence/cut/medium{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"dq" = (
/obj/structure/railing/wood{
dir = 1
@@ -877,6 +1142,14 @@
/obj/structure/table/wood/fancy/black,
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"dr" = (
+/obj/machinery/oven/range,
+/obj/structure/sign/poster/contraband/eat{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"ds" = (
/obj/structure/table/wood,
/obj/item/paper_bin,
@@ -936,6 +1209,14 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/borbop)
+"dB" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/barricade/sandbags,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"dC" = (
/obj/machinery/modular_computer/console/preset/id/centcom{
dir = 8
@@ -956,6 +1237,22 @@
/obj/structure/curtain/cloth/fancy,
/turf/open/indestructible/event/plating,
/area/centcom/central_command_areas/kitchen)
+"dF" = (
+/obj/structure/weightmachine/weightlifter,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"dG" = (
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"dH" = (
+/obj/machinery/button/door/directional/east{
+ id = "FBBZ1";
+ name = "Security Shutters"
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"dJ" = (
/obj/structure/punching_bag,
/obj/effect/turf_decal/siding/dark{
@@ -974,6 +1271,24 @@
/obj/machinery/door/airlock/highsecurity,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
+"dL" = (
+/obj/effect/turf_decal/stripes/corner,
+/obj/structure/railing/corner,
+/turf/open/floor/plating/icemoon,
+/area/centcom/syndicate_mothership/control)
+"dN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 1
+ },
+/obj/machinery/airalarm/unlocked{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"dO" = (
/obj/structure/railing/wood{
dir = 4
@@ -1035,6 +1350,15 @@
icon_state = "boxing"
},
/area/centcom/central_command_areas/hall)
+"eb" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/smoke{
+ pixel_y = 31
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"ec" = (
/obj/structure/railing{
dir = 4;
@@ -1066,6 +1390,14 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"ef" = (
+/obj/structure/sign/poster/contraband/lamarr{
+ pixel_y = -32
+ },
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
"ej" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/siding/dark,
@@ -1084,6 +1416,20 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"el" = (
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/iron/smooth_half,
+/area/centcom/syndicate_mothership/control)
+"em" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Break Room"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"en" = (
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"eo" = (
/obj/structure/table/reinforced/titaniumglass,
/obj/machinery/computer/security/wooden_tv,
@@ -1100,6 +1446,15 @@
},
/turf/open/floor/carpet,
/area/centcom/central_command_areas/hall)
+"er" = (
+/obj/machinery/door/airlock/maintenance/external{
+ name = "Bunk Room 1"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/catwalk_floor/iron,
+/area/centcom/syndicate_mothership/control)
"es" = (
/obj/structure/table/reinforced/plastitaniumglass,
/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{
@@ -1114,6 +1469,10 @@
/obj/structure/hedge,
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"eu" = (
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"ev" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -1129,6 +1488,15 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/grass,
/area/centcom/central_command_areas/evacuation/ship)
+"ez" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/machinery/camera/autoname/directional/west{
+ network = list("nukie")
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"eA" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -1139,12 +1507,24 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"eB" = (
+/obj/item/gun/energy/ionrifle,
+/obj/structure/rack,
+/obj/machinery/camera/autoname/directional/west{
+ network = list("nukie")
+ },
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
"eC" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/table/reinforced,
/obj/machinery/chem_dispenser/drinks,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/borbop)
+"eD" = (
+/obj/machinery/light/small/directional/north,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"eE" = (
/obj/structure/table/reinforced,
/obj/item/toy/figure/dsquad{
@@ -1165,6 +1545,11 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"eH" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
"eI" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/railing/wood,
@@ -1180,11 +1565,39 @@
/obj/structure/hedge,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"eL" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/flora/rock/icy/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"eM" = (
+/obj/structure/sink/directional/west,
+/obj/structure/mirror/directional/east,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"eN" = (
+/obj/effect/turf_decal/siding/thinplating,
+/obj/machinery/door/window/survival_pod{
+ name = "Surgery";
+ opacity = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/centcom/syndicate_mothership/control)
"eP" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/curtain/cloth/fancy,
/turf/open/indestructible/event/plating,
/area/centcom/central_command_areas/borbop)
+"eQ" = (
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"eR" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -1235,6 +1648,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/ferry)
+"eZ" = (
+/obj/structure/chair/greyscale{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
"fa" = (
/obj/machinery/status_display/evac/directional/south,
/obj/effect/turf_decal/tile/green{
@@ -1242,6 +1661,23 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"fb" = (
+/mob/living/simple_animal/slime,
+/turf/open/floor/circuit/red/off,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"fc" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/machinery/camera/autoname/directional/south{
+ network = list("nukie")
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"fd" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"fe" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -1280,6 +1716,20 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/armory)
+"fk" = (
+/obj/effect/turf_decal/siding/wideplating,
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "General Quarters"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/dark/textured_half,
+/area/centcom/syndicate_mothership/control)
"fl" = (
/obj/machinery/door/airlock/centcom{
dir = 4;
@@ -1301,6 +1751,9 @@
dir = 8
},
/area/centcom/central_command_areas/hall)
+"fo" = (
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"fp" = (
/obj/structure/fake_stairs/wood/directional/south,
/obj/machinery/light/floor/has_bulb,
@@ -1314,6 +1767,11 @@
/obj/structure/table/wood/fancy/black,
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"fs" = (
+/obj/structure/chair/stool/directional/west,
+/obj/effect/landmark/start/nukeop,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
"fu" = (
/obj/structure/hedge,
/turf/open/floor/iron/dark,
@@ -1332,6 +1790,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"fx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"fy" = (
/obj/structure/signpost/salvation{
icon = 'icons/obj/structures.dmi';
@@ -1349,6 +1813,11 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/smooth_large,
/area/centcom/central_command_areas/evacuation/ship)
+"fA" = (
+/obj/structure/flora/rock/pile/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"fB" = (
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
@@ -1365,6 +1834,12 @@
/obj/machinery/stasis,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"fF" = (
+/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
+ dir = 6
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"fH" = (
/obj/machinery/light/neon_lining{
dir = 1;
@@ -1386,6 +1861,45 @@
},
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"fK" = (
+/obj/machinery/light/cold/directional/north,
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
+"fL" = (
+/obj/item/kirbyplants/random,
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
+"fM" = (
+/obj/machinery/door/poddoor/shuttledock{
+ checkdir = 1;
+ name = "Syndicate Blast Door";
+ turftype = /turf/open/misc/asteroid/snow
+ },
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"fN" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/donkpockets,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"fO" = (
+/obj/structure/flora/tree/dead/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"fP" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 8
+ },
+/obj/structure/sign/poster/contraband/punch_shit{
+ pixel_y = -32
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"fQ" = (
/obj/effect/turf_decal/siding/dark,
/obj/effect/turf_decal/siding/dark{
@@ -1445,6 +1959,14 @@
/obj/effect/landmark/ctf,
/turf/open/space/basic,
/area/space)
+"ga" = (
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership)
+"gb" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/splatter,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"gc" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/vending/wardrobe/bar_wardrobe,
@@ -1514,10 +2036,27 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"gm" = (
+/obj/structure/chair/stool/directional/south,
+/obj/structure/sign/map/left{
+ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown).";
+ icon_state = "map-left-MS";
+ pixel_y = 32
+ },
+/obj/effect/landmark/start/nukeop,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
"go" = (
/obj/structure/closet,
/turf/open/floor/circuit/telecomms,
/area/centcom/central_command_areas/admin)
+"gp" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/closed/indestructible/opsglass,
+/area/centcom/syndicate_mothership/control)
"gq" = (
/obj/structure/railing{
dir = 8;
@@ -1580,6 +2119,16 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"gw" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/puzzle/keycard/syndicate_fridge,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/expansion_fridgerummage)
"gx" = (
/obj/structure/chair/sofa/corp/left{
dir = 1
@@ -1603,6 +2152,14 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/medical)
+"gA" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/open/floor/catwalk_floor/iron_smooth{
+ initial_gas_mix = "TEMP=2.7"
+ },
+/area/centcom/syndicate_mothership)
"gB" = (
/obj/structure/table/reinforced/plastitaniumglass{
name = "Andrea's Desk"
@@ -1610,6 +2167,19 @@
/obj/machinery/computer/security/wooden_tv,
/turf/open/floor/carpet/royalblue,
/area/centcom/central_command_areas/admin)
+"gC" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/mob/living/basic/creature{
+ name = "Experiment 35b"
+ },
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
+"gD" = (
+/obj/structure/fence/cut/medium{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"gE" = (
/obj/machinery/light/floor/has_bulb,
/obj/structure/flora/tree/jungle/style_3,
@@ -1629,6 +2199,10 @@
/obj/item/stack/cannonball,
/turf/open/misc/grass,
/area/centcom/central_command_areas/admin)
+"gJ" = (
+/obj/structure/destructible/cult/item_dispenser/forge/engine,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"gK" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/table/reinforced,
@@ -1675,6 +2249,12 @@
"gO" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/briefing)
+"gP" = (
+/obj/machinery/atmospherics/pipe/smart/simple/general/hidden{
+ dir = 4
+ },
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"gQ" = (
/obj/structure/chair/comfy/carp{
dir = 4
@@ -1724,6 +2304,13 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"hb" = (
+/obj/structure/window/reinforced/spawner/directional/north{
+ color = "#008000";
+ resistance_flags = 3
+ },
+/turf/open/lava,
+/area/centcom/wizard_station)
"hc" = (
/obj/structure/railing/wood{
dir = 1
@@ -1777,6 +2364,20 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/indestructible/hotelwood,
/area/centcom/central_command_areas/admin)
+"hl" = (
+/obj/structure/table/reinforced,
+/obj/machinery/camera/autoname/directional/east{
+ network = list("nukie")
+ },
+/obj/structure/noticeboard/directional/east,
+/obj/item/folder/red,
+/obj/item/stack/spacecash/c20{
+ pixel_y = 9
+ },
+/obj/item/assembly/flash/handheld,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"hm" = (
/obj/effect/turf_decal/siding/blue,
/obj/effect/turf_decal/siding/blue/corner{
@@ -1802,6 +2403,10 @@
},
/turf/open/misc/grass,
/area/centcom/central_command_areas/admin)
+"hq" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
"hr" = (
/obj/structure/table/wood/fancy/green{
name = "Head Intern Desk"
@@ -1811,6 +2416,29 @@
/obj/structure/window/plasma/spawner/directional/east,
/turf/open/indestructible/hotelwood,
/area/centcom/central_command_areas/admin)
+"hs" = (
+/obj/structure/chair/office/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"ht" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
+"hu" = (
+/obj/structure/flora/rock/icy/style_random{
+ pixel_x = -7
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"hw" = (
/obj/structure/chair/office{
dir = 4
@@ -1881,6 +2509,10 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"hJ" = (
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"hK" = (
/obj/structure/table/wood/fancy/green{
name = "Head Intern Desk"
@@ -1899,6 +2531,25 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"hN" = (
+/obj/structure/destructible/cult/item_dispenser/archives/library,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"hO" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 5
+ },
+/turf/open/floor/plating/snowed/icemoon,
+/area/centcom/syndicate_mothership/control)
+"hP" = (
+/obj/item/coin/antagtoken,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
"hQ" = (
/obj/structure/railing/wood{
dir = 1
@@ -1918,6 +2569,33 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/mineral/titanium/white,
/area/centcom/central_command_areas/admin)
+"hS" = (
+/obj/structure/sign/poster/contraband/free_key,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
+"hU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/c20r{
+ pixel_x = 32
+ },
+/obj/machinery/portable_atmospherics/canister/plasma,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"hV" = (
+/turf/open/space/transit,
+/area/space)
+"hW" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"hX" = (
/obj/machinery/light/floor/has_bulb,
/obj/item/kirbyplants{
@@ -1932,6 +2610,12 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/borbop)
+"hY" = (
+/obj/structure/chair/wood/wings{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
"hZ" = (
/obj/effect/turf_decal/siding/dark{
dir = 5
@@ -1943,6 +2627,13 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/kitchen)
+"ia" = (
+/obj/structure/table/reinforced,
+/obj/item/syndicatedetonator{
+ desc = "This gaudy button can be used to instantly detonate syndicate bombs that have been activated on the station. It is also fun to press."
+ },
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"ic" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/parquet,
@@ -1968,6 +2659,15 @@
},
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"if" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/flora/tree/pine/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"ig" = (
/obj/structure/chair/office{
dir = 4
@@ -2005,6 +2705,17 @@
},
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/kitchen)
+"im" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/structure/closet/syndicate/personal,
+/obj/structure/sign/poster/contraband/lusty_xenomorph{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/tile/red/full,
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"in" = (
/obj/item/kirbyplants{
icon_state = "plant-22";
@@ -2035,6 +2746,9 @@
/obj/structure/table/reinforced/plastitaniumglass,
/turf/open/floor/circuit/telecomms,
/area/centcom/central_command_areas/admin)
+"ir" = (
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership)
"is" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -2060,6 +2774,14 @@
"iu" = (
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/ghost_spawn)
+"iw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/light/cold/directional/east,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"ix" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/light/floor/has_bulb,
@@ -2068,6 +2790,15 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"iy" = (
+/obj/item/cautery/alien,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
+"iz" = (
+/obj/effect/baseturf_helper/asteroid/snow,
+/turf/closed/indestructible/rock/snow,
+/area/centcom/syndicate_mothership)
"iA" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/admin_hangout)
@@ -2096,6 +2827,12 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin)
+"iE" = (
+/obj/machinery/camera/autoname/directional/south{
+ network = list("nukie")
+ },
+/turf/open/floor/circuit/red/off,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"iF" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/supply)
@@ -2121,6 +2858,21 @@
/obj/machinery/light/directional/north,
/turf/open/floor/grass,
/area/centcom/central_command_areas/evacuation/ship)
+"iL" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
+"iM" = (
+/obj/structure/flora/tree/pine/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"iN" = (
/obj/machinery/status_display/supply,
/turf/closed/indestructible/riveted,
@@ -2129,12 +2881,32 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"iP" = (
+/turf/open/floor/circuit/red/off,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"iQ" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"iR" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"iT" = (
+/obj/machinery/light/cold/directional/south,
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"iU" = (
+/obj/structure/fence/door,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"iW" = (
/obj/effect/turf_decal/siding/dark{
dir = 10
@@ -2178,6 +2950,16 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"je" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/structure/closet/syndicate/personal,
+/obj/machinery/camera/autoname/directional/west{
+ network = list("nukie")
+ },
+/obj/item/stack/spacecash/c20,
+/obj/effect/turf_decal/tile/red/full,
+/turf/open/floor/iron/dark/textured_half,
+/area/centcom/syndicate_mothership/control)
"jf" = (
/obj/machinery/light/floor/has_bulb,
/obj/machinery/hydroponics/constructable/helper,
@@ -2190,6 +2972,18 @@
/obj/machinery/vending/wardrobe/engi_wardrobe,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"jh" = (
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership)
+"jj" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/north{
+ network = list("nukie")
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"jk" = (
/obj/machinery/door/poddoor{
id = "XCCQMLoaddoor2";
@@ -2265,6 +3059,11 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"ju" = (
+/turf/closed/indestructible/fakeglass{
+ color = "#008000"
+ },
+/area/centcom/wizard_station)
"jv" = (
/obj/effect/turf_decal/trimline/green/line{
dir = 5
@@ -2272,16 +3071,69 @@
/obj/machinery/vending/hydroseeds,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"jx" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"jz" = (
+/obj/structure/bed,
+/obj/item/bedsheet/syndie,
+/turf/open/floor/iron/smooth_half,
+/area/centcom/syndicate_mothership/control)
"jA" = (
/obj/structure/fans/tiny/invisible,
/turf/open/floor/holofloor/hyperspace,
/area/space)
+"jB" = (
+/obj/machinery/light/small/directional/south,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"jC" = (
/obj/structure/chair/comfy/shuttle/tactical{
dir = 1
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation/ship)
+"jD" = (
+/obj/effect/turf_decal/siding/red{
+ dir = 1
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"jE" = (
+/obj/structure/rack,
+/obj/item/katana/cursed{
+ desc = "A gift from your benefactors.";
+ force = 20
+ },
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
+"jF" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 4
+ },
+/obj/machinery/door/airlock/highsecurity{
+ name = "Sky Bridge"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/textured_large,
+/area/centcom/syndicate_mothership/control)
+"jH" = (
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
"jI" = (
/obj/machinery/door/poddoor{
id = "XCCQMLoaddoor";
@@ -2327,6 +3179,28 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"jM" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark/end,
+/obj/machinery/vending/hydroseeds{
+ slogan_delay = 700
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"jN" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/flora/tree/dead/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"jO" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"jP" = (
/obj/structure/hedge,
/turf/open/floor/carpet,
@@ -2356,6 +3230,14 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"jT" = (
+/obj/machinery/light/cold/directional/west,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
+"jV" = (
+/obj/structure/fence/door/opened,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"jW" = (
/obj/machinery/computer/records/medical,
/turf/open/floor/carpet/royalblue,
@@ -2385,6 +3267,31 @@
},
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"kc" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red/corner{
+ dir = 4
+ },
+/obj/item/stack/spacecash/c1{
+ pixel_y = 12
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"kd" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"ke" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"kf" = (
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/large,
@@ -2410,6 +3317,9 @@
/obj/item/spellbook_charge/debug,
/turf/open/floor/plating/abductor,
/area/centcom/central_command_areas/admin)
+"kj" = (
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"kk" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 8
@@ -2422,6 +3332,9 @@
},
/turf/open/floor/carpet,
/area/centcom/central_command_areas/admin)
+"km" = (
+/turf/closed/indestructible/rock/snow,
+/area/centcom/syndicate_mothership/control)
"kn" = (
/obj/structure/table/reinforced/plastitaniumglass,
/obj/machinery/microwave,
@@ -2468,6 +3381,24 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark/textured_large,
/area/centcom/central_command_areas/evacuation/ship)
+"ks" = (
+/obj/structure/flora/tree/pine/style_random,
+/obj/structure/flora/grass/both/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"kt" = (
+/obj/machinery/light/cold/directional/east,
+/obj/machinery/vending/snack/teal,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
"kv" = (
/obj/machinery/door/airlock/centcom{
name = "Waffles' Den"
@@ -2481,6 +3412,72 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/botany)
+"kx" = (
+/obj/structure/chair/sofa/bench{
+ dir = 4
+ },
+/obj/machinery/light/cold/directional/west,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
+"ky" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/airlock/hatch{
+ name = "Workout Room"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
+"kz" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"kA" = (
+/obj/machinery/door/airlock/hatch{
+ name = "Tool Closet"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/mineral/titanium/yellow,
+/area/centcom/syndicate_mothership/control)
+"kB" = (
+/obj/machinery/light/cold/directional/east,
+/obj/item/kirbyplants/random,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"kD" = (
+/obj/machinery/camera/autoname/directional/north{
+ network = list("nukie")
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
+"kE" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"kF" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/open/floor/plating/snowed/icemoon,
+/area/centcom/syndicate_mothership/control)
"kI" = (
/obj/effect/turf_decal/siding/dark{
dir = 8
@@ -2492,6 +3489,20 @@
dir = 4
},
/area/centcom/central_command_areas/hall)
+"kJ" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/railing,
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
+"kK" = (
+/obj/machinery/igniter/incinerator_ordmix{
+ id = "syn_ordmix_igniter"
+ },
+/turf/open/floor/engine/vacuum,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"kM" = (
/obj/structure/railing/wood,
/obj/structure/table/reinforced,
@@ -2510,6 +3521,12 @@
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"kP" = (
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"kQ" = (
/obj/structure/railing/wood{
dir = 1
@@ -2520,6 +3537,23 @@
/obj/effect/turf_decal/siding/dark,
/turf/open/floor/carpet,
/area/centcom/central_command_areas/hall)
+"kT" = (
+/obj/structure/table/wood/poker,
+/obj/item/toy/figure/wizard,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"kU" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Game Room"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"kV" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/iron,
+/area/centcom/syndicate_mothership/control)
"kW" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/table/wood/fancy/royalblack,
@@ -2529,6 +3563,37 @@
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/ghost_spawn)
+"kZ" = (
+/obj/effect/decal/remains/xeno,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
+"lb" = (
+/obj/structure/flora/tree/dead/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"ld" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"le" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"lf" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 6
+ },
+/obj/machinery/camera/autoname/directional/south{
+ network = list("nukie")
+ },
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"lg" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/chair/comfy/shuttle/tactical{
@@ -2557,6 +3622,14 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/borbop)
+"lj" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 8;
+ networks = list("nukie")
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"lk" = (
/obj/structure/chair/sofa/corp/left{
dir = 4;
@@ -2588,6 +3661,24 @@
/obj/effect/turf_decal/tile/brown/anticorner/contrasted,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"lr" = (
+/obj/machinery/light/cold/directional/west,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"ls" = (
+/obj/structure/table/glass/plasmaglass,
+/obj/item/plunger{
+ pixel_x = -9;
+ pixel_y = 15
+ },
+/obj/item/construction/plumbing,
+/obj/item/reagent_containers/dropper{
+ pixel_x = 5;
+ pixel_y = 14
+ },
+/obj/structure/noticeboard/directional/west,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"lu" = (
/obj/structure/railing/wood{
dir = 1
@@ -2596,6 +3687,27 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"lv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/button/ignition/incinerator/ordmix{
+ id = "syn_ordmix_igniter";
+ pixel_x = -6;
+ pixel_y = -30
+ },
+/obj/machinery/button/door/directional/south{
+ id = "syn_ordmix_vent";
+ pixel_x = 5;
+ pixel_y = -29
+ },
+/obj/machinery/camera/autoname/directional/south{
+ network = list("nukie")
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"lx" = (
+/obj/machinery/vending/cigarette/syndicate,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"ly" = (
/obj/machinery/status_display/evac/directional/west,
/obj/machinery/light/directional/west,
@@ -2604,6 +3716,13 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation)
+"lz" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"lA" = (
/obj/structure/railing/wood,
/obj/structure/railing/wood{
@@ -2645,6 +3764,14 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"lG" = (
+/obj/structure/sign/poster/contraband/energy_swords{
+ pixel_y = 32
+ },
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"lH" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -2672,6 +3799,18 @@
/obj/effect/mapping_helpers/airlock/access/any/admin/general,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"lO" = (
+/obj/structure/rack,
+/obj/item/restraints/handcuffs/cable/pink,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"lP" = (
+/obj/structure/table/wood,
+/obj/item/stack/medical/bruise_pack,
+/obj/item/stack/medical/ointment,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"lQ" = (
/obj/machinery/computer/records/medical/laptop,
/obj/structure/table/wood,
@@ -2687,10 +3826,29 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/botany)
+"lV" = (
+/obj/structure/chair/stool/directional/south,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"lW" = (
+/obj/structure/toilet{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
"lX" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/carpet/black,
/area/centcom/central_command_areas/borbop)
+"lY" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"lZ" = (
/obj/effect/turf_decal/siding/blue{
dir = 8
@@ -2703,6 +3861,20 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/carpet,
/area/centcom/central_command_areas/admin)
+"mb" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/fluff/tram_rail{
+ pixel_y = 17
+ },
+/obj/structure/fluff/tram_rail,
+/obj/structure/railing{
+ dir = 10
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"mc" = (
/obj/effect/turf_decal/siding/dark{
dir = 9
@@ -2736,6 +3908,10 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood/tile,
/area/centcom/central_command_areas/evacuation/ship)
+"mg" = (
+/obj/machinery/chem_heater/withbuffer,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"mh" = (
/obj/structure/bed,
/obj/item/bedsheet/centcom,
@@ -2748,6 +3924,18 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"mj" = (
+/obj/docking_port/stationary{
+ area_type = /area/centcom/syndicate_mothership/control;
+ dir = 2;
+ dwidth = 3;
+ height = 7;
+ name = "escape pod loader";
+ roundstart_template = /datum/map_template/shuttle/assault_pod/default;
+ width = 7
+ },
+/turf/open/floor/plating/icemoon,
+/area/centcom/syndicate_mothership/control)
"mk" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -2767,6 +3955,13 @@
/obj/structure/closet/crate/mail/full,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"mn" = (
+/obj/effect/turf_decal/siding/purple,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"mp" = (
/obj/structure/chair/wood{
dir = 4
@@ -2841,6 +4036,35 @@
"mD" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/ferry)
+"mF" = (
+/obj/machinery/light/small/directional/west,
+/obj/structure/closet/secure_closet/freezer/fridge/open,
+/obj/item/food/meat/slab/rawcrab,
+/obj/item/food/meat/slab/rawcrab,
+/obj/item/food/meat/slab/rawcrab,
+/obj/item/food/fishmeat,
+/obj/item/food/fishmeat,
+/obj/item/food/fishmeat,
+/obj/item/food/grown/tomato,
+/obj/item/food/grown/tomato,
+/obj/item/food/grown/tomato,
+/obj/item/reagent_containers/condiment/enzyme{
+ layer = 5
+ },
+/obj/item/storage/fancy/egg_box,
+/obj/item/storage/fancy/egg_box,
+/obj/item/reagent_containers/condiment/milk,
+/obj/item/reagent_containers/condiment/milk,
+/obj/item/reagent_containers/condiment/flour{
+ pixel_x = -5;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/condiment/flour{
+ pixel_x = -5;
+ pixel_y = 9
+ },
+/turf/open/floor/plastic,
+/area/centcom/syndicate_mothership/expansion_fridgerummage)
"mG" = (
/obj/machinery/computer/cargo{
dir = 4
@@ -2876,6 +4100,20 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"mK" = (
+/obj/effect/turf_decal/stripes/box,
+/obj/machinery/portable_atmospherics/pump/lil_pump{
+ desc = "A betrayer to pump-kind."
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"mL" = (
+/obj/effect/turf_decal/trimline/red,
+/obj/effect/turf_decal/box/corners,
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/turf_decal/trimline/red,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"mP" = (
/obj/structure/hedge,
/turf/open/floor/wood/large,
@@ -2890,6 +4128,12 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"mT" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/structure/closet/syndicate/personal,
+/obj/effect/turf_decal/tile/red/full,
+/turf/open/floor/iron/dark/textured_half,
+/area/centcom/syndicate_mothership/control)
"mU" = (
/obj/structure/flora/tree/palm,
/obj/item/toy/plush/beeplushie{
@@ -2922,6 +4166,12 @@
/obj/effect/turf_decal/tile/dark_blue/diagonal_centre,
/turf/open/floor/iron/dark/diagonal,
/area/centcom/central_command_areas/botany)
+"mX" = (
+/obj/structure/chair/bronze{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"mZ" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -2970,6 +4220,12 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"ne" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/drinkingglasses,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"nf" = (
/obj/effect/turf_decal/siding/dark/corner{
dir = 4
@@ -3025,6 +4281,12 @@
/obj/effect/turf_decal/tile/brown/half/contrasted,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"no" = (
+/obj/machinery/light/cold/directional/south,
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"np" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/wood/corner{
@@ -3032,6 +4294,13 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/ghost_spawn)
+"nr" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark/corner,
+/obj/effect/turf_decal/siding/thinplating_new/dark/corner{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"ns" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/railing/wood,
@@ -3047,17 +4316,45 @@
dir = 1
},
/area/centcom/central_command_areas/hall)
+"nu" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/structure/table/glass/plasmaglass,
+/obj/structure/reagent_dispensers/wall/virusfood/directional/north,
+/obj/item/clothing/gloves/latex,
+/obj/item/healthanalyzer{
+ pixel_y = 3
+ },
+/obj/item/plant_analyzer,
+/obj/item/clothing/glasses/science,
+/obj/item/reagent_containers/spray/chemsprayer/bioterror{
+ pixel_x = -6;
+ pixel_y = 10
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"nw" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/structure/table/wood/fancy/royalblue,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"nx" = (
+/obj/item/toy/plush/lizard_plushie/green{
+ name = "Spots-The-Operative"
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"ny" = (
/obj/machinery/computer/operating{
dir = 8
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"nz" = (
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/iron,
+/area/centcom/syndicate_mothership/control)
"nB" = (
/obj/structure/filingcabinet/filingcabinet,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -3073,6 +4370,13 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"nD" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/closed/indestructible/rock/snow,
+/area/centcom/syndicate_mothership)
"nF" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -3095,6 +4399,12 @@
/obj/machinery/light/directional/north,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"nL" = (
+/obj/structure/sign/poster/contraband/moffuchis_pizza{
+ pixel_x = -32
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"nN" = (
/obj/structure/railing/wood{
dir = 8
@@ -3122,10 +4432,27 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/ghost_spawn)
+"nS" = (
+/obj/item/kirbyplants/random,
+/obj/structure/cable,
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
+"nT" = (
+/turf/closed/indestructible/iron,
+/area/centcom/syndicate_mothership/control)
"nU" = (
/obj/machinery/vending/boozeomat,
/turf/open/floor/carpet/executive,
/area/centcom/central_command_areas/admin)
+"nV" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
"nX" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/dark{
@@ -3139,6 +4466,35 @@
dir = 8
},
/area/centcom/central_command_areas/hall)
+"nY" = (
+/obj/structure/bed,
+/obj/item/bedsheet/wiz,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"nZ" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"oa" = (
+/turf/closed/indestructible/fakedoor{
+ name = "Sub-Laboratory Elevator"
+ },
+/area/centcom/syndicate_mothership/control)
+"ob" = (
+/obj/structure/frame/computer{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
+"oc" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"od" = (
/obj/structure/railing/wood{
dir = 1
@@ -3165,6 +4521,12 @@
/obj/machinery/light/directional/west,
/turf/open/floor/iron/dark/textured_large,
/area/centcom/central_command_areas/evacuation/ship)
+"og" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"oh" = (
/obj/machinery/shower/directional/south,
/obj/structure/drain,
@@ -3177,6 +4539,13 @@
},
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/admin_hangout)
+"oj" = (
+/obj/structure/flora/rock/pile/style_random,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"ok" = (
/obj/structure/fight_button,
/obj/machinery/light/floor/has_bulb,
@@ -3252,6 +4621,11 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"ox" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold,
+/turf/open/space/basic,
+/area/space/nearstation)
"oy" = (
/obj/machinery/vending/wardrobe/curator_wardrobe,
/obj/effect/turf_decal/siding/dark,
@@ -3267,6 +4641,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"oC" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"oE" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/siding/wood{
@@ -3281,6 +4661,16 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"oH" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
"oJ" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
@@ -3321,6 +4711,17 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"oQ" = (
+/obj/structure/chair/wood/wings{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"oR" = (
+/obj/structure/dresser,
+/obj/item/storage/backpack/satchel,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"oT" = (
/obj/structure/table/wood,
/obj/machinery/fax,
@@ -3358,6 +4759,23 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/ghost_spawn)
+"pa" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 4
+ },
+/obj/machinery/door/airlock/highsecurity{
+ name = "Sky Bridge"
+ },
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/textured_large,
+/area/centcom/syndicate_mothership/control)
"pd" = (
/obj/item/clipboard,
/obj/item/stamp/denied{
@@ -3375,6 +4793,22 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/carpet/purple,
/area/centcom/central_command_areas/admin)
+"pf" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "Armoury"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
"pg" = (
/obj/structure/flora/bush/large/style_3,
/turf/open/floor/grass,
@@ -3419,6 +4853,24 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"pm" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/machinery/monkey_recycler,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"pn" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south{
+ name = "Tinted Window";
+ opacity = 1
+ },
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 10
+ },
+/obj/effect/turf_decal/stripes/end,
+/turf/open/floor/mineral/titanium/tiled,
+/area/centcom/syndicate_mothership/control)
"po" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -3439,6 +4891,15 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"ps" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 9
+ },
+/obj/structure/sign/poster/contraband/gorlex_recruitment{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"pt" = (
/obj/structure/table/reinforced/plastitaniumglass,
/obj/machinery/fax,
@@ -3517,6 +4978,21 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/ert)
+"pF" = (
+/obj/structure/table/glass/plasmaglass,
+/obj/item/stack/sheet/mineral/plasma{
+ pixel_y = 15
+ },
+/obj/item/grenade/chem_grenade,
+/obj/item/stack/cable_coil,
+/obj/item/reagent_containers/cup/beaker{
+ pixel_x = 8;
+ pixel_y = 14
+ },
+/obj/machinery/light/cold/directional/west,
+/obj/item/stack/cable_coil,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"pG" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/hall)
@@ -3542,12 +5018,49 @@
},
/turf/open/space/basic,
/area/space)
+"pK" = (
+/obj/structure/dresser,
+/obj/structure/noticeboard/directional/north,
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
+"pL" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"pM" = (
+/obj/structure/bed{
+ dir = 4
+ },
+/obj/item/bedsheet/syndie{
+ dir = 4
+ },
+/turf/open/floor/iron/smooth_half,
+/area/centcom/syndicate_mothership/control)
"pN" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/evacuation)
+"pO" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 10
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
+"pP" = (
+/obj/structure/table/reinforced,
+/obj/item/flashlight/lamp,
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"pQ" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
@@ -3563,6 +5076,13 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/ferry)
+"pS" = (
+/obj/structure/sign/poster/contraband/syndiemoth{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"pT" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -3588,6 +5108,14 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/ert)
+"pY" = (
+/obj/structure/sign/poster/contraband/gorlex_recruitment{
+ pixel_y = 32
+ },
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"pZ" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -3600,6 +5128,21 @@
/obj/structure/table/wood,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"qc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"qd" = (
+/obj/machinery/camera/autoname/directional/west{
+ network = list("nukie")
+ },
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"qe" = (
/obj/structure/table/reinforced/titaniumglass,
/obj/machinery/fax{
@@ -3638,6 +5181,15 @@
},
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"qj" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"ql" = (
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
"qm" = (
/obj/structure/table/reinforced/titaniumglass,
/obj/machinery/computer/records/security/laptop,
@@ -3679,6 +5231,23 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"qr" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Cockpit"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"qs" = (
+/obj/structure/chair/wood/wings{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
+"qt" = (
+/obj/machinery/light/directional/west,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"qu" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/structure/table/wood/fancy/royalblue,
@@ -3694,6 +5263,15 @@
},
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"qv" = (
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/power{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"qw" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/light/directional/north,
@@ -3712,6 +5290,24 @@
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"qA" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/red,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"qB" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/airlock/titanium{
+ name = "Experiments Wing Decontamination"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"qD" = (
/obj/structure/table/reinforced,
/obj/machinery/infuser,
@@ -3738,6 +5334,16 @@
/obj/machinery/vending/wardrobe/jani_wardrobe,
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"qJ" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
"qK" = (
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
@@ -3761,6 +5367,13 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
+"qP" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/machinery/camera/autoname/directional/south{
+ network = list("nukie")
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"qQ" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -3773,10 +5386,22 @@
/obj/structure/sign/nanotrasen,
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/ferry)
+"qS" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/red/corner,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"qT" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/carpet,
/area/centcom/central_command_areas/kitchen)
+"qU" = (
+/turf/open/floor/iron/smooth_edge{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
"qV" = (
/obj/machinery/chem_master/condimaster{
desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments.";
@@ -3788,6 +5413,14 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/borbop)
+"qW" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/structure/sign/poster/contraband/cybersun_six_hundred{
+ pixel_x = 32
+ },
+/obj/item/kirbyplants/random,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"qY" = (
/obj/effect/turf_decal/siding/dark{
dir = 10
@@ -3826,11 +5459,58 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/ert)
+"rc" = (
+/obj/machinery/light/small/directional/east,
+/obj/structure/closet/crate/freezer{
+ name = "fruits and veggies freezer"
+ },
+/obj/item/food/grown/potato,
+/obj/item/food/grown/potato,
+/obj/item/food/grown/tomato,
+/obj/item/food/grown/tomato,
+/obj/item/food/grown/pineapple,
+/obj/item/food/grown/pineapple,
+/obj/item/food/grown/cherries,
+/obj/item/food/grown/cherries,
+/obj/item/food/grown/citrus/orange,
+/obj/item/food/grown/citrus/orange,
+/obj/item/food/grown/bell_pepper,
+/obj/item/food/grown/bell_pepper,
+/obj/item/food/grown/chili,
+/obj/item/food/grown/chili,
+/obj/item/food/grown/parsnip,
+/obj/item/food/grown/parsnip,
+/obj/item/food/grown/redbeet,
+/obj/item/food/grown/redbeet,
+/obj/item/food/grown/watermelon,
+/obj/item/food/grown/watermelon,
+/obj/item/food/grown/peas,
+/obj/item/food/grown/peas,
+/obj/item/food/grown/onion,
+/obj/item/food/grown/onion,
+/obj/item/food/grown/eggplant,
+/obj/item/food/grown/eggplant,
+/obj/item/food/grown/banana,
+/obj/item/food/grown/banana,
+/obj/item/food/grown/apple,
+/obj/item/food/grown/apple,
+/turf/open/floor/plastic,
+/area/centcom/syndicate_mothership/expansion_fridgerummage)
"rd" = (
/obj/structure/hedge,
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"re" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 10
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"rf" = (
/obj/effect/turf_decal/siding/wood,
/obj/effect/turf_decal/siding/wood/corner{
@@ -3871,6 +5551,9 @@
/obj/effect/turf_decal/tile/dark/opposingcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"rk" = (
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"rl" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/railing/wood{
@@ -3896,6 +5579,10 @@
/obj/structure/window/reinforced/tinted/frosted,
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/admin)
+"rp" = (
+/obj/item/kirbyplants/random,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"rq" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -3908,10 +5595,48 @@
},
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"rs" = (
+/obj/machinery/atmospherics/components/unary/passive_vent{
+ dir = 8
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"ru" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/plasma,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"rw" = (
+/turf/open/floor/mineral/titanium/yellow,
+/area/centcom/syndicate_mothership/control)
+"rx" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red{
+ dir = 4
+ },
+/obj/item/paper_bin,
+/obj/item/pen,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"ry" = (
+/obj/structure/flora/rock/pile/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"rz" = (
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/tile,
/area/centcom/central_command_areas/evacuation/ship)
+"rA" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/open/floor/plating/snowed/icemoon,
+/area/centcom/syndicate_mothership/control)
"rB" = (
/obj/structure/table/reinforced,
/obj/item/storage/fancy/donut_box,
@@ -3923,6 +5648,19 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/carpet/red,
/area/centcom/central_command_areas/admin)
+"rE" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 4
+ },
+/obj/machinery/door/airlock/public/glass{
+ name = "War Room"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/textured_large,
+/area/centcom/syndicate_mothership/control)
"rF" = (
/obj/structure/chair/sofa/right{
dir = 8
@@ -3940,6 +5678,25 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
+"rI" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 6
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
+"rJ" = (
+/obj/machinery/button/door/directional/south{
+ desc = "Looks like the elevator is under maintenance..";
+ name = "Elevator Button"
+ },
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
"rL" = (
/obj/effect/turf_decal/siding/green{
dir = 10
@@ -3956,6 +5713,25 @@
},
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"rN" = (
+/obj/structure/sink/kitchen/directional/west,
+/obj/item/reagent_containers/cup/bucket,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
+"rO" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/machinery/door/poddoor/shutters/window{
+ id = "FBBZ1";
+ name = "Security Shutters"
+ },
+/obj/structure/fans/tiny,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"rP" = (
/obj/effect/turf_decal/siding/blue{
dir = 1
@@ -3990,6 +5766,32 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/borbop)
+"rS" = (
+/obj/machinery/light/cold/directional/south,
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
+"rT" = (
+/obj/structure/flora/tree/dead/style_random,
+/obj/structure/flora/grass/both/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"rU" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/structure/rack,
+/obj/item/storage/bag/plants,
+/obj/item/clothing/suit/apron,
+/obj/item/hatchet,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"rW" = (
/obj/structure/railing{
dir = 8;
@@ -4058,10 +5860,27 @@
/obj/item/storage/belt/utility/full/engi,
/turf/open/floor/circuit/green,
/area/centcom/central_command_areas/admin)
+"sf" = (
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"sg" = (
+/obj/effect/turf_decal/stripes/box,
+/obj/structure/closet/emcloset,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
"sh" = (
/obj/item/kirbyplants/random,
/turf/open/floor/mineral/titanium/white,
/area/centcom/central_command_areas/admin)
+"si" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/structure/chair/stool/directional/east,
+/obj/effect/landmark/start/nukeop,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
"sj" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/wood{
@@ -4076,16 +5895,45 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"sl" = (
+/obj/machinery/door/airlock/titanium{
+ name = "Restroom"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
"sm" = (
/obj/machinery/light/directional/south,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation/ship)
+"sn" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/structure/showcase/machinery/tv{
+ desc = "Static fills the screen. If you can find the VCR, you might be able to watch those old Heist Movies again.";
+ name = "\improper Static Filled Tube(TM) Television"
+ },
+/obj/structure/sign/poster/contraband/rip_badger{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"so" = (
/obj/effect/turf_decal/siding/green{
dir = 9
},
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"sp" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/structure/chair/stool/directional/east,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
"sq" = (
/obj/machinery/computer/shuttle/white_ship{
dir = 4
@@ -4157,6 +6005,23 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"sy" = (
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/machinery/door/airlock/titanium{
+ name = "Medical Bay"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
+"sz" = (
+/obj/structure/chair/wood/wings,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"sA" = (
/obj/effect/turf_decal/siding/dark,
/obj/effect/turf_decal/siding/dark{
@@ -4177,6 +6042,19 @@
/obj/machinery/light/directional/east,
/turf/open/floor/iron/dark/textured_large,
/area/centcom/central_command_areas/evacuation/ship)
+"sC" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/turf/open/floor/plating/icemoon,
+/area/centcom/syndicate_mothership/control)
+"sD" = (
+/obj/item/toy/figure/syndie,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"sE" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
@@ -4206,6 +6084,41 @@
/obj/effect/turf_decal/tile/dark/opposingcorners,
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/hall)
+"sK" = (
+/turf/open/misc/ice/icemoon,
+/area/centcom/syndicate_mothership/control)
+"sL" = (
+/obj/structure/closet/crate/freezer{
+ name = "pantry crate"
+ },
+/obj/structure/sign/poster/contraband/moffuchis_pizza{
+ pixel_y = -32
+ },
+/obj/item/reagent_containers/condiment/rice{
+ pixel_y = 12
+ },
+/obj/item/reagent_containers/condiment/rice{
+ pixel_y = 12
+ },
+/obj/item/reagent_containers/condiment/saltshaker,
+/obj/item/reagent_containers/condiment/peppermill,
+/obj/item/food/grown/wheat,
+/obj/item/food/grown/wheat,
+/obj/item/reagent_containers/condiment/sugar,
+/obj/item/reagent_containers/condiment/sugar,
+/obj/item/food/grown/soybeans,
+/obj/item/food/grown/soybeans,
+/obj/item/food/grown/vanillapod,
+/obj/item/food/grown/vanillapod,
+/obj/item/food/grown/herbs,
+/obj/item/food/grown/herbs,
+/obj/item/food/grown/cocoapod,
+/obj/item/food/grown/cocoapod,
+/obj/item/food/grown/aloe,
+/obj/item/food/grown/coffee,
+/obj/item/food/grown/coffee,
+/turf/open/floor/plastic,
+/area/centcom/syndicate_mothership/expansion_fridgerummage)
"sM" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -4216,6 +6129,24 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"sN" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
+"sO" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing{
+ dir = 9
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"sP" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/dark{
@@ -4229,6 +6160,17 @@
dir = 4
},
/area/centcom/central_command_areas/hall)
+"sR" = (
+/obj/structure/table/wood,
+/obj/item/clothing/suit/wizrobe/magusblue,
+/obj/item/clothing/head/wizard/magus,
+/obj/item/staff,
+/obj/structure/mirror/magic{
+ pixel_y = 28
+ },
+/obj/machinery/light/directional/north,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"sS" = (
/obj/effect/turf_decal/siding/dark{
dir = 5
@@ -4244,6 +6186,35 @@
/obj/structure/fans/tiny,
/turf/open/floor/iron,
/area/centcom/central_command_areas/evacuation)
+"sW" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/east,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 6
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"sX" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"sY" = (
+/obj/structure/flora/tree/dead/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"sZ" = (
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"ta" = (
/obj/machinery/light/floor/has_bulb,
/turf/closed/indestructible/fakeglass,
@@ -4286,6 +6257,38 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/supply)
+"tg" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
+"th" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/fluff/tram_rail{
+ pixel_y = 17
+ },
+/obj/structure/railing{
+ dir = 5
+ },
+/turf/open/floor/plating/snowed/icemoon,
+/area/centcom/syndicate_mothership/control)
+"ti" = (
+/obj/structure/table/wood,
+/obj/item/clothing/head/wizard/tape,
+/obj/item/clothing/suit/wizrobe/tape,
+/obj/item/staff/tape,
+/obj/item/stack/sticky_tape/super,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"tj" = (
+/obj/effect/baseturf_helper/asteroid/snow,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"tk" = (
/obj/effect/turf_decal/trimline/blue,
/obj/machinery/light/floor/has_bulb,
@@ -4439,6 +6442,24 @@
},
/turf/open/floor/iron/dark/diagonal,
/area/centcom/central_command_areas/medical)
+"tF" = (
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/the_big_gas_giant_truth{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"tG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"tH" = (
/obj/effect/turf_decal/siding/dark{
dir = 10
@@ -4451,6 +6472,10 @@
/obj/machinery/deepfryer,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/kitchen)
+"tJ" = (
+/obj/machinery/light/cold/directional/south,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"tK" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/dark/opposingcorners,
@@ -4465,6 +6490,42 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"tM" = (
+/obj/structure/chair/stool/bar/directional/west,
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"tN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"tO" = (
+/obj/structure/chair/office/light{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"tQ" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/structure/flora/tree/dead/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"tU" = (
+/obj/structure/table/rolling,
+/obj/item/reagent_containers/cup/glass/bottle/juice/tomatojuice,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"tV" = (
+/turf/closed/indestructible/opsglass,
+/area/centcom/syndicate_mothership)
"tW" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -4538,6 +6599,11 @@
"uk" = (
/turf/open/misc/grass,
/area/centcom/central_command_areas/admin)
+"ul" = (
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"um" = (
/obj/machinery/computer/communications{
dir = 1
@@ -4547,11 +6613,24 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"uo" = (
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/iron/smooth_half,
+/area/centcom/syndicate_mothership/control)
+"up" = (
+/obj/machinery/shower/directional/east,
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/mineral/titanium/tiled,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"uq" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/chair/stool/bar/directional/south,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/borbop)
+"ur" = (
+/obj/structure/sign/poster/contraband/cc64k_ad,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
"us" = (
/obj/effect/turf_decal/siding/blue{
dir = 6
@@ -4574,6 +6653,12 @@
/obj/machinery/computer/records/medical/laptop,
/turf/open/floor/iron/grimy,
/area/centcom/central_command_areas/admin)
+"uv" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"uw" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -4624,6 +6709,10 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/ghost_spawn)
+"uB" = (
+/obj/machinery/light/directional/north,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"uC" = (
/obj/structure/railing/wood,
/turf/open/floor/glass/reinforced,
@@ -4650,6 +6739,14 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin_hangout)
+"uG" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/mechanical/old,
+/obj/structure/sign/poster/contraband/pwr_game{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/centcom/syndicate_mothership/control)
"uH" = (
/obj/effect/turf_decal/stripes/line,
/turf/closed/indestructible/riveted,
@@ -4667,6 +6764,16 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/botany)
+"uK" = (
+/obj/machinery/light/cold/directional/east,
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/item/kirbyplants/random,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"uL" = (
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"uN" = (
/obj/machinery/light/directional/west,
/obj/effect/turf_decal/siding/wood{
@@ -4695,6 +6802,14 @@
"uQ" = (
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/hall)
+"uR" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/purple,
+/obj/machinery/light/cold/directional/south,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"uS" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/trimline/green/line,
@@ -4714,6 +6829,18 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin_hangout)
+"uX" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/east,
+/obj/machinery/hydroponics/constructable,
+/turf/open/floor/mineral/titanium/tiled,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"uY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"uZ" = (
/obj/effect/turf_decal/siding/dark{
dir = 9
@@ -4727,6 +6854,21 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
+"vb" = (
+/obj/structure/table/wood/fancy,
+/obj/item/storage/photo_album,
+/obj/machinery/light/directional/south,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"vc" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/item/knife/kitchen,
+/obj/structure/sign/poster/contraband/self_ai_liberation{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"ve" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -4736,6 +6878,16 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"vf" = (
+/obj/structure/chair/sofa/right/brown{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/revolver{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"vg" = (
/obj/machinery/vending/wardrobe/sec_wardrobe,
/obj/effect/turf_decal/siding/dark{
@@ -4753,6 +6905,9 @@
/obj/effect/turf_decal/siding/dark,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"vi" = (
+/turf/closed/indestructible/opsglass,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"vj" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -4790,6 +6945,26 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/ferry)
+"vn" = (
+/obj/structure/table/wood/poker,
+/obj/item/toy/cards/deck/wizoff{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/toy/cards/deck/tarot{
+ pixel_x = 6;
+ pixel_y = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"vo" = (
+/obj/structure/flora/rock/pile/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"vp" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/wood/large,
@@ -4824,6 +6999,16 @@
"vx" = (
/turf/open/floor/carpet/neon/simple/cyan,
/area/centcom/central_command_areas/admin)
+"vy" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/poddoor/shutters/indestructible{
+ name = "Subterrainian Cargo Lift"
+ },
+/turf/open/floor/iron/dark/textured_half,
+/area/centcom/syndicate_mothership/control)
"vz" = (
/obj/machinery/door/poddoor/shutters/cc/xcc,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -4951,12 +7136,30 @@
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"vU" = (
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"vV" = (
+/obj/structure/closet/cardboard/metal,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"vW" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"vX" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 5
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/medical,
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"wa" = (
/obj/effect/turf_decal/siding/dark{
dir = 6
@@ -4988,11 +7191,37 @@
"wf" = (
/turf/open/floor/carpet,
/area/centcom/central_command_areas/hall)
+"wg" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/machinery/door/window/left/directional/east,
+/obj/item/paper_bin{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/item/pen{
+ pixel_x = 1;
+ pixel_y = 8
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"wh" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/green,
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"wi" = (
+/obj/structure/sign/poster/contraband/bountyhunters{
+ pixel_x = -32
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
"wk" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/stripes/line{
@@ -5003,6 +7232,12 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/smooth_large,
/area/centcom/central_command_areas/evacuation/ship)
+"wl" = (
+/obj/machinery/computer/shuttle/syndicate/recall{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"wm" = (
/obj/structure/railing/wood{
dir = 8
@@ -5010,6 +7245,14 @@
/obj/structure/flora/bush/flowers_br/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/borbop)
+"wn" = (
+/obj/structure/flora/tree/dead/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"wo" = (
/obj/structure/table/reinforced/plastitaniumglass{
name = "Andrea's Desk"
@@ -5111,6 +7354,10 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/kitchen)
+"wD" = (
+/obj/structure/railing/corner,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"wE" = (
/obj/structure/chair/sofa/corp/left,
/turf/open/floor/carpet,
@@ -5200,6 +7447,13 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
+"wU" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
"wV" = (
/obj/machinery/computer/security/wooden_tv,
/turf/open/floor/circuit/telecomms,
@@ -5305,6 +7559,22 @@
/obj/machinery/light/directional/north,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"xm" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 6
+ },
+/obj/item/kirbyplants/random,
+/obj/machinery/camera/autoname/directional/east{
+ network = list("nukie")
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"xn" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
"xo" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -5324,6 +7594,23 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"xr" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/cup/glass/bottle/beer{
+ pixel_x = 5;
+ pixel_y = -2
+ },
+/obj/item/toy/cards/deck/syndicate{
+ pixel_x = -6;
+ pixel_y = 6
+ },
+/obj/effect/spawner/random/aimodule/syndicate,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"xs" = (
+/obj/structure/statue/uranium/nuke,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"xu" = (
/obj/effect/turf_decal/siding/wood/corner,
/obj/effect/turf_decal/siding/wood{
@@ -5344,6 +7631,19 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/prison/cells)
+"xw" = (
+/obj/effect/turf_decal/siding/purple,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"xy" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"xz" = (
/obj/machinery/door/airlock/centcom,
/turf/open/floor/iron/dark/diagonal,
@@ -5378,6 +7678,38 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"xE" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/structure/table/glass/plasmaglass,
+/obj/item/reagent_containers/syringe{
+ pixel_x = -5;
+ pixel_y = 12
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = -2;
+ pixel_y = 13
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = 1;
+ pixel_y = 14
+ },
+/obj/machinery/light/cold/directional/north,
+/obj/item/reagent_containers/dropper{
+ pixel_x = -4;
+ pixel_y = -6
+ },
+/obj/item/storage/box/monkeycubes{
+ pixel_x = -6;
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/cup/bottle/formaldehyde{
+ pixel_x = 8;
+ pixel_y = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"xF" = (
/obj/structure/chair/office{
dir = 8
@@ -5414,6 +7746,15 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"xM" = (
+/obj/machinery/door/airlock/external/ruin,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/structure/fans/tiny,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"xN" = (
/obj/effect/turf_decal/siding/dark{
dir = 6
@@ -5426,6 +7767,12 @@
dir = 6
},
/area/centcom/central_command_areas/hall)
+"xO" = (
+/obj/structure/railing{
+ dir = 5
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"xP" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp/bananalamp,
@@ -5461,12 +7808,36 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"xU" = (
+/obj/machinery/light/directional/south,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"xV" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"xX" = (
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"xY" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 5
+ },
+/obj/structure/table/reinforced/plasmarglass,
+/obj/item/storage/backpack/duffelbag/med/surgery{
+ pixel_y = -11
+ },
+/obj/item/storage/belt/medical,
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/centcom/syndicate_mothership/control)
+"ya" = (
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"yb" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -5479,6 +7850,11 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/supply)
+"ye" = (
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
"yf" = (
/obj/effect/turf_decal/trimline/green/line{
dir = 6
@@ -5602,9 +7978,22 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/supply)
+"yB" = (
+/obj/item/food/meat/slab/corgi,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"yC" = (
/turf/open/floor/circuit/telecomms,
/area/centcom/central_command_areas/admin)
+"yD" = (
+/obj/structure/table/wood,
+/obj/item/gun/magic/wand{
+ desc = "Used in emergencies to reignite magma engines.";
+ max_charges = 0;
+ name = "wand of emergency engine ignition"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"yE" = (
/obj/structure/railing/wrestling{
dir = 4
@@ -5614,6 +8003,10 @@
icon_state = "boxing"
},
/area/centcom/central_command_areas/hall)
+"yF" = (
+/obj/machinery/vending/snack,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"yG" = (
/obj/machinery/hydroponics/constructable,
/obj/effect/turf_decal/trimline/green/line{
@@ -5632,6 +8025,10 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
+"yI" = (
+/obj/structure/showcase/wizard,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"yJ" = (
/obj/structure/railing/wood{
dir = 8
@@ -5650,10 +8047,23 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"yL" = (
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"yM" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/carpet/purple,
/area/centcom/central_command_areas/admin)
+"yN" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/open/misc/ice/icemoon,
+/area/centcom/syndicate_mothership/control)
+"yO" = (
+/obj/machinery/chem_mass_spec,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"yP" = (
/obj/machinery/newscaster{
pixel_y = -32
@@ -5672,6 +8082,9 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"yR" = (
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
"yS" = (
/obj/structure/table/reinforced,
/obj/item/storage/box/emps,
@@ -5682,6 +8095,17 @@
/obj/item/gun/energy/ionrifle/carbine,
/turf/open/floor/iron,
/area/centcom/central_command_areas/armory)
+"yT" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south{
+ name = "Tinted Window";
+ opacity = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"yU" = (
/obj/structure/hedge,
/obj/machinery/light/floor/has_bulb,
@@ -5703,12 +8127,23 @@
},
/turf/open/space,
/area/space)
+"yW" = (
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
"yX" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
},
/turf/open/floor/iron/white/textured,
/area/centcom/central_command_areas/evacuation/ship)
+"yY" = (
+/turf/open/floor/circuit/red,
+/area/centcom/syndicate_mothership/control)
+"yZ" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark/corner,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"za" = (
/obj/machinery/power/terminal{
dir = 1
@@ -5717,6 +8152,31 @@
/obj/effect/decal/cleanable/oil,
/turf/open/floor/iron/smooth_large,
/area/centcom/central_command_areas/evacuation/ship)
+"zb" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/components/tank/nitrogen,
+/turf/open/space/basic,
+/area/space/nearstation)
+"zc" = (
+/obj/structure/chair/stool/directional/north,
+/obj/effect/landmark/start/nukeop,
+/obj/structure/sign/poster/contraband/donk_co{
+ pixel_y = -32
+ },
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"zd" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/obj/machinery/iv_drip,
+/obj/item/reagent_containers/blood,
+/obj/structure/extinguisher_cabinet/directional/east,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"zf" = (
/obj/structure/flora/bush/flowers_yw/style_random,
/obj/structure/flora/tree/jungle/style_5,
@@ -5734,9 +8194,31 @@
planetary_atmos = 0
},
/area/awaymission/errorroom)
+"zj" = (
+/obj/machinery/camera/autoname/directional/south{
+ network = list("nukie")
+ },
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"zk" = (
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/medical)
+"zl" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/open/floor/plating/icemoon,
+/area/centcom/syndicate_mothership/control)
+"zm" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
"zn" = (
/obj/machinery/light/directional/north,
/obj/structure/table/reinforced,
@@ -5746,6 +8228,10 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/supply)
+"zo" = (
+/obj/machinery/light/cold/directional/south,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"zp" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
@@ -5804,6 +8290,13 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"zw" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Observation Room"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"zx" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 8
@@ -6033,6 +8526,16 @@
dir = 8
},
/area/centcom/central_command_areas/evacuation/ship)
+"Af" = (
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"Ag" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/purple,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"Ah" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/machinery/light/neon_lining{
@@ -6044,6 +8547,12 @@
},
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"Ai" = (
+/obj/structure/sign/poster/contraband/gorlex_recruitment{
+ pixel_x = -32
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Aj" = (
/obj/structure/railing/wood{
dir = 8
@@ -6067,6 +8576,12 @@
"An" = (
/turf/open/floor/carpet,
/area/centcom/central_command_areas/kitchen)
+"Ao" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"Ap" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -6074,10 +8589,33 @@
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"Aq" = (
+/obj/structure/chair/office{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"Ar" = (
/obj/structure/fake_stairs/wood/directional/south,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"As" = (
+/obj/machinery/door/poddoor/incinerator_ordmix{
+ id = "syn_ordmix_vent"
+ },
+/turf/open/floor/engine/vacuum,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"At" = (
+/obj/machinery/vending/clothing,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"Au" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/turf/open/misc/ice/icemoon,
+/area/centcom/syndicate_mothership/control)
"Av" = (
/obj/effect/turf_decal/siding/green,
/turf/open/floor/iron/dark/herringbone,
@@ -6089,6 +8627,24 @@
/obj/effect/turf_decal/siding/dark,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"Ax" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south{
+ name = "Tinted Window";
+ opacity = 1
+ },
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 6
+ },
+/obj/structure/table/reinforced/plasmarglass,
+/obj/item/reagent_containers/cup/bottle/epinephrine,
+/obj/item/reagent_containers/cup/bottle/multiver{
+ pixel_x = 6
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_y = 15
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/centcom/syndicate_mothership/control)
"Ay" = (
/obj/structure/railing/wood,
/obj/structure/table/reinforced,
@@ -6155,6 +8711,10 @@
/obj/item/banner/command,
/turf/open/floor/stone,
/area/centcom/central_command_areas/evacuation/ship)
+"AE" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/centcom/wizard_station)
"AF" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -6225,6 +8785,13 @@
/obj/machinery/nuclearbomb/beer,
/turf/open/floor/mineral/titanium/white,
/area/centcom/central_command_areas/admin)
+"AQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"AR" = (
/obj/structure/table/reinforced/plastitaniumglass,
/obj/item/dice/d20,
@@ -6241,6 +8808,11 @@
/obj/machinery/light/directional/south,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"AU" = (
+/obj/item/soap/homemade,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
"AV" = (
/obj/structure/hedge,
/obj/structure/railing/wood{
@@ -6251,6 +8823,10 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"AW" = (
+/obj/structure/chair/wood/wings,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"AX" = (
/obj/effect/turf_decal/siding/dark{
dir = 5
@@ -6259,10 +8835,35 @@
dir = 8
},
/area/centcom/central_command_areas/hall)
+"AY" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/structure/sink/directional/south,
+/obj/item/shovel/spade{
+ pixel_x = -4
+ },
+/obj/item/reagent_containers/cup/bucket,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"AZ" = (
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/control)
"Ba" = (
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"Bb" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south{
+ name = "Frosted Window";
+ opacity = 1
+ },
+/obj/item/soap/syndie,
+/obj/structure/sign/poster/contraband/got_wood{
+ pixel_x = 32
+ },
+/turf/open/floor/iron/freezer,
+/area/centcom/syndicate_mothership/control)
"Be" = (
/obj/item/clothing/head/soft/fishing_hat,
/obj/structure/table/wood,
@@ -6336,6 +8937,9 @@
/obj/machinery/vending/hydroseeds,
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"Bj" = (
+/turf/open/floor/plastic,
+/area/centcom/syndicate_mothership/expansion_fridgerummage)
"Bk" = (
/obj/effect/turf_decal/siding/wood/corner,
/obj/effect/turf_decal/siding/wood{
@@ -6351,6 +8955,17 @@
},
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"Bl" = (
+/obj/effect/turf_decal/trimline/red,
+/obj/effect/turf_decal/trimline/red,
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/obj/machinery/camera/autoname/directional/north{
+ network = list("nukie")
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"Bm" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/item/weldingtool/experimental,
@@ -6359,6 +8974,28 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"Bn" = (
+/obj/structure/sign/poster/contraband/c20r{
+ pixel_y = -32
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
+"Bo" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light/cold/directional/south,
+/obj/structure/chair/greyscale{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"Bq" = (
+/obj/structure/bookcase/random/reference/wizard,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Br" = (
/obj/structure/railing/wood{
dir = 8
@@ -6368,12 +9005,35 @@
/obj/structure/flora/bush/grassy/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"Bs" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"Bt" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/evacuation)
+"Bv" = (
+/obj/structure/railing,
+/turf/open/floor/catwalk_floor/iron_smooth{
+ initial_gas_mix = "TEMP=2.7"
+ },
+/area/centcom/syndicate_mothership)
+"Bw" = (
+/obj/structure/chair/sofa/left/brown{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"Bx" = (
+/obj/item/food/meat/slab/human/mutant/slime,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"By" = (
/obj/machinery/light/directional/south,
/obj/structure/filingcabinet/chestdrawer,
@@ -6410,10 +9070,35 @@
/obj/machinery/vending/cigarette,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"BD" = (
+/obj/structure/railing{
+ dir = 6
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"BE" = (
/obj/structure/fake_stairs/wood/directional/south,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"BF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"BG" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 6
+ },
+/turf/open/floor/plating/snowed/icemoon,
+/area/centcom/syndicate_mothership/control)
+"BH" = (
+/turf/closed/indestructible/riveted/uranium,
+/area/centcom/wizard_station)
"BI" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -6440,9 +9125,80 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"BM" = (
+/obj/structure/cable,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
+"BN" = (
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"BO" = (
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/machinery/door/puzzle/keycard/syndicate_bomb,
+/obj/structure/fans/tiny,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"BP" = (
+/obj/item/cardboard_cutout,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
+"BQ" = (
+/obj/structure/table/wood/fancy,
+/obj/item/camera/spooky,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"BR" = (
/turf/open/floor/grass,
/area/centcom/central_command_areas/evacuation/ship)
+"BS" = (
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/machinery/door/puzzle/keycard/syndicate_chem,
+/obj/structure/fans/tiny,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"BT" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/airlock/hatch{
+ name = "Kitchen"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
+"BU" = (
+/obj/structure/table/wood,
+/obj/item/pizzabox,
+/obj/item/storage/crayons{
+ pixel_x = -2;
+ pixel_y = 5
+ },
+/obj/item/storage/crayons{
+ pixel_x = 2;
+ pixel_y = 5
+ },
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"BW" = (
+/obj/machinery/light/cold/directional/west,
+/obj/structure/closet/crate/cardboard,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"BY" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -6460,15 +9216,59 @@
},
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"BZ" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/andromeda_bitters{
+ pixel_y = -32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"Ca" = (
/obj/structure/railing/wood,
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"Cb" = (
+/obj/machinery/computer/atmos_control/noreconnect{
+ atmos_chambers = list("nukiebase"="Burn Chamber");
+ desc = "Used to monitor the Syndicate Ordnance Laboratory's burn chamber.";
+ dir = 1;
+ name = "Ordnance Chamber Monitor"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light/cold/directional/west{
+ dir = 2
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Cc" = (
/obj/structure/chair/comfy/shuttle,
/turf/open/floor/circuit/green,
/area/centcom/central_command_areas/admin)
+"Cd" = (
+/obj/structure/table/glass/plasmaglass,
+/obj/item/storage/pill_bottle{
+ pixel_x = 8;
+ pixel_y = 8
+ },
+/obj/item/storage/pill_bottle{
+ pixel_x = -8;
+ pixel_y = 6
+ },
+/obj/item/storage/pill_bottle,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"Ce" = (
+/obj/structure/fluff/tram_rail{
+ pixel_y = 17
+ },
+/obj/structure/fluff/tram_rail,
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"Cg" = (
/obj/effect/turf_decal/siding/dark{
dir = 6
@@ -6502,12 +9302,25 @@
/obj/structure/desk_bell,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/borbop)
+"Cn" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
"Co" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/four)
+"Cp" = (
+/obj/machinery/atmospherics/components/unary/passive_vent{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Cq" = (
/obj/structure/chair/comfy/carp,
/obj/effect/turf_decal/siding/wood,
@@ -6529,6 +9342,21 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"Cv" = (
+/obj/structure/fence/cut/large{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"Cw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Cx" = (
/obj/machinery/door/airlock/centcom,
/turf/open/floor/iron/dark,
@@ -6547,11 +9375,41 @@
/obj/structure/sign/calendar/directional/north,
/turf/open/floor/wood/tile,
/area/centcom/central_command_areas/evacuation/ship)
+"Cz" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 5
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"CA" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/trimline/green,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/botany)
+"CB" = (
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"CC" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"CE" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 5
+ },
+/obj/structure/sign/poster/contraband/rip_badger{
+ pixel_x = 32
+ },
+/obj/machinery/biogenerator,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"CF" = (
/obj/machinery/suit_storage_unit/industrial,
/obj/structure/window/reinforced/survival_pod/spawner/directional/east,
@@ -6570,6 +9428,23 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/white/textured,
/area/centcom/central_command_areas/evacuation/ship)
+"CK" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/structure/rack,
+/obj/item/analyzer{
+ pixel_x = 2;
+ pixel_y = 1
+ },
+/obj/item/pipe_dispenser{
+ desc = "A device used to rapidly pipe things. This one has a curious abundance of warning labels.";
+ name = "Syndicate Rapid Pipe Dispenser (RPD)";
+ pixel_y = -3
+ },
+/obj/item/flamethrower/full,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"CM" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -6636,12 +9511,36 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"CV" = (
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"CW" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"CX" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red/corner{
+ dir = 1
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"CY" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{
+ chamber_id = "nukiebase";
+ desc = "Has a valve and pump attached to it. Slightly more menacing than Nanotrasen's standard.";
+ dir = 1;
+ name = "syndicate air injector"
+ },
+/turf/open/floor/engine/vacuum,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"CZ" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark/end,
+/obj/machinery/vending/hydronutrients,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Da" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/bodycontainer/morgue,
@@ -6659,6 +9558,51 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin_hangout)
+"Dd" = (
+/obj/structure/closet/crate/freezer{
+ name = "meat freezer"
+ },
+/obj/item/food/meat/slab/bear,
+/obj/item/food/meat/slab/bear,
+/obj/item/food/meat/slab/bear,
+/obj/item/food/meat/slab/bear,
+/obj/item/food/meat/slab/gondola,
+/obj/item/food/meat/slab/xeno,
+/obj/item/food/meat/slab/xeno,
+/obj/item/food/meat/slab/xeno,
+/obj/item/food/meat/slab/killertomato,
+/obj/item/food/meat/slab/killertomato,
+/obj/item/food/meat/slab/killertomato,
+/obj/item/food/meat/slab/spider,
+/obj/item/food/meat/slab/penguin,
+/obj/item/food/meat/slab/rawcrab,
+/obj/item/food/grown/carrot,
+/obj/item/food/grown/carrot,
+/obj/item/food/grown/garlic,
+/obj/item/food/grown/garlic,
+/obj/item/food/grown/tomato,
+/obj/item/food/grown/tomato,
+/turf/open/floor/plastic,
+/area/centcom/syndicate_mothership/expansion_fridgerummage)
+"De" = (
+/obj/structure/chair/stool/directional/north,
+/obj/structure/extinguisher_cabinet/directional/south,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"Df" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/fluff/tram_rail{
+ pixel_y = 17
+ },
+/obj/structure/fluff/tram_rail,
+/obj/structure/railing{
+ dir = 9
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"Dg" = (
/obj/structure/hedge,
/obj/structure/railing/wood,
@@ -6687,6 +9631,10 @@
},
/turf/open/floor/mineral/titanium/white,
/area/centcom/central_command_areas/admin)
+"Dm" = (
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Dn" = (
/obj/structure/flora/tree/palm,
/obj/machinery/light/directional/north,
@@ -6699,10 +9647,34 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin_hangout)
+"Dp" = (
+/obj/effect/turf_decal/siding/red,
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/obj/item/stack/spacecash/c10{
+ pixel_x = -19;
+ pixel_y = 10
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"Dq" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/wrench{
+ desc = "A little smidgeon of Freon...";
+ name = "Freon"
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"Dr" = (
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"Ds" = (
+/obj/structure/filingcabinet/medical,
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"Dt" = (
/obj/machinery/modular_computer/console/preset/id/centcom,
/obj/effect/turf_decal/siding/dark{
@@ -6710,6 +9682,21 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"Du" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"Dv" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible{
+ dir = 10
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Dw" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -6720,6 +9707,27 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin)
+"Dx" = (
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/structure/chair/sofa/bench/left,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/stone,
+/area/centcom/syndicate_mothership/control)
+"Dy" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/fun_police{
+ pixel_x = -32
+ },
+/obj/machinery/light/cold/directional/south,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"DA" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 8
@@ -6745,6 +9753,9 @@
},
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"DD" = (
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"DE" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron,
@@ -6758,6 +9769,78 @@
},
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/admin_hangout)
+"DG" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/airlock/external/ruin,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
+"DH" = (
+/obj/structure/sign/poster/contraband/lusty_xenomorph{
+ pixel_y = 32
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
+"DI" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/machinery/mech_bay_recharge_port,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"DJ" = (
+/obj/structure/table/glass/plasmaglass,
+/obj/item/pen{
+ pixel_x = 9;
+ pixel_y = 18
+ },
+/obj/structure/sign/poster/contraband/syndiemoth{
+ pixel_x = -32
+ },
+/obj/item/storage/box/beakers{
+ pixel_x = -4;
+ pixel_y = 17
+ },
+/obj/item/storage/box/syringes{
+ pixel_x = 4;
+ pixel_y = 17
+ },
+/obj/item/assembly/igniter{
+ pixel_x = 7;
+ pixel_y = 6
+ },
+/obj/item/assembly/igniter{
+ pixel_x = 7;
+ pixel_y = 1
+ },
+/obj/item/assembly/igniter{
+ pixel_x = 7;
+ pixel_y = -3
+ },
+/obj/item/assembly/timer{
+ pixel_x = -6;
+ pixel_y = 3
+ },
+/obj/item/assembly/timer{
+ pixel_x = -6;
+ pixel_y = -1
+ },
+/obj/item/assembly/timer{
+ pixel_x = -6;
+ pixel_y = -5
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"DL" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -6808,6 +9891,14 @@
},
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/ghost_spawn)
+"DS" = (
+/obj/structure/table/wood,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"DT" = (
+/obj/structure/flora/rock/pile/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"DU" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -6817,6 +9908,9 @@
},
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"DW" = (
+/turf/closed/indestructible/opsglass,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"DX" = (
/obj/machinery/light/directional/north,
/obj/effect/turf_decal/siding/dark{
@@ -6839,6 +9933,14 @@
},
/turf/open/floor/carpet/black,
/area/centcom/central_command_areas/borbop)
+"Ea" = (
+/obj/vehicle/ridden/scooter/skateboard{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
"Eb" = (
/obj/structure/table/reinforced/titaniumglass,
/obj/item/storage/box/cups,
@@ -6852,11 +9954,26 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"Ee" = (
+/obj/structure/mirror/magic{
+ pixel_y = 28
+ },
+/obj/structure/sink/directional/south,
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
"Ef" = (
/obj/structure/table/wood,
/obj/machinery/computer/security/wooden_tv,
/turf/open/floor/carpet/red,
/area/centcom/central_command_areas/admin)
+"Eg" = (
+/obj/structure/fence,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"Eh" = (
/obj/effect/turf_decal/siding/dark{
dir = 4
@@ -6866,6 +9983,23 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/borbop)
+"Ei" = (
+/obj/machinery/computer/camera_advanced,
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
+"Ej" = (
+/obj/structure/barricade/sandbags,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"Ek" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 8
+ },
+/obj/structure/sign/poster/contraband/syndicate_pistol{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"El" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -6923,6 +10057,9 @@
/obj/machinery/vending/cola/black,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"Es" = (
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"Ev" = (
/obj/structure/chair/sofa/corp/right,
/obj/effect/turf_decal/tile/dark/opposingcorners,
@@ -6969,6 +10106,9 @@
/obj/machinery/light/directional/north,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"EB" = (
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"EC" = (
/obj/machinery/light/floor/has_bulb,
/obj/structure/hedge,
@@ -6997,6 +10137,10 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/supply)
+"EF" = (
+/obj/structure/bookcase/random/adult,
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
"EG" = (
/obj/effect/turf_decal/siding/green{
dir = 4
@@ -7020,6 +10164,18 @@
},
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"EJ" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"EK" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"EL" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 4
@@ -7069,6 +10225,12 @@
/obj/structure/chair/sofa/corp/left,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"ER" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/engine/vacuum,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"ES" = (
/obj/effect/turf_decal/siding/green,
/obj/effect/turf_decal/siding/green/corner{
@@ -7108,6 +10270,24 @@
},
/turf/open/floor/wood/tile,
/area/centcom/central_command_areas/evacuation/ship)
+"EW" = (
+/obj/structure/flora/tree/pine/style_random,
+/obj/structure/flora/grass/both/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"EX" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/railing,
+/turf/open/floor/plating/snowed/icemoon,
+/area/centcom/syndicate_mothership/control)
+"EY" = (
+/obj/structure/flora/tree/pine/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"EZ" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 8
@@ -7165,6 +10345,14 @@
/obj/effect/landmark/basketball/game_area,
/turf/open/space/basic,
/area/space)
+"Fk" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red{
+ dir = 8
+ },
+/obj/item/storage/fancy/donut_box,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"Fm" = (
/obj/structure/table/reinforced/plastitaniumglass{
name = "Andrea's Desk"
@@ -7175,6 +10363,10 @@
},
/turf/open/floor/carpet/royalblue,
/area/centcom/central_command_areas/admin)
+"Fn" = (
+/obj/effect/baseturf_helper/asteroid/snow,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Fo" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/vending/wardrobe/law_wardrobe,
@@ -7187,6 +10379,39 @@
/obj/machinery/light/directional/south,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"Fr" = (
+/obj/machinery/light/cold/directional/north,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"Fs" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/beer{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/space_cube{
+ pixel_y = -32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"Ft" = (
+/obj/structure/table/wood,
+/obj/item/food/syndicake{
+ pixel_y = 3
+ },
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"Fu" = (
+/obj/machinery/light/small/red/directional/west,
+/obj/structure/sign/poster/contraband/soviet_propaganda{
+ pixel_x = -32
+ },
+/obj/item/stack/sheet/cardboard/fifty,
+/turf/open/floor/mineral/titanium/yellow,
+/area/centcom/syndicate_mothership/control)
"Fv" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/structure/table/reinforced,
@@ -7196,9 +10421,33 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/kitchen)
+"Fw" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Study"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"Fx" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 6
+ },
+/obj/machinery/camera/autoname/directional/east{
+ network = list("nukie")
+ },
+/obj/machinery/chem_dispenser/mutagensaltpeter,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Fy" = (
/turf/open/chasm,
/area/centcom/central_command_areas/admin)
+"Fz" = (
+/obj/item/statuebust{
+ pixel_y = 12
+ },
+/obj/structure/table/wood/fancy,
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
"FA" = (
/obj/structure/flora/bush/large/style_3,
/turf/open/floor/grass,
@@ -7247,6 +10496,14 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"FG" = (
+/obj/structure/barricade/sandbags,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"FH" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -7327,6 +10584,14 @@
},
/turf/open/floor/stone,
/area/centcom/central_command_areas/admin)
+"FR" = (
+/obj/structure/fence/cut/large,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"FS" = (
/obj/machinery/computer/records/medical/laptop{
dir = 4
@@ -7390,6 +10655,10 @@
},
/turf/open/floor/circuit/telecomms,
/area/centcom/central_command_areas/admin)
+"Gd" = (
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Ge" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -7431,6 +10700,26 @@
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron/white,
/area/centcom/central_command_areas/evacuation/ship)
+"Gj" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Engine Room"
+ },
+/obj/structure/barricade/wooden,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"Gk" = (
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/machinery/door/poddoor/shutters{
+ id = "FBBZ1";
+ name = "Security Shutters"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Gm" = (
/obj/structure/railing/wood{
dir = 1
@@ -7482,6 +10771,20 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/kitchen)
+"Gw" = (
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/obj/machinery/light/cold/directional/north,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"Gy" = (
+/obj/machinery/atmospherics/components/trinary/mixer,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Gz" = (
/obj/machinery/computer/auxiliary_base/directional/north,
/obj/structure/table/reinforced,
@@ -7503,6 +10806,33 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/supply)
+"GE" = (
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/iron/dark/textured_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
+"GF" = (
+/obj/machinery/power/shuttle_engine/heater{
+ resistance_flags = 3
+ },
+/obj/structure/window/reinforced/spawner/directional/north{
+ color = "#008000";
+ resistance_flags = 3
+ },
+/turf/open/lava/airless,
+/area/centcom/wizard_station)
+"GG" = (
+/obj/structure/railing{
+ dir = 6
+ },
+/turf/open/floor/catwalk_floor/iron_smooth{
+ initial_gas_mix = "TEMP=2.7"
+ },
+/area/centcom/syndicate_mothership)
+"GH" = (
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
"GI" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/vending/autodrobe/all_access,
@@ -7532,6 +10862,9 @@
/obj/effect/spawner/random/bureaucracy/briefcase,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"GM" = (
+/turf/open/floor/plating/elevatorshaft,
+/area/centcom/syndicate_mothership/control)
"GN" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -7612,6 +10945,19 @@
/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"Ha" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/airlock/glass_large{
+ name = "Disembarkents"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
"Hb" = (
/obj/machinery/power/port_gen/pacman,
/obj/structure/cable,
@@ -7635,11 +10981,24 @@
/obj/item/toy/plush/lizard_plushie,
/turf/open/floor/iron/grimy,
/area/centcom/central_command_areas/admin)
+"Hf" = (
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/control)
+"Hh" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"Hi" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/light/directional/east,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"Hj" = (
+/obj/machinery/light/cold/directional/west,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Hk" = (
/obj/effect/turf_decal/loading_area{
dir = 4
@@ -7667,6 +11026,12 @@
/obj/structure/sign/warning/yes_smoking/circle/directional/north,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"Hn" = (
+/obj/machinery/microwave,
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"Ho" = (
/obj/effect/turf_decal/siding/dark{
dir = 9
@@ -7691,6 +11056,10 @@
},
/turf/open/floor/wood/large,
/area/centcom/tdome/observation)
+"Hs" = (
+/obj/structure/showcase/machinery/rng,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Ht" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -7704,6 +11073,13 @@
/obj/machinery/smartfridge,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
+"Hv" = (
+/obj/machinery/air_sensor{
+ chamber_id = "nukiebase";
+ name = "syndicate ordnance gas sensor"
+ },
+/turf/open/floor/engine/vacuum,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Hw" = (
/obj/effect/turf_decal/siding/dark{
dir = 10
@@ -7713,11 +11089,22 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"Hx" = (
+/obj/structure/flora/grass/both/style_random,
+/obj/structure/flora/rock/pile/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"Hy" = (
/obj/structure/window/plasma/spawner/directional/north,
/obj/structure/window/plasma/spawner/directional/east,
/turf/open/indestructible/hotelwood,
/area/centcom/central_command_areas/admin)
+"Hz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"HA" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -7734,6 +11121,11 @@
},
/turf/open/floor/carpet/black,
/area/centcom/central_command_areas/borbop)
+"HC" = (
+/obj/effect/turf_decal/stripes/box,
+/obj/machinery/shower/directional/south,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"HD" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/dark{
@@ -7744,6 +11136,22 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/borbop)
+"HE" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"HF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/tank_dispenser,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"HG" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
dir = 8
@@ -7751,6 +11159,10 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/catwalk_floor,
/area/centcom/central_command_areas/evacuation/ship)
+"HH" = (
+/obj/structure/chair/stool/directional/north,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"HI" = (
/obj/effect/turf_decal/siding/blue,
/obj/effect/turf_decal/siding/blue/corner{
@@ -7835,6 +11247,20 @@
},
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
+"HV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/structure/lattice/catwalk,
+/obj/structure/fluff/tram_rail{
+ pixel_y = 17
+ },
+/obj/structure/fluff/tram_rail,
+/obj/structure/railing{
+ dir = 6
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"HW" = (
/obj/effect/turf_decal/siding/blue/corner,
/turf/open/floor/iron/dark/herringbone,
@@ -7865,6 +11291,10 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
+"Ia" = (
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Ib" = (
/obj/effect/turf_decal/siding/blue{
dir = 5
@@ -7888,9 +11318,27 @@
icon_state = "boxing"
},
/area/centcom/central_command_areas/admin)
+"Ie" = (
+/obj/machinery/light/directional/south,
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
+"If" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/machinery/processor/slime,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Ih" = (
/turf/closed/indestructible/fakeglass,
/area/centcom/central_command_areas/supply)
+"Ii" = (
+/obj/structure/railing,
+/turf/open/floor/iron/stairs/old{
+ dir = 8;
+ initial_gas_mix = "TEMP=2.7"
+ },
+/area/centcom/syndicate_mothership)
"Ij" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/table/glass,
@@ -7937,6 +11385,9 @@
/obj/structure/chair/stool/bar/directional/east,
/turf/open/floor/carpet/red,
/area/centcom/central_command_areas/evacuation/ship)
+"Iq" = (
+/turf/closed/wall/mineral/diamond,
+/area/centcom/syndicate_mothership/control)
"Ir" = (
/obj/machinery/computer/emergency_shuttle{
dir = 1
@@ -7956,6 +11407,10 @@
"It" = (
/turf/open/indestructible/event/plating,
/area/centcom/tdome/arena/actual)
+"Iu" = (
+/obj/effect/turf_decal/stripes/full,
+/turf/open/floor/mineral/titanium/yellow,
+/area/centcom/syndicate_mothership/control)
"Iv" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -7965,11 +11420,22 @@
},
/turf/open/floor/stone,
/area/centcom/central_command_areas/evacuation/ship)
+"Iw" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Iy" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/borbop)
+"Iz" = (
+/obj/machinery/vending/tool,
+/turf/open/floor/mineral/titanium/yellow,
+/area/centcom/syndicate_mothership/control)
"IA" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/wood/large,
@@ -8007,6 +11473,14 @@
icon_state = "boxing"
},
/area/centcom/central_command_areas/hall)
+"IH" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red{
+ dir = 1
+ },
+/obj/machinery/recharger,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"II" = (
/obj/structure/railing/wood,
/obj/structure/fake_stairs/wood/directional/east,
@@ -8057,6 +11531,12 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"IQ" = (
+/obj/machinery/atmospherics/components/binary/valve{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"IR" = (
/obj/structure/table/wood/fancy/royalblack,
/obj/effect/turf_decal/siding/wood,
@@ -8090,6 +11570,13 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"IY" = (
+/obj/machinery/vending/cola,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"IZ" = (
/obj/structure/chair/wood,
/turf/open/floor/carpet/black,
@@ -8097,10 +11584,21 @@
"Jb" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/prison/cells)
+"Jc" = (
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Jd" = (
/obj/structure/fake_stairs/wood/directional/north,
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"Jf" = (
+/obj/structure/sign/poster/contraband/free_drone{
+ pixel_y = 32
+ },
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"Jg" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/structure/table/reinforced,
@@ -8158,6 +11656,14 @@
},
/turf/open/indestructible/event/plating,
/area/centcom/tdome/arena/actual)
+"Jr" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 1
+ },
+/obj/structure/table/optable,
+/obj/machinery/light/cold/directional/north,
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/centcom/syndicate_mothership/control)
"Js" = (
/obj/structure/table/reinforced/plastitaniumglass{
name = "Andrea's Desk"
@@ -8165,6 +11671,15 @@
/obj/machinery/computer/security/wooden_tv,
/turf/open/floor/carpet,
/area/centcom/central_command_areas/admin_hangout)
+"Jt" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/trinary/filter{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Ju" = (
/obj/structure/hedge,
/obj/machinery/light/floor/has_bulb,
@@ -8192,6 +11707,13 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"Jx" = (
+/obj/structure/railing,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
"Jz" = (
/obj/structure/hedge,
/obj/machinery/light/floor/has_bulb,
@@ -8221,6 +11743,12 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"JD" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 10
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"JE" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 4
@@ -8285,6 +11813,19 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation)
+"JO" = (
+/obj/structure/chair/greyscale{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"JP" = (
+/obj/machinery/light/small/directional/north,
+/obj/machinery/camera/autoname/directional/east{
+ network = list("nukie")
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"JQ" = (
/obj/structure/table/reinforced/titaniumglass,
/obj/item/paper_bin,
@@ -8348,6 +11889,9 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"JZ" = (
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"Ka" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -8448,6 +11992,15 @@
},
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"Km" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"Kn" = (
+/turf/open/floor/iron/dark/textured_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
"Ko" = (
/obj/effect/turf_decal/siding/dark{
dir = 4
@@ -8498,6 +12051,22 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"Kv" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/structure/table/glass/plasmaglass,
+/obj/item/folder/white,
+/obj/item/pen{
+ pixel_x = 6;
+ pixel_y = 5
+ },
+/obj/machinery/light/cold/directional/west,
+/obj/item/stack/spacecash/c200{
+ pixel_y = 17
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"Kw" = (
/obj/structure/chair/office{
dir = 1
@@ -8517,6 +12086,18 @@
},
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"Kz" = (
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"KA" = (
+/obj/structure/table/wood,
+/obj/item/food/nachos{
+ pixel_x = 7;
+ pixel_y = -14
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"KB" = (
/obj/effect/turf_decal/siding/dark{
dir = 4
@@ -8526,6 +12107,26 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"KC" = (
+/obj/item/stack/sheet/mineral/sandbags,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
+"KD" = (
+/obj/machinery/door/window/survival_pod{
+ dir = 8;
+ name = "Toilet Door";
+ opacity = 1
+ },
+/obj/structure/window/reinforced/survival_pod/spawner/directional/north{
+ name = "Frosted Window";
+ opacity = 1
+ },
+/obj/structure/toilet/greyscale{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"KF" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 8
@@ -8544,6 +12145,12 @@
"KH" = (
/turf/closed/wall/mineral/titanium,
/area/centcom/central_command_areas/evacuation/ship)
+"KI" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"KJ" = (
/obj/structure/chair/stool/bar/directional/east,
/obj/machinery/light/directional/north,
@@ -8560,6 +12167,52 @@
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/iron/smooth_large,
/area/centcom/central_command_areas/evacuation/ship)
+"KL" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south{
+ name = "Tinted Window";
+ opacity = 1
+ },
+/obj/structure/table/reinforced/plasmarglass,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = -2;
+ pixel_y = 3
+ },
+/obj/item/assembly/signaler{
+ pixel_x = -2;
+ pixel_y = -2
+ },
+/obj/item/assembly/signaler{
+ pixel_x = 2;
+ pixel_y = 5
+ },
+/obj/item/assembly/timer{
+ pixel_x = 12;
+ pixel_y = -9
+ },
+/obj/item/assembly/timer{
+ pixel_x = 15
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = -6;
+ pixel_y = -4
+ },
+/obj/item/assembly/signaler{
+ pixel_x = 5;
+ pixel_y = 10
+ },
+/obj/item/assembly/timer{
+ pixel_x = 18;
+ pixel_y = 5
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"KM" = (
/obj/effect/turf_decal/siding/dark,
/obj/effect/turf_decal/siding/dark/corner{
@@ -8615,6 +12268,11 @@
},
/turf/open/space/basic,
/area/space)
+"KT" = (
+/turf/closed/indestructible/fakedoor{
+ name = "Tac-Com"
+ },
+/area/centcom/syndicate_mothership/control)
"KU" = (
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/large,
@@ -8784,6 +12442,10 @@
/obj/effect/turf_decal/tile/orange/diagonal_edge,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"Lr" = (
+/obj/structure/railing,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"Ls" = (
/obj/machinery/biogenerator/admin,
/obj/effect/turf_decal/siding/wood{
@@ -9020,6 +12682,13 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"LZ" = (
+/obj/machinery/vending/coffee,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Ma" = (
/obj/structure/hedge,
/obj/machinery/light/floor/has_bulb,
@@ -9045,6 +12714,15 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/supply)
+"Me" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/rebels_unite{
+ pixel_y = -32
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Mf" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -9097,6 +12775,10 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"Mn" = (
+/obj/effect/decal/remains/xeno/larva,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"Mo" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
@@ -9107,6 +12789,21 @@
},
/turf/open/floor/wood/large,
/area/centcom/tdome/observation)
+"Mq" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"Mr" = (
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"Ms" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"Mt" = (
/mob/living/simple_animal/bot/cleanbot/medbay,
/obj/machinery/light/floor/has_bulb,
@@ -9118,6 +12815,12 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"Mw" = (
+/obj/structure/extinguisher_cabinet/directional/south,
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
"Mx" = (
/obj/machinery/light/floor/has_bulb,
/obj/structure/chair/comfy/carp{
@@ -9129,6 +12832,12 @@
/obj/structure/fake_stairs/wood/directional/north,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"MA" = (
+/obj/effect/turf_decal/siding/red{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"MB" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/dark{
@@ -9181,6 +12890,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation/ship)
+"MI" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Storage"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"MJ" = (
/obj/structure/chair/office,
/obj/effect/landmark/ert_spawn,
@@ -9192,6 +12908,13 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"ML" = (
+/obj/structure/table/wood,
+/obj/item/clothing/suit/wizrobe/magusred,
+/obj/item/clothing/head/wizard/magus,
+/obj/item/staff,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"MM" = (
/obj/machinery/power/shuttle_engine/large,
/turf/open/floor/plating,
@@ -9233,6 +12956,27 @@
dir = 10
},
/area/centcom/central_command_areas/hall)
+"MR" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"MS" = (
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
+"MT" = (
+/turf/closed/indestructible/rock/snow,
+/area/centcom/syndicate_mothership)
+"MU" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red/corner,
+/obj/item/folder/red,
+/obj/item/pen/red,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"MV" = (
+/obj/machinery/computer/shuttle,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"MW" = (
/obj/machinery/status_display/evac/directional/west,
/obj/machinery/light/directional/west,
@@ -9273,6 +13017,9 @@
/obj/structure/hedge,
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"Ne" = (
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"Nf" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/wood/large,
@@ -9283,6 +13030,11 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"Nh" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/obj/effect/decal/cleanable/blood/gibs/body,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"Ni" = (
/obj/effect/turf_decal/siding/dark/corner{
dir = 1
@@ -9298,6 +13050,19 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/prison/cells)
+"Nk" = (
+/obj/structure/closet/crate{
+ icon_state = "crateopen"
+ },
+/obj/item/clothing/suit/wizrobe/red,
+/obj/item/clothing/head/wizard/red,
+/obj/item/staff,
+/obj/item/clothing/shoes/sandal/magic,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"Nl" = (
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Nm" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -9312,6 +13077,10 @@
},
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"Np" = (
+/obj/machinery/light/cold/directional/east,
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
"Nq" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -9322,6 +13091,20 @@
/obj/structure/hedge,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"Nr" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 4
+ },
+/obj/machinery/door/airlock/highsecurity{
+ name = "Sky Bridge"
+ },
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/textured_large,
+/area/centcom/syndicate_mothership/control)
"Ns" = (
/obj/structure/dresser,
/turf/open/floor/iron/grimy,
@@ -9335,6 +13118,25 @@
/obj/machinery/light/directional/south,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
+"Nu" = (
+/obj/structure/flora/tree/dead/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"Nv" = (
+/obj/structure/flora/tree/dead/style_random,
+/obj/structure/flora/grass/both/style_random,
+/obj/structure/railing,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"Nw" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Nx" = (
/obj/effect/turf_decal/siding/dark{
dir = 4
@@ -9370,6 +13172,13 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"ND" = (
+/obj/structure/flora/grass/both/style_random,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"NE" = (
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/pod_storage)
@@ -9412,6 +13221,11 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"NM" = (
+/obj/structure/sink/kitchen/directional/south,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"NN" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/trimline/green,
@@ -9439,12 +13253,28 @@
/obj/machinery/rnd/production/techfab/department/medical,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"NT" = (
+/obj/effect/baseturf_helper/asteroid/snow,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"NV" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 8
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"NW" = (
+/obj/structure/flora/grass/both/style_random,
+/obj/structure/flora/rock/icy/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"NZ" = (
+/obj/structure/flora/rock/icy/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"Oa" = (
+/turf/open/floor/engine/vacuum,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Ob" = (
/obj/structure/fireplace{
pixel_x = 0
@@ -9459,6 +13289,15 @@
},
/turf/open/floor/carpet,
/area/centcom/central_command_areas/admin)
+"Od" = (
+/obj/item/clothing/suit/wizrobe/black,
+/obj/item/clothing/head/wizard/black,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
+"Oe" = (
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"Of" = (
/obj/structure/curtain/cloth/fancy,
/obj/effect/spawner/structure/window/reinforced,
@@ -9478,6 +13317,12 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/tdome/observation)
+"Oi" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 5
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"Oj" = (
/obj/structure/hedge,
/obj/machinery/light/floor/has_bulb,
@@ -9509,6 +13354,15 @@
"On" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/admin)
+"Oo" = (
+/obj/machinery/door/airlock/maintenance/external{
+ name = "Bunk Room 2"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/catwalk_floor/iron,
+/area/centcom/syndicate_mothership/control)
"Op" = (
/obj/structure/railing/wood,
/obj/structure/table/reinforced,
@@ -9541,6 +13395,12 @@
/obj/effect/turf_decal/tile/brown/anticorner/contrasted,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/two)
+"Or" = (
+/obj/structure/chair/wood/wings{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"Os" = (
/obj/effect/turf_decal/siding/dark{
dir = 10
@@ -9553,6 +13413,13 @@
dir = 10
},
/area/centcom/central_command_areas/hall)
+"Ot" = (
+/obj/machinery/light/small/directional/south,
+/obj/item/watertank{
+ pixel_x = -10
+ },
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"Ou" = (
/obj/structure/table/wood,
/obj/machinery/modular_computer/console/preset/id/centcom{
@@ -9560,6 +13427,21 @@
},
/turf/open/floor/carpet/red,
/area/centcom/central_command_areas/admin)
+"Ov" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"Ow" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"Ox" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/machinery/griddle,
@@ -9593,6 +13475,13 @@
},
/turf/open/floor/circuit/telecomms,
/area/centcom/central_command_areas/admin)
+"OE" = (
+/obj/structure/fluff/tram_rail,
+/obj/structure/fluff/tram_rail{
+ pixel_y = 17
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"OF" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/table/wood,
@@ -9619,6 +13508,24 @@
/obj/structure/closet/emcloset,
/turf/open/floor/iron/dark/smooth_large,
/area/centcom/central_command_areas/evacuation/ship)
+"OH" = (
+/obj/structure/chair/stool/directional/south,
+/obj/structure/sign/map/right{
+ desc = "A framed picture of the station. Clockwise from security in red at the top, you see engineering in yellow, science in purple, escape in checkered red-and-white, medbay in green, arrivals in checkered red-and-blue, and then cargo in brown.";
+ icon_state = "map-right-MS";
+ pixel_y = 32
+ },
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"OI" = (
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/structure/chair/sofa/bench,
+/obj/machinery/light/cold/directional/north,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/stone,
+/area/centcom/syndicate_mothership/control)
"OJ" = (
/obj/effect/turf_decal/siding/blue{
dir = 5
@@ -9661,6 +13568,17 @@
/obj/machinery/coffeemaker/impressa,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/admin)
+"OS" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Personal Quarters"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"OU" = (
+/obj/item/food/meat/slab/human/mutant/lizard,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"OV" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
@@ -9686,6 +13604,19 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"OY" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/airlock/hatch{
+ name = "Security Checkpoint"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
"Pa" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -9709,6 +13640,15 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"Pd" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Pe" = (
/obj/structure/railing/wood{
dir = 8
@@ -9717,10 +13657,41 @@
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"Pf" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/machinery/door/airlock/hatch{
+ name = "Gangway"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"Pg" = (
/obj/structure/fake_stairs/wood/directional/north,
/turf/open/indestructible/hotelwood,
/area/centcom/central_command_areas/borbop)
+"Ph" = (
+/obj/machinery/hydroponics/constructable,
+/obj/machinery/light/cold/directional/west,
+/obj/item/seeds/cannabis{
+ pixel_y = 8
+ },
+/obj/item/cultivator{
+ pixel_x = -6;
+ pixel_y = 11
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"Pi" = (
+/mob/living/simple_animal/bot/medbot/mysterious{
+ desc = "If you don't accidentally blow yourself up from time to time you're not really a wizard anyway.";
+ faction = list("neutral","silicon","creature");
+ name = "Nobody's Perfect"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Pj" = (
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/wood/large,
@@ -9734,6 +13705,12 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/four)
+"Pn" = (
+/obj/effect/turf_decal/siding/red/corner{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"Po" = (
/obj/machinery/vending/boozeomat,
/obj/effect/turf_decal/siding/wood{
@@ -9749,6 +13726,13 @@
/obj/item/clipboard,
/turf/open/floor/carpet/royalblue,
/area/centcom/central_command_areas/admin)
+"Pq" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Pr" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/siding/wood{
@@ -9756,6 +13740,15 @@
},
/turf/open/floor/wood/large,
/area/centcom/tdome/observation)
+"Ps" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/machinery/door/window/right/directional/east,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"Pt" = (
/obj/structure/table/reinforced,
/obj/item/storage/toolbox/mechanical,
@@ -9788,6 +13781,40 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"Py" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/fun_police{
+ pixel_x = -32
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"Pz" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/flora/tree/pine/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"PA" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/flora/tree/dead/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"PB" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/open/space/basic,
+/area/space/nearstation)
"PC" = (
/obj/machinery/button/door/indestructible{
id = "XCCQMLoaddoor";
@@ -9814,6 +13841,12 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/supply)
+"PD" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/open/misc/ice/icemoon,
+/area/centcom/syndicate_mothership/control)
"PE" = (
/obj/machinery/newscaster{
pixel_x = 32
@@ -9837,6 +13870,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/ferry)
+"PI" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"PJ" = (
/obj/structure/closet/crate/freezer/blood,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -9849,6 +13888,10 @@
/obj/effect/turf_decal/tile/brown/half/contrasted,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/one)
+"PL" = (
+/obj/effect/baseturf_helper/asteroid/snow,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
"PM" = (
/obj/structure/chair/office,
/obj/effect/landmark/ert_spawn,
@@ -9861,11 +13904,37 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
+"PQ" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 8
+ },
+/obj/machinery/door/airlock/titanium{
+ name = "Experiments Wing Decontamination"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"PT" = (
/obj/structure/fake_stairs/wood/directional/east,
/obj/structure/railing/wood,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"PU" = (
+/obj/machinery/vending/dinnerware,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
"PW" = (
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/three)
@@ -9902,6 +13971,23 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"Qb" = (
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/machinery/door/puzzle/keycard/syndicate_bio,
+/obj/structure/fans/tiny,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"Qc" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
"Qd" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/cup/glass/drinkingglass{
@@ -9920,6 +14006,41 @@
"Qe" = (
/turf/open/ai_visible,
/area/centcom/ai_multicam_room)
+"Qg" = (
+/obj/structure/chair/stool/bar/directional/west,
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 4
+ },
+/obj/machinery/light/small/directional/north,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"Qh" = (
+/obj/structure/table/wood/poker,
+/obj/machinery/light/warm/directional/north,
+/obj/item/reagent_containers/cup/glass/bottle/whiskey{
+ pixel_x = -4;
+ pixel_y = 14
+ },
+/obj/item/toy/cards/deck{
+ pixel_x = 3;
+ pixel_y = 6
+ },
+/obj/item/clothing/mask/cigarette/robust{
+ pixel_x = -4;
+ pixel_y = 1
+ },
+/obj/effect/decal/cleanable/ash{
+ pixel_x = 12;
+ pixel_y = -6
+ },
+/obj/effect/spawner/random/entertainment/lighter{
+ pixel_x = 9;
+ pixel_y = -3
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"Qi" = (
/obj/structure/railing/wood{
dir = 8
@@ -9992,6 +14113,12 @@
/obj/item/storage/toolbox/mechanical,
/turf/open/floor/iron/smooth_large,
/area/centcom/central_command_areas/evacuation/ship)
+"Qu" = (
+/obj/structure/extinguisher_cabinet/directional/south,
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"Qv" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/siding/wood{
@@ -9999,6 +14126,19 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"Qw" = (
+/obj/structure/chair/office,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"Qy" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red{
+ dir = 1
+ },
+/obj/item/folder/red,
+/obj/item/pen/red,
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"QA" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/structure/table/wood/fancy/royalblue,
@@ -10045,6 +14185,28 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/ferry)
+"QF" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south{
+ name = "Tinted Window";
+ opacity = 1
+ },
+/obj/structure/table/reinforced/plasmarglass,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/obj/item/transfer_valve{
+ pixel_x = 5
+ },
+/obj/item/transfer_valve,
+/obj/item/transfer_valve{
+ pixel_x = -5
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"QG" = (
+/obj/structure/cable,
+/turf/open/floor/iron/smooth,
+/area/centcom/syndicate_mothership/control)
"QH" = (
/obj/effect/turf_decal/siding/wideplating_new/dark,
/obj/effect/turf_decal/tile/neutral/full,
@@ -10082,11 +14244,36 @@
/obj/machinery/rnd/production/techfab/department/service,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"QO" = (
+/obj/machinery/light/cold/directional/south,
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"QP" = (
/obj/effect/heretic_rune/big,
/obj/structure/chair/musical,
/turf/open/floor/plating/abductor,
/area/centcom/central_command_areas/admin)
+"QQ" = (
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south{
+ name = "Tinted Window";
+ opacity = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"QR" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"QS" = (
/obj/effect/turf_decal/siding/dark/corner{
dir = 8
@@ -10096,6 +14283,15 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin_hangout)
+"QT" = (
+/obj/structure/urinal/directional/north,
+/turf/open/floor/iron/white,
+/area/centcom/wizard_station)
+"QU" = (
+/obj/machinery/shower/directional/south,
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/iron/freezer,
+/area/centcom/syndicate_mothership/control)
"QV" = (
/turf/open/floor/iron/grimy,
/area/centcom/central_command_areas/admin)
@@ -10114,6 +14310,30 @@
/obj/machinery/light/directional/west,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"QZ" = (
+/obj/machinery/door/airlock/hatch{
+ name = "Gangway"
+ },
+/obj/structure/fans/tiny,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"Ra" = (
+/obj/machinery/door/airlock/hatch{
+ name = "Closet"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_edge,
+/area/centcom/syndicate_mothership/control)
+"Rb" = (
+/obj/effect/turf_decal/box/corners{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"Rc" = (
/obj/machinery/chem_master/condimaster,
/turf/open/floor/iron/dark,
@@ -10133,6 +14353,16 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/tdome/observation)
+"Rg" = (
+/obj/machinery/washing_machine,
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"Rh" = (
+/obj/item/kirbyplants/random,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
"Ri" = (
/obj/effect/turf_decal/siding/dark{
dir = 5
@@ -10147,6 +14377,13 @@
/obj/structure/marker_beacon/burgundy,
/turf/open/floor/catwalk_floor,
/area/centcom/central_command_areas/evacuation/ship)
+"Rl" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/trinary/filter/flipped,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Rm" = (
/obj/effect/turf_decal/siding/dark{
dir = 9
@@ -10156,6 +14393,10 @@
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/kitchen)
+"Rn" = (
+/obj/structure/flora/rock/icy/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"Ro" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -10183,6 +14424,18 @@
/obj/item/pen/fourcolor,
/turf/open/floor/carpet/purple,
/area/centcom/central_command_areas/admin)
+"Ru" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 9
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 1
+ },
+/obj/structure/bodycontainer/morgue{
+ dir = 2
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/centcom/syndicate_mothership/control)
"Rv" = (
/obj/machinery/vending/boozeomat,
/obj/item/reagent_containers/cup/glass/modglass/small{
@@ -10202,6 +14455,10 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/borbop)
+"Rw" = (
+/obj/machinery/light/cold/directional/east,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
"Rx" = (
/obj/structure/railing/wrestling{
dir = 8
@@ -10239,6 +14496,18 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"RB" = (
+/obj/structure/closet/cardboard,
+/obj/item/banhammer,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
+"RC" = (
+/obj/structure/table/wood,
+/obj/item/storage/bag/tray,
+/obj/item/food/burger/spell,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"RD" = (
/obj/effect/turf_decal/siding/dark{
dir = 10
@@ -10277,6 +14546,14 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"RI" = (
+/obj/structure/flora/grass/both/style_random,
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"RJ" = (
/obj/effect/decal/cleanable/fuel_pool,
/turf/open/floor/grass,
@@ -10316,6 +14593,28 @@
/obj/structure/hedge,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"RP" = (
+/obj/structure/flora/rock/icy/style_random{
+ pixel_x = -7
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"RR" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/machinery/camera/autoname/directional/west{
+ network = list("nukie")
+ },
+/obj/structure/chair/greyscale{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"RS" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"RT" = (
/obj/machinery/light/directional/south,
/turf/open/floor/grass,
@@ -10341,11 +14640,26 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/armory)
+"RW" = (
+/obj/structure/table/reinforced,
+/obj/item/paper/fluff/stations/centcom/disk_memo{
+ pixel_x = -6;
+ pixel_y = -7
+ },
+/obj/item/taperecorder{
+ pixel_y = 15
+ },
+/obj/item/stack/spacecash/c50,
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"RX" = (
/obj/structure/railing/wood,
/obj/effect/turf_decal/trimline/green/line,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"RY" = (
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"RZ" = (
/obj/structure/chair/bronze{
name = "gamer chair mk2"
@@ -10359,6 +14673,16 @@
/obj/structure/flora/tree/jungle/style_3,
/turf/open/floor/grass,
/area/centcom/central_command_areas/evacuation)
+"Sb" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 9
+ },
+/turf/open/lava/plasma/ice_moon,
+/area/centcom/syndicate_mothership/control)
"Sd" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/structure/lattice,
@@ -10380,9 +14704,22 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"Sh" = (
+/obj/machinery/light/cold/directional/east,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/centcom/syndicate_mothership/control)
"Si" = (
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/two)
+"Sj" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/turf/open/floor/plating/icemoon,
+/area/centcom/syndicate_mothership/control)
"Sk" = (
/obj/structure/table/reinforced,
/obj/item/storage/medkit/regular,
@@ -10394,6 +14731,29 @@
/obj/structure/chair/sofa/corp,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"Sm" = (
+/obj/machinery/griddle,
+/obj/structure/sign/poster/contraband/syndiemoth{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"Sn" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/obj/structure/chair/office/light,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"So" = (
+/obj/structure/chair/stool/directional/west,
+/turf/open/floor/wood/tile,
+/area/centcom/syndicate_mothership/control)
+"Sp" = (
+/obj/structure/fence,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"Sq" = (
/obj/structure/table/reinforced,
/obj/item/clipboard,
@@ -10403,6 +14763,14 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/armory)
+"Sr" = (
+/obj/structure/lattice/catwalk,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing{
+ dir = 5
+ },
+/turf/open/floor/plating/snowed/icemoon,
+/area/centcom/syndicate_mothership/control)
"Ss" = (
/obj/effect/turf_decal/siding/dark{
dir = 4
@@ -10413,15 +14781,77 @@
/obj/structure/fake_stairs/wood/directional/south,
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"Su" = (
+/obj/structure/table/wood,
+/obj/item/dice/d20,
+/obj/item/dice,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
"Sv" = (
/obj/effect/turf_decal/trimline/blue,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"Sw" = (
+/obj/structure/punching_bag,
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"Sy" = (
+/obj/machinery/door/window/survival_pod{
+ name = "Frosted Door";
+ opacity = 1
+ },
+/turf/open/floor/iron/freezer,
+/area/centcom/syndicate_mothership/control)
"Sz" = (
/obj/structure/hedge,
/obj/machinery/light/floor/has_bulb,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"SA" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 10
+ },
+/obj/structure/table/glass/plasmaglass,
+/obj/item/paper_bin{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"SB" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/structure/table/glass/plasmaglass,
+/obj/item/folder/white{
+ pixel_x = 4;
+ pixel_y = -3
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = -5;
+ pixel_y = 12
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = -2;
+ pixel_y = 13
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = 1;
+ pixel_y = 14
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = 4;
+ pixel_y = 15
+ },
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/item/reagent_containers/cup/bottle/radium{
+ pixel_x = -8;
+ pixel_y = 9
+ },
+/obj/item/stack/sheet/mineral/plasma,
+/obj/item/stack/sheet/mineral/plasma,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"SC" = (
/obj/structure/tank_dispenser/oxygen,
/obj/structure/window/reinforced/survival_pod/spawner/directional/west,
@@ -10472,6 +14902,19 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"SG" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/purple,
+/obj/structure/extinguisher_cabinet/directional/south,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"SH" = (
+/obj/structure/flora/tree/pine/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"SI" = (
/obj/structure/closet,
/turf/open/floor/iron/dark,
@@ -10518,6 +14961,12 @@
},
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"SN" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/cup/rag,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"SO" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/machinery/light/neon_lining{
@@ -10544,6 +14993,10 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/centcom/central_command_areas/armory)
+"SU" = (
+/obj/item/food/meat/slab/xeno,
+/turf/open/floor/grass,
+/area/centcom/wizard_station)
"SW" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 1
@@ -10567,6 +15020,9 @@
/obj/machinery/chem_dispenser/drinks/beer,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/borbop)
+"Ta" = (
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
"Tb" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -10626,10 +15082,18 @@
/obj/effect/spawner/random/bureaucracy/paper,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"Tl" = (
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"Tm" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/carpet/red,
/area/centcom/central_command_areas/evacuation/ship)
+"To" = (
+/obj/structure/mop_bucket,
+/obj/item/mop,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"Tp" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/siding/wood{
@@ -10650,6 +15114,35 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
+"Tt" = (
+/obj/structure/table/glass/plasmaglass,
+/obj/item/screwdriver{
+ pixel_x = 1;
+ pixel_y = 23
+ },
+/obj/item/clothing/glasses/science{
+ pixel_x = -5;
+ pixel_y = 11
+ },
+/obj/machinery/reagentgrinder{
+ pixel_x = 7;
+ pixel_y = 5
+ },
+/obj/structure/noticeboard/directional/east,
+/obj/item/grenade/chem_grenade{
+ pixel_x = -4
+ },
+/obj/item/grenade/chem_grenade{
+ pixel_x = -4
+ },
+/obj/item/grenade/chem_grenade{
+ pixel_x = -4
+ },
+/obj/item/grenade/chem_grenade{
+ pixel_x = -4
+ },
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"Tu" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 4
@@ -10685,12 +15178,30 @@
/obj/machinery/modular_computer/console/preset/id/centcom,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"Ty" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
"Tz" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/three)
+"TA" = (
+/obj/structure/chair/office{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"TB" = (
+/obj/machinery/smartfridge/chemistry/virology/preloaded,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"TC" = (
/obj/structure/curtain/bounty,
/turf/closed/indestructible/fakeglass,
@@ -10737,6 +15248,11 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
+"TL" = (
+/obj/structure/table/rolling,
+/obj/item/reagent_containers/condiment/soymilk,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"TM" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 4
@@ -10792,6 +15308,9 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/evacuation)
+"TT" = (
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
"TU" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -10833,10 +15352,28 @@
/obj/structure/window/plasma/spawner/directional/north,
/turf/open/indestructible/hotelwood,
/area/centcom/central_command_areas/admin)
+"Ua" = (
+/obj/structure/chair/wood/wings{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/centcom/wizard_station)
+"Ub" = (
+/turf/closed/indestructible/opsglass,
+/area/centcom/syndicate_mothership/control)
"Uc" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
+"Ue" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Uf" = (
/obj/effect/turf_decal/siding/dark{
dir = 8
@@ -10862,6 +15399,19 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin_hangout)
+"Ul" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/structure/closet/firecloset,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
+"Um" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/control)
"Up" = (
/obj/effect/turf_decal/siding/wood,
/obj/machinery/light/neon_lining{
@@ -10874,6 +15424,12 @@
/obj/machinery/status_display/ai/directional/south,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/supply)
+"Ur" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/misc/ice/icemoon,
+/area/centcom/syndicate_mothership/control)
"Ut" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 8
@@ -10897,6 +15453,39 @@
/obj/item/reagent_containers/cup/coffeepot/bluespace,
/turf/open/floor/carpet/royalblue,
/area/centcom/central_command_areas/admin)
+"Uv" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 9
+ },
+/obj/structure/table/glass/plasmaglass,
+/obj/machinery/reagentgrinder{
+ pixel_x = -5;
+ pixel_y = 12
+ },
+/obj/item/reagent_containers/cup/beaker/large{
+ pixel_x = -7;
+ pixel_y = -8
+ },
+/obj/item/reagent_containers/cup/beaker/cryoxadone{
+ pixel_x = 9;
+ pixel_y = -7
+ },
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/obj/structure/sign/poster/contraband/kudzu{
+ pixel_y = 32
+ },
+/obj/item/reagent_containers/spray/plantbgone{
+ pixel_x = 10;
+ pixel_y = 5
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"Uw" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Ux" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 1
@@ -10919,6 +15508,9 @@
"Uz" = (
/turf/closed/indestructible/fakeglass,
/area/centcom/central_command_areas/hall)
+"UA" = (
+/turf/open/floor/plating/icemoon,
+/area/centcom/syndicate_mothership/control)
"UB" = (
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/floor/grass,
@@ -10930,6 +15522,17 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/large,
/area/centcom/tdome/observation)
+"UD" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/item/storage/fancy/cigarettes/cigars/havana,
+/obj/item/toy/plush/nukeplushie{
+ name = "Sir Flash Nukedon";
+ pixel_x = -2;
+ pixel_y = 14
+ },
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"UF" = (
/obj/machinery/hydroponics/constructable,
/obj/effect/turf_decal/trimline/green/line{
@@ -10966,11 +15569,38 @@
/obj/machinery/vending/wardrobe/medi_wardrobe,
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"UM" = (
+/obj/machinery/camera/autoname/directional/south{
+ network = list("nukie")
+ },
+/turf/open/floor/iron/dark/textured_half{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"UN" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/door/airlock/centcom,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/kitchen)
+"UO" = (
+/obj/machinery/vending/cigarette/syndicate,
+/turf/open/floor/catwalk_floor/titanium,
+/area/centcom/syndicate_mothership/control)
+"UQ" = (
+/obj/effect/turf_decal/siding/wideplating{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating,
+/obj/machinery/door/airlock/external/ruin,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/structure/fans/tiny,
+/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/turf/open/floor/iron/smooth_half{
+ dir = 4
+ },
+/area/centcom/syndicate_mothership/control)
"US" = (
/obj/structure/window/plasma/spawner/directional/north,
/turf/open/indestructible/hotelwood,
@@ -10988,9 +15618,27 @@
/obj/effect/spawner/random/exotic/antag_gear,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"UU" = (
+/obj/structure/chair/office/light{
+ dir = 1
+ },
+/obj/machinery/light/cold/directional/east,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
+"UX" = (
+/obj/structure/flora/tree/pine/style_random,
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"UY" = (
/turf/open/floor/iron/dark/diagonal,
/area/centcom/central_command_areas/medical)
+"UZ" = (
+/obj/structure/fence/corner{
+ dir = 6
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"Va" = (
/obj/machinery/fishing_portal_generator,
/turf/open/floor/carpet/neon/simple/cyan,
@@ -11005,12 +15653,33 @@
/obj/item/reagent_containers/cup/glass/mug/nanotrasen,
/turf/open/floor/carpet/purple,
/area/centcom/central_command_areas/admin)
+"Vd" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/iron/smooth_half{
+ dir = 1
+ },
+/area/centcom/syndicate_mothership/control)
+"Ve" = (
+/obj/machinery/hydroponics/constructable,
+/turf/open/floor/mineral/titanium/tiled,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Vf" = (
/obj/effect/turf_decal/siding/dark{
dir = 9
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin_hangout)
+"Vg" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
+ dir = 10
+ },
+/obj/machinery/light/cold/directional/east,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Vh" = (
/obj/structure/table/reinforced,
/obj/item/storage/backpack/duffelbag/med/surgery{
@@ -11024,6 +15693,9 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron/white,
/area/centcom/central_command_areas/evacuation/ship)
+"Vi" = (
+/turf/closed/wall/mineral/wood,
+/area/centcom/syndicate_mothership/control)
"Vj" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/vending/clothing,
@@ -11047,6 +15719,14 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"Vm" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/machinery/computer/pandemic,
+/obj/structure/noticeboard/directional/north,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Vn" = (
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
@@ -11068,6 +15748,9 @@
/obj/structure/mannequin,
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"Vq" = (
+/turf/closed/indestructible/syndicate,
+/area/centcom/syndicate_mothership/expansion_fridgerummage)
"Vs" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
/obj/structure/table/wood/fancy/royalblue,
@@ -11084,6 +15767,10 @@
},
/turf/open/floor/iron/white/diagonal,
/area/centcom/central_command_areas/hall)
+"Vt" = (
+/obj/machinery/light/directional/east,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Vu" = (
/obj/structure/closet/secure_closet/ert_med,
/obj/machinery/vending/wallmed/directional/south{
@@ -11132,6 +15819,29 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/botany)
+"Vz" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
+"VA" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 9
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"VB" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
+"VC" = (
+/obj/item/stack/spacecash/c20,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"VD" = (
/turf/closed/wall/mineral/iron,
/area/centcom/central_command_areas/admin)
@@ -11149,6 +15859,15 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
+"VG" = (
+/obj/structure/chair/stool/bar/directional/west,
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 4
+ },
+/obj/machinery/light/small/directional/south,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"VH" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -11186,6 +15905,15 @@
/obj/machinery/status_display/evac/directional/east,
/turf/open/floor/iron,
/area/centcom/central_command_areas/armory)
+"VN" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/structure/chair/sofa/bench/right{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"VO" = (
/obj/machinery/door/poddoor/ert,
/obj/effect/turf_decal/delivery,
@@ -11196,6 +15924,9 @@
/obj/effect/turf_decal/tile/brown/anticorner/contrasted,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/four)
+"VQ" = (
+/turf/open/floor/iron/stairs/old,
+/area/centcom/syndicate_mothership/control)
"VR" = (
/obj/machinery/light/directional/west,
/obj/structure/hedge,
@@ -11254,6 +15985,24 @@
"Wb" = (
/turf/open/floor/wood/large,
/area/centcom/tdome/observation)
+"Wd" = (
+/obj/structure/table/reinforced/plasmarglass,
+/obj/item/pen{
+ pixel_x = 6;
+ pixel_y = 5
+ },
+/obj/item/folder/red{
+ pixel_x = -5
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
+"We" = (
+/obj/item/clothing/shoes/sneakers/marisa,
+/obj/item/clothing/suit/wizrobe/marisa,
+/obj/item/clothing/head/wizard/marisa,
+/obj/item/staff/broom,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Wf" = (
/obj/structure/railing/wood{
dir = 8
@@ -11291,6 +16040,10 @@
},
/turf/open/floor/carpet/executive,
/area/centcom/central_command_areas/admin)
+"Wm" = (
+/obj/machinery/shuttle_manipulator,
+/turf/open/floor/circuit/red,
+/area/centcom/syndicate_mothership/control)
"Wo" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/access/any/supply/general,
@@ -11300,6 +16053,13 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"Wq" = (
+/obj/structure/sign/poster/contraband/masked_men{
+ pixel_x = 32
+ },
+/obj/machinery/chem_dispenser/fullupgrade,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"Wr" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -11339,6 +16099,15 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
+"Ww" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/closet/emcloset,
+/obj/item/stack/spacecash/c100,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"Wx" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -11359,6 +16128,10 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
+"WD" = (
+/obj/structure/flora/rock/pile/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"WE" = (
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/obj/effect/turf_decal/tile/neutral/opposingcorners,
@@ -11392,6 +16165,14 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
+"WK" = (
+/obj/machinery/vending/magivend,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"WM" = (
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
+/area/centcom/wizard_station)
"WN" = (
/obj/structure/table/wood,
/obj/item/storage/box/drinkingglasses,
@@ -11401,6 +16182,11 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
+"WO" = (
+/turf/open/floor/iron/smooth_edge{
+ dir = 8
+ },
+/area/centcom/syndicate_mothership/control)
"WP" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -11469,6 +16255,13 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"Xa" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Observation Deck"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Xb" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -11527,6 +16320,17 @@
dir = 8
},
/area/centcom/central_command_areas/hall)
+"Xm" = (
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/structure/chair/sofa/bench/right,
+/obj/structure/sign/poster/contraband/donut_corp{
+ pixel_y = 32
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5,
+/turf/open/floor/stone,
+/area/centcom/syndicate_mothership/control)
"Xn" = (
/obj/structure/chair/office{
dir = 4
@@ -11542,6 +16346,12 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin)
+"Xo" = (
+/obj/structure/chair/wood/wings{
+ dir = 1
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Xp" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/computer/monitor,
@@ -11566,6 +16376,10 @@
/obj/effect/turf_decal/tile/brown/anticorner/contrasted,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/one)
+"Xv" = (
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership)
"Xw" = (
/turf/closed/indestructible/fakeglass,
/area/centcom/central_command_areas/admin_hangout)
@@ -11635,10 +16449,20 @@
},
/turf/open/floor/carpet/red,
/area/centcom/central_command_areas/admin)
+"XH" = (
+/obj/effect/landmark/start/nukeop_leader,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"XI" = (
/obj/structure/table/abductor,
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/admin)
+"XJ" = (
+/obj/structure/flora/grass/both/style_random,
+/obj/structure/flora/tree/dead/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/centcom/syndicate_mothership/control)
"XK" = (
/obj/machinery/firealarm/directional/south,
/obj/structure/closet/crate/bin,
@@ -11646,10 +16470,21 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/supply)
+"XM" = (
+/turf/closed/indestructible/fakedoor{
+ name = "BUNKER 4337"
+ },
+/area/centcom/syndicate_mothership)
"XN" = (
/obj/structure/chair/office,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"XO" = (
+/obj/structure/table/wood,
+/obj/item/retractor,
+/obj/machinery/light/directional/north,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"XP" = (
/obj/effect/turf_decal/siding/dark{
dir = 9
@@ -11664,6 +16499,10 @@
/obj/item/toy/plush/lizard_plushie,
/turf/open/floor/iron/grimy,
/area/centcom/central_command_areas/admin)
+"XT" = (
+/obj/structure/fence/cut/medium,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"XU" = (
/obj/effect/turf_decal/siding/dark{
dir = 6
@@ -11729,6 +16568,14 @@
/obj/item/clothing/head/beret/science/rd,
/turf/open/floor/carpet/purple,
/area/centcom/central_command_areas/admin)
+"Ye" = (
+/obj/effect/landmark/start/wizard,
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
+"Yf" = (
+/obj/machinery/chem_master,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"Yg" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/table/reinforced,
@@ -11763,6 +16610,15 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/borbop)
+"Yh" = (
+/obj/machinery/computer/mech_bay_power_console{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Yi" = (
/obj/machinery/computer/camera_advanced,
/turf/open/floor/iron/dark/herringbone,
@@ -11785,14 +16641,81 @@
/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/turf/open/floor/wood,
/area/centcom/central_command_areas/admin)
+"Ym" = (
+/obj/machinery/light/cold/directional/north,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"Yn" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/supplypod)
+"Yo" = (
+/obj/machinery/camera/autoname/directional/east{
+ network = list("nukie")
+ },
+/obj/structure/closet/crate/cardboard/mothic,
+/turf/open/floor/plating,
+/area/centcom/syndicate_mothership/control)
+"Yp" = (
+/obj/structure/rack,
+/obj/machinery/light/cold/directional/west,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/item/stock_parts/micro_laser/high{
+ pixel_x = 12
+ },
+/obj/item/wrench{
+ desc = "A little smidgeon of Freon...";
+ name = "Freon"
+ },
+/obj/item/stock_parts/micro_laser/high{
+ pixel_x = -4;
+ pixel_y = -8
+ },
+/obj/item/stock_parts/micro_laser/high{
+ pixel_x = 8;
+ pixel_y = 4
+ },
+/obj/item/stock_parts/micro_laser/high{
+ pixel_x = -8;
+ pixel_y = -4
+ },
+/obj/item/melee/powerfist,
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
+"Yq" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/siding/red,
+/obj/item/toy/nuke{
+ pixel_x = -5;
+ pixel_y = 1
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/centcom/syndicate_mothership/control)
+"Ys" = (
+/obj/machinery/computer/camera_advanced/xenobio,
+/obj/structure/noticeboard/directional/east,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/expansion_bioterrorism)
"Yt" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/fake_stairs/wood/directional/east,
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
+"Yv" = (
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
+"Yw" = (
+/obj/docking_port/stationary{
+ dwidth = 25;
+ height = 50;
+ name = "Syndicate Auxiliary Shuttle Dock";
+ shuttle_id = "emergency_syndicate";
+ width = 50
+ },
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"Yx" = (
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/evacuation/ship)
@@ -11812,6 +16735,9 @@
},
/turf/open/floor/carpet,
/area/centcom/central_command_areas/admin)
+"YA" = (
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership/control)
"YB" = (
/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/iron/dark,
@@ -11864,12 +16790,38 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
+"YM" = (
+/obj/structure/table/wood/fancy,
+/obj/item/radio/headset,
+/turf/open/floor/wood,
+/area/centcom/wizard_station)
"YN" = (
/obj/effect/turf_decal/siding/dark{
dir = 1
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
+"YO" = (
+/obj/structure/table/glass/plasmaglass,
+/obj/item/reagent_containers/cup/beaker/large{
+ pixel_x = -5;
+ pixel_y = 8
+ },
+/obj/item/reagent_containers/cup/beaker{
+ pixel_x = 8;
+ pixel_y = 2
+ },
+/obj/machinery/light/cold/directional/east,
+/obj/item/gun/syringe/syndicate,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
+"YP" = (
+/obj/machinery/door/airlock{
+ icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
+ name = "Bathroom"
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"YR" = (
/obj/effect/turf_decal/siding/dark{
dir = 8
@@ -11889,6 +16841,12 @@
icon_state = "boxing"
},
/area/centcom/central_command_areas/hall)
+"YV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"YW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
dir = 8
@@ -11927,13 +16885,36 @@
"Zc" = (
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/admin)
+"Ze" = (
+/obj/structure/table/wood,
+/obj/item/bikehorn/golden{
+ pixel_x = -8;
+ pixel_y = 8
+ },
+/turf/open/floor/engine/cult,
+/area/centcom/wizard_station)
"Zf" = (
/turf/closed/indestructible/fakeglass,
/area/centcom/central_command_areas/admin)
+"Zh" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 9
+ },
+/obj/structure/table/glass/plasmaglass,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/item/storage/medkit/regular,
+/turf/open/floor/mineral/plastitanium,
+/area/centcom/syndicate_mothership/control)
"Zi" = (
/obj/item/kirbyplants/fullysynthetic,
/turf/open/floor/mineral/titanium/white,
/area/centcom/central_command_areas/admin)
+"Zj" = (
+/obj/structure/fence/cut/large,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
"Zl" = (
/obj/structure/table/reinforced,
/obj/item/clipboard,
@@ -11974,6 +16955,11 @@
/obj/machinery/shuttle_manipulator,
/turf/open/floor/circuit/green,
/area/centcom/central_command_areas/briefing)
+"Zt" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/turf/open/floor/carpet,
+/area/centcom/syndicate_mothership/control)
"Zu" = (
/obj/structure/fake_stairs/wood/directional/west,
/obj/machinery/light/floor/has_bulb,
@@ -11994,6 +16980,9 @@
icon_state = "boxing"
},
/area/centcom/central_command_areas/admin)
+"Zy" = (
+/turf/closed/indestructible/opsglass,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"Zz" = (
/obj/structure/closet/crate/freezer/surplus_limbs,
/turf/open/floor/iron/dark,
@@ -12032,6 +17021,10 @@
planetary_atmos = 0
},
/area/awaymission/errorroom)
+"ZF" = (
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/closed/indestructible/opsglass,
+/area/centcom/syndicate_mothership/expansion_bombthreat)
"ZG" = (
/obj/structure/table/wood,
/obj/item/newspaper{
@@ -12059,6 +17052,18 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/dark/small,
/area/centcom/central_command_areas/botany)
+"ZI" = (
+/obj/effect/light_emitter{
+ set_cap = 1;
+ set_luminosity = 4
+ },
+/obj/structure/flora/rock/pile/style_random,
+/turf/open/misc/asteroid/snow/airless,
+/area/centcom/syndicate_mothership)
+"ZK" = (
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/syndicate_mothership/control)
"ZL" = (
/obj/effect/turf_decal/siding/dark{
dir = 9
@@ -12102,6 +17107,11 @@
},
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/four)
+"ZR" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/item/kirbyplants/random,
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"ZS" = (
/obj/structure/railing/wood{
dir = 4
@@ -12110,10 +17120,23 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"ZU" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/machinery/light/directional/west,
+/obj/item/reagent_containers/cup/glass/shaker,
+/obj/effect/turf_decal/tile/bar/opposingcorners,
+/turf/open/floor/iron,
+/area/centcom/syndicate_mothership/control)
"ZV" = (
/obj/structure/railing/wrestling,
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/hall)
+"ZW" = (
+/obj/structure/sign/poster/contraband/revolver{
+ pixel_y = -32
+ },
+/turf/open/floor/mineral/titanium,
+/area/centcom/syndicate_mothership/control)
"ZX" = (
/obj/effect/turf_decal/siding/dark{
dir = 10
@@ -13077,27 +18100,27 @@ aa
aa
aa
aa
+km
+km
+km
+km
+km
+km
+km
+km
+km
aa
aa
aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+km
+km
+km
+km
+km
+km
aa
aa
aa
@@ -13274,6 +18297,38 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+ju
+ju
+ju
+BH
+BH
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
@@ -13301,60 +18356,28 @@ aa
aa
aa
aa
+km
+km
+rk
+rk
+rk
+rk
+rk
+rk
+rk
+km
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+km
+km
+km
+km
+km
+km
+EB
+EB
+EB
+EB
+km
aa
aa
aa
@@ -13531,6 +18554,38 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+BH
+BH
+sz
+hN
+Bq
+hN
+Xo
+BH
+ju
+ju
+BH
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
@@ -13558,60 +18613,28 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+km
+rk
+NT
+Cd
+ls
+pF
+DJ
+up
+rk
+km
+km
+km
+EB
+EB
+EB
+TB
+EB
+Fn
+iP
+fb
+EB
+km
aa
aa
aa
@@ -13788,6 +18811,38 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+xn
+yR
+Fw
+yL
+yL
+yL
+yL
+yL
+Xa
+yL
+yL
+BH
+BH
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
@@ -13815,60 +18870,28 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+km
+rk
+Dq
+RY
+RY
+RY
+RY
+RY
+rk
+TT
+TT
+TT
+EB
+Uv
+SB
+JD
+Ph
+DW
+iP
+iP
+EB
+km
aa
aa
aa
@@ -14045,6 +19068,38 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+YM
+hY
+yR
+BH
+yL
+yL
+yL
+yL
+yL
+BH
+yL
+Oe
+yL
+BH
+BH
+BH
+BH
+BH
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
@@ -14072,60 +19127,28 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+km
+rk
+sZ
+EJ
+EJ
+EJ
+EJ
+xw
+rk
+Ne
+Ne
+Ne
+EB
+nu
+tO
+nr
+CZ
+DW
+DW
+DW
+EB
+km
aa
aa
aa
@@ -14302,6 +19325,38 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+yR
+yR
+yR
+yR
+BH
+sz
+hN
+yL
+hN
+Xo
+BH
+yL
+yL
+yL
+BH
+Od
+iy
+RB
+BH
+BH
+ju
+BH
+hV
+hV
+hV
aa
aa
aa
@@ -14329,6 +19384,28 @@ aa
aa
aa
aa
+km
+rk
+qv
+mL
+fx
+KI
+BF
+SG
+rk
+Ne
+Ne
+Ne
+EB
+Vm
+Nl
+Uw
+Ve
+DW
+iP
+iE
+EB
+km
aa
aa
aa
@@ -14350,6 +19427,29 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
@@ -14360,7710 +19460,35 @@ aa
aa
aa
aa
+LV
+LX
+zi
+zi
+zi
+ik
+ik
+ZE
+fy
+LW
+LV
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LX
-zi
-zi
-zi
-ik
-ik
-ZE
-fy
-LW
-LV
-aa
-"}
-(10,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LW
-zi
-zi
-zi
-ik
-ik
-ik
-ik
-LW
-LV
-aa
-"}
-(11,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LW
-ik
-ik
-ik
-ik
-ik
-ik
-ik
-LW
-LV
-aa
-"}
-(12,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LW
-zi
-zi
-zi
-ik
-zi
-zi
-zi
-LW
-LV
-aa
-"}
-(13,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LW
-zi
-zi
-zi
-ik
-zi
-zi
-zi
-LW
-LV
-aa
-"}
-(14,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-pW
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LW
-zi
-zi
-zi
-ik
-zi
-zi
-zi
-LW
-LV
-aa
-"}
-(15,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LW
-LW
-LW
-LW
-LW
-LW
-LW
-LW
-LW
-LV
-aa
-"}
-(16,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-LV
-LV
-LV
-LV
-LV
-LV
-LV
-LV
-LV
-LV
-LV
-aa
-"}
-(17,1,1) = {"
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-fX
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-fR
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(18,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Fi
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(19,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-aa
-"}
-(20,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(21,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(22,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(23,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Di
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(24,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-Qe
-pu
-Di
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(25,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-Di
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(26,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(27,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-jA
-jA
-jA
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(28,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-KF
-KF
-KF
-KF
-KF
-SS
-Yn
-Yn
-EZ
-EZ
-EZ
-EZ
-EZ
-QM
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-lS
-lS
-lS
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(29,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-AH
-AH
-AH
-AH
-OP
-PK
-Yn
-Yn
-Vn
-PW
-Vn
-PW
-Vn
-zZ
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-lS
-lS
-lS
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(30,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-OP
-AH
-AH
-AH
-OP
-PK
-Yn
-Yn
-Vn
-PW
-Vn
-PW
-Vn
-zZ
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-lS
-lS
-lS
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(31,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-OP
-OP
-OP
-OP
-OP
-PK
-Yn
-Yn
-Vn
-PW
-Vn
-PW
-Vn
-zZ
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-jA
-jA
-jA
-jA
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(32,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-AH
-AH
-AH
-AH
-OP
-PK
-Yn
-Yn
-Vn
-Vn
-Vn
-Vn
-Vn
-zZ
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(33,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-XD
-XD
-XD
-XD
-XD
-Xs
-Yn
-Yn
-Tz
-Tz
-Tz
-Tz
-Tz
-zE
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(34,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(35,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-zM
-zM
-zM
-zM
-zM
-zs
-Yn
-Yn
-Pv
-Pv
-Pv
-Pv
-Pv
-ZQ
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(36,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-Se
-Si
-Se
-Se
-Se
-Tc
-Yn
-Yn
-Pm
-Pm
-Pm
-Xh
-Xh
-Wt
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(37,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-Se
-Si
-Se
-Si
-Se
-Tc
-Yn
-Yn
-Xh
-Xh
-Pm
-Xh
-Xh
-Wt
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(38,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-Yn
-Se
-Si
-Se
-Si
-Se
-Tc
-Yn
-Yn
-Xh
-Xh
-Pm
-Xh
-Xh
-Wt
-Yn
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-jA
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-hH
-jA
-aa
-"}
-(39,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+"}
+(10,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -22114,22 +19539,6 @@ aa
aa
aa
aa
-Yn
-Se
-Se
-Se
-Si
-Se
-Tc
-Yn
-Yn
-Pm
-Pm
-Pm
-Pm
-Pm
-Wt
-Yn
aa
aa
aa
@@ -22141,26 +19550,7 @@ aa
aa
aa
aa
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
-jA
aa
-"}
-(40,1,1) = {"
aa
aa
aa
@@ -22192,6 +19582,38 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+BH
+Ei
+qs
+yR
+yR
+Ie
+BH
+BH
+ju
+ju
+ju
+BH
+BH
+uB
+Oe
+yL
+MI
+WM
+WM
+hq
+Gj
+yL
+yL
+BH
+hV
+hV
+hV
aa
aa
aa
@@ -22206,6 +19628,11 @@ aa
aa
aa
aa
+MT
+MT
+MT
+MT
+MT
aa
aa
aa
@@ -22214,6 +19641,28 @@ aa
aa
aa
aa
+km
+rk
+Gw
+eQ
+aN
+Af
+Af
+uR
+rk
+TT
+oa
+TT
+EB
+xE
+Nl
+nr
+jM
+DW
+iP
+iP
+EB
+km
aa
aa
aa
@@ -22235,6 +19684,29 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
@@ -22245,7 +19717,35 @@ aa
aa
aa
aa
+LV
+LW
+zi
+zi
+zi
+ik
+ik
+ik
+ik
+LW
+LV
aa
+"}
+(11,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -22339,6 +19839,38 @@ aa
aa
aa
aa
+hV
+hV
+BH
+BH
+BH
+BH
+YM
+yR
+yR
+yR
+Fz
+BH
+lP
+yL
+yL
+yL
+Pi
+BH
+yL
+yL
+yL
+BH
+BP
+hP
+Ea
+BH
+BH
+Gj
+BH
+BH
+BH
+hV
aa
aa
aa
@@ -22348,11 +19880,49 @@ aa
aa
aa
aa
+MT
+MT
+MT
+MT
+MT
+MT
+nD
+nD
+nD
+MT
+MT
+MT
+MT
aa
aa
aa
aa
aa
+km
+rk
+Bl
+Rb
+tG
+Hz
+YV
+Ag
+rk
+ps
+Ao
+ck
+DW
+AY
+yZ
+sW
+uX
+DW
+DW
+DW
+EB
+km
+km
+km
+km
aa
aa
aa
@@ -22371,22 +19941,29 @@ aa
aa
aa
aa
-Yn
-Vk
-Vk
-Vk
-Vk
-Vk
-Oq
-Yn
-Yn
-Co
-Co
-Co
-Co
-Co
-VP
-Yn
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
@@ -22397,7 +19974,35 @@ aa
aa
aa
aa
+LV
+LW
+ik
+ik
+ik
+ik
+ik
+ik
+ik
+LW
+LV
aa
+"}
+(12,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -22416,8 +20021,6 @@ aa
aa
aa
aa
-"}
-(41,1,1) = {"
aa
aa
aa
@@ -22493,6 +20096,38 @@ aa
aa
aa
aa
+hV
+BH
+BH
+qt
+Hs
+BH
+BH
+BH
+zw
+BH
+BH
+BH
+XO
+yL
+yL
+yL
+xU
+BH
+yL
+Oe
+yL
+BH
+BH
+BH
+BH
+BH
+yL
+yL
+gJ
+hb
+BH
+hV
aa
aa
aa
@@ -22501,9 +20136,50 @@ aa
aa
aa
aa
+MT
+MT
+ir
+ir
+ir
+MT
+nD
+nD
+DT
+nD
+nD
+nD
+nD
+MT
+MT
+MT
aa
aa
aa
+km
+rk
+tF
+aB
+aB
+aB
+aB
+mn
+vi
+fd
+Hf
+oc
+Qb
+lY
+Uw
+CV
+CV
+pm
+DW
+EK
+RS
+PB
+PB
+Ty
+km
aa
aa
aa
@@ -22522,6 +20198,29 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
@@ -22532,7 +20231,35 @@ aa
aa
aa
aa
+LV
+LW
+zi
+zi
+zi
+ik
+zi
+zi
+zi
+LW
+LV
aa
+"}
+(13,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -22626,31 +20353,90 @@ aa
aa
aa
aa
+hV
+ju
+yL
+yL
+yL
+ju
+yL
+yL
+yL
+Ia
+WK
+BH
+yL
+yL
+yL
+yL
+yL
+ju
+yL
+yL
+yL
+BH
+Su
+eu
+oR
+BH
+DS
+yL
+yL
+hb
+GF
+AE
aa
aa
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
-Yn
aa
aa
aa
aa
aa
+MT
+MT
+ir
+ir
+jh
+ir
+ir
+nD
+Rn
+fo
+fo
+Mq
+vo
+nD
+nD
+nD
+MT
+MT
aa
aa
+km
+rk
+mg
+RY
+Qw
+RY
+RY
+RY
+BS
+fd
+Hf
+oc
+DW
+CE
+Fx
+Ys
+UU
+If
+DW
+le
+RS
+PB
+PB
+ox
+km
aa
aa
aa
@@ -22669,19 +20455,68 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
aa
-"}
-(42,1,1) = {"
aa
aa
aa
aa
aa
aa
+LV
+LW
+zi
+zi
+zi
+ik
+zi
+zi
+zi
+LW
+LV
aa
+"}
+(14,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -22730,7 +20565,6 @@ aa
aa
aa
aa
-gt
aa
aa
aa
@@ -22776,12 +20610,90 @@ aa
aa
aa
aa
+hV
+ju
+MV
+yL
+yL
+qr
+yL
+yL
+yL
+yL
+yL
+em
+yL
+yL
+cD
+Ye
+yL
+Xa
+yL
+Oe
+yL
+OS
+Oe
+nY
+Oe
+ju
+yD
+yL
+yL
+hb
+GF
+AE
aa
aa
aa
aa
aa
aa
+MT
+MT
+ir
+ir
+jh
+jh
+jh
+ir
+ir
+fo
+sY
+DT
+Cv
+iQ
+iQ
+iM
+nD
+nD
+MT
+MT
+MT
+MT
+rk
+rk
+Yf
+Wq
+YO
+Tt
+yO
+vi
+fd
+Hf
+fc
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+zb
+cf
+VA
+km
aa
aa
aa
@@ -22800,6 +20712,29 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+pW
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
@@ -22810,7 +20745,35 @@ aa
aa
aa
aa
+LV
+LW
+zi
+zi
+zi
+ik
+zi
+zi
+zi
+LW
+LV
aa
+"}
+(15,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -22904,12 +20867,90 @@ aa
aa
aa
aa
+hV
+ju
+yL
+yL
+yL
+ju
+yL
+yL
+yL
+Gd
+yF
+BH
+yL
+yL
+yL
+yL
+yL
+ju
+yL
+yL
+yL
+BH
+Sw
+dG
+RC
+BH
+ti
+yL
+yL
+hb
+GF
+AE
aa
aa
aa
aa
aa
aa
+MT
+ir
+ir
+jh
+jh
+jh
+jh
+jh
+ir
+ir
+fo
+fo
+Mq
+iQ
+iQ
+iQ
+vo
+nD
+nD
+nD
+nD
+nD
+nD
+rk
+rk
+rk
+rk
+rk
+rk
+rk
+Fr
+Hf
+QO
+Kz
+QR
+hW
+Yp
+KL
+Py
+Dy
+Kz
+Kz
+Kz
+Kz
+Kz
+km
aa
aa
aa
@@ -22928,10 +20969,31 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
-"}
-(43,1,1) = {"
aa
aa
aa
@@ -22940,7 +21002,35 @@ aa
aa
aa
aa
+LV
+LW
+LW
+LW
+LW
+LW
+LW
+LW
+LW
+LW
+LV
aa
+"}
+(16,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -23034,12 +21124,90 @@ aa
aa
aa
aa
+hV
+BH
+BH
+Vt
+yI
+BH
+BH
+BH
+kU
+BH
+BH
+BH
+sR
+yL
+yL
+yL
+xU
+BH
+yL
+Oe
+yL
+BH
+BH
+BH
+BH
+BH
+Ze
+yL
+gJ
+hb
+BH
+hV
aa
aa
aa
aa
aa
aa
+MT
+ir
+jh
+jh
+jh
+jh
+jh
+jh
+jh
+ir
+ir
+fo
+iU
+iQ
+iQ
+RI
+iQ
+iQ
+ks
+DT
+fo
+ks
+cW
+TT
+Ru
+pn
+Zh
+Kv
+SA
+Ub
+fd
+Hf
+oc
+Zy
+HE
+Ue
+Sn
+QF
+Dv
+Rl
+dN
+ZF
+ER
+Oa
+Kz
+km
aa
aa
aa
@@ -23058,6 +21226,29 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
@@ -23068,7 +21259,35 @@ aa
aa
aa
aa
+LV
+LV
+LV
+LV
+LV
+LV
+LV
+LV
+LV
+LV
+LV
aa
+"}
+(17,1,1) = {"
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
+fX
aa
aa
aa
@@ -23162,12 +21381,90 @@ aa
aa
aa
aa
+hV
+hV
+BH
+BH
+BH
+BH
+Oe
+Or
+Oe
+BQ
+bT
+BH
+ML
+Nk
+We
+yL
+yL
+BH
+yL
+yL
+yL
+BH
+QT
+AU
+EF
+BH
+BH
+ju
+BH
+BH
+BH
+hV
aa
aa
aa
aa
aa
aa
+MT
+ir
+ir
+ir
+ir
+XM
+ir
+jh
+jh
+jh
+ir
+fo
+Mq
+iQ
+iQ
+rT
+cW
+iQ
+fo
+BN
+fo
+BN
+wn
+TT
+Jr
+eN
+Cz
+hs
+oc
+sy
+fd
+Hf
+oc
+BO
+Jc
+Jc
+Jc
+Jc
+tN
+mK
+lv
+Kz
+Hv
+kK
+Kz
+km
aa
aa
aa
@@ -23186,9 +21483,30 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
-"}
-(44,1,1) = {"
aa
aa
aa
@@ -23201,6 +21519,7 @@ aa
aa
aa
aa
+fR
aa
aa
aa
@@ -23209,6 +21528,8 @@ aa
aa
aa
aa
+"}
+(18,1,1) = {"
aa
aa
aa
@@ -23264,6 +21585,7 @@ aa
aa
aa
aa
+Fi
aa
aa
aa
@@ -23316,12 +21638,90 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+BH
+AW
+kT
+oQ
+Oe
+vb
+BH
+BH
+ju
+ju
+ju
+BH
+BH
+uB
+Oe
+yL
+YP
+jH
+jH
+lW
+BH
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
aa
aa
aa
+MT
+nD
+ir
+ir
+Rh
+GH
+ir
+ir
+XM
+ir
+ir
+Ii
+Mq
+iQ
+iQ
+iQ
+RI
+BN
+fo
+cX
+cX
+fo
+BN
+TT
+xY
+Ax
+vX
+zd
+xm
+Ub
+fd
+Hf
+oc
+Zy
+CK
+Pd
+CC
+Pq
+ke
+fF
+bP
+ZF
+CY
+Oa
+Kz
+km
aa
aa
aa
@@ -23340,6 +21740,29 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
@@ -23362,6 +21785,8 @@ aa
aa
aa
aa
+"}
+(19,1,1) = {"
aa
aa
aa
@@ -23444,8 +21869,6 @@ aa
aa
aa
aa
-"}
-(45,1,1) = {"
aa
aa
aa
@@ -23472,11 +21895,90 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+Ua
+Oe
+Or
+Oe
+ju
+OU
+Ms
+gC
+gb
+Ms
+ju
+yL
+yL
+yL
+BH
+Ee
+yW
+bu
+BH
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
aa
aa
+MT
+nD
+iQ
+vo
+ir
+Xv
+eZ
+ob
+ir
+ga
+sg
+ir
+Bv
+Mq
+iQ
+iQ
+iQ
+fo
+UX
+fo
+fo
+BN
+TT
+TT
+TT
+TT
+TT
+TT
+Vq
+Vq
+Vq
+Oi
+uv
+cA
+Kz
+jO
+Gy
+nZ
+jO
+Jt
+IQ
+Cb
+tj
+As
+As
+Kz
+km
aa
aa
aa
@@ -23495,11 +21997,53 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
aa
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
aa
+"}
+(20,1,1) = {"
aa
aa
aa
@@ -23608,10 +22152,90 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+AW
+vn
+oQ
+ju
+Nh
+Es
+Nh
+Bx
+Nh
+ju
+yL
+Oe
+yL
+BH
+BH
+BH
+BH
+BH
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
aa
+MT
+nD
+iQ
+vo
+iQ
+ir
+bg
+Wd
+ir
+ir
+XM
+ir
+ir
+Bv
+Mq
+iQ
+iQ
+RI
+fo
+fo
+BN
+BN
+Ub
+Ub
+TT
+Hn
+vc
+ZU
+dr
+Vq
+mF
+Vq
+TT
+qB
+TT
+Kz
+AQ
+ru
+ld
+yT
+qc
+Iw
+Cw
+Kz
+Cp
+Cp
+Kz
+km
aa
aa
aa
@@ -23630,11 +22254,53 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(21,1,1) = {"
aa
aa
aa
@@ -23701,8 +22367,6 @@ aa
aa
aa
aa
-"}
-(46,1,1) = {"
aa
aa
aa
@@ -23745,9 +22409,90 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+Ua
+Oe
+ju
+Mn
+yB
+Ms
+Es
+Ms
+ju
+yL
+yL
+BH
+BH
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
+MT
+nD
+iQ
+iQ
+iM
+iQ
+ir
+tV
+tV
+ir
+gA
+gA
+gA
+gA
+GG
+gD
+iQ
+iQ
+DT
+fo
+fo
+UX
+Ub
+Ub
+PU
+TT
+Sm
+Yv
+Yv
+Yv
+gw
+Bj
+Vq
+HC
+AZ
+RR
+Kz
+uY
+hU
+iw
+QQ
+HF
+Vg
+sX
+Kz
+gP
+gP
+Kz
+km
aa
aa
aa
@@ -23766,11 +22511,53 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(22,1,1) = {"
aa
aa
aa
@@ -23879,9 +22666,90 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+BH
+BH
+Ms
+Es
+Nh
+kZ
+SU
+BH
+ju
+ju
+BH
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
aa
+MT
+nD
+Eg
+FR
+Eg
+Eg
+ir
+Sp
+XT
+ir
+Sp
+Sp
+Zj
+Sp
+Sp
+UZ
+iQ
+iQ
+iQ
+fo
+hu
+fo
+Ub
+tU
+DD
+BT
+Yv
+Yv
+Yv
+BZ
+Vq
+sL
+Vq
+Ww
+AZ
+Bo
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+Kz
+rs
+rs
+Kz
+km
aa
aa
aa
@@ -23900,11 +22768,53 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(23,1,1) = {"
aa
aa
aa
@@ -23914,13 +22824,6 @@ aa
aa
aa
aa
-KH
-Lt
-Lt
-Lt
-Lt
-Lt
-Lt
aa
aa
aa
@@ -23958,8 +22861,6 @@ aa
aa
aa
aa
-"}
-(47,1,1) = {"
aa
aa
aa
@@ -24022,8 +22923,90 @@ aa
aa
aa
aa
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+BH
+BH
+BH
+BH
+BH
+BH
+BH
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
+hV
aa
aa
+MT
+nD
+fo
+iM
+vo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+UX
+BN
+DT
+Ub
+JO
+DD
+TT
+NM
+XH
+Yv
+Fs
+Vq
+Dd
+Vq
+Ul
+AZ
+rU
+TT
+QU
+Sy
+Ai
+Hj
+xX
+Dm
+nL
+Kz
+Kz
+Kz
+Kz
+km
aa
aa
aa
@@ -24042,11 +23025,53 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Di
aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(24,1,1) = {"
aa
aa
aa
@@ -24170,53 +23195,6 @@ aa
aa
aa
aa
-KH
-Lt
-KK
-wk
-Qt
-Lk
-cP
-MM
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(48,1,1) = {"
aa
aa
aa
@@ -24236,6 +23214,56 @@ aa
aa
aa
aa
+MT
+nD
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+Ub
+Ub
+DD
+DD
+bk
+fN
+SN
+KA
+ne
+Vq
+rc
+Vq
+TT
+PQ
+TT
+TT
+QU
+Bb
+VB
+eM
+eM
+KD
+KD
+TT
+km
+km
+km
+km
aa
aa
aa
@@ -24254,11 +23282,53 @@ aa
aa
aa
aa
+Di
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+Qe
+pu
+Di
aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(25,1,1) = {"
aa
aa
aa
@@ -24363,6 +23433,94 @@ aa
aa
aa
aa
+iz
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+RI
+fo
+UX
+Ub
+At
+DD
+tJ
+TT
+Qg
+tM
+tM
+VG
+Vq
+Vq
+Vq
+rp
+dj
+zj
+TT
+TT
+TT
+sl
+TT
+TT
+TT
+TT
+TT
+km
+km
+km
+km
aa
aa
aa
@@ -24381,11 +23539,53 @@ aa
aa
aa
aa
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
+Di
aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(26,1,1) = {"
aa
aa
aa
@@ -24427,14 +23627,6 @@ aa
aa
aa
aa
-Lt
-tA
-wX
-HG
-HG
-Lk
-cP
-KQ
aa
aa
aa
@@ -24472,8 +23664,6 @@ aa
aa
aa
aa
-"}
-(49,1,1) = {"
aa
aa
aa
@@ -24500,6 +23690,94 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+BN
+fo
+Ub
+dF
+DD
+DD
+ky
+WO
+WO
+WO
+WO
+bJ
+xy
+wi
+Qc
+Qc
+QG
+ZK
+TT
+Rg
+jB
+hS
+Qh
+Bw
+vf
+Ub
+SH
+NW
+km
+km
aa
aa
aa
@@ -24545,7 +23823,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(27,1,1) = {"
aa
aa
aa
@@ -24650,6 +23947,94 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+UX
+fo
+Ub
+TL
+DD
+DD
+PL
+kD
+dj
+dj
+dj
+gp
+dj
+MS
+Iq
+cp
+Qc
+Hh
+fk
+bD
+bD
+nz
+qj
+Yv
+Yv
+Ub
+Tl
+SH
+fO
+km
aa
aa
aa
@@ -24668,6 +24053,22 @@ aa
aa
aa
aa
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
aa
aa
aa
@@ -24679,19 +24080,30 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+jA
+jA
+jA
+jA
+jA
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(28,1,1) = {"
aa
aa
aa
aa
-KH
-Lt
-Lt
-LJ
-fW
-SC
-Lt
-Lt
aa
aa
aa
@@ -24729,8 +24141,6 @@ aa
aa
aa
aa
-"}
-(50,1,1) = {"
aa
aa
aa
@@ -24794,6 +24204,94 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+DT
+BN
+Ub
+dF
+DD
+DD
+ky
+qU
+qU
+qU
+qU
+bJ
+dj
+MS
+MS
+MS
+Np
+fL
+TT
+lG
+Bs
+kV
+Bs
+sn
+UD
+Ub
+CB
+CB
+WD
+km
aa
aa
aa
@@ -24812,6 +24310,22 @@ aa
aa
aa
aa
+Yn
+KF
+KF
+KF
+KF
+KF
+SS
+Yn
+Yn
+EZ
+EZ
+EZ
+EZ
+EZ
+QM
+Yn
aa
aa
aa
@@ -24823,7 +24337,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+jA
+lS
+lS
+lS
+jA
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(29,1,1) = {"
aa
aa
aa
@@ -24928,6 +24461,94 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+sY
+Ub
+Ub
+bW
+kE
+TT
+wU
+sp
+si
+Ov
+TT
+iL
+bh
+ZK
+ZK
+BM
+BM
+TT
+TT
+er
+TT
+Oo
+TT
+TT
+TT
+NZ
+CB
+EY
+km
aa
aa
aa
@@ -24943,14 +24564,25 @@ aa
aa
aa
aa
-Lt
-Lt
-qp
-Lt
-Lt
aa
aa
aa
+Yn
+AH
+AH
+AH
+AH
+OP
+PK
+Yn
+Yn
+Vn
+PW
+Vn
+PW
+Vn
+zZ
+Yn
aa
aa
aa
@@ -24962,7 +24594,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+jA
+lS
+lS
+lS
+jA
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(30,1,1) = {"
aa
aa
aa
@@ -24986,8 +24637,6 @@ aa
aa
aa
aa
-"}
-(51,1,1) = {"
aa
aa
aa
@@ -25069,6 +24718,94 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+BN
+fo
+Ub
+bK
+Mr
+TT
+gm
+ag
+Ft
+De
+TT
+Xm
+MS
+MS
+Bn
+TT
+To
+TT
+pM
+Vd
+Vi
+DH
+pM
+TT
+Tl
+EY
+WD
+CB
+km
aa
aa
aa
@@ -25087,6 +24824,22 @@ aa
aa
aa
aa
+Yn
+OP
+AH
+AH
+AH
+OP
+PK
+Yn
+Yn
+Vn
+PW
+Vn
+PW
+Vn
+zZ
+Yn
aa
aa
aa
@@ -25098,7 +24851,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+jA
+lS
+lS
+lS
+jA
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(31,1,1) = {"
aa
aa
aa
@@ -25200,19 +24972,97 @@ aa
aa
aa
aa
-fT
-Lo
-Lf
-Sd
-pV
aa
aa
aa
-KH
-Lt
-Lt
-Lt
-KH
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+UX
+Ub
+og
+lf
+TT
+OH
+BU
+xr
+zc
+TT
+OI
+MS
+MS
+QG
+Ra
+Ot
+TT
+pK
+el
+Vi
+uo
+bG
+TT
+CB
+NZ
+XJ
+Tl
+km
aa
aa
aa
@@ -25231,6 +25081,22 @@ aa
aa
aa
aa
+Yn
+OP
+OP
+OP
+OP
+OP
+PK
+Yn
+Yn
+Vn
+PW
+Vn
+PW
+Vn
+zZ
+Yn
aa
aa
aa
@@ -25242,25 +25108,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+jA
+jA
+jA
+jA
+jA
+hH
+hH
+hH
+hH
+hH
+jA
aa
"}
-(52,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+(32,1,1) = {"
aa
aa
aa
@@ -25365,6 +25232,94 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+BN
+fo
+BN
+Ub
+Ub
+UO
+TT
+sf
+fs
+So
+ql
+TT
+Dx
+MS
+MS
+nS
+TT
+rN
+TT
+jz
+ef
+Vi
+ye
+jz
+TT
+Nu
+CB
+Tl
+SH
+km
aa
aa
aa
@@ -25383,6 +25338,22 @@ aa
aa
aa
aa
+Yn
+AH
+AH
+AH
+AH
+OP
+PK
+Yn
+Yn
+Vn
+Vn
+Vn
+Vn
+Vn
+zZ
+Yn
aa
aa
aa
@@ -25394,7 +25365,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(33,1,1) = {"
aa
aa
aa
@@ -25457,20 +25447,8 @@ aa
aa
aa
aa
-Lt
-Lt
-qp
-Lt
-Lt
aa
aa
-KH
-Lt
-cl
-HR
-Gi
-Lt
-KH
aa
aa
aa
@@ -25500,8 +25478,6 @@ aa
aa
aa
aa
-"}
-(53,1,1) = {"
aa
aa
aa
@@ -25513,6 +25489,95 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+UX
+hu
+fo
+Ub
+Ub
+TT
+Ub
+Ub
+Ub
+Ub
+TT
+Um
+jF
+jF
+BM
+TT
+TT
+TT
+Ub
+Ub
+TT
+Ub
+Ub
+TT
+TT
+Tl
+Tl
+Tl
+km
+km
aa
aa
aa
@@ -25530,6 +25595,22 @@ aa
aa
aa
aa
+Yn
+XD
+XD
+XD
+XD
+XD
+Xs
+Yn
+Yn
+Tz
+Tz
+Tz
+Tz
+Tz
+zE
+Yn
aa
aa
aa
@@ -25541,7 +25622,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(34,1,1) = {"
aa
aa
aa
@@ -25646,6 +25746,98 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+BN
+fo
+DT
+Ej
+TT
+TT
+fo
+UX
+fo
+lb
+Ub
+Um
+ul
+ul
+BM
+Ub
+EX
+TT
+rA
+rA
+rA
+rA
+rA
+TT
+TT
+Tl
+Tl
+Tl
+Vz
+km
+km
+km
+km
aa
aa
aa
@@ -25660,6 +25852,22 @@ aa
aa
aa
aa
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
aa
aa
aa
@@ -25671,7 +25879,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(35,1,1) = {"
aa
aa
aa
@@ -25713,26 +25940,8 @@ aa
aa
aa
aa
-KH
-Lt
-aZ
-Xj
-cr
-Lt
aa
aa
-Lt
-Vh
-LI
-CH
-CH
-PJ
-Lt
-Lt
-Lt
-Lt
-Lt
-KH
aa
aa
aa
@@ -25757,8 +25966,6 @@ aa
aa
aa
aa
-"}
-(54,1,1) = {"
aa
aa
aa
@@ -25796,6 +26003,99 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+sY
+fo
+Ej
+fo
+BN
+fo
+BN
+hu
+fo
+Ub
+Jx
+ul
+ul
+tg
+Ub
+EX
+NZ
+fO
+Tl
+ry
+Tl
+EY
+CB
+Tl
+Tl
+Tl
+Tl
+dp
+Tl
+Tl
+Tl
+km
+km
aa
aa
aa
@@ -25809,6 +26109,22 @@ aa
aa
aa
aa
+Yn
+zM
+zM
+zM
+zM
+zM
+zs
+Yn
+Yn
+Pv
+Pv
+Pv
+Pv
+Pv
+ZQ
+Yn
aa
aa
aa
@@ -25820,7 +26136,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(36,1,1) = {"
aa
aa
aa
@@ -25925,6 +26260,99 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+BN
+fo
+BN
+Ej
+fo
+fo
+lb
+fo
+fo
+UX
+Ub
+Jx
+ul
+ul
+tg
+Ub
+EX
+CB
+WD
+NZ
+fO
+ry
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+Vz
+Tl
+Tl
+Tl
+Tl
+km
aa
aa
aa
@@ -25938,6 +26366,22 @@ aa
aa
aa
aa
+Yn
+Se
+Si
+Se
+Se
+Se
+Tc
+Yn
+Yn
+Pm
+Pm
+Pm
+Xh
+Xh
+Wt
+Yn
aa
aa
aa
@@ -25949,7 +26393,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(37,1,1) = {"
aa
aa
aa
@@ -25970,42 +26433,9 @@ aa
aa
aa
aa
-Lt
-Xp
-lg
-KZ
-aL
-Lt
-Lt
-aa
-LH
-LN
-OW
-yX
-yX
-Nm
-Lt
-ey
-LG
-pH
-gj
-Lt
-KH
-aa
-ut
-aa
-aa
-aa
-LM
-aa
-aa
-aa
-Pw
aa
aa
aa
-pJ
-aa
aa
aa
aa
@@ -26014,8 +26444,6 @@ aa
aa
aa
aa
-"}
-(55,1,1) = {"
aa
aa
aa
@@ -26089,6 +26517,103 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+Ej
+Ej
+fo
+fo
+BN
+fo
+fo
+Ub
+Um
+fK
+no
+BM
+Ub
+EX
+Tl
+SH
+CB
+Tl
+Tl
+lz
+Tl
+Tl
+lz
+Tl
+Tl
+jV
+Tl
+Tl
+Tl
+Tl
+km
+km
+km
+km
+km
aa
aa
aa
@@ -26098,6 +26623,22 @@ aa
aa
aa
aa
+Yn
+Se
+Si
+Se
+Si
+Se
+Tc
+Yn
+Yn
+Xh
+Xh
+Pm
+Xh
+Xh
+Wt
+Yn
aa
aa
aa
@@ -26109,7 +26650,26 @@ aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
+"}
+(38,1,1) = {"
aa
aa
aa
@@ -26214,6 +26774,104 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+dB
+iQ
+fo
+fo
+fo
+BN
+Ub
+Um
+Jf
+Qu
+BM
+Ub
+EX
+CB
+Tl
+Tl
+lz
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+Vz
+Tl
+Tl
+Tl
+Tl
+km
+km
+Ur
+Tl
+km
+km
aa
aa
aa
@@ -26222,57 +26880,53 @@ aa
aa
aa
aa
+Yn
+Se
+Si
+Se
+Si
+Se
+Tc
+Yn
+Yn
+Xh
+Xh
+Pm
+Xh
+Xh
+Wt
+Yn
aa
aa
aa
aa
aa
-Lw
-QB
-ec
-Ae
-HZ
-QD
-Lt
-Lt
-Lt
-LO
-Zq
-Yx
-AA
-Da
-Lt
-iI
-LF
-BR
-MC
-EN
-Lt
-Lt
-LC
-Lt
-Lt
-Lt
-LC
-Lt
-Lt
-Lt
-LC
-Lt
-Lt
-Lt
-LC
-Lt
-KH
aa
aa
aa
aa
aa
aa
+jA
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+hH
+jA
aa
"}
-(56,1,1) = {"
+(39,1,1) = {"
aa
aa
aa
@@ -26377,6 +27031,104 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+fo
+fo
+fo
+Ub
+Jx
+ul
+ul
+tg
+Ub
+EX
+Tl
+Tl
+Tl
+Tl
+wD
+TT
+kd
+kd
+kd
+wD
+kd
+TT
+Du
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+km
aa
aa
aa
@@ -26385,6 +27137,22 @@ aa
aa
aa
aa
+Yn
+Se
+Se
+Se
+Si
+Se
+Tc
+Yn
+Yn
+Pm
+Pm
+Pm
+Pm
+Pm
+Wt
+Yn
aa
aa
aa
@@ -26396,7 +27164,26 @@ aa
aa
aa
aa
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
+jA
aa
+"}
+(40,1,1) = {"
aa
aa
aa
@@ -26484,57 +27271,6 @@ aa
aa
aa
aa
-Lw
-Yi
-fV
-YW
-vJ
-aI
-Lt
-pZ
-Lt
-mB
-Lj
-fI
-vq
-OF
-Lw
-wP
-ud
-Iv
-NI
-NI
-Lw
-KP
-JE
-Vv
-of
-LD
-KV
-EL
-Ew
-Lu
-KV
-LD
-TM
-LD
-JE
-Tu
-Lt
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(57,1,1) = {"
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -26552,6 +27288,104 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+ks
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+fo
+fo
+fo
+Ub
+Jx
+ul
+ul
+tg
+Ub
+EX
+Tl
+Tl
+Tl
+Tl
+Nv
+Ce
+kj
+kj
+kj
+kj
+kj
+Ce
+xO
+Du
+Tl
+Tl
+km
+Tl
+Tl
+Tl
+Au
+km
aa
aa
aa
@@ -26560,6 +27394,22 @@ aa
aa
aa
aa
+Yn
+Vk
+Vk
+Vk
+Vk
+Vk
+Oq
+Yn
+Yn
+Co
+Co
+Co
+Co
+Co
+VP
+Yn
aa
aa
aa
@@ -26589,6 +27439,8 @@ aa
aa
aa
aa
+"}
+(41,1,1) = {"
aa
aa
aa
@@ -26693,6 +27545,104 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+fo
+fo
+fo
+fo
+Ub
+Um
+pY
+UM
+BM
+Ub
+EX
+Tl
+Tl
+lz
+wD
+BD
+Ce
+kj
+kj
+kj
+kj
+kj
+Ce
+kj
+aX
+Tl
+Tl
+km
+km
+Tl
+Au
+sK
+km
aa
aa
aa
@@ -26701,6 +27651,22 @@ aa
aa
aa
aa
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
+Yn
aa
aa
aa
@@ -26730,6 +27696,8 @@ aa
aa
aa
aa
+"}
+(42,1,1) = {"
aa
aa
aa
@@ -26741,43 +27709,6 @@ aa
aa
aa
aa
-Lw
-SX
-jC
-Hl
-Hl
-YW
-gd
-kr
-dK
-LQ
-LQ
-cj
-cj
-wT
-Lm
-HL
-HJ
-HJ
-HJ
-HJ
-ci
-QH
-WE
-WE
-Li
-Lb
-Lb
-WE
-WE
-Lb
-Li
-Li
-Lb
-bN
-bN
-bN
-Lt
aa
aa
aa
@@ -26785,8 +27716,6 @@ aa
aa
aa
aa
-"}
-(58,1,1) = {"
aa
aa
aa
@@ -26824,6 +27753,7 @@ aa
aa
aa
aa
+gt
aa
aa
aa
@@ -26872,6 +27802,104 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+vo
+RI
+iQ
+iQ
+iQ
+iQ
+fo
+fo
+fo
+Ej
+fo
+fo
+Ub
+Um
+fK
+no
+BM
+Ub
+EX
+ry
+Tl
+Tl
+Lr
+kj
+Ce
+Sb
+sN
+sN
+sN
+pO
+Ce
+kj
+kP
+Tl
+CB
+km
+Tl
+Tl
+yN
+Ur
+km
aa
aa
aa
@@ -26925,6 +27953,8 @@ aa
aa
aa
aa
+"}
+(43,1,1) = {"
aa
aa
aa
@@ -26998,43 +28028,6 @@ aa
aa
aa
aa
-Lw
-Rp
-bb
-MH
-fV
-sm
-Lt
-OG
-Lt
-LR
-Tm
-Tm
-Ff
-yH
-Lw
-AD
-oY
-dn
-dn
-eR
-Lw
-KO
-LA
-nb
-sB
-zx
-ZA
-Lp
-sB
-DA
-LA
-Lp
-FE
-Lp
-LB
-tm
-Lt
aa
aa
aa
@@ -27042,8 +28035,6 @@ aa
aa
aa
aa
-"}
-(59,1,1) = {"
aa
aa
aa
@@ -27068,6 +28059,104 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+RI
+iQ
+iM
+RI
+iQ
+fo
+DT
+BN
+Ej
+Ej
+fo
+fo
+Ub
+Jx
+ul
+ul
+tg
+Ub
+EX
+fO
+Tl
+Tl
+Nv
+kj
+Df
+Sj
+UA
+UA
+UA
+zl
+mb
+kj
+kj
+tQ
+Tl
+km
+PD
+Tl
+km
+km
+km
aa
aa
aa
@@ -27121,6 +28210,8 @@ aa
aa
aa
aa
+"}
+(44,1,1) = {"
aa
aa
aa
@@ -27225,6 +28316,103 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+RI
+iQ
+sY
+fo
+fo
+BN
+fo
+Ej
+BN
+fo
+fA
+Ub
+Jx
+ul
+ul
+tg
+Ub
+EX
+WD
+Tl
+Tl
+RP
+sO
+Sj
+UA
+UA
+UA
+UA
+UA
+zl
+re
+kj
+aX
+WD
+km
+km
+Tl
+Tl
+km
aa
aa
aa
@@ -27255,43 +28443,6 @@ aa
aa
aa
aa
-Lw
-CT
-sw
-dv
-Lz
-QD
-Lt
-Lt
-Lt
-KJ
-Eq
-Ip
-Ip
-JT
-Lt
-Dn
-BR
-LG
-BR
-RT
-Lt
-Lt
-LP
-Lt
-Lt
-Lt
-LP
-Lt
-Lt
-Lt
-LP
-Lt
-Lt
-Lt
-LP
-Lt
-KH
aa
aa
aa
@@ -27299,8 +28450,6 @@ aa
aa
aa
aa
-"}
-(60,1,1) = {"
aa
aa
aa
@@ -27318,6 +28467,8 @@ aa
aa
aa
aa
+"}
+(45,1,1) = {"
aa
aa
aa
@@ -27422,6 +28573,104 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+ks
+iQ
+DT
+fo
+BN
+hu
+fo
+BN
+Ej
+fo
+fo
+lb
+Ub
+Um
+ul
+ul
+BM
+Ub
+EX
+TT
+Tl
+Tl
+Tl
+ht
+UA
+UA
+UA
+UA
+UA
+UA
+UA
+kJ
+kj
+ND
+Tl
+km
+km
+km
+Tl
+km
+km
aa
aa
aa
@@ -27475,6 +28724,8 @@ aa
aa
aa
aa
+"}
+(46,1,1) = {"
aa
aa
aa
@@ -27512,41 +28763,16 @@ aa
aa
aa
aa
-Lt
-sF
-Ln
-YH
-Tb
-Lt
-Lt
-aa
-Lt
-ZG
-AG
-Qd
-Tv
-EH
-Lt
-Ll
-LG
-mU
-RJ
-Lt
-KH
aa
-gi
aa
aa
aa
-cJ
aa
aa
aa
-KS
aa
aa
aa
-zr
aa
aa
aa
@@ -27556,8 +28782,6 @@ aa
aa
aa
aa
-"}
-(61,1,1) = {"
aa
aa
aa
@@ -27606,6 +28830,105 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+TT
+TT
+TT
+TT
+TT
+TT
+fo
+cX
+hu
+BN
+TT
+TT
+iL
+iL
+Nr
+pa
+BM
+TT
+TT
+TT
+eD
+Tl
+Tl
+kF
+mj
+UA
+UA
+UA
+UA
+UA
+UA
+kJ
+kj
+Du
+XJ
+km
+km
+km
+Tl
+Tl
+km
+km
aa
aa
aa
@@ -27614,6 +28937,13 @@ aa
aa
aa
aa
+KH
+Lt
+Lt
+Lt
+Lt
+Lt
+Lt
aa
aa
aa
@@ -27651,6 +28981,8 @@ aa
aa
aa
aa
+"}
+(47,1,1) = {"
aa
aa
aa
@@ -27755,12 +29087,120 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+BW
+qd
+Gk
+TT
+Ub
+Ub
+Ub
+Ub
+TT
+eb
+kx
+bL
+ye
+ye
+DG
+VQ
+VQ
+UQ
+Tl
+Tl
+Tl
+kF
+UA
+UA
+UA
+UA
+UA
+UA
+UA
+kJ
+kj
+oj
+Tl
+Nu
+km
+Tl
+sD
+Tl
+VC
+km
+km
aa
aa
aa
aa
aa
aa
+KH
+Lt
+KK
+wk
+Qt
+Lk
+cP
+MM
aa
aa
aa
@@ -27769,26 +29209,8 @@ aa
aa
aa
aa
-KH
-Lt
-LU
-Ld
-rG
-Lt
aa
aa
-Lt
-EV
-eX
-mf
-rz
-wN
-Lt
-Lt
-Lt
-Lt
-Lt
-KH
aa
aa
aa
@@ -27813,11 +29235,11 @@ aa
aa
aa
aa
-"}
-(62,1,1) = {"
aa
aa
aa
+"}
+(48,1,1) = {"
aa
aa
aa
@@ -27922,12 +29344,120 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+Gk
+Ha
+GE
+Kn
+Kn
+GE
+Ha
+DD
+Cn
+MR
+ye
+rS
+TT
+TT
+TT
+TT
+JP
+Tl
+Tl
+Sr
+sC
+UA
+UA
+UA
+UA
+UA
+dL
+rI
+NZ
+SH
+Tl
+WD
+km
+sD
+xs
+sD
+Tl
+yN
+km
aa
aa
aa
aa
aa
aa
+Lt
+tA
+wX
+HG
+HG
+Lk
+cP
+KQ
aa
aa
aa
@@ -27965,6 +29495,8 @@ aa
aa
aa
aa
+"}
+(49,1,1) = {"
aa
aa
aa
@@ -28027,20 +29559,8 @@ aa
aa
aa
aa
-Lt
-Lt
-ge
-Lt
-Lt
aa
aa
-KH
-Lt
-Cy
-iC
-Po
-Lt
-KH
aa
aa
aa
@@ -28070,8 +29590,6 @@ aa
aa
aa
aa
-"}
-(63,1,1) = {"
aa
aa
aa
@@ -28083,12 +29601,120 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+Gk
+nV
+GE
+Kn
+Kn
+GE
+nV
+DD
+Cn
+MR
+ye
+rJ
+TT
+GM
+GM
+TT
+TT
+XJ
+Tl
+Tl
+th
+sC
+UA
+UA
+UA
+dL
+HV
+NZ
+fO
+WD
+Tl
+EY
+km
+km
+sD
+Tl
+Au
+sK
+km
aa
aa
aa
aa
aa
aa
+KH
+Lt
+Lt
+LJ
+fW
+SC
+Lt
+Lt
aa
aa
aa
@@ -28126,6 +29752,8 @@ aa
aa
aa
aa
+"}
+(50,1,1) = {"
aa
aa
aa
@@ -28230,6 +29858,106 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+zo
+TT
+TT
+Ub
+wg
+Ps
+Ub
+TT
+Ek
+qJ
+ZR
+ye
+ye
+vy
+GM
+GM
+GM
+TT
+km
+WD
+CB
+OE
+hO
+nT
+QZ
+nT
+BG
+OE
+EY
+WD
+fO
+NZ
+km
+km
+km
+km
+km
+km
+km
+km
aa
aa
aa
@@ -28238,6 +29966,11 @@ aa
aa
aa
aa
+Lt
+Lt
+qp
+Lt
+Lt
aa
aa
aa
@@ -28276,6 +30009,8 @@ aa
aa
aa
aa
+"}
+(51,1,1) = {"
aa
aa
aa
@@ -28284,19 +30019,9 @@ aa
aa
aa
aa
-fT
-Lo
-Rk
-Sd
-pV
aa
aa
aa
-KH
-Lt
-Lt
-Lt
-KH
aa
aa
aa
@@ -28327,10 +30052,6 @@ aa
aa
aa
aa
-"}
-(64,1,1) = {"
-aa
-aa
aa
aa
aa
@@ -28394,6 +30115,102 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+Ub
+vV
+bn
+TA
+Yv
+lO
+TT
+jj
+oH
+ZR
+ye
+ye
+vy
+GM
+GM
+GM
+TT
+km
+Tl
+EW
+OE
+WD
+Ub
+ya
+Ub
+CB
+OE
+aQ
+NZ
+km
+km
+km
+km
+km
+km
aa
aa
aa
@@ -28406,9 +30223,19 @@ aa
aa
aa
aa
+fT
+Lo
+Lf
+Sd
+pV
aa
aa
aa
+KH
+Lt
+Lt
+Lt
+KH
aa
aa
aa
@@ -28439,6 +30266,8 @@ aa
aa
aa
aa
+"}
+(52,1,1) = {"
aa
aa
aa
@@ -28541,14 +30370,99 @@ aa
aa
aa
aa
-Lt
-Lt
-ge
-Lt
-Lt
-aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+Yw
+fM
+en
+en
+en
+rO
+Yv
+Yv
+Yv
+Yv
+Yv
+OY
+DD
+Cn
+MR
+ye
+Mw
+TT
+GM
+GM
+TT
+TT
+km
+km
+WD
+OE
+EY
+Ub
+hJ
+Ub
+Nu
+OE
+CB
+EY
+km
aa
aa
aa
@@ -28566,8 +30480,20 @@ aa
aa
aa
aa
+Lt
+Lt
+qp
+Lt
+Lt
aa
aa
+KH
+Lt
+cl
+HR
+Gi
+Lt
+KH
aa
aa
aa
@@ -28584,8 +30510,6 @@ aa
aa
aa
aa
-"}
-(65,1,1) = {"
aa
aa
aa
@@ -28599,6 +30523,8 @@ aa
aa
aa
aa
+"}
+(53,1,1) = {"
aa
aa
aa
@@ -28703,6 +30629,97 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+rO
+dH
+pS
+Yv
+Aq
+iT
+TT
+lx
+kt
+qW
+ye
+rS
+TT
+TT
+TT
+TT
+km
+km
+km
+km
+OE
+CB
+Ub
+ya
+Ub
+Hx
+TT
+Nu
+km
+km
aa
aa
aa
@@ -28719,8 +30736,26 @@ aa
aa
aa
aa
+KH
+Lt
+aZ
+Xj
+cr
+Lt
aa
aa
+Lt
+Vh
+LI
+CH
+CH
+PJ
+Lt
+Lt
+Lt
+Lt
+Lt
+KH
aa
aa
aa
@@ -28745,6 +30780,8 @@ aa
aa
aa
aa
+"}
+(54,1,1) = {"
aa
aa
aa
@@ -28796,14 +30833,6 @@ aa
aa
aa
aa
-KH
-Lt
-Lt
-Te
-DL
-CF
-Lt
-Lt
aa
aa
aa
@@ -28841,8 +30870,6 @@ aa
aa
aa
aa
-"}
-(66,1,1) = {"
aa
aa
aa
@@ -28859,6 +30886,96 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+bs
+en
+zo
+TT
+TT
+TT
+lj
+hl
+dc
+TT
+TT
+Um
+TT
+rE
+rE
+TT
+IY
+LZ
+TT
+TT
+TT
+TT
+TT
+TT
+Ub
+Ub
+ya
+TT
+EY
+CB
+Tl
+km
aa
aa
aa
@@ -28876,17 +30993,41 @@ aa
aa
aa
aa
+Lt
+Xp
+lg
+KZ
+aL
+Lt
+Lt
aa
+LH
+LN
+OW
+yX
+yX
+Nm
+Lt
+ey
+LG
+pH
+gj
+Lt
+KH
aa
+ut
aa
aa
aa
+LM
aa
aa
aa
+Pw
aa
aa
aa
+pJ
aa
aa
aa
@@ -28896,6 +31037,8 @@ aa
aa
aa
aa
+"}
+(55,1,1) = {"
aa
aa
aa
@@ -29000,6 +31143,96 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+jx
+pL
+TT
+TT
+TT
+TT
+TT
+Iz
+Fu
+Ub
+DD
+DD
+ez
+Ta
+Ta
+lr
+uL
+Km
+Pf
+fd
+hJ
+ya
+ya
+ya
+TT
+km
+km
+km
+km
aa
aa
aa
@@ -29017,6 +31250,43 @@ aa
aa
aa
aa
+Lw
+QB
+ec
+Ae
+HZ
+QD
+Lt
+Lt
+Lt
+LO
+Zq
+Yx
+AA
+Da
+Lt
+iI
+LF
+BR
+MC
+EN
+Lt
+Lt
+LC
+Lt
+Lt
+Lt
+LC
+Lt
+Lt
+Lt
+LC
+Lt
+Lt
+Lt
+LC
+Lt
+KH
aa
aa
aa
@@ -29024,6 +31294,8 @@ aa
aa
aa
aa
+"}
+(56,1,1) = {"
aa
aa
aa
@@ -29053,14 +31325,6 @@ aa
aa
aa
aa
-Lt
-fz
-za
-MX
-DL
-ep
-cP
-MM
aa
aa
aa
@@ -29098,11 +31362,6 @@ aa
aa
aa
aa
-"}
-(67,1,1) = {"
-aa
-aa
-aa
aa
aa
aa
@@ -29141,6 +31400,95 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+PI
+ZW
+TT
+je
+jT
+eB
+TT
+uG
+rw
+Ub
+DD
+DD
+lV
+MU
+rx
+kc
+HH
+Km
+TT
+TT
+TT
+TT
+TT
+TT
+TT
+km
+YA
+km
aa
aa
aa
@@ -29159,6 +31507,43 @@ aa
aa
aa
aa
+Lw
+Yi
+fV
+YW
+vJ
+aI
+Lt
+pZ
+Lt
+mB
+Lj
+fI
+vq
+OF
+Lw
+wP
+ud
+Iv
+NI
+NI
+Lw
+KP
+JE
+Vv
+of
+LD
+KV
+EL
+Ew
+Lu
+KV
+LD
+TM
+LD
+JE
+Tu
+Lt
aa
aa
aa
@@ -29166,6 +31551,8 @@ aa
aa
aa
aa
+"}
+(57,1,1) = {"
aa
aa
aa
@@ -29270,6 +31657,95 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+VN
+kz
+TT
+im
+eH
+jE
+TT
+TT
+kA
+iL
+Ym
+DD
+lV
+Yq
+Wm
+IH
+HH
+Km
+Yh
+TT
+km
+km
+km
+km
+km
+km
+YA
+km
aa
aa
aa
@@ -29288,6 +31764,43 @@ aa
aa
aa
aa
+Lw
+SX
+jC
+Hl
+Hl
+YW
+gd
+kr
+dK
+LQ
+LQ
+cj
+cj
+wT
+Lm
+HL
+HJ
+HJ
+HJ
+HJ
+ci
+QH
+WE
+WE
+Li
+Lb
+Lb
+WE
+WE
+Lb
+Li
+Li
+Lb
+bN
+bN
+bN
+Lt
aa
aa
aa
@@ -29295,6 +31808,8 @@ aa
aa
aa
aa
+"}
+(58,1,1) = {"
aa
aa
aa
@@ -29310,14 +31825,6 @@ aa
aa
aa
aa
-KH
-Lt
-cT
-Hb
-OC
-ep
-cP
-KQ
aa
aa
aa
@@ -29355,8 +31862,6 @@ aa
aa
aa
aa
-"}
-(68,1,1) = {"
aa
aa
aa
@@ -29409,6 +31914,95 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+Nw
+Me
+TT
+mT
+eH
+KC
+Ub
+DD
+DD
+Cn
+DD
+DD
+lV
+Dp
+yY
+Qy
+HH
+Km
+DI
+TT
+km
+YA
+YA
+km
+YA
+km
+km
+km
aa
aa
aa
@@ -29427,6 +32021,43 @@ aa
aa
aa
aa
+Lw
+Rp
+bb
+MH
+fV
+sm
+Lt
+OG
+Lt
+LR
+Tm
+Tm
+Ff
+yH
+Lw
+AD
+oY
+dn
+dn
+eR
+Lw
+KO
+LA
+nb
+sB
+zx
+ZA
+Lp
+sB
+DA
+LA
+Lp
+FE
+Lp
+LB
+tm
+Lt
aa
aa
aa
@@ -29434,6 +32065,8 @@ aa
aa
aa
aa
+"}
+(59,1,1) = {"
aa
aa
aa
@@ -29538,6 +32171,94 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+en
+en
+PI
+DD
+TT
+at
+zm
+zm
+pf
+oC
+oC
+Cn
+DD
+DD
+lV
+cZ
+Fk
+CX
+HH
+Km
+Iu
+TT
+km
+km
+km
+km
+km
+km
+km
aa
aa
aa
@@ -29557,24 +32278,43 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-KH
+Lw
+CT
+sw
+dv
+Lz
+QD
+Lt
+Lt
+Lt
+KJ
+Eq
+Ip
+Ip
+JT
Lt
+Dn
+BR
+LG
+BR
+RT
Lt
Lt
+LP
Lt
Lt
Lt
+LP
+Lt
+Lt
+Lt
+LP
+Lt
+Lt
+Lt
+LP
+Lt
+KH
aa
aa
aa
@@ -29582,6 +32322,8 @@ aa
aa
aa
aa
+"}
+(60,1,1) = {"
aa
aa
aa
@@ -29612,9 +32354,6 @@ aa
aa
aa
aa
-"}
-(69,1,1) = {"
-aa
aa
aa
aa
@@ -29689,6 +32428,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fM
+en
+Rw
+Yo
+VN
+fP
+TT
+mT
+Sh
+cO
+Ub
+DD
+DD
+Cn
+DD
+DD
+qS
+MA
+MA
+MA
+Pn
+qP
+ur
+TT
+TT
+km
aa
aa
aa
@@ -29713,17 +32535,41 @@ aa
aa
aa
aa
+Lt
+sF
+Ln
+YH
+Tb
+Lt
+Lt
aa
+Lt
+ZG
+AG
+Qd
+Tv
+EH
+Lt
+Ll
+LG
+mU
+RJ
+Lt
+KH
aa
+gi
aa
aa
aa
+cJ
aa
aa
aa
+KS
aa
aa
aa
+zr
aa
aa
aa
@@ -29733,6 +32579,8 @@ aa
aa
aa
aa
+"}
+(61,1,1) = {"
aa
aa
aa
@@ -29837,6 +32685,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+TT
+TT
+TT
+TT
+TT
+TT
+TT
+TT
+TT
+TT
+TT
+TT
+Ub
+di
+Ub
+DD
+qA
+ia
+RW
+pP
+jD
+Km
+KT
+nx
+TT
+km
aa
aa
aa
@@ -29861,16 +32792,32 @@ aa
aa
aa
aa
+KH
+Lt
+LU
+Ld
+rG
+Lt
aa
aa
+Lt
+EV
+eX
+mf
+rz
+wN
+Lt
+Lt
+Lt
+Lt
+Lt
+KH
aa
aa
aa
aa
aa
aa
-"}
-(70,1,1) = {"
aa
aa
aa
@@ -29889,6 +32836,8 @@ aa
aa
aa
aa
+"}
+(62,1,1) = {"
aa
aa
aa
@@ -29993,6 +32942,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+TT
+TT
+iQ
+if
+iQ
+eL
+TT
+TT
+if
+iQ
+iQ
+Ow
+Ub
+en
+Ub
+kB
+qA
+JZ
+mX
+JZ
+jD
+uK
+TT
+TT
+TT
+km
aa
aa
aa
@@ -30018,8 +33050,20 @@ aa
aa
aa
aa
+Lt
+Lt
+ge
+Lt
+Lt
aa
aa
+KH
+Lt
+Cy
+iC
+Po
+Lt
+KH
aa
aa
aa
@@ -30049,6 +33093,8 @@ aa
aa
aa
aa
+"}
+(63,1,1) = {"
aa
aa
aa
@@ -30126,8 +33172,6 @@ aa
aa
aa
aa
-"}
-(71,1,1) = {"
aa
aa
aa
@@ -30155,6 +33199,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+Ow
+iQ
+ZI
+iQ
+iQ
+Ow
+ZI
+iQ
+iQ
+PA
+iQ
+Ub
+en
+Ub
+TT
+Ub
+Ds
+wl
+Zt
+Ub
+TT
+TT
+km
+km
+km
aa
aa
aa
@@ -30180,9 +33307,19 @@ aa
aa
aa
aa
+fT
+Lo
+Rk
+Sd
+pV
aa
aa
aa
+KH
+Lt
+Lt
+Lt
+KH
aa
aa
aa
@@ -30213,6 +33350,8 @@ aa
aa
aa
aa
+"}
+(64,1,1) = {"
aa
aa
aa
@@ -30317,6 +33456,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+eL
+iQ
+PA
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+if
+Ub
+vU
+Ub
+jN
+Ub
+Ub
+Ub
+Ub
+Ub
+Ow
+nD
+MT
+fo
+MT
aa
aa
aa
@@ -30342,6 +33564,11 @@ aa
aa
aa
aa
+Lt
+Lt
+ge
+Lt
+Lt
aa
aa
aa
@@ -30380,11 +33607,11 @@ aa
aa
aa
aa
+"}
+(65,1,1) = {"
aa
aa
aa
-"}
-(72,1,1) = {"
aa
aa
aa
@@ -30486,6 +33713,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+jN
+iQ
+iQ
+ZI
+iQ
+Pz
+Ow
+iQ
+iQ
+iQ
+Ub
+en
+Ub
+iQ
+ZI
+iQ
+Ow
+iQ
+iQ
+PA
+nD
+MT
+fo
+MT
aa
aa
aa
@@ -30509,6 +33819,14 @@ aa
aa
aa
aa
+KH
+Lt
+Lt
+Te
+DL
+CF
+Lt
+Lt
aa
aa
aa
@@ -30546,6 +33864,8 @@ aa
aa
aa
aa
+"}
+(66,1,1) = {"
aa
aa
aa
@@ -30640,8 +33960,6 @@ aa
aa
aa
aa
-"}
-(73,1,1) = {"
aa
aa
aa
@@ -30652,6 +33970,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+Ow
+iQ
+iQ
+iQ
+iQ
+iQ
+ZI
+Ow
+Ub
+en
+Ub
+Ow
+iQ
+iQ
+iQ
+if
+iQ
+iQ
+nD
+nD
+MT
+MT
aa
aa
aa
@@ -30675,6 +34076,14 @@ aa
aa
aa
aa
+Lt
+fz
+za
+MX
+DL
+ep
+cP
+MM
aa
aa
aa
@@ -30712,6 +34121,8 @@ aa
aa
aa
aa
+"}
+(67,1,1) = {"
aa
aa
aa
@@ -30816,6 +34227,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+Ub
+xM
+Ub
+iQ
+if
+iQ
+iQ
+iQ
+ZI
+iQ
+Ow
+nD
+MT
aa
aa
aa
@@ -30840,6 +34333,14 @@ aa
aa
aa
aa
+KH
+Lt
+cT
+Hb
+OC
+ep
+cP
+KQ
aa
aa
aa
@@ -30877,6 +34378,8 @@ aa
aa
aa
aa
+"}
+(68,1,1) = {"
aa
aa
aa
@@ -30897,8 +34400,6 @@ aa
aa
aa
aa
-"}
-(74,1,1) = {"
aa
aa
aa
@@ -30983,6 +34484,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+aD
+fo
+fo
+fo
+iQ
+ZI
+iQ
+iQ
+Ow
+iQ
+nD
+MT
aa
aa
aa
@@ -31008,6 +34591,13 @@ aa
aa
aa
aa
+KH
+Lt
+Lt
+Lt
+Lt
+Lt
+Lt
aa
aa
aa
@@ -31045,6 +34635,8 @@ aa
aa
aa
aa
+"}
+(69,1,1) = {"
aa
aa
aa
@@ -31149,13 +34741,93 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+Ow
+ZI
+iQ
+if
+iQ
+iQ
+MT
aa
aa
aa
aa
aa
-"}
-(75,1,1) = {"
aa
aa
aa
@@ -31220,6 +34892,8 @@ aa
aa
aa
aa
+"}
+(70,1,1) = {"
aa
aa
aa
@@ -31324,6 +34998,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+MT
aa
aa
aa
@@ -31393,6 +35149,8 @@ aa
aa
aa
aa
+"}
+(71,1,1) = {"
aa
aa
aa
@@ -31411,8 +35169,6 @@ aa
aa
aa
aa
-"}
-(76,1,1) = {"
aa
aa
aa
@@ -31499,6 +35255,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -31568,6 +35406,8 @@ aa
aa
aa
aa
+"}
+(72,1,1) = {"
aa
aa
aa
@@ -31668,12 +35508,92 @@ aa
aa
aa
aa
-"}
-(77,1,1) = {"
aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -31743,6 +35663,8 @@ aa
aa
aa
aa
+"}
+(73,1,1) = {"
aa
aa
aa
@@ -31847,6 +35769,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -31916,6 +35920,8 @@ aa
aa
aa
aa
+"}
+(74,1,1) = {"
aa
aa
aa
@@ -31925,8 +35931,6 @@ aa
aa
aa
aa
-"}
-(78,1,1) = {"
aa
aa
aa
@@ -32022,6 +36026,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -32091,6 +36177,8 @@ aa
aa
aa
aa
+"}
+(75,1,1) = {"
aa
aa
aa
@@ -32182,8 +36270,6 @@ aa
aa
aa
aa
-"}
-(79,1,1) = {"
aa
aa
aa
@@ -32197,6 +36283,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -32266,6 +36434,8 @@ aa
aa
aa
aa
+"}
+(76,1,1) = {"
aa
aa
aa
@@ -32370,6 +36540,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -32440,7 +36692,7 @@ aa
aa
aa
"}
-(80,1,1) = {"
+(77,1,1) = {"
aa
aa
aa
@@ -32545,6 +36797,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -32614,6 +36948,8 @@ aa
aa
aa
aa
+"}
+(78,1,1) = {"
aa
aa
aa
@@ -32696,8 +37032,6 @@ aa
aa
aa
aa
-"}
-(81,1,1) = {"
aa
aa
aa
@@ -32720,6 +37054,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+MT
aa
aa
aa
@@ -32789,6 +37205,8 @@ aa
aa
aa
aa
+"}
+(79,1,1) = {"
aa
aa
aa
@@ -32893,6 +37311,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+MT
aa
aa
aa
@@ -32953,8 +37453,6 @@ aa
aa
aa
aa
-"}
-(82,1,1) = {"
aa
aa
aa
@@ -32964,6 +37462,8 @@ aa
aa
aa
aa
+"}
+(80,1,1) = {"
aa
aa
aa
@@ -33068,6 +37568,88 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+MT
aa
aa
aa
@@ -33137,6 +37719,8 @@ aa
aa
aa
aa
+"}
+(81,1,1) = {"
aa
aa
aa
@@ -33210,8 +37794,6 @@ aa
aa
aa
aa
-"}
-(83,1,1) = {"
aa
aa
aa
@@ -33243,6 +37825,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+FG
+FG
+FG
+iQ
+nD
+MT
+MT
aa
aa
aa
@@ -33311,6 +37976,8 @@ aa
aa
aa
aa
+"}
+(82,1,1) = {"
aa
aa
aa
@@ -33415,6 +38082,89 @@ aa
aa
aa
aa
+MT
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+FG
+iQ
+iQ
+iQ
+nD
+fo
+MT
aa
aa
aa
@@ -33467,8 +38217,6 @@ aa
aa
aa
aa
-"}
-(84,1,1) = {"
aa
aa
aa
@@ -33485,6 +38233,8 @@ aa
aa
aa
aa
+"}
+(83,1,1) = {"
aa
aa
aa
@@ -33589,6 +38339,89 @@ aa
aa
aa
aa
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+nD
+nD
+nD
+MT
+MT
aa
aa
aa
@@ -33657,6 +38490,8 @@ aa
aa
aa
aa
+"}
+(84,1,1) = {"
aa
aa
aa
@@ -33724,8 +38559,6 @@ aa
aa
aa
aa
-"}
-(85,1,1) = {"
aa
aa
aa
@@ -33817,6 +38650,34 @@ aa
aa
aa
aa
+MT
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+FG
+FG
+iQ
+nD
+nD
+MT
+MT
+MT
aa
aa
aa
@@ -33886,6 +38747,8 @@ aa
aa
aa
aa
+"}
+(85,1,1) = {"
aa
aa
aa
@@ -33981,8 +38844,6 @@ aa
aa
aa
aa
-"}
-(86,1,1) = {"
aa
aa
aa
@@ -34046,6 +38907,34 @@ aa
aa
aa
aa
+MT
+fo
+fo
+iQ
+iQ
+FG
+FG
+FG
+FG
+iQ
+iQ
+iQ
+iQ
+FG
+FG
+iQ
+iQ
+FG
+FG
+FG
+FG
+iQ
+iQ
+nD
+fo
+MT
+fo
+MT
aa
aa
aa
@@ -34115,6 +39004,8 @@ aa
aa
aa
aa
+"}
+(86,1,1) = {"
aa
aa
aa
@@ -34238,8 +39129,6 @@ aa
aa
aa
aa
-"}
-(87,1,1) = {"
aa
aa
aa
@@ -34275,6 +39164,34 @@ aa
aa
aa
aa
+MT
+fo
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+nD
+nD
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+nD
+fo
+MT
+fo
+MT
aa
aa
aa
@@ -34344,6 +39261,8 @@ aa
aa
aa
aa
+"}
+(87,1,1) = {"
aa
aa
aa
@@ -34495,8 +39414,6 @@ aa
aa
aa
aa
-"}
-(88,1,1) = {"
aa
aa
aa
@@ -34504,6 +39421,34 @@ aa
aa
aa
aa
+MT
+MT
+fo
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+nD
+nD
+nD
+nD
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+iQ
+nD
+MT
+MT
+MT
+MT
aa
aa
aa
@@ -34573,6 +39518,8 @@ aa
aa
aa
aa
+"}
+(88,1,1) = {"
aa
aa
aa
@@ -34732,6 +39679,33 @@ aa
aa
aa
aa
+MT
+MT
+nD
+nD
+nD
+nD
+iQ
+iQ
+nD
+nD
+MT
+MT
+nD
+nD
+nD
+nD
+iQ
+iQ
+iQ
+iQ
+iQ
+nD
+nD
+fo
+MT
+MT
+MT
aa
aa
aa
@@ -34752,8 +39726,6 @@ aa
aa
aa
aa
-"}
-(89,1,1) = {"
aa
aa
aa
@@ -34803,6 +39775,8 @@ aa
aa
aa
aa
+"}
+(89,1,1) = {"
aa
aa
aa
@@ -34963,8 +39937,32 @@ aa
aa
aa
aa
+MT
+MT
+MT
+MT
+nD
+nD
+nD
+nD
+MT
aa
aa
+MT
+MT
+MT
+nD
+nD
+nD
+nD
+nD
+nD
+nD
+MT
+MT
+fo
+fo
+MT
aa
aa
aa
@@ -35009,8 +40007,6 @@ aa
aa
aa
aa
-"}
-(90,1,1) = {"
aa
aa
aa
@@ -35036,6 +40032,8 @@ aa
aa
aa
aa
+"}
+(90,1,1) = {"
aa
aa
aa
@@ -35199,11 +40197,29 @@ aa
aa
aa
aa
+MT
+MT
+MT
+MT
+MT
+MT
aa
aa
aa
aa
aa
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+fo
+MT
+MT
+MT
aa
aa
aa
@@ -35266,8 +40282,6 @@ aa
aa
aa
aa
-"}
-(91,1,1) = {"
aa
aa
aa
@@ -35275,6 +40289,8 @@ aa
aa
aa
aa
+"}
+(91,1,1) = {"
aa
aa
aa
@@ -35454,6 +40470,13 @@ aa
aa
aa
aa
+MT
+MT
+MT
+MT
+MT
+MT
+MT
aa
aa
aa
@@ -35706,11 +40729,11 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
+MT
+MT
+MT
+MT
+MT
aa
aa
aa
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index a204dcdd0f06..f44a5f5161e9 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -256,11 +256,6 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// Loop.
Master.StartProcessing(0)
- #ifndef SPACEMAN_DMM
- SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
- SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_WIZARDDEN)
- #endif
-
var/time = (REALTIMEOFDAY - start_timeofday) / 10
From 1f20d4babcba75de9fa68bd63d5935510a6a895e Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 20:57:05 -0400
Subject: [PATCH 55/85] Update CentCom.dmm
---
_maps/map_files/generic/CentCom.dmm | 1 -
1 file changed, 1 deletion(-)
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 8201547dc790..c6bd161dc658 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -5310,7 +5310,6 @@
/area/centcom/syndicate_mothership/control)
"qD" = (
/obj/structure/table/reinforced,
-/obj/machinery/infuser,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
"qE" = (
From 9041d1a0027a9fbd54f475a6bd36422be48bbb93 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 21:50:19 -0400
Subject: [PATCH 56/85] portal storm change, antagonist count checker
---
code/modules/events/portal_storm.dm | 1 +
.../code/modules/storytellers/gamemode_subsystem.dm | 10 ++++++++++
2 files changed, 11 insertions(+)
diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm
index 5fc32a413a74..1d8f00fabbb9 100644
--- a/code/modules/events/portal_storm.dm
+++ b/code/modules/events/portal_storm.dm
@@ -3,6 +3,7 @@
typepath = /datum/round_event/portal_storm/syndicate_shocktroop
weight = 2
min_players = 15
+ max_occurences = 5
earliest_start = 30 MINUTES
category = EVENT_CATEGORY_ENTITIES
description = "Syndicate troops pour out of portals."
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index f6eaf7296540..0599b2d9bd0f 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -224,6 +224,10 @@ SUBSYSTEM_DEF(gamemode)
for(var/datum/antagonist/A in GLOB.antagonists)
if(!A.owner)
continue
+ if(A.owner.state = DEAD)
+ continue
+ if(istype(A, /datum/antagonist/hypnotized))
+ continue
if(istype(A, /datum/antagonist/abductee))
continue
total_valid_antags++
@@ -808,6 +812,12 @@ SUBSYSTEM_DEF(gamemode)
for(var/datum/antagonist/A in GLOB.antagonists)
if(!A.owner)
continue
+ if(A.owner.state = DEAD)
+ continue
+ if(istype(A, /datum/antagonist/hypnotized))
+ continue
+ if(istype(A, /datum/antagonist/abductee))
+ continue
total_valid_antags++
var/round_started = SSticker.HasRoundStarted()
From dd54705e8ab6982641992c0d4d604d88a1aebfe2 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 21:50:43 -0400
Subject: [PATCH 57/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 0599b2d9bd0f..fc12ce58f5e9 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -812,7 +812,7 @@ SUBSYSTEM_DEF(gamemode)
for(var/datum/antagonist/A in GLOB.antagonists)
if(!A.owner)
continue
- if(A.owner.state = DEAD)
+ if(A.owner.stat = DEAD)
continue
if(istype(A, /datum/antagonist/hypnotized))
continue
From 3cbc2758c7650bb816788c2f902d9111938324e0 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 21:59:00 -0400
Subject: [PATCH 58/85] converts glob antag check to mob_list special role
check to reduce false fires
---
.../storytellers/gamemode_subsystem.dm | 21 +++++++------------
1 file changed, 7 insertions(+), 14 deletions(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index fc12ce58f5e9..dc1dd42654a0 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -221,17 +221,14 @@ SUBSYSTEM_DEF(gamemode)
/// Whether events can inject more antagonists into the round
/datum/controller/subsystem/gamemode/proc/can_inject_antags()
total_valid_antags = 0
- for(var/datum/antagonist/A in GLOB.antagonists)
- if(!A.owner)
+ for(var/mob/checked_mob in GLOB.mob_list)
+ if(!checked_mob.mind.special_role)
continue
- if(A.owner.state = DEAD)
- continue
- if(istype(A, /datum/antagonist/hypnotized))
- continue
- if(istype(A, /datum/antagonist/abductee))
+ if(checked_mob.stat == DEAD)
continue
total_valid_antags++
+
return (get_antag_cap() > total_valid_antags)
/// Gets candidates for antagonist roles.
@@ -809,14 +806,10 @@ SUBSYSTEM_DEF(gamemode)
/datum/controller/subsystem/gamemode/proc/admin_panel(mob/user)
update_crew_infos()
total_valid_antags = 0
- for(var/datum/antagonist/A in GLOB.antagonists)
- if(!A.owner)
- continue
- if(A.owner.stat = DEAD)
- continue
- if(istype(A, /datum/antagonist/hypnotized))
+ for(var/mob/checked_mob in GLOB.mob_list)
+ if(!checked_mob.mind.special_role)
continue
- if(istype(A, /datum/antagonist/abductee))
+ if(checked_mob.stat == DEAD)
continue
total_valid_antags++
From e8b3a7f81c2cd45d72a38eb36711b85319dc0e02 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 22:02:47 -0400
Subject: [PATCH 59/85] Update portal_storm.dm
---
code/modules/events/portal_storm.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm
index 1d8f00fabbb9..7d306fedcd9a 100644
--- a/code/modules/events/portal_storm.dm
+++ b/code/modules/events/portal_storm.dm
@@ -3,7 +3,7 @@
typepath = /datum/round_event/portal_storm/syndicate_shocktroop
weight = 2
min_players = 15
- max_occurences = 5
+ max_occurrences = 5
earliest_start = 30 MINUTES
category = EVENT_CATEGORY_ENTITIES
description = "Syndicate troops pour out of portals."
From 29475a8994b286589349874590ded205ea85c116 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 22:38:11 -0400
Subject: [PATCH 60/85] fixes nukiebase
---
code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm | 1 -
code/modules/antagonists/nukeop/nukeop.dm | 4 ----
code/modules/antagonists/nukeop/outfits.dm | 2 --
code/modules/shuttle/emergency.dm | 4 ----
4 files changed, 11 deletions(-)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index b0404e7250a4..d016b0429037 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -450,7 +450,6 @@
requirements = list(90,90,90,80,60,40,30,20,10,10)
flags = HIGH_IMPACT_RULESET
antag_cap = list("denominator" = 18, "offset" = 1)
- ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NUKIEBASE)
var/required_role = ROLE_NUCLEAR_OPERATIVE
var/datum/team/nuclear/nuke_team
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index 9ed8f8476a4a..c687d512f961 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -529,10 +529,6 @@
/proc/is_infiltrator_docked_at_syndiebase()
var/obj/docking_port/mobile/infiltrator/infiltrator_port = SSshuttle.getShuttle("syndicate")
- var/datum/lazy_template/nukie_base/nukie_template = GLOB.lazy_templates[LAZY_TEMPLATE_KEY_NUKIEBASE]
- if(!nukie_template)
- return FALSE // if its not even loaded, cant be docked
-
for(var/datum/turf_reservation/loaded_area as anything in nukie_template.reservations)
var/infiltrator_turf = get_turf(infiltrator_port)
if(infiltrator_turf in loaded_area.reserved_turfs)
diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm
index 28ba70e13ceb..bb8d4126fe6f 100644
--- a/code/modules/antagonists/nukeop/outfits.dm
+++ b/code/modules/antagonists/nukeop/outfits.dm
@@ -44,8 +44,6 @@
if(visualsOnly)
return
- // We don't require the nukiebase be loaded to function, but lets go ahead and kick off loading just in case
- INVOKE_ASYNC(SSmapping, TYPE_PROC_REF(/datum/controller/subsystem/mapping, lazy_load_template), LAZY_TEMPLATE_KEY_NUKIEBASE)
var/obj/item/radio/radio = nukie.ears
radio.set_frequency(FREQ_SYNDICATE)
radio.freqlock = RADIO_FREQENCY_LOCKED
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 70eccdc78828..a9f22d0eb2d9 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -181,9 +181,6 @@
/obj/machinery/computer/emergency_shuttle/proc/increase_hijack_stage()
var/obj/docking_port/mobile/emergency/shuttle = SSshuttle.emergency
- // Begin loading this early, prevents a delay when the shuttle goes to land
- INVOKE_ASYNC(SSmapping, TYPE_PROC_REF(/datum/controller/subsystem/mapping, lazy_load_template), LAZY_TEMPLATE_KEY_NUKIEBASE)
-
shuttle.hijack_status++
if(hijack_announce)
announce_hijack_stage()
@@ -548,7 +545,6 @@
var/destination_dock = "emergency_away"
if(is_hijacked() || elimination_hijack())
// just double check
- SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_NUKIEBASE)
destination_dock = "emergency_syndicate"
minor_announce("Corruption detected in \
shuttle navigation protocols. Please contact your \
From a81ec4b67c3fe00be1d370bb9b079f0eb0af5416 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 22:41:27 -0400
Subject: [PATCH 61/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index dc1dd42654a0..e4c859f53c98 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -222,6 +222,8 @@ SUBSYSTEM_DEF(gamemode)
/datum/controller/subsystem/gamemode/proc/can_inject_antags()
total_valid_antags = 0
for(var/mob/checked_mob in GLOB.mob_list)
+ if(!checked_mob.mind)
+ continue
if(!checked_mob.mind.special_role)
continue
if(checked_mob.stat == DEAD)
@@ -807,6 +809,8 @@ SUBSYSTEM_DEF(gamemode)
update_crew_infos()
total_valid_antags = 0
for(var/mob/checked_mob in GLOB.mob_list)
+ if(!checked_mob.mind)
+ continue
if(!checked_mob.mind.special_role)
continue
if(checked_mob.stat == DEAD)
From 2bbd8096d9dd88dcac5e9f56b496dd1290259845 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 22:47:44 -0400
Subject: [PATCH 62/85] Update nukeop.dm
---
code/modules/antagonists/nukeop/nukeop.dm | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index c687d512f961..c2809d680cc6 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -528,9 +528,6 @@
/// Returns whether or not syndicate operatives escaped.
/proc/is_infiltrator_docked_at_syndiebase()
var/obj/docking_port/mobile/infiltrator/infiltrator_port = SSshuttle.getShuttle("syndicate")
+ var/obj/docking_port/stationary/transit/infiltrator_dock = locate() in infiltrator_port.loc
- for(var/datum/turf_reservation/loaded_area as anything in nukie_template.reservations)
- var/infiltrator_turf = get_turf(infiltrator_port)
- if(infiltrator_turf in loaded_area.reserved_turfs)
- return TRUE
- return FALSE
+ return infiltrator_port && (is_centcom_level(infiltrator_port.z) || infiltrator_dock)
From 9bf260390a269035a2c687d6786850a5fd0cfaac Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Fri, 20 Oct 2023 22:48:12 -0400
Subject: [PATCH 63/85] Update dynamic_rulesets_midround.dm
---
code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm | 1 -
1 file changed, 1 deletion(-)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index 5ab88b19956c..38b7062217af 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -370,7 +370,6 @@
cost = 7
minimum_round_time = 70 MINUTES
requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED
- ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NUKIEBASE)
flags = HIGH_IMPACT_RULESET
var/list/operative_cap = list(2,2,3,3,4,5,5,5,5,5)
From c80f53d5a8ce421b3a2204948454775c6ab40eb2 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sat, 21 Oct 2023 15:50:50 -0400
Subject: [PATCH 64/85] roundstart heretics
---
tgstation.dme | 1 +
1 file changed, 1 insertion(+)
diff --git a/tgstation.dme b/tgstation.dme
index 9c732d8cb4a0..dccc5e3f3152 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6286,6 +6286,7 @@
#include "monkestation\code\modules\storytellers\converted_events\solo\changeling.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\clockwork_cult.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\clown_operative.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\heretic.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\malf.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\nuclear_operative.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\revolutionary.dm"
From 9d13f601c42687efa36c903bfda188a00cae75a1 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sat, 21 Oct 2023 21:39:59 -0400
Subject: [PATCH 65/85] fixes admin forced events
---
code/game/machinery/computer/communications.dm | 2 ++
code/modules/antagonists/pirate/pirate_event.dm | 2 ++
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 ++
monkestation/code/modules/storytellers/scheduled_events.dm | 2 +-
4 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 5d6563bba2b1..5a42667728a8 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -823,9 +823,11 @@
// Pirates / Fugitives have enough lead in time that there's no point summoning them if the shuttle is called
// Both of these events also summon space ships and so cannot run on planetary maps
if (EMERGENCY_IDLE_OR_RECALLED && !SSmapping.is_planetary())
+ /*
// Pirates require ghosts for the pirates obviously
if(num_ghosts >= MIN_GHOSTS_FOR_PIRATES)
hack_options += HACK_PIRATE
+ */
// Fugitives require ghosts for both fugitives and hunters (Please no waldo)
if(num_ghosts >= MIN_GHOSTS_FOR_FUGITIVES)
hack_options += HACK_FUGITIVES
diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm
index 30dc8c84f31b..365e684b42b7 100644
--- a/code/modules/antagonists/pirate/pirate_event.dm
+++ b/code/modules/antagonists/pirate/pirate_event.dm
@@ -9,6 +9,8 @@
description = "The crew will either pay up, or face a pirate assault."
admin_setup = list(/datum/event_admin_setup/listed_options/pirates)
map_flags = EVENT_SPACE_ONLY
+ track = EVENT_TRACK_MAJOR
+ tags = list(TAG_COMBAT, TAG_COMMUNAL)
/datum/round_event_control/pirates/preRunEvent()
if (!SSmapping.is_planetary())
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index e4c859f53c98..b7ef76751413 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -374,6 +374,8 @@ SUBSYSTEM_DEF(gamemode)
/// Schedules an event to run later.
/datum/controller/subsystem/gamemode/proc/schedule_event(datum/round_event_control/passed_event, passed_time, passed_cost, passed_ignore, passed_announce, _forced = FALSE)
+ if(_forced)
+ passed_ignore = TRUE
var/datum/scheduled_event/scheduled = new (passed_event, world.time + passed_time, passed_cost, passed_ignore, passed_announce)
var/round_started = SSticker.HasRoundStarted()
if(round_started)
diff --git a/monkestation/code/modules/storytellers/scheduled_events.dm b/monkestation/code/modules/storytellers/scheduled_events.dm
index 3440f09fcb07..cfb67a2dcf72 100644
--- a/monkestation/code/modules/storytellers/scheduled_events.dm
+++ b/monkestation/code/modules/storytellers/scheduled_events.dm
@@ -57,7 +57,7 @@
///Trigger the event and remove the scheduled datum
message_admins("Scheduled Event: [event] successfully triggered.")
- SSgamemode.TriggerEvent(event)
+ SSgamemode.TriggerEvent(event, ignores_checks)
SSgamemode.remove_scheduled_event(src)
/datum/scheduled_event/Destroy()
From 42b22fa96244786e28d6ac0cf7e1ae2e5d8a37da Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 01:42:25 -0400
Subject: [PATCH 66/85] forgot to add setup flag to events fixes pirate event
---
code/modules/antagonists/pirate/pirate_event.dm | 6 +-----
code/modules/events/anomaly/_anomaly.dm | 1 +
code/modules/events/brand_intelligence.dm | 1 +
code/modules/events/carp_migration.dm | 1 +
code/modules/events/disease_outbreak.dm | 2 ++
code/modules/events/ghost_role/alien_infestation.dm | 2 +-
code/modules/events/grey_tide.dm | 1 +
code/modules/events/portal_storm.dm | 1 +
code/modules/events/radiation_leak.dm | 1 +
code/modules/events/radiation_storm.dm | 1 +
code/modules/events/sandstorm.dm | 1 +
code/modules/events/scrubber_clog.dm | 1 +
code/modules/events/scrubber_overflow.dm | 1 +
code/modules/events/shuttle_catastrophe.dm | 1 +
code/modules/events/shuttle_insurance.dm | 1 +
code/modules/events/shuttle_loan/shuttle_loan_event.dm | 1 +
code/modules/events/spider_infestation.dm | 1 +
code/modules/events/stray_cargo.dm | 1 +
code/modules/events/tram_malfunction.dm | 1 +
code/modules/events/wormholes.dm | 1 +
20 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm
index 365e684b42b7..505292612241 100644
--- a/code/modules/antagonists/pirate/pirate_event.dm
+++ b/code/modules/antagonists/pirate/pirate_event.dm
@@ -11,11 +11,7 @@
map_flags = EVENT_SPACE_ONLY
track = EVENT_TRACK_MAJOR
tags = list(TAG_COMBAT, TAG_COMMUNAL)
-
-/datum/round_event_control/pirates/preRunEvent()
- if (!SSmapping.is_planetary())
- return EVENT_CANT_RUN
- return ..()
+ checks_antag_cap = TRUE
/datum/round_event/pirates
///admin chosen pirate team
diff --git a/code/modules/events/anomaly/_anomaly.dm b/code/modules/events/anomaly/_anomaly.dm
index 13fedcde2768..eaa9f4122787 100644
--- a/code/modules/events/anomaly/_anomaly.dm
+++ b/code/modules/events/anomaly/_anomaly.dm
@@ -24,6 +24,7 @@
impact_area = get_area(spawn_location)
else
impact_area = placer.findValidArea()
+ setup = TRUE
/datum/round_event/anomaly/announce(fake)
priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert")
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index 1a829cdaf37e..689878896eeb 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -48,6 +48,7 @@
kill()
return
origin_machine = pick_n_take(vending_machines)
+ setup = TRUE
/datum/round_event/brand_intelligence/announce(fake)
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [origin_machine] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert")
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index 22b64c9bdf21..17f083a97d4d 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -37,6 +37,7 @@
/datum/round_event/carp_migration/setup()
start_when = rand(40, 60)
+ setup = TRUE
/datum/round_event/carp_migration/announce(fake)
priority_announce("[fluff_signal] have been detected near [station_name()], please stand-by.", "Lifesign Alert")
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 7934ed0ae016..7348875be007 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -102,6 +102,7 @@
/datum/round_event/disease_outbreak/setup()
announce_when = ADV_ANNOUNCE_DELAY
+ setup = TRUE
/datum/round_event/disease_outbreak/start()
var/datum/round_event_control/disease_outbreak/disease_event = control
@@ -257,6 +258,7 @@
/datum/round_event/disease_outbreak/advance/setup()
announce_when = ADV_ANNOUNCE_DELAY
+ setup = TRUE
/**
* Generate advanced virus
diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm
index fb6e04610928..e76e8c8ccb11 100644
--- a/code/modules/events/ghost_role/alien_infestation.dm
+++ b/code/modules/events/ghost_role/alien_infestation.dm
@@ -37,7 +37,7 @@
announce_when = rand(announce_when, announce_when + 50)
if(prob(50))
spawncount++
-
+ setup = TRUE
/datum/round_event/ghost_role/alien_infestation/announce(fake)
var/living_aliens = FALSE
for(var/mob/living/carbon/alien/A in GLOB.player_list)
diff --git a/code/modules/events/grey_tide.dm b/code/modules/events/grey_tide.dm
index 86f20f9670da..d09f76ebe393 100644
--- a/code/modules/events/grey_tide.dm
+++ b/code/modules/events/grey_tide.dm
@@ -23,6 +23,7 @@
announce_when = rand(50, 60)
end_when = rand(20, 30)
severity = rand(1,3)
+ setup = TRUE
var/list/potential_areas = list(/area/station/command,
/area/station/engineering,
diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm
index 7d306fedcd9a..b5771d5075a0 100644
--- a/code/modules/events/portal_storm.dm
+++ b/code/modules/events/portal_storm.dm
@@ -68,6 +68,7 @@
hostiles_spawn += get_random_station_turf()
next_boss_spawn = start_when + CEILING(2 * number_of_hostiles / number_of_bosses, 1)
+ setup = TRUE
/datum/round_event/portal_storm/announce(fake)
set waitfor = 0
diff --git a/code/modules/events/radiation_leak.dm b/code/modules/events/radiation_leak.dm
index ed074e1459df..a94c8fe03e1a 100644
--- a/code/modules/events/radiation_leak.dm
+++ b/code/modules/events/radiation_leak.dm
@@ -49,6 +49,7 @@
// We found something, we can just return now
picked_machine_ref = WEAKREF(sick_device)
return
+ setup = TRUE
/datum/round_event/radiation_leak/announce(fake)
var/obj/machinery/the_source_of_our_problems = picked_machine_ref?.resolve()
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index a0d055ef2860..8d4be6c8299b 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -16,6 +16,7 @@
start_when = 3
end_when = start_when + 1
announce_when = 1
+ setup = TRUE
/datum/round_event/radiation_storm/announce(fake)
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", ANNOUNCER_RADIATION)
diff --git a/code/modules/events/sandstorm.dm b/code/modules/events/sandstorm.dm
index 81abd914d200..fc141315bb4b 100644
--- a/code/modules/events/sandstorm.dm
+++ b/code/modules/events/sandstorm.dm
@@ -32,6 +32,7 @@
/datum/round_event/sandstorm/setup()
start_when = rand(70, 90)
end_when = rand(110, 140)
+ setup = TRUE
/datum/round_event/sandstorm/announce(fake)
if(!start_side)
diff --git a/code/modules/events/scrubber_clog.dm b/code/modules/events/scrubber_clog.dm
index 2d48d25d8eff..7a332e67cf5d 100644
--- a/code/modules/events/scrubber_clog.dm
+++ b/code/modules/events/scrubber_clog.dm
@@ -42,6 +42,7 @@
end_when = rand(300, 600)
maximum_spawns = rand(3, 5)
spawn_delay = rand(10, 15)
+ setup = TRUE
/datum/round_event/scrubber_clog/start() //Sets the scrubber up for unclogging/mob production.
scrubber.clog()
diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm
index ab8d925a7d65..353293a6e3df 100644
--- a/code/modules/events/scrubber_overflow.dm
+++ b/code/modules/events/scrubber_overflow.dm
@@ -86,6 +86,7 @@
if(!scrubbers.len)
return kill()
+ setup = TRUE
/datum/round_event_control/scrubber_overflow/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
diff --git a/code/modules/events/shuttle_catastrophe.dm b/code/modules/events/shuttle_catastrophe.dm
index 6092d3e2f2b9..9c8332cadebe 100644
--- a/code/modules/events/shuttle_catastrophe.dm
+++ b/code/modules/events/shuttle_catastrophe.dm
@@ -48,6 +48,7 @@
if(!isnull(template.who_can_purchase) && template.credit_cost < INFINITY) //if we could get it from the communications console, it's cool for us to get it here
valid_shuttle_templates += template
new_shuttle = pick(valid_shuttle_templates)
+ setup = TRUE
/datum/round_event/shuttle_catastrophe/start()
if(SSshuttle.shuttle_insurance)
diff --git a/code/modules/events/shuttle_insurance.dm b/code/modules/events/shuttle_insurance.dm
index bac5acbe20e4..e3709f0308c5 100644
--- a/code/modules/events/shuttle_insurance.dm
+++ b/code/modules/events/shuttle_insurance.dm
@@ -41,6 +41,7 @@
break
if(!insurance_evaluation)
insurance_evaluation = 5000 //gee i dunno
+ setup = TRUE
/datum/round_event/shuttle_insurance/start()
insurance_message = new("Shuttle Insurance", "Hey, pal, this is the [ship_name]. Can't help but notice you're rocking a wild and crazy shuttle there with NO INSURANCE! Crazy. What if something happened to it, huh?! We've done a quick evaluation on your rates in this sector and we're offering [insurance_evaluation] to cover for your shuttle in case of any disaster.", list("Purchase Insurance.","Reject Offer."))
diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm
index dfebbc0cd020..ca593d3b8414 100644
--- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm
+++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm
@@ -37,6 +37,7 @@
loan_control.run_situations.Add(situation)
situation = new situation()
+ setup = TRUE
/datum/round_event/shuttle_loan/announce(fake)
priority_announce("Cargo: [situation.announcement_text]", situation.sender)
diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm
index 95c8f357cc14..8a600da626ea 100644
--- a/code/modules/events/spider_infestation.dm
+++ b/code/modules/events/spider_infestation.dm
@@ -19,6 +19,7 @@
/datum/round_event/spider_infestation/setup()
announce_when = rand(announce_when, announce_when + 50)
+ setup = TRUE
/datum/round_event/spider_infestation/announce(fake)
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", ANNOUNCER_ALIENS)
diff --git a/code/modules/events/stray_cargo.dm b/code/modules/events/stray_cargo.dm
index 0d0b9d478d03..b2ec87736f3b 100644
--- a/code/modules/events/stray_cargo.dm
+++ b/code/modules/events/stray_cargo.dm
@@ -68,6 +68,7 @@
var/datum/supply_pack/pack_type = pack
if(initial(pack_type.special))
stray_spawnable_supply_packs -= pack
+ setup = TRUE
///Spawns a random supply pack, puts it in a pod, and spawns it on a random tile of the selected area
/datum/round_event/stray_cargo/start()
diff --git a/code/modules/events/tram_malfunction.dm b/code/modules/events/tram_malfunction.dm
index d1eb6028bdc1..698b88171d69 100644
--- a/code/modules/events/tram_malfunction.dm
+++ b/code/modules/events/tram_malfunction.dm
@@ -35,6 +35,7 @@
/datum/round_event/tram_malfunction/setup()
end_when = rand(TRAM_MALFUNCTION_TIME_LOWER, TRAM_MALFUNCTION_TIME_UPPER)
+ setup = TRUE
/datum/round_event/tram_malfunction/announce()
priority_announce("Our automated control system has lost contact with the tram's on board computer. Please take extra care while we diagnose and resolve the issue. Signals and emergency braking may not be available during this time.", "CentCom Engineering Division")
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index 6bde3d3c738e..ee96155468c4 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -25,6 +25,7 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to
/datum/round_event/wormholes/setup()
announce_when = rand(0, 20)
end_when = rand(40, 80)
+ setup = TRUE
/datum/round_event/wormholes/start()
for(var/turf/open/floor/T in world)
From a03a753d4b308d32981545c631249b4f2a787431 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 01:44:54 -0400
Subject: [PATCH 67/85] this is now fixed
---
code/game/machinery/computer/communications.dm | 2 --
1 file changed, 2 deletions(-)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 5a42667728a8..5d6563bba2b1 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -823,11 +823,9 @@
// Pirates / Fugitives have enough lead in time that there's no point summoning them if the shuttle is called
// Both of these events also summon space ships and so cannot run on planetary maps
if (EMERGENCY_IDLE_OR_RECALLED && !SSmapping.is_planetary())
- /*
// Pirates require ghosts for the pirates obviously
if(num_ghosts >= MIN_GHOSTS_FOR_PIRATES)
hack_options += HACK_PIRATE
- */
// Fugitives require ghosts for both fugitives and hunters (Please no waldo)
if(num_ghosts >= MIN_GHOSTS_FOR_FUGITIVES)
hack_options += HACK_FUGITIVES
From 476f3e2fd47b7318e2848004215cb5ab98e437fc Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 17:16:15 -0400
Subject: [PATCH 68/85] Update breath.dm
---
code/modules/unit_tests/breath.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index faba1a08e22e..4e929d9f8ba7 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -86,6 +86,8 @@
/datum/unit_test/breath/breath_sanity_ashwalker
/datum/unit_test/breath/breath_sanity_ashwalker/Run()
+ if(SSmapping.config.map_name = "Oshan Station")
+ return
var/mob/living/carbon/human/species/lizard/ashwalker/lab_rat = allocate(/mob/living/carbon/human/species/lizard/ashwalker)
lab_rat.forceMove(run_loc_floor_bottom_left)
var/turf/open/to_fill = run_loc_floor_bottom_left
From 98190db020f2b62443f8fa575a443771af75ff23 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 17:18:23 -0400
Subject: [PATCH 69/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index b7ef76751413..0bba1fbde5d4 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -246,6 +246,10 @@ SUBSYSTEM_DEF(gamemode)
else if (observers && isobserver(player))
candidate_candidates += player
else if (living_players && isliving(player))
+ if(!ishuman(player))
+ continue
+ if(player.mind.special_role)
+ continue
if(!(player.z in SSmapping.levels_by_trait(ZTRAIT_STATION)))
continue
candidate_candidates += player
From 54228ee894dae32a7ddbaf969694ca522b3ef0e9 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 17:18:59 -0400
Subject: [PATCH 70/85] Update gamemode_subsystem.dm
---
monkestation/code/modules/storytellers/gamemode_subsystem.dm | 2 --
1 file changed, 2 deletions(-)
diff --git a/monkestation/code/modules/storytellers/gamemode_subsystem.dm b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
index 0bba1fbde5d4..c49d02243962 100644
--- a/monkestation/code/modules/storytellers/gamemode_subsystem.dm
+++ b/monkestation/code/modules/storytellers/gamemode_subsystem.dm
@@ -248,8 +248,6 @@ SUBSYSTEM_DEF(gamemode)
else if (living_players && isliving(player))
if(!ishuman(player))
continue
- if(player.mind.special_role)
- continue
if(!(player.z in SSmapping.levels_by_trait(ZTRAIT_STATION)))
continue
candidate_candidates += player
From 2c898dfcaeb4a81ab77a173936bce65f9f85c2b7 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 17:23:36 -0400
Subject: [PATCH 71/85] pushes check_enemies back to parent of events so that
we can have certain events check for roles before triggering
---
code/modules/events/_event.dm | 2 ++
.../storytellers/converted_events/_base_event.dm | 10 +++++-----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index 00e39b87f6a7..7a0b3c3133aa 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -109,6 +109,8 @@
if(checks_antag_cap)
if(!roundstart && !SSgamemode.can_inject_antags())
return FALSE
+ if(!check_enemies())
+ return FALSE
//monkestation edit end - STORYTELLERS
var/datum/game_mode/dynamic/dynamic = SSticker.mode
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 57261c6426ea..5fb49a685e66 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -1,6 +1,10 @@
/datum/round_event_control
///do we check against the antag cap before attempting a spawn?
var/checks_antag_cap = FALSE
+ /// List of enemy roles, will check if x amount of these exist exist
+ var/list/enemy_roles
+ ///required number of enemies in roles to exist
+ var/required_enemies = 0
/datum/round_event_control/proc/return_failure_string(players_amt)
var/string
@@ -66,10 +70,6 @@
var/list/protected_roles
/// Restricted roles from the antag roll
var/list/restricted_roles
- /// List of enemy roles, will check if x amount of these exist exist
- var/list/enemy_roles
- ///required number of enemies in roles to exist
- var/required_enemies = 0
/datum/round_event_control/antagonist/proc/check_required()
if(!length(exclusive_roles))
@@ -83,7 +83,7 @@
/datum/round_event_control/antagonist/proc/trim_candidates(list/candidates)
return candidates
-/datum/round_event_control/antagonist/proc/check_enemies()
+/datum/round_event_control/proc/check_enemies()
if(!length(enemy_roles))
return TRUE
var/job_check = 0
From 68ba3fdc63f88d12038142eeb3cd68ed597be524 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 17:37:14 -0400
Subject: [PATCH 72/85] addss bloodsuckers, fixes linters
---
_maps/map_files/generic/CentCom.dmm | 57 +++++++------------
code/modules/unit_tests/breath.dm | 2 +-
.../converted_events/_base_event.dm | 2 -
.../converted_events/solo/bloodsuckers.dm | 38 +++++++++++++
tgstation.dme | 1 +
5 files changed, 61 insertions(+), 39 deletions(-)
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 12bbccba61c0..08f86f8ba483 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -608,10 +608,6 @@
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plating,
/area/centcom/syndicate_mothership/expansion_bombthreat)
-"bL" = (
-/obj/machinery/vending/medical,
-/turf/closed/indestructible/riveted,
-/area/centcom/central_command_areas/medical)
"bM" = (
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/evacuation)
@@ -1919,7 +1915,6 @@
/area/centcom/central_command_areas/medical)
"fF" = (
/obj/effect/turf_decal/siding/wood/corner,
-/obj/machinery/chem_heater/debug,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
"fH" = (
@@ -3306,8 +3301,7 @@
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
"jM" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/backpack/duffelbag/med/surgery,
+/obj/machinery/vending/medical,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
"jN" = (
@@ -3593,12 +3587,6 @@
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/hall)
-"kQ" = (
-/obj/structure/railing/wood{
- dir = 1
- },
-/turf/open/floor/iron/dark/herringbone,
-/area/centcom/central_command_areas/medical)
"kS" = (
/obj/effect/turf_decal/siding/dark,
/turf/open/floor/carpet,
@@ -4079,12 +4067,6 @@
},
/turf/open/floor/iron/dark/diagonal,
/area/centcom/central_command_areas/medical)
-"ms" = (
-/obj/effect/turf_decal/trimline/green/line{
- dir = 6
- },
-/turf/closed/indestructible/riveted,
-/area/centcom/central_command_areas/botany)
"mt" = (
/obj/structure/table/reinforced,
/obj/machinery/microwave{
@@ -5153,9 +5135,6 @@
"pw" = (
/obj/effect/turf_decal/trimline/blue,
/obj/machinery/light/floor/has_bulb,
-/obj/structure/railing/wood{
- dir = 1
- },
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/medical)
"px" = (
@@ -5887,6 +5866,7 @@
/obj/effect/turf_decal/siding/blue{
dir = 1
},
+/obj/structure/railing/wood,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/medical)
"rQ" = (
@@ -9045,9 +9025,7 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/evacuation)
"Bu" = (
-/obj/item/storage/backpack/duffelbag/med/surgery,
-/obj/item/storage/backpack/duffelbag/med/surgery,
-/obj/structure/table/reinforced,
+/obj/machinery/vending/drugs,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
"Bv" = (
@@ -10813,9 +10791,6 @@
/turf/open/floor/carpet/executive,
/area/centcom/central_command_areas/admin)
"GR" = (
-/obj/structure/railing/wood{
- dir = 4
- },
/obj/effect/turf_decal/siding/wood{
dir = 5
},
@@ -14306,7 +14281,7 @@
/obj/effect/turf_decal/siding/wood{
dir = 1
},
-/obj/structure/hedge,
+/obj/machinery/chem_heater/debug,
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/medical)
"Rf" = (
@@ -16131,9 +16106,6 @@
/turf/open/floor/circuit/telecomms,
/area/centcom/central_command_areas/admin)
"WJ" = (
-/obj/structure/railing/wood{
- dir = 8
- },
/obj/effect/turf_decal/siding/wood{
dir = 9
},
@@ -16715,6 +16687,19 @@
/obj/structure/sink/directional/south,
/turf/open/floor/iron/white,
/area/centcom/wizard_station)
+"Yw" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/backpack/duffelbag/med/surgery,
+/obj/item/storage/backpack/duffelbag/med/surgery{
+ pixel_x = 5;
+ pixel_y = 9
+ },
+/obj/item/storage/backpack/duffelbag/med/surgery{
+ pixel_y = 10;
+ pixel_x = -10
+ },
+/turf/open/floor/iron/dark,
+/area/centcom/central_command_areas/medical)
"Yx" = (
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/evacuation/ship)
@@ -57184,7 +57169,7 @@ dS
kh
Fg
NJ
-ms
+dS
dS
LK
RX
@@ -63095,7 +63080,7 @@ aa
aa
aa
dl
-jM
+Yw
Nb
Nb
Nb
@@ -64390,7 +64375,7 @@ vS
IA
JY
rP
-kQ
+zk
zk
Lc
Ar
@@ -64895,7 +64880,7 @@ fE
AO
fE
we
-bL
+we
Nb
YL
Wv
diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index 4e929d9f8ba7..8bd6e3ce9b3d 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -86,7 +86,7 @@
/datum/unit_test/breath/breath_sanity_ashwalker
/datum/unit_test/breath/breath_sanity_ashwalker/Run()
- if(SSmapping.config.map_name = "Oshan Station")
+ if(SSmapping.config.map_name == "Oshan Station")
return
var/mob/living/carbon/human/species/lizard/ashwalker/lab_rat = allocate(/mob/living/carbon/human/species/lizard/ashwalker)
lab_rat.forceMove(run_loc_floor_bottom_left)
diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
index 5fb49a685e66..8f896a2e74cf 100644
--- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm
+++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm
@@ -104,8 +104,6 @@
/datum/round_event_control/antagonist/can_spawn_event(players_amt, allow_magic = FALSE, fake_check = FALSE)
. = ..()
- if(!check_enemies())
- return FALSE
if(!check_required())
return FALSE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm
new file mode 100644
index 000000000000..200a67e65e05
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm
@@ -0,0 +1,38 @@
+/datum/round_event_control/antagonist/solo/bloodsucker
+ antag_flag = ROLE_BLOODSUCKER
+ tags = list(TAG_COMBAT)
+ antag_datum = /datum/antagonist/bloodsucker
+ protected_roles = list(
+ JOB_CAPTAIN,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ )
+ //min_players = 20
+ weight = 5
+
+/datum/round_event_control/antagonist/solo/bloodsucker/roundstart
+ name = "Bloodsuckers"
+ roundstart = TRUE
+ earliest_start = 0 SECONDS
+
+/datum/round_event_control/antagonist/solo/bloodsucker/midround
+ typepath = /datum/round_event/antagonist/solo/bloodsucker
+ antag_flag = ROLE_VAMPIRICACCIDENT
+ name = "Vampiric Accident"
+ prompted_picking = TRUE
+ max_occurrences = 1
+
+/datum/round_event/antagonist/solo/bloodsucker/add_datum_to_mind(datum/mind/antag_mind)
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = antag_mind.make_bloodsucker()
+ bloodsuckerdatum.bloodsucker_level_unspent = rand(2,3)
diff --git a/tgstation.dme b/tgstation.dme
index dccc5e3f3152..f57484e2fda8 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6283,6 +6283,7 @@
#include "monkestation\code\modules\storytellers\scheduled_events.dm"
#include "monkestation\code\modules\storytellers\converted_events\_base_event.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\bloodcult.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\bloodsuckers.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\changeling.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\clockwork_cult.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\clown_operative.dm"
From 3d45ba30a040326757a21a4686ebc83882fcc6bf Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 17:42:37 -0400
Subject: [PATCH 73/85] Update bloodsuckers.dm
---
.../modules/storytellers/converted_events/solo/bloodsuckers.dm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm
index 200a67e65e05..b1d19ed354f5 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm
@@ -18,8 +18,9 @@
JOB_AI,
JOB_CYBORG,
)
- //min_players = 20
+ min_players = 20
weight = 5
+ maximum_antags = 2
/datum/round_event_control/antagonist/solo/bloodsucker/roundstart
name = "Bloodsuckers"
From ce0b380f54ed912040f02412f498b3e7c50582dd Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 18:54:50 -0400
Subject: [PATCH 74/85] better picked_event handling
---
.../storytellers/storytellers/_storyteller.dm | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index 704c72239dbb..b68b10881ea8 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -123,11 +123,14 @@
return
picked_event = pick_weight(valid_events)
if(!picked_event)
- message_admins("WARNING: Storyteller picked a null event from picked_events when it had a length of [length(valid_events)]")
- message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
- stack_trace("WARNING: Storyteller picked a null from event pool.")
- SSgamemode.event_track_points[track] = 0
- return
+ if(length(valid_events))
+ stack_trace("WARNING: Storyteller picked a null from event pool, defaulting to option 1, look at weights.")
+ picked_event = valid_events[1]
+ else
+ message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
+ stack_trace("WARNING: Storyteller picked a null from event pool.")
+ SSgamemode.event_track_points[track] = 0
+ return
buy_event(picked_event, track, are_forced)
. = TRUE
From ce47a76e799936c6a192b453b796696aea6038a5 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 20:11:14 -0400
Subject: [PATCH 75/85] Update _storyteller.dm
---
.../code/modules/storytellers/storytellers/_storyteller.dm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index b68b10881ea8..b12a998c5b68 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -125,6 +125,7 @@
if(!picked_event)
if(length(valid_events))
stack_trace("WARNING: Storyteller picked a null from event pool, defaulting to option 1, look at weights.")
+ shuffle_inplace(valid_events)
picked_event = valid_events[1]
else
message_admins("WARNING: Storyteller picked a null from event pool. Aborting event roll.")
@@ -149,7 +150,7 @@
SSgamemode.current_roundstart_event = bought_event
mode.TriggerEvent(bought_event, forced)
else
- mode.schedule_event(bought_event, (rand(120, 240) SECONDS), total_cost, _forced = forced)
+ mode.schedule_event(bought_event, 3 MINUTES, total_cost, _forced = forced)
SSgamemode.triggered_round_events |= bought_event.name
/// Calculates the weights of the events from a passed track.
From f1c48df4d99ba4410195bfb42d0b9239a18c98c6 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Sun, 22 Oct 2023 22:56:33 -0400
Subject: [PATCH 76/85] rewrites simian fur coloring into a species trait
similar to etherals DYNCOLORS
---
code/__DEFINES/DNA.dm | 21 ++---
code/modules/client/preferences/species.dm | 1 -
.../mob/living/carbon/human/_species.dm | 5 +-
.../mob/living/carbon/human/examine.dm | 2 +-
code/modules/surgery/bodyparts/_bodyparts.dm | 4 +-
monkestation/code/__HELPERS/mobs.dm | 19 -----
.../preferences/species_features/simians.dm | 39 ++--------
.../carbon/human/species_type/simian.dm | 5 +-
tgstation.dme | 1 -
.../tgui/interfaces/PreferencesMenu/data.ts | 1 -
.../monkestation/fur.tsx | 76 ++++++-------------
11 files changed, 51 insertions(+), 123 deletions(-)
delete mode 100644 monkestation/code/__HELPERS/mobs.dm
diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index 34a165ccf6db..3e7154b8e1fa 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -80,24 +80,25 @@
#define SKINTONES 12
#define ANIME 13
#define MUTCOLORS_SECONDARY 14
+#define SPECIES_FUR 15
/// Use this if you want to change the race's color without the player being able to pick their own color. AKA special color shifting
-#define DYNCOLORS 15
-#define AGENDER 16
+#define DYNCOLORS 16
+#define AGENDER 17
/// Do not draw eyes or eyeless overlay
-#define NOEYESPRITES 17
+#define NOEYESPRITES 18
///If we have a limb-specific overlay sprite
-#define HAS_MARKINGS 18
+#define HAS_MARKINGS 19
/// Do not draw blood overlay
-#define NOBLOODOVERLAY 19
+#define NOBLOODOVERLAY 20
///No augments, for monkeys in specific because they will turn into fucking freakazoids https://cdn.discordapp.com/attachments/326831214667235328/791313258912153640/102707682-fa7cad80-4294-11eb-8f13-8c689468aeb0.png
-#define NOAUGMENTS 20
+#define NOAUGMENTS 21
///will be assigned a universal vampire themed last name shared by their department. this is preferenced!
-#define BLOOD_CLANS 21
+#define BLOOD_CLANS 22
-#define REVIVESBYHEALING 22
-#define NOHUSK 23
-#define NOMOUTH 24
+#define REVIVESBYHEALING 23
+#define NOHUSK 24
+#define NOMOUTH 25
//organ slots
#define ORGAN_SLOT_ADAMANTINE_RESONATOR "adamantine_resonator"
diff --git a/code/modules/client/preferences/species.dm b/code/modules/client/preferences/species.dm
index a590a3334b78..1aae0e58dbbc 100644
--- a/code/modules/client/preferences/species.dm
+++ b/code/modules/client/preferences/species.dm
@@ -41,7 +41,6 @@
data[species_id]["desc"] = species.get_species_description()
data[species_id]["icon"] = sanitize_css_class_name(species.name)
data[species_id]["use_skintones"] = species.use_skintones
- data[species_id]["use_fur"] = species.use_fur
data[species_id]["sexes"] = species.sexes
data[species_id]["enabled_features"] = species.get_features()
data[species_id]["perks"] = species.get_species_perks()
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index 6506195f1acb..9949cfccbc0a 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -163,7 +163,8 @@ GLOBAL_LIST_EMPTY(features_by_species)
///What gas does this species breathe? Used by suffocation screen alerts, most of actual gas breathing is handled by mutantlungs. See [life.dm][code/modules/mob/living/carbon/human/life.dm]
var/breathid = "o2"
-
+ ///are we a furry little guy?
+ var/uses_fur = FALSE
///What anim to use for dusting
var/dust_anim = "dust-h"
///What anim to use for gibbing
@@ -241,8 +242,6 @@ GLOBAL_LIST_EMPTY(features_by_species)
///A list containing outfits that will be overridden in the species_equip_outfit proc. [Key = Typepath passed in] [Value = Typepath of outfit you want to equip for this specific species instead].
var/list/outfit_override_registry = list()
- ///are we furry little creatures
- var/use_fur = FALSE
///health mod of a species
var/maxhealthmod = 1
///Path to BODYTYPE_CUSTOM species worn icons. An assoc list of ITEM_SLOT_X => /icon
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 1736ea531837..f893404cab6f 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -237,7 +237,7 @@
msg += "[t_He] look[p_s()] extremely disgusted.\n"
var/apparent_blood_volume = blood_volume
- if((dna.species.use_skintones || dna.species.use_fur)&& skin_tone == "albino")
+ if((dna.species.use_skintones)&& skin_tone == "albino")
apparent_blood_volume -= 150 // enough to knock you down one tier
switch(apparent_blood_volume)
if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 2eec7eb2285b..ca2cff40edb5 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -772,12 +772,12 @@
species_flags_list = owner_species.species_traits
limb_gender = (human_owner.physique == MALE) ? "m" : "f"
- if(owner_species.use_skintones || owner_species.use_fur)
+ if(owner_species.use_skintones)
skin_tone = human_owner.skin_tone
else
skin_tone = ""
- if(((MUTCOLORS in owner_species.species_traits) || (DYNCOLORS in owner_species.species_traits))) //Ethereal code. Motherfuckers.
+ if(((MUTCOLORS in owner_species.species_traits) || (DYNCOLORS in owner_species.species_traits) || (SPECIES_FUR in owner_species.species_traits))) //Ethereal code. Motherfuckers.
if(owner_species.fixed_mut_color)
species_color = owner_species.fixed_mut_color
else
diff --git a/monkestation/code/__HELPERS/mobs.dm b/monkestation/code/__HELPERS/mobs.dm
deleted file mode 100644
index cf7a6bba7065..000000000000
--- a/monkestation/code/__HELPERS/mobs.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-GLOBAL_LIST_INIT(fur_tone_names, list(
- "ffffff" = "Albino",
- "ffb089" = "Chimp",
- "aeafb3" = "Grey",
- "bfd0ca" = "Snow",
- "ce7d54" = "Orange",
- "c47373" = "Red",
- "f4e2d5" = "Cream"
- ))
-
-GLOBAL_LIST_INIT(fur_tones, sort_list(list(
- "ffffff",
- "ffb089",
- "aeafb3",
- "bfd0ca",
- "ce7d54",
- "c47373",
- "f4e2d5",
- )))
diff --git a/monkestation/code/modules/client/preferences/species_features/simians.dm b/monkestation/code/modules/client/preferences/species_features/simians.dm
index 2c131cd44835..a4f27e181827 100644
--- a/monkestation/code/modules/client/preferences/species_features/simians.dm
+++ b/monkestation/code/modules/client/preferences/species_features/simians.dm
@@ -1,39 +1,14 @@
-/datum/preference/choiced/fur_color
+/datum/preference/color/fur_color
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
savefile_identifier = PREFERENCE_CHARACTER
savefile_key = "fur"
+ relevant_species_trait = SPECIES_FUR
-/datum/preference/choiced/fur_color/init_possible_values()
- return GLOB.fur_tones
-
-/datum/preference/choiced/fur_color/compile_constant_data()
- var/list/data = ..()
-
- data[CHOICED_PREFERENCE_DISPLAY_NAMES] = GLOB.fur_tone_names
-
- var/list/to_hex = list()
- for (var/choice in get_choices())
- var/list/hsl = rgb2num("#[choice]", COLORSPACE_HSL)
-
- to_hex[choice] = list(
- "lightness" = hsl[3],
- "value" = "#[choice]",
- )
-
- data["to_hex"] = to_hex
-
- return data
-
-/datum/preference/choiced/fur_color/apply_to_human(mob/living/carbon/human/target, value)
- if(target.dna.species.use_fur)
- target.skin_tone = value
-
-/datum/preference/choiced/fur_color/is_accessible(datum/preferences/preferences)
- if (!..(preferences))
- return FALSE
-
- var/datum/species/species_type = preferences.read_preference(/datum/preference/choiced/species)
- return initial(species_type.use_fur)
+/datum/preference/color/fur_color/apply_to_human(mob/living/carbon/human/target, value)
+ var/mob/user = usr
+ var/datum/species/species_type = user?.client.prefs.read_preference(/datum/preference/choiced/species)
+ if(initial(species_type.uses_fur))
+ target.dna.features["mcolor"] = value
/datum/preference/choiced/simian_tail
savefile_key = "feature_tail_monkey"
diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/simian.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/simian.dm
index 41a83238d5c8..5f4a06feda33 100644
--- a/monkestation/code/modules/mob/living/carbon/human/species_type/simian.dm
+++ b/monkestation/code/modules/mob/living/carbon/human/species_type/simian.dm
@@ -8,7 +8,8 @@
species_traits = list(
EYECOLOR,
LIPS,
- NO_UNDERWEAR
+ NO_UNDERWEAR,
+ SPECIES_FUR,
)
inherent_traits = list(
TRAIT_VAULTING,
@@ -17,7 +18,6 @@
)
use_skintones = FALSE
- use_fur = TRUE
inherent_biotypes = list(
MOB_ORGANIC,
@@ -30,6 +30,7 @@
skinned_type = /obj/item/stack/sheet/animalhide/monkey
disliked_food = GROSS
liked_food = FRUIT | MEAT
+ uses_fur = TRUE
//deathsound = 'monkestation/sound/voice/simian/deathsound.ogg'
species_language_holder = /datum/language_holder/monkey
maxhealthmod = 0.85 //small = weak
diff --git a/tgstation.dme b/tgstation.dme
index f57484e2fda8..8516085b13f7 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -5469,7 +5469,6 @@
#include "interface\skin.dmf"
#include "monkestation\code\__DEFINES\projectile.dm"
#include "monkestation\code\__HELPERS\_lists.dm"
-#include "monkestation\code\__HELPERS\mobs.dm"
#include "monkestation\code\__HELPERS\reagents.dm"
#include "monkestation\code\__HELPERS\turfs.dm"
#include "monkestation\code\_onclick\hud\alert.dm"
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts
index 5e9dcb01ab15..b648b8054644 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts
@@ -43,7 +43,6 @@ export type Species = {
icon: string;
use_skintones: BooleanLike;
- use_fur: BooleanLike;
sexes: BooleanLike;
enabled_features: string[];
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/monkestation/fur.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/monkestation/fur.tsx
index d896df9f2195..6b0458613f7b 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/monkestation/fur.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/monkestation/fur.tsx
@@ -1,60 +1,34 @@
-import { sortBy } from 'common/collections';
-import { Box, Stack } from '../../../../../../components';
-import { Feature, FeatureChoicedServerData, FeatureValueProps, StandardizedDropdown } from '../../base';
-
-type HexValue = {
- lightness: number;
- value: string;
-};
-
-type FurServerData = FeatureChoicedServerData & {
- display_names: NonNullable;
- to_hex: Record;
+import { Feature, FeatureValueProps, StandardizedPalette } from '../../base';
+
+const furPresets = {
+ // these need to be short color (3 byte) compatible
+ '#ffffff': 'Albino',
+ '#ffb089': 'Chimp',
+ '#aeafb3': 'Grey',
+ '#bfd0ca': 'Snow',
+ '#ce7d54': 'Orange',
+ '#c47373': 'Red',
+ '#f4e2d5': 'Cream',
};
-const sortHexValues = sortBy<[string, HexValue]>(
- ([_, hexValue]) => -hexValue.lightness
-);
-
-export const fur: Feature = {
- name: 'Fur coloring',
- component: (props: FeatureValueProps) => {
- const { handleSetValue, serverData, value } = props;
-
- if (!serverData) {
- return null;
- }
+export const fur: Feature = {
+ name: 'Fur Color',
+ small_supplemental: false,
+ predictable: false,
+ component: (props: FeatureValueProps) => {
+ const { handleSetValue, value, featureId, act } = props;
return (
- key
- )}
- displayNames={Object.fromEntries(
- Object.entries(serverData.display_names).map(([key, displayName]) => {
- const hexColor = serverData.to_hex[key];
-
- return [
- key,
-
-
-
-
-
- {displayName}
- ,
- ];
- })
- )}
+
);
},
From 4d7faf00bc278746a3d60c531477cd843f01b827 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 23 Oct 2023 00:28:54 -0400
Subject: [PATCH 77/85] Update _storyteller.dm
---
.../code/modules/storytellers/storytellers/_storyteller.dm | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index b12a998c5b68..aa60b0b79962 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -124,7 +124,10 @@
picked_event = pick_weight(valid_events)
if(!picked_event)
if(length(valid_events))
- stack_trace("WARNING: Storyteller picked a null from event pool, defaulting to option 1, look at weights.")
+ var/added_string = ""
+ for(var/datum/round_event_control/item as anything in valid_events)
+ added_string += "[item.name]:[valid_events[item]]; "
+ stack_trace("WARNING: Storyteller picked a null from event pool, defaulting to option 1, look at weights:[added_string]")
shuffle_inplace(valid_events)
picked_event = valid_events[1]
else
From 8db51a30d3dc705b441be78fdfa4eb60e889acbf Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 23 Oct 2023 00:52:40 -0400
Subject: [PATCH 78/85] Update _storyteller.dm
---
.../code/modules/storytellers/storytellers/_storyteller.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
index aa60b0b79962..893089a255a1 100644
--- a/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
+++ b/monkestation/code/modules/storytellers/storytellers/_storyteller.dm
@@ -115,7 +115,7 @@
if(QDELETED(event))
message_admins("[event.name] was deleted!")
continue
- valid_events[event] = event.calculated_weight
+ valid_events[event] = round(event.calculated_weight * 10) //multiply weight by 10 to get first decimal value
///If we didn't get any events, remove the points inform admins and dont do anything
if(!length(valid_events))
message_admins("Storyteller failed to pick an event for track of [track].")
From f7ea7e1ececbf15b5a2571f21ba5c1002a525b06 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 23 Oct 2023 01:18:42 -0400
Subject: [PATCH 79/85] fixes gondola
---
.../bitrunning/virtual_domain/domains/gondola_asteroid.dm | 6 +-----
code/modules/reagents/chemistry/reagents/other_reagents.dm | 3 ++-
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm
index 4deacb4f9c59..01d58e398038 100644
--- a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm
+++ b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm
@@ -28,11 +28,7 @@
/datum/reagent/gondola_mutation_toxin/virtual_domain
name = "Advanced Tranquility"
-
-/datum/reagent/gondola_mutation_toxin/virtual_domain/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
- . = ..()
- if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
- exposed_mob.ForceContractDisease(new /datum/disease/transformation/gondola/virtual_domain(), FALSE, TRUE)
+ gondola_disease = /datum/disease/transformation/gondola/virtual_domain
/datum/disease/transformation/gondola/virtual_domain
stage_prob = 9
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 3da8ceb7a017..2fddba00e8b2 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -2610,11 +2610,12 @@
color = "#9A6750" //RGB: 154, 103, 80
taste_description = "inner peace"
penetrates_skin = NONE
+ var/datum/disease/transformation/gondola_disease = /datum/disease/transformation/gondola
/datum/reagent/gondola_mutation_toxin/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
. = ..()
if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
- exposed_mob.ForceContractDisease(new /datum/disease/transformation/gondola(), FALSE, TRUE)
+ exposed_mob.ForceContractDisease(new gondola_disease, FALSE, TRUE)
/datum/reagent/spider_extract
From 953a56721f6b961ad8672678036f58233efc7dde Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 23 Oct 2023 03:38:19 -0400
Subject: [PATCH 80/85] Update bureaucratic_error.dm
---
code/modules/events/bureaucratic_error.dm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/code/modules/events/bureaucratic_error.dm b/code/modules/events/bureaucratic_error.dm
index 89e2e0bd7ad6..6b9b62efd945 100644
--- a/code/modules/events/bureaucratic_error.dm
+++ b/code/modules/events/bureaucratic_error.dm
@@ -24,10 +24,11 @@
var/datum/job/current = job
if(!current.allow_bureaucratic_error)
continue
- current.total_positions = 0
+ var/ran = rand(-2,4)
+ current.total_positions = max(current.total_positions + ran, 1)
else // Adds/removes a random amount of job slots from all jobs.
for(var/datum/job/current as anything in jobs)
if(!current.allow_bureaucratic_error)
continue
var/ran = rand(-2,4)
- current.total_positions = max(current.total_positions + ran, 0)
+ current.total_positions = max(current.total_positions + ran, 1)
From 9e75c9602fed49f5647c021e3731d9d8d44d8d1b Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 23 Oct 2023 04:45:58 -0400
Subject: [PATCH 81/85] causes late_arrivals to reroll on oshan
---
code/controllers/subsystem/processing/station.dm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/code/controllers/subsystem/processing/station.dm b/code/controllers/subsystem/processing/station.dm
index 21cd66c11a72..0b5626d68977 100644
--- a/code/controllers/subsystem/processing/station.dm
+++ b/code/controllers/subsystem/processing/station.dm
@@ -76,6 +76,9 @@ PROCESSING_SUBSYSTEM_DEF(station)
for(var/iterator in 1 to amount)
var/datum/station_trait/trait_type = pick_weight(selectable_traits_by_types[trait_sign]) //Rolls from the table for the specific trait type
selectable_traits_by_types[trait_sign] -= trait_type
+ if(istype(trait_type, /datum/station_trait/late_arrivals) && SSmapping.config.map_name == "Oshan Station")
+ amount++
+ continue
setup_trait(trait_type)
///Creates a given trait of a specific type, while also removing any blacklisted ones from the future pool.
From a9c6ec4495607f3038eb7113b42db57eb5eb6193 Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 23 Oct 2023 17:20:35 -0400
Subject: [PATCH 82/85] adds midround nukies, and obsessed to storytellers
---
.../solo/ghosts/nuclear_operative_ghost.dm | 103 ++++++++++++++++++
.../converted_events/solo/obsessed.dm | 16 +++
tgstation.dme | 2 +
3 files changed, 121 insertions(+)
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm
create mode 100644 monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm
new file mode 100644
index 000000000000..0b4e21ba750a
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm
@@ -0,0 +1,103 @@
+/datum/round_event_control/antagonist/solo/from_ghosts/nuclear_operative
+ name = "Nuclear Assault"
+ tags = list(TAG_DESTRUCTIVE, TAG_COMBAT, TAG_TEAM_ANTAG)
+ antag_flag = ROLE_OPERATIVE_MIDROUND
+ antag_datum = /datum/antagonist/nukeop
+ typepath = /datum/round_event/antagonist/solo/ghost/nuclear_operative
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CAPTAIN,
+ JOB_CHIEF_ENGINEER,
+ JOB_CHIEF_MEDICAL_OFFICER,
+ JOB_CYBORG,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ base_antags = 3
+ maximum_antags = 4
+ enemy_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = 5
+ // I give up, just there should be enough heads with 35 players...
+ min_players = 35
+ roundstart = TRUE
+ earliest_start = 45 MINUTES
+ weight = 4
+ max_occurrences = 1
+
+/datum/round_event/antagonist/solo/ghost/nuclear_operative
+ excute_round_end_reports = TRUE
+ end_when = 60000 /// we will end on our own when revs win
+ var/static/datum/team/nuclear/nuke_team
+ var/datum/antagonist/antag_leader_datum = /datum/antagonist/nukeop/leader
+ var/set_leader = FALSE
+ var/required_role = ROLE_NUCLEAR_OPERATIVE
+
+/datum/round_event/antagonist/solo/ghost/nuclear_operative/add_datum_to_mind(datum/mind/antag_mind)
+ var/mob/living/current_mob = antag_mind.current
+ var/list/items = current_mob.get_equipped_items(TRUE)
+ current_mob.unequip_everything()
+ for(var/obj/item/item as anything in items)
+ qdel(item)
+
+ var/datum/mind/most_experienced = get_most_experienced(setup_minds, required_role)
+ if(!most_experienced)
+ most_experienced = antag_mind
+
+ if(!set_leader)
+ set_leader = TRUE
+ var/datum/antagonist/nukeop/leader/leader = most_experienced.add_antag_datum(antag_leader_datum)
+ nuke_team = leader.nuke_team
+
+ if(antag_mind == most_experienced)
+ return
+
+ var/datum/antagonist/nukeop/new_op = new antag_datum()
+ antag_mind.add_antag_datum(new_op)
+
+
+/datum/round_event/antagonist/solo/from_ghosts/nuclear_operative/round_end_report()
+ var/result = nuke_team.get_result()
+ switch(result)
+ if(NUKE_RESULT_FLUKE)
+ SSticker.mode_result = "loss - syndicate nuked - disk secured"
+ SSticker.news_report = NUKE_SYNDICATE_BASE
+ if(NUKE_RESULT_NUKE_WIN)
+ SSticker.mode_result = "win - syndicate nuke"
+ SSticker.news_report = STATION_DESTROYED_NUKE
+ if(NUKE_RESULT_NOSURVIVORS)
+ SSticker.mode_result = "halfwin - syndicate nuke - did not evacuate in time"
+ SSticker.news_report = STATION_DESTROYED_NUKE
+ if(NUKE_RESULT_WRONG_STATION)
+ SSticker.mode_result = "halfwin - blew wrong station"
+ SSticker.news_report = NUKE_MISS
+ if(NUKE_RESULT_WRONG_STATION_DEAD)
+ SSticker.mode_result = "halfwin - blew wrong station - did not evacuate in time"
+ SSticker.news_report = NUKE_MISS
+ if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD)
+ SSticker.mode_result = "loss - evacuation - disk secured - syndi team dead"
+ SSticker.news_report = OPERATIVES_KILLED
+ if(NUKE_RESULT_CREW_WIN)
+ SSticker.mode_result = "loss - evacuation - disk secured"
+ SSticker.news_report = OPERATIVES_KILLED
+ if(NUKE_RESULT_DISK_LOST)
+ SSticker.mode_result = "halfwin - evacuation - disk not secured"
+ SSticker.news_report = OPERATIVE_SKIRMISH
+ if(NUKE_RESULT_DISK_STOLEN)
+ SSticker.mode_result = "halfwin - detonation averted"
+ SSticker.news_report = OPERATIVE_SKIRMISH
+ else
+ SSticker.mode_result = "halfwin - interrupted"
+ SSticker.news_report = OPERATIVE_SKIRMISH
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm b/monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm
new file mode 100644
index 000000000000..4509b33a8ab0
--- /dev/null
+++ b/monkestation/code/modules/storytellers/converted_events/solo/obsessed.dm
@@ -0,0 +1,16 @@
+/datum/round_event_control/antagonist/solo/obsessed
+ antag_flag = ROLE_TRAITOR
+ tags = list(TAG_COMBAT)
+ antag_datum = /datum/antagonist/obsessed
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ ROLE_POSITRONIC_BRAIN,
+ )
+ weight = 4
+ max_occurrences = 3
+
+/datum/round_event_control/antagonist/solo/obsessed/midround
+ name = "Compulsive Obsession"
+ prompted_picking = TRUE
+ maximum_antags = 4
diff --git a/tgstation.dme b/tgstation.dme
index 8516085b13f7..f433de28f8f6 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6289,9 +6289,11 @@
#include "monkestation\code\modules\storytellers\converted_events\solo\heretic.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\malf.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\nuclear_operative.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\obsessed.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\revolutionary.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\traitor.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\wizard.dm"
+#include "monkestation\code\modules\storytellers\converted_events\solo\ghosts\nuclear_operative_ghost.dm"
#include "monkestation\code\modules\storytellers\converted_events\solo\ghosts\wizard.dm"
#include "monkestation\code\modules\storytellers\storytellers\_storyteller.dm"
#include "monkestation\code\modules\storytellers\storytellers\ghost.dm"
From 8d21713264ab9282872f8f47902bfe865f5c7e6d Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Mon, 23 Oct 2023 17:22:36 -0400
Subject: [PATCH 83/85] Update nuclear_operative_ghost.dm
---
.../converted_events/solo/ghosts/nuclear_operative_ghost.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm
index 0b4e21ba750a..90dfba4182be 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/ghosts/nuclear_operative_ghost.dm
@@ -68,7 +68,7 @@
antag_mind.add_antag_datum(new_op)
-/datum/round_event/antagonist/solo/from_ghosts/nuclear_operative/round_end_report()
+/datum/round_event/antagonist/solo/ghost/nuclear_operative/round_end_report()
var/result = nuke_team.get_result()
switch(result)
if(NUKE_RESULT_FLUKE)
From e1165edd84104a5e7374160f46310b690d27a21e Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Tue, 24 Oct 2023 15:54:19 -0400
Subject: [PATCH 84/85] makes some major events only trigger once ever and some
other triggerable at a massively reduced weight
---
.../modules/storytellers/converted_events/solo/bloodcult.dm | 2 +-
.../storytellers/converted_events/solo/clockwork_cult.dm | 2 +-
.../storytellers/converted_events/solo/nuclear_operative.dm | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
index 486811654337..f76463ae9e06 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodcult.dm
@@ -31,7 +31,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
- max_occurrences = 1
+ max_occurrences = 3
/datum/round_event/antagonist/solo/bloodcult
excute_round_end_reports = TRUE
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
index 9ee7702f2363..e19bd8f800f3 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/clockwork_cult.dm
@@ -32,7 +32,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
- max_occurrences = 1
+ max_occurrences = 3
/datum/round_event/antagonist/solo/clockcult
end_when = 60000
diff --git a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
index 401c280e9ffb..6646c502a4a7 100644
--- a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
+++ b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm
@@ -35,7 +35,7 @@
roundstart = TRUE
earliest_start = 0 SECONDS
weight = 4
- max_occurrences = 1
+ max_occurrences = 3
/datum/round_event/antagonist/solo/nuclear_operative
excute_round_end_reports = TRUE
From f4cd43444b2a6467adb7511d7a4273075223468f Mon Sep 17 00:00:00 2001
From: dwasint <82520990+dwasint@users.noreply.github.com>
Date: Tue, 24 Oct 2023 18:18:45 -0400
Subject: [PATCH 85/85] Update screenshot_humanoids__datum_species_simian.png
---
...reenshot_humanoids__datum_species_simian.png | Bin 914 -> 914 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_simian.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_simian.png
index 079c292cb9bbf7daa17fca2ca5ad269b1f76cbd4..e7bea2e1bb644e7bbb6f549c092cff795c8d6abc 100644
GIT binary patch
delta 53
zcmbQlK8byTjs$}?1H*p?hJ1!8`?oPLFm!fyGCXErh+&xMqRz(P$-rR4FtJdMMc*nk
Jd*kH)OaOZU4x9i0
delta 53
zcmV-50LuT82a*SnEEp>$BmdyhZ(>`NzqSAX0Evl-