is the maximal provided decimal postfix (k, M, B, T, etc).
+*/
+/proc/number_to_3digits(value, var/list/postfixes = list("k", "M"))
+ var/list/digits[3]
+ var/lim = 1000
+ if (value < 0) // negatives
+ digits[3] = "-"
+ value *= -1
+ lim = 100
+ else
+ for(var/s in postfixes)
+ if (value < lim)
+ break
+ value /= 1000
+ digits[1] = s
+ lim = 100
+ if (value >= lim) // over/underflow
+ if (!digits[3])
+ digits[3] = "+"
+ if (!digits[1])
+ digits[1] = digits[3]
+ digits[2] = digits[3]
+ else
+ if ((lim == 100) && !digits[3]) // suffix on
+ if (value < 1) // .
+ digits[3] = "."
+ value *= 100 // .X => 0X0
+ else // just suffix
+ value *= 10 // XX => XX0
+ if (!digits[1])
+ digits[1] = value % 10
+ digits[2] = (value / 10) % 10
+ if (!digits[3])
+ digits[3] = (value / 100) % 10
+ return digits
+
/obj/item/charge_stick/on_update_icon()
. = ..()
- if(grade && grade != "peasant")
- var/image/I = image(icon, "[icon_state]-[grade]")
- I.appearance_flags |= RESET_COLOR
- overlays += I
-
if(get_world_inventory_state() == ICON_STATE_WORLD)
return
@@ -283,18 +329,13 @@
if(lock.locked)
return
- if(loaded_worth > 999999)
- overlays += image(icon, "9__")
- overlays += image(icon, "_9_")
- overlays += image(icon, "__9")
- return
+ var/decl/currency/cur = GET_DECL(currency)
+ var/displayed_worth = loaded_worth / cur.absolute_value // Denominated in stick currency
+ var/list/digits = number_to_3digits(displayed_worth)
+ add_overlay("__[digits[1]]")
+ add_overlay("_[digits[2]]_")
+ add_overlay("[digits[3]]__")
- var/h_thou = loaded_worth / 100000
- var/t_thou = (loaded_worth - (FLOOR(h_thou) * 100000)) / 10000
- var/thou = (loaded_worth - (FLOOR(h_thou) * 100000) - (FLOOR(t_thou) * 10000)) / 1000
- overlays += image(icon, "[FLOOR(h_thou)]__")
- overlays += image(icon, "_[FLOOR(t_thou)]_")
- overlays += image(icon, "__[FLOOR(thou)]")
/obj/item/charge_stick/copper
grade = "copper"
diff --git a/code/modules/economy/worth_currency.dm b/code/modules/economy/worth_currency.dm
index 7ebe5b30ebb..b9bdff6e541 100644
--- a/code/modules/economy/worth_currency.dm
+++ b/code/modules/economy/worth_currency.dm
@@ -14,7 +14,7 @@
name = "[value_name] [currency.name_singular] [name || "piece"]"
state = state || "cash"
marked_value = value
- overlay = image(currency, state)
+ overlay = image(currency.icon, state)
overlay.color = colour
overlay.appearance_flags |= RESET_COLOR
overlay.plane = FLOAT_PLANE
@@ -45,7 +45,7 @@
var/name_prefix
var/name_suffix
var/icon = 'icons/obj/items/money.dmi'
- var/material = /decl/material/solid/plastic
+ var/material = /decl/material/solid/organic/plastic
var/absolute_value = 1 // Divisor for cash pile worth. Should never be <1 or non-integer (think of it like cents).
var/list/denominations = list()
var/list/denominations_by_value = list()
diff --git a/code/modules/economy/worth_items.dm b/code/modules/economy/worth_items.dm
index 90d27fd35d2..bcea92fe798 100644
--- a/code/modules/economy/worth_items.dm
+++ b/code/modules/economy/worth_items.dm
@@ -16,12 +16,14 @@
var/largest_tech_val = 0
var/list/tech = cached_json_decode(origin_tech)
for(var/t in tech)
- var/next_tech_val = (tech[t]**2) * 5
+ if(tech[t] <= 1)
+ continue
+ var/next_tech_val = ((tech[t] - 1)**2) * 5
if(next_tech_val > largest_tech_val)
largest_tech_val = next_tech_val
- . += largest_tech_val
+ . += largest_tech_val
- if(force)
+ if((item_flags & ITEM_FLAG_IS_WEAPON) && force)
var/weapon_value = ((get_max_weapon_value() * 15) * (1 + max(sharp, edge)))
if(attack_cooldown <= FAST_WEAPON_COOLDOWN)
weapon_value *= 1.5
diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm
index 90598baaa78..c6fd0855eeb 100644
--- a/code/modules/emotes/definitions/_mob.dm
+++ b/code/modules/emotes/definitions/_mob.dm
@@ -42,19 +42,7 @@
/decl/emote/audible/choke,
/decl/emote/audible/moan,
/decl/emote/audible/gnarl
- )
-
-/mob/living/carbon/brain
- default_emotes = list(
- /decl/emote/audible/alarm,
- /decl/emote/audible/alert,
- /decl/emote/audible/notice,
- /decl/emote/audible/whistle,
- /decl/emote/audible/synth,
- /decl/emote/audible/boop,
- /decl/emote/visible/blink,
- /decl/emote/visible/flash
- )
+ )
/mob/living/carbon/human
default_emotes = list(
@@ -168,4 +156,4 @@
/decl/emote/audible/synth/deny,
/decl/emote/audible/synth/security,
/decl/emote/audible/synth/security/halt
- )
+ )
diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm
index 24f6c9dfdb9..7713886e073 100644
--- a/code/modules/emotes/emote_mob.dm
+++ b/code/modules/emotes/emote_mob.dm
@@ -10,8 +10,8 @@
/mob/living/check_mob_can_emote(var/emote_type)
return ..() && !(HAS_STATUS(src, STAT_SILENCE) && emote_type == AUDIBLE_MESSAGE)
-/mob/living/carbon/brain/check_mob_can_emote(var/emote_type)
- return ..() && (istype(container, /obj/item/mmi) || istype(loc, /obj/item/organ/internal/posibrain))
+/mob/living/brain/check_mob_can_emote(var/emote_type)
+ return ..() && istype(get_container(), /obj/item/organ/internal/brain_interface)
/mob/proc/emote(var/act, var/m_type, var/message)
set waitfor = FALSE
diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm
index 2e61914c580..39f8dc118d9 100644
--- a/code/modules/error_handler/error_handler.dm
+++ b/code/modules/error_handler/error_handler.dm
@@ -44,17 +44,9 @@ var/global/regex/actual_error_file_line
//Handle cooldowns and silencing spammy errors
var/silencing = FALSE
- // We can runtime before config is initialized because BYOND initialize objs/map before a bunch of other stuff happens.
- // This is a bunch of workaround code for that. Hooray!
-
- var/configured_error_cooldown = initial(config.error_cooldown)
- var/configured_error_limit = initial(config.error_limit)
- var/configured_error_silence_time = initial(config.error_silence_time)
- if(config)
- configured_error_cooldown = config.error_cooldown
- configured_error_limit = config.error_limit
- configured_error_silence_time = config.error_silence_time
-
+ var/configured_error_cooldown = get_config_value(/decl/config/num/debug_error_cooldown)
+ var/configured_error_limit = get_config_value(/decl/config/num/debug_error_limit)
+ var/configured_error_silence_time = get_config_value(/decl/config/num/debug_error_silence_time)
//Each occurence of an unique error adds to its cooldown time...
cooldown = max(0, cooldown - (world.time - last_seen)) + configured_error_cooldown
diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm
index d08af79ce53..4cf335faab0 100644
--- a/code/modules/error_handler/error_viewer.dm
+++ b/code/modules/error_handler/error_viewer.dm
@@ -126,14 +126,9 @@ var/global/datum/error_viewer/error_cache/error_cache
// Show the error to admins with debug messages turned on, but only if one
// from the same source hasn't been shown too recently
if (error_source.next_message_at <= world.time)
- var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly
+ //var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly
//log_debug("Runtime in [e.file], line [e.line]: [html_encode(e.name)] [error_entry.make_link(viewtext)]")
- var/err_msg_delay
- if(config)
- err_msg_delay = config.error_msg_delay
- else
- err_msg_delay = initial(config.error_msg_delay)
- error_source.next_message_at = world.time + err_msg_delay
+ error_source.next_message_at = world.time + get_config_value(/decl/config/num/debug_error_msg_delay)
/datum/error_viewer/error_source
var/list/errors = list()
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index fde3b27d545..a2cf955a797 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -64,17 +64,17 @@ var/global/list/carp_count = list() // a list of Z levels (string), associated w
else
M = new /mob/living/simple_animal/hostile/carp/pike(T)
I += 3
- events_repository.register(/decl/observ/death, M,src,/datum/event/carp_migration/proc/reduce_carp_count)
- events_repository.register(/decl/observ/destroyed, M,src,/datum/event/carp_migration/proc/reduce_carp_count)
+ events_repository.register(/decl/observ/death, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count))
+ events_repository.register(/decl/observ/destroyed, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count))
LAZYADD(global.carp_count[num2text(Z)], M)
spawned_carp ++
- M.throw_at(get_random_edge_turf(global.reverse_dir[direction],TRANSITIONEDGE + 2, Z), 250, speed, callback = CALLBACK(src,/datum/event/carp_migration/proc/check_gib,M))
+ M.throw_at(get_random_edge_turf(global.reverse_dir[direction],TRANSITIONEDGE + 2, Z), 250, speed, callback = CALLBACK(src, TYPE_PROC_REF(/datum/event/carp_migration, check_gib), M))
I++
if(no_show)
break
/datum/event/carp_migration/proc/check_gib(var/mob/living/simple_animal/hostile/carp/M) //awesome road kills
- if(M.health <= 0 && prob(60))
+ if(M.current_health <= 0 && prob(60))
M.gib()
/proc/get_random_edge_turf(var/direction, var/clearance = TRANSITIONEDGE + 1, var/Z)
@@ -97,8 +97,8 @@ var/global/list/carp_count = list() // a list of Z levels (string), associated w
if(M in L)
LAZYREMOVE(L,M)
break
- events_repository.unregister(/decl/observ/death, M,src,/datum/event/carp_migration/proc/reduce_carp_count)
- events_repository.unregister(/decl/observ/destroyed, M,src,/datum/event/carp_migration/proc/reduce_carp_count)
+ events_repository.unregister(/decl/observ/death, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count))
+ events_repository.unregister(/decl/observ/destroyed, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count))
/datum/event/carp_migration/end()
log_debug("Carp migration event spawned [spawned_carp] carp.")
diff --git a/code/modules/events/disposals_explosion.dm b/code/modules/events/disposals_explosion.dm
index cf1cb63a93b..86f470f6d6e 100644
--- a/code/modules/events/disposals_explosion.dm
+++ b/code/modules/events/disposals_explosion.dm
@@ -24,7 +24,7 @@
// Event listener for the marked pipe's destruction
/datum/event/disposals_explosion/proc/pipe_destroyed()
- events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, .proc/pipe_destroyed)
+ events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, PROC_REF(pipe_destroyed))
bursting_pipe = null
kill()
@@ -43,7 +43,7 @@
if(istype(A, /obj/structure/disposalpipe/segment))
bursting_pipe = A
// Subscribe to pipe destruction facts
- events_repository.register(/decl/observ/destroyed, A, src, .proc/pipe_destroyed)
+ events_repository.register(/decl/observ/destroyed, A, src, PROC_REF(pipe_destroyed))
break
if(isnull(bursting_pipe))
@@ -70,7 +70,7 @@
if(isnull(bursting_pipe))
return
- events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, .proc/pipe_destroyed)
+ events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, PROC_REF(pipe_destroyed))
if(bursting_pipe.health < 5)
// Make a disposals holder for the trash
diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm
index 4a41dbf3d31..0686eee43d9 100644
--- a/code/modules/events/event.dm
+++ b/code/modules/events/event.dm
@@ -43,7 +43,7 @@
var/penalty = 100 // A simple penalty gives admins the ability to increase the weight to again be part of the random event selection
/datum/event_meta/extended_penalty/get_weight()
- return ..() - (istype(SSticker.mode, /datum/game_mode/extended) ? penalty : 0)
+ return ..() - (istype(SSticker.mode, /decl/game_mode/extended) ? penalty : 0)
/datum/event_meta/no_overmap/get_weight() //these events have overmap equivalents, and shouldn't fire randomly if overmap is used
return length(global.using_map.overmap_ids) ? 0 : ..()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index e67279c59e5..d404c07a42c 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -15,7 +15,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
if(!next_event_time)
set_event_delay()
- if(delayed || !config.allow_random_events)
+ if(delayed || !get_config_value(/decl/config/toggle/allow_random_events))
next_event_time += (world.time - last_world_time)
else if(world.time > next_event_time)
start_event()
@@ -71,17 +71,18 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
var/last_time = last_event_time[EM]
if(last_time)
var/time_passed = world.time - last_time
- var/weight_modifier = max(0, round((config.expected_round_length - time_passed) / 300))
+ var/weight_modifier = max(0, round(((get_config_value(/decl/config/num/expected_round_length) HOURS) - time_passed) / 300))
weight = weight - weight_modifier
return weight
/datum/event_container/proc/set_event_delay()
// If the next event time has not yet been set and we have a custom first time start
- if(next_event_time == 0 && config.event_first_run[severity])
- var/lower = config.event_first_run[severity]["lower"]
- var/upper = config.event_first_run[severity]["upper"]
- var/event_delay = rand(lower, upper)
+ var/list/event_first_run = get_config_value(/decl/config/lists/event_first_run)
+ if(next_event_time == 0 && event_first_run[severity])
+ var/lower = event_first_run[severity]["lower"]
+ var/upper = event_first_run[severity]["upper"]
+ var/event_delay = rand(lower, upper) MINUTES
next_event_time = world.time + event_delay
// Otherwise, follow the standard setup process
else
@@ -99,7 +100,9 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
playercount_modifier = 0.8
playercount_modifier = playercount_modifier * delay_modifier
- var/event_delay = rand(config.event_delay_lower[severity], config.event_delay_upper[severity]) * playercount_modifier
+ var/list/event_delay_lower = get_config_value(/decl/config/lists/event_delay_lower)
+ var/list/event_delay_upper = get_config_value(/decl/config/lists/event_delay_upper)
+ var/event_delay = (rand(event_delay_lower[severity], event_delay_upper[severity]) * playercount_modifier) MINUTES
next_event_time = world.time + event_delay
log_debug("Next event of severity [severity_to_string[severity]] in [(next_event_time - world.time)/600] minutes.")
diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm
index 94d4290d4ff..2bf3dd6ead1 100644
--- a/code/modules/events/event_dynamic.dm
+++ b/code/modules/events/event_dynamic.dm
@@ -2,7 +2,7 @@ var/global/list/event_last_fired = list()
//Always triggers an event when called, dynamically chooses events based on job population
/proc/spawn_dynamic_event()
- if(!config.allow_random_events)
+ if(!get_config_value(/decl/config/toggle/allow_random_events))
return
var/minutes_passed = world.time/600
diff --git a/code/modules/ext_scripts/irc.dm b/code/modules/ext_scripts/irc.dm
index dc894d839de..9b1887f118f 100644
--- a/code/modules/ext_scripts/irc.dm
+++ b/code/modules/ext_scripts/irc.dm
@@ -1,30 +1,36 @@
/proc/send2irc(var/channel, var/msg)
- export2irc(list(type="msg", mesg=msg, chan=channel, pwd=config.comms_password))
+ export2irc(list(type="msg", mesg=msg, chan=channel, pwd=get_config_value(/decl/config/text/comms_password)))
/proc/export2irc(params)
- if(config.use_irc_bot && config.irc_bot_host)
+ if(!get_config_value(/decl/config/toggle/use_irc_bot))
+ return
+ var/irc_bot_host = get_config_value(/decl/config/text/irc_bot_host)
+ if(irc_bot_host)
spawn(-1) // spawn here prevents hanging in the case that the bot isn't reachable
- world.Export("http://[config.irc_bot_host]:45678?[list2params(params)]")
+ world.Export("http://[irc_bot_host]:45678?[list2params(params)]")
/proc/runtimes2irc(runtimes, revision)
- export2irc(list(pwd=config.comms_password, type="runtime", runtimes=runtimes, revision=revision))
+ export2irc(list(pwd=get_config_value(/decl/config/text/comms_password), type="runtime", runtimes=runtimes, revision=revision))
/proc/send2mainirc(var/msg)
- if(config.main_irc)
- send2irc(config.main_irc, msg)
+ var/main_irc = get_config_value(/decl/config/text/main_irc)
+ if(main_irc)
+ send2irc(main_irc, msg)
return
/proc/send2adminirc(var/msg)
- if(config.admin_irc)
- send2irc(config.admin_irc, msg)
+ var/admin_irc = get_config_value(/decl/config/text/admin_irc)
+ if(admin_irc)
+ send2irc(admin_irc, msg)
return
/proc/adminmsg2adminirc(client/source, client/target, msg)
- if(config.admin_irc)
+ var/admin_irc = get_config_value(/decl/config/text/admin_irc)
+ if(admin_irc)
var/list/params[0]
- params["pwd"] = config.comms_password
- params["chan"] = config.admin_irc
+ params["pwd"] = get_config_value(/decl/config/text/comms_password)
+ params["chan"] = admin_irc
params["msg"] = msg
params["src_key"] = source.key
params["src_char"] = source.mob.real_name || source.mob.name
@@ -42,13 +48,7 @@
export2irc(params)
/proc/get_world_url()
- . = "byond://"
- if(config.serverurl)
- . += config.serverurl
- else if(config.server)
- . += config.server
- else
- . += "[world.address]:[world.port]"
+ return "byond://[get_config_value(/decl/config/text/server) || get_config_value(/decl/config/text/serverurl) || "[world.address]:[world.port]"]"
/hook/startup/proc/ircNotify()
send2mainirc("Server starting up on [get_world_url()]")
diff --git a/code/modules/fabrication/designs/_design.dm b/code/modules/fabrication/designs/_design.dm
index b3ec5719dc3..8d381868fe1 100644
--- a/code/modules/fabrication/designs/_design.dm
+++ b/code/modules/fabrication/designs/_design.dm
@@ -55,17 +55,6 @@
for(var/mat in building_cost)
resources[mat] = building_cost[mat] * FABRICATOR_EXTRA_COST_FACTOR
-/obj/building_cost()
- . = ..()
- if(length(matter))
- for(var/material in matter)
- var/decl/material/M = GET_DECL(material)
- if(istype(M))
- .[M.type] = matter[material]
- if(reagents && length(reagents.reagent_volumes))
- for(var/R in reagents.reagent_volumes)
- .[R] = FLOOR(REAGENT_VOLUME(reagents, R) / REAGENT_UNITS_PER_MATERIAL_UNIT)
-
/datum/fabricator_recipe/proc/build(var/turf/location, var/datum/fabricator_build_order/order)
. = list()
if(ispath(path, /obj/item/stack))
diff --git a/code/modules/fabrication/designs/general/designs_general.dm b/code/modules/fabrication/designs/general/designs_general.dm
index 49ad3f1f867..5f7065dbaaa 100644
--- a/code/modules/fabrication/designs/general/designs_general.dm
+++ b/code/modules/fabrication/designs/general/designs_general.dm
@@ -107,7 +107,7 @@
/datum/fabricator_recipe/fiberglass/get_resources()
resources = list(
/decl/material/solid/glass = CEILING((SHEET_MATERIAL_AMOUNT * FABRICATOR_EXTRA_COST_FACTOR)/2),
- /decl/material/solid/plastic = CEILING((SHEET_MATERIAL_AMOUNT * FABRICATOR_EXTRA_COST_FACTOR)/2)
+ /decl/material/solid/organic/plastic = CEILING((SHEET_MATERIAL_AMOUNT * FABRICATOR_EXTRA_COST_FACTOR)/2)
)
/datum/fabricator_recipe/struts
@@ -125,7 +125,7 @@
/datum/fabricator_recipe/struts/plastic/get_resources()
resources = list(
- /decl/material/solid/plastic = CEILING((SHEET_MATERIAL_AMOUNT * FABRICATOR_EXTRA_COST_FACTOR)),
+ /decl/material/solid/organic/plastic = CEILING((SHEET_MATERIAL_AMOUNT * FABRICATOR_EXTRA_COST_FACTOR)),
)
/datum/fabricator_recipe/struts/aluminium
@@ -162,5 +162,12 @@
/datum/fabricator_recipe/package_wrapper
path = /obj/item/stack/package_wrap
-/datum/fabricator_recipe/gift_wrapper
- path = /obj/item/stack/package_wrap/gift
\ No newline at end of file
+
+/datum/fabricator_recipe/package_wrapper/gift
+ path = /obj/item/stack/package_wrap/gift
+
+/datum/fabricator_recipe/clothes_iron
+ path = /obj/item/ironingiron
+
+/datum/fabricator_recipe/ironing_board
+ path = /obj/item/roller/ironingboard
\ No newline at end of file
diff --git a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm
index f26e6361ca5..badc05f81c0 100644
--- a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm
+++ b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm
@@ -218,9 +218,6 @@
/datum/fabricator_recipe/imprinter/circuit/chemical_dispenser
path = /obj/item/stock_parts/circuitboard/chemical_dispenser
-/datum/fabricator_recipe/imprinter/circuit/atmos_control
- path = /obj/item/stock_parts/circuitboard/atmoscontrol
-
/datum/fabricator_recipe/imprinter/circuit/pipe_dispenser
path = /obj/item/stock_parts/circuitboard/pipedispensor
@@ -338,6 +335,9 @@
/datum/fabricator_recipe/imprinter/circuit/washer
path = /obj/item/stock_parts/circuitboard/washer
+/datum/fabricator_recipe/imprinter/circuit/autoclave
+ path = /obj/item/stock_parts/circuitboard/autoclave
+
/datum/fabricator_recipe/imprinter/circuit/microwave
path = /obj/item/stock_parts/circuitboard/microwave
@@ -483,4 +483,16 @@
path = /obj/item/stock_parts/circuitboard/holomap
/datum/fabricator_recipe/imprinter/circuit/geothermal_generator
- path = /obj/item/stock_parts/circuitboard/geothermal
\ No newline at end of file
+ path = /obj/item/stock_parts/circuitboard/geothermal
+
+/datum/fabricator_recipe/imprinter/circuit/area_atmos
+ path = /obj/item/stock_parts/circuitboard/area_atmos
+
+/datum/fabricator_recipe/imprinter/circuit/area_atmos_control
+ path = /obj/item/stock_parts/circuitboard/area_atmos/area
+
+/datum/fabricator_recipe/imprinter/circuit/tag_scrubber_control
+ path = /obj/item/stock_parts/circuitboard/area_atmos/tag
+
+/datum/fabricator_recipe/imprinter/circuit/central_atmos
+ path = /obj/item/stock_parts/circuitboard/central_atmos
diff --git a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm
index 1c4f1849691..f2cb06e6080 100644
--- a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm
+++ b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm
@@ -78,9 +78,27 @@
category = "Exosuit Equipment"
path = /obj/item/mech_equipment/clamp
+/datum/fabricator_recipe/industrial/exosuit_gear/flash
+ path = /obj/item/mech_equipment/flash
+
/datum/fabricator_recipe/industrial/exosuit_gear/gravity_catapult
path = /obj/item/mech_equipment/catapult
+/datum/fabricator_recipe/industrial/exosuit_gear/ionjets
+ path = /obj/item/mech_equipment/ionjets
+
+/datum/fabricator_recipe/industrial/exosuit_gear/camera
+ path = /obj/item/mech_equipment/camera
+
+/datum/fabricator_recipe/industrial/exosuit_gear/shields
+ path = /obj/item/mech_equipment/shields
+
+/datum/fabricator_recipe/industrial/exosuit_gear/ballistic_shield
+ path = /obj/item/mech_equipment/ballistic_shield
+
+/datum/fabricator_recipe/industrial/exosuit_gear/atmos_shields
+ path = /obj/item/mech_equipment/atmos_shields
+
/datum/fabricator_recipe/industrial/exosuit_gear/drill
path = /obj/item/mech_equipment/drill
@@ -93,14 +111,16 @@
if(!ispath(path, /obj/item/mech_equipment/mounted_system))
return
var/obj/item/mech_equipment/mounted_system/system = path
-
- var/mounted_type = initial(system.holding_type)
+ var/mounted_type = initial(system.holding)
if(!mounted_type)
return
var/list/mounted_cost = atom_info_repository.get_matter_for(mounted_type)
for(var/mat in mounted_cost)
resources[mat] += mounted_cost[mat] * FABRICATOR_EXTRA_COST_FACTOR
+/datum/fabricator_recipe/industrial/exosuit_gear/mounted/machete
+ path = /obj/item/mech_equipment/mounted_system/melee/machete
+
/datum/fabricator_recipe/industrial/exosuit_gear/mounted/plasma
path = /obj/item/mech_equipment/mounted_system/taser/plasma
@@ -110,6 +130,9 @@
/datum/fabricator_recipe/industrial/exosuit_gear/mounted/laser
path = /obj/item/mech_equipment/mounted_system/taser/laser
+/datum/fabricator_recipe/industrial/exosuit_gear/mounted/autoplasma
+ path = /obj/item/mech_equipment/mounted_system/taser/autoplasma
+
/datum/fabricator_recipe/industrial/exosuit_gear/mounted/smg
path = /obj/item/mech_equipment/mounted_system/projectile
@@ -128,9 +151,6 @@
/datum/fabricator_recipe/industrial/exosuit_gear/mounted/extinguisher
path = /obj/item/mech_equipment/mounted_system/extinguisher
-/datum/fabricator_recipe/industrial/exosuit_gear/mounted/mechshields
- path = /obj/item/mech_equipment/shields
-
/datum/fabricator_recipe/industrial/exosuit_ammo
category = "Exosuit Ammunition"
path = /obj/item/ammo_magazine/mech/smg_top
diff --git a/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm b/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm
index e2a471367ec..3b52762f8f9 100644
--- a/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm
+++ b/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm
@@ -1,15 +1,15 @@
/datum/fabricator_recipe/protolathe/brains
category = "Machine Intelligence"
- path = /obj/item/mmi
+ path = /obj/item/organ/internal/brain_interface/empty
/datum/fabricator_recipe/protolathe/brains/get_product_name()
. = "intelligence storage ([..()])"
+/datum/fabricator_recipe/protolathe/brains/robotic
+ path = /obj/item/organ/internal/brain/robotic
+
/datum/fabricator_recipe/protolathe/brains/mmi_radio
- path = /obj/item/mmi/radio_enabled
-
-/datum/fabricator_recipe/protolathe/brains/posibrain
- path = /obj/item/organ/internal/posibrain
+ path = /obj/item/organ/internal/brain_interface/radio_enabled/empty
/datum/fabricator_recipe/protolathe/brains/paicard
path = /obj/item/paicard
diff --git a/code/modules/fabrication/designs/robotics/designs_organs.dm b/code/modules/fabrication/designs/robotics/designs_organs.dm
index 534d079db18..10bd93793a0 100644
--- a/code/modules/fabrication/designs/robotics/designs_organs.dm
+++ b/code/modules/fabrication/designs/robotics/designs_organs.dm
@@ -10,13 +10,13 @@
for(var/key in resources)
if(!ispath(key, /decl/material/solid))
resources -= key
- var/meat_amount = LAZYACCESS(resources, /decl/material/solid/meat)
+ var/meat_amount = LAZYACCESS(resources, /decl/material/solid/organic/meat)
if(meat_amount)
if(LAZYACCESS(resources, /decl/material/solid/metal/steel))
resources[/decl/material/solid/metal/steel] += meat_amount
else
LAZYSET(resources, /decl/material/solid/metal/steel, meat_amount)
- LAZYREMOVE(resources, /decl/material/solid/meat)
+ LAZYREMOVE(resources, /decl/material/solid/organic/meat)
/datum/fabricator_recipe/robotics/organ/build(turf/location, datum/fabricator_build_order/order)
. = ..()
diff --git a/code/modules/fabrication/designs/robotics/designs_prosthetics.dm b/code/modules/fabrication/designs/robotics/designs_prosthetics.dm
index 663198ca351..a35d78e4a9e 100644
--- a/code/modules/fabrication/designs/robotics/designs_prosthetics.dm
+++ b/code/modules/fabrication/designs/robotics/designs_prosthetics.dm
@@ -31,12 +31,17 @@
} \
/datum/fabricator_recipe/robotics/prosthetic/model_##MODEL_ID/groin { \
path = /obj/item/organ/external/groin; \
-}
-/* Readd if FBP construction is desirable
+} \
/datum/fabricator_recipe/robotics/prosthetic/model_##MODEL_ID/chest { \
path = /obj/item/organ/external/chest; \
} \
-*/
+/datum/fabricator_recipe/robotics/prosthetic/model_##MODEL_ID/head { \
+ path = /obj/item/organ/external/head; \
+} \
+/datum/fabricator_recipe/robotics/prosthetic/model_##MODEL_ID/groin { \
+ path = /obj/item/organ/external/groin; \
+}
+
/datum/fabricator_recipe/robotics/prosthetic
var/model
@@ -70,13 +75,13 @@
for(var/key in resources)
if(!ispath(key, /decl/material/solid))
resources -= key
- var/meat_amount = LAZYACCESS(resources, /decl/material/solid/meat)
+ var/meat_amount = LAZYACCESS(resources, /decl/material/solid/organic/meat)
if(meat_amount)
if(LAZYACCESS(resources, /decl/material/solid/metal/steel))
resources[/decl/material/solid/metal/steel] += meat_amount
else
LAZYSET(resources, /decl/material/solid/metal/steel, meat_amount)
- LAZYREMOVE(resources, /decl/material/solid/meat)
+ LAZYREMOVE(resources, /decl/material/solid/organic/meat)
/datum/fabricator_recipe/robotics/prosthetic/get_product_name()
. = "prosthetic limb ([..()])"
diff --git a/code/modules/fabrication/designs/textile/armor.dm b/code/modules/fabrication/designs/textile/armor.dm
index fa4141cec8f..6d98d22eca6 100644
--- a/code/modules/fabrication/designs/textile/armor.dm
+++ b/code/modules/fabrication/designs/textile/armor.dm
@@ -5,7 +5,7 @@
/datum/fabricator_recipe/textiles/armor/hos
path = /obj/item/clothing/suit/armor/hos
-
+
/datum/fabricator_recipe/textiles/armor/jensen
path = /obj/item/clothing/suit/armor/hos/jensen
@@ -17,7 +17,7 @@
/datum/fabricator_recipe/textiles/armor/plate/medium
path = /obj/item/clothing/accessory/armor/plate/medium
-
+
/datum/fabricator_recipe/textiles/armor/plate/tactical
path = /obj/item/clothing/accessory/armor/plate/tactical
@@ -71,7 +71,7 @@
/datum/fabricator_recipe/textiles/armor/helmet
category = "Armor - Helmets"
path = /obj/item/clothing/head/helmet
-
+
/datum/fabricator_recipe/textiles/helmet/tactical
path = /obj/item/clothing/head/helmet/tactical
@@ -99,8 +99,8 @@ var/global/list/melee_mats = list(
/decl/material/solid/metal/titanium = ARMOR_MELEE_VERY_HIGH,
/decl/material/solid/metal/steel = ARMOR_MELEE_MAJOR,
/decl/material/solid/metal/iron = ARMOR_MELEE_KNIVES,
- /decl/material/solid/leather = ARMOR_MELEE_KNIVES,
- /decl/material/solid/plastic = ARMOR_MELEE_SMALL
+ /decl/material/solid/organic/leather = ARMOR_MELEE_KNIVES,
+ /decl/material/solid/organic/plastic = ARMOR_MELEE_SMALL
)
var/global/list/bullet_mats = list(
@@ -109,6 +109,6 @@ var/global/list/bullet_mats = list(
/decl/material/solid/metal/titanium = ARMOR_BALLISTIC_RESISTANT,
/decl/material/solid/metal/steel = ARMOR_BALLISTIC_PISTOL,
/decl/material/solid/metal/iron = ARMOR_BALLISTIC_SMALL,
- /decl/material/solid/leather = ARMOR_BALLISTIC_MINOR,
- /decl/material/solid/plastic = ARMOR_BALLISTIC_MINOR
+ /decl/material/solid/organic/leather = ARMOR_BALLISTIC_MINOR,
+ /decl/material/solid/organic/plastic = ARMOR_BALLISTIC_MINOR
)
diff --git a/code/modules/fabrication/fabricator_food.dm b/code/modules/fabrication/fabricator_food.dm
index 65a3f51f109..b275ddc8f4c 100644
--- a/code/modules/fabrication/fabricator_food.dm
+++ b/code/modules/fabrication/fabricator_food.dm
@@ -13,15 +13,15 @@
return ..()
var/true_text = lowertext(html_decode(text))
if(findtext(true_text, "status"))
- addtimer(CALLBACK(src, /obj/machinery/fabricator/replicator/proc/state_status), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator/replicator, state_status)), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
else if(findtext(true_text, "menu"))
- addtimer(CALLBACK(src, /obj/machinery/fabricator/replicator/proc/state_menu), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
- else
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator/replicator, state_menu)), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
+ else
for(var/datum/fabricator_recipe/recipe in design_cache)
if(recipe.hidden && !(fab_status_flags & FAB_HACKED))
continue
if(findtext(true_text, lowertext(recipe.name)))
- addtimer(CALLBACK(src, /obj/machinery/fabricator/proc/try_queue_build, recipe, 1), 2 SECONDS)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator, try_queue_build), recipe, 1), 2 SECONDS)
break
..()
diff --git a/code/modules/fabrication/fabricator_intake.dm b/code/modules/fabrication/fabricator_intake.dm
index 8baaf1b6ee7..eef97ba19ee 100644
--- a/code/modules/fabrication/fabricator_intake.dm
+++ b/code/modules/fabrication/fabricator_intake.dm
@@ -66,7 +66,7 @@
adding_mat_overlay.color = mat_colour
material_overlays += adding_mat_overlay
update_icon()
- addtimer(CALLBACK(src, /obj/machinery/fabricator/proc/remove_mat_overlay, adding_mat_overlay), 1 SECOND)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator, remove_mat_overlay), adding_mat_overlay), 1 SECOND)
if(stack_ref && stacks_used)
stack_ref.use(stacks_used)
diff --git a/code/modules/fabrication/fabricator_pipe.dm b/code/modules/fabrication/fabricator_pipe.dm
index c3cd5055a16..a552ff4f1ac 100644
--- a/code/modules/fabrication/fabricator_pipe.dm
+++ b/code/modules/fabrication/fabricator_pipe.dm
@@ -50,7 +50,7 @@
base_type = /obj/machinery/fabricator/pipe/disposal
//Allow you to drag-drop disposal pipes into it
-/obj/machinery/fabricator/pipe/disposal/receive_mouse_drop(var/atom/dropping, mob/user)
+/obj/machinery/fabricator/pipe/disposal/receive_mouse_drop(atom/dropping, mob/user, params)
. = ..()
if(!. && istype(dropping, /obj/structure/disposalconstruct))
qdel(dropping)
diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm
deleted file mode 100644
index 08cbc66cf1d..00000000000
--- a/code/modules/flufftext/Dreaming.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/mob/living/carbon/proc/dream()
- set waitfor = FALSE
- dreaming = 1
-
- for(var/i = rand(1,4),i > 0, i--)
- to_chat(src, "... [pick(SSlore.dreams)] ...")
- sleep(rand(40,70))
- if(!HAS_STATUS(src, STAT_PARA))
- dreaming = 0
- return
- dreaming = 0
-
-/mob/living/carbon/proc/handle_dreams()
- if(client && !dreaming && prob(5))
- dream()
-
-/mob/living/carbon/var/dreaming = 0
diff --git a/code/modules/games/boardgame.dm b/code/modules/games/boardgame.dm
index cee197930c0..8c6fda78496 100644
--- a/code/modules/games/boardgame.dm
+++ b/code/modules/games/boardgame.dm
@@ -3,7 +3,7 @@
desc = "A standard 16\" checkerboard. Well used." //Goddamn imperial system.
icon = 'icons/obj/pieces.dmi'
icon_state = "board"
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
var/num = 0
var/board_icons = list()
@@ -164,65 +164,99 @@
//Checkers
-/obj/item/chems/food/checker
+/obj/item/checker
name = "checker"
desc = "It is plastic and shiny."
icon = 'icons/obj/pieces.dmi'
icon_state = "checker_black"
w_class = ITEM_SIZE_TINY
- center_of_mass = @"{'x':16,'y':16}"
- nutriment_desc = list("a choking hazard" = 4)
- nutriment_amt = 1
+ center_of_mass = @'{"x":16,"y":16}'
var/piece_color ="black"
-/obj/item/chems/food/checker/Initialize()
+// Override these to let people eat checkers.
+/obj/item/checker/is_edible(mob/eater)
+ return TRUE
+
+/obj/item/checker/is_food_empty(mob/eater)
+ return FALSE
+
+/obj/item/checker/transfer_eaten_material(mob/eater, amount)
+ if(isliving(eater))
+ var/mob/living/living_eater = eater
+ living_eater.get_ingested_reagents()?.add_reagent(/decl/material/solid/organic/plastic, 3)
+
+/obj/item/checker/play_feed_sound(mob/user, consumption_method = EATING_METHOD_EAT)
+ return
+
+/obj/item/checker/show_food_consumed_message(mob/user, mob/target)
+ return
+
+/obj/item/checker/show_feed_message_start(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You begin trying to swallow \the [target]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] attempts to force \the [target] to swallow \the [src]!"))
+
+/obj/item/checker/show_feed_message_end(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You swallow \the [src]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] forces \the [target] to swallow \the [src]!"))
+
+// End food overrides.
+
+/obj/item/checker/Initialize()
. = ..()
icon_state = "[name]_[piece_color]"
name = "[piece_color] [name]"
-/obj/item/chems/food/checker/red
+/obj/item/checker/red
piece_color ="red"
//Chess
-/obj/item/chems/food/checker/pawn
+/obj/item/checker/pawn
name = "pawn"
desc = "How many pawns will die in your war?"
-/obj/item/chems/food/checker/pawn/red
+/obj/item/checker/pawn/red
piece_color ="red"
-/obj/item/chems/food/checker/knight
+/obj/item/checker/knight
name = "knight"
desc = "The piece chess deserves, and needs to actually play."
-/obj/item/chems/food/checker/knight/red
+/obj/item/checker/knight/red
piece_color ="red"
-/obj/item/chems/food/checker/bishop
+/obj/item/checker/bishop
name = "bishop"
desc = "What corruption occured, urging holy men to fight?"
-/obj/item/chems/food/checker/bishop/red
+/obj/item/checker/bishop/red
piece_color ="red"
-/obj/item/chems/food/checker/rook
+/obj/item/checker/rook
name = "rook"
desc = "Representing ancient moving towers. So powerful and fast they were banned from wars, forever."
-/obj/item/chems/food/checker/rook/red
+/obj/item/checker/rook/red
piece_color ="red"
-/obj/item/chems/food/checker/queen
+/obj/item/checker/queen
name = "queen"
desc = "A queen of battle and pain. She dances across the battlefield."
-/obj/item/chems/food/checker/queen/red
+/obj/item/checker/queen/red
piece_color ="red"
-/obj/item/chems/food/checker/king
+/obj/item/checker/king
name = "king"
desc = "Why does a chess game end when the king dies?"
-/obj/item/chems/food/checker/king/red
+/obj/item/checker/king/red
piece_color ="red"
\ No newline at end of file
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index 243342ab29c..b25438de00d 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -21,7 +21,7 @@ var/global/list/card_decks = list()
/obj/item/deck
w_class = ITEM_SIZE_SMALL
icon = 'icons/obj/items/playing_cards.dmi'
- material = /decl/material/solid/cardboard
+ material = /decl/material/solid/organic/cardboard
var/list/cards = list()
/obj/item/deck/Initialize()
@@ -63,7 +63,7 @@ var/global/list/card_decks = list()
name = "card box"
desc = "A small leather case to show how classy you are compared to everyone else."
icon_state = "card_holder"
- material = /decl/material/solid/leather
+ material = /decl/material/solid/organic/leather
/obj/item/deck/cards
name = "deck of cards"
@@ -264,7 +264,7 @@ var/global/list/card_decks = list()
cards = shuffle(cards)
user.visible_message("\The [user] shuffles [src].")
-/obj/item/deck/handle_mouse_drop(atom/over, mob/user)
+/obj/item/deck/handle_mouse_drop(atom/over, mob/user, params)
if(over == user && (loc == user || in_range(src, user)) && user.get_empty_hand_slot())
user.put_in_hands(src)
return TRUE
@@ -276,7 +276,7 @@ var/global/list/card_decks = list()
icon_state = "card_pack"
icon = 'icons/obj/items/playing_cards.dmi'
w_class = ITEM_SIZE_TINY
- material = /decl/material/solid/cardboard
+ material = /decl/material/solid/organic/cardboard
var/list/cards = list()
@@ -297,7 +297,7 @@ var/global/list/card_decks = list()
icon = 'icons/obj/items/playing_cards.dmi'
icon_state = "empty"
w_class = ITEM_SIZE_TINY
- material = /decl/material/solid/cardboard
+ material = /decl/material/solid/organic/cardboard
var/concealed = 0
var/list/datum/playingcard/cards = list()
diff --git a/code/modules/ghosttrap/trap.dm b/code/modules/ghosttrap/trap.dm
index 2728becaa1c..73f2aade08a 100644
--- a/code/modules/ghosttrap/trap.dm
+++ b/code/modules/ghosttrap/trap.dm
@@ -1,5 +1,4 @@
-// This system is used to grab a ghost from observers with the required preferences
-// and lack of bans set. See posibrain.dm for an example of how they are called/used.
+// This system is used to grab a ghost from observers with the required preferences and lack of bans set.
/decl/ghosttrap
var/name
var/minutes_since_death = 0 // If non-zero the ghost must have been dead for this many minutes to be allowed to spawn
@@ -30,7 +29,7 @@
/decl/ghosttrap/proc/request_player(var/mob/target, var/request_string, var/request_timeout)
if(request_timeout)
LAZYSET(request_timeouts, target, world.time + request_timeout)
- events_repository.register(/decl/observ/destroyed, target, src, /decl/ghosttrap/proc/unregister_target)
+ events_repository.register(/decl/observ/destroyed, target, src, TYPE_PROC_REF(/decl/ghosttrap, unregister_target))
else
unregister_target(target)
@@ -44,7 +43,7 @@
/decl/ghosttrap/proc/unregister_target(var/target)
LAZYREMOVE(request_timeouts, target)
- events_repository.unregister(/decl/observ/destroyed, target, src, /decl/ghosttrap/proc/unregister_target)
+ events_repository.unregister(/decl/observ/destroyed, target, src, TYPE_PROC_REF(/decl/ghosttrap, unregister_target))
// Handles a response to request_player().
/decl/ghosttrap/Topic(href, href_list)
@@ -57,7 +56,7 @@
return
if(candidate != usr)
return
-
+
var/timeout = LAZYACCESS(request_timeouts, target)
if(!isnull(timeout) && world.time > timeout)
to_chat(candidate, "This occupation request is no longer valid.")
@@ -95,33 +94,42 @@
target.SetName(target.real_name)
/***********************************
-* Positronic brains. *
+* Computer intelligence cores. *
***********************************/
-/decl/ghosttrap/positronic_brain
- name = "positronic brain"
+/decl/ghosttrap/machine_intelligence
+ name = "machine intelligence"
ban_checks = list("AI",ASSIGNMENT_ROBOT)
- pref_check = "ghost_posibrain"
- ghost_trap_message = "They are occupying a positronic brain now."
+ pref_check = "ghost_machine_intelligence"
+ ghost_trap_message = "They are occupying a computer intelligence core now."
+
+/decl/ghosttrap/machine_intelligence/transfer_personality(mob/candidate, mob/target)
+ if(assess_candidate(candidate))
+
+ var/obj/item/organ/internal/brain/robotic/brain = target.loc?.loc
+ if(!istype(brain))
+ return FALSE
+
+ brain.transfer_key_to_brainmob(candidate, update_brainmob = FALSE)
+ brain.searching = FALSE
+ brain.update_icon()
+ announce_ghost_joinleave(candidate, 0, "[ghost_trap_message]")
+
+ var/mob/living/brainmob = brain.get_brainmob(create_if_missing = TRUE)
+ if(brainmob)
+ welcome_candidate(brainmob)
+ return TRUE
-/decl/ghosttrap/positronic_brain/forced(var/mob/user)
- var/obj/item/organ/internal/posibrain/brain = new(get_turf(user))
- if(!brain.brainmob)
- brain.init()
- request_player(brain.brainmob, "Someone is requesting a personality for a positronic brain.", 60 SECONDS)
+/decl/ghosttrap/machine_intelligence/forced(var/mob/user)
+ var/obj/item/organ/internal/brain/robotic/brain = new(get_turf(user))
+ request_player(brain.get_brainmob(create_if_missing = TRUE), "Someone is requesting a player for a machine intelligence.", 60 SECONDS)
-/decl/ghosttrap/positronic_brain/welcome_candidate(var/mob/target)
- to_chat(target, "You are a positronic brain, brought into existence on [station_name()].")
+/decl/ghosttrap/machine_intelligence/welcome_candidate(var/mob/target)
+ to_chat(target, "You are a machine intelligence, brought into existence on [station_name()].")
to_chat(target, "As a synthetic intelligence, you answer to all crewmembers, as well as the AI.")
to_chat(target, "Remember, the purpose of your existence is to serve the crew and the [station_name()]. Above all else, do no harm.")
to_chat(target, "Use say [target.get_language_prefix()]b to speak to other artificial intelligences.")
var/turf/T = get_turf(target)
- var/obj/item/organ/internal/posibrain/P = target.loc
- T.visible_message("\The [P] chimes quietly.")
- if(!istype(P)) //wat
- return
- P.searching = 0
- P.SetName("positronic brain ([P.brainmob.name])")
- P.update_icon()
+ T.visible_message(SPAN_NOTICE("\The [target] beeps loudly."))
/***********************************
* Walking mushrooms and such. *
@@ -131,7 +139,7 @@
ban_checks = list("Botany Roles")
pref_check = "ghost_plant"
ghost_trap_message = "They are occupying a living plant now."
-
+
/decl/ghosttrap/sentient_plant/forced(var/mob/user)
request_player(new /mob/living/simple_animal/mushroom(get_turf(user)), "Someone is harvesting a walking mushroom.", 15 SECONDS)
diff --git a/code/modules/goals/_goal.dm b/code/modules/goals/_goal.dm
index 41a179c1a9b..fbcf0e55f67 100644
--- a/code/modules/goals/_goal.dm
+++ b/code/modules/goals/_goal.dm
@@ -8,7 +8,7 @@
/datum/goal/New(var/_owner)
owner = _owner
- events_repository.register(/decl/observ/destroyed, owner, src, /datum/proc/qdel_self)
+ events_repository.register(/decl/observ/destroyed, owner, src, TYPE_PROC_REF(/datum, qdel_self))
if(istype(owner, /datum/mind))
var/datum/mind/mind = owner
LAZYADD(mind.goals, src)
diff --git a/code/modules/goals/definitions/department_clerical.dm b/code/modules/goals/definitions/department_clerical.dm
index 22cb85f0d03..0f5ac8c07d8 100644
--- a/code/modules/goals/definitions/department_clerical.dm
+++ b/code/modules/goals/definitions/department_clerical.dm
@@ -25,21 +25,21 @@
..()
-/datum/goal/department/paperwork/proc/get_spawn_turfs()
+/datum/goal/department/paperwork/proc/get_paper_spawn_turfs()
return
-/datum/goal/department/paperwork/proc/get_end_areas()
+/datum/goal/department/paperwork/proc/get_paper_end_areas()
return
/datum/goal/department/paperwork/try_initialize()
- var/list/start_candidates = get_spawn_turfs()
+ var/list/start_candidates = get_paper_spawn_turfs()
if(!length(start_candidates))
PRINT_STACK_TRACE("Paperwork goal [type] initialized with no spawn landmarks mapped!")
SSgoals.pending_goals -= src
return FALSE
- var/list/end_candidates = get_end_areas()
+ var/list/end_candidates = get_paper_end_areas()
if(!length(end_candidates))
PRINT_STACK_TRACE("Paperwork goal [type] initialized with no end landmarks mapped!")
SSgoals.pending_goals -= src
@@ -100,7 +100,7 @@
desc = "This densely typed sheaf of documents is filled with legalese and jargon. You can't make heads or tails of them."
icon = 'icons/obj/goal_paperwork.dmi'
icon_state = "generic"
- material = /decl/material/solid/cardboard //#TODO: replace with paper
+ material = /decl/material/solid/organic/paper
var/datum/goal/department/paperwork/associated_goal
var/list/all_signatories
diff --git a/code/modules/goals/definitions/personal_achievement_movement.dm b/code/modules/goals/definitions/personal_achievement_movement.dm
index 7f5fb6f69bc..5e1e650a0c3 100644
--- a/code/modules/goals/definitions/personal_achievement_movement.dm
+++ b/code/modules/goals/definitions/personal_achievement_movement.dm
@@ -3,7 +3,7 @@
..()
if(owner)
var/datum/mind/mind = owner
- events_repository.register(/decl/observ/moved, mind.current, src, .proc/owner_moved)
+ events_repository.register(/decl/observ/moved, mind.current, src, PROC_REF(owner_moved))
/datum/goal/movement/proc/owner_moved()
return
@@ -40,7 +40,7 @@
/datum/goal/movement/walk/check_success()
return (steps >= required_steps)
-
+
/datum/goal/movement/walk/update_strings()
description = "Stave off microgravity muscle atrophy by walking at least [required_steps] step\s this shift."
diff --git a/code/modules/hallucinations/_hallucination.dm b/code/modules/hallucinations/_hallucination.dm
new file mode 100644
index 00000000000..399fd5dfc0e
--- /dev/null
+++ b/code/modules/hallucinations/_hallucination.dm
@@ -0,0 +1,48 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+//Hallucination effects datums
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/hallucination
+ var/mob/living/holder
+ var/allow_duplicates = 1
+ var/duration = 0
+ var/min_power = 0 //at what levels of hallucination power mobs should get it
+ var/max_power = INFINITY
+ var/activated = FALSE
+
+/datum/hallucination/proc/start()
+ SHOULD_CALL_PARENT(TRUE)
+ activated = TRUE
+
+/datum/hallucination/proc/end()
+ SHOULD_CALL_PARENT(TRUE)
+ activated = FALSE
+
+/datum/hallucination/proc/can_affect(var/mob/living/victim)
+ if(!victim.client)
+ return FALSE
+ if(min_power > victim.hallucination_power)
+ return FALSE
+ if(max_power < victim.hallucination_power)
+ return FALSE
+ if(!allow_duplicates && (locate(type) in victim._hallucinations))
+ return FALSE
+ return TRUE
+
+/datum/hallucination/Destroy()
+ if(holder)
+ LAZYREMOVE(holder._hallucinations, src)
+ holder = null
+ if(activated)
+ end()
+ return ..()
+
+/datum/hallucination/proc/activate_hallucination()
+ set waitfor = FALSE
+ if(!holder || !holder.client || activated)
+ return
+ LAZYADD(holder._hallucinations, src)
+ start()
+ sleep(duration)
+ if(!QDELETED(src))
+ qdel(src)
diff --git a/code/modules/hallucinations/hallucination_fakeattack.dm b/code/modules/hallucinations/hallucination_fakeattack.dm
new file mode 100644
index 00000000000..70ba9d36a04
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_fakeattack.dm
@@ -0,0 +1,20 @@
+//Fake attack
+/datum/hallucination/fakeattack
+ min_power = 30
+
+/datum/hallucination/fakeattack/can_affect(var/mob/living/victim)
+ . = ..() && (locate(/mob/living) in oview(victim,1))
+
+/datum/hallucination/fakeattack/start()
+ . = ..()
+ for(var/mob/living/assailant in oview(holder,1))
+ to_chat(holder, SPAN_DANGER("\The [assailant] has punched \the [holder]!"))
+ holder.playsound_local(get_turf(holder),"punch",50)
+
+//Fake injection
+/datum/hallucination/fakeattack/hypo
+ min_power = 30
+
+/datum/hallucination/fakeattack/hypo/start()
+ . = ..()
+ to_chat(holder, SPAN_NOTICE("You feel a tiny prick!"))
diff --git a/code/modules/hallucinations/hallucination_gunfire.dm b/code/modules/hallucinations/hallucination_gunfire.dm
new file mode 100644
index 00000000000..d41d6289e65
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_gunfire.dm
@@ -0,0 +1,31 @@
+//Hearing someone being shot twice
+/datum/hallucination/gunfire
+ duration = 15
+ min_power = 30
+ var/gunshot
+ var/turf/origin
+ var/static/list/gunshot_sounds = list(
+ 'sound/weapons/gunshot/gunshot_strong.ogg',
+ 'sound/weapons/gunshot/gunshot2.ogg',
+ 'sound/weapons/gunshot/shotgun.ogg',
+ 'sound/weapons/gunshot/gunshot.ogg',
+ 'sound/weapons/Taser.ogg'
+ )
+
+/datum/hallucination/gunfire/start()
+ . = ..()
+ gunshot = pick(gunshot_sounds)
+ var/turf/holder_turf = get_turf(holder)
+ if(isturf(holder_turf))
+ origin = locate(holder_turf.x + rand(4,8), holder_turf.y + rand(4,8), holder_turf.z)
+ if(origin)
+ holder.playsound_local(origin, gunshot, 50)
+
+/datum/hallucination/gunfire/end()
+ . = ..()
+ if(holder && origin)
+ holder.playsound_local(origin, gunshot, 50)
+
+/datum/hallucination/gunfire/Destroy()
+ origin = null
+ return ..()
\ No newline at end of file
diff --git a/code/modules/hallucinations/hallucination_mirage.dm b/code/modules/hallucinations/hallucination_mirage.dm
new file mode 100644
index 00000000000..279e8db3594
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_mirage.dm
@@ -0,0 +1,76 @@
+//Seeing stuff
+/datum/hallucination/mirage
+ duration = 30 SECONDS
+ max_power = 30
+ var/number = 1
+ var/list/things = list() //list of images to display
+ var/static/list/trash_states = icon_states('icons/obj/trash.dmi')
+
+/datum/hallucination/mirage/proc/generate_mirage()
+ return image('icons/obj/trash.dmi', pick(trash_states), layer = BELOW_TABLE_LAYER)
+
+/datum/hallucination/mirage/start()
+ . = ..()
+ var/list/possible_points = list()
+ for(var/turf/simulated/floor/F in view(holder, world.view+1))
+ possible_points += F
+ if(possible_points.len)
+ for(var/i = 1 to number)
+ var/image/thing = generate_mirage()
+ things += thing
+ thing.loc = pick(possible_points)
+ if(holder?.client && length(things))
+ holder.client.images += things
+
+/datum/hallucination/mirage/end()
+ if(holder?.client)
+ holder.client.images -= things
+ return ..()
+
+//Blood and aftermath of firefight
+/datum/hallucination/mirage/carnage
+ min_power = 50
+ number = 10
+ var/static/list/carnage_states = list(
+ "mfloor1",
+ "mfloor2",
+ "mfloor3",
+ "mfloor4",
+ "mfloor5",
+ "mfloor6",
+ "mfloor7"
+ )
+
+/datum/hallucination/mirage/carnage/generate_mirage()
+ var/image/I
+ if(prob(50))
+ I = image('icons/effects/blood.dmi', pick(carnage_states), layer = BELOW_TABLE_LAYER)
+ I.color = COLOR_BLOOD_HUMAN
+ else
+ I = image('icons/obj/ammo.dmi', "s-casing-spent", layer = BELOW_TABLE_LAYER)
+ I.layer = BELOW_TABLE_LAYER
+ I.dir = pick(global.alldirs)
+ I.pixel_x = rand(-10,10)
+ I.pixel_y = rand(-10,10)
+ return I
+
+//LOADSEMONEY
+/datum/hallucination/mirage/money
+ min_power = 20
+ max_power = 45
+ number = 2
+ var/static/obj/item/cash/cash
+
+/datum/hallucination/mirage/money/New()
+ if(!cash)
+ cash = new /obj/item/cash/c500
+ cash.update_icon()
+ cash.compile_overlays()
+ ..()
+
+/datum/hallucination/mirage/money/generate_mirage()
+ var/image/I = new
+ I.appearance = cash
+ I.layer = BELOW_TABLE_LAYER
+ qdel(cash)
+ return I
diff --git a/code/modules/hallucinations/hallucination_skitters.dm b/code/modules/hallucinations/hallucination_skitters.dm
new file mode 100644
index 00000000000..2ab7f1fdf35
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_skitters.dm
@@ -0,0 +1,4 @@
+//Spiderling skitters
+/datum/hallucination/skitter/start()
+ . = ..()
+ to_chat(holder, SPAN_NOTICE("The spiderling skitters[pick(" away"," around","")]."))
diff --git a/code/modules/hallucinations/hallucination_sound.dm b/code/modules/hallucinations/hallucination_sound.dm
new file mode 100644
index 00000000000..82e2389713b
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_sound.dm
@@ -0,0 +1,71 @@
+//Playing a random sound
+/datum/hallucination/imagined_sound/proc/get_imagined_sounds()
+ var/static/list/sounds = list(
+ 'sound/machines/airlock.ogg',
+ 'sound/effects/explosionfar.ogg',
+ 'sound/machines/windowdoor.ogg',
+ 'sound/machines/twobeep.ogg'
+ )
+ return sounds
+
+/datum/hallucination/imagined_sound/start()
+ . = ..()
+ var/turf/holder_turf = get_turf(holder)
+ if(holder_turf)
+ holder_turf = locate(holder_turf.x + rand(6,11), holder_turf.y + rand(6,11), holder_turf.z)
+ if(holder_turf)
+ holder.playsound_local(holder_turf, pick(get_imagined_sounds()) ,70)
+
+/datum/hallucination/imagined_sound/tools/get_imagined_sounds()
+ var/static/list/imagined_sounds = list(
+ 'sound/items/Ratchet.ogg',
+ 'sound/items/Welder.ogg',
+ 'sound/items/Crowbar.ogg',
+ 'sound/items/Screwdriver.ogg'
+ )
+ return imagined_sounds
+
+/datum/hallucination/imagined_sound/danger
+ min_power = 30
+
+/datum/hallucination/imagined_sound/danger/get_imagined_sounds()
+ var/static/list/imagined_sounds = list(
+ 'sound/effects/Explosion1.ogg',
+ 'sound/effects/Explosion2.ogg',
+ 'sound/effects/Glassbr1.ogg',
+ 'sound/effects/Glassbr2.ogg',
+ 'sound/effects/Glassbr3.ogg',
+ 'sound/weapons/smash.ogg'
+ )
+ return imagined_sounds
+
+/datum/hallucination/imagined_sound/spooky
+ min_power = 50
+
+/datum/hallucination/imagined_sound/spooky/get_imagined_sounds()
+ var/static/list/imagined_sounds = list(
+ 'sound/effects/ghost.ogg',
+ 'sound/effects/ghost2.ogg',
+ 'sound/effects/Heart Beat.ogg',
+ 'sound/effects/screech.ogg',
+ 'sound/hallucinations/behind_you1.ogg',
+ 'sound/hallucinations/behind_you2.ogg',
+ 'sound/hallucinations/far_noise.ogg',
+ 'sound/hallucinations/growl1.ogg',
+ 'sound/hallucinations/growl2.ogg',
+ 'sound/hallucinations/growl3.ogg',
+ 'sound/hallucinations/im_here1.ogg',
+ 'sound/hallucinations/im_here2.ogg',
+ 'sound/hallucinations/i_see_you1.ogg',
+ 'sound/hallucinations/i_see_you2.ogg',
+ 'sound/hallucinations/look_up1.ogg',
+ 'sound/hallucinations/look_up2.ogg',
+ 'sound/hallucinations/over_here1.ogg',
+ 'sound/hallucinations/over_here2.ogg',
+ 'sound/hallucinations/over_here3.ogg',
+ 'sound/hallucinations/turn_around1.ogg',
+ 'sound/hallucinations/turn_around2.ogg',
+ 'sound/hallucinations/veryfar_noise.ogg',
+ 'sound/hallucinations/wail.ogg'
+ )
+ return imagined_sounds
diff --git a/code/modules/hallucinations/hallucination_spiderbabies.dm b/code/modules/hallucinations/hallucination_spiderbabies.dm
new file mode 100644
index 00000000000..f7b4b3bb94a
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_spiderbabies.dm
@@ -0,0 +1,11 @@
+//Spiders in your body
+/datum/hallucination/spiderbabies
+ min_power = 40
+
+/datum/hallucination/spiderbabies/start()
+ . = ..()
+ var/list/limbs = holder.get_external_organs()
+ if(!LAZYLEN(limbs))
+ return
+ var/obj/O = pick(limbs)
+ to_chat(holder, SPAN_WARNING("You feel something [pick("moving","squirming","skittering")] inside of your [O.name]!"))
diff --git a/code/modules/hallucinations/hallucination_talking.dm b/code/modules/hallucinations/hallucination_talking.dm
new file mode 100644
index 00000000000..a472010a2f3
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_talking.dm
@@ -0,0 +1,41 @@
+//Hearing someone talking to/about you.
+/datum/hallucination/talking/can_affect(var/mob/living/victim)
+ return ..() && (locate(/mob/living) in oview(victim))
+
+/datum/hallucination/talking/start()
+ . = ..()
+ var/sanity = 5 //even insanity needs some sanity
+ for(var/mob/living/talker in oview(holder))
+ if(talker.stat)
+ continue
+ var/message
+ if(prob(80))
+ var/list/names = list()
+ var/lastname = copytext(holder.real_name, findtext(holder.real_name, " ")+1)
+ var/firstname = copytext(holder.real_name, 1, findtext(holder.real_name, " "))
+ if(lastname) names += lastname
+ if(firstname) names += firstname
+ if(!names.len)
+ names += holder.real_name
+ var/add = prob(20) ? ", [pick(names)]" : ""
+ var/list/phrases = list("[prob(50) ? "Hey, " : ""][pick(names)]!","[prob(50) ? "Hey, " : ""][pick(names)]?","Get out[add]!","Go away[add].","What are you doing[add]?","Where's your ID[add]?")
+ if(holder.hallucination_power > 50)
+ phrases += list("What did you come here for[add]?","Don't touch me[add].","You're not getting out of here[add].", "You are a failure, [pick(names)].","Just kill yourself already, [pick(names)].","Put on some clothes[add].","Take off your clothes[add].")
+ message = pick(phrases)
+ to_chat(holder,"[talker.name] [holder.say_quote(message)], \"[message]\"")
+ else
+ to_chat(holder,"[talker.name] points at [holder.name]")
+ to_chat(holder,"[talker.name] says something softly.")
+
+ var/speech_state = holder.check_speech_punctuation_state(message)
+ if(speech_state)
+ var/image/speech_bubble = image('icons/mob/talk.dmi', talker, speech_state)
+ addtimer(CALLBACK(src, PROC_REF(qdel_image), speech_bubble), 3 SECONDS)
+ show_image(holder, speech_bubble)
+
+ sanity-- //don't spam them in very populated rooms.
+ if(!sanity)
+ break
+
+/datum/hallucination/talking/proc/qdel_image(var/image/speech_bubble)
+ qdel(speech_bubble)
diff --git a/code/modules/hallucinations/hallucination_telepathy.dm b/code/modules/hallucinations/hallucination_telepathy.dm
new file mode 100644
index 00000000000..36a982c5a36
--- /dev/null
+++ b/code/modules/hallucinations/hallucination_telepathy.dm
@@ -0,0 +1,42 @@
+//Fake telepathy
+/datum/hallucination/telepathy
+ allow_duplicates = 0
+ duration = 20 MINUTES
+
+/datum/hallucination/telepathy/start()
+ . = ..()
+ to_chat(holder, SPAN_NOTICE("You expand your mind outwards."))
+ holder.verbs += /mob/living/carbon/human/proc/fakeremotesay
+
+/datum/hallucination/telepathy/end()
+ . = ..()
+ if(holder)
+ holder.verbs -= /mob/living/carbon/human/proc/fakeremotesay
+
+/mob/living/carbon/human/proc/fakeremotesay()
+ set name = "Telepathic Message"
+ set category = "Superpower"
+
+ if(!hallucination_power)
+ src.verbs -= /mob/living/carbon/human/proc/fakeremotesay
+ return
+
+ if(stat)
+ to_chat(usr, SPAN_WARNING("You're not in any state to use your powers right now!"))
+ return
+
+ if(has_chemical_effect(CE_MIND, 1))
+ to_chat(usr, SPAN_WARNING("Chemicals in your blood prevent you from using your power!"))
+
+ var/list/creatures = list()
+ for(var/mob/living/carbon/C in SSmobs.mob_list)
+ creatures += C
+ creatures -= usr
+ var/mob/target = input("Who do you want to project your mind to?") as null|anything in creatures
+ if (isnull(target))
+ return
+
+ var/msg = sanitize(input(usr, "What do you wish to transmit"))
+ show_message(SPAN_NOTICE("You project your mind into [target.name]: \"[msg]\""))
+ if(!stat && prob(20))
+ say(msg)
diff --git a/code/modules/holidays/_holiday.dm b/code/modules/holidays/_holiday.dm
index 8e64c191437..ed04429c955 100644
--- a/code/modules/holidays/_holiday.dm
+++ b/code/modules/holidays/_holiday.dm
@@ -25,10 +25,8 @@ var/global/datum/holiday/current_holiday
/proc/set_holiday_data(var/datum/holiday/holiday_data, var/refresh_station_name = FALSE)
if(istext(holiday_data))
holiday_data = new(list("name" = holiday_data))
- if(!holiday_data || !istype(holiday_data))
- return
- global.current_holiday = holiday_data
+ if(istype(holiday_data))
+ global.current_holiday = holiday_data
if(refresh_station_name)
- global.using_map.station_name = null
- station_name()
+ global.using_map.station_name = initial(global.using_map.station_name)
world.update_status()
diff --git a/code/modules/holidays/holiday_hook.dm b/code/modules/holidays/holiday_hook.dm
index 766ef3fb3b7..6b6870c5bb0 100644
--- a/code/modules/holidays/holiday_hook.dm
+++ b/code/modules/holidays/holiday_hook.dm
@@ -1,27 +1,37 @@
-//Uncommenting ALLOW_HOLIDAYS in config.txt will enable this hook.
+//Uncommenting ALLOW_HOLIDAYS in configuration will enable this hook.
/hook/startup/proc/updateHoliday()
- if(config?.allow_holidays)
- var/list/holidays = cached_json_decode(safe_file2text("config/holidays.json"), FALSE)
- if(length(holidays))
-
- var/c_year = text2num(time2text(world.timeofday, "YY"))
- var/c_month = text2num(time2text(world.timeofday, "MM"))
- var/c_day = text2num(time2text(world.timeofday, "DD"))
- var/c_weekday = lowertext(time2text(world.timeofday, "DDD"))
-
- for(var/list/holiday_data in holidays)
-
- var/h_year = holiday_data["year"]
- var/h_month = holiday_data["month"]
- var/h_day = holiday_data["day"]
- var/h_weekday = holiday_data["weekday"]
-
- if((isnull(h_year) || h_year == c_year) && \
- (isnull(h_month) || h_month == c_month) && \
- (isnull(h_day) || h_day == c_day) && \
- (isnull(h_weekday) || h_weekday == c_weekday))
- var/holiday_path = text2path(holiday_data["path"]) || /datum/holiday
- set_holiday_data(new holiday_path(holiday_data))
- break
-
- return 1
\ No newline at end of file
+ update_holiday()
+ return TRUE
+
+/proc/update_holiday()
+
+ if(!get_config_value(/decl/config/toggle/allow_holidays))
+ set_holiday_data(null, TRUE)
+ return FALSE
+
+ var/list/holidays = cached_json_decode(safe_file2text("config/holidays.json"), FALSE)
+ if(!length(holidays))
+ set_holiday_data(null, TRUE)
+ return FALSE
+
+ var/c_year = text2num(time2text(world.timeofday, "YY"))
+ var/c_month = text2num(time2text(world.timeofday, "MM"))
+ var/c_day = text2num(time2text(world.timeofday, "DD"))
+ var/c_weekday = lowertext(time2text(world.timeofday, "DDD"))
+
+ for(var/list/holiday_data in holidays)
+
+ var/h_year = holiday_data["year"]
+ var/h_month = holiday_data["month"]
+ var/h_day = holiday_data["day"]
+ var/h_weekday = holiday_data["weekday"]
+
+ if((isnull(h_year) || h_year == c_year) && \
+ (isnull(h_month) || h_month == c_month) && \
+ (isnull(h_day) || h_day == c_day) && \
+ (isnull(h_weekday) || h_weekday == c_weekday))
+ var/holiday_path = text2path(holiday_data["path"]) || /datum/holiday
+ set_holiday_data(new holiday_path(holiday_data))
+ return TRUE
+
+ return FALSE
diff --git a/code/modules/holidays/holiday_name.dm b/code/modules/holidays/holiday_name.dm
index b682a49162a..e07e9776a40 100644
--- a/code/modules/holidays/holiday_name.dm
+++ b/code/modules/holidays/holiday_name.dm
@@ -5,11 +5,13 @@
set category = "Fun"
set desc = "Override the default holiday."
- if(!check_rights(R_SERVER))
+ if(!check_rights(R_SERVER))
return
T = sanitize(T, MAX_NAME_LEN)
if(T)
+ if(get_config_value(/decl/config/toggle/allow_holidays))
+ set_config_value(/decl/config/toggle/allow_holidays, TRUE)
set_holiday_data(T, refresh_station_name = TRUE)
to_world("[global.current_holiday.announcement]
")
message_admins(SPAN_NOTICE("ADMIN: Event: [key_name(src)] force-set the holiday to \"[global.current_holiday.name]\""))
diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm
index 1cdbbed9a10..51a5e16fb77 100644
--- a/code/modules/holodeck/HolodeckControl.dm
+++ b/code/modules/holodeck/HolodeckControl.dm
@@ -67,7 +67,7 @@
dat += "([prog])
"
dat += "
"
- dat += "(Turn Off)
"
+ dat += "(Turn Off)
"
dat += "
"
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
"
@@ -198,7 +198,7 @@
if(!checkInteg(linkedholodeck))
damaged = 1
- loadProgram(global.using_map.holodeck_programs["turnoff"], 0)
+ loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "turnoff"], 0)
active = 0
update_use_power(POWER_USE_IDLE)
visible_message("The holodeck overloads!", null, "You hear electricity arcing!", range = 10)
@@ -230,9 +230,9 @@
//Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn)
- loadProgram(global.using_map.holodeck_programs["emptycourt"], 0)
+ loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "emptycourt"], 0)
else
- loadProgram(global.using_map.holodeck_programs["turnoff"], 0)
+ loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "turnoff"], 0)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1)
@@ -324,7 +324,7 @@
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Turn it back to the regular non-holographic room
- loadProgram(global.using_map.holodeck_programs["turnoff"], 0)
+ loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "turnoff"], 0)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck)
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index e6df389246d..3ef581d0c4d 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -98,6 +98,7 @@
icon = 'icons/misc/beach.dmi'
base_icon = 'icons/misc/beach.dmi'
initial_flooring = null
+ abstract_type = /turf/simulated/floor/holofloor/beach
/turf/simulated/floor/holofloor/beach/sand
name = "sand"
@@ -206,9 +207,15 @@
visible_message("[src] fades away as it shatters!")
qdel(src)
-/obj/structure/bed/chair/holochair/attackby(obj/item/W, mob/user)
- if(IS_WRENCH(W))
- to_chat(user, ("It's a holochair, you can't dismantle it!"))
+/obj/structure/bed/holobed
+ tool_interaction_flags = 0
+ holographic = TRUE
+ material = /decl/material/solid/metal/aluminium/holographic
+
+/obj/structure/bed/chair/holochair
+ tool_interaction_flags = 0
+ holographic = TRUE
+ material = /decl/material/solid/metal/aluminium/holographic
/obj/item/holo
damtype = PAIN
@@ -225,7 +232,7 @@
throw_range = 5
throwforce = 0
w_class = ITEM_SIZE_SMALL
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD
+ atom_flags = ATOM_FLAG_NO_BLOOD
base_parry_chance = 50
var/active = 0
var/item_color
@@ -270,19 +277,10 @@
return
//BASKETBALL OBJECTS
-
-/obj/item/beach_ball/holoball
- icon = 'icons/obj/basketball.dmi'
- icon_state = "basketball"
- name = "basketball"
- item_state = "basketball"
- desc = "Here's your chance, do your dance at the Space Jam."
- w_class = ITEM_SIZE_LARGE //Stops people from hiding it in their pockets
-
/obj/structure/holohoop
name = "basketball hoop"
desc = "Boom, Shakalaka!"
- icon = 'icons/obj/basketball.dmi'
+ icon = 'icons/obj/structures/basketball.dmi'
icon_state = "hoop"
anchored = TRUE
density = TRUE
@@ -303,19 +301,10 @@
return ..(mover, target, height, air_group)
//VOLEYBALL OBJECTS
-
-/obj/item/beach_ball/holovolleyball
- icon = 'icons/obj/basketball.dmi'
- icon_state = "volleyball"
- name = "voleyball"
- item_state = "volleyball"
- desc = "You can be my wingman anytime."
- w_class = ITEM_SIZE_LARGE //Stops people from hiding it in their pockets
-
/obj/structure/holonet
name = "net"
desc = "Bullshit, you can be mine!"
- icon = 'icons/obj/basketball.dmi'
+ icon = 'icons/obj/structures/volleyball.dmi'
icon_state = "volleynet_mid"
density = TRUE
anchored = TRUE
diff --git a/code/modules/holomap/holomap.dm b/code/modules/holomap/holomap.dm
index 5d6fe03e1bf..932c0b20048 100644
--- a/code/modules/holomap/holomap.dm
+++ b/code/modules/holomap/holomap.dm
@@ -13,7 +13,7 @@
construct_state = /decl/machine_construction/default/panel_closed
base_type = /obj/machinery/holomap
layer = ABOVE_WINDOW_LAYER // Above windows.
- directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}"
+ directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}'
var/light_power_on = 1
var/light_range_on = 2
@@ -99,8 +99,8 @@
user.client.images |= holomap_datum.station_map
watching_mob = user
- events_repository.register(/decl/observ/moved, watching_mob, src, /obj/machinery/holomap/proc/checkPosition)
- events_repository.register(/decl/observ/destroyed, watching_mob, src, /obj/machinery/holomap/proc/stopWatching)
+ events_repository.register(/decl/observ/moved, watching_mob, src, TYPE_PROC_REF(/obj/machinery/holomap, checkPosition))
+ events_repository.register(/decl/observ/destroyed, watching_mob, src, TYPE_PROC_REF(/obj/machinery/holomap, stopWatching))
update_use_power(POWER_USE_ACTIVE)
if(bogus)
@@ -124,7 +124,7 @@
if(watching_mob.client)
animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING)
var/mob/M = watching_mob
- addtimer(CALLBACK(src, .proc/clear_image, M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out
+ addtimer(CALLBACK(src, PROC_REF(clear_image), M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out
events_repository.unregister(/decl/observ/moved, watching_mob, src)
events_repository.unregister(/decl/observ/destroyed, watching_mob, src)
watching_mob = null
@@ -174,99 +174,13 @@
if(prob(25))
set_broken()
-/obj/screen/levelselect
- icon = 'icons/misc/mark.dmi'
- layer = HUD_ITEM_LAYER
- var/active = TRUE
- var/datum/station_holomap/owner = null
-
-/obj/screen/levelselect/Initialize(mapload, datum/station_holomap/_owner)
- . = ..()
- owner = _owner
-
-/obj/screen/levelselect/Click()
- return (!usr.incapacitated() && !isghost(usr))
-/obj/screen/levelselect/up
- icon_state = "fup"
-
-/obj/screen/levelselect/up/Click()
- if(..())
- if(owner)
- owner.set_level(owner.displayed_level - 1)
-
-/obj/screen/levelselect/down
- icon_state = "fdn"
-
-/obj/screen/levelselect/down/Click()
- if(..())
- if(owner)
- owner.set_level(owner.displayed_level + 1)
-
-/obj/screen/legend
- icon = null
- maptext_height = 128
- maptext_width = 128
- layer = HUD_ITEM_LAYER
- pixel_x = HOLOMAP_LEGEND_X
- appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR
- var/saved_color
- var/datum/station_holomap/owner = null
- var/has_areas = FALSE
-
-/obj/screen/legend/cursor
- icon = 'icons/misc/holomap_markers.dmi'
- icon_state = "you"
- maptext_x = 11
- pixel_x = HOLOMAP_LEGEND_X - 3
- has_areas = TRUE
-
-/obj/screen/legend/Initialize(mapload, map_color, text)
- . = ..()
- saved_color = map_color
- maptext = "[text]"
- alpha = 255
-
-/obj/screen/legend/Click(location, control, params)
- if(!usr.incapacitated() && !isghost(usr))
- if(istype(owner))
- owner.legend_select(src)
-
-/obj/screen/legend/proc/Setup(z_level)
- has_areas = FALSE
- //Get the areas for this z level and mark if we're empty
- overlays.Cut()
- for(var/area/A in SSminimap.holomaps[z_level].holomap_areas)
- if(A.holomap_color == saved_color)
- var/image/area = image(SSminimap.holomaps[z_level].holomap_areas[A])
- area.pixel_x = ((HOLOMAP_ICON_SIZE / 2) - WORLD_CENTER_X) - pixel_x
- area.pixel_y = ((HOLOMAP_ICON_SIZE / 2) - WORLD_CENTER_Y) - pixel_y
- overlays += area
- has_areas = TRUE
-
-//What happens when we are clicked on / when another is clicked on
-/obj/screen/legend/proc/Select()
- //Start blinking
- animate(src, alpha = 0, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT)
- animate(alpha = 254, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT)
-
-/obj/screen/legend/proc/Deselect()
- //Stop blinking
- animate(src, flags = ANIMATION_END_NOW)
-
-//Cursor doesnt do anything specific.
-/obj/screen/legend/cursor/Setup()
-
-/obj/screen/legend/cursor/Select()
-
-/obj/screen/legend/cursor/Deselect()
-
// Simple datum to keep track of a running holomap. Each machine capable of displaying the holomap will have one.
/datum/station_holomap
var/image/station_map
var/image/cursor
- var/list/obj/screen/legend/legend
- var/list/obj/screen/maptexts
- var/list/obj/screen/levelselect/lbuttons
+ var/list/obj/screen/holomap_legend/legend
+ var/list/obj/screen/holomap_text/maptexts
+ var/list/obj/screen/holomap_level_select/lbuttons
var/list/image/levels
var/list/z_levels
var/z = -1
@@ -293,17 +207,17 @@
if(!LAZYLEN(legend) || reinit)
QDEL_LIST_ASSOC_VAL(legend)
legend = list(
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_COMMAND, "â– Command"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_SECURITY, "â– Security"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_MEDICAL, "â– Medical"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_SCIENCE, "â– Research"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_EXPLORATION, "â– Exploration"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_ENGINEERING, "â– Engineering"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_CARGO, "â– Supply"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_AIRLOCK, "â– Airlock"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_ESCAPE, "â– Escape"),
- new /obj/screen/legend(null, HOLOMAP_AREACOLOR_CREW, "â– Crew"),
- new /obj/screen/legend/cursor(null, HOLOMAP_AREACOLOR_BASE, "You are here")
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_COMMAND, "â– Command"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_SECURITY, "â– Security"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_MEDICAL, "â– Medical"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_SCIENCE, "â– Research"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_EXPLORATION, "â– Exploration"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_ENGINEERING, "â– Engineering"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_CARGO, "â– Supply"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_AIRLOCK, "â– Airlock"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_ESCAPE, "â– Escape"),
+ new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_CREW, "â– Crew"),
+ new /obj/screen/holomap_legend/cursor(null, null, null, null, null, HOLOMAP_AREACOLOR_BASE, "You are here")
)
if(reinit)
QDEL_NULL_LIST(lbuttons)
@@ -333,8 +247,8 @@
if(z_count > 1)
if(!LAZYLEN(lbuttons))
//Add the buttons for switching levels
- LAZYADD(lbuttons, new /obj/screen/levelselect/up(null, src))
- LAZYADD(lbuttons, new /obj/screen/levelselect/down(null, src))
+ LAZYADD(lbuttons, new /obj/screen/holomap_level_select/up(null, null, null, null, null, src))
+ LAZYADD(lbuttons, new /obj/screen/holomap_level_select/down(null, null, null, null, null, src))
lbuttons[1].pixel_y = HOLOMAP_MARGIN - 22
lbuttons[2].pixel_y = HOLOMAP_MARGIN + 5
lbuttons[1].pixel_x = 254
@@ -358,12 +272,8 @@
//LAZYADD(levels, map_image)
LAZYSET(levels, "[O.map_z[level]]", map_image)
- var/obj/screen/maptext_overlay = new(null)
- maptext_overlay.icon = null
- maptext_overlay.layer = HUD_ITEM_LAYER
- maptext_overlay.appearance_flags |= RESET_COLOR
+ var/obj/screen/holomap_text/maptext_overlay = new(null)
maptext_overlay.maptext = STYLE_SMALLFONTS_OUTLINE("LEVEL [level-1]", 7, COLOR_WHITE, COLOR_BLACK)
- maptext_overlay.maptext_width = 96
maptext_overlay.pixel_x = (HOLOMAP_ICON_SIZE / 2) - (maptext_overlay.maptext_width / 2)
maptext_overlay.pixel_y = HOLOMAP_MARGIN
@@ -389,8 +299,8 @@
//Fix legend position
var/pixel_y = HOLOMAP_LEGEND_Y
- for(var/obj/screen/legend/element in legend)
- element.owner = src
+ for(var/obj/screen/holomap_legend/element in legend)
+ element.holomap = src
element.pixel_y = pixel_y //Set adjusted pixel y as it will be needed for area placement
element.Setup(z_levels[displayed_level])
if(element.has_areas)
@@ -403,12 +313,12 @@
if(displayed_level < z_levels.len)
station_map.vis_contents += lbuttons[2]
-/datum/station_holomap/proc/legend_select(obj/screen/legend/L)
+/datum/station_holomap/proc/legend_select(obj/screen/holomap_legend/L)
legend_deselect()
L.Select()
/datum/station_holomap/proc/legend_deselect()
- for(var/obj/screen/legend/entry in legend)
+ for(var/obj/screen/holomap_legend/entry in legend)
entry.Deselect()
/datum/station_holomap/proc/initialize_holomap_bogus()
diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm
index 0c652b9131f..2ae979cefab 100644
--- a/code/modules/hydroponics/beekeeping/beehive.dm
+++ b/code/modules/hydroponics/beekeeping/beehive.dm
@@ -202,7 +202,7 @@
qdel(H)
spawn(50)
new /obj/item/honey_frame(loc)
- new /obj/item/stack/wax(loc)
+ new /obj/item/stack/material/bar(loc, 1, /decl/material/solid/organic/wax)
honey += processing
processing = 0
icon_state = "centrifuge"
@@ -231,14 +231,14 @@
icon = 'icons/obj/beekeeping.dmi'
icon_state = "honeyframe"
w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
var/honey = 0
/obj/item/honey_frame/filled
name = "filled beehive frame"
desc = "A frame for the beehive that the bees have filled with honeycombs."
honey = 20
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
/obj/item/honey_frame/filled/Initialize()
. = ..()
@@ -249,7 +249,7 @@
desc = "Contains everything you need to build a beehive."
icon = 'icons/obj/apiary_bees_etc.dmi'
icon_state = "apiary"
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
/obj/item/beehive_assembly/attack_self(var/mob/user)
to_chat(user, "You start assembling \the [src]...")
@@ -258,23 +258,12 @@
new /obj/machinery/beehive(get_turf(user))
qdel(src)
-/obj/item/stack/wax
- name = "wax"
- singular_name = "wax piece"
- desc = "Soft substance produced by bees. Used to make candles."
- icon = 'icons/obj/beekeeping.dmi'
- icon_state = "wax"
-
-var/global/list/wax_recipes = list(new /datum/stack_recipe/candle)
-/obj/item/stack/wax/get_recipes()
- return global.wax_recipes
-
/obj/item/bee_pack
name = "bee pack"
desc = "Contains a queen bee and some worker bees. Everything you'll need to start a hive!"
icon = 'icons/obj/beekeeping.dmi'
icon_state = "beepack"
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/full = 1
/obj/item/bee_pack/Initialize()
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 1757a7e5d19..e82d24705fe 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -6,7 +6,8 @@
randpixel = 5
desc = "Nutritious! Probably."
slot_flags = SLOT_HOLSTER
- material = /decl/material/solid/plantmatter
+ material = /decl/material/solid/organic/plantmatter
+ is_spawnable_type = FALSE // Use the Spawn-Fruit verb instead.
var/plantname = "apple" // Setting as a default in case this is spawned manually.
var/datum/seed/seed
@@ -125,26 +126,24 @@
fruit_leaves.color = seed.get_trait(TRAIT_PLANT_COLOUR)
add_overlay(fruit_leaves)
-/obj/item/chems/food/grown/Crossed(var/mob/living/M)
- set waitfor = FALSE
- if(seed && seed.get_trait(TRAIT_JUICY) == 2)
- if(istype(M))
+/obj/item/chems/food/grown/Crossed(atom/movable/AM)
+ if(!isliving(AM) || !seed || seed.get_trait(TRAIT_JUICY) != 2)
+ return
- if(M.buckled)
- return
+ var/mob/living/M = AM
+ if(M.buckled || MOVING_DELIBERATELY(M))
+ return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/shoes = H.get_equipped_item(slot_shoes_str)
- if(shoes && shoes.item_flags & ITEM_FLAG_NOSLIP)
- return
+ var/obj/item/shoes = M.get_equipped_item(slot_shoes_str)
+ if(shoes && shoes.item_flags & ITEM_FLAG_NOSLIP)
+ return
- to_chat(M, SPAN_DANGER("You slipped on \the [src]!"))
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- SET_STATUS_MAX(M, STAT_STUN, 8)
- SET_STATUS_MAX(M, STAT_WEAK, 5)
- seed.thrown_at(src,M)
- QDEL_IN(src, 0)
+ to_chat(M, SPAN_DANGER("You slipped on \the [src]!"))
+ playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
+ SET_STATUS_MAX(M, STAT_STUN, 8)
+ SET_STATUS_MAX(M, STAT_WEAK, 5)
+ seed.thrown_at(src,M)
+ QDEL_IN(src, 0)
/obj/item/chems/food/grown/throw_impact(atom/hit_atom)
..()
@@ -152,13 +151,13 @@
seed.thrown_at(src,hit_atom)
var/global/list/_wood_materials = list(
- /decl/material/solid/wood,
- /decl/material/solid/wood/mahogany,
- /decl/material/solid/wood/maple,
- /decl/material/solid/wood/ebony,
- /decl/material/solid/wood/walnut,
- /decl/material/solid/wood/bamboo,
- /decl/material/solid/wood/yew
+ /decl/material/solid/organic/wood,
+ /decl/material/solid/organic/wood/mahogany,
+ /decl/material/solid/organic/wood/maple,
+ /decl/material/solid/organic/wood/ebony,
+ /decl/material/solid/organic/wood/walnut,
+ /decl/material/solid/organic/wood/bamboo,
+ /decl/material/solid/organic/wood/yew
)
/obj/item/chems/food/grown/attackby(var/obj/item/W, var/mob/user)
diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm
index 1686496381b..e2798fffd15 100644
--- a/code/modules/hydroponics/grown_inedible.dm
+++ b/code/modules/hydroponics/grown_inedible.dm
@@ -4,7 +4,7 @@
/obj/item/grown // Grown weapons
name = "grown_weapon"
- material = /decl/material/solid/plantmatter
+ material = /decl/material/solid/organic/plantmatter
var/plantname
var/potency = 1
@@ -45,7 +45,7 @@
throwforce = 0
throw_speed = 4
throw_range = 20
- material = /decl/material/solid/plantmatter
+ material = /decl/material/solid/organic/plantmatter
/obj/item/corncob/attackby(obj/item/W, mob/user)
..()
@@ -65,5 +65,4 @@
throwforce = 0
throw_speed = 4
throw_range = 20
- material = /decl/material/solid/plantmatter
-
\ No newline at end of file
+ material = /decl/material/solid/organic/plantmatter
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 3a359e1582e..c3b8e583319 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -270,7 +270,7 @@
origin_turf.visible_message(SPAN_DANGER("\The [thrown] splatters against [target]!"))
splatter(origin_turf,thrown)
-/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/check_only)
+/datum/seed/proc/handle_plant_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/check_only)
var/health_change = 0
// Handle gas consumption.
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 8283e149e65..bdcb31e17a9 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -534,7 +534,7 @@
name = "towercap"
seed_name = "towercap"
display_name = "towercap thicket"
- chems = list(/decl/material/solid/wood = list(10,1))
+ chems = list(/decl/material/solid/organic/wood = list(10,1))
mutants = null
/datum/seed/mushroom/towercap/New()
@@ -1319,7 +1319,7 @@
name = "bamboo"
seed_name = "bamboo"
display_name = "bamboo thicket"
- chems = list(/decl/material/solid/wood/bamboo = list(6,1))
+ chems = list(/decl/material/solid/organic/wood/bamboo = list(6,1))
mutants = null
/datum/seed/bamboo/New()
diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm
index 29813dbc15b..2a86f4f951d 100644
--- a/code/modules/hydroponics/spreading/spreading.dm
+++ b/code/modules/hydroponics/spreading/spreading.dm
@@ -45,8 +45,8 @@
pass_flags = PASS_FLAG_TABLE
mouse_opacity = MOUSE_OPACITY_NORMAL
- var/health = 10
- var/max_health = 100
+ health = 10
+ max_health = 100
var/growth_threshold = 0
var/growth_type = 0
var/max_growth = 0
@@ -129,7 +129,7 @@
layer = (seed && seed.force_layer) ? seed.force_layer : ABOVE_OBJ_LAYER
if(growth_type in list(GROWTH_VINES,GROWTH_BIOMASS))
set_opacity(1)
- if(islist(seed.chems) && !isnull(seed.chems[/decl/material/solid/wood]))
+ if(islist(seed.chems) && !isnull(seed.chems[/decl/material/solid/organic/wood]))
set_density(1)
set_opacity(1)
diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm
index 770a7b64168..6125017277d 100644
--- a/code/modules/hydroponics/spreading/spreading_growth.dm
+++ b/code/modules/hydroponics/spreading/spreading_growth.dm
@@ -43,10 +43,10 @@
return
//Take damage from bad environment if any
- adjust_health(-seed.handle_environment(T,T.return_air(),null,1))
+ adjust_health(-seed.handle_plant_environment(T,T.return_air(),null,1))
if(health <= 0)
return
-
+
//Vine fight!
for(var/obj/effect/vine/other in T)
if(other.seed != seed)
@@ -76,7 +76,7 @@
var/list/neighbors = get_neighbors()
if(neighbors.len)
spread_to(pick(neighbors))
-
+
//Try to settle down
if(can_spawn_plant())
plant = new(T,seed)
diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm
index 48943560d5a..d464c28805f 100644
--- a/code/modules/hydroponics/spreading/spreading_response.dm
+++ b/code/modules/hydroponics/spreading/spreading_response.dm
@@ -20,9 +20,10 @@
manual_unbuckle(user)
return TRUE
-/obj/effect/vine/Crossed(atom/movable/O)
- if(isliving(O))
- trodden_on(O)
+/obj/effect/vine/Crossed(atom/movable/AM)
+ if(!isliving(AM))
+ return
+ trodden_on(AM)
/obj/effect/vine/proc/trodden_on(var/mob/living/victim)
wake_neighbors()
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 443e71bd6f8..ecd297264b7 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -9,7 +9,7 @@
construct_state = /decl/machine_construction/default/panel_closed
uncreated_component_parts = null
stat_immune = 0
- atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_NO_REACT
+ atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_NO_CHEM_CHANGE
var/mechanical = 1 // Set to 0 to stop it from drawing the alert lights.
var/base_name = "tray"
@@ -466,11 +466,12 @@
if(weedlevel > 0)
user.visible_message("[user] starts uprooting the weeds.", "You remove the weeds from the [src].")
weedlevel = 0
+ update_icon()
if(seed)
var/needed_skill = seed.mysterious ? SKILL_ADEPT : SKILL_BASIC
if(!user.skill_check(SKILL_BOTANY, needed_skill))
plant_health -= rand(40,60)
- check_plant_health(1)
+ check_plant_health()
else
to_chat(user, "This plot is completely devoid of weeds. It doesn't need uprooting.")
@@ -489,6 +490,7 @@
toxins += spray.toxicity
pestlevel -= spray.pest_kill_str
weedlevel -= spray.weed_kill_str
+ update_icon()
to_chat(user, "You spray [src] with [O].")
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
qdel(O)
diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm
index 5d23c92560f..5065d15e7eb 100644
--- a/code/modules/hydroponics/trays/tray_process.dm
+++ b/code/modules/hydroponics/trays/tray_process.dm
@@ -84,9 +84,9 @@
// Seed datum handles gasses, light and pressure.
if(mechanical && closed_system)
- plant_health -= seed.handle_environment(T,environment,tray_light)
+ plant_health -= seed.handle_plant_environment(T,environment,tray_light)
else
- plant_health -= seed.handle_environment(T,environment)
+ plant_health -= seed.handle_plant_environment(T,environment)
// If we're attached to a pipenet, then we should let the pipenet know we might have modified some gasses
if (closed_system && get_port())
@@ -119,7 +119,7 @@
// Handle life and death.
// When the plant dies, weeds thrive and pests die off.
- check_plant_health(0)
+ check_plant_health(FALSE)
// If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again.
if((age > seed.get_trait(TRAIT_MATURATION)) && \
diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm
index 636f7fdf38d..27fcb183e3d 100644
--- a/code/modules/hydroponics/trays/tray_reagents.dm
+++ b/code/modules/hydroponics/trays/tray_reagents.dm
@@ -8,7 +8,7 @@
w_class = ITEM_SIZE_SMALL
throw_speed = 2
throw_range = 10
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/toxicity = 4
var/pest_kill_str = 0
var/weed_kill_str = 0
@@ -60,7 +60,7 @@
toxicity = 0
pest_kill_str = 0
weed_kill_str = 0
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/item/plantspray/weedkiller/triclopyr
name = "bottle of glyphosate"
diff --git a/code/modules/integrated_electronics/core/analyzer.dm b/code/modules/integrated_electronics/core/analyzer.dm
index 6df7b94d739..ecc918cf4c2 100644
--- a/code/modules/integrated_electronics/core/analyzer.dm
+++ b/code/modules/integrated_electronics/core/analyzer.dm
@@ -1,12 +1,12 @@
/obj/item/integrated_electronics/analyzer
name = "circuit analyzer"
desc = "This tool can scan an assembly and generate code necessary to recreate it in a circuit printer."
- icon = 'icons/obj/assemblies/electronic_tools.dmi'
- icon_state = "analyzer"
+ icon = 'icons/obj/assemblies/circuit_analyzer.dmi'
+ icon_state = ICON_STATE_WORLD
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/fiberglass = MATTER_AMOUNT_TRACE,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
/obj/item/integrated_electronics/analyzer/afterattack(var/atom/A, var/mob/living/user)
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index c4ee720a076..70bf4641b9e 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -109,8 +109,8 @@
P.make_energy()
var/power_failure = FALSE
- if(initial(health)/health < 0.5 && prob(5))
- visible_message("\The [src] shudders and sparks")
+ if(max_health/health < 0.5 && prob(5))
+ visible_message(SPAN_WARNING("\The [src] shudders and sparks."))
power_failure = TRUE
// Now spend it.
for(var/I in assembly_components)
@@ -119,7 +119,7 @@
if(power_failure || !draw_power(IC.power_draw_idle))
IC.power_fail()
-/obj/item/electronic_assembly/receive_mouse_drop(atom/dropping, mob/user)
+/obj/item/electronic_assembly/receive_mouse_drop(atom/dropping, mob/user, params)
. = ..()
if(!. && user == dropping)
interact(user)
diff --git a/code/modules/integrated_electronics/core/debugger.dm b/code/modules/integrated_electronics/core/debugger.dm
index 6c05c91e994..2c74e56a5c9 100644
--- a/code/modules/integrated_electronics/core/debugger.dm
+++ b/code/modules/integrated_electronics/core/debugger.dm
@@ -13,7 +13,7 @@
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/fiberglass = MATTER_AMOUNT_TRACE,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
/obj/item/integrated_electronics/debugger/attack_self(mob/user)
diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm
index 88f434f03d5..79c81561699 100644
--- a/code/modules/integrated_electronics/core/detailer.dm
+++ b/code/modules/integrated_electronics/core/detailer.dm
@@ -9,7 +9,7 @@
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/fiberglass = MATTER_AMOUNT_TRACE,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
var/scanning_color = FALSE
var/detail_color = COLOR_ASSEMBLY_WHITE
diff --git a/code/modules/integrated_electronics/core/prefab/prefabs.dm b/code/modules/integrated_electronics/core/prefab/prefabs.dm
index 6a8663042e0..0efa5181a66 100644
--- a/code/modules/integrated_electronics/core/prefab/prefabs.dm
+++ b/code/modules/integrated_electronics/core/prefab/prefabs.dm
@@ -1,6 +1,6 @@
/decl/prefab/ic_assembly/hand_teleporter
assembly_name = "hand-teleporter"
- data = {"{'assembly':{'type':'type-a electronic mechanism','name':'Hand Teleporter', 'detail_color':'#5d99be'},'components':\[{'type':'teleporter locator'},{'type':'wormhole generator'},{'type':'button','name':'Open Wormhole'}\],'wires':\[\[\[1,'O',1\],\[2,'I',1\]\],\[\[2,'A',1\],\[3,'A',1\]\]\]}"}
+ data = @'{"assembly":{"type":"type-a electronic mechanism","name":"Hand Teleporter", "detail_color":"#5d99be"},"components":[{"type":"teleporter locator"},{"type":"wormhole generator"},{"type":"button","name":"Open Wormhole"}],"wires":[[[1,"O",1],[2,"I",1]],[[2,"A",1],[3,"A",1]]]}'
power_cell_type = /obj/item/cell/hyper
/obj/prefab/hand_teleporter
diff --git a/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm b/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm
index b58cf8d309e..c045f16f4a6 100644
--- a/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm
+++ b/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm
@@ -1,6 +1,6 @@
/decl/prefab/ic_assembly/test_heatercooler
assembly_name = "heating-cooling-test"
- data = {"{'assembly':{'type':'type-c electronic machine'},'components':\[{'type':'starter'},{'type':'reagent funnel'},{'type':'big reagent storage'},{'type':'reagent pump','name':'Hot Pump','inputs':\[\[3,0,5]]},{'type':'reagent pump','name':'Cool Pump','inputs':\[\[3,0,5]]},{'type':'reagent heater','name':'Heater','inputs':\[\[1,0,80]]},{'type':'reagent cooler','name':'Cooler','inputs':\[\[1,0,-50]]},{'type':'button','name':'Heat And Cool'},{'type':'and gate','name':'Heater Active Check','inputs':\[\[1,0,0],\[2,0,1]]},{'type':'and gate','name':'Cooler Active Check','inputs':\[\[1,0,0],\[2,0,1]]},{'type':'custom delay circuit','name':'Heater Delay','inputs':\[\[1,0,100]]},{'type':'custom delay circuit','name':'Cooler Delay','inputs':\[\[1,0,100]]}],'wires':\[\[\[1,'A',1],\[3,'A',1]],\[\[1,'A',1],\[6,'A',3]],\[\[1,'A',1],\[7,'A',3]],\[\[2,'I',1],\[3,'O',2]],\[\[3,'O',2],\[4,'I',1]],\[\[3,'O',2],\[5,'I',1]],\[\[4,'I',2],\[6,'O',4]],\[\[4,'A',1],\[8,'A',1]],\[\[4,'A',2],\[6,'A',1]],\[\[5,'I',2],\[7,'O',4]],\[\[5,'A',1],\[8,'A',1]],\[\[5,'A',2],\[7,'A',1]],\[\[6,'O',3],\[9,'I',1]],\[\[6,'A',1],\[11,'A',2]],\[\[6,'A',2],\[9,'A',1]],\[\[7,'O',3],\[10,'I',1]],\[\[7,'A',1],\[12,'A',2]],\[\[7,'A',2],\[10,'A',1]],\[\[9,'A',2],\[11,'A',1]],\[\[10,'A',2],\[12,'A',1]]]}"}
+ data = @'{"assembly":{"type":"type-c electronic machine"},"components":[{"type":"starter"},{"type":"reagent funnel"},{"type":"big reagent storage"},{"type":"reagent pump","name":"Hot Pump","inputs":[[3,0,5]]},{"type":"reagent pump","name":"Cool Pump","inputs":[[3,0,5]]},{"type":"reagent heater","name":"Heater","inputs":[[1,0,80]]},{"type":"reagent cooler","name":"Cooler","inputs":[[1,0,-50]]},{"type":"button","name":"Heat And Cool"},{"type":"and gate","name":"Heater Active Check","inputs":[[1,0,0],[2,0,1]]},{"type":"and gate","name":"Cooler Active Check","inputs":[[1,0,0],[2,0,1]]},{"type":"custom delay circuit","name":"Heater Delay","inputs":[[1,0,100]]},{"type":"custom delay circuit","name":"Cooler Delay","inputs":[[1,0,100]]}],"wires":[[[1,"A",1],[3,"A",1]],[[1,"A",1],[6,"A",3]],[[1,"A",1],[7,"A",3]],[[2,"I",1],[3,"O",2]],[[3,"O",2],[4,"I",1]],[[3,"O",2],[5,"I",1]],[[4,"I",2],[6,"O",4]],[[4,"A",1],[8,"A",1]],[[4,"A",2],[6,"A",1]],[[5,"I",2],[7,"O",4]],[[5,"A",1],[8,"A",1]],[[5,"A",2],[7,"A",1]],[[6,"O",3],[9,"I",1]],[[6,"A",1],[11,"A",2]],[[6,"A",2],[9,"A",1]],[[7,"O",3],[10,"I",1]],[[7,"A",1],[12,"A",2]],[[7,"A",2],[10,"A",1]],[[9,"A",2],[11,"A",1]],[[10,"A",2],[12,"A",1]]]}'
power_cell_type = /obj/item/cell/hyper
/obj/prefab/test_heatcool
diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm
index 5ac88803f88..8a33268251d 100644
--- a/code/modules/integrated_electronics/core/printer.dm
+++ b/code/modules/integrated_electronics/core/printer.dm
@@ -156,7 +156,7 @@
HTML += jointext(dat, "; ")
HTML += ".
"
- if(config.allow_ic_printing || debug)
+ if(get_config_value(/decl/config/toggle/on/allow_ic_printing) || debug)
HTML += "Assembly cloning: [can_clone ? (fast_clone ? "Instant" : "Available") : "Unavailable"].
"
HTML += "Circuits available: [upgraded || debug ? "Advanced":"Regular"]."
@@ -164,7 +164,7 @@
HTML += "
Crossed out circuits mean that the printer is not sufficiently upgraded to create that circuit."
HTML += "
"
- if((can_clone && config.allow_ic_printing) || debug)
+ if((can_clone && get_config_value(/decl/config/toggle/on/allow_ic_printing)) || debug)
HTML += "Here you can load script for your assembly.
"
if(!cloning)
HTML += " {Load Program} "
@@ -218,14 +218,8 @@
if(!build_type || !ispath(build_type))
return TRUE
- var/list/cost
- if(ispath(build_type, /obj/item/electronic_assembly))
- var/obj/item/electronic_assembly/E = SScircuit.cached_assemblies[build_type]
- cost = E.matter
- else if(ispath(build_type, /obj/item/integrated_circuit))
- var/obj/item/integrated_circuit/IC = SScircuit.cached_components[build_type]
- cost = IC.matter
- else if(!(build_type in SScircuit.circuit_fabricator_recipe_list["Tools"]))
+ var/list/cost = atom_info_repository.get_matter_for(build_type)
+ if(!ispath(build_type, /obj/item/electronic_assembly) && !ispath(build_type, /obj/item/integrated_circuit) && !(build_type in SScircuit.circuit_fabricator_recipe_list["Tools"]))
return
if(!debug && !subtract_material_costs(cost, usr))
@@ -243,7 +237,7 @@
playsound(src, 'sound/items/jaws_pry.ogg', 50, TRUE)
if(href_list["print"])
- if(!config.allow_ic_printing && !debug)
+ if(!get_config_value(/decl/config/toggle/on/allow_ic_printing) && !debug)
to_chat(usr, "Your facility has disabled printing of custom circuitry due to recent allegations of copyright infringement.")
return
if(!can_clone) // Copying and printing ICs is cloning
@@ -308,7 +302,7 @@
to_chat(usr, "You begin printing a custom assembly. This will take approximately [round(cloning_time/10)] seconds. You can still print \
off normal parts during this time.")
playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE)
- addtimer(CALLBACK(src, .proc/print_program, usr), cloning_time)
+ addtimer(CALLBACK(src, PROC_REF(print_program), usr), cloning_time)
if("cancel")
if(!cloning || !program)
@@ -338,16 +332,16 @@
desc = "Install this into your integrated circuit printer to enhance it."
color = COLOR_GRAY20
label = "label_up"
- origin_tech = "{'materials':2,'engineering':2}"
+ origin_tech = @'{"materials":2,"engineering":2}'
/obj/item/disk/integrated_circuit/upgrade/advanced
name = "integrated circuit printer upgrade disk - advanced designs"
desc = "Install this into your integrated circuit printer to enhance it. This one adds new, advanced designs to the printer."
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
- origin_tech = "{'materials':3,'engineering':3}"
+ origin_tech = @'{"materials":3,"engineering":3}'
/obj/item/disk/integrated_circuit/upgrade/clone
name = "integrated circuit printer upgrade disk - instant cloner"
desc = "Install this into your integrated circuit printer to enhance it. This one allows the printer to duplicate assemblies instantaneously."
- origin_tech = "{'materials':3,'programming':5}"
+ origin_tech = @'{"materials":3,"programming":5}'
diff --git a/code/modules/integrated_electronics/core/wirer.dm b/code/modules/integrated_electronics/core/wirer.dm
index 4799d7df3d4..4b0b6749ca3 100644
--- a/code/modules/integrated_electronics/core/wirer.dm
+++ b/code/modules/integrated_electronics/core/wirer.dm
@@ -13,7 +13,7 @@
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/fiberglass = MATTER_AMOUNT_TRACE,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
var/datum/integrated_io/selected_io = null
var/mode = WIRE
@@ -84,7 +84,7 @@
if(selected_io)
unselect_io(selected_io)
selected_io = io
- events_repository.register(/decl/observ/destroyed, selected_io, src, .proc/unselect_io)
+ events_repository.register(/decl/observ/destroyed, selected_io, src, PROC_REF(unselect_io))
switch(mode)
if(UNWIRE)
mode = UNWIRING
diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm
index 752d155d340..ed18a97e96c 100644
--- a/code/modules/integrated_electronics/passive/power.dm
+++ b/code/modules/integrated_electronics/passive/power.dm
@@ -120,6 +120,7 @@
..()
/obj/item/integrated_circuit/passive/power/chemical_cell/on_reagent_change(changetype)
+ ..()
set_pin_data(IC_OUTPUT, 1, reagents.total_volume)
push_data()
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index 634de501f40..14bcd356cda 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -197,15 +197,15 @@
return
if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range..
-
+ var/current_max_health = H.get_max_health()
var/obj/item/organ/internal/brain = GET_INTERNAL_ORGAN(H, BP_BRAIN)
set_pin_data(IC_OUTPUT, 1, (brain && H.stat != DEAD))
set_pin_data(IC_OUTPUT, 2, (H.stat == CONSCIOUS))
- set_pin_data(IC_OUTPUT, 3, damage_to_severity(100 * H.getBruteLoss() / H.maxHealth))
- set_pin_data(IC_OUTPUT, 4, damage_to_severity(100 * H.getFireLoss() / H.maxHealth))
- set_pin_data(IC_OUTPUT, 5, damage_to_severity(100 * H.getToxLoss() / H.maxHealth))
- set_pin_data(IC_OUTPUT, 6, damage_to_severity(100 * H.getOxyLoss() / H.maxHealth))
- set_pin_data(IC_OUTPUT, 7, damage_to_severity(100 * H.getCloneLoss() / H.maxHealth))
+ set_pin_data(IC_OUTPUT, 3, damage_to_severity(100 * H.getBruteLoss() / current_max_health))
+ set_pin_data(IC_OUTPUT, 4, damage_to_severity(100 * H.getFireLoss() / current_max_health))
+ set_pin_data(IC_OUTPUT, 5, damage_to_severity(100 * H.getToxLoss() / current_max_health))
+ set_pin_data(IC_OUTPUT, 6, damage_to_severity(100 * H.getOxyLoss() / current_max_health))
+ set_pin_data(IC_OUTPUT, 7, damage_to_severity(100 * H.getCloneLoss() / current_max_health))
set_pin_data(IC_OUTPUT, 8, H.get_pulse_as_number())
set_pin_data(IC_OUTPUT, 9, H.get_blood_oxygenation())
set_pin_data(IC_OUTPUT, 10, damage_to_severity(H.get_shock()))
@@ -648,7 +648,7 @@
. = ..()
set_pin_data(IC_INPUT, 1, frequency)
set_pin_data(IC_INPUT, 2, code)
- addtimer(CALLBACK(src, .proc/set_frequency,frequency), 40)
+ addtimer(CALLBACK(src, PROC_REF(set_frequency),frequency), 40)
/obj/item/integrated_circuit/input/signaler/Destroy()
radio_controller.remove_object(src,frequency)
@@ -1038,7 +1038,7 @@
/decl/material/solid/metal/plasteel,
/decl/material/solid/metal/titanium,
/decl/material/solid/glass,
- /decl/material/solid/plastic
+ /decl/material/solid/organic/plastic
)
/obj/item/integrated_circuit/input/matscan/do_work()
diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm
index a75e68f68b8..869bb426379 100644
--- a/code/modules/integrated_electronics/subtypes/manipulation.dm
+++ b/code/modules/integrated_electronics/subtypes/manipulation.dm
@@ -207,7 +207,7 @@
dt = clamp(detonation_time.data, 1, 12)*10
else
dt = 15
- addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/activate), dt)
+ addtimer(CALLBACK(attached_grenade, TYPE_PROC_REF(/obj/item/grenade, activate)), dt)
var/atom/holder = loc
log_and_message_admins("activated a grenade assembly. Last touches: Assembly: [holder.fingerprintslast] Circuit: [fingerprintslast] Grenade: [attached_grenade.fingerprintslast]")
@@ -420,9 +420,9 @@
set_pin_data(IC_OUTPUT, 1, TRUE)
pulling = to_pull
acting_object.visible_message("\The [acting_object] starts pulling \the [to_pull] around.")
- events_repository.register(/decl/observ/moved, to_pull, src, .proc/check_pull) //Whenever the target moves, make sure we can still pull it!
- events_repository.register(/decl/observ/destroyed, to_pull, src, .proc/stop_pulling) //Stop pulling if it gets destroyed
- events_repository.register(/decl/observ/moved, acting_object, src, .proc/pull) //Make sure we actually pull it.
+ events_repository.register(/decl/observ/moved, to_pull, src, PROC_REF(check_pull)) //Whenever the target moves, make sure we can still pull it!
+ events_repository.register(/decl/observ/destroyed, to_pull, src, PROC_REF(stop_pulling)) //Stop pulling if it gets destroyed
+ events_repository.register(/decl/observ/moved, acting_object, src, PROC_REF(pull)) //Make sure we actually pull it.
push_data()
if(3)
if(pulling)
@@ -555,7 +555,7 @@
spawn_flags = IC_SPAWN_RESEARCH
action_flags = IC_ACTION_LONG_RANGE
- origin_tech = "{'magnets':1,'wormholes':3}"
+ origin_tech = @'{"magnets":1,"wormholes":3}'
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT,
@@ -606,7 +606,7 @@
power_draw_per_use = 20
var/obj/item/aicard
activators = list("Upwards" = IC_PINTYPE_PULSE_OUT, "Downwards" = IC_PINTYPE_PULSE_OUT, "Left" = IC_PINTYPE_PULSE_OUT, "Right" = IC_PINTYPE_PULSE_OUT)
- origin_tech = "{'programming':4}"
+ origin_tech = @'{"programming":4}'
spawn_flags = IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/manipulation/ai/verb/open_menu()
@@ -654,7 +654,7 @@
/obj/item/integrated_circuit/manipulation/ai/attackby(var/obj/item/I, var/mob/user)
- if(is_type_in_list(I, list(/obj/item/aicard, /obj/item/paicard, /obj/item/mmi)))
+ if(is_type_in_list(I, list(/obj/item/aicard, /obj/item/paicard, /obj/item/organ/internal/brain_interface)))
load_ai(user, I)
else return ..()
@@ -681,7 +681,7 @@
cooldown_per_use = 2 SECOND
power_draw_per_use = 50
spawn_flags = IC_SPAWN_DEFAULT
- origin_tech = "{'engineering':2}"
+ origin_tech = @'{"engineering":2}'
/obj/item/integrated_circuit/manipulation/anchoring/do_work(ord)
if(!isturf(assembly.loc))
@@ -724,7 +724,7 @@
cooldown_per_use = 2 SECOND
power_draw_per_use = 50
spawn_flags = IC_SPAWN_DEFAULT
- origin_tech = "{'engineering':2}"
+ origin_tech = @'{"engineering":2}'
var/lock_enabled = FALSE
diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm
index 99b07d54192..dcb1964e7df 100644
--- a/code/modules/integrated_electronics/subtypes/reagents.dm
+++ b/code/modules/integrated_electronics/subtypes/reagents.dm
@@ -6,10 +6,12 @@
/obj/item/integrated_circuit/reagent
category_text = "Reagent"
- unacidable = 1
cooldown_per_use = 10
var/volume = 0
+/obj/item/integrated_circuit/reagent/solvent_can_melt(var/solvent_power = MAT_SOLVENT_STRONG)
+ return FALSE
+
/obj/item/integrated_circuit/reagent/Initialize()
. = ..()
if(volume)
@@ -48,6 +50,7 @@
var/notified = FALSE
/obj/item/integrated_circuit/reagent/smoke/on_reagent_change()
+ ..()
push_vol()
/obj/item/integrated_circuit/reagent/smoke/do_work(ord)
@@ -107,6 +110,7 @@
var/busy = FALSE
/obj/item/integrated_circuit/reagent/injector/on_reagent_change(changetype)
+ ..()
push_vol()
/obj/item/integrated_circuit/reagent/injector/on_data_written()
@@ -184,7 +188,6 @@
if(isliving(AM))
var/mob/living/L = AM
var/injection_status = L.can_inject(null, BP_CHEST)
- log_world("Injection status? [injection_status]")
var/injection_delay = 3 SECONDS
if(injection_status == INJECTION_PORT)
injection_delay += INJECTION_PORT_DELAY
@@ -196,7 +199,7 @@
L.visible_message("\The [acting_object] is trying to inject [L]!", \
"\The [acting_object] is trying to inject you!")
busy = TRUE
- addtimer(CALLBACK(src, .proc/inject_after, weakref(L)), injection_delay)
+ addtimer(CALLBACK(src, PROC_REF(inject_after), weakref(L)), injection_delay)
return
else
if(!ATOM_IS_OPEN_CONTAINER(AM))
@@ -226,7 +229,7 @@
C.visible_message("\The [acting_object] is trying to take a blood sample from [C]!", \
"\The [acting_object] is trying to take a blood sample from you!")
busy = TRUE
- addtimer(CALLBACK(src, .proc/draw_after, weakref(C), tramount), injection_delay)
+ addtimer(CALLBACK(src, PROC_REF(draw_after), weakref(C), tramount), injection_delay)
return
else
@@ -322,6 +325,7 @@
push_data()
/obj/item/integrated_circuit/reagent/storage/on_reagent_change(changetype)
+ ..()
push_vol()
/obj/item/integrated_circuit/reagent/storage/big
@@ -340,7 +344,7 @@
icon_state = "reagent_storage_cryo"
extended_desc = "This is effectively an internal cryo beaker."
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT
+ atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_CHEM_CHANGE
complexity = 8
spawn_flags = IC_SPAWN_RESEARCH
@@ -512,11 +516,13 @@
"on transfer" = IC_PINTYPE_PULSE_OUT
)
- unacidable = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
complexity = 4
power_draw_per_use = 5
+/obj/item/integrated_circuit/input/funnel/solvent_can_melt(var/solvent_power = MAT_SOLVENT_STRONG)
+ return FALSE
+
/obj/item/integrated_circuit/input/funnel/attackby_react(obj/item/I, mob/user, intent)
var/atom/movable/target = get_pin_data_as_type(IC_INPUT, 1, /atom/movable)
var/obj/item/chems/container = I
@@ -595,6 +601,7 @@
push_data()
/obj/item/integrated_circuit/reagent/temp/on_reagent_change()
+ ..()
push_vol()
/obj/item/integrated_circuit/reagent/temp/power_fail()
diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm
index 9012de5054c..25f9dca52a4 100644
--- a/code/modules/integrated_electronics/subtypes/smart.dm
+++ b/code/modules/integrated_electronics/subtypes/smart.dm
@@ -119,7 +119,7 @@
if(Pl&&islist(Pl))
idc.access = Pl
var/turf/a_loc = get_turf(assembly)
- var/list/P = AStar(a_loc, locate(get_pin_data(IC_INPUT, 1), get_pin_data(IC_INPUT, 2), a_loc.z), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 200, id=idc, exclude=get_turf(get_pin_data_as_type(IC_INPUT, 3, /atom)))
+ var/list/P = AStar(a_loc, locate(get_pin_data(IC_INPUT, 1), get_pin_data(IC_INPUT, 2), a_loc.z), TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, 200, id=idc, exclude=get_turf(get_pin_data_as_type(IC_INPUT, 3, /atom)))
if(!P)
activate_pin(3)
diff --git a/code/modules/integrated_electronics/subtypes/time.dm b/code/modules/integrated_electronics/subtypes/time.dm
index 1ec0d80676f..c9739ceed0a 100644
--- a/code/modules/integrated_electronics/subtypes/time.dm
+++ b/code/modules/integrated_electronics/subtypes/time.dm
@@ -17,7 +17,7 @@
power_draw_per_use = 2
/obj/item/integrated_circuit/time/delay/do_work()
- addtimer(CALLBACK(src, .proc/activate_pin, 2), delay)
+ addtimer(CALLBACK(src, PROC_REF(activate_pin), 2), delay)
/obj/item/integrated_circuit/time/delay/five_sec
name = "five-sec delay circuit"
@@ -98,7 +98,7 @@
/obj/item/integrated_circuit/time/ticker/proc/tick()
if(is_running)
- addtimer(CALLBACK(src, .proc/tick), delay)
+ addtimer(CALLBACK(src, PROC_REF(tick)), delay)
if(world.time > next_fire)
next_fire = world.time + delay
activate_pin(1)
diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm
index 527e5a11598..6fe32e00f0e 100644
--- a/code/modules/keybindings/bindings_atom.dm
+++ b/code/modules/keybindings/bindings_atom.dm
@@ -15,7 +15,7 @@
if((movement_dir & EAST) && (movement_dir & WEST))
movement_dir &= ~(EAST|WEST)
- if(!config.allow_diagonal_movement)
+ if(!get_config_value(/decl/config/toggle/allow_diagonal_movement))
if(movement_dir & user.last_move_dir_pressed)
movement_dir = user.last_move_dir_pressed
else
diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm
index f65e26da951..fb56abe3346 100644
--- a/code/modules/keybindings/bindings_client.dm
+++ b/code/modules/keybindings/bindings_client.dm
@@ -37,7 +37,7 @@
if(!(next_move_dir_sub & movement))
next_move_dir_add |= movement
- if(movement && !config.allow_diagonal_movement)
+ if(movement && !get_config_value(/decl/config/toggle/allow_diagonal_movement))
last_move_dir_pressed = movement
// Client-level keybindings are ones anyone should be able to do at any time
diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm
index 891edc643da..8cdb76ed4a6 100644
--- a/code/modules/lighting/lighting_corner.dm
+++ b/code/modules/lighting/lighting_corner.dm
@@ -66,18 +66,18 @@ var/global/list/REVERSE_LIGHTING_CORNER_DIAGONAL = list(0, 0, 0, 0, 3, 4, 0, 0,
var/has_ambience = FALSE
- t1 = new_turf
- z = new_turf.z
+ t1 = new_turf.resolve_to_actual_turf()
+ z = t1.z
t1i = oi
- if (new_turf.ambient_light)
+ if (t1.ambient_light)
has_ambience = TRUE
var/vertical = diagonal & ~(diagonal - 1) // The horizontal directions (4 and 8) are bigger than the vertical ones (1 and 2), so we can reliably say the lsb is the horizontal direction.
var/horizontal = diagonal & ~vertical // Now that we know the horizontal one we can get the vertical one.
- x = new_turf.x + (horizontal == EAST ? 0.5 : -0.5)
- y = new_turf.y + (vertical == NORTH ? 0.5 : -0.5)
+ x = t1.x + (horizontal == EAST ? 0.5 : -0.5)
+ y = t1.y + (vertical == NORTH ? 0.5 : -0.5)
// My initial plan was to make this loop through a list of all the dirs (horizontal, vertical, diagonal).
// Issue being that the only way I could think of doing it was very messy, slow and honestly overengineered.
@@ -86,7 +86,7 @@ var/global/list/REVERSE_LIGHTING_CORNER_DIAGONAL = list(0, 0, 0, 0, 3, 4, 0, 0,
// Diagonal one is easy.
- T = get_step(new_turf, diagonal)
+ T = get_step_resolving_mimic(t1, diagonal)
if (T) // In case we're on the map's border.
if (!T.corners)
T.corners = new(4)
@@ -98,7 +98,7 @@ var/global/list/REVERSE_LIGHTING_CORNER_DIAGONAL = list(0, 0, 0, 0, 3, 4, 0, 0,
has_ambience = TRUE
// Now the horizontal one.
- T = get_step(new_turf, horizontal)
+ T = get_step_resolving_mimic(t1, horizontal)
if (T) // Ditto.
if (!T.corners)
T.corners = new(4)
@@ -110,7 +110,7 @@ var/global/list/REVERSE_LIGHTING_CORNER_DIAGONAL = list(0, 0, 0, 0, 3, 4, 0, 0,
has_ambience = TRUE
// And finally the vertical one.
- T = get_step(new_turf, vertical)
+ T = get_step_resolving_mimic(t1, vertical)
if (T)
if (!T.corners)
T.corners = new(4)
@@ -244,28 +244,31 @@ var/global/list/REVERSE_LIGHTING_CORNER_DIAGONAL = list(0, 0, 0, 0, 3, 4, 0, 0,
var/turf/T
var/Ti
- if (t1)
+ if (t1 && (t1.below || HasBelow(t1.z)) && (t1.z_flags & ZM_ALLOW_LIGHTING) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(t1))
T = t1
Ti = t1i
- else if (t2)
+ else if (t2 && (t2.below || HasBelow(t2.z)) && (t2.z_flags & ZM_ALLOW_LIGHTING) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(t2))
T = t2
Ti = t2i
- else if (t3)
+ else if (t3 && (t3.below || HasBelow(t3.z)) && (t3.z_flags & ZM_ALLOW_LIGHTING) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(t3))
T = t3
Ti = t3i
- else if (t4)
+ else if (t4 && (t4.below || HasBelow(t4.z)) && (t4.z_flags & ZM_ALLOW_LIGHTING) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(t4))
T = t4
Ti = t4i
+ // No MZ candidates below, just update.
+ else if (needs_update || skip_update)
+ return
else
- // This should be impossible to reach -- how do we exist without at least one master turf?
- CRASH("Corner has no masters!")
+ // Always queue for this, not important enough to hit the synchronous path.
+ needs_update = TRUE
+ SSlighting.corner_queue += src
+ return
var/datum/lighting_corner/below = src
- var/turf/lasT
-
// We init before Z-Mimic, cannot rely on above/below.
- while ((lasT = T) && (T = GET_BELOW(T)) && (lasT.z_flags & ZM_ALLOW_LIGHTING) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(T))
+ while ((T = GET_BELOW(T)) && ((below.t1?.z_flags | below.t2?.z_flags | below.t3?.z_flags | below.t4?.z_flags) & ZM_ALLOW_LIGHTING) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(T))
T.ambient_has_indirect = TRUE
if (!T.corners || !T.corners[Ti])
diff --git a/code/modules/locks/key.dm b/code/modules/locks/key.dm
index 70a2f9869b7..b4ded50c995 100644
--- a/code/modules/locks/key.dm
+++ b/code/modules/locks/key.dm
@@ -4,21 +4,20 @@
icon = 'icons/obj/items/key.dmi'
icon_state = "keys"
w_class = ITEM_SIZE_TINY
- material = DEFAULT_FURNITURE_MATERIAL
+ material = /decl/material/solid/metal/brass
+ material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
var/key_data = ""
-/obj/item/key/Initialize(mapload,var/data)
- . = ..(mapload)
- if(data)
- key_data = data
+/obj/item/key/Initialize(var/mapload, var/material_key, var/new_key_data)
+ . = ..(mapload, material_key)
+ if(new_key_data)
+ key_data = new_key_data
/obj/item/key/proc/get_data(var/mob/user)
return key_data
/obj/item/key/soap
- name = "soap key"
- desc = "a fragile key made using a bar of soap."
- material = /decl/material/liquid/cleaner
+ material = /decl/material/liquid/cleaner/soap
var/uses = 0
/obj/item/key/soap/get_data(var/mob/user)
diff --git a/code/modules/locks/lock_construct.dm b/code/modules/locks/lock_construct.dm
index 393fd09c1a1..beacb06758b 100644
--- a/code/modules/locks/lock_construct.dm
+++ b/code/modules/locks/lock_construct.dm
@@ -14,7 +14,7 @@
lock_data = generateRandomString(round(material.integrity/50))
/obj/item/lock_construct/attackby(var/obj/item/I, var/mob/user)
- if(istype(I,/obj/item/key))
+ if(istype(I, /obj/item/key))
var/obj/item/key/K = I
if(!K.key_data)
to_chat(user, SPAN_NOTICE("You fashion \the [I] to unlock \the [src]."))
diff --git a/code/modules/maps/_map_template.dm b/code/modules/maps/_map_template.dm
index 819e05abeb2..2dfee0fa930 100644
--- a/code/modules/maps/_map_template.dm
+++ b/code/modules/maps/_map_template.dm
@@ -117,12 +117,12 @@
SSshuttle.map_hash_to_areas[map_hash] = initialized_areas_by_type
for(var/area/A in initialized_areas_by_type)
A.saved_map_hash = map_hash
- events_repository.register(/decl/observ/destroyed, A, src, .proc/cleanup_lateloaded_area)
+ events_repository.register(/decl/observ/destroyed, A, src, PROC_REF(cleanup_lateloaded_area))
SSshuttle.block_queue = pre_init_state
SSshuttle.clear_init_queue() // We will flush the queue unless there were other blockers, in which case they will do it.
/datum/map_template/proc/cleanup_lateloaded_area(area/destroyed_area)
- events_repository.unregister(/decl/observ/destroyed, destroyed_area, src, .proc/cleanup_lateloaded_area)
+ events_repository.unregister(/decl/observ/destroyed, destroyed_area, src, PROC_REF(cleanup_lateloaded_area))
if(destroyed_area.saved_map_hash)
SSshuttle.map_hash_to_areas[destroyed_area.saved_map_hash] -= destroyed_area
diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm
index 12680e46a76..76e4e23cb4b 100644
--- a/code/modules/maps/helper_landmarks.dm
+++ b/code/modules/maps/helper_landmarks.dm
@@ -98,11 +98,11 @@
/obj/abstract/landmark/delete_on_shuttle/Initialize()
. = ..()
- events_repository.register_global(/decl/observ/shuttle_added, src, .proc/check_shuttle)
+ events_repository.register_global(/decl/observ/shuttle_added, src, PROC_REF(check_shuttle))
/obj/abstract/landmark/delete_on_shuttle/proc/check_shuttle(var/shuttle)
if(SSshuttle.shuttles[shuttle_name] == shuttle)
- events_repository.register(/decl/observ/shuttle_moved, shuttle, src, .proc/delete_everything)
+ events_repository.register(/decl/observ/shuttle_moved, shuttle, src, PROC_REF(delete_everything))
shuttle_datum = shuttle
/obj/abstract/landmark/delete_on_shuttle/proc/delete_everything()
@@ -112,9 +112,9 @@
qdel(src)
/obj/abstract/landmark/delete_on_shuttle/Destroy()
- events_repository.unregister_global(/decl/observ/shuttle_added, src, .proc/check_shuttle)
+ events_repository.unregister_global(/decl/observ/shuttle_added, src, PROC_REF(check_shuttle))
if(shuttle_datum)
- events_repository.unregister(/decl/observ/shuttle_moved, shuttle_datum, src, .proc/delete_everything)
+ events_repository.unregister(/decl/observ/shuttle_moved, shuttle_datum, src, PROC_REF(delete_everything))
. = ..()
// Has a percent chance on spawn to set the specified variable on the specified type to the specified value.
diff --git a/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm b/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm
index b71e8da04e1..03a66a0da3c 100644
--- a/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm
+++ b/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm
@@ -100,8 +100,8 @@
/datum/fauna_generator/proc/register_fauna(var/mob/living/A)
if(A in live_fauna)
return
- events_repository.register(/decl/observ/destroyed, A, src, /datum/fauna_generator/proc/on_fauna_death)
- events_repository.register(/decl/observ/death, A, src, /datum/fauna_generator/proc/on_fauna_death)
+ events_repository.register(/decl/observ/destroyed, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death))
+ events_repository.register(/decl/observ/death, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death))
LAZYADD(live_fauna, A)
/datum/fauna_generator/proc/on_fauna_death(var/mob/living/A)
@@ -111,8 +111,8 @@
/datum/fauna_generator/proc/unregister_fauna(var/mob/living/A)
if(!(A in live_fauna))
return
- events_repository.unregister(/decl/observ/destroyed, A, src, /datum/fauna_generator/proc/on_fauna_death)
- events_repository.unregister(/decl/observ/death, A, src, /datum/fauna_generator/proc/on_fauna_death)
+ events_repository.unregister(/decl/observ/destroyed, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death))
+ events_repository.unregister(/decl/observ/death, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death))
LAZYREMOVE(live_fauna, A)
/datum/fauna_generator/proc/generate_fauna(var/datum/gas_mixture/atmosphere, var/list/breath_gases = list(), var/list/toxic_gases = list())
diff --git a/code/modules/maps/template_types/random_exoplanet/flora_generator.dm b/code/modules/maps/template_types/random_exoplanet/flora_generator.dm
index 71a2a82effb..54765963c41 100644
--- a/code/modules/maps/template_types/random_exoplanet/flora_generator.dm
+++ b/code/modules/maps/template_types/random_exoplanet/flora_generator.dm
@@ -162,6 +162,6 @@
S.set_trait(TRAIT_HARVEST_REPEAT, 1)
S.set_trait(TRAIT_LARGE, 1)
S.set_trait(TRAIT_LEAVES_COLOUR, color)
- S.chems[/decl/material/solid/wood] = 1 //#TODO: Maybe look at Why the seed creates injectable wood?
+ S.chems[/decl/material/solid/organic/wood] = 1 //#TODO: Maybe look at Why the seed creates injectable wood?
adapt_seed(S, atmos)
LAZYADD(big_flora_types, S)
diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm
index 2ec87d62a47..0decc6d51af 100644
--- a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm
+++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm
@@ -171,26 +171,27 @@
..()
for(var/x in 1 to limit_x - 1)
for(var/y in 1 to limit_y - 1)
- var/value = map[get_map_cell(x,y)]
+ var/value = map[TRANSLATE_COORD(x,y)]
if(value != FLOOR_VALUE)
continue
var/list/neighbors = list()
for(var/offset in list(list(0,1), list(0,-1), list(1,0), list(-1,0)))
- var/char = map[get_map_cell(x + offset[1], y + offset[2])]
+ var/tmp_cell = TRANSLATE_COORD(x + offset[1], y+offset[2])
+ var/char = LAZYACCESS(map, tmp_cell)
if(char == FLOOR_VALUE || char == DOOR_VALUE)
- neighbors.Add(get_map_cell(x + offset[1], y + offset[2]))
+ neighbors.Add(tmp_cell)
if(length(neighbors) > 1)
continue
map[neighbors[1]] = DOOR_VALUE
if(artifacts_to_spawn)
- map[get_map_cell(x,y)] = ARTIFACT_VALUE
+ map[TRANSLATE_COORD(x,y)] = ARTIFACT_VALUE
artifacts_to_spawn--
var/entrance_x = pick(rand(2,limit_x-1), 1, limit_x)
var/entrance_y = pick(1, limit_y)
if(entrance_x == 1 || entrance_x == limit_x)
entrance_y = rand(2,limit_y-1)
- map[get_map_cell(entrance_x,entrance_y)] = DOOR_VALUE
+ map[TRANSLATE_COORD(entrance_x,entrance_y)] = DOOR_VALUE
/datum/random_map/maze/lab/get_appropriate_path(var/value)
if(value == ARTIFACT_VALUE)
diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm
index 47201560a5e..9961918b2ee 100644
--- a/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm
+++ b/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm
@@ -135,7 +135,7 @@
descriptor = "grass exoplanet"
land_type = /turf/exterior/wildgrass
water_type = /turf/exterior/water
- coast_type = /turf/exterior/mud/dark
+ coast_type = /turf/exterior/mud
water_level_min = 3
flora_prob = 10
grass_prob = 50
diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm
index 9cebc03c518..22f216e8a0d 100644
--- a/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm
+++ b/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm
@@ -135,6 +135,9 @@
dirt_color = "#c40031"
footstep_type = /decl/footsteps/mud
+/turf/exterior/meat/get_diggable_resources()
+ return dug ? null : list(/obj/item/stack/material/ore/meat = list(3, 2))
+
/turf/exterior/water/stomach
name = "juices"
desc = "Half-digested chunks of vines are floating in the puddle of some liquid."
diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm
index 643d7496ba7..1fce3f9757d 100644
--- a/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm
+++ b/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm
@@ -18,7 +18,7 @@
/datum/level_data/planetoid/exoplanet/volcanic
base_area = /area/exoplanet/volcanic
- base_turf = /turf/exterior/volcanic
+ base_turf = /turf/exterior/rock/volcanic
exterior_atmosphere = null
exterior_atmos_temp = null
level_generators = list(
@@ -111,7 +111,7 @@
/datum/random_map/noise/exoplanet/volcanic
descriptor = "volcanic exoplanet"
smoothing_iterations = 5
- land_type = /turf/exterior/volcanic
+ land_type = /turf/exterior/rock/volcanic
water_type = /turf/exterior/lava
water_level_min = 5
water_level_max = 6
@@ -119,23 +119,7 @@
flora_prob = 3
grass_prob = 0
large_flora_prob = 0
-
-//Squashing most of 1 tile lava puddles
-/datum/random_map/noise/exoplanet/volcanic/cleanup()
- for(var/x = 1, x <= limit_x, x++)
- for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
- if(noise2value(map[current_cell]) < water_level)
- continue
- var/frendos
- for(var/dx in list(-1,0,1))
- for(var/dy in list(-1,0,1))
- var/tmp_cell = get_map_cell(x+dx,y+dy)
- if(tmp_cell && tmp_cell != current_cell && noise2value(map[tmp_cell]) >= water_level)
- frendos = 1
- break
- if(!frendos)
- map[current_cell] = 1
+ smooth_single_tiles = TRUE
////////////////////////////////////////////////////////////////////////////
// Areas
@@ -143,4 +127,4 @@
/area/exoplanet/volcanic
forced_ambience = list('sound/ambience/magma.ogg')
- base_turf = /turf/exterior/volcanic
+ base_turf = /turf/exterior/rock/volcanic
diff --git a/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm b/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm
index d257df6e411..4c9be31e655 100644
--- a/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm
+++ b/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm
@@ -379,7 +379,7 @@
/datum/planetoid_data/random/proc/generate_daycycle_data()
starts_at_night = (surface_light_level > 0.1)
- day_duration = rand(global.config.exoplanet_min_day_duration, global.config.exoplanet_max_day_duration)
+ day_duration = rand(get_config_value(/decl/config/num/exoplanet_min_day_duration), get_config_value(/decl/config/num/exoplanet_max_day_duration)) MINUTES
///If the planet doesn't have a name defined, a name will be randomly generated for it. (Named this way because a global proc generate_planet_name already exists)
/datum/planetoid_data/random/proc/make_planet_name()
@@ -484,11 +484,11 @@
//Adjust for species habitability
if(habitability_class == HABITABILITY_OKAY || habitability_class == HABITABILITY_IDEAL)
- var/decl/species/S = global.get_species_by_key(global.using_map.default_species)
+ var/decl/species/S = global.get_species_by_key(global.using_map.default_species)
if(habitability_class == HABITABILITY_IDEAL)
- . = clamp(., S.cold_discomfort_level + rand(1,5), S.heat_discomfort_level - rand(1,5)) //Clamp between comfortable levels since we're ideal
+ . = clamp(., S.default_bodytype.cold_discomfort_level + rand(1,5), S.default_bodytype.heat_discomfort_level - rand(1,5)) //Clamp between comfortable levels since we're ideal
else
- . = clamp(., S.cold_level_1 + 1, S.heat_level_1 - 1) //clamp between values species starts taking damages at
+ . = clamp(., S.default_bodytype.cold_level_1 + 1, S.default_bodytype.heat_level_1 - 1) //clamp between values species starts taking damages at
///Generates a valid surface pressure for the planet's atmosphere matching it's habitability class
/datum/planetoid_data/random/proc/generate_surface_pressure()
@@ -546,8 +546,8 @@
//Make sure temperature can't damage people on casual planets (Only when not forcing an atmosphere)
var/decl/species/S = global.get_species_by_key(global.using_map.default_species)
- var/lower_temp = max(S.cold_level_1, atmosphere_gen_temperature_min)
- var/higher_temp = min(S.heat_level_1, atmosphere_gen_temperature_max)
+ var/lower_temp = max(S.default_bodytype.cold_level_1, atmosphere_gen_temperature_min)
+ var/higher_temp = min(S.default_bodytype.heat_level_1, atmosphere_gen_temperature_max)
var/breathed_gas = S.breath_type
var/breathed_min_pressure = S.breath_pressure
@@ -582,7 +582,7 @@
if(((current_merged_flags & XGM_GAS_OXIDIZER) && (mat.gas_flags & XGM_GAS_FUEL)) || \
((current_merged_flags & XGM_GAS_FUEL) && (mat.gas_flags & XGM_GAS_OXIDIZER)))
continue
-
+
// If we have an ignition point we're basically XGM_GAS_FUEL, kind of. TODO: Combine those somehow?
// These don't actually burn but it's still weird to see vaporized skin gas in an oxygen-rich atmosphere,
// so skip them.
diff --git a/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm b/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm
index 7bcfccb336d..49aa85ee8f0 100644
--- a/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm
+++ b/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm
@@ -17,3 +17,8 @@
/datum/exoplanet_theme/ruined_city = 5,
/datum/exoplanet_theme/robotic_guardians = 10
)
+
+/datum/map_template/planetoid/random/exoplanet/preload()
+ . = ..()
+ if(.)
+ tallness = global.using_map.planet_depth
\ No newline at end of file
diff --git a/code/modules/maps/template_types/random_exoplanet/random_map.dm b/code/modules/maps/template_types/random_exoplanet/random_map.dm
index 098b2201437..c3b8a9e729d 100644
--- a/code/modules/maps/template_types/random_exoplanet/random_map.dm
+++ b/code/modules/maps/template_types/random_exoplanet/random_map.dm
@@ -1,4 +1,5 @@
#define COAST_VALUE (cell_range + 1)
+#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X))
///Place down flora/fauna spawners, grass, water, and apply selected land type.
/datum/random_map/noise/exoplanet
@@ -137,7 +138,7 @@
return
for(var/x in 1 to limit_x - 1)
for(var/y in 1 to limit_y - 1)
- var/mapcell = get_map_cell(x,y)
+ var/mapcell = TRANSLATE_COORD(x,y)
if(noise2value(map[mapcell]) < water_level)
var/neighbors = get_neighbors(x, y, TRUE)
for(var/cell in neighbors)
@@ -152,7 +153,7 @@
/datum/random_map/noise/exoplanet/mantle
descriptor = "planetary mantle"
smoothing_iterations = 3
- land_type = /turf/exterior/volcanic
+ land_type = /turf/exterior/rock/volcanic
water_type = /turf/exterior/lava
water_level_min = 4
water_level_max = 6
@@ -165,6 +166,8 @@
//Random map generator to create rock walls underground
/datum/random_map/automata/cave_system/mantle
descriptor = "planetary mantle caves"
- target_turf_type = /turf/exterior/volcanic //Only let it apply to non-lava turfs
+ target_turf_type = /turf/exterior/rock/volcanic //Only let it apply to non-lava turfs
floor_type = null
wall_type = /turf/exterior/wall
+
+#undef TRANSLATE_COORD
\ No newline at end of file
diff --git a/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm b/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm
index 80f5b369743..655368256ed 100644
--- a/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm
+++ b/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm
@@ -19,7 +19,7 @@
///Level data for generating underground levels on exoplanets
/datum/level_data/planetoid/exoplanet/underground
base_area = /area/exoplanet/underground
- base_turf = /turf/exterior/volcanic
+ base_turf = /turf/exterior/rock
level_generators = list(
/datum/random_map/noise/exoplanet/mantle,
/datum/random_map/automata/cave_system/mantle,
diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm
index e9d9ba8360e..34b1cba8ea7 100644
--- a/code/modules/materials/_materials.dm
+++ b/code/modules/materials/_materials.dm
@@ -60,7 +60,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
//mostly for convenience
/obj/proc/get_material_type()
var/decl/material/mat = get_material()
- . = mat && mat.type
+ . = mat?.type
// Material definition and procs follow.
/decl/material
@@ -95,7 +95,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
var/shard_icon // Related to above.
var/shard_can_repair = 1 // Can shards be turned into sheets with a welder?
var/list/recipes // Holder for all recipes usable with a sheet of this material.
- var/list/strut_recipes // Holder for all the recipes you can build with the struct stack type.
var/destruction_desc = "breaks apart" // Fancy string for barricades/tables/objects exploding.
// Icons
@@ -110,7 +109,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
var/table_icon_base = "metal"
var/table_icon_reinforced = "reinf_metal"
- var/list/stack_origin_tech = "{'materials':1}" // Research level for stacks.
+ var/list/stack_origin_tech = @'{"materials":1}' // Research level for stacks.
// Attributes
/// How rare is this material in exoplanet xenoflora?
@@ -129,8 +128,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
var/boiling_point = 3000
/// kJ/kg, enthalpy of vaporization
var/latent_heat = 7000
- /// kg/mol,
+ /// kg/mol
var/molar_mass = 0.06
+ /// g/ml
+ var/liquid_density = 0.997
+ /// g/ml
+ var/solid_density = 0.9168
/// Brute damage to a wall is divided by this value if the wall is reinforced by this material.
var/brute_armor = 2
/// Same as above, but for Burn damage type. If blank brute_armor's value is used.
@@ -222,6 +225,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
var/fruit_descriptor // String added to fruit desc if this chemical is present.
var/dirtiness = DIRTINESS_NEUTRAL // How dirty turfs are after being exposed to this material. Negative values cause a cleaning/sterilizing effect.
+ var/decontamination_dose = 0 // Amount required for a decontamination effect, if any.
var/solvent_power = MAT_SOLVENT_NONE
var/solvent_melt_dose = 0
var/solvent_max_damage = 0
@@ -250,7 +254,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
var/heating_sound = 'sound/effects/bubbles.ogg'
var/list/heating_products
var/bypass_heating_products_for_root_type
- var/fuel_value = 0
+ var/accelerant_value = 0
var/burn_product
var/list/vapor_products // If splashed, releases these gasses in these proportions. // TODO add to unit test after solvent PR is merged
@@ -337,6 +341,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
#define FALSEWALL_STATE "fwall_open"
/decl/material/validate()
. = ..()
+ if(accelerant_value > FUEL_VALUE_NONE && isnull(ignition_point))
+ . += "accelerant value larger than zero but null ignition point"
+ if(!isnull(ignition_point) && accelerant_value <= FUEL_VALUE_NONE)
+ . += "accelerant value below zero but non-null ignition point"
if(length(dissolves_into) && isnull(dissolves_in))
. += "dissolves_into set but dissolves_in is undefined"
if(length(heating_products) && isnull(heating_point))
@@ -441,6 +449,19 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
return MAT_PHASE_LIQUID
return MAT_PHASE_SOLID
+// Returns the number of mols of material for the amount of solid or liquid units passed.
+/decl/material/proc/get_mols_from_units(units, phase)
+ var/ml = units*10 // Rough estimation.
+ switch(phase)
+ if(MAT_PHASE_LIQUID)
+ var/kg = (liquid_density*ml)/1000
+ return kg/molar_mass
+ if(MAT_PHASE_SOLID)
+ var/kg = (solid_density*ml)/1000
+ return kg/molar_mass
+ else
+ log_warning("Invalid phase '[phase]' passed to get_mols_from_units!")
+ return units
// Used by walls when qdel()ing to avoid neighbor merging.
/decl/material/placeholder
name = "placeholder"
@@ -544,28 +565,29 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
affectedbook.dat = null
to_chat(usr, SPAN_NOTICE("The solution dissolves the ink on the book."))
- if(solvent_power >= MAT_SOLVENT_STRONG && !O.unacidable && (istype(O, /obj/item) || istype(O, /obj/effect/vine)) && (REAGENT_VOLUME(holder, type) > solvent_melt_dose))
- var/obj/effect/decal/cleanable/molten_item/I = new(O.loc)
- I.visible_message(SPAN_DANGER("\The [O] dissolves!"))
- I.desc = "It looks like it was \a [O] some time ago."
- qdel(O)
+ if(solvent_power >= MAT_SOLVENT_STRONG && O.solvent_can_melt(solvent_power) && (istype(O, /obj/item) || istype(O, /obj/effect/vine)) && (REAGENT_VOLUME(holder, type) > solvent_melt_dose))
+ O.visible_message(SPAN_DANGER("\The [O] dissolves!"))
+ O.melt()
holder?.remove_reagent(type, solvent_melt_dose)
-
- if(dirtiness <= DIRTINESS_STERILE)
- O.germ_level -= min(REAGENT_VOLUME(holder, type)*20, O.germ_level)
- O.was_bloodied = null
-
- if(dirtiness <= DIRTINESS_CLEAN)
- O.clean_blood()
-
- if(defoliant && istype(O, /obj/effect/vine))
+ else if(defoliant && istype(O, /obj/effect/vine))
qdel(O)
+ else
+ if(dirtiness <= DIRTINESS_DECONTAMINATE)
+ if(amount >= decontamination_dose && istype(O, /obj/item))
+ var/obj/item/I = O
+ if(I.contaminated)
+ I.decontaminate()
+ if(dirtiness <= DIRTINESS_STERILE)
+ O.germ_level -= min(REAGENT_VOLUME(holder, type)*20, O.germ_level)
+ O.was_bloodied = null
+ if(dirtiness <= DIRTINESS_CLEAN)
+ O.clean_blood()
#define FLAMMABLE_LIQUID_DIVISOR 7
// This doesn't apply to skin contact - this is for, e.g. extinguishers and sprays. The difference is that reagent is not directly on the mob's skin - it might just be on their clothing.
/decl/material/proc/touch_mob(var/mob/living/M, var/amount, var/datum/reagents/holder)
- if(fuel_value && amount && istype(M))
- M.fire_stacks += FLOOR((amount * fuel_value)/FLAMMABLE_LIQUID_DIVISOR)
+ if(accelerant_value != FUEL_VALUE_NONE && amount && istype(M))
+ M.fire_stacks += FLOOR((amount * accelerant_value)/FLAMMABLE_LIQUID_DIVISOR)
#undef FLAMMABLE_LIQUID_DIVISOR
/decl/material/proc/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder) // Cleaner cleaning, lube lubbing, etc, all go here
@@ -728,34 +750,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
return
M.clean_blood()
- if(solvent_power >= MAT_SOLVENT_STRONG && removed >= solvent_melt_dose)
-
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- for(var/slot in global.standard_headgear_slots)
- var/obj/item/thing = H.get_equipped_item(slot)
- if(!istype(thing))
- continue
- if(thing.unacidable || !H.try_unequip(thing))
- to_chat(H, SPAN_NOTICE("Your [thing] protects you from the acid."))
- holder.remove_reagent(type, REAGENT_VOLUME(holder, type))
- return
- to_chat(H, SPAN_DANGER("Your [thing] dissolves!"))
- qdel(thing)
- removed -= solvent_melt_dose
- if(removed <= 0)
- return
-
- if(!H.unacidable)
- var/screamed
- for(var/obj/item/organ/external/affecting in H.get_external_organs())
- if(!screamed && affecting.can_feel_pain())
- screamed = TRUE
- H.emote("scream")
- affecting.status |= ORGAN_DISFIGURED
-
- if(!M.unacidable)
- M.take_organ_damage(0, min(removed * solvent_power * ((removed < solvent_melt_dose) ? 0.1 : 0.2), solvent_max_damage), override_droplimb = DISMEMBER_METHOD_ACID)
+ if(solvent_power > MAT_SOLVENT_NONE && removed >= solvent_melt_dose && M.solvent_act(min(removed * solvent_power * ((removed < solvent_melt_dose) ? 0.1 : 0.2), solvent_max_damage), solvent_melt_dose, solvent_power))
+ holder.remove_reagent(type, REAGENT_VOLUME(holder, type))
/decl/material/proc/affect_overdose(var/mob/living/M) // Overdose effect. Doesn't happen instantly.
M.add_chemical_effect(CE_TOXIN, 1)
@@ -818,3 +814,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay)
total_interacted_units -= interacted_units
if(total_interacted_units <= 0)
return
+
+/decl/material/proc/add_burn_product(var/atom/location, var/amount)
+ var/datum/gas_mixture/environment = istype(location, /datum/gas_mixture) ? location : location?.return_air()
+ if(!environment || amount <= 0 || !burn_product)
+ return
+ environment.adjust_gas(burn_product, amount)
diff --git a/code/modules/materials/definitions/gasses/material_gas_mundane.dm b/code/modules/materials/definitions/gasses/material_gas_mundane.dm
index a4bc989ec7c..e00322da326 100644
--- a/code/modules/materials/definitions/gasses/material_gas_mundane.dm
+++ b/code/modules/materials/definitions/gasses/material_gas_mundane.dm
@@ -325,7 +325,7 @@
lore_text = "A radioactive isotope of hydrogen. Useful as a fusion reactor fuel material."
mechanics_text = "Tritium is useable as a fuel in some forms of portable generator. It can also be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It fuses hotter than deuterium but is correspondingly more unstable."
color = "#777777"
- stack_origin_tech = "{'materials':5}"
+ stack_origin_tech = @'{"materials":5}'
value = 0.45
gas_symbol_html = "T"
gas_symbol = "T"
@@ -340,7 +340,7 @@
mechanics_text = "Deuterium can be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It is the most 'basic' fusion fuel."
flags = MAT_FLAG_FUSION_FUEL | MAT_FLAG_FISSIBLE
color = "#999999"
- stack_origin_tech = "{'materials':3}"
+ stack_origin_tech = @'{"materials":3}'
gas_symbol_html = "D"
gas_symbol = "D"
value = 0.5
diff --git a/code/modules/materials/definitions/liquids/_mat_liquid.dm b/code/modules/materials/definitions/liquids/_mat_liquid.dm
index 1d2557498c1..d2ba6fda28f 100644
--- a/code/modules/materials/definitions/liquids/_mat_liquid.dm
+++ b/code/modules/materials/definitions/liquids/_mat_liquid.dm
@@ -6,6 +6,7 @@
molar_mass = 0.018 //water
latent_heat = 2258
abstract_type = /decl/material/liquid
+ accelerant_value = FUEL_VALUE_RETARDANT // Abstract way of dousing fires with fluid; realistically it should deprive them of oxidizer but heigh ho
/decl/material/liquid/Initialize()
if(!gas_name)
diff --git a/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm b/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm
index 0f33519b30f..7d30f721cc9 100644
--- a/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm
+++ b/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm
@@ -9,8 +9,8 @@
value = 1.2
solvent_power = MAT_SOLVENT_STRONG + 2
solvent_melt_dose = 10
- boiling_point = 290 CELSIUS
- melting_point = 10 CELSIUS
+ melting_point = 284
+ boiling_point = 611
latent_heat = 612
molar_mass = 0.098
@@ -24,8 +24,8 @@
solvent_melt_dose = 8
solvent_max_damage = 30
value = 1.5
- boiling_point = 48 CELSIUS
- melting_point = -30 CELSIUS
+ boiling_point = 382
+ melting_point = 160
molar_mass = 0.036
/decl/material/liquid/acid/polyacid
@@ -62,7 +62,7 @@
value = 0.1
solvent_power = MAT_SOLVENT_MODERATE
toxicity = 3
- boiling_point = 56 CELSIUS
- melting_point = -95 CELSIUS
+ boiling_point = 330
+ melting_point = 179
latent_heat = 525
molar_mass = 0.058
diff --git a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm
index 6d17f049749..2d6705b8219 100644
--- a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm
+++ b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm
@@ -88,6 +88,8 @@
lore_text = "A highly toxic chemical."
taste_mult = 0.6
color = "#cf3600"
+ melting_point = 261
+ boiling_point = 299
toxicity = 20
metabolism = REM * 2
toxicity_targets_organ = BP_HEART
@@ -271,6 +273,8 @@
uid = "liquid_mercury"
lore_text = "A chemical element."
taste_mult = 0 //mercury apparently is tasteless. IDK
+ melting_point = 234
+ boiling_point = 629
color = "#484848"
value = 0.5
narcosis = 5
diff --git a/code/modules/materials/definitions/liquids/materials_liquid_water.dm b/code/modules/materials/definitions/liquids/materials_liquid_water.dm
index 74337d9613c..e68140e2883 100644
--- a/code/modules/materials/definitions/liquids/materials_liquid_water.dm
+++ b/code/modules/materials/definitions/liquids/materials_liquid_water.dm
@@ -45,7 +45,7 @@
var/decl/special_role/godcult = GET_DECL(/decl/special_role/godcultist)
if(M.mind && godcult.is_antagonist(M.mind))
if(REAGENT_VOLUME(holder, type) > 5)
- M.adjustHalLoss(5)
+ M.adjustHalLoss(5, do_update_health = FALSE)
M.adjustBruteLoss(1)
if(prob(10)) //Only annoy them a /bit/
to_chat(M,"You feel your insides curdle and burn! \[Give Into Purity\]")
diff --git a/code/modules/materials/definitions/solids/materials_solid_elements.dm b/code/modules/materials/definitions/solids/materials_solid_elements.dm
index 1c199fb3f45..15f4da448d6 100644
--- a/code/modules/materials/definitions/solids/materials_solid_elements.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_elements.dm
@@ -2,6 +2,8 @@
name = "boron"
uid = "solid_boron"
lore_text = "Boron is a chemical element with the symbol B and atomic number 5."
+ melting_point = 2349
+ boiling_point = 4200
flags = MAT_FLAG_FUSION_FUEL | MAT_FLAG_FISSIBLE
neutron_cross_section = 10
@@ -18,6 +20,8 @@
name = "lithium"
uid = "solid_lithium"
lore_text = "A chemical element, used as antidepressant."
+ melting_point = 453
+ boiling_point = 1615
flags = MAT_FLAG_FUSION_FUEL
taste_description = "metal"
color = "#808080"
@@ -28,6 +32,8 @@
name = "carbon"
uid = "solid_carbon"
lore_text = "A chemical element, the building block of life."
+ melting_point = 3800
+ boiling_point = 4300
taste_description = "sour chalk"
taste_mult = 1.5
color = "#1c1300"
@@ -46,6 +52,8 @@
name = "phosphorus"
uid = "solid_phosphorus"
lore_text = "A chemical element, the backbone of biological energy carriers."
+ melting_point = 317
+ boiling_point = 550
taste_description = "vinegar"
color = "#832828"
value = 0.5
@@ -61,6 +69,8 @@
name = "sodium"
uid = "solid_sodium"
lore_text = "A chemical element, readily reacts with water."
+ melting_point = 1687
+ boiling_point = 3173
taste_description = "salty metal"
color = "#808080"
value = 0.5
@@ -69,6 +79,8 @@
name = "sulfur"
uid = "solid_sulfur"
lore_text = "A chemical element with a pungent smell."
+ melting_point = 388
+ boiling_point = 717
taste_description = "old eggs"
color = "#bf8c00"
value = 0.5
@@ -77,6 +89,8 @@
name = "potassium"
uid = "solid_potassium"
lore_text = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
+ melting_point = 336
+ boiling_point = 1032
taste_description = "sweetness" //potassium is bitter in higher doses but sweet in lower ones.
color = "#a0a0a0"
value = 0.5
diff --git a/code/modules/materials/definitions/solids/materials_solid_exotic.dm b/code/modules/materials/definitions/solids/materials_solid_exotic.dm
index 2fef16f05a9..3415cc24846 100644
--- a/code/modules/materials/definitions/solids/materials_solid_exotic.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_exotic.dm
@@ -4,7 +4,7 @@
lore_text = "When hydrogen is exposed to extremely high pressures and temperatures, such as at the core of gas giants like Jupiter, it can take on metallic properties and - more importantly - acts as a room temperature superconductor. Achieving solid metallic hydrogen at room temperature, though, has proven to be rather tricky."
name = "metallic hydrogen"
color = "#e6c5de"
- stack_origin_tech = "{'materials':6,'powerstorage':6,'magnets':5}"
+ stack_origin_tech = @'{"materials":6,"powerstorage":6,"magnets":5}'
heating_products = list(
/decl/material/gas/hydrogen/tritium = 0.7,
/decl/material/gas/hydrogen/deuterium = 0.3
@@ -38,7 +38,7 @@
lore_text = "Hypercrystalline supermatter is a subset of non-baryonic 'exotic' matter. It is found mostly in the heart of large stars, and features heavily in all kinds of fringe physics-defying technology."
color = "#ffff00"
radioactivity = 20
- stack_origin_tech = "{'wormholes':2,'materials':6,'exoticmatter':4}"
+ stack_origin_tech = @'{"wormholes":2,"materials":6,"exoticmatter":4}'
luminescence = 3
value = 3
icon_base = 'icons/turf/walls/stone.dmi'
@@ -59,7 +59,7 @@
taste_mult = 1.5
toxicity = 30
touch_met = 5
- fuel_value = 2
+ accelerant_value = FUEL_VALUE_VOLATILE
vapor_products = list(
/decl/material/solid/exotic_matter = 1
)
diff --git a/code/modules/materials/definitions/solids/materials_solid_fission.dm b/code/modules/materials/definitions/solids/materials_solid_fission.dm
index a4733fae3f7..f68c8c85673 100644
--- a/code/modules/materials/definitions/solids/materials_solid_fission.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_fission.dm
@@ -41,6 +41,8 @@
table_icon_base = "stone"
icon_reinf = 'icons/turf/walls/reinforced_stone.dmi'
wall_flags = 0 //Since we're using an unpaintable icon_base and icon_reinf
+ melting_point = 910
+ boiling_point = 4300
color = "#404c53"
value = 0.5
exoplanet_rarity_plant = MAT_RARITY_UNCOMMON
@@ -65,6 +67,8 @@
table_icon_base = "stone"
icon_reinf = 'icons/turf/walls/reinforced_stone.dmi'
wall_flags = 0 //Since we're using an unpaintable icon_base and icon_reinf
+ melting_point = 912
+ boiling_point = 3503
color = "#b5c5a2"
value = 3
exoplanet_rarity_plant = MAT_RARITY_UNCOMMON
@@ -101,4 +105,4 @@
dissolves_into = list(
/decl/material/solid/metal/radium = 0.5,
/decl/material/solid/lithium = 0.5
- )
\ No newline at end of file
+ )
diff --git a/code/modules/materials/definitions/solids/materials_solid_gemstones.dm b/code/modules/materials/definitions/solids/materials_solid_gemstones.dm
index ca0fe922c53..2011742fb68 100644
--- a/code/modules/materials/definitions/solids/materials_solid_gemstones.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_gemstones.dm
@@ -18,9 +18,12 @@
name = "diamond"
uid = "solid_diamond"
lore_text = "An extremely hard allotrope of carbon. Valued for its use in industrial tools."
+ melting_point = 4300
+ boiling_point = null
+ ignition_point = null
brute_armor = 10
burn_armor = 50 // Diamond walls are immune to fire, therefore it makes sense for them to be almost undamageable by burn damage type.
- stack_origin_tech = "{'materials':6}"
+ stack_origin_tech = @'{"materials":6}'
hardness = MAT_VALUE_VERY_HARD + 20
construction_difficulty = MAT_VALUE_VERY_HARD_DIY
ore_name = "rough diamonds"
diff --git a/code/modules/materials/definitions/solids/materials_solid_glass.dm b/code/modules/materials/definitions/solids/materials_solid_glass.dm
index 605e0c9bb46..23e3b308050 100644
--- a/code/modules/materials/definitions/solids/materials_solid_glass.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_glass.dm
@@ -12,7 +12,7 @@
hardness = MAT_VALUE_RIGID + 10
door_icon_base = "metal"
reflectiveness = MAT_VALUE_SHINY
- melting_point = 1873
+ melting_point = 1674
boiling_point = null
ignition_point = null
weight = MAT_VALUE_VERY_LIGHT
@@ -32,7 +32,7 @@
return ..() && !is_reinforced()
/decl/material/solid/glass/borosilicate
- name = "borosilicate glass"
+ name = "heat-resistant glass"
codex_name = null
uid = "solid_borosilicate_glass"
lore_text = "An extremely heat-resistant form of glass."
@@ -42,9 +42,9 @@
integrity = 70
brute_armor = 2
burn_armor = 5
- melting_point = T0C + 4000
+ melting_point = 4274
color = GLASS_COLOR_SILICATE
- stack_origin_tech = "{'materials':4}"
+ stack_origin_tech = @'{"materials":4}'
construction_difficulty = MAT_VALUE_HARD_DIY
value = 1.8
@@ -54,11 +54,11 @@
lore_text = "A form of glass-reinforced plastic made from glass fibers and a polymer resin."
dissolves_into = list(
/decl/material/solid/glass = 0.7,
- /decl/material/solid/plastic = 0.3
+ /decl/material/solid/organic/plastic = 0.3
)
color = COLOR_OFF_WHITE
opacity = 0.6
- melting_point = 1400
+ melting_point = 1674
hardness = MAT_VALUE_HARD
weight = MAT_VALUE_LIGHT
integrity = 120
@@ -69,7 +69,7 @@
door_icon_base = "plastic"
hardness = MAT_VALUE_FLEXIBLE
weight = MAT_VALUE_LIGHT
- stack_origin_tech = "{'materials':3}"
+ stack_origin_tech = @'{"materials":3}'
conductive = 0
construction_difficulty = MAT_VALUE_NORMAL_DIY
reflectiveness = MAT_VALUE_MATTE
diff --git a/code/modules/materials/definitions/solids/materials_solid_ice.dm b/code/modules/materials/definitions/solids/materials_solid_ice.dm
index 6e02c04bf18..3f0c17f190a 100644
--- a/code/modules/materials/definitions/solids/materials_solid_ice.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_ice.dm
@@ -86,8 +86,8 @@
use_name = null
codex_name = null
heating_products = list(
- /decl/material/gas/ammonia = 0.4,
- /decl/material/liquid/water = 0.2,
+ /decl/material/gas/ammonia = 0.05,
+ /decl/material/liquid/water = 0.55,
/decl/material/liquid/ethanol = 0.4
)
uid = "solid_ice_ediroite"
@@ -101,10 +101,10 @@
codex_name = null
uid = "solid_ice_hydrogen"
heating_products = list(
- /decl/material/gas/hydrogen = 0.2,
- /decl/material/liquid/water = 0.65,
- /decl/material/gas/hydrogen/deuterium = 0.1,
- /decl/material/gas/hydrogen/tritium = 0.05
+ /decl/material/gas/hydrogen = 0.05,
+ /decl/material/liquid/water = 0.92,
+ /decl/material/gas/hydrogen/deuterium = 0.02,
+ /decl/material/gas/hydrogen/tritium = 0.01
)
value = 0.3
sparse_material_weight = 20
@@ -124,13 +124,13 @@
//Little helper macro, since hydrates are all basically the same
// DISPLAY_NAME is needed because of compounds with white spaces in their names
-#define DECLARE_HYDRATE_DNAME_PATH(PATH, NAME, DISPLAY_NAME) \
-/decl/material/solid/ice/hydrate/##NAME/uid = "solid_hydrate_##NAME"; \
-/decl/material/solid/ice/hydrate/##NAME/Initialize(){ \
- name = "[##DISPLAY_NAME] hydrate"; \
- heating_products = list(PATH = 0.2, /decl/material/liquid/water = 0.8); \
- . = ..(); \
-} \
+#define DECLARE_HYDRATE_DNAME_PATH(PATH, NAME, DISPLAY_NAME) \
+/decl/material/solid/ice/hydrate/##NAME/uid = "solid_hydrate_" + #NAME; \
+/decl/material/solid/ice/hydrate/##NAME/name = #DISPLAY_NAME + " hydrate"; \
+/decl/material/solid/ice/hydrate/##NAME/heating_products = list( \
+ PATH = 0.1, \
+ /decl/material/liquid/water = 0.9 \
+); \
/decl/material/solid/ice/hydrate/##NAME
#define DECLARE_HYDRATE_DNAME(NAME, DISPLAY_NAME) DECLARE_HYDRATE_DNAME_PATH(/decl/material/gas/##NAME, NAME, DISPLAY_NAME)
diff --git a/code/modules/materials/definitions/solids/materials_solid_metal.dm b/code/modules/materials/definitions/solids/materials_solid_metal.dm
index 5fca3b43d5e..8d247963b5f 100644
--- a/code/modules/materials/definitions/solids/materials_solid_metal.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_metal.dm
@@ -27,6 +27,8 @@
lore_text = "A silvery-white metallic chemical element in the actinide series, weakly radioactive. Commonly used as fuel in fission reactors."
mechanics_text = "Uranium can be used as fuel in fission reactors."
taste_description = "the inside of a reactor"
+ melting_point = 1407
+ boiling_point = 4074
flags = MAT_FLAG_FISSIBLE
radioactivity = 12
icon_base = 'icons/turf/walls/stone.dmi'
@@ -35,7 +37,7 @@
icon_reinf = 'icons/turf/walls/reinforced_stone.dmi'
color = "#007a00"
weight = MAT_VALUE_VERY_HEAVY
- stack_origin_tech = "{'materials':5}"
+ stack_origin_tech = @'{"materials":5}'
reflectiveness = MAT_VALUE_MATTE
value = 1.5
default_solid_form = /obj/item/stack/material/puck
@@ -67,6 +69,8 @@
lore_text = "Radium is an alkaline earth metal. It is extremely radioactive."
mechanics_text = "Radium can be used as a neutron source in fission reactors."
taste_description = "the color blue, and regret"
+ melting_point = 1234
+ boiling_point = 1414
color = "#c7c7c7"
value = 0.5
radioactivity = 18
@@ -76,10 +80,12 @@
codex_name = "elemental gold"
uid = "solid_gold"
lore_text = "A heavy, soft, ductile metal. Once considered valuable enough to back entire currencies, now predominantly used in corrosion-resistant electronics."
+ melting_point = 1337
+ boiling_point = 2974
color = COLOR_GOLD
hardness = MAT_VALUE_FLEXIBLE + 5
integrity = 100
- stack_origin_tech = "{'materials':4}"
+ stack_origin_tech = @'{"materials":4}'
ore_result_amount = 5
ore_name = "native gold"
ore_spread_chance = 10
@@ -96,6 +102,8 @@
codex_name = "bronze alloy"
uid = "solid_bronze"
lore_text = "An alloy of copper and tin. Once used in weapons and laboring tools."
+ melting_point = 1184
+ boiling_point = 2574
color = "#ccbc63"
brute_armor = 3
hardness = MAT_VALUE_RIGID + 10
@@ -136,6 +144,8 @@
name = "brass"
uid = "solid_brass"
lore_text = "An alloy of copper and zinc. Renowned for its golden color."
+ melting_point = 1174
+ boiling_point = 1374
color = "#dab900"
reflectiveness = MAT_VALUE_VERY_SHINY
value = 1.2
@@ -147,18 +157,22 @@
name = "copper"
uid = "solid_copper"
lore_text = "A metal used in some components and many alloys. Known for its color-shifting properties when oxidized."
+ melting_point = 1357
+ boiling_point = 2774
color = COLOR_COPPER
weight = MAT_VALUE_NORMAL
hardness = MAT_VALUE_FLEXIBLE + 10
- stack_origin_tech = "{'materials':2}"
+ stack_origin_tech = @'{"materials":2}'
/decl/material/solid/metal/silver
name = "silver"
uid = "solid_silver"
lore_text = "A soft, white, lustrous transition metal. Has many and varied industrial uses in electronics, solar panels and mirrors."
+ melting_point = 1234
+ boiling_point = 2444
color = "#d1e6e3"
hardness = MAT_VALUE_FLEXIBLE + 10
- stack_origin_tech = "{'materials':3}"
+ stack_origin_tech = @'{"materials":3}'
ore_result_amount = 5
ore_spread_chance = 10
ore_name = "native silver"
@@ -175,6 +189,8 @@
codex_name = "carbon steel"
uid = "solid_steel"
lore_text = "A strong, flexible alloy of iron and carbon. Probably the single most fundamentally useful and ubiquitous substance in human space."
+ melting_point = 1734
+ boiling_point = 2774
weight = MAT_VALUE_NORMAL
wall_support_value = MAT_VALUE_VERY_HEAVY // Ideal construction material.
hardness = MAT_VALUE_HARD
@@ -194,27 +210,28 @@
)
default_solid_form = /obj/item/stack/material/sheet
-/decl/material/solid/metal/steel/generate_recipes(var/reinforce_material)
+/decl/material/solid/metal/steel/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/furniture/closet(src)
- . += new/datum/stack_recipe/furniture/tank_dispenser(src)
- . += new/datum/stack_recipe/furniture/canister(src)
- . += new/datum/stack_recipe/furniture/tank(src)
- . += new/datum/stack_recipe/cannon(src)
- . += new/datum/stack_recipe_list("tiling", create_recipe_list(/datum/stack_recipe/tile/metal))
- . += new/datum/stack_recipe/furniture/computerframe(src)
- . += new/datum/stack_recipe/furniture/machine(src)
- . += new/datum/stack_recipe_list("airlock assemblies", create_recipe_list(/datum/stack_recipe/furniture/door_assembly))
- . += new/datum/stack_recipe/grenade(src)
- . += new/datum/stack_recipe/light(src)
- . += new/datum/stack_recipe/light_small(src)
- . += new/datum/stack_recipe/light_switch(src)
- . += new/datum/stack_recipe/light_switch/windowtint(src)
- . += new/datum/stack_recipe/apc(src)
- . += new/datum/stack_recipe/air_alarm(src)
- . += new/datum/stack_recipe/fire_alarm(src)
+ if(!reinforce_material && islist(.))
+ if(!ispath(stack_type))
+ . += new/datum/stack_recipe/furniture/closet(src)
+ . += new/datum/stack_recipe/furniture/tank_dispenser(src)
+ . += new/datum/stack_recipe/furniture/canister(src)
+ . += new/datum/stack_recipe/furniture/tank(src)
+ . += new/datum/stack_recipe/cannon(src)
+ . += new/datum/stack_recipe_list("tiling", create_recipe_list(/datum/stack_recipe/tile/metal))
+ . += new/datum/stack_recipe/furniture/computerframe(src)
+ . += new/datum/stack_recipe_list("airlock assemblies", create_recipe_list(/datum/stack_recipe/furniture/door_assembly))
+ . += new/datum/stack_recipe/grenade(src)
+ . += new/datum/stack_recipe/light(src)
+ . += new/datum/stack_recipe/light_small(src)
+ . += new/datum/stack_recipe/light_switch(src)
+ . += new/datum/stack_recipe/light_switch/windowtint(src)
+ . += new/datum/stack_recipe/apc(src)
+ . += new/datum/stack_recipe/air_alarm(src)
+ . += new/datum/stack_recipe/fire_alarm(src)
+ else if(ispath(stack_type, /obj/item/stack/material/strut))
+ . += new/datum/stack_recipe/furniture/machine(src)
/decl/material/solid/metal/steel/holographic
name = "holographic steel"
@@ -226,13 +243,15 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/metal/steel/holographic/get_recipes(reinf_mat)
+/decl/material/solid/metal/steel/holographic/get_recipes(stack_type, reinf_mat)
return list()
/decl/material/solid/metal/stainlesssteel
name = "stainless steel"
uid = "solid_stainless_steel"
lore_text = "A reflective alloy of steel and chromium. Used for its reflective and sturdy properties."
+ melting_point = 1784
+ boiling_point = null
wall_support_value = MAT_VALUE_HEAVY
integrity = 175
burn_armor = 10
@@ -252,6 +271,8 @@
name = "aluminium"
uid = "solid_aluminium"
lore_text = "A low-density ductile metal with a silvery-white sheen."
+ melting_point = 932
+ boiling_point = 2474
integrity = 125
weight = MAT_VALUE_LIGHT
icon_base = 'icons/turf/walls/solid.dmi'
@@ -263,11 +284,10 @@
taste_description = "metal"
default_solid_form = /obj/item/stack/material/shiny
-/decl/material/solid/metal/aluminium/generate_recipes(var/reinforce_material)
+/decl/material/solid/metal/aluminium/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/grenade(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/grenade(src)
/decl/material/solid/metal/aluminium/holographic
name = "holoaluminium"
@@ -278,7 +298,7 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/metal/aluminium/holographic/get_recipes(reinf_mat)
+/decl/material/solid/metal/aluminium/holographic/get_recipes(stack_type, reinf_mat)
return list()
/decl/material/solid/metal/plasteel
@@ -297,7 +317,7 @@
brute_armor = 8
burn_armor = 10
hardness = MAT_VALUE_VERY_HARD
- stack_origin_tech = "{'materials':2}"
+ stack_origin_tech = @'{"materials":2}'
hitsound = 'sound/weapons/smash.ogg'
value = 1.4
reflectiveness = MAT_VALUE_MATTE
@@ -305,13 +325,12 @@
exoplanet_rarity_plant = MAT_RARITY_UNCOMMON
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/metal/plasteel/generate_recipes(var/reinforce_material)
+/decl/material/solid/metal/plasteel/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/ai_core(src)
- . += new/datum/stack_recipe/furniture/crate(src)
- . += new/datum/stack_recipe/grip(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/ai_core(src)
+ . += new/datum/stack_recipe/furniture/crate(src)
+ . += new/datum/stack_recipe/grip(src)
/decl/material/solid/metal/titanium
name = "titanium"
@@ -320,7 +339,8 @@
brute_armor = 10
burn_armor = 8
integrity = 200
- melting_point = 3000
+ melting_point = 1944
+ boiling_point = 3474
weight = MAT_VALUE_LIGHT
icon_base = 'icons/turf/walls/metal.dmi'
wall_flags = PAINT_PAINTABLE
@@ -331,18 +351,17 @@
value = 1.5
explosion_resistance = 25
hardness = MAT_VALUE_VERY_HARD
- stack_origin_tech = "{'materials':2}"
+ stack_origin_tech = @'{"materials":2}'
hitsound = 'sound/weapons/smash.ogg'
reflectiveness = MAT_VALUE_MATTE
default_solid_form = /obj/item/stack/material/reinforced
-/decl/material/solid/metal/titanium/generate_recipes(var/reinforce_material)
+/decl/material/solid/metal/titanium/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/ai_core(src)
- . += new/datum/stack_recipe/furniture/crate(src)
- . += new/datum/stack_recipe/grip(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/ai_core(src)
+ . += new/datum/stack_recipe/furniture/crate(src)
+ . += new/datum/stack_recipe/grip(src)
/decl/material/solid/metal/plasteel/ocp
name = "osmium-carbide plasteel"
@@ -357,7 +376,7 @@
color = "#9bc6f2"
brute_armor = 4
burn_armor = 20
- stack_origin_tech = "{'materials':3}"
+ stack_origin_tech = @'{"materials":3}'
construction_difficulty = MAT_VALUE_VERY_HARD_DIY
value = 1.8
exoplanet_rarity_plant = MAT_RARITY_UNCOMMON
@@ -367,8 +386,10 @@
name = "osmium"
uid = "solid_osmium"
lore_text = "An extremely hard form of platinum."
+ melting_point = 3307
+ boiling_point = 5285
color = "#9999ff"
- stack_origin_tech = "{'materials':5}"
+ stack_origin_tech = @'{"materials":5}'
construction_difficulty = MAT_VALUE_VERY_HARD_DIY
value = 1.3
@@ -376,10 +397,12 @@
name = "platinum"
uid = "solid_platinum"
lore_text = "A very dense, unreactive, precious metal. Has many industrial uses, particularly as a catalyst."
+ melting_point = 2041
+ boiling_point = 4098
color = "#deddff"
weight = MAT_VALUE_VERY_HEAVY
wall_support_value = MAT_VALUE_VERY_HEAVY
- stack_origin_tech = "{'materials':2}"
+ stack_origin_tech = @'{"materials":2}'
ore_compresses_to = /decl/material/solid/metal/osmium
ore_result_amount = 5
ore_spread_chance = 10
@@ -396,6 +419,8 @@
name = "iron"
uid = "solid_iron"
lore_text = "A ubiquitous, very common metal. The epitaph of stars and the primary ingredient in Earth's core."
+ melting_point = 1811
+ boiling_point = 3134
color = "#5c5454"
hitsound = 'sound/weapons/smash.ogg'
construction_difficulty = MAT_VALUE_NORMAL_DIY
@@ -412,6 +437,8 @@
name = "tin"
uid = "solid_tin"
lore_text = "A soft metal that can be cut without much force. Used in many alloys."
+ melting_point = 505
+ boiling_point = 2875
color = "#c5c5a8"
hardness = MAT_VALUE_SOFT + 10
construction_difficulty = MAT_VALUE_EASY_DIY
@@ -421,6 +448,8 @@
name = "lead"
uid = "solid_lead"
lore_text = "A very soft, heavy and poisonous metal. You probably shouldn't lick it."
+ melting_point = 600
+ boiling_point = 2022
color = "#3f3f4d"
hardness = MAT_VALUE_SOFT
construction_difficulty = MAT_VALUE_NORMAL_DIY
@@ -432,6 +461,8 @@
name = "zinc"
uid = "solid_zinc"
lore_text = "A dull-looking metal with some use in alloying."
+ melting_point = 692
+ boiling_point = 1180
color = "#92aae4"
construction_difficulty = MAT_VALUE_NORMAL_DIY
reflectiveness = MAT_VALUE_MATTE
@@ -443,7 +474,8 @@
color = "#dadada"
integrity = 200
burn_armor = 15 // Strong against laser weaponry, but not as good as OCP.
- melting_point = 6000
+ melting_point = 2180
+ boiling_point = 2944
icon_base = 'icons/turf/walls/solid.dmi'
icon_reinf = 'icons/turf/walls/reinforced.dmi'
wall_flags = PAINT_PAINTABLE|PAINT_STRIPABLE|WALL_HAS_EDGES
diff --git a/code/modules/materials/definitions/solids/materials_solid_mineral.dm b/code/modules/materials/definitions/solids/materials_solid_mineral.dm
index 37954cec619..61e286145e0 100644
--- a/code/modules/materials/definitions/solids/materials_solid_mineral.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_mineral.dm
@@ -13,7 +13,7 @@
ore_spread_chance = 10
ore_name = "pitchblende"
ore_scan_icon = "mineral_uncommon"
- stack_origin_tech = "{'materials':5}"
+ stack_origin_tech = @'{"materials":5}'
xarch_source_mineral = /decl/material/solid/phosphorus
ore_icon_overlay = "nugget"
value = 0.8
@@ -38,11 +38,14 @@
ore_icon_overlay = "lump"
ore_type_value = ORE_SURFACE
ore_data_value = 1
+ melting_point = 4074
+ boiling_point = 4474
+ ignition_point = 774
+ accelerant_value = 0.8
burn_product = /decl/material/gas/carbon_monoxide
value = 0.8
sparse_material_weight = 35
rich_material_weight = 20
- fuel_value = 0.8
dirtiness = 15
flags = MAT_FLAG_FISSIBLE
@@ -66,6 +69,8 @@
ore_spread_chance = 10
ore_scan_icon = "mineral_common"
ore_icon_overlay = "lump"
+ melting_point = 1744
+ boiling_point = 2504
color = "#effffe"
reflectiveness = MAT_VALUE_SHINY
sparse_material_weight = 3
@@ -385,7 +390,8 @@
value = 1.2
sparse_material_weight = 10
rich_material_weight = 5
- fuel_value = 0.9
+ ignition_point = 774
+ accelerant_value = 0.9
dirtiness = 15
dissolves_into = list(
/decl/material/solid/carbon = 0.1,
@@ -416,7 +422,6 @@
value = 0.9
sparse_material_weight = 20
rich_material_weight = 10
- fuel_value = 0.8
dissolves_into = list(
/decl/material/solid/metal/tin = 0.8,
/decl/material/solid/metal/tungsten = 0.2
@@ -445,7 +450,6 @@
value = 0.9
sparse_material_weight = 15
rich_material_weight = 10
- fuel_value = 0.8
dissolves_into = list(
/decl/material/solid/metal/tin = 0.1,
/decl/material/solid/metal/tungsten = 0.6,
@@ -475,7 +479,6 @@
value = 1.1
sparse_material_weight = 10
rich_material_weight = 5
- fuel_value = 0.8
dissolves_into = list(
/decl/material/solid/metal/platinum = 0.7,
/decl/material/solid/metal/iron = 0.1,
@@ -505,7 +508,6 @@
value = 0.8
sparse_material_weight = 25
rich_material_weight = 15
- fuel_value = 0.8
dissolves_into = list(
/decl/material/solid/metal/zinc = 0.7,
/decl/material/solid/metal/iron = 0.2,
@@ -534,7 +536,6 @@
value = 0.8
sparse_material_weight = 20
rich_material_weight = 10
- fuel_value = 0.8
dissolves_into = list(
/decl/material/solid/metal/lead = 0.7,
/decl/material/solid/metal/iron = 0.2,
@@ -563,7 +564,6 @@
value = 0.8
sparse_material_weight = 5
rich_material_weight = 5
- fuel_value = 0.8
dissolves_into = list(
/decl/material/solid/metal/gold = 0.7,
/decl/material/solid/metal/silver = 0.3
@@ -591,7 +591,6 @@
value = 0.9
sparse_material_weight = 5
rich_material_weight = 10
- fuel_value = 0.8
dissolves_into = list(
/decl/material/solid/metal/chromium = 0.6,
/decl/material/solid/metal/lead = 0.4
diff --git a/code/modules/materials/definitions/solids/materials_solid_mundane.dm b/code/modules/materials/definitions/solids/materials_solid_mundane.dm
index 419072501a4..ba5f63c75d3 100644
--- a/code/modules/materials/definitions/solids/materials_solid_mundane.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_mundane.dm
@@ -9,12 +9,13 @@
reflectiveness = MAT_VALUE_DULL
wall_support_value = MAT_VALUE_LIGHT
dissolves_into = list(
- /decl/material/solid/sand = 0.5,
- /decl/material/solid/metal/iron = 0.2,
+ /decl/material/solid/sand = 0.3,
+ /decl/material/solid/clay = 0.2,
+ /decl/material/solid/metal/iron = 0.2,
/decl/material/solid/metal/aluminium = 0.05,
- /decl/material/solid/phosphorus = 0.05,
- /decl/material/gas/sulfur_dioxide = 0.05,
- /decl/material/gas/carbon_dioxide = 0.05
+ /decl/material/solid/phosphorus = 0.05,
+ /decl/material/gas/sulfur_dioxide = 0.05,
+ /decl/material/gas/carbon_dioxide = 0.05
)
value = 0.1
default_solid_form = /obj/item/stack/material/lump
@@ -24,10 +25,11 @@
// Slag can be reclaimed into more useful forms by grinding it up and mixing it with strong acid.
dissolves_in = MAT_SOLVENT_STRONG
dissolves_into = list(
- /decl/material/solid/sand = 0.7,
- /decl/material/solid/metal/iron = 0.1,
+ /decl/material/solid/sand = 0.5,
+ /decl/material/solid/clay = 0.2,
+ /decl/material/solid/metal/iron = 0.1,
/decl/material/solid/metal/aluminium = 0.05,
- /decl/material/solid/phosphorus = 0.05,
- /decl/material/gas/sulfur_dioxide = 0.05,
- /decl/material/gas/carbon_dioxide = 0.05
+ /decl/material/solid/phosphorus = 0.05,
+ /decl/material/gas/sulfur_dioxide = 0.05,
+ /decl/material/gas/carbon_dioxide = 0.05
)
diff --git a/code/modules/materials/definitions/solids/materials_solid_organic.dm b/code/modules/materials/definitions/solids/materials_solid_organic.dm
index c481a2acd62..0e3a7623b34 100644
--- a/code/modules/materials/definitions/solids/materials_solid_organic.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_organic.dm
@@ -1,4 +1,10 @@
-/decl/material/solid/plastic
+/decl/material/solid/organic
+ abstract_type = /decl/material/solid/organic
+ ignition_point = T0C+500 // Based on loose ignition temperature of plastic
+ accelerant_value = 0.1
+ burn_product = /decl/material/gas/carbon_monoxide
+
+/decl/material/solid/organic/plastic
name = "plastic"
uid = "solid_plastic"
lore_text = "A generic polymeric material. Probably the most flexible and useful substance ever created by human science; mostly used to make disposable cutlery."
@@ -12,32 +18,54 @@
hardness = MAT_VALUE_FLEXIBLE + 10
weight = MAT_VALUE_LIGHT
melting_point = T0C+371 //assuming heat resistant plastic
- stack_origin_tech = "{'materials':3}"
+ stack_origin_tech = @'{"materials":3}'
conductive = 0
construction_difficulty = MAT_VALUE_NORMAL_DIY
reflectiveness = MAT_VALUE_SHINY
wall_support_value = MAT_VALUE_EXTREMELY_LIGHT
taste_description = "plastic"
- fuel_value = 0.6
- burn_product = /decl/material/gas/carbon_monoxide // placeholder for more appropriate toxins
+ accelerant_value = 0.6
dooropen_noise = 'sound/effects/doorcreaky.ogg'
default_solid_form = /obj/item/stack/material/panel
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/plastic/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/plastic/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/furniture/crate/plastic(src)
- . += new/datum/stack_recipe/bag(src)
- . += new/datum/stack_recipe/ivbag(src)
- . += create_recipe_list(/datum/stack_recipe/cartridge)
- . += create_recipe_list(/datum/stack_recipe/tile/light)
- . += new/datum/stack_recipe/hazard_cone(src)
- . += new/datum/stack_recipe/furniture/flaps(src)
-
-/decl/material/solid/plastic/holographic
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/furniture/crate/plastic(src)
+ . += new/datum/stack_recipe/bag(src)
+ . += new/datum/stack_recipe/ivbag(src)
+ . += create_recipe_list(/datum/stack_recipe/cartridge)
+ . += create_recipe_list(/datum/stack_recipe/tile/light)
+ . += new/datum/stack_recipe/hazard_cone(src)
+ . += new/datum/stack_recipe/furniture/flaps(src)
+
+/decl/material/solid/organic/wax
+ name = "wax"
+ uid = "solid_wax"
+ taste_description = "waxy blandness"
+ lore_text = "A soft, easily melted substance produced by bees. Used to make candles."
+ accelerant_value = 0.6
+ construction_difficulty = MAT_VALUE_NORMAL_DIY
+ reflectiveness = MAT_VALUE_SHINY
+ wall_support_value = MAT_VALUE_EXTREMELY_LIGHT
+ default_solid_form = /obj/item/stack/material/bar
+ sound_manipulate = 'sound/foley/paperpickup2.ogg'
+ sound_dropped = 'sound/foley/paperpickup1.ogg'
+ color = "#fffccc"
+ door_icon_base = "plastic"
+ hardness = MAT_VALUE_FLEXIBLE - 10
+ weight = MAT_VALUE_LIGHT
+ melting_point = 363
+ ignition_point = 473
+ boiling_point = 643
+
+// Wax does not use the base recipe list.
+/decl/material/solid/organic/wax/generate_recipes()
+ . = list(new /datum/stack_recipe/candle(src))
+
+/decl/material/solid/organic/plastic/holographic
name = "holographic plastic"
uid = "solid_holographic_plastic"
shard_type = SHARD_NONE
@@ -45,10 +73,10 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/plastic/holographic/get_recipes(reinf_mat)
+/decl/material/solid/organic/plastic/holographic/get_recipes(stack_type, reinf_mat)
return list()
-/decl/material/solid/cardboard
+/decl/material/solid/organic/cardboard
name = "cardboard"
uid = "solid_cardboard"
lore_text = "What with the difficulties presented by growing plants in orbit, a stock of cardboard in space is probably more valuable than gold."
@@ -64,7 +92,7 @@
weight = MAT_VALUE_EXTREMELY_LIGHT - 5
ignition_point = T0C+232 //"the temperature at which book-paper catches fire, and burns." close enough
melting_point = T0C+232 //temperature at which cardboard walls would be destroyed
- stack_origin_tech = "{'materials':1}"
+ stack_origin_tech = @'{"materials":1}'
door_icon_base = "wood"
destruction_desc = "crumples"
conductive = 0
@@ -77,21 +105,20 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/cardboard/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/cardboard/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += create_recipe_list(/datum/stack_recipe/box)
- . += new/datum/stack_recipe/cardborg_suit(src)
- . += new/datum/stack_recipe/cardborg_helmet(src)
- . += new/datum/stack_recipe_list("folders", create_recipe_list(/datum/stack_recipe/folder))
-
-/decl/material/solid/paper
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += create_recipe_list(/datum/stack_recipe/box)
+ . += new/datum/stack_recipe/cardborg_suit(src)
+ . += new/datum/stack_recipe/cardborg_helmet(src)
+ . += new/datum/stack_recipe_list("folders", create_recipe_list(/datum/stack_recipe/folder))
+
+/decl/material/solid/organic/paper
name = "paper"
uid = "solid_paper"
lore_text = "Low tech writing medium made from cellulose fibers. Also used in wrappings and packaging."
color = "#cfcece"
- stack_origin_tech = "{'materials':1}"
+ stack_origin_tech = @'{"materials":1}'
door_icon_base = "wood"
destruction_desc = "tears"
icon_base = 'icons/turf/walls/solid.dmi'
@@ -117,18 +144,17 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/paper/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/paper/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/paper_sheets(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/paper_sheets(src)
-/decl/material/solid/cloth //todo
+/decl/material/solid/organic/cloth //todo
name = "cotton"
uid = "solid_cotton"
use_name = "cotton"
color = "#ffffff"
- stack_origin_tech = "{'materials':2}"
+ stack_origin_tech = @'{"materials":2}'
door_icon_base = "wood"
ignition_point = T0C+232
melting_point = T0C+300
@@ -147,77 +173,76 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/cloth/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/cloth/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/cloak(src)
- . += new/datum/stack_recipe/banner(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/cloak(src)
+ . += new/datum/stack_recipe/banner(src)
-/decl/material/solid/cloth/yellow
+/decl/material/solid/organic/cloth/yellow
name = "yellow"
uid = "solid_cotton_yellow"
use_name = "yellow cloth"
adjective_name = "yellow"
color = "#ffbf00"
-/decl/material/solid/cloth/teal
+/decl/material/solid/organic/cloth/teal
name = "teal"
uid = "solid_cotton_teal"
use_name = "teal cloth"
adjective_name = "teal"
color = "#00e1ff"
-/decl/material/solid/cloth/black
+/decl/material/solid/organic/cloth/black
name = "black"
uid = "solid_cotton_black"
use_name = "black cloth"
adjective_name = "black"
color = "#505050"
-/decl/material/solid/cloth/green
+/decl/material/solid/organic/cloth/green
name = "green"
uid = "solid_cotton_green"
use_name = "green cloth"
adjective_name = "green"
color = "#b7f27d"
-/decl/material/solid/cloth/purple
+/decl/material/solid/organic/cloth/purple
name = "purple"
uid = "solid_cotton_purple"
use_name = "purple cloth"
adjective_name = "purple"
color = "#9933ff"
-/decl/material/solid/cloth/blue
+/decl/material/solid/organic/cloth/blue
name = "blue"
uid = "solid_cotton_blue"
use_name = "blue cloth"
adjective_name = "blue"
color = "#46698c"
-/decl/material/solid/cloth/beige
+/decl/material/solid/organic/cloth/beige
name = "beige"
uid = "solid_cotton_beige"
use_name = "beige cloth"
adjective_name = "beige"
color = "#ceb689"
-/decl/material/solid/cloth/lime
+/decl/material/solid/organic/cloth/lime
name = "lime"
uid = "solid_cotton_lime"
use_name = "lime cloth"
adjective_name = "lime"
color = "#62e36c"
-/decl/material/solid/cloth/red
+/decl/material/solid/organic/cloth/red
name = "red"
uid = "solid_cotton_red"
use_name = "red cloth"
adjective_name = "red"
color = "#9d2300"
-/decl/material/solid/carpet
+/decl/material/solid/organic/carpet
name = "red"
uid = "solid_carpet"
use_name = "red upholstery"
@@ -239,7 +264,7 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/plantmatter
+/decl/material/solid/organic/plantmatter
name = "plant matter"
uid = "solid_plantmatter"
color = COLOR_GREEN_GRAY
@@ -260,7 +285,7 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/meat
+/decl/material/solid/organic/meat
name = "meat"
uid = "solid_meat"
color = COLOR_DARK_RED
@@ -282,7 +307,7 @@
sound_dropped = 'sound/foley/meat2.ogg'
hitsound = 'sound/effects/squelch1.ogg'
-/decl/material/solid/skin
+/decl/material/solid/organic/skin
name = "skin"
uid = "solid_skin"
color = "#9e8c72"
@@ -304,31 +329,30 @@
sound_dropped = 'sound/foley/meat2.ogg'
hitsound = "punch"
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
- var/tans_to = /decl/material/solid/leather
+ var/tans_to = /decl/material/solid/organic/leather
-/decl/material/solid/skin/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/skin/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/cloak(src)
- . += new/datum/stack_recipe/banner(src)
- . += new/datum/stack_recipe/shoes(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/cloak(src)
+ . += new/datum/stack_recipe/banner(src)
+ . += new/datum/stack_recipe/shoes(src)
-/decl/material/solid/skin/lizard
+/decl/material/solid/organic/skin/lizard
name = "lizardskin"
uid = "solid_lizardskin"
color = "#626952"
- tans_to = /decl/material/solid/leather/lizard
+ tans_to = /decl/material/solid/organic/leather/lizard
hardness = MAT_VALUE_FLEXIBLE
weight = MAT_VALUE_VERY_LIGHT
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/skin/insect
+/decl/material/solid/organic/skin/insect
name = "chitin"
uid = "solid_chitin"
color = "#7a776d"
- tans_to = /decl/material/solid/leather/chitin
+ tans_to = /decl/material/solid/organic/leather/chitin
integrity = 75
hardness = MAT_VALUE_RIGID
weight = MAT_VALUE_VERY_LIGHT
@@ -336,56 +360,56 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/skin/fur
+/decl/material/solid/organic/skin/fur
name = "fur"
uid = "solid_fur"
color = "#7a726d"
- tans_to = /decl/material/solid/leather/fur
+ tans_to = /decl/material/solid/organic/leather/fur
default_solid_form = /obj/item/stack/material/skin/pelt
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/skin/fur/gray
+/decl/material/solid/organic/skin/fur/gray
uid = "solid_fur_gray"
-/decl/material/solid/skin/fur/white
+/decl/material/solid/organic/skin/fur/white
uid = "solid_fur_white"
-/decl/material/solid/skin/fur/orange
+/decl/material/solid/organic/skin/fur/orange
color = COLOR_ORANGE
uid = "solid_fur_orange"
-/decl/material/solid/skin/fur/black
+/decl/material/solid/organic/skin/fur/black
color = COLOR_GRAY20
uid = "solid_fur_black"
-/decl/material/solid/skin/fur/heavy
+/decl/material/solid/organic/skin/fur/heavy
color = COLOR_GUNMETAL
uid = "solid_fur_heavy"
-/decl/material/solid/skin/goat
+/decl/material/solid/organic/skin/goat
color = COLOR_SILVER
uid = "solid_skin_goat"
-/decl/material/solid/skin/cow
+/decl/material/solid/organic/skin/cow
color = COLOR_GRAY40
uid = "solid_skin_cow"
-/decl/material/solid/skin/shark
+/decl/material/solid/organic/skin/shark
name = "sharkskin"
color = COLOR_PURPLE_GRAY
uid = "solid_skin_shark"
-/decl/material/solid/skin/fish
+/decl/material/solid/organic/skin/fish
color = COLOR_BOTTLE_GREEN
name = "fishskin"
uid = "solid_skin_fish"
-/decl/material/solid/skin/fish/purple
+/decl/material/solid/organic/skin/fish/purple
color = COLOR_PALE_PURPLE_GRAY
uid = "solid_skin_carp"
-/decl/material/solid/skin/feathers
+/decl/material/solid/organic/skin/feathers
name = "feathers"
uid = "solid_feathers"
color = COLOR_SILVER
@@ -393,31 +417,31 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/skin/feathers/purple
+/decl/material/solid/organic/skin/feathers/purple
color = COLOR_PALE_PURPLE_GRAY
uid = "solid_feathers_purple"
-/decl/material/solid/skin/feathers/blue
+/decl/material/solid/organic/skin/feathers/blue
color = COLOR_SKY_BLUE
uid = "solid_feathers_blue"
-/decl/material/solid/skin/feathers/green
+/decl/material/solid/organic/skin/feathers/green
color = COLOR_BOTTLE_GREEN
uid = "solid_feathers_green"
-/decl/material/solid/skin/feathers/brown
+/decl/material/solid/organic/skin/feathers/brown
color = COLOR_BEASTY_BROWN
uid = "solid_feathers_brown"
-/decl/material/solid/skin/feathers/red
+/decl/material/solid/organic/skin/feathers/red
color = COLOR_RED
uid = "solid_feathers_red"
-/decl/material/solid/skin/feathers/black
+/decl/material/solid/organic/skin/feathers/black
color = COLOR_GRAY15
uid = "solid_feathers_black"
-/decl/material/solid/bone
+/decl/material/solid/organic/bone
name = "bone"
uid = "solid_bone"
color = "#f0edc7"
@@ -436,13 +460,24 @@
sound_manipulate = 'sound/foley/stickspickup1.ogg'
sound_dropped = 'sound/foley/sticksdrop1.ogg'
-/decl/material/solid/bone/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/bone/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(!reinforce_material && wall_support_value >= 10)
+ if(!reinforce_material && islist(.) && !ispath(stack_type) && wall_support_value >= 10)
. += new/datum/stack_recipe/furniture/girder(src)
. += new/datum/stack_recipe/furniture/ladder(src)
-/decl/material/solid/bone/fish
+// Stub for earrings. TODO: put it in clams
+/decl/material/solid/organic/bone/pearl
+ name = "pearl"
+ uid = "solid_pearl"
+ color = "#eae0c8"
+ default_solid_form = /obj/item/stack/material/lump
+ hardness = MAT_VALUE_FLEXIBLE
+ weight = MAT_VALUE_VERY_LIGHT
+ exoplanet_rarity_gas = MAT_RARITY_NOWHERE
+ exoplanet_rarity_plant = MAT_RARITY_NOWHERE
+
+/decl/material/solid/organic/bone/fish
name = "fishbone"
uid = "solid_fishbone"
hardness = MAT_VALUE_FLEXIBLE
@@ -450,7 +485,7 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/bone/cartilage
+/decl/material/solid/organic/bone/cartilage
name = "cartilage"
uid = "solid_cartilage"
hardness = 0
@@ -458,11 +493,11 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/leather
+/decl/material/solid/organic/leather
name = "leather"
uid = "solid_leather"
color = "#5c4831"
- stack_origin_tech = "{'materials':2}"
+ stack_origin_tech = @'{"materials":2}'
flags = MAT_FLAG_PADDING
ignition_point = T0C+300
melting_point = T0C+300
@@ -480,23 +515,22 @@
sound_manipulate = 'sound/foley/paperpickup2.ogg'
sound_dropped = 'sound/foley/paperpickup1.ogg'
-/decl/material/solid/leather/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/leather/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- . += new/datum/stack_recipe/cloak(src)
- . += new/datum/stack_recipe/banner(src)
- . += new/datum/stack_recipe/shoes(src)
- . += new/datum/stack_recipe/boots(src)
-
-/decl/material/solid/leather/synth
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/cloak(src)
+ . += new/datum/stack_recipe/banner(src)
+ . += new/datum/stack_recipe/shoes(src)
+ . += new/datum/stack_recipe/boots(src)
+
+/decl/material/solid/organic/leather/synth
name = "synthleather"
uid = "solid_synthleather"
color = "#1f1f20"
ignition_point = T0C+150
melting_point = T0C+100
-/decl/material/solid/leather/lizard
+/decl/material/solid/organic/leather/lizard
name = "scaled hide"
uid = "solid_scaled_hide"
color = "#434b31"
@@ -505,11 +539,11 @@
weight = MAT_VALUE_LIGHT
reflectiveness = MAT_VALUE_SHINY
-/decl/material/solid/leather/fur
+/decl/material/solid/organic/leather/fur
name = "tanned pelt"
uid = "solid_tanned_pelt"
-/decl/material/solid/leather/chitin
+/decl/material/solid/organic/leather/chitin
name = "treated chitin"
uid = "solid_treated_chitin"
integrity = 100
diff --git a/code/modules/materials/definitions/solids/materials_solid_stone.dm b/code/modules/materials/definitions/solids/materials_solid_stone.dm
index 836da0059d1..5ab7f90f149 100644
--- a/code/modules/materials/definitions/solids/materials_solid_stone.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_stone.dm
@@ -18,20 +18,20 @@
/decl/material/solid/silicon = 1
)
-/decl/material/solid/stone/generate_recipes(var/reinforce_material)
+/decl/material/solid/stone/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
- return
- if(wall_support_value >= 10)
- . += new/datum/stack_recipe/furniture/girder(src)
- . += new/datum/stack_recipe/furniture/planting_bed(src)
- . += new/datum/stack_recipe/fountain(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ if(wall_support_value >= 10)
+ . += new/datum/stack_recipe/furniture/girder(src)
+ . += new/datum/stack_recipe/furniture/planting_bed(src)
+ . += new/datum/stack_recipe/fountain(src)
/decl/material/solid/stone/sandstone
name = "sandstone"
uid = "solid_sandstone"
lore_text = "A clastic sedimentary rock. The cost of boosting it to orbit is almost universally much higher than the actual value of the material."
value = 1.5
+ melting_point = T0C + 600
/decl/material/solid/stone/granite
name = "granite"
@@ -66,6 +66,7 @@
wall_support_value = MAT_VALUE_VERY_HEAVY
hardness = MAT_VALUE_HARD
reflectiveness = MAT_VALUE_SHINY
+ melting_point = T0C + 1200
brute_armor = 3
integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system
construction_difficulty = MAT_VALUE_HARD_DIY
diff --git a/code/modules/materials/definitions/solids/materials_solid_wood.dm b/code/modules/materials/definitions/solids/materials_solid_wood.dm
index 6f92c484156..5488975444b 100644
--- a/code/modules/materials/definitions/solids/materials_solid_wood.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_wood.dm
@@ -1,4 +1,4 @@
-/decl/material/solid/wood
+/decl/material/solid/organic/wood
name = "wood"
uid = "solid_wood"
liquid_name = "wood pulp"
@@ -22,7 +22,7 @@
weight = MAT_VALUE_NORMAL
melting_point = T0C+300 //okay, not melting in this case, but hot enough to destroy wood
ignition_point = T0C+288
- stack_origin_tech = "{'materials':1,'biotech':1}"
+ stack_origin_tech = @'{"materials":1,"biotech":1}'
dooropen_noise = 'sound/effects/doorcreaky.ogg'
door_icon_base = "wood"
destruction_desc = "splinters"
@@ -36,14 +36,14 @@
value = 1.5
reflectiveness = MAT_VALUE_DULL
wall_support_value = MAT_VALUE_NORMAL
- fuel_value = 0.8
+ accelerant_value = 0.8
default_solid_form = /obj/item/stack/material/plank
sound_manipulate = 'sound/foley/woodpickup1.ogg'
sound_dropped = 'sound/foley/wooddrop1.ogg'
-/decl/material/solid/wood/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/wood/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material) //recipes below don't support composite materials
+ if(reinforce_material || ispath(stack_type))
return
if(wall_support_value >= 10)
@@ -76,31 +76,27 @@
. += new/datum/stack_recipe/prosthetic/right_foot(src)
. += new/datum/stack_recipe/campfire(src)
-/decl/material/solid/wood/mahogany/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/wood/mahogany/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material)
- return
- . += new/datum/stack_recipe/tile/mahogany(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/tile/mahogany(src)
-/decl/material/solid/wood/maple/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/wood/maple/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material)
- return
- . += new/datum/stack_recipe/tile/maple(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/tile/maple(src)
-/decl/material/solid/wood/ebony/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/wood/ebony/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material)
- return
- . += new/datum/stack_recipe/tile/ebony(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/tile/ebony(src)
-/decl/material/solid/wood/walnut/generate_recipes(var/reinforce_material)
+/decl/material/solid/organic/wood/walnut/generate_recipes(stack_type, reinforce_material)
. = ..()
- if(reinforce_material)
- return
- . += new/datum/stack_recipe/tile/walnut(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new/datum/stack_recipe/tile/walnut(src)
-/decl/material/solid/wood/holographic
+/decl/material/solid/organic/wood/holographic
uid = "solid_holographic_wood"
color = WOOD_COLOR_CHOCOLATE //the very concept of wood should be brown
shard_type = SHARD_NONE
@@ -109,10 +105,10 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
-/decl/material/solid/wood/holographic/get_recipes(reinf_mat)
+/decl/material/solid/organic/wood/holographic/get_recipes(stack_type, reinf_mat)
return list()
-/decl/material/solid/wood/mahogany
+/decl/material/solid/organic/wood/mahogany
name = "mahogany"
uid = "solid_mahogany"
adjective_name = "mahogany"
@@ -121,7 +117,7 @@
construction_difficulty = MAT_VALUE_HARD_DIY
value = 1.6
-/decl/material/solid/wood/maple
+/decl/material/solid/organic/wood/maple
name = "maple"
uid = "solid_maple"
adjective_name = "maple"
@@ -129,7 +125,7 @@
color = WOOD_COLOR_PALE
value = 1.8
-/decl/material/solid/wood/ebony
+/decl/material/solid/organic/wood/ebony
name = "ebony"
uid = "solid_ebony"
adjective_name = "ebony"
@@ -143,7 +139,7 @@
construction_difficulty = MAT_VALUE_VERY_HARD_DIY
value = 1.8
-/decl/material/solid/wood/walnut
+/decl/material/solid/organic/wood/walnut
name = "walnut"
uid = "solid_walnut"
adjective_name = "walnut"
@@ -154,7 +150,7 @@
weight = MAT_VALUE_NORMAL
construction_difficulty = MAT_VALUE_HARD_DIY
-/decl/material/solid/wood/bamboo
+/decl/material/solid/organic/wood/bamboo
name = "bamboo"
uid = "solid_bamboo"
liquid_name = "bamboo pulp"
@@ -165,7 +161,7 @@
weight = MAT_VALUE_VERY_LIGHT
hardness = MAT_VALUE_RIGID
-/decl/material/solid/wood/yew
+/decl/material/solid/organic/wood/yew
name = "yew"
uid = "solid_yew"
adjective_name = "yew"
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index 3313c1b266f..7945a91df36 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -1,34 +1,45 @@
-/decl/material/proc/get_recipes(var/reinf_mat)
- var/key = reinf_mat || "base"
- if(!LAZYACCESS(recipes,key))
- LAZYSET(recipes,key,generate_recipes(reinf_mat))
+/decl/material/proc/get_recipes(stack_type, reinf_mat)
+ var/key = "[reinf_mat || "base"]-[stack_type || "general"]"
+ if(!LAZYACCESS(recipes, key))
+ LAZYSET(recipes, key, generate_recipes(stack_type, reinf_mat))
return recipes[key]
-/decl/material/proc/get_strut_recipes(var/reinf_mat)
- var/key = reinf_mat || "base"
- . = LAZYACCESS(strut_recipes, key)
- if(!islist(.))
- LAZYSET(strut_recipes, key, generate_strut_recipes(reinf_mat))
- . = LAZYACCESS(strut_recipes, key)
-
/decl/material/proc/create_recipe_list(base_type)
. = list()
for(var/recipe_type in subtypesof(base_type))
. += new recipe_type(src)
-/decl/material/proc/generate_recipes(var/reinforce_material)
- if(phase_at_temperature() != MAT_PHASE_SOLID)
- return list()
+/decl/material/proc/generate_recipes(stack_type, reinforce_material)
+ // By default we don't let anything be crafted with ore, as it's too raw.
+ // We make an exception for clay as it is being moulded by hand.
. = list()
+ if(ispath(stack_type, /obj/item/stack/material/ore) || phase_at_temperature() != MAT_PHASE_SOLID)
+ return
+
+ // Struts have their own recipe set, so we return early for them.
+ if(ispath(stack_type, /obj/item/stack/material/strut))
+ if(wall_support_value >= 10)
+ . += new/datum/stack_recipe/furniture/girder(src)
+ . += new/datum/stack_recipe/furniture/ladder(src)
+ . += new/datum/stack_recipe/railing(src)
+ . += new/datum/stack_recipe/furniture/wall_frame(src)
+ . += new/datum/stack_recipe/furniture/table_frame(src)
+ . += new/datum/stack_recipe/furniture/rack(src)
+ . += new/datum/stack_recipe/butcher_hook(src)
+ . += new/datum/stack_recipe/furniture/bed(src)
+ return
+
+ // We assume a non-ore non-strut stack type is a general type that can use general recipes.
if(opacity < 0.6)
. += new/datum/stack_recipe/furniture/borderwindow(src, reinforce_material)
. += new/datum/stack_recipe/furniture/fullwindow(src, reinforce_material)
if(integrity > 75 || reinforce_material)
. += new/datum/stack_recipe/furniture/windoor(src, reinforce_material)
- if(reinforce_material) //recipes below don't support composite materials
+ //recipes below don't support composite materials
+ if(reinforce_material)
return
if(hardness >= MAT_VALUE_FLEXIBLE + 10)
@@ -83,17 +94,3 @@
coin_recipes += new /datum/stack_recipe/coin(src, null, denomination)
if(length(coin_recipes))
. += new/datum/stack_recipe_list("antique coins", coin_recipes)
-
-/decl/material/proc/generate_strut_recipes(var/reinforce_material)
- . = list()
-
- if(wall_support_value >= 10)
- . += new/datum/stack_recipe/furniture/girder(src)
- . += new/datum/stack_recipe/furniture/ladder(src)
- . += new/datum/stack_recipe/railing(src)
- . += new/datum/stack_recipe/furniture/wall_frame(src)
- . += new/datum/stack_recipe/furniture/table_frame(src)
- . += new/datum/stack_recipe/furniture/rack(src)
- . += new/datum/stack_recipe/butcher_hook(src)
- . += new/datum/stack_recipe/furniture/bed(src)
- . += new/datum/stack_recipe/furniture/machine(src)
diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm
index f09230614d5..104a02420e5 100644
--- a/code/modules/materials/material_sheets.dm
+++ b/code/modules/materials/material_sheets.dm
@@ -1,7 +1,7 @@
// Stacked resources. They use a material datum for a lot of inherited values.
/obj/item/stack/material
name = "material sheet"
- force = 5.0
+ force = 5
throwforce = 5
w_class = ITEM_SIZE_LARGE
throw_speed = 3
@@ -18,6 +18,8 @@
abstract_type = /obj/item/stack/material
is_spawnable_type = FALSE // Mapped subtypes set this so they can be spawned from the verb.
var/decl/material/reinf_material
+ /// Set this to a specific type to restrict the recipes generated by this stack.
+ var/recipe_stack_type
/obj/item/stack/material/Initialize(mapload, var/amount, var/_material, var/_reinf_material)
@@ -47,7 +49,7 @@
update_strings()
/obj/item/stack/material/get_recipes()
- return material.get_recipes(reinf_material && reinf_material.type)
+ return material.get_recipes(recipe_stack_type, reinf_material?.type)
/obj/item/stack/material/get_codex_value()
return (material && !material.hidden_from_codex) ? "[lowertext(material.codex_name)] (substance)" : ..()
@@ -147,6 +149,13 @@
else
icon_state = base_state
+/obj/item/stack/material/get_string_for_amount(amount)
+ . = "[reinf_material ? "reinforced " : null][material.use_name]"
+ if(amount == 1)
+ . += " [singular_name]"
+ return indefinite_article ? "[indefinite_article] [.]" : ADD_ARTICLE(.)
+ return "[amount] [.] [plural_name]"
+
/obj/item/stack/material/ingot
name = "ingots"
singular_name = "ingot"
@@ -271,9 +280,12 @@
icon_state = "puck"
plural_icon_state = "puck-mult"
max_icon_state = "puck-max"
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE
stack_merge_type = /obj/item/stack/material/aerogel
+// Aerogel melting point is below 0 as it is a physical container for gas; hack around that here.
+/obj/item/stack/material/aerogel/ProcessAtomTemperature()
+ return PROCESS_KILL
+
/obj/item/stack/material/plank
name = "planks"
singular_name = "plank"
@@ -341,6 +353,7 @@
plural_icon_state = "sheet-strut-mult"
max_icon_state = "sheet-strut-max"
stack_merge_type = /obj/item/stack/material/strut
+ recipe_stack_type = /obj/item/stack/material/strut
/obj/item/stack/material/strut/cyborg
name = "metal strut synthesizer"
@@ -353,5 +366,11 @@
max_health = ITEM_HEALTH_NO_DAMAGE
is_spawnable_type = FALSE
-/obj/item/stack/material/strut/get_recipes()
- return material.get_strut_recipes(reinf_material && reinf_material.type)
+/obj/item/stack/material/bar
+ name = "bar"
+ singular_name = "bar"
+ plural_name = "bars"
+ icon_state = "bar"
+ plural_icon_state = "bar-mult"
+ max_icon_state = "bar-max"
+ stack_merge_type = /obj/item/stack/material/bar
diff --git a/code/modules/materials/material_sheets_mapping.dm b/code/modules/materials/material_sheets_mapping.dm
index 66a359c2633..6ecd474a92d 100644
--- a/code/modules/materials/material_sheets_mapping.dm
+++ b/code/modules/materials/material_sheets_mapping.dm
@@ -39,67 +39,67 @@
amount = 50; \
}
-STACK_SUBTYPES(tritium, "tritium", gas/hydrogen/tritium, aerogel, null)
-STACK_SUBTYPES(deuterium, "deuterium", gas/hydrogen/deuterium, aerogel, null)
-STACK_SUBTYPES(iron, "iron", solid/metal/iron, ingot, null)
-STACK_SUBTYPES(copper, "copper", solid/metal/copper, ingot, null)
-STACK_SUBTYPES(sandstone, "sandstone", solid/stone/sandstone, brick, null)
-STACK_SUBTYPES(marble, "marble", solid/stone/marble, brick, null)
-STACK_SUBTYPES(graphite, "graphite", solid/graphite, brick, null)
-STACK_SUBTYPES(diamond, "diamond", solid/gemstone/diamond, gemstone, null)
-STACK_SUBTYPES(uranium, "uranium", solid/metal/uranium, puck, null)
-STACK_SUBTYPES(plastic, "plastic", solid/plastic, panel, null)
-STACK_SUBTYPES(fiberglass, "fiberglass", solid/fiberglass, reinforced, null)
-STACK_SUBTYPES(gold, "gold", solid/metal/gold, ingot, null)
-STACK_SUBTYPES(silver, "silver", solid/metal/silver, ingot, null)
-STACK_SUBTYPES(platinum, "platinum", solid/metal/platinum, ingot, null)
-STACK_SUBTYPES(mhydrogen, "metallic hydrogen", solid/metallic_hydrogen, segment, null)
-STACK_SUBTYPES(osmium, "osmium", solid/metal/osmium, ingot, null)
-STACK_SUBTYPES(ocp, "osmium-carbide plasteel", solid/metal/plasteel/ocp, reinforced, null)
-STACK_SUBTYPES(steel, "steel", solid/metal/steel, sheet, null)
-STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, shiny, null)
-STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, reinforced, null)
-STACK_SUBTYPES(plasteel, "plasteel", solid/metal/plasteel, reinforced, null)
-STACK_SUBTYPES(wood, "wood", solid/wood, plank, null)
-STACK_SUBTYPES(mahogany, "mahogany", solid/wood/mahogany, plank, null)
-STACK_SUBTYPES(maple, "maple", solid/wood/maple, plank, null)
-STACK_SUBTYPES(ebony, "ebony", solid/wood/ebony, plank, null)
-STACK_SUBTYPES(walnut, "walnut", solid/wood/walnut, plank, null)
-STACK_SUBTYPES(bamboo, "bamboo", solid/wood/bamboo, plank, null)
-STACK_SUBTYPES(yew, "yew", solid/wood/yew, plank, null)
-STACK_SUBTYPES(cardboard, "cardboard", solid/cardboard, cardstock, null)
-STACK_SUBTYPES(leather, "leather", solid/leather, skin, null)
-STACK_SUBTYPES(synthleather, "synthleather", solid/leather/synth, skin, null)
-STACK_SUBTYPES(glass, "glass", solid/glass, pane, null)
-STACK_SUBTYPES(borosilicate, "borosilicate glass", solid/glass/borosilicate, pane, null)
-STACK_SUBTYPES(aliumium, "aliumium", solid/metal/aliumium, cubes, null)
-STACK_SUBTYPES(rglass, "reinforced glass", solid/glass, pane, /decl/material/solid/metal/steel)
-STACK_SUBTYPES(rborosilicate, "reinforced borosilicate glass", solid/glass/borosilicate, pane, /decl/material/solid/metal/steel)
-STACK_SUBTYPES(zinc, "zinc", solid/metal/zinc, ingot, null)
-STACK_SUBTYPES(tin, "tin", solid/metal/tin, ingot, null)
-STACK_SUBTYPES(lead, "lead", solid/metal/lead, ingot, null)
-STACK_SUBTYPES(brass, "brass", solid/metal/brass, ingot, null)
-STACK_SUBTYPES(bronze, "bronze", solid/metal/bronze, ingot, null)
-STACK_SUBTYPES(chromium, "chromium", solid/metal/chromium, ingot, null)
-STACK_SUBTYPES(blackbronze, "black bronze", solid/metal/blackbronze, ingot, null)
-STACK_SUBTYPES(redgold, "red gold", solid/metal/redgold, ingot, null)
-STACK_SUBTYPES(stainlesssteel, "stainless steel", solid/metal/stainlesssteel, ingot, null)
-STACK_SUBTYPES(ice, "ice", liquid/water, cubes, null)
+STACK_SUBTYPES(tritium, "tritium", gas/hydrogen/tritium, aerogel, null)
+STACK_SUBTYPES(deuterium, "deuterium", gas/hydrogen/deuterium, aerogel, null)
+STACK_SUBTYPES(iron, "iron", solid/metal/iron, ingot, null)
+STACK_SUBTYPES(copper, "copper", solid/metal/copper, ingot, null)
+STACK_SUBTYPES(sandstone, "sandstone", solid/stone/sandstone, brick, null)
+STACK_SUBTYPES(marble, "marble", solid/stone/marble, brick, null)
+STACK_SUBTYPES(graphite, "graphite", solid/graphite, brick, null)
+STACK_SUBTYPES(diamond, "diamond", solid/gemstone/diamond, gemstone, null)
+STACK_SUBTYPES(uranium, "uranium", solid/metal/uranium, puck, null)
+STACK_SUBTYPES(plastic, "plastic", solid/organic/plastic, panel, null)
+STACK_SUBTYPES(fiberglass, "fiberglass", solid/fiberglass, reinforced, null)
+STACK_SUBTYPES(gold, "gold", solid/metal/gold, ingot, null)
+STACK_SUBTYPES(silver, "silver", solid/metal/silver, ingot, null)
+STACK_SUBTYPES(platinum, "platinum", solid/metal/platinum, ingot, null)
+STACK_SUBTYPES(mhydrogen, "metallic hydrogen", solid/metallic_hydrogen, segment, null)
+STACK_SUBTYPES(osmium, "osmium", solid/metal/osmium, ingot, null)
+STACK_SUBTYPES(ocp, "osmium-carbide plasteel", solid/metal/plasteel/ocp, reinforced, null)
+STACK_SUBTYPES(steel, "steel", solid/metal/steel, sheet, null)
+STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, shiny, null)
+STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, reinforced, null)
+STACK_SUBTYPES(plasteel, "plasteel", solid/metal/plasteel, reinforced, null)
+STACK_SUBTYPES(wood, "wood", solid/organic/wood, plank, null)
+STACK_SUBTYPES(mahogany, "mahogany", solid/organic/wood/mahogany, plank, null)
+STACK_SUBTYPES(maple, "maple", solid/organic/wood/maple, plank, null)
+STACK_SUBTYPES(ebony, "ebony", solid/organic/wood/ebony, plank, null)
+STACK_SUBTYPES(walnut, "walnut", solid/organic/wood/walnut, plank, null)
+STACK_SUBTYPES(bamboo, "bamboo", solid/organic/wood/bamboo, plank, null)
+STACK_SUBTYPES(yew, "yew", solid/organic/wood/yew, plank, null)
+STACK_SUBTYPES(cardboard, "cardboard", solid/organic/cardboard, cardstock, null)
+STACK_SUBTYPES(leather, "leather", solid/organic/leather, skin, null)
+STACK_SUBTYPES(synthleather, "synthleather", solid/organic/leather/synth, skin, null)
+STACK_SUBTYPES(glass, "glass", solid/glass, pane, null)
+STACK_SUBTYPES(borosilicate, "borosilicate glass", solid/glass/borosilicate, pane, null)
+STACK_SUBTYPES(aliumium, "aliumium", solid/metal/aliumium, cubes, null)
+STACK_SUBTYPES(rglass, "reinforced glass", solid/glass, pane, /decl/material/solid/metal/steel)
+STACK_SUBTYPES(rborosilicate, "reinforced borosilicate glass", solid/glass/borosilicate, pane, /decl/material/solid/metal/steel)
+STACK_SUBTYPES(zinc, "zinc", solid/metal/zinc, ingot, null)
+STACK_SUBTYPES(tin, "tin", solid/metal/tin, ingot, null)
+STACK_SUBTYPES(lead, "lead", solid/metal/lead, ingot, null)
+STACK_SUBTYPES(brass, "brass", solid/metal/brass, ingot, null)
+STACK_SUBTYPES(bronze, "bronze", solid/metal/bronze, ingot, null)
+STACK_SUBTYPES(chromium, "chromium", solid/metal/chromium, ingot, null)
+STACK_SUBTYPES(blackbronze, "black bronze", solid/metal/blackbronze, ingot, null)
+STACK_SUBTYPES(redgold, "red gold", solid/metal/redgold, ingot, null)
+STACK_SUBTYPES(stainlesssteel, "stainless steel", solid/metal/stainlesssteel, ingot, null)
+STACK_SUBTYPES(ice, "ice", liquid/water, cubes, null)
-STACK_SUBTYPES(cloth, "cloth", solid/cloth, bolt, null)
-STACK_SUBTYPES(yellow, "yellow cloth", solid/cloth/yellow, bolt, null)
-STACK_SUBTYPES(teal, "teal cloth", solid/cloth/teal, bolt, null)
-STACK_SUBTYPES(black, "black cloth", solid/cloth/black, bolt, null)
-STACK_SUBTYPES(green, "green cloth", solid/cloth/green, bolt, null)
-STACK_SUBTYPES(purple, "purple cloth", solid/cloth/purple, bolt, null)
-STACK_SUBTYPES(blue, "blue cloth", solid/cloth/blue, bolt, null)
-STACK_SUBTYPES(beige, "beige cloth", solid/cloth/beige, bolt, null)
-STACK_SUBTYPES(lime, "lime cloth", solid/cloth/lime, bolt, null)
-STACK_SUBTYPES(red, "red cloth", solid/cloth/red, bolt, null)
+STACK_SUBTYPES(cloth, "cloth", solid/organic/cloth, bolt, null)
+STACK_SUBTYPES(yellow, "yellow cloth", solid/organic/cloth/yellow, bolt, null)
+STACK_SUBTYPES(teal, "teal cloth", solid/organic/cloth/teal, bolt, null)
+STACK_SUBTYPES(black, "black cloth", solid/organic/cloth/black, bolt, null)
+STACK_SUBTYPES(green, "green cloth", solid/organic/cloth/green, bolt, null)
+STACK_SUBTYPES(purple, "purple cloth", solid/organic/cloth/purple, bolt, null)
+STACK_SUBTYPES(blue, "blue cloth", solid/organic/cloth/blue, bolt, null)
+STACK_SUBTYPES(beige, "beige cloth", solid/organic/cloth/beige, bolt, null)
+STACK_SUBTYPES(lime, "lime cloth", solid/organic/cloth/lime, bolt, null)
+STACK_SUBTYPES(red, "red cloth", solid/organic/cloth/red, bolt, null)
-STACK_SUBTYPES(steel, "steel", solid/metal/steel, strut, null)
-STACK_SUBTYPES(plastic, "plastic", solid/plastic, strut, null)
-STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, strut, null)
-STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, strut, null)
+STACK_SUBTYPES(steel, "steel", solid/metal/steel, strut, null)
+STACK_SUBTYPES(plastic, "plastic", solid/organic/plastic, strut, null)
+STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, strut, null)
+STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, strut, null)
#undef STACK_SUBTYPES
\ No newline at end of file
diff --git a/code/modules/materials/material_synth.dm b/code/modules/materials/material_synth.dm
index 5dbdcdef86a..4aa562ea6a1 100644
--- a/code/modules/materials/material_synth.dm
+++ b/code/modules/materials/material_synth.dm
@@ -22,7 +22,7 @@
/obj/item/stack/material/cyborg/plastic
name = "cyborg plastic synthesiser"
icon_state = "sheet"
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/item/stack/material/cyborg/steel
name = "cyborg steel synthesiser"
@@ -37,7 +37,7 @@
/obj/item/stack/material/cyborg/wood
name = "cyborg wood synthesiser"
icon_state = "sheet-wood"
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
/obj/item/stack/material/cyborg/glass
name = "cyborg glass synthesiser"
diff --git a/code/modules/materials/materials_ore.dm b/code/modules/materials/materials_ore.dm
index 8ee38f987b0..2cc5e51ccc6 100644
--- a/code/modules/materials/materials_ore.dm
+++ b/code/modules/materials/materials_ore.dm
@@ -18,11 +18,12 @@
material_alteration = MAT_FLAG_ALTERATION_COLOR //Name is handled in override
randpixel = 6
is_spawnable_type = TRUE
+ recipe_stack_type = /obj/item/stack/material/ore
///Associative list of cache key to the generate icons for the ore piles. We pre-generate a pile of all possible ore icon states, and make them available
var/static/list/cached_ore_icon_states
///A list of all the existing ore icon states in the ore file
- var/static/list/ore_icon_states = icon_states('icons/obj/materials/ore.dmi') //list("shiny", "gems", "dust", "nugget", "lump")
+ var/static/list/ore_icon_states = icon_states('icons/obj/materials/ore.dmi')
///Returns a cached ore pile icon state
/obj/item/stack/material/ore/proc/get_cached_ore_pile_overlay(var/state_name, var/stack_icon_index)
@@ -90,9 +91,6 @@
SetName("[(material.ore_name ? material.ore_name : "[material.name] chunk")][(amount > 1? " pile" : "")]")
desc = material.ore_desc ? material.ore_desc : "A lump of ore."
-/obj/item/stack/material/ore/get_recipes()
- return //Can't use recipes with ore
-
/obj/item/stack/material/ore/attackby(var/obj/item/W, var/mob/user)
if(istype(W, /obj/item/stack/material) && !is_same(W))
return FALSE //Don't reinforce
@@ -119,8 +117,10 @@
material = /decl/material/solid/hematite
/obj/item/stack/material/ore/coal
material = /decl/material/solid/graphite
-/obj/item/stack/material/ore/glass
+/obj/item/stack/material/ore/sand
material = /decl/material/solid/sand
+/obj/item/stack/material/ore/clay
+ material = /decl/material/solid/clay
/obj/item/stack/material/ore/silver
material = /decl/material/solid/metal/silver
/obj/item/stack/material/ore/gold
@@ -157,6 +157,8 @@
material = /decl/material/solid/ice/hydrate/krypton
/obj/item/stack/material/ore/xenon
material = /decl/material/solid/ice/hydrate/xenon
+/obj/item/stack/material/ore/meat
+ material = /decl/material/solid/organic/meat
/client/proc/spawn_ore_pile()
set name = "Spawn Ore Pile"
diff --git a/code/modules/materials/recipes_furniture.dm b/code/modules/materials/recipes_furniture.dm
index e5c406d7273..0328a4cdff1 100644
--- a/code/modules/materials/recipes_furniture.dm
+++ b/code/modules/materials/recipes_furniture.dm
@@ -158,7 +158,6 @@
/datum/stack_recipe/furniture/machine/spawn_result(mob/user, location, amount)
return new result_type(location)
-
/datum/stack_recipe/furniture/door_assembly
time = 50
diff --git a/code/modules/materials/recipes_structures.dm b/code/modules/materials/recipes_structures.dm
index dc357da158e..64e546e8b6c 100644
--- a/code/modules/materials/recipes_structures.dm
+++ b/code/modules/materials/recipes_structures.dm
@@ -46,8 +46,8 @@
var/obj/structure/fire_source/product = ..()
for(var/mat in product.matter)
var/decl/material/material = GET_DECL(mat)
- if(material.fuel_value > 0)
- product.fuel += material.fuel_value * round(product.matter[mat] / SHEET_MATERIAL_AMOUNT)
+ if(material.accelerant_value > FUEL_VALUE_NONE)
+ product.fuel += material.accelerant_value * round(product.matter[mat] / SHEET_MATERIAL_AMOUNT)
return product
/datum/stack_recipe/fountain
diff --git a/code/modules/mechs/_mech_setup.dm b/code/modules/mechs/_mech_setup.dm
index b9a65259b69..4b3f2949bcc 100644
--- a/code/modules/mechs/_mech_setup.dm
+++ b/code/modules/mechs/_mech_setup.dm
@@ -7,40 +7,3 @@ var/global/list/mech_damage_overlay_cache = list()
var/global/list/mech_image_cache = list()
var/global/list/mech_icon_cache = list()
var/global/list/mech_weapon_overlays = icon_states('icons/mecha/mech_weapon_overlays.dmi')
-
-#define HARDPOINT_BACK "back"
-#define HARDPOINT_LEFT_HAND "left hand"
-#define HARDPOINT_RIGHT_HAND "right hand"
-#define HARDPOINT_LEFT_SHOULDER "left shoulder"
-#define HARDPOINT_RIGHT_SHOULDER "right shoulder"
-#define HARDPOINT_HEAD "head"
-
-// No software required: taser. light, radio.
-#define MECH_SOFTWARE_UTILITY "utility equipment" // Plasma torch, clamp, drill.
-#define MECH_SOFTWARE_MEDICAL "medical support systems" // Sleeper.
-#define MECH_SOFTWARE_WEAPONS "standard weapon systems" // Ballistics and energy weapons.
-#define MECH_SOFTWARE_ENGINEERING "advanced engineering systems" // RCD.
-
-// EMP damage points before various effects occur.
-#define EMP_GUI_DISRUPT 5 // 1 ion rifle shot == 8.
-#define EMP_MOVE_DISRUPT 10 // 2 shots.
-#define EMP_ATTACK_DISRUPT 20 // 3 shots.
-
-//About components
-#define MECH_COMPONENT_DAMAGE_UNDAMAGED 1
-#define MECH_COMPONENT_DAMAGE_DAMAGED 2
-#define MECH_COMPONENT_DAMAGE_DAMAGED_BAD 3
-#define MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL 4
-
-//Construction
-#define FRAME_REINFORCED 1
-#define FRAME_REINFORCED_SECURE 2
-#define FRAME_REINFORCED_WELDED 3
-
-#define FRAME_WIRED 1
-#define FRAME_WIRED_ADJUSTED 2
-
-//POWER!
-#define MECH_POWER_OFF 0
-#define MECH_POWER_TRANSITION 1
-#define MECH_POWER_ON 2
diff --git a/code/modules/mechs/components/_components.dm b/code/modules/mechs/components/_components.dm
index a329cddbf6c..fa8ae476b26 100644
--- a/code/modules/mechs/components/_components.dm
+++ b/code/modules/mechs/components/_components.dm
@@ -7,7 +7,7 @@
material = /decl/material/solid/metal/steel
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/osmium = MATTER_AMOUNT_TRACE
)
dir = SOUTH
@@ -55,7 +55,7 @@
user.visible_message(SPAN_NOTICE("\The [user] installs \the [thing] in \the [src]."))
return 1
-/obj/item/mech_component/proc/update_health()
+/obj/item/mech_component/proc/update_component_health()
total_damage = brute_damage + burn_damage
if(total_damage > max_damage) total_damage = max_damage
var/prev_state = damage_state
@@ -77,13 +77,13 @@
/obj/item/mech_component/proc/take_brute_damage(var/amt)
brute_damage = max(0, brute_damage + amt)
- update_health()
+ update_component_health()
if(total_damage == max_damage)
take_component_damage(amt,0)
/obj/item/mech_component/proc/take_burn_damage(var/amt)
burn_damage = max(0, burn_damage + amt)
- update_health()
+ update_component_health()
if(total_damage == max_damage)
take_component_damage(0,amt)
diff --git a/code/modules/mechs/components/armour.dm b/code/modules/mechs/components/armour.dm
index 79f3d8213db..b86d67295dc 100644
--- a/code/modules/mechs/components/armour.dm
+++ b/code/modules/mechs/components/armour.dm
@@ -12,7 +12,7 @@
ARMOR_BIO = ARMOR_BIO_SHIELDED,
ARMOR_RAD = ARMOR_RAD_MINOR
)
- origin_tech = "{'materials':1}"
+ origin_tech = @'{"materials":1}'
material = /decl/material/solid/metal/steel
/obj/item/robot_parts/robot_component/armour/exosuit/radproof
@@ -27,7 +27,7 @@
ARMOR_BIO = ARMOR_BIO_SHIELDED,
ARMOR_RAD = ARMOR_RAD_SHIELDED
)
- origin_tech = "{'materials':3}"
+ origin_tech = @'{"materials":3}'
material = /decl/material/solid/metal/steel
/obj/item/robot_parts/robot_component/armour/exosuit/em
@@ -42,7 +42,7 @@
ARMOR_BIO = ARMOR_BIO_SHIELDED,
ARMOR_RAD = ARMOR_RAD_SMALL
)
- origin_tech = "{'materials':3}"
+ origin_tech = @'{"materials":3}'
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT)
@@ -57,7 +57,7 @@
ARMOR_BOMB = ARMOR_BOMB_RESISTANT,
ARMOR_BIO = ARMOR_BIO_SHIELDED
)
- origin_tech = "{'materials':5}"
+ origin_tech = @'{"materials":5}'
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT)
diff --git a/code/modules/mechs/components/body.dm b/code/modules/mechs/components/body.dm
index ad13fe6fc90..5f072a7392e 100644
--- a/code/modules/mechs/components/body.dm
+++ b/code/modules/mechs/components/body.dm
@@ -162,7 +162,7 @@
else
return ..()
-/obj/item/mech_component/chassis/receive_mouse_drop(atom/dropping, mob/user)
+/obj/item/mech_component/chassis/receive_mouse_drop(atom/dropping, mob/user, params)
. = ..()
if(!. && istype(dropping, /obj/machinery/portable_atmospherics/canister))
var/obj/machinery/portable_atmospherics/canister/C = dropping
@@ -180,9 +180,9 @@
update_components()
return TRUE
-/obj/item/mech_component/chassis/handle_mouse_drop(atom/over, mob/user)
+/obj/item/mech_component/chassis/handle_mouse_drop(atom/over, mob/user, params)
if(storage_compartment)
- return storage_compartment.handle_mouse_drop(over, user)
+ return storage_compartment.handle_mouse_drop(over, user, params)
. = ..()
/obj/item/mech_component/chassis/return_diagnostics(mob/user)
diff --git a/code/modules/mechs/components/software.dm b/code/modules/mechs/components/software.dm
index 1a7a5f1c916..49cc737083d 100644
--- a/code/modules/mechs/components/software.dm
+++ b/code/modules/mechs/components/software.dm
@@ -6,22 +6,22 @@
/obj/item/stock_parts/circuitboard/exosystem/engineering
name = "exosuit circuit (engineering systems)"
contains_software = list(MECH_SOFTWARE_ENGINEERING)
- origin_tech = "{'programming':1}"
+ origin_tech = @'{"programming":1}'
/obj/item/stock_parts/circuitboard/exosystem/utility
name = "exosuit circuit (utility systems)"
contains_software = list(MECH_SOFTWARE_UTILITY)
icon = 'icons/obj/modules/module_controller.dmi'
- origin_tech = "{'programming':1}"
+ origin_tech = @'{"programming":1}'
/obj/item/stock_parts/circuitboard/exosystem/medical
name = "exosuit circuit (medical systems)"
contains_software = list(MECH_SOFTWARE_MEDICAL)
icon = 'icons/obj/modules/module_controller.dmi'
- origin_tech = "{'programming':3,'biotech':2}"
+ origin_tech = @'{"programming":3,"biotech":2}'
/obj/item/stock_parts/circuitboard/exosystem/weapons
name = "exosuit circuit (basic weapon systems)"
contains_software = list(MECH_SOFTWARE_WEAPONS)
icon = 'icons/obj/modules/module_mainboard.dmi'
- origin_tech = "{'programming':4,'combat':3}"
+ origin_tech = @'{"programming":4,"combat":3}'
diff --git a/code/modules/mechs/equipment/_equipment.dm b/code/modules/mechs/equipment/_equipment.dm
index 0822da56c1c..effd53ec4e5 100644
--- a/code/modules/mechs/equipment/_equipment.dm
+++ b/code/modules/mechs/equipment/_equipment.dm
@@ -6,7 +6,7 @@
icon_state = ""
material = /decl/material/solid/metal/steel
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/osmium = MATTER_AMOUNT_TRACE
)
force = 10
@@ -87,14 +87,14 @@
/obj/item/mech_equipment/proc/MouseUpInteraction()
return 0
-/obj/item/mech_equipment/mob_can_unequip(mob/M, slot, disable_warning)
+/obj/item/mech_equipment/mob_can_unequip(mob/user, slot, disable_warning = FALSE)
. = ..()
if(. && owner)
//Installed equipment shall not be unequiped.
return FALSE
/obj/item/mech_equipment/mounted_system
- var/holding_type
+ abstract_type = /obj/item/mech_equipment/mounted_system
var/obj/item/holding
/obj/item/mech_equipment/mounted_system/attack_self(var/mob/user)
@@ -104,26 +104,26 @@
/obj/item/mech_equipment/mounted_system/proc/forget_holding()
if(holding) //It'd be strange for this to be called with this var unset
- events_repository.unregister(/decl/observ/destroyed, holding, src, .proc/forget_holding)
+ events_repository.unregister(/decl/observ/destroyed, holding, src, PROC_REF(forget_holding))
holding = null
if(!QDELETED(src))
qdel(src)
/obj/item/mech_equipment/mounted_system/Initialize()
. = ..()
- if(holding_type)
- holding = new holding_type(src)
- events_repository.register(/decl/observ/destroyed, holding, src, .proc/forget_holding)
- if(holding)
- if(!icon_state)
- icon = holding.icon
- icon_state = holding.icon_state
- SetName(holding.name)
- desc = "[holding.desc] This one is suitable for installation on an exosuit."
-
+ if(ispath(holding))
+ holding = new holding(src)
+ events_repository.register(/decl/observ/destroyed, holding, src, PROC_REF(forget_holding))
+ if(!istype(holding))
+ return
+ if(!icon_state)
+ icon = holding.icon
+ icon_state = holding.icon_state
+ SetName(holding.name)
+ desc = "[holding.desc] This one is suitable for installation on an exosuit."
/obj/item/mech_equipment/mounted_system/Destroy()
- events_repository.unregister(/decl/observ/destroyed, holding, src, .proc/forget_holding)
+ events_repository.unregister(/decl/observ/destroyed, holding, src, PROC_REF(forget_holding))
if(holding)
QDEL_NULL(holding)
. = ..()
diff --git a/code/modules/mechs/equipment/combat.dm b/code/modules/mechs/equipment/combat.dm
index d9352b84228..188c458f3fc 100644
--- a/code/modules/mechs/equipment/combat.dm
+++ b/code/modules/mechs/equipment/combat.dm
@@ -2,7 +2,8 @@
name = "mounted electrolaser carbine"
desc = "A dual fire mode electrolaser system connected to the exosuit's targetting system."
icon_state = "mech_taser"
- holding_type = /obj/item/gun/energy/taser/mounted/mech
+ origin_tech = @'{"combat":1,"magnets":1,"engineering":1}'
+ holding = /obj/item/gun/energy/taser/mounted/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
@@ -10,13 +11,15 @@
name = "mounted ion rifle"
desc = "An exosuit-mounted ion rifle. Handle with care."
icon_state = "mech_ionrifle"
- holding_type = /obj/item/gun/energy/ionrifle/mounted/mech
+ holding = /obj/item/gun/energy/ionrifle/mounted/mech
+ origin_tech = @'{"combat":2,"powerstorage":2,"magnets":4,"engineering":2}'
/obj/item/mech_equipment/mounted_system/taser/laser
name = "\improper CH-PS \"Immolator\" laser"
desc = "An exosuit-mounted laser rifle. Handle with care."
icon_state = "mech_lasercarbine"
- holding_type = /obj/item/gun/energy/laser/mounted/mech
+ holding = /obj/item/gun/energy/laser/mounted/mech
+ origin_tech = @'{"combat":3,"magnets":2,"engineering":2}'
/obj/item/gun/energy/taser/mounted/mech
use_external_power = TRUE
@@ -36,6 +39,9 @@
self_recharge = TRUE
/obj/item/gun/energy/get_hardpoint_maptext()
+ var/obj/item/cell/power_supply = get_cell()
+ if(!power_supply)
+ return 0
return "[round(power_supply.charge / charge_cost)]/[max_shots]"
/obj/item/gun/energy/get_hardpoint_status_value()
@@ -51,6 +57,7 @@
restricted_hardpoints = list(HARDPOINT_BACK)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
material = /decl/material/solid/metal/steel
+ origin_tech = @'{"magnets":3,"powerstorage":4,"materials":2,"engineering":2}'
matter = list(
/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE
@@ -156,7 +163,7 @@
. = ..()
add_vis_contents(target, src)
set_dir(target.dir)
- events_repository.register(/decl/observ/dir_set, user, src, /obj/aura/mechshield/proc/update_dir)
+ events_repository.register(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mechshield, update_dir))
/obj/aura/mechshield/proc/update_dir(var/user, var/old_dir, var/dir)
set_dir(dir)
@@ -169,7 +176,7 @@
/obj/aura/mechshield/Destroy()
if(user)
- events_repository.unregister(/decl/observ/dir_set, user, src, /obj/aura/mechshield/proc/update_dir)
+ events_repository.unregister(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mechshield, update_dir))
remove_vis_contents(user, src)
shields = null
. = ..()
@@ -221,6 +228,8 @@
//Melee! As a general rule I would recommend using regular objects and putting logic in them.
/obj/item/mech_equipment/mounted_system/melee
+ abstract_type = /obj/item/mech_equipment/mounted_system/melee
+ origin_tech = @'{"combat":1,"materials":1,"engineering":1}'
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_UTILITY)
@@ -255,7 +264,7 @@
. = ..()
if (user.a_intent != I_HURT)
return
- var/obj/item/mech_equipment/mounted_system/melee/mechete/MC = loc
+ var/obj/item/mech_equipment/mounted_system/melee/machete/MC = loc
if (istype(MC))
//SPIN BLADE ATTACK GO!
var/mob/living/exosuit/E = MC.owner
@@ -269,9 +278,9 @@
E.spin(0.65 SECONDS, 0.125 SECONDS)
playsound(E, 'sound/mecha/mechturn.ogg', 40, 1)
-/obj/item/mech_equipment/mounted_system/melee/mechete
+/obj/item/mech_equipment/mounted_system/melee/machete
icon_state = "mech_blade"
- holding_type = /obj/item/hatchet/machete/mech
+ holding = /obj/item/hatchet/machete/mech
//Ballistic shield
@@ -279,14 +288,15 @@
name = "exosuit ballistic shield"
desc = "This formidable line of defense, sees widespread use in planetary peacekeeping operations and military formations alike."
icon_state = "mech_shield" //Rendering is handled by aura due to layering issues: TODO, figure out a better way to do this
+ restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
+ restricted_software = list(MECH_SOFTWARE_UTILITY)
+ origin_tech = @'{"materials":2,"engineering":2}'
var/obj/aura/mech_ballistic/aura = null
var/last_push = 0
var/chance = 60 //For attacks from the front, diminishing returns
var/last_max_block = 0 //Blocking during a perfect block window resets this, else there is an anti spam
var/max_block = 60 // Should block most things
var/blocking = FALSE
- restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
- restricted_software = list(MECH_SOFTWARE_UTILITY)
/obj/item/mech_equipment/ballistic_shield/installed(mob/living/exosuit/_owner)
. = ..()
@@ -396,14 +406,14 @@
. = ..()
add_vis_contents(target, src)
set_dir(target.dir)
- global.events_repository.register(/decl/observ/dir_set, user, src, /obj/aura/mech_ballistic/proc/update_dir)
+ global.events_repository.register(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mech_ballistic, update_dir))
/obj/aura/mech_ballistic/proc/update_dir(user, old_dir, dir)
set_dir(dir)
/obj/aura/mech_ballistic/Destroy()
if (user)
- global.events_repository.unregister(/decl/observ/dir_set, user, src, /obj/aura/mech_ballistic/proc/update_dir)
+ global.events_repository.unregister(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mech_ballistic, update_dir))
remove_vis_contents(user, src)
shield = null
. = ..()
@@ -449,7 +459,7 @@
restricted_software = list(MECH_SOFTWARE_WEAPONS)
active_power_use = 7 KILOWATTS
var/next_use = 0
- origin_tech = "{'magnets':2,'combat':3}"
+ origin_tech = @'{"magnets":2,"combat":3}'
/obj/item/mech_equipment/flash/proc/area_flash()
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
diff --git a/code/modules/mechs/equipment/combat_projectile.dm b/code/modules/mechs/equipment/combat_projectile.dm
index 1675de22360..040ff1497f1 100644
--- a/code/modules/mechs/equipment/combat_projectile.dm
+++ b/code/modules/mechs/equipment/combat_projectile.dm
@@ -28,10 +28,10 @@
/obj/item/mech_equipment/mounted_system/projectile
name = "mounted submachine gun"
icon_state = "mech_ballistic"
- holding_type = /obj/item/gun/projectile/automatic/smg/mech
+ holding = /obj/item/gun/projectile/automatic/smg/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
- origin_tech = "{'programming':4,'combat':6,'engineering':5}"
+ origin_tech = @'{"programming":4,"combat":6,"engineering":5}'
/obj/item/gun/projectile/automatic/smg/mech
magazine_type = /obj/item/ammo_magazine/mech/smg_top
@@ -49,10 +49,10 @@
/obj/item/mech_equipment/mounted_system/projectile/assault_rifle
name = "mounted assault rifle"
icon_state = "mech_ballistic2"
- holding_type = /obj/item/gun/projectile/automatic/assault_rifle/mech
+ holding = /obj/item/gun/projectile/automatic/assault_rifle/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
- origin_tech = "{'programming':4,'combat':8,'engineering':6}"
+ origin_tech = @'{"programming":4,"combat":8,"engineering":6}'
/obj/item/gun/projectile/automatic/assault_rifle/mech
magazine_type = /obj/item/ammo_magazine/mech/rifle
@@ -69,9 +69,10 @@
/obj/item/mech_equipment/mounted_system/projectile/machine
name = "mounted machine gun"
icon_state = "mech_machine_gun"
- holding_type = /obj/item/gun/projectile/automatic/machine/mech
+ holding = /obj/item/gun/projectile/automatic/machine/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
+ origin_tech = @'{"programming":4,"combat":8,"engineering":6}'
/obj/item/gun/projectile/automatic/machine/mech
magazine_type = /obj/item/ammo_magazine/mech/rifle/drum
diff --git a/code/modules/mechs/equipment/engineering.dm b/code/modules/mechs/equipment/engineering.dm
index c9a4f3827f1..37fbe1d4e5a 100644
--- a/code/modules/mechs/equipment/engineering.dm
+++ b/code/modules/mechs/equipment/engineering.dm
@@ -1,11 +1,12 @@
/obj/item/mech_equipment/mounted_system/rcd
icon_state = "mech_rcd"
- holding_type = /obj/item/rcd/mounted
+ holding = /obj/item/rcd/mounted
+ origin_tech = @'{"engineering":4,"materials":3,"powerstorage":1}'
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_ENGINEERING)
material = /decl/material/solid/metal/steel
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE,
/decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE
)
@@ -38,21 +39,24 @@
/obj/item/mech_equipment/mounted_system/extinguisher
icon_state = "mech_exting"
- holding_type = /obj/item/chems/spray/extinguisher/mech
+ holding = /obj/item/chems/spray/extinguisher/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_ENGINEERING)
+ origin_tech = @'{"engineering":1,"materials":1}'
/obj/item/mech_equipment/atmos_shields
icon_state = "mech_atmoshield_off"
name = "exosuit airshield"
- desc = "A 'Zephyros' portable Atmospheric Isolation and Retention Screen. It keeps air where it should be... Most of the time. Press ctrl-click to switch modes"
+ desc = "A 'Zephyros' portable Atmospheric Isolation and Retention Screen. It keeps air where it should be... most of the time. Press ctrl-click to switch modes."
restricted_hardpoints = list(HARDPOINT_BACK)
restricted_software = list(MECH_SOFTWARE_ENGINEERING)
- var/list/segments
equipment_delay = 0.25 SECONDS
+ origin_tech = @'{"engineering":2,"powerstorage":2,"materials":3}'
+ var/list/segments
var/current_mode = 0 //0 barrier, 1 bubble
var/shield_range = 2
+// TODO: convert to alt interaction.
/obj/item/mech_equipment/atmos_shields/CtrlClick(mob/user)
if (owner && ((user in owner.pilots) || user == owner))
if (active)
@@ -71,7 +75,7 @@
anchored = TRUE
layer = ABOVE_HUMAN_LAYER
density = FALSE
- invisibility = 0
+ invisibility = INVISIBILITY_NONE
atmos_canpass = CANPASS_NEVER
var/obj/item/mech_equipment/atmos_shields/shields
color = COLOR_SABER_BLUE
@@ -140,14 +144,14 @@
if(istype(MS))
MS.shields = src
segments += MS
- events_repository.register(/decl/observ/moved, MS, src, .proc/on_moved)
+ events_repository.register(/decl/observ/moved, MS, src, PROC_REF(on_moved))
passive_power_use = 0.8 KILOWATTS * segments.len
update_icon()
owner.update_icon()
- events_repository.register(/decl/observ/moved, owner, src, .proc/on_moved)
- events_repository.register(/decl/observ/dir_set, owner, src, .proc/on_turned)
+ events_repository.register(/decl/observ/moved, owner, src, PROC_REF(on_moved))
+ events_repository.register(/decl/observ/dir_set, owner, src, PROC_REF(on_turned))
/obj/item/mech_equipment/atmos_shields/on_update_icon()
. = ..()
@@ -156,13 +160,13 @@
/obj/item/mech_equipment/atmos_shields/deactivate()
for(var/obj/effect/mech_shield/MS in segments)
if(istype(MS))
- events_repository.unregister(/decl/observ/moved, MS, src, .proc/on_moved)
+ events_repository.unregister(/decl/observ/moved, MS, src, PROC_REF(on_moved))
if(segments.len)
owner.visible_message(SPAN_WARNING("The energy shields in front of \the [owner] disappear!"))
QDEL_NULL_LIST(segments)
passive_power_use = 0
- events_repository.unregister(/decl/observ/moved, owner, src, .proc/on_moved)
- events_repository.unregister(/decl/observ/dir_set, owner, src, .proc/on_turned)
+ events_repository.unregister(/decl/observ/moved, owner, src, PROC_REF(on_moved))
+ events_repository.unregister(/decl/observ/dir_set, owner, src, PROC_REF(on_turned))
. = ..()
update_icon()
owner.update_icon()
diff --git a/code/modules/mechs/equipment/medical.dm b/code/modules/mechs/equipment/medical.dm
index 35473b48113..4dc126c7cc7 100644
--- a/code/modules/mechs/equipment/medical.dm
+++ b/code/modules/mechs/equipment/medical.dm
@@ -6,7 +6,7 @@
restricted_software = list(MECH_SOFTWARE_MEDICAL)
equipment_delay = 30 //don't spam it on people pls
active_power_use = 0 //Usage doesn't really require power. We don't want people stuck inside
- origin_tech = "{'programming':2,'biotech':3}"
+ origin_tech = @'{"programming":2,"biotech":3}'
passive_power_use = 1.5 KILOWATTS
var/obj/machinery/sleeper/mounted/sleeper = null
diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm
index 1a0fbde243f..4873d03fbb6 100644
--- a/code/modules/mechs/equipment/utility.dm
+++ b/code/modules/mechs/equipment/utility.dm
@@ -4,7 +4,7 @@
icon_state = "mech_clamp"
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_UTILITY)
- origin_tech = "{'materials':2,'engineering':2}"
+ origin_tech = @'{"materials":2,"engineering":2}'
var/carrying_capacity = 5
var/list/obj/carrying = list()
@@ -49,7 +49,7 @@
playsound(FD, 'sound/effects/meteorimpact.ogg', 100, 1)
playsound(FD, 'sound/machines/airlock_creaking.ogg', 100, 1)
FD.blocked = FALSE
- addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/open, TRUE), 0)
+ addtimer(CALLBACK(FD, TYPE_PROC_REF(/obj/machinery/door/firedoor, open), TRUE), 0)
FD.set_broken(TRUE)
FD.visible_message(SPAN_WARNING("\The [owner] tears \the [FD] open!"))
else
@@ -58,10 +58,10 @@
playsound(FD, 'sound/machines/airlock_creaking.ogg', 100, 1)
if(FD.density)
FD.visible_message(SPAN_DANGER("\The [owner] forces \the [FD] open!"))
- addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/open, TRUE), 0)
+ addtimer(CALLBACK(FD, TYPE_PROC_REF(/obj/machinery/door/firedoor, open), TRUE), 0)
else
FD.visible_message(SPAN_WARNING("\The [owner] forces \the [FD] closed!"))
- addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/close, TRUE), 0)
+ addtimer(CALLBACK(FD, TYPE_PROC_REF(/obj/machinery/door/firedoor, close), TRUE), 0)
return
else if(istype(O, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/AD = O
@@ -74,7 +74,7 @@
playsound(AD, 'sound/effects/meteorimpact.ogg', 100, 1)
playsound(AD, 'sound/machines/airlock_creaking.ogg', 100, 1)
AD.visible_message(SPAN_DANGER("\The [owner] tears \the [AD] open!"))
- addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/open, TRUE), 0)
+ addtimer(CALLBACK(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0)
AD.set_broken(TRUE)
return
else
@@ -82,12 +82,12 @@
if((AD.is_broken(NOPOWER) || do_after(owner, 5 SECONDS,AD)) && !(AD.operating || AD.welded || AD.locked))
playsound(AD, 'sound/machines/airlock_creaking.ogg', 100, 1)
if(AD.density)
- addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/open, TRUE), 0)
+ addtimer(CALLBACK(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0)
if(!AD.is_broken(NOPOWER))
AD.set_broken(TRUE)
AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] open!"))
else
- addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/close, TRUE), 0)
+ addtimer(CALLBACK(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, close), TRUE), 0)
if(!AD.is_broken(NOPOWER))
AD.set_broken(TRUE)
AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] closed!"))
@@ -197,7 +197,7 @@
item_state = "mech_floodlight"
restricted_hardpoints = list(HARDPOINT_HEAD, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
mech_layer = MECH_INTERMEDIATE_LAYER
- origin_tech = "{'materials':1,'engineering':1}"
+ origin_tech = @'{"materials":1,"engineering":1}'
var/on = 0
var/l_power = 0.9
@@ -251,7 +251,7 @@
var/mode = CATAPULT_SINGLE
var/atom/movable/locked
equipment_delay = 30 //Stunlocks are not ideal
- origin_tech = "{'materials':4,'engineering':4,'magnets':4}"
+ origin_tech = @'{"materials":4,"engineering":4,"magnets":4}'
require_adjacent = FALSE
/obj/item/mech_equipment/catapult/get_hardpoint_maptext()
@@ -372,7 +372,7 @@
//Drill can have a head
var/obj/item/drill_head/drill_head
- origin_tech = "{'materials':2,'engineering':2}"
+ origin_tech = @'{"materials":2,"engineering":2}'
/obj/item/mech_equipment/drill/Initialize()
. = ..()
@@ -435,26 +435,24 @@
if (!..()) // /obj/item/mech_equipment/afterattack implements a usage guard
return
- if (istype(target, /obj/item/drill_head))
- attach_head(target, user)
+ if(!target.simulated)
return
if (!drill_head)
- to_chat(user, SPAN_WARNING("\The [src] doesn't have a head!"))
+ if (istype(target, /obj/item/drill_head))
+ attach_head(target, user)
+ else
+ to_chat(user, SPAN_WARNING("\The [src] doesn't have a head!"))
return
if (ismob(target))
- var/mob/tmob = target
- if (tmob.unacidable)
- to_chat(user, SPAN_WARNING("\The [target] can't be drilled away."))
- return
- else
- to_chat(tmob, FONT_HUGE(SPAN_DANGER("You're about to get drilled - dodge!")))
+ to_chat(target, FONT_HUGE(SPAN_DANGER("You're about to get drilled - dodge!")))
else if (isobj(target))
var/obj/tobj = target
- if (tobj.unacidable)
- to_chat(user, SPAN_WARNING("\The [target] can't be drilled away."))
+ var/decl/material/mat = tobj.get_material()
+ if (mat && mat.hardness < drill_head.material?.hardness)
+ to_chat(user, SPAN_WARNING("\The [target] is too hard to be destroyed by [drill_head.material ? "a [drill_head.material.adjective_name]" : "this"] drill."))
return
else if (istype(target, /turf/unsimulated))
@@ -495,15 +493,6 @@
scoop_ore(target)
return
- if (istype(target, /turf/simulated/floor/asteroid))
- for (var/turf/simulated/floor/asteroid/asteroid in RANGE_TURFS(target, 1))
- if (!(get_dir(owner, asteroid) & owner.dir))
- continue
- drill_head.durability -= 1
- asteroid.gets_dug()
- scoop_ore(target)
- return
-
if (istype(target, /turf/simulated/wall))
var/turf/simulated/wall/wall = target
var/wall_hardness = max(wall.material.hardness, wall.reinf_material ? wall.reinf_material.hardness : 0)
@@ -512,6 +501,15 @@
drill_head.durability -= 2
return
+ if(istype(target, /turf))
+ for(var/turf/asteroid in RANGE_TURFS(target, 1))
+ if (!(get_dir(owner, asteroid) & owner.dir))
+ continue
+ if(asteroid.can_be_dug() && asteroid.drop_diggable_resources())
+ drill_head.durability -= 1
+ scoop_ore(asteroid)
+ return
+
var/audible = "loudly grinding machinery"
if (iscarbon(target)) //splorch
audible = "a terrible rending of metal and flesh"
@@ -546,17 +544,17 @@
name = "mounted plasma cutter"
desc = "An industrial plasma cutter mounted onto the chassis of the mech. "
icon_state = "mech_plasma"
- holding_type = /obj/item/gun/energy/plasmacutter/mounted/mech
+ holding = /obj/item/gun/energy/plasmacutter/mounted/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
restricted_software = list(MECH_SOFTWARE_UTILITY)
- origin_tech = "{'materials':4,'engineering':6,'exoticmatter':4,'combat':3}"
+ origin_tech = @'{"materials":4,"engineering":6,"exoticmatter":4,"combat":3}'
/obj/item/mech_equipment/mounted_system/taser/autoplasma
icon_state = "mech_energy"
- holding_type = /obj/item/gun/energy/plasmacutter/mounted/mech/auto
+ holding = /obj/item/gun/energy/plasmacutter/mounted/mech/auto
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_UTILITY)
- origin_tech = "{'materials':5,'engineering':6,'exoticmatter':4,'combat':4}"
+ origin_tech = @'{"materials":5,"engineering":6,"exoticmatter":4,"combat":4}'
/obj/item/gun/energy/plasmacutter/mounted/mech/auto
charge_cost = 13
@@ -578,7 +576,7 @@
passive_power_use = 0 KILOWATTS
var/activated_passive_power = 2 KILOWATTS
var/movement_power = 75
- origin_tech = "{'magnets':3,'engineering':3,'exoticmatter':3}"
+ origin_tech = @'{"magnets":3,"engineering":3,"exoticmatter":3}'
var/datum/effect/effect/system/trail/ion/ion_trail
require_adjacent = FALSE
var/stabilizers = FALSE
@@ -702,7 +700,7 @@
restricted_software = list(MECH_SOFTWARE_UTILITY)
equipment_delay = 10
- origin_tech = "{'materials':1,'engineering':1,'magnets':2}"
+ origin_tech = @'{"materials":1,"engineering":1,"magnets":2}'
/obj/item/mech_equipment/camera/Initialize()
diff --git a/code/modules/mechs/interface/_interface.dm b/code/modules/mechs/interface/_interface.dm
index 38535387f41..bced208448d 100644
--- a/code/modules/mechs/interface/_interface.dm
+++ b/code/modules/mechs/interface/_interface.dm
@@ -1,5 +1,3 @@
-#define BAR_CAP 12
-
/mob/living/exosuit
var/static/list/additional_hud_elements = list(
/obj/screen/exosuit/toggle/power_control,
@@ -23,11 +21,11 @@
client.screen |= hud_elements
/mob/living/exosuit/InitializeHud()
- zone_sel = new
+ zone_sel = new(null, src)
if(!LAZYLEN(hud_elements))
var/i = 1
for(var/hardpoint in hardpoints)
- var/obj/screen/exosuit/hardpoint/H = new(src, hardpoint)
+ var/obj/screen/exosuit/hardpoint/H = new(null, src, null, null, null, hardpoint)
H.screen_loc = "LEFT:6,TOP-[i]:-16"
hud_elements |= H
hardpoint_hud_elements[hardpoint] = H
@@ -38,26 +36,33 @@
i = 0
var/pos = 7
for(var/additional_hud in additional_hud_elements)
- var/obj/screen/exosuit/M = new additional_hud(src)
+ var/obj/screen/exosuit/M = new additional_hud(null, src)
M.screen_loc = "LEFT:6,BOTTOM+[pos]:[i]"
hud_elements |= M
i -= M.height
- hud_health = new /obj/screen/exosuit/health(src)
+ hud_health = new /obj/screen/exosuit/health(null, src)
hud_health.screen_loc = "RIGHT-1:28,CENTER-3:11"
hud_elements |= hud_health
hud_open = locate(/obj/screen/exosuit/toggle/hatch_open) in hud_elements
- hud_power = new /obj/screen/exosuit/power(src)
+ hud_power = new /obj/screen/exosuit/power(null, src)
hud_power.screen_loc = "RIGHT-1:28,CENTER-4:25"
hud_elements |= hud_power
hud_power_control = locate(/obj/screen/exosuit/toggle/power_control) in hud_elements
hud_camera = locate(/obj/screen/exosuit/toggle/camera) in hud_elements
- hud_heat = new /obj/screen/exosuit/heat(src)
+ hud_heat = new /obj/screen/exosuit/heat(null, src)
hud_heat.screen_loc = "RIGHT-1:28,CENTER-4"
hud_elements |= hud_heat
refresh_hud()
+/mob/living/exosuit/should_do_hud_updates()
+ . = ..()
+ if(!. && length(pilots))
+ for(var/mob/living/pilot in pilots)
+ if(pilot.should_do_hud_updates())
+ return TRUE
+
/mob/living/exosuit/handle_hud_icons()
for(var/hardpoint in hardpoint_hud_elements)
var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint]
@@ -122,4 +127,4 @@
if(H)
H.color = "#a03b3b"
animate(H, color = COLOR_WHITE, time = timeout, easing = CUBIC_EASING | EASE_IN)
- addtimer(CALLBACK(src, .proc/reset_hardpoint_color), timeout)
\ No newline at end of file
+ addtimer(CALLBACK(src, PROC_REF(reset_hardpoint_color)), timeout)
\ No newline at end of file
diff --git a/code/modules/mechs/mech.dm b/code/modules/mechs/mech.dm
index 2dccac4ee91..260efb99c98 100644
--- a/code/modules/mechs/mech.dm
+++ b/code/modules/mechs/mech.dm
@@ -12,7 +12,7 @@
status_flags = PASSEMOTES
a_intent = I_HURT
mob_size = MOB_SIZE_LARGE
- atom_flags = ATOM_FLAG_SHIELD_CONTENTS | ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_BLOCK_DIAGONAL_FACING
+ atom_flags = ATOM_FLAG_SHIELD_CONTENTS | ATOM_FLAG_BLOCK_DIAGONAL_FACING
meat_type = null
meat_amount = 0
@@ -119,8 +119,6 @@
if(source_frame.material)
material = source_frame.material
- updatehealth()
-
// Generate hardpoint list.
var/list/component_descriptions
for(var/obj/item/mech_component/comp in list(arms, legs, head, body))
@@ -177,7 +175,7 @@
for(var/hardpoint in hardpoint_hud_elements)
var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint]
- H.owner = null
+ H.owner_ref = null
H.holding = null
qdel(H)
hardpoint_hud_elements.Cut()
@@ -208,9 +206,9 @@
/mob/living/exosuit/return_air()
return (body && body.pilot_coverage >= 100 && hatch_closed && body.cockpit) ? body.cockpit : loc.return_air()
-/mob/living/exosuit/GetIdCards()
+/mob/living/exosuit/GetIdCards(list/exceptions)
. = ..()
- if(istype(access_card))
+ if(istype(access_card) && !is_type_in_list(access_card, exceptions))
LAZYDISTINCTADD(., access_card)
/mob/living/exosuit/set_dir()
diff --git a/code/modules/mechs/mech_construction.dm b/code/modules/mechs/mech_construction.dm
index 35f6b87b440..8a2bfd3b391 100644
--- a/code/modules/mechs/mech_construction.dm
+++ b/code/modules/mechs/mech_construction.dm
@@ -45,7 +45,7 @@
if(target == selected_hardpoint)
clear_selected_hardpoint()
- events_repository.unregister(/decl/observ/destroyed, module_to_forget, src, .proc/forget_module)
+ events_repository.unregister(/decl/observ/destroyed, module_to_forget, src, PROC_REF(forget_module))
var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[target]
H.holding = null
@@ -96,7 +96,7 @@
playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1)
else return FALSE
- events_repository.register(/decl/observ/destroyed, system, src, .proc/forget_module)
+ events_repository.register(/decl/observ/destroyed, system, src, PROC_REF(forget_module))
system.forceMove(src)
hardpoints[system_hardpoint] = system
@@ -139,7 +139,7 @@
system.forceMove(get_turf(src))
system.screen_loc = null
system.layer = initial(system.layer)
- events_repository.unregister(/decl/observ/destroyed, system, src, .proc/forget_module)
+ events_repository.unregister(/decl/observ/destroyed, system, src, PROC_REF(forget_module))
var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[system_hardpoint]
H.holding = null
diff --git a/code/modules/mechs/mech_damage.dm b/code/modules/mechs/mech_damage.dm
index 84e74389446..3b8c152f403 100644
--- a/code/modules/mechs/mech_damage.dm
+++ b/code/modules/mechs/mech_damage.dm
@@ -80,19 +80,22 @@
if(body_armor)
. += body_armor
-/mob/living/exosuit/updatehealth()
- maxHealth = body ? body.mech_health : 0
- health = maxHealth-(getFireLoss()+getBruteLoss())
+/mob/living/exosuit/get_max_health()
+ return (body ? body.mech_health : 0)
-/mob/living/exosuit/adjustFireLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head)))
+/mob/living/exosuit/get_total_life_damage()
+ return (getFireLoss()+getBruteLoss())
+
+/mob/living/exosuit/adjustFireLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head)), var/do_update_health = TRUE)
if(MC)
MC.take_burn_damage(amount)
- MC.update_health()
+ if(do_update_health)
+ update_health() // TODO: unify these procs somehow instead of having weird brute-wrapping behavior as the default.
-/mob/living/exosuit/adjustBruteLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head)))
+/mob/living/exosuit/adjustBruteLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head)), var/do_update_health = TRUE)
if(MC)
MC.take_brute_damage(amount)
- MC.update_health()
+ ..()
/mob/living/exosuit/proc/zoneToComponent(var/zone)
switch(zone)
@@ -152,8 +155,6 @@
if((damagetype == BRUTE || damagetype == BURN) && prob(25+(damage*2)))
sparks.set_up(3,0,src)
sparks.start()
- updatehealth()
-
return 1
/mob/living/exosuit/rad_act(var/severity)
@@ -164,7 +165,7 @@
if(!hatch_closed || (body.pilot_coverage < 100)) //Open, environment is the source
return .
var/list/after_armor = modify_damage_by_armor(null, ., IRRADIATE, DAM_DISPERSED, src, 0, TRUE)
- return after_armor[1]
+ return after_armor[1]
/mob/living/exosuit/getFireLoss()
var/total = 0
@@ -200,6 +201,6 @@
for(var/thing in pilots)
var/mob/pilot = thing
pilot.emp_act(severity)
-
+
/mob/living/exosuit/get_bullet_impact_effect_type(def_zone)
return BULLET_IMPACT_METAL
diff --git a/code/modules/mechs/mech_damage_immunity.dm b/code/modules/mechs/mech_damage_immunity.dm
index 23a69ffd596..067c613d56d 100644
--- a/code/modules/mechs/mech_damage_immunity.dm
+++ b/code/modules/mechs/mech_damage_immunity.dm
@@ -14,7 +14,8 @@
/mob/living/exosuit/setOxyLoss()
return 0
-/mob/living/exosuit/adjustOxyLoss()
+/mob/living/exosuit/adjustOxyLoss(var/damage, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(FALSE)
return 0
/mob/living/exosuit/getToxLoss()
@@ -23,7 +24,7 @@
/mob/living/exosuit/setToxLoss()
return 0
-/mob/living/exosuit/adjustToxLoss()
+/mob/living/exosuit/adjustToxLoss(var/amount, var/do_update_health = TRUE)
return 0
/mob/living/exosuit/getBrainLoss()
@@ -32,7 +33,8 @@
/mob/living/exosuit/setBrainLoss()
return 0
-/mob/living/exosuit/adjustBrainLoss()
+/mob/living/exosuit/adjustBrainLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(FALSE)
return 0
/mob/living/exosuit/getCloneLoss()
@@ -41,7 +43,8 @@
/mob/living/exosuit/setCloneLoss()
return 0
-/mob/living/exosuit/adjustCloneLoss()
+/mob/living/exosuit/adjustCloneLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(FALSE)
return 0
/mob/living/exosuit/getHalLoss()
@@ -50,5 +53,6 @@
/mob/living/exosuit/setHalLoss()
return 0
-/mob/living/exosuit/adjustHalLoss()
+/mob/living/exosuit/adjustHalLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(FALSE)
return 0
\ No newline at end of file
diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm
index 2268f62713d..867f92eed14 100644
--- a/code/modules/mechs/mech_interaction.dm
+++ b/code/modules/mechs/mech_interaction.dm
@@ -1,11 +1,11 @@
-/mob/living/exosuit/receive_mouse_drop(atom/dropping, mob/user)
+/mob/living/exosuit/receive_mouse_drop(atom/dropping, mob/user, params)
. = ..()
if(!. && istype(dropping, /obj/machinery/portable_atmospherics/canister))
- body.receive_mouse_drop(dropping, user)
+ body.receive_mouse_drop(dropping, user, params)
return TRUE
-/mob/living/exosuit/handle_mouse_drop(atom/over, mob/user)
- if(body?.handle_mouse_drop(over, user))
+/mob/living/exosuit/handle_mouse_drop(atom/over, mob/user, params)
+ if(body?.handle_mouse_drop(over, user, params))
return TRUE
. = ..()
@@ -81,12 +81,12 @@
if(!hatch_closed)
return max(shared_living_nano_distance(src_object), .) //Either visible to mech(outside) or visible to user (inside)
-/mob/living/exosuit/exosuit/CanUseTopic(mob/user, datum/topic_state/state, href_list)
+/mob/living/exosuit/CanUseTopic(mob/user, datum/topic_state/state, href_list)
if(user in pilots)
return STATUS_INTERACTIVE
return ..()
-/mob/living/exosuit/get_dexterity(var/silent = FALSE)
+/mob/living/exosuit/get_dexterity(var/silent)
return DEXTERITY_FULL
/mob/living/exosuit/ClickOn(var/atom/A, var/params, var/mob/user)
diff --git a/code/modules/mechs/mech_life.dm b/code/modules/mechs/mech_life.dm
index c000678ca65..ad1964eb516 100644
--- a/code/modules/mechs/mech_life.dm
+++ b/code/modules/mechs/mech_life.dm
@@ -1,7 +1,16 @@
/mob/living/exosuit/handle_disabilities()
return
-/mob/living/exosuit/Life()
+/mob/living/exosuit/update_lying()
+ lying = FALSE // Prevent carp from proning us
+
+/mob/living/exosuit/handle_regular_status_updates()
+
+ if(!body && !QDELETED(src))
+ physically_destroyed()
+ return FALSE
+
+ . = ..()
for(var/thing in pilots)
var/mob/pilot = thing
@@ -12,20 +21,10 @@
UNSETEMPTY(pilots)
update_pilots()
- if(!body && !QDELETED(src))
- qdel(src)
- return
-
if(radio)
radio.on = (head && head.radio && head.radio.is_functional() && get_cell())
- body.update_air(hatch_closed && use_air)
-
- var/powered = FALSE
- if(get_cell())
- powered = get_cell().drain_power(0, 0, calc_power_draw()) > 0
-
- if(!powered)
+ if(!is_suit_powered())
//Shut down all systems
if(head)
head.active_sensors = FALSE
@@ -35,18 +34,11 @@
if(istype(M) && M.active && M.passive_power_use)
M.deactivate()
- updatehealth()
- if(health <= 0 && stat != DEAD)
- death()
-
if(emp_damage > 0)
emp_damage -= min(1, emp_damage) //Reduce emp accumulation over time
- ..() //Handles stuff like environment
-
- handle_hud_icons()
- lying = FALSE // Fuck off, carp.
- handle_vision(powered)
+/mob/living/exosuit/proc/is_suit_powered()
+ return (get_cell()?.drain_power(0, 0, calc_power_draw())) > 0
/mob/living/exosuit/get_cell(force)
RETURN_TYPE(/obj/item/cell)
@@ -73,7 +65,13 @@
/mob/living/exosuit/handle_environment(var/datum/gas_mixture/environment)
..()
- if(!environment) return
+
+ if(body)
+ body.update_air(hatch_closed && use_air)
+
+ if(!environment)
+ return
+
//Mechs and vehicles in general can be assumed to just tend to whatever ambient temperature
if(abs(environment.temperature - bodytemperature) > 0 )
bodytemperature += ((environment.temperature - bodytemperature) / 6)
@@ -125,14 +123,14 @@
qdel(src)
return
-/mob/living/exosuit/handle_vision(powered)
+/mob/living/exosuit/handle_vision()
var/was_blind = sight & BLIND
if(head)
+ var/powered = is_suit_powered()
sight = head.get_sight(powered)
see_invisible = head.get_invisible(powered)
if(body && (body.pilot_coverage < 100 || body.transparent_cabin) || !hatch_closed)
sight &= ~BLIND
-
if(sight & BLIND && !was_blind)
for(var/mob/pilot in pilots)
to_chat(pilot, SPAN_WARNING("The sensors are not operational and you cannot see a thing!"))
diff --git a/code/modules/mechs/mech_movement.dm b/code/modules/mechs/mech_movement.dm
index a711b680ae9..6f926046cfa 100644
--- a/code/modules/mechs/mech_movement.dm
+++ b/code/modules/mechs/mech_movement.dm
@@ -184,8 +184,7 @@
/mob/living/exosuit/fall_damage()
return 175 //Exosuits are big and heavy
-/mob/living/exosuit/handle_fall_effect(var/turf/landing)
+/mob/living/exosuit/apply_fall_damage(var/turf/landing)
// Return here if for any reason you shouldn´t take damage
- ..()
if(legs)
legs.handle_vehicle_fall()
diff --git a/code/modules/mechs/premade/_premade.dm b/code/modules/mechs/premade/_premade.dm
index 02caca0a7a7..98c988b32f8 100644
--- a/code/modules/mechs/premade/_premade.dm
+++ b/code/modules/mechs/premade/_premade.dm
@@ -4,9 +4,22 @@
name = "impossible exosuit"
desc = "It seems to be saying 'please let me die'."
abstract_type = /mob/living/exosuit/premade
+ icon = 'icons/mecha/mecha_preview.dmi'
+ icon_state = "preview"
+ pixel_x = 0
+ pixel_y = 0
var/decal
/mob/living/exosuit/premade/Initialize()
+
+ // Reset our mapping helpers.
+ default_pixel_x = -8
+ default_pixel_y = 0
+ pixel_x = default_pixel_x
+ pixel_y = default_pixel_y
+ icon = null
+ icon_state = null
+
if(arms)
arms.decal = decal
arms.prebuild()
diff --git a/code/modules/mechs/premade/powerloader.dm b/code/modules/mechs/premade/powerloader.dm
index ef1e7fecc0f..45c7c782aa4 100644
--- a/code/modules/mechs/premade/powerloader.dm
+++ b/code/modules/mechs/premade/powerloader.dm
@@ -105,7 +105,7 @@
/mob/living/exosuit/premade/powerloader/mechete/spawn_mech_equipment()
install_system(new /obj/item/mech_equipment/ballistic_shield(src), HARDPOINT_LEFT_HAND)
- install_system(new /obj/item/mech_equipment/mounted_system/melee/mechete(src), HARDPOINT_RIGHT_HAND)
+ install_system(new /obj/item/mech_equipment/mounted_system/melee/machete(src), HARDPOINT_RIGHT_HAND)
/mob/living/exosuit/premade/powerloader/flames_red
name = "APLU \"Firestarter\""
diff --git a/code/modules/merchant/merchant_programs.dm b/code/modules/merchant/merchant_programs.dm
index b09345aeca2..bd3c35a5a1e 100644
--- a/code/modules/merchant/merchant_programs.dm
+++ b/code/modules/merchant/merchant_programs.dm
@@ -101,7 +101,7 @@
if(istext(response))
last_comms = T.get_response(response, "No thank you.")
else
- last_comms = T.get_response("trade_complete", "Thank you!")
+ last_comms = T.get_response(TRADER_TRADE_COMPLETE, "Thank you!")
T.trade(null,num, get_turf(pad))
bank -= response
return
@@ -124,9 +124,9 @@
return
var/response = T.offer_items_for_trade(targets,num, get_turf(pad), skill)
if(istext(response))
- last_comms = T.get_response(response,"No, a million times no.")
+ last_comms = T.get_response(response, "No, a million times no.")
else
- last_comms = T.get_response("trade_complete","Thanks for your business!")
+ last_comms = T.get_response(TRADER_TRADE_COMPLETE, "Thanks for your business!")
return
last_comms = "PAD NOT CONNECTED"
@@ -138,7 +138,7 @@
if(istext(response))
last_comms = T.get_response(response, "Nope. Nope nope nope.")
else
- last_comms = T.get_response("trade_complete", "Glad to be of service!")
+ last_comms = T.get_response(TRADER_TRADE_COMPLETE, "Glad to be of service!")
bank += response
return
last_comms = "PAD NOT CONNECTED"
@@ -214,7 +214,7 @@
var/datum/trader/T = get_current_trader()
if(T)
if(!T.can_hail())
- last_comms = T.get_response("hail_deny", "No, I'm not speaking with you.")
+ last_comms = T.get_response(TRADER_HAIL_DENY, "No, I'm not speaking with you.")
. = 1
else
if(href_list["PRG_hail"])
diff --git a/code/modules/mining/drilling/drill_act.dm b/code/modules/mining/drilling/drill_act.dm
index d75e5162716..30c1e1b9259 100644
--- a/code/modules/mining/drilling/drill_act.dm
+++ b/code/modules/mining/drilling/drill_act.dm
@@ -1,5 +1,7 @@
/turf/proc/drill_act()
SHOULD_CALL_PARENT(TRUE)
+ drop_diggable_resources()
+ dig_pit()
var/base_turf = get_base_turf_by_area(src)
if(!istype(src, base_turf))
return ChangeTurf(base_turf)
@@ -29,16 +31,3 @@
var/turf/T = GetBelow(src)
if(istype(T))
T.drill_act()
-
-/turf/exterior/drill_act()
- var/turf/exterior/digging = ..()
- if(istype(digging) && digging.diggable)
- new /obj/structure/pit(digging)
- digging.diggable = FALSE
- return digging
-
-/turf/simulated/floor/asteroid/drill_act()
- var/turf/simulated/floor/asteroid/digging = ..()
- if(istype(digging) && !digging.dug)
- digging.gets_dug()
- return digging
\ No newline at end of file
diff --git a/code/modules/mining/machinery/_material_processing.dm b/code/modules/mining/machinery/_material_processing.dm
index 0d20dfaf71b..f149ec055a4 100644
--- a/code/modules/mining/machinery/_material_processing.dm
+++ b/code/modules/mining/machinery/_material_processing.dm
@@ -90,7 +90,7 @@
/obj/machinery/material_processing/Destroy()
input_turf = null
output_turf = null
- events_repository.unregister(/decl/observ/moved, src, src, .proc/on_moved)
+ events_repository.unregister(/decl/observ/moved, src, src, PROC_REF(on_moved))
. = ..()
/obj/machinery/material_processing/Initialize()
@@ -99,7 +99,7 @@
SET_OUTPUT(output_turf)
. = ..()
queue_icon_update()
- events_repository.register(/decl/observ/moved, src, src, .proc/on_moved)
+ events_repository.register(/decl/observ/moved, src, src, PROC_REF(on_moved))
/obj/machinery/material_processing/proc/on_moved(atom/moving, atom/old_loc, atom/new_loc)
if(istype(input_turf, /turf))
diff --git a/code/modules/mining/machinery/material_extractor.dm b/code/modules/mining/machinery/material_extractor.dm
index 65eb7db77b1..2da4d8c8f76 100644
--- a/code/modules/mining/machinery/material_extractor.dm
+++ b/code/modules/mining/machinery/material_extractor.dm
@@ -1,409 +1,296 @@
-//Machine meant to extra gases from hydrates
-// Input is clockwise east, output clockwise west, gas output clockwise south
-// The general concept is that it heats up things up to 20c and grabs anything gaseous or liquid at that temp range, with a debuff on liquids, so it doesn't replace more specialized machines.
-#define GAS_EXTRACTOR_GAS_TANK 1000
-#define GAS_EXTRACTOR_REAGENTS_TANK 500
-#define GAS_EXTRACTOR_REAGENTS_INPUT_TANK 500
-#define GAS_EXTRACTOR_OPERATING_TEMP T20C + 5 //Temperature the machine heat stuff to.. Has to be 20c + 5 because someone decided ice melted at 20c
-#define GAS_EXTRACTOR_LIQUID_EFFICIENCY 0.75 //% efficiency for liquids
-#define GAS_EXTRACTOR_MIN_REAGENT_AMOUNT 0.1 //Minimum amount of reagents units we tolerate in the machine to keep things clean
-
-//Whitelist of items that can be processed by the machine
-var/global/list/material_extractor_items_whitelist = list(/obj/item/stack/material/ore)
-
-////////////////////////////////////////////////////
-// Holder for the reagents_holder.
-// Since reagents_holder can't exist on its own for some reasons
-////////////////////////////////////////////////////
-/obj/input_holder
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT //We wanna disable those to trigger reactions on our own terms
-
-////////////////////////////////////////////////////
-// Actual machine
-////////////////////////////////////////////////////
-/obj/machinery/atmospherics/unary/material/extractor
- name = "gas extractor"
- desc = "A machine for extracting liquids and gases from ices and hydrates. Extracts liquids at a reduced efficiency."
+#define GAS_EXTRACTOR_OPERATING_TEMP T20C + 15
+#define MAX_INTAKE_ORE_PER_TICK 10
+
+/obj/machinery/material_processing/extractor
+ name = "material extractor"
+ desc = "A machine for extracting liquids and gases from ices and hydrates."
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "extractor"
- layer = MOB_LAYER+1 // Overhead
- density = TRUE
-
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT //We wanna disable those to trigger reactions on our own terms
- obj_flags = OBJ_FLAG_ANCHORABLE | OBJ_FLAG_ROTATABLE
- use_power = POWER_USE_OFF
- idle_power_usage = 25 //WATTS
- power_rating = 1 KILOWATTS
- power_channel = EQUIP
- connect_types = CONNECT_TYPE_REGULAR
-
- uncreated_component_parts = null
- construct_state = /decl/machine_construction/default/panel_closed
- required_interaction_dexterity = DEXTERITY_SIMPLE_MACHINES
- public_variables = list(
- /decl/public_access/public_variable/use_power,
- /decl/public_access/public_variable/gas,
- /decl/public_access/public_variable/pressure,
- /decl/public_access/public_variable/temperature,
- /decl/public_access/public_variable/reagents,
- /decl/public_access/public_variable/reagents/volumes,
- /decl/public_access/public_variable/reagents/free_space,
- /decl/public_access/public_variable/reagents/total_volume,
- /decl/public_access/public_variable/reagents/maximum_volume,
- /decl/public_access/public_variable/material_extractor/has_bucket,
- )
- public_methods = list(
- /decl/public_access/public_method/toggle_power,
- /decl/public_access/public_method/material_extractor/flush_gas,
- /decl/public_access/public_method/material_extractor/flush_reagents,
- )
- var/obj/item/chems/glass/output_container //#TODO: change this when plumbing is a thing
- var/obj/input_holder/input_buffer //Since reagent_holder needs a parent object to exist on creation we gotta do this horrible hack
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/get_output_loc()
- return get_step(loc, get_output_dir())
-/obj/machinery/atmospherics/unary/material/extractor/proc/get_output_dir()
- return turn(dir, 90)
-/obj/machinery/atmospherics/unary/material/extractor/proc/get_input_dir()
- return turn(dir, -90)
-
-/obj/machinery/atmospherics/unary/material/extractor/Initialize(mapload, d = 0, populate_parts = TRUE)
+ use_ui_template = "material_processing_extractor.tmpl"
+ atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_NO_REACT | ATOM_FLAG_NO_DISSOLVE
+
+ var/static/list/eating_whitelist = list(/obj/item/stack/material)
+
+ var/datum/gas_mixture/gas_contents
+
+ var/obj/item/chems/glass/output_container
+ var/dispense_amount = 50
+
+ // Since reactions and heating products may overfill the reagent tank, the reagent tank has 1.25x this volume.
+ var/static/max_liquid = 3000
+
+/obj/machinery/material_processing/extractor/Initialize()
. = ..()
- if(populate_parts)
- output_container = new/obj/item/chems/glass/bucket(src)
- air_contents.volume = GAS_EXTRACTOR_GAS_TANK
- if(!reagents)
- create_reagents(GAS_EXTRACTOR_REAGENTS_TANK)
- if(!input_buffer)
- input_buffer = new(src)
- input_buffer.create_reagents(GAS_EXTRACTOR_REAGENTS_INPUT_TANK) //Did this here because reimplementing that in the new() proc failed a test for some reasons
+ if(!gas_contents)
+ gas_contents = new(800)
+ set_extension(src, /datum/extension/atmospherics_connection, FALSE, gas_contents)
+
+ create_reagents(round(1.25*max_liquid))
queue_temperature_atoms(src)
-/obj/machinery/atmospherics/unary/material/extractor/Destroy()
- output_container = null
- QDEL_NULL(input_buffer)
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/machinery/material_processing/extractor/Destroy()
+ QDEL_NULL(output_container)
. = ..()
-/obj/machinery/atmospherics/unary/material/extractor/Bumped(var/obj/O)
- if(QDELETED(O)) //Because we qdel object at the input if we can process them. And its possible this might happen
- return
- //We only override for entities touching the machine from the input's direction only
- if(get_dir(loc, O.loc) != get_input_dir() || inoperable() || !O.checkpass(PASS_FLAG_TABLE) || O.anchored)
- return ..()
-
- //2 possible cases here. One we got something that we can turn into liquids or gas (with or without accompanying solid reagent at STP)
- // OR we get something that only contains matter that's solid at STP, which we should just pass along so whatever else is in the
- // conveyor line can process it.
- if(can_process_object(O))
- if(calc_resulting_reagents_total_vol(O) > input_tank_free_volume())
- return //If we can process it, but there's no room currently in the input, just don't interact with it for now!
- process_ore(O)
- else
- O.dropInto(get_output_loc())
+/obj/machinery/material_processing/extractor/physically_destroyed(skip_qdel)
+ var/obj/container = remove_container()
+ if(container)
+ container.dropInto(get_turf(src))
+ . = ..()
-/obj/machinery/atmospherics/unary/material/extractor/ProcessAtomTemperature()
- if(operable() && use_power)
- //We process temp for the input reagent_holder too
- input_buffer.temperature = GAS_EXTRACTOR_OPERATING_TEMP
- temperature = GAS_EXTRACTOR_OPERATING_TEMP
- return TRUE
- return ..()
+/obj/machinery/material_processing/extractor/dismantle()
+ var/obj/container = remove_container()
+ if(container)
+ container.dropInto(get_turf(src))
+ . = ..()
-/obj/machinery/atmospherics/unary/material/extractor/examine(var/mob/user)
+/obj/machinery/material_processing/extractor/LateInitialize()
. = ..()
- //Only display info if the screen is there
- if(get_component_of_type(/obj/item/stock_parts/console_screen))
- to_chat(user, SPAN_NOTICE("The processing tank gauge reads [round(input_buffer.reagents.total_volume)]/[input_buffer.reagents.maximum_volume] units of liquid."))
- to_chat(user, SPAN_NOTICE("The internal storage tank gauge reads [round(reagents.total_volume)]/[reagents.maximum_volume] units of liquid."))
- to_chat(user, SPAN_NOTICE("The internal gas tank pressure gauge reads [air_contents.return_pressure()] kPa."))
-
- if(is_output_container_full() || is_internal_tank_full())
- to_chat(user, SPAN_WARNING("It is currently idling because one or more of its liquid tanks are full."))
- else
- to_chat(user, SPAN_NOTICE("Everything is working correctly."))
- if(output_container)
- var/output_desc = SPAN_NOTICE("It has \a [output_container.name] in place to receive reagents.")
- if(is_output_container_full())
- output_desc = "[output_desc] [SPAN_WARNING("It's full!")]"
- to_chat(user, output_desc)
+ var/obj/machinery/atmospherics/portables_connector/port = locate() in loc
+ if(port)
+ var/datum/extension/atmospherics_connection/connection = get_extension(src, /datum/extension/atmospherics_connection)
+ if(connection)
+ connection.connect(port)
+
+
+/obj/machinery/material_processing/extractor/examine(mob/user)
+ . = ..()
+
+ var/datum/extension/atmospherics_connection/connection = get_extension(src, /datum/extension/atmospherics_connection)
+ if(connection.connected_port)
+ to_chat(user, SPAN_NOTICE("It is connected to \the [connection.connected_port]."))
else
- to_chat(user, SPAN_NOTICE("It has nothing to pour reagents into."))
+ to_chat(user, SPAN_NOTICE("It may be connected to an atmospherics connector port with a wrench."))
+
+ if(output_container)
+ to_chat(user, SPAN_NOTICE("It has \a [output_container] inserted."))
+
+/obj/machinery/material_processing/extractor/Process()
+ if(!use_power || (stat & (BROKEN|NOPOWER)))
+ return
+
+ if(reagents?.total_volume >= max_liquid)
+ return
+
+ if(input_turf)
+ var/eaten = 0
+ for(var/obj/item/eating in input_turf)
+ if(!eating.simulated || eating.anchored)
+ continue
+ if(!can_eat(eating))
+ if(output_turf)
+ eating.dropInto(output_turf)
+ continue
+ eaten++
+ if(eating.reagents?.total_volume)
+ eating.reagents.trans_to_obj(src, eating.reagents.total_volume)
+ for(var/mtype in eating.matter)
+ reagents.add_reagent(mtype, FLOOR(eating.matter[mtype] * REAGENT_UNITS_PER_MATERIAL_UNIT))
+ qdel(eating)
+ if(eaten >= MAX_INTAKE_ORE_PER_TICK)
+ break
+
+/obj/machinery/material_processing/extractor/on_reagent_change()
+ ..()
+
+ if(!reagents)
+ return
+
+ var/adjusted_reagents = FALSE
+ for(var/mtype in reagents.reagent_volumes)
+ adjusted_reagents = max(adjusted_reagents, process_non_liquid(mtype))
+
+ if(adjusted_reagents)
+ if(gas_contents)
+ gas_contents.update_values()
+ reagents.update_total()
+
+/obj/machinery/material_processing/extractor/proc/process_non_liquid(var/mtype)
+ var/adjusted_reagents = FALSE
+ var/flashed_warning = FALSE
+ var/decl/material/mat = GET_DECL(mtype)
+ // TODO: Change this to ambient/tank pressure when phase changes are properly implemented.
+ switch(mat.phase_at_temperature(temperature, ONE_ATMOSPHERE))
+ if(MAT_PHASE_GAS)
+ if(gas_contents)
+ adjusted_reagents = TRUE
+ var/reagent_vol = REAGENT_VOLUME(reagents, mtype)
+ var/mols = mat.get_mols_from_units(reagent_vol, MAT_PHASE_LIQUID)
+
+ // Because this generates heated gas, we draw some additional power for heating it
+ // from the ice temperature, ignoring latent heats.
+ var/power_draw_per_mol = (temperature - T0C)*mat.gas_specific_heat
+
+ var/avail_power = power_draw_per_mol*mols - max(can_use_power_oneoff(power_draw_per_mol*mols), 0)
+ var/processed_mols = avail_power/power_draw_per_mol
+
+ if(processed_mols)
+ // The ratio processed_moles/moles gives us the ratio of the reagent volume to what should be removed
+ // since the mole to unit conversion is linear.
+ reagents.remove_reagent(mtype, reagent_vol*(processed_mols/mols), defer_update = TRUE)
+
+ use_power_oneoff(power_draw_per_mol*mols)
+ // Still somewhat arbitary
+ gas_contents.adjust_gas_temp(mtype, mols, temperature, FALSE)
+
+ // Some feedback for the user
+ if(!flashed_warning && processed_mols < mols)
+ visible_message(SPAN_WARNING("\The [src] flashes an 'Insufficient Power' error!"), range = 2)
+ flashed_warning = TRUE
+ // Unlike the smelter or compressor, we don't hold on to solids indefinitely. Spit them out, losing any remainders.
+ if(MAT_PHASE_SOLID)
+ if(!can_process_material_name(mtype))
+ var/removing = REAGENT_VOLUME(reagents, mtype) || 0
+ var/sheets = FLOOR((removing / REAGENT_UNITS_PER_MATERIAL_UNIT) / SHEET_MATERIAL_AMOUNT)
+ if(sheets > 0) // If we can't process any sheets at all, leave it for manual processing.
+ adjusted_reagents = TRUE
+ SSmaterials.create_object(mtype, output_turf, sheets)
+ reagents.remove_reagent(mtype, removing)
+
+ return adjusted_reagents
+
+/obj/machinery/material_processing/extractor/attackby(obj/item/I, mob/user)
+ if(IS_WRENCH(I) && !panel_open)
+ var/datum/extension/atmospherics_connection/connection = get_extension(src, /datum/extension/atmospherics_connection)
+ if(connection.disconnect())
+ to_chat(user, SPAN_NOTICE("You disconnect \the [src] from the port."))
+ return
+ else
+ var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector) in loc
+ if(possible_port)
+ if(connection.connect(possible_port))
+ to_chat(user, SPAN_NOTICE("You connect \the [src] to the port."))
+ return
+ else
+ to_chat(user, SPAN_WARNING("\The [src] failed to connect to the port."))
+ return
-/obj/machinery/atmospherics/unary/material/extractor/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/chems/glass))
- add_fingerprint(user)
- if(!output_container)
+ if(isnull(output_container))
if(!user.try_unequip(I, src))
return
output_container = I
+ events_repository.register(/decl/observ/destroyed, output_container, src, TYPE_PROC_REF(/obj/machinery/material_processing/extractor, remove_container))
user.visible_message(SPAN_NOTICE("\The [user] places \a [I] in \the [src]."), SPAN_NOTICE("You place \a [I] in \the [src]."))
- update_icon()
- return TRUE
- return ..()
+ return
-/obj/machinery/atmospherics/unary/material/extractor/physical_attack_hand(var/mob/user)
- if(output_container)
- user.put_in_hands(output_container)
- output_container.update_icon()
- output_container = null
- update_icon()
- return TRUE
- return ..()
+ to_chat(user, SPAN_WARNING("\The [src] already has an output container!"))
+ return
+ . = ..()
+
+/obj/machinery/material_processing/extractor/proc/remove_container()
+ if(!output_container)
+ return
+ . = output_container
+ events_repository.unregister(/decl/observ/destroyed, output_container, src, TYPE_PROC_REF(/obj/machinery/material_processing/extractor, remove_container))
+ output_container = null
-/obj/machinery/atmospherics/unary/material/extractor/power_change()
+/obj/machinery/material_processing/extractor/OnTopic(var/mob/user, var/list/href_list)
. = ..()
- if(.)
- queue_temperature_atoms(src)
-/obj/machinery/atmospherics/unary/material/extractor/on_update_icon()
- cut_overlays()
+ if(href_list["change_amount"])
+ var/amount = input(user, "Enter the amount of units to transfer to the container (max 120):", "Units transfer", dispense_amount) as num
- var/initial_state = initial(icon_state)
- if(!use_power || inoperable())
- icon_state = "[initial_state]-off"
- else
- icon_state = initial_state
+ if(!CanInteract(user, global.default_topic_state))
+ return TOPIC_HANDLED
+
+ dispense_amount = clamp(amount, 0, 120)
+ return TOPIC_REFRESH
+
+ if(href_list["dispense"])
+ var/reagent_index = text2num(href_list["dispense"])
+ if(!reagent_index || length(reagents.reagent_volumes) < reagent_index)
+ return TOPIC_HANDLED
+
+ var/mtype = reagents.reagent_volumes[reagent_index]
+
+ // Only liquids are allowed to dispense. Otherwise, try to process the reagent.
+ if(process_non_liquid(mtype))
+ if(gas_contents)
+ gas_contents.update_values()
+ reagents.update_total()
+ return TOPIC_REFRESH
+
+ if(!output_container || !output_container.reagents)
+ return TOPIC_HANDLED
+
+ reagents.trans_type_to(output_container, mtype, dispense_amount)
+ return TOPIC_REFRESH
- if(panel_open)
- add_overlay("[initial_state]-open")
+ if(href_list["eject"])
+ var/obj/container = remove_container()
+ if(!container)
+ return TOPIC_HANDLED
+ if(CanPhysicallyInteract(user))
+ user.put_in_hands(container)
+ else
+ container.dropInto(get_turf(src))
+ return TOPIC_REFRESH
+
+/obj/machinery/material_processing/extractor/get_ui_data(mob/user)
+ var/list/data = ..()
+
+ data["dispense_amount"] = dispense_amount
if(output_container)
- add_overlay("[initial_state]-bucket")
+ var/curr_volume = output_container.reagents?.total_volume || 0
+ var/max_volume = output_container.reagents?.maximum_volume || 0
-/obj/machinery/atmospherics/unary/material/extractor/Process()
- ..()
- if(!is_input_tank_empty())
- update_use_power(POWER_USE_ACTIVE)
+ data["container"] = "[output_container.name] ([curr_volume] / [max_volume] U)"
- //Its crucial that all reactions happen ONLY in the input tank
- if(!force_react_input())
- process_input_tank()
- input_clear_remainder() //Keep the input tank tidy by removing very small amounts of reagents
- else
- update_use_power(POWER_USE_IDLE)
+ data["reagents"] = list()
+ var/index = 0
+ for(var/mtype in reagents.reagent_volumes)
+ index += 1
+ var/decl/material/mat = GET_DECL(mtype)
+ var/is_liquid = mat.phase_at_temperature(temperature, ONE_ATMOSPHERE) == MAT_PHASE_LIQUID
- //Make the internal liquid tank transfer liquids into the output
- move_liquids_to_output()
+ data["reagents"] += list(list("label" = "[mat.liquid_name] ([reagents.reagent_volumes[mtype]] U)", "index" = index, "liquid" = is_liquid))
-//For some reasons that's not in the unary base class...
-/obj/machinery/atmospherics/unary/material/extractor/return_air()
- return air_contents
+ data["full"] = reagents.total_volume >= max_liquid
+ data["gas_pressure"] = gas_contents?.return_pressure()
+ return data
-//Remove trace amounts of reagents from the input tank, to prevent that from causing problems
-/obj/machinery/atmospherics/unary/material/extractor/proc/input_clear_remainder()
- if(input_buffer.reagents.total_volume >= GAS_EXTRACTOR_MIN_REAGENT_AMOUNT)
- return
- input_buffer.reagents.clear_reagents()
-
-//Calculate the amount of reagents we can get from this. Returns a list with each materials and the amount of expected reagents
-/obj/machinery/atmospherics/unary/material/extractor/proc/gather_resulting_reagents_vol(var/obj/O)
- var/list/processable
- if(length(O.matter) > 0)
- processable = list()
- for(var/k in O.matter)
- if(can_process_material_name(k))
- processable[k] = MATERIAL_UNITS_TO_REAGENTS_UNITS(O.matter[k])
- O.matter -= k
- return processable
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/calc_resulting_reagents_total_vol(var/obj/O)
- var/total = 0
- for(var/k in O.matter)
- if(can_process_material_name(k))
- total += MATERIAL_UNITS_TO_REAGENTS_UNITS(O.matter[k])
- return total
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/input_tank_free_volume()
- return round(max(REAGENTS_FREE_SPACE(input_buffer.reagents),0), GAS_EXTRACTOR_MIN_REAGENT_AMOUNT)
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/output_container_free_volume()
- return output_container? round(max(REAGENTS_FREE_SPACE(output_container.reagents), 0), GAS_EXTRACTOR_MIN_REAGENT_AMOUNT) : 0
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/internal_tank_free_volume()
- return round(max(REAGENTS_FREE_SPACE(reagents), 0), GAS_EXTRACTOR_MIN_REAGENT_AMOUNT)
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/is_output_container_full()
- return output_container_free_volume() <= 0
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/is_input_tank_empty()
- return round(input_buffer.reagents.total_volume, GAS_EXTRACTOR_MIN_REAGENT_AMOUNT) == 0
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/is_internal_tank_full()
- return internal_tank_free_volume() <= 0
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/can_process_object(var/obj/O)
- if(istype(O) && length(O.matter) && is_type_in_list(O, global.material_extractor_items_whitelist))
- for(var/k in O.matter)
- if(can_process_material_name(k))
+/obj/machinery/material_processing/extractor/return_air()
+ return gas_contents
+
+/obj/machinery/material_processing/extractor/proc/can_eat(obj/eating)
+ if(istype(eating) && length(eating.matter) && is_type_in_list(eating, eating_whitelist))
+ for(var/mtype in eating.matter)
+ if(can_process_material_name(mtype))
return TRUE
return FALSE
-/obj/machinery/atmospherics/unary/material/extractor/proc/can_process_material_name(var/name)
- var/decl/material/M = GET_DECL(name)
- ASSERT(istype(M))
- return (is_material_extractable(M) || has_extractable_heating_products(M))
+/obj/machinery/material_processing/extractor/proc/can_process_material_name(mtype)
+ var/decl/material/mat = GET_DECL(mtype)
+ ASSERT(istype(mat))
+ return (is_material_extractable(mat) || has_extractable_heating_products(mat))
-/obj/machinery/atmospherics/unary/material/extractor/proc/has_extractable_heating_products(var/decl/material/M)
- for(var/k in M.heating_products)
- var/decl/material/P = GET_DECL(k)
- ASSERT(istype(P))
- if(is_material_extractable(P))
+/obj/machinery/material_processing/extractor/proc/has_extractable_heating_products(decl/material/M)
+ for(var/mtype in M.heating_products)
+ var/decl/material/mat = GET_DECL(mtype)
+ ASSERT(istype(mat))
+ if(is_material_extractable(mat))
return TRUE
return FALSE
-/obj/machinery/atmospherics/unary/material/extractor/proc/is_material_extractable(var/decl/material/M)
+/obj/machinery/material_processing/extractor/proc/is_material_extractable(decl/material/M)
//If is gas or liquid at operating temp we can process
var/phase = M.phase_at_temperature(temperature)
return phase == MAT_PHASE_LIQUID || phase == MAT_PHASE_GAS
-//Add ore to contents for processing
-/obj/machinery/atmospherics/unary/material/extractor/proc/process_ore(var/obj/O)
- var/list/extracted = gather_resulting_reagents_vol(O)
+/obj/machinery/material_processing/extractor/ProcessAtomTemperature()
+ if(use_power && operable())
+ temperature = GAS_EXTRACTOR_OPERATING_TEMP
+ return TRUE
+ . = ..()
- for(var/k in extracted)
- input_buffer.reagents.add_reagent(k, extracted[k]) //Put everything we can in the input for further processing
+/obj/machinery/material_processing/extractor/power_change()
+ . = ..()
+ if(.)
+ queue_temperature_atoms(src)
- //Spit out the stripped ore with whatever we can't process, or otherwise just delete it
- if(length(O.matter))
- O.dropInto(get_output_loc())
- else
- qdel(O)
-
-//Force the content of the input reagents_holder to react in one tick, so we can have some control on when the reaction happens
-/obj/machinery/atmospherics/unary/material/extractor/proc/force_react_input()
- input_buffer.atom_flags &= ~(ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT)
- . = input_buffer.reagents.process_reactions()
- input_buffer.atom_flags |= ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT
-
-//Filters all the reagents in the input tank, and send them to the proper output
-/obj/machinery/atmospherics/unary/material/extractor/proc/process_input_tank()
- for(var/mat in input_buffer.reagents?.reagent_volumes)
- var/decl/material/M = GET_DECL(mat)
- var/available_volume = round(REAGENT_VOLUME(input_buffer.reagents, M.type), GAS_EXTRACTOR_MIN_REAGENT_AMOUNT)
-
- //Don't bother if we got a really small quatity, and just get rid of it
- if(available_volume < GAS_EXTRACTOR_MIN_REAGENT_AMOUNT)
- input_buffer.reagents.clear_reagent(M.type)
- continue
-
- switch(M.phase_at_temperature(temperature))
- if(MAT_PHASE_SOLID)
- dump_solid(M, available_volume) //If for silly reasons anything turns solid while reacting in the input, dump that here
- if(MAT_PHASE_LIQUID)
- dump_liquid(M, available_volume)
- if(MAT_PHASE_GAS)
- dump_gas(M, available_volume)
- if(MAT_PHASE_PLASMA)
- dump_gas(M, available_volume)
-
-//Called each ticks, tries to fill the output with the content of the liquid tank
-/obj/machinery/atmospherics/unary/material/extractor/proc/move_liquids_to_output()
- if(!output_container)
- return
- var/transferred = max(min(output_container_free_volume(), reagents.total_volume), 0)
- if(transferred > 0)
- reagents.trans_to(output_container, transferred)
-
-//Used in case some reaction happens in the tank and result in a solid, so it doesn't clog it up
-/obj/machinery/atmospherics/unary/material/extractor/proc/dump_solid(var/decl/material/M, var/available_volume)
- //Check if we got enough to dump out a single sheet at least
- if(available_volume < REAGENT_UNITS_PER_MATERIAL_SHEET)
- return
- var/expected_sheets = round(available_volume / REAGENT_UNITS_PER_MATERIAL_SHEET)
- var/removed_volume = round(expected_sheets * REAGENT_UNITS_PER_MATERIAL_SHEET, GAS_EXTRACTOR_MIN_REAGENT_AMOUNT)
- M.create_object(get_output_loc(), expected_sheets)
- input_buffer.reagents.remove_reagent(M.type, removed_volume)
-
-/obj/machinery/atmospherics/unary/material/extractor/proc/dump_liquid(var/decl/material/M, var/available_volume)
- var/internal_free_vol = internal_tank_free_volume()
- var/external_free_vol = output_container_free_volume()
-
- //Might as well dump directly into the output if there's one, it'll save some extra unneeded processing
- if(external_free_vol > 0)
- var/transferred = max(min(available_volume, external_free_vol), 0)
- if(transferred > 0)
- input_buffer.reagents.trans_to(output_container, transferred, GAS_EXTRACTOR_LIQUID_EFFICIENCY)
- //log_debug("dump_liquid : dumping [round(transferred * GAS_EXTRACTOR_LIQUID_EFFICIENCY)] units of [M.type] to container with [external_free_vol] units of free space")
- else if(internal_free_vol > 0)
- var/transferred = max(min(available_volume, internal_free_vol), 0)
- if(transferred > 0)
- input_buffer.reagents.trans_to_holder(reagents, transferred, GAS_EXTRACTOR_LIQUID_EFFICIENCY)
- //log_debug("dump_liquid : dumping [round(transferred * GAS_EXTRACTOR_LIQUID_EFFICIENCY)] units of [M.type] to internal tank with [internal_free_vol] units of free space")
-
-
-//We want to convert a liquid to its gaseous state
-//So we want to convert liquid units to moles.
-// We need:
-// the volume of liquid
-// the density of the liquid
-// the molar mass of the liquid
-//Since we have none of those currently in the material datums, just assume everything is water
-// Density: 997.07 g/L
-// Molar Mass: 18.02 g/mol
-//We'll assume a unit of reagent is 1 mL, so we'll divide the density by 1,000. We get 0.99707
-// 0.99707 / 18.02 => 0.553 mol/ml
-#define MOLES_PER_MILILITER_FACTOR 0.553 //placeholder until we can do this properly via phase transitions
-/obj/machinery/atmospherics/unary/material/extractor/proc/dump_gas(var/decl/material/M, var/available_volume)
- var/datum/gas_mixture/produced = new
- var/moles = round(available_volume * MOLES_PER_MILILITER_FACTOR, GAS_EXTRACTOR_MIN_REAGENT_AMOUNT)
- input_buffer.reagents.remove_reagent(M.type, available_volume)
- produced.adjust_gas(M.type, moles)
- air_contents.merge(produced)
-#undef MOLES_PER_MILILITER_FACTOR
-
-
-////////////////////////////////////////////////////
-// Verbs
-////////////////////////////////////////////////////
-/obj/machinery/atmospherics/unary/material/extractor/verb/FlushReagents()
- set name = "Flush Reagents Tank"
- set desc = "Empty the content of the internal reagent tank of the machine on the floor."
- set category = "Object"
- set src in oview(1)
- usr.visible_message(SPAN_NOTICE("[usr] empties the liquid tank of \the [src] onto \the [src.loc]!"), SPAN_NOTICE("You empty the liquid tank of the [src] onto \the [src.loc]!"))
- src.reagents.trans_to(src.loc, reagents.total_volume)
-
-/obj/machinery/atmospherics/unary/material/extractor/verb/FlushGas()
- set name = "Flush Gas Tank"
- set desc = "Empty the content of the internal gas tank of the machine into the air."
- set category = "Object"
- set src in oview(1)
- usr.visible_message(SPAN_NOTICE("[usr] empties the gas tank of \the [src] into the air!"), SPAN_NOTICE("You empty the gas tank of the [src] into the air!"))
- var/datum/gas_mixture/environment = src.loc.return_air()
- environment.merge(src.air_contents)
- //Reset air content
- src.air_contents = new/datum/gas_mixture(GAS_EXTRACTOR_GAS_TANK, temperature)
-
-////////////////////////////////////////////////////
-// Public Vars
-////////////////////////////////////////////////////
-/decl/public_access/public_variable/material_extractor/has_bucket
- expected_type = /obj/machinery/atmospherics/unary/material
- name = "has bucket"
- desc = "Whether or not the extractor has a bucket collecting reagents."
- can_write = FALSE
- has_updates = FALSE
- var_type = IC_FORMAT_BOOLEAN
-
-/decl/public_access/public_variable/material_extractor/has_bucket/access_var(obj/machinery/atmospherics/unary/material/extractor/M)
- return M.output_container != null
-
-////////////////////////////////////////////////////
-// Public Methods
-////////////////////////////////////////////////////
-/decl/public_access/public_method/material_extractor/flush_gas
- name = "flush gas"
- desc = "Empty the internal gas tank into the atmosphere."
- call_proc = /obj/machinery/atmospherics/unary/material/extractor/verb/FlushGas
-
-/decl/public_access/public_method/material_extractor/flush_reagents
- name = "flush reagents"
- desc = "Empty the internal reagents tank on the floor."
- call_proc = /obj/machinery/atmospherics/unary/material/extractor/verb/FlushReagents
-
-#undef GAS_EXTRACTOR_GAS_TANK
-#undef GAS_EXTRACTOR_REAGENTS_TANK
-#undef GAS_EXTRACTOR_REAGENTS_INPUT_TANK
+#undef MAX_INTAKE_ORE_PER_TICK
#undef GAS_EXTRACTOR_OPERATING_TEMP
-#undef GAS_EXTRACTOR_LIQUID_EFFICIENCY
-#undef GAS_EXTRACTOR_MIN_REAGENT_AMOUNT
diff --git a/code/modules/mining/machinery/material_smelter.dm b/code/modules/mining/machinery/material_smelter.dm
index 4ea97b3085a..a696a6a28cc 100644
--- a/code/modules/mining/machinery/material_smelter.dm
+++ b/code/modules/mining/machinery/material_smelter.dm
@@ -26,7 +26,7 @@
// Outgas anything that is in gas form. Check what you put into the smeltery, nerds.
/obj/machinery/material_processing/smeltery/on_reagent_change()
- . = ..()
+ ..()
if(!reagents)
return
@@ -115,7 +115,7 @@
if(samt > 0)
SSmaterials.create_object(mtype, output_turf, samt)
reagents.remove_reagent(mtype, ramt)
-
+
/obj/machinery/material_processing/smeltery/Topic(var/user, var/list/href_list)
. = ..()
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 219a8e1908e..cc48152e7c8 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -36,7 +36,7 @@
throwforce = 4
w_class = ITEM_SIZE_HUGE
material = /decl/material/solid/metal/steel
- origin_tech = "{'materials':1,'engineering':1}"
+ origin_tech = @'{"materials":1,"engineering":1}'
attack_verb = list("hit", "pierced", "sliced", "attacked")
sharp = 0
@@ -55,7 +55,16 @@
I.appearance_flags |= RESET_COLOR
add_overlay(I)
-/obj/item/pickaxe/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+/obj/item/pickaxe/Initialize()
+ var/list/tool_qualities = get_initial_tool_qualities()
+ if(length(tool_qualities))
+ set_extension(src, /datum/extension/tool, tool_qualities)
+ . = ..()
+
+/obj/item/pickaxe/proc/get_initial_tool_qualities()
+ return list(TOOL_SHOVEL = TOOL_QUALITY_MEDIOCRE)
+
+/obj/item/pickaxe/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay && build_from_parts && check_state_in_icon("[overlay.icon_state]-handle", overlay.icon))
var/image/handle = image(overlay.icon, "[overlay.icon_state]-handle")
handle.appearance_flags |= RESET_COLOR
@@ -71,29 +80,36 @@
name = "advanced mining drill" // Can dig sand as well!
icon = 'icons/obj/items/tool/drills/drill_hand.dmi'
digspeed = 30
- origin_tech = "{'materials':2,'powerstorage':3,'engineering':2}"
+ origin_tech = @'{"materials":2,"powerstorage":3,"engineering":2}'
desc = "Yours is the drill that will pierce through the rock walls."
drill_verb = "drilling"
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
-/obj/item/pickaxe/drill/Initialize(ml, material_key)
- . = ..()
- set_extension(src, /datum/extension/tool, list(TOOL_DRILL = TOOL_QUALITY_MEDIOCRE))
+/obj/item/pickaxe/drill/get_initial_tool_qualities()
+ return list(
+ TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE,
+ TOOL_SHOVEL = TOOL_QUALITY_DEFAULT
+ )
/obj/item/pickaxe/jackhammer
name = "sonic jackhammer"
icon = 'icons/obj/items/tool/drills/jackhammer.dmi'
digspeed = 20 //faster than drill, but cannot dig
- origin_tech = "{'materials':3,'powerstorage':2,'engineering':2}"
+ origin_tech = @'{"materials":3,"powerstorage":2,"engineering":2}'
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
drill_verb = "hammering"
+/obj/item/pickaxe/jackhammer/get_initial_tool_qualities()
+ return list(
+ TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE,
+ TOOL_SHOVEL = TOOL_QUALITY_DECENT
+ )
/obj/item/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
name = "diamond mining drill"
icon = 'icons/obj/items/tool/drills/drill_diamond.dmi'
digspeed = 5 //Digs through walls, girders, and can dig up sand
- origin_tech = "{'materials':6,'powerstorage':4,'engineering':5}"
+ origin_tech = @'{"materials":6,"powerstorage":4,"engineering":5}'
desc = "Yours is the drill that will pierce the heavens!"
drill_verb = "drilling"
material = /decl/material/solid/metal/steel
@@ -102,6 +118,12 @@
/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE
)
+/obj/item/pickaxe/diamonddrill/get_initial_tool_qualities()
+ return list(
+ TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE,
+ TOOL_SHOVEL = TOOL_QUALITY_GOOD
+ )
+
/obj/item/pickaxe/borgdrill
name = "cyborg mining drill"
icon = 'icons/obj/items/tool/drills/drill_diamond.dmi'
@@ -109,6 +131,12 @@
desc = ""
drill_verb = "drilling"
+/obj/item/pickaxe/borgdrill/get_initial_tool_qualities()
+ return list(
+ TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE,
+ TOOL_SHOVEL = TOOL_QUALITY_GOOD
+ )
+
//****************************actual pickaxes***********************
/obj/item/pickaxe/silver
name = "silver pickaxe"
@@ -116,37 +144,46 @@
icon_state = "preview"
icon = 'icons/obj/items/tool/drills/pickaxe.dmi'
digspeed = 30
- origin_tech = "{'materials':3}"
+ origin_tech = @'{"materials":3}'
drill_verb = "picking"
sharp = 1
build_from_parts = TRUE
hardware_color = COLOR_SILVER
+/obj/item/pickaxe/silver/get_initial_tool_qualities()
+ return list(TOOL_SHOVEL = TOOL_QUALITY_DEFAULT)
+
/obj/item/pickaxe/gold
name = "golden pickaxe"
desc = "This makes no metallurgic sense."
icon_state = "preview"
icon = 'icons/obj/items/tool/drills/pickaxe.dmi'
digspeed = 20
- origin_tech = "{'materials':4}"
+ origin_tech = @'{"materials":4}'
drill_verb = "picking"
sharp = 1
build_from_parts = TRUE
hardware_color = COLOR_GOLD
+/obj/item/pickaxe/gold/get_initial_tool_qualities()
+ return list(TOOL_SHOVEL = TOOL_QUALITY_DECENT)
+
/obj/item/pickaxe/diamond
name = "diamond pickaxe"
desc = "A pickaxe with a diamond pick head."
icon_state = "preview"
icon = 'icons/obj/items/tool/drills/pickaxe.dmi'
digspeed = 10
- origin_tech = "{'materials':6,'engineering':4}"
+ origin_tech = @'{"materials":6,"engineering":4}'
drill_verb = "picking"
sharp = 1
build_from_parts = TRUE
hardware_color = COLOR_DIAMOND
material = /decl/material/solid/gemstone/diamond
+/obj/item/pickaxe/diamond/get_initial_tool_qualities()
+ return list(TOOL_SHOVEL = TOOL_QUALITY_GOOD)
+
/*****************************Shovel********************************/
/obj/item/shovel
@@ -158,7 +195,7 @@
force = 8.0
throwforce = 4
w_class = ITEM_SIZE_HUGE
- origin_tech = "{'materials':1,'engineering':1}"
+ origin_tech = @'{"materials":1,"engineering":1}'
material = /decl/material/solid/metal/steel
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
edge = 1
@@ -225,7 +262,7 @@
/obj/item/stack/flag/attack_self(var/mob/user)
var/turf/T = get_turf(src)
- if(!istype(T) || !T.is_open())
+ if(!istype(T) || T.is_open())
to_chat(user, "There's no solid surface to plant \the [singular_name] on.")
return
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 2459a3f49f3..672a492c738 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -41,51 +41,22 @@
LAZYREMOVE(level.mining_turfs, src)
return ..()
-/turf/simulated/floor/asteroid/explosion_act(severity)
- SHOULD_CALL_PARENT(FALSE)
- if(severity == 1 || (severity == 2 && prob(70)))
- gets_dug()
+/turf/simulated/floor/asteroid/can_be_dug()
+ return !density
/turf/simulated/floor/asteroid/is_plating()
return !density
+/turf/simulated/floor/asteroid/on_update_icon()
+ ..()
+ if(dug)
+ icon_state = "asteroid_dug"
+
//#TODO: This should probably be generalised?
/turf/simulated/floor/asteroid/attackby(obj/item/W, mob/user)
if(!W || !user)
- return 0
-
- var/list/usable_tools = list(
- /obj/item/shovel,
- /obj/item/pickaxe/diamonddrill,
- /obj/item/pickaxe/drill,
- /obj/item/pickaxe/borgdrill
- )
-
- var/valid_tool
- for(var/valid_type in usable_tools)
- if(istype(W,valid_type))
- valid_tool = 1
- break
-
- if(valid_tool)
- if (dug)
- to_chat(user, "This area has already been dug")
- return TRUE
-
- var/turf/T = user.loc
- if (!(istype(T)))
- return
-
- to_chat(user, "You start digging.")
- playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1)
- . = TRUE
-
- if(!do_after(user,40, src)) return
-
- to_chat(user, "You dug a hole.")
- gets_dug()
-
- else if(istype(W,/obj/item/storage/ore)) //#FIXME: Its kinda silly to put this in a specific turf's subtype's attackby.
+ return FALSE
+ if(istype(W,/obj/item/storage/ore)) //#FIXME: Its kinda silly to put this in a specific turf's subtype's attackby.
var/obj/item/storage/ore/S = W
if(S.collection_mode)
for(var/obj/item/stack/material/ore/O in contents)
@@ -95,17 +66,14 @@
if(S.collection_mode)
for(var/obj/item/fossil/F in contents)
return F.attackby(W,user)
+ return ..(W,user)
- else
- return ..(W,user)
-
-//#TODO: This should probably be generalised?
-/turf/simulated/floor/asteroid/proc/gets_dug()
- if(dug)
- return
- LAZYADD(., new /obj/item/stack/material/ore/glass(src, (rand(3) + 2)))
+/turf/simulated/floor/asteroid/clear_diggable_resources()
dug = TRUE
- icon_state = "asteroid_dug"
+ ..()
+
+/turf/simulated/floor/asteroid/get_diggable_resources()
+ return dug ? null : list(/obj/item/stack/material/ore/sand = list(3, 2))
//#TODO: This should probably be generalised?
/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors)
diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm
index 38b8b75ab3d..7bb8b5da341 100644
--- a/code/modules/mining/ore_box.dm
+++ b/code/modules/mining/ore_box.dm
@@ -7,7 +7,7 @@
icon = 'icons/obj/mining.dmi'
icon_state = "orebox0"
density = TRUE
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
atom_flags = ATOM_FLAG_CLIMBABLE
tool_interaction_flags = (TOOL_INTERACTION_ANCHOR | TOOL_INTERACTION_DECONSTRUCT)
///Maximum amount of ores of all types that can be stored in the box.
diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm
index 179cc5d85e2..9a17fd29c3e 100644
--- a/code/modules/mob/animations.dm
+++ b/code/modules/mob/animations.dm
@@ -106,7 +106,7 @@
for(var/client/C in viewing)
C.images += I
- addtimer(CALLBACK(src, .proc/clear_shown_overlays, viewing, I), 5)
+ addtimer(CALLBACK(src, PROC_REF(clear_shown_overlays), viewing, I), 5)
// Scale the icon.
I.transform *= 0.75
@@ -159,3 +159,25 @@
return
playsound(T, "sparks", 50, 1)
anim(src,'icons/mob/mob.dmi',,"phaseout",,dir)
+
+// Similar to attack animations, but in reverse and is longer to act as a telegraph.
+/atom/movable/proc/do_windup_animation(atom/A, windup_time, no_reset)
+
+ var/pixel_x_diff = 0
+ var/pixel_y_diff = 0
+
+ var/direction = get_dir(src, A)
+ if(direction & NORTH)
+ pixel_y_diff = -8
+ else if(direction & SOUTH)
+ pixel_y_diff = 8
+ if(direction & EAST)
+ pixel_x_diff = -8
+ else if(direction & WEST)
+ pixel_x_diff = 8
+
+ if(no_reset)
+ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = windup_time)
+ else
+ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = windup_time-2)
+ animate(pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2)
diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm
index b8b8b22e07b..a8945326700 100644
--- a/code/modules/mob/death.dm
+++ b/code/modules/mob/death.dm
@@ -1,11 +1,13 @@
//This is the proc for gibbing a mob. Cannot gib ghosts.
//added different sort of gibs and animations. N
/mob/proc/gib(anim="gibbed-m",do_gibs)
+
set waitfor = FALSE
+
death(1)
ADD_TRANSFORMATION_MOVEMENT_HANDLER(src)
icon = null
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
UpdateLyingBuckledAndVerbStatus()
remove_from_dead_mob_list()
dump_contents()
@@ -24,13 +26,13 @@
//This is the proc for turning a mob into ash. Mostly a copy of gib code (above).
//Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here.
-//Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N
+//Dusting robots does not eject the brain, so it's a bit more powerful than gib() /N
/mob/proc/dust(anim="dust-m",remains=/obj/effect/decal/cleanable/ash)
death(1)
var/atom/movable/overlay/animation = null
ADD_TRANSFORMATION_MOVEMENT_HANDLER(src)
icon = null
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
animation = new(loc)
animation.icon_state = "blank"
@@ -70,11 +72,6 @@
drop_held_items()
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- if(hattable?.hat)
- hattable.hat.dropInto(get_turf(src))
- hattable.hat = null
-
SSstatistics.report_death(src)
//TODO: Change death state to health_dead for all these icon files. This is a stop gap.
diff --git a/code/modules/mob/examine.dm b/code/modules/mob/examine.dm
index 2e87af745fb..1026da99b4d 100644
--- a/code/modules/mob/examine.dm
+++ b/code/modules/mob/examine.dm
@@ -59,10 +59,11 @@
show_other_examine_strings(user, distance, infix, suffix, hideflags, pronouns)
to_chat(user, "")
+/mob/living/examine(mob/user, distance, infix, suffix)
+ . = ..()
// Update our target dolly.
if(user.zone_sel)
- var/decl/bodytype/target_bodytype = get_bodytype()
- if(target_bodytype && (BP_TAIL in target_bodytype.has_limbs))
+ if(should_have_limb(BP_TAIL))
user.zone_sel.icon_state = "zone_sel_tail"
else
user.zone_sel.icon_state = "zone_sel"
diff --git a/code/modules/mob/floating_message.dm b/code/modules/mob/floating_message.dm
index 08b66bd25c6..a6cc4a3bb3f 100644
--- a/code/modules/mob/floating_message.dm
+++ b/code/modules/mob/floating_message.dm
@@ -64,7 +64,8 @@ var/global/list/floating_chat_colors = list()
I.maptext_width = CHAT_MESSAGE_WIDTH
I.maptext_height = CHAT_MESSAGE_HEIGHT
I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
- I.pixel_w = -round(I.maptext_width/2) + 16
+ I.pixel_w = -round(I.maptext_width/2) + 16 + holder.get_overhead_text_x_offset()
+ I.pixel_z = holder.get_overhead_text_y_offset()
style = "font-family: 'Small Fonts'; -dm-text-outline: 1px black; font-size: [size]px; line-height: 1.1; [style]"
I.maptext = "[message]"
@@ -77,8 +78,8 @@ var/global/list/floating_chat_colors = list()
LAZYADD(holder.stored_chat_text, I)
- addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_floating_text, holder, I), duration)
- addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_images_from_clients, I, show_to), duration + CHAT_MESSAGE_EOL_FADE)
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_floating_text), holder, I), duration)
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_images_from_clients), I, show_to), duration + CHAT_MESSAGE_EOL_FADE)
return I
diff --git a/code/modules/mob/grab/grab_object.dm b/code/modules/mob/grab/grab_object.dm
index 4f8977cca2b..db84ea2d0e0 100644
--- a/code/modules/mob/grab/grab_object.dm
+++ b/code/modules/mob/grab/grab_object.dm
@@ -49,19 +49,19 @@
LAZYADD(affecting.grabbed_by, src) // This is how we handle affecting being deleted.
adjust_position()
action_used()
- INVOKE_ASYNC(assailant, /atom/movable/proc/do_attack_animation, affecting)
+ INVOKE_ASYNC(assailant, TYPE_PROC_REF(/atom/movable, do_attack_animation), affecting)
playsound(affecting.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
update_icon()
- events_repository.register(/decl/observ/moved, affecting, src, .proc/on_affecting_move)
+ events_repository.register(/decl/observ/moved, affecting, src, PROC_REF(on_affecting_move))
if(assailant.zone_sel)
- events_repository.register(/decl/observ/zone_selected, assailant.zone_sel, src, .proc/on_target_change)
+ events_repository.register(/decl/observ/zone_selected, assailant.zone_sel, src, PROC_REF(on_target_change))
var/obj/item/organ/O = get_targeted_organ()
var/decl/pronouns/G = assailant.get_pronouns()
if(affecting_mob && O) // may have grabbed a buckled mob, so may be grabbing their holder
SetName("[name] (\the [affecting_mob]'s [O.name])")
- events_repository.register(/decl/observ/dismembered, affecting_mob, src, .proc/on_organ_loss)
+ events_repository.register(/decl/observ/dismembered, affecting_mob, src, PROC_REF(on_organ_loss))
if(affecting_mob != assailant)
visible_message(SPAN_DANGER("\The [assailant] has grabbed [affecting_mob]'s [O.name]!"))
else
diff --git a/code/modules/mob/grab/normal/norm_struggle.dm b/code/modules/mob/grab/normal/norm_struggle.dm
index 557e09de7b5..4c83b6c2cba 100644
--- a/code/modules/mob/grab/normal/norm_struggle.dm
+++ b/code/modules/mob/grab/normal/norm_struggle.dm
@@ -43,7 +43,7 @@
else
affecting.visible_message("[affecting] struggles against [assailant]!")
G.done_struggle = FALSE
- addtimer(CALLBACK(G, .proc/handle_resist), 1 SECOND)
+ addtimer(CALLBACK(G, PROC_REF(handle_resist)), 1 SECOND)
resolve_struggle(G)
/decl/grab/normal/struggle/proc/resolve_struggle(var/obj/item/grab/G)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index ee6d5d29c8a..5cd9975038d 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -27,7 +27,7 @@
to_chat(src, SPAN_WARNING("You are unable to equip that."))
/mob/proc/can_equip_anything_to_slot(var/slot)
- return (slot in get_all_valid_equipment_slots())
+ return (slot in get_all_available_equipment_slots())
//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task.
//In most cases you will want to use equip_to_slot_if_possible()
@@ -78,7 +78,7 @@
/mob/proc/equip_to_appropriate_slot(obj/item/W, var/skip_store = 0)
if(!istype(W))
return FALSE
- for(var/slot in global.slot_equipment_priority)
+ for(var/slot in get_inventory_slot_priorities())
if(skip_store)
if(slot == slot_s_store_str || slot == slot_l_store_str || slot == slot_r_store_str)
continue
@@ -193,9 +193,6 @@
qdel(grab)
. = TRUE
return
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- if(hattable?.drop_hat(src))
- return TRUE
. = drop_from_inventory(get_active_hand(), Target)
/*
@@ -289,12 +286,12 @@
/mob/proc/get_equipped_items(var/include_carried = 0)
SHOULD_CALL_PARENT(TRUE)
- for(var/slot in list(slot_back_str, slot_wear_mask_str))
+ var/held_item_slots = get_held_item_slots()
+ for(var/slot in get_inventory_slots())
var/obj/item/thing = get_equipped_item(slot)
if(istype(thing))
- LAZYADD(., thing)
- if(include_carried)
- for(var/obj/item/thing in get_held_items())
+ if(!include_carried && (slot in held_item_slots))
+ continue
LAZYADD(., thing)
/mob/proc/delete_inventory(var/include_carried = FALSE)
@@ -308,49 +305,7 @@
var/datum/inventory_slot/inv_slot = get_inventory_slot_datum(slot)
if(inv_slot)
return !!inv_slot.check_has_required_organ(src)
-
-// Legacy code after this point.
- switch(slot)
- if(slot_back_str)
- return has_organ(BP_CHEST)
- if(slot_wear_mask_str)
- return has_organ(BP_HEAD)
- if(slot_handcuffed_str)
- return has_organ(BP_L_HAND) && has_organ(BP_R_HAND)
- if(slot_belt_str)
- return has_organ(BP_CHEST)
- if(slot_wear_id_str)
- // the only relevant check for this is the uniform check
- return TRUE
- if(slot_l_ear_str)
- return has_organ(BP_HEAD)
- if(slot_r_ear_str)
- return has_organ(BP_HEAD)
- if(slot_glasses_str)
- return has_organ(BP_HEAD)
- if(slot_gloves_str)
- return has_organ(BP_L_HAND) || has_organ(BP_R_HAND)
- if(slot_head_str)
- return has_organ(BP_HEAD)
- if(slot_shoes_str)
- return has_organ(BP_L_FOOT) || has_organ(BP_R_FOOT)
- if(slot_wear_suit_str)
- return has_organ(BP_CHEST)
- if(slot_w_uniform_str)
- return has_organ(BP_CHEST)
- if(slot_l_store_str)
- return has_organ(BP_CHEST)
- if(slot_r_store_str)
- return has_organ(BP_CHEST)
- if(slot_s_store_str)
- return has_organ(BP_CHEST)
- if(slot_in_backpack_str)
- return TRUE
- if(slot_tie_str)
- return TRUE
- else
- return has_organ(slot)
-// End legacy code.
+ return has_organ(slot)
// Returns all currently covered body parts
/mob/proc/get_covered_body_parts()
@@ -370,8 +325,7 @@
// Returns all items which covers any given body part
/mob/proc/get_covering_equipped_items(var/body_parts)
. = list()
- for(var/entry in get_equipped_items())
- var/obj/item/I = entry
+ for(var/obj/item/I as anything in get_equipped_items())
if(I.body_parts_covered & body_parts)
. += I
@@ -386,7 +340,12 @@
/// If this proc returns false, reconsider_client_screen_presence will set the item's screen_loc to null.
/mob/proc/item_should_have_screen_presence(obj/item/item, slot)
- return hud_used && slot && (hud_used.inventory_shown || !(slot in global.hidden_inventory_slots))
+ if(!slot || !hud_used)
+ return FALSE
+ if(hud_used.inventory_shown)
+ return TRUE
+ var/datum/inventory_slot/inv_slot = get_inventory_slot_datum(slot)
+ return !(inv_slot?.can_be_hidden)
/mob/proc/get_held_item_slots()
return
@@ -403,6 +362,9 @@
/mob/proc/get_inventory_slots()
return
+/mob/proc/get_inventory_slot_priorities()
+ return
+
/mob/proc/set_inventory_slots(var/list/new_slots)
return
@@ -412,7 +374,7 @@
/mob/proc/remove_inventory_slot(var/slot)
return
-/mob/proc/get_all_valid_equipment_slots()
+/mob/proc/get_all_available_equipment_slots()
for(var/slot in get_held_item_slots())
LAZYDISTINCTADD(., slot)
for(var/slot in get_inventory_slots())
diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm
index 3a8ca588f2f..4f7229bff8e 100644
--- a/code/modules/mob/living/bot/bot.dm
+++ b/code/modules/mob/living/bot/bot.dm
@@ -1,7 +1,6 @@
/mob/living/bot
name = "Bot"
- health = 20
- maxHealth = 20
+ mob_default_max_health = 20
icon = 'icons/mob/bot/placeholder.dmi'
universal_speak = TRUE
density = FALSE
@@ -55,33 +54,25 @@
access_scanner = new /obj(src)
access_scanner.req_access = req_access?.Copy()
-/mob/living/bot/Initialize()
- . = ..()
if(on)
turn_on() // Update lights and other stuff
else
turn_off()
-/mob/living/bot/Life()
- ..()
- if(health <= 0)
- death()
- return
- set_status(STAT_WEAK, 0)
- set_status(STAT_STUN, 0)
- set_status(STAT_PARA, 0)
+/mob/living/bot/handle_regular_status_updates()
+ . = ..()
+ if(.)
+ set_status(STAT_WEAK, 0)
+ set_status(STAT_STUN, 0)
+ set_status(STAT_PARA, 0)
- if(on && !client && !busy)
- handleAI()
-
-/mob/living/bot/updatehealth()
- if(status_flags & GODMODE)
- health = maxHealth
- set_stat(CONSCIOUS)
- else
- health = maxHealth - getFireLoss() - getBruteLoss()
+/mob/living/bot/get_total_life_damage()
+ return getFireLoss() + getBruteLoss()
/mob/living/bot/death()
+ if(stat == DEAD)
+ return
+ set_stat(DEAD)
explode()
/mob/living/bot/attackby(var/obj/item/O, var/mob/user)
@@ -104,9 +95,9 @@
to_chat(user, "You need to unlock the controls first.")
return
else if(IS_WELDER(O))
- if(health < maxHealth)
+ if(current_health < get_max_health())
if(open)
- health = min(maxHealth, health + 10)
+ heal_overall_damage(10)
user.visible_message("\The [user] repairs \the [src].","You repair \the [src].")
else
to_chat(user, "Unable to repair with the maintenance panel closed.")
@@ -209,7 +200,12 @@
/mob/living/bot/emag_act(var/remaining_charges, var/mob/user)
return 0
-/mob/living/bot/proc/handleAI()
+/mob/living/bot/handle_legacy_ai()
+ . = ..()
+ if(on && !busy)
+ handle_async_ai()
+
+/mob/living/bot/proc/handle_async_ai()
set waitfor = FALSE
if(ignore_list.len)
for(var/atom/A in ignore_list)
@@ -288,7 +284,7 @@
/mob/living/bot/proc/startPatrol()
var/turf/T = getPatrolTurf()
if(T)
- patrol_path = AStar(get_turf(loc), T, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_patrol_dist, id = botcard, exclude = obstacle)
+ patrol_path = AStar(get_turf(loc), T, TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, max_patrol_dist, id = botcard, exclude = obstacle)
if(!patrol_path)
patrol_path = list()
obstacle = null
@@ -320,7 +316,7 @@
return
/mob/living/bot/proc/calcTargetPath()
- target_path = AStar(get_turf(loc), get_turf(target), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard, exclude = obstacle)
+ target_path = AStar(get_turf(loc), get_turf(target), TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, max_target_dist, id = botcard, exclude = obstacle)
if(!target_path)
if(target && target.loc)
ignore_list |= target
@@ -430,7 +426,7 @@
else return !D.check_access(ID) // it's a real, air blocking door
return 0
-/mob/living/bot/GetIdCards()
+/mob/living/bot/GetIdCards(list/exceptions)
. = ..()
- if(istype(botcard))
+ if(istype(botcard) && !is_type_in_list(botcard, exceptions))
LAZYDISTINCTADD(., botcard)
diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm
index 75c8b970996..475ec4566fb 100644
--- a/code/modules/mob/living/bot/cleanbot.dm
+++ b/code/modules/mob/living/bot/cleanbot.dm
@@ -55,14 +55,16 @@
UnarmedAttack(target)
/mob/living/bot/cleanbot/UnarmedAttack(var/obj/effect/decal/cleanable/D, var/proximity)
- if(!..())
+
+ . = ..()
+ if(.)
return
if(!istype(D))
- return
+ return TRUE
if(D.loc != loc)
- return
+ return FALSE
busy = 1
visible_message("\The [src] begins to clean up \the [D].")
@@ -80,6 +82,7 @@
playsound(src, 'sound/machines/boop2.ogg', 30)
busy = 0
update_icon()
+ return TRUE
/mob/living/bot/cleanbot/explode()
on = 0
diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm
index 178b5cd51ac..2069e6a546a 100644
--- a/code/modules/mob/living/bot/ed209bot.dm
+++ b/code/modules/mob/living/bot/ed209bot.dm
@@ -6,8 +6,7 @@
attack_state = "ed209-c"
layer = MOB_LAYER
density = TRUE
- health = 100
- maxHealth = 100
+ mob_default_max_health = 100
preparing_arrest_sounds = new()
@@ -28,7 +27,8 @@
var/turf/Tsec = get_turf(src)
var/obj/item/gun/energy/taser/G = new /obj/item/gun/energy/taser(Tsec)
- G.power_supply.charge = 0
+ var/obj/item/cell/power_supply = G.get_cell()
+ power_supply?.charge = 0
if(prob(50))
new /obj/item/robot_parts/l_leg(Tsec)
if(prob(50))
diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm
index 6dea16be17b..4f4052a3394 100644
--- a/code/modules/mob/living/bot/farmbot.dm
+++ b/code/modules/mob/living/bot/farmbot.dm
@@ -8,8 +8,7 @@
desc = "The botanist's best friend."
icon = 'icons/mob/bot/farmbot.dmi'
icon_state = "farmbot0"
- health = 50
- maxHealth = 50
+ mob_default_max_health = 50
req_access = list(list(access_hydroponics, access_robotics))
var/action = "" // Used to update icon
@@ -126,7 +125,7 @@
/mob/living/bot/farmbot/calcTargetPath() // We need to land NEXT to the tray, because the tray itself is impassable
for(var/trayDir in list(NORTH, SOUTH, EAST, WEST))
- target_path = AStar(get_turf(loc), get_step(get_turf(target), trayDir), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard)
+ target_path = AStar(get_turf(loc), get_step(get_turf(target), trayDir), TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, max_target_dist, id = botcard)
if(target_path)
break
if(!target_path)
@@ -143,17 +142,19 @@
return
/mob/living/bot/farmbot/UnarmedAttack(var/atom/A, var/proximity)
- if(!..())
+ . = ..()
+ if(.)
return
+
if(busy)
- return
+ return TRUE
if(istype(A, /obj/machinery/portable_atmospherics/hydroponics))
var/obj/machinery/portable_atmospherics/hydroponics/T = A
var/t = confirmTarget(T)
switch(t)
if(0)
- return
+ return TRUE
if(FARMBOT_COLLECT)
action = "water" // Needs a better one
update_icon()
@@ -193,7 +194,7 @@
T.update_icon()
else if(istype(A, /obj/structure/hygiene/sink))
if(!tank || tank.reagents.total_volume >= tank.reagents.maximum_volume)
- return
+ return TRUE
action = "water"
update_icon()
visible_message("[src] starts refilling its tank from \the [A].")
@@ -217,13 +218,14 @@
do_attack_animation(A)
if(prob(50))
visible_message("[src] swings wildly at [A] with a minihoe, missing completely!")
- return
+ return TRUE
var/t = pick("slashed", "sliced", "cut", "clawed")
A.attack_generic(src, 5, t)
if("water")
flick("farmbot_water", src)
visible_message("[src] splashes [A] with water!")
tank.reagents.splash(A, 100)
+ return TRUE
/mob/living/bot/farmbot/explode()
visible_message("[src] blows apart!")
diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm
index bd018937452..713d80e1592 100644
--- a/code/modules/mob/living/bot/floorbot.dm
+++ b/code/modules/mob/living/bot/floorbot.dm
@@ -133,14 +133,16 @@
return (amount && (T.broken || T.burnt || (improvefloors && !T.flooring)))
/mob/living/bot/floorbot/UnarmedAttack(var/atom/A, var/proximity)
- if(!..())
+
+ . = ..()
+ if(.)
return
if(busy)
- return
+ return TRUE
if(get_turf(A) != loc)
- return
+ return FALSE
if(emagged && istype(A, /turf/simulated/floor))
var/turf/simulated/floor/F = A
@@ -210,6 +212,7 @@
M.use(1)
addTiles(4)
anchored = FALSE
+ return TRUE
/mob/living/bot/floorbot/explode()
turn_off()
diff --git a/code/modules/mob/living/bot/medibot.dm b/code/modules/mob/living/bot/medibot.dm
index 9807ec8e483..41e96d88d81 100644
--- a/code/modules/mob/living/bot/medibot.dm
+++ b/code/modules/mob/living/bot/medibot.dm
@@ -96,17 +96,15 @@
break
/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H, var/proximity)
- if(!..())
+ . = ..()
+ if(.)
return
- if(!on)
- return
-
- if(!istype(H))
- return
+ if(!on || !istype(H))
+ return FALSE
if(busy)
- return
+ return TRUE
if(H.stat == DEAD)
if(vocal)
@@ -146,6 +144,7 @@
visible_message("[src] injects [H] with the syringe!")
busy = 0
update_icon()
+ return TRUE
/mob/living/bot/medbot/on_update_icon()
..()
diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm
index 4a82dc53d4c..6cbd7c10381 100644
--- a/code/modules/mob/living/bot/mulebot.dm
+++ b/code/modules/mob/living/bot/mulebot.dm
@@ -15,8 +15,7 @@
layer = MOB_LAYER
anchored = TRUE
density = TRUE
- health = 150
- maxHealth = 150
+ mob_default_max_health = 150
mob_bump_flag = HEAVY
min_target_dist = 0
@@ -52,7 +51,7 @@
suffix = num2text(++amount)
name = "Mulebot #[suffix]"
-/mob/living/bot/mulebot/receive_mouse_drop(var/atom/dropping, var/mob/user)
+/mob/living/bot/mulebot/receive_mouse_drop(atom/dropping, mob/user, params)
. = ..()
if(!.)
load(dropping)
@@ -205,20 +204,18 @@
SET_STATUS_MAX(M, STAT_WEAK, 5)
..()
-/mob/living/bot/mulebot/proc/runOver(var/mob/living/carbon/human/H)
- if(istype(H)) // No safety checks - WILL run over lying humans. Stop ERPing in the maint!
- visible_message("[src] drives over [H]!")
- playsound(loc, 'sound/effects/splat.ogg', 50, 1)
-
- var/damage = rand(5, 7)
- H.apply_damage(2 * damage, BRUTE, BP_HEAD)
- H.apply_damage(2 * damage, BRUTE, BP_CHEST)
- H.apply_damage(0.5 * damage, BRUTE, BP_L_LEG)
- H.apply_damage(0.5 * damage, BRUTE, BP_R_LEG)
- H.apply_damage(0.5 * damage, BRUTE, BP_L_ARM)
- H.apply_damage(0.5 * damage, BRUTE, BP_R_ARM)
-
- blood_splatter(src, H, 1)
+/mob/living/bot/mulebot/crossed_mob(var/mob/living/victim)
+ // No safety checks - WILL run over lying humans. Stop ERPing in the maint!
+ visible_message(SPAN_WARNING("\The [src] drives over \the [victim]!"))
+ playsound(loc, 'sound/effects/splat.ogg', 50, 1)
+ var/damage = rand(5, 7)
+ victim.apply_damage(2 * damage, BRUTE, BP_HEAD)
+ victim.apply_damage(2 * damage, BRUTE, BP_CHEST)
+ victim.apply_damage(0.5 * damage, BRUTE, BP_L_LEG)
+ victim.apply_damage(0.5 * damage, BRUTE, BP_R_LEG)
+ victim.apply_damage(0.5 * damage, BRUTE, BP_L_ARM)
+ victim.apply_damage(0.5 * damage, BRUTE, BP_R_ARM)
+ blood_splatter(src, victim, 1)
/mob/living/bot/mulebot/relaymove(var/mob/user, var/direction)
if(load == user)
diff --git a/code/modules/mob/living/bot/remotebot.dm b/code/modules/mob/living/bot/remotebot.dm
index 609b3bbf65c..2b7d9019360 100644
--- a/code/modules/mob/living/bot/remotebot.dm
+++ b/code/modules/mob/living/bot/remotebot.dm
@@ -3,8 +3,7 @@
desc = "A remote controlled robot used by lazy people to switch channels and get pizza."
icon = 'icons/mob/bot/fetchbot.dmi'
icon_state = "fetchbot1"
- health = 15
- maxHealth = 15
+ mob_default_max_health = 15
var/working = 0
var/speed = 10 //lower = better
@@ -98,7 +97,7 @@
icon_state = ICON_STATE_WORLD
w_class = ITEM_SIZE_SMALL
slot_flags = SLOT_LOWER_BODY
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/silicon = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/copper = MATTER_AMOUNT_REINFORCEMENT,
@@ -166,7 +165,7 @@
icon = 'icons/obj/items/bot_kit.dmi'
icon_state = "remotebot"
obj_flags = OBJ_FLAG_HOLLOW
- material = /decl/material/solid/cardboard
+ material = /decl/material/solid/organic/cardboard
/obj/item/bot_kit/attack_self(var/mob/user)
to_chat(user, "You quickly dismantle the box and retrieve the controller and the remote bot itself.")
diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm
index b33a7665cc9..2a17f24eede 100644
--- a/code/modules/mob/living/bot/secbot.dm
+++ b/code/modules/mob/living/bot/secbot.dm
@@ -7,10 +7,8 @@
desc = "A little security robot. He looks less than thrilled."
icon = 'icons/mob/bot/secbot.dmi'
icon_state = "secbot0"
- var/attack_state = "secbot-c"
layer = MOB_LAYER
- maxHealth = 50
- health = 50
+ mob_default_max_health = 50
req_access = list(list(access_security, access_forensics_lockers))
botcard_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
@@ -20,6 +18,7 @@
RequiresAccessToToggle = 1 // Haha no
+ var/attack_state = "secbot-c"
var/idcheck = 0 // If true, arrests for having weapons without authorization.
var/check_records = 0 // If true, arrests people without a record.
var/check_arrest = 1 // If true, arrests people who are set to arrest.
@@ -39,12 +38,9 @@
will_patrol = 1
/mob/living/bot/secbot/Initialize()
- stun_baton = new(src)
- stun_baton.bcell = new /obj/item/cell/infinite(stun_baton)
- stun_baton.set_status(1, null)
- . = ..()
-
+ stun_baton = new /obj/item/baton/infinite(src)
handcuffs = new(src)
+ . = ..()
/mob/living/bot/secbot/Destroy()
qdel(stun_baton)
@@ -108,9 +104,9 @@
emagged = !emagged
/mob/living/bot/secbot/attackby(var/obj/item/O, var/mob/user)
- var/curhealth = health
+ var/curhealth = current_health
. = ..()
- if(health < curhealth)
+ if(current_health < curhealth)
react_to_attack(user)
/mob/living/bot/secbot/emag_act(var/remaining_charges, var/mob/user)
@@ -123,11 +119,11 @@
return 1
/mob/living/bot/secbot/bullet_act(var/obj/item/projectile/P)
- var/curhealth = health
+ var/curhealth = current_health
var/mob/shooter = P.firer
. = ..()
//if we already have a target just ignore to avoid lots of checking
- if(!target && health < curhealth && istype(shooter) && (shooter in view(world.view, src)))
+ if(!target && current_health < curhealth && istype(shooter) && (shooter in view(world.view, src)))
react_to_attack(shooter)
/mob/living/bot/secbot/proc/begin_arrest(mob/target, var/threat)
@@ -136,7 +132,7 @@
broadcast_security_hud_message("[src] is arresting a level [threat] suspect [suspect_name] in [get_area_name(src)].", src)
say("Down on the floor, [suspect_name]! You have [SECBOT_WAIT_TIME] seconds to comply.")
playsound(src.loc, pick(preparing_arrest_sounds), 50)
- events_repository.register(/decl/observ/moved, target, src, /mob/living/bot/secbot/proc/target_moved)
+ events_repository.register(/decl/observ/moved, target, src, TYPE_PROC_REF(/mob/living/bot/secbot, target_moved))
/mob/living/bot/secbot/proc/target_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc)
if(get_dist(get_turf(src), get_turf(target)) >= 1)
@@ -194,16 +190,18 @@
resetTarget() //we're done, failed or not. Don't want to get stuck if C is not
/mob/living/bot/secbot/UnarmedAttack(var/mob/M, var/proximity)
- if(!..())
+
+ . = ..()
+ if(.)
return
if(!istype(M))
- return
+ return FALSE
var/mob/living/carbon/human/H = M
if(istype(H) && H.lying)
cuff_target(H)
- return
+ return TRUE
if(isanimal(M))
a_intent = I_HURT
@@ -212,6 +210,7 @@
stun_baton.attack(M, src, BP_CHEST) //robots and turrets aim for center of mass
flick(attack_state, src)
+ return TRUE
/mob/living/bot/secbot/explode()
visible_message("[src] blows apart!")
diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm
new file mode 100644
index 00000000000..faa6edb9b7f
--- /dev/null
+++ b/code/modules/mob/living/brain/brain.dm
@@ -0,0 +1,117 @@
+/mob/living/brain
+ name = "brain"
+ icon = 'icons/obj/surgery.dmi'
+ icon_state = "brain1"
+ default_emotes = list(
+ /decl/emote/audible/alarm,
+ /decl/emote/audible/alert,
+ /decl/emote/audible/notice,
+ /decl/emote/audible/whistle,
+ /decl/emote/audible/synth,
+ /decl/emote/audible/boop,
+ /decl/emote/visible/blink,
+ /decl/emote/visible/flash
+ )
+
+ // Used for EMP damage when inside an interface or robobrain.
+ var/emp_damage = 0
+ var/last_emp_message = 0
+ var/static/max_emp_damage = 30
+ var/static/list/emp_reboot_strings = list(
+ SPAN_NOTICE("System reboot nearly complete."),
+ SPAN_NOTICE("Primary systems are now online."),
+ SPAN_DANGER("Major electrical distruption detected: System rebooting.")
+ )
+
+/mob/living/brain/handle_regular_status_updates()
+ . = ..()
+ if(emp_damage || stat == DEAD || !is_in_interface())
+ SET_STATUS_MAX(src, STAT_SILENCE, 2)
+
+/mob/living/brain/death()
+ var/obj/item/organ/holder = loc
+ . = ..()
+ if(stat == DEAD && istype(holder))
+ holder.die()
+
+/mob/living/brain/is_deaf()
+ return emp_damage || stat == DEAD || !is_in_interface()
+
+/mob/living/brain/is_blind()
+ return emp_damage || stat == DEAD || !is_in_interface()
+
+/mob/living/brain/Logout()
+ . = ..()
+ var/obj/item/organ/internal/container = get_container()
+ if(istype(container))
+ container.queue_icon_update()
+
+/mob/living/brain/proc/get_container()
+ . = loc?.loc
+
+/mob/living/brain/Login()
+ . = ..()
+ var/obj/item/organ/internal/container = get_container()
+ if(istype(container))
+ var/obj/item/organ/internal/brain_interface/interface = container
+ if(istype(interface))
+ interface.locked = TRUE
+ container.update_icon()
+
+/mob/living/brain/proc/is_in_interface()
+ var/container = get_container()
+ return istype(container, /obj/item/organ/internal/brain_interface) || istype(container, /obj/item/organ/internal/brain/robotic)
+
+/mob/living/brain/can_emote()
+ return is_in_interface() && ..()
+
+/mob/living/brain/can_use_rig()
+ return is_in_interface()
+
+/mob/living/brain/Destroy()
+ ghostize()
+ . = ..()
+
+/mob/living/brain/say_understands(var/other)
+ . = ishuman(other) || (is_in_interface() && issilicon(other)) || ..()
+
+/mob/living/brain/UpdateLyingBuckledAndVerbStatus()
+ return
+
+/mob/living/brain/isSynthetic()
+ return istype(get_container(), /obj/item/organ/internal/brain/robotic)
+
+/mob/living/brain/binarycheck()
+ return isSynthetic()
+
+/mob/living/brain/check_has_mouth()
+ return FALSE
+
+/mob/living/brain/emp_act(severity)
+ if(!isSynthetic())
+ return
+ switch(severity)
+ if(1)
+ emp_damage += rand(20,30)
+ if(2)
+ emp_damage += rand(10,20)
+ if(3)
+ emp_damage += rand(0,10)
+ emp_damage = clamp(emp_damage, 0, max_emp_damage)
+
+/mob/living/brain/handle_regular_status_updates() // Status & health update, are we dead or alive etc.
+ . = ..()
+ if(stat == DEAD || !isSynthetic())
+ emp_damage = 0
+ return
+ if(emp_damage <= 0)
+ return
+ emp_damage -= 1
+ var/msg_threshold = clamp(CEILING(emp_damage / (max_emp_damage / length(emp_reboot_strings))), 1, length(emp_reboot_strings))
+ if(last_emp_message != msg_threshold)
+ last_emp_message = msg_threshold
+ to_chat(src, emp_reboot_strings[msg_threshold])
+ if(emp_damage <= 0)
+ last_emp_message = 0
+ emp_damage = 0
+ to_chat(src, SPAN_NOTICE("All systems restored."))
diff --git a/code/modules/mob/living/brain/death.dm b/code/modules/mob/living/brain/death.dm
new file mode 100644
index 00000000000..0a70b0d7683
--- /dev/null
+++ b/code/modules/mob/living/brain/death.dm
@@ -0,0 +1,17 @@
+/mob/living/brain/death(gibbed)
+ var/death_message = "no message"
+ var/obj/item/organ/internal/brain_interface/container = get_container()
+ if(!gibbed && istype(container))
+ death_message = "beeps shrilly as \the [container] flatlines!"
+ . = ..(gibbed, death_message)
+ if(istype(container))
+ container.update_icon()
+
+/mob/living/brain/gib()
+ var/obj/item/organ/internal/brain_interface/container = get_container()
+ var/obj/item/organ/internal/brain/sponge = loc
+ . = ..(null, 1)
+ if(container && !QDELETED(container))
+ qdel(container)
+ if(istype(sponge) && !QDELETED(sponge))
+ qdel(sponge)
diff --git a/code/modules/mob/living/brain/say.dm b/code/modules/mob/living/brain/say.dm
new file mode 100644
index 00000000000..4a59e86f064
--- /dev/null
+++ b/code/modules/mob/living/brain/say.dm
@@ -0,0 +1,16 @@
+/mob/living/brain/say(var/message, var/decl/language/speaking, var/verb = "says", var/alt_name = "", whispering)
+ if(GET_STATUS(src, STAT_SILENCE) || !is_in_interface())
+ return
+ if(prob(emp_damage*4))
+ if(prob(10))
+ return
+ message = Gibberish(message, (emp_damage*6))
+ . = ..(message, speaking, verb, alt_name, whispering)
+ var/obj/item/radio/radio = get_radio()
+ if(radio)
+ radio.hear_talk(src, sanitize(message), verb, speaking)
+
+/mob/living/brain/get_radio()
+ var/obj/item/organ/internal/brain_interface/container = get_container()
+ if(istype(container))
+ return container.get_radio()
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 2ef856b10ea..9a959c07e7b 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -2,8 +2,7 @@
name = "alien"
desc = "What IS that?"
pass_flags = PASS_FLAG_TABLE
- health = 100
- maxHealth = 100
+ mob_default_max_health = 100
mob_size = MOB_SIZE_TINY
mob_sort_value = 8
var/dead_icon
diff --git a/code/modules/mob/living/carbon/alien/alien_attacks.dm b/code/modules/mob/living/carbon/alien/alien_attacks.dm
index dd556813f6e..a9589f5725e 100644
--- a/code/modules/mob/living/carbon/alien/alien_attacks.dm
+++ b/code/modules/mob/living/carbon/alien/alien_attacks.dm
@@ -20,7 +20,6 @@
SET_STATUS_MAX(src, STAT_WEAK, rand(10,15))
user.visible_message(SPAN_DANGER("\The [user] has weakened \the [src]!"), 1, SPAN_WARNING("You hear someone fall."), 2)
adjustBruteLoss(damage)
- updatehealth()
else
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message(SPAN_DANGER("\The [user] has attempted to punch \the [src]!"), 1)
diff --git a/code/modules/mob/living/carbon/alien/alien_damage.dm b/code/modules/mob/living/carbon/alien/alien_damage.dm
index e75135ae6a6..1a1d4e2ef77 100644
--- a/code/modules/mob/living/carbon/alien/alien_damage.dm
+++ b/code/modules/mob/living/carbon/alien/alien_damage.dm
@@ -17,6 +17,5 @@
SET_STATUS_MAX(src, STAT_PARA, 1)
SET_STATUS_MAX(src, STAT_TINNITUS, 15)
SET_STATUS_MAX(src, STAT_DEAF, 60)
- adjustBruteLoss(b_loss)
+ adjustBruteLoss(b_loss, do_update_health = FALSE)
adjustFireLoss(f_loss)
- updatehealth()
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 43ebca74462..58fff70c26a 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -1,13 +1,3 @@
-// Alien larva are quite simple.
-/mob/living/carbon/alien/Life()
- set invisibility = 0
- set background = 1
- if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) return
- if(!loc) return
- ..()
- //Status updates, death etc.
- update_icon()
-
/mob/living/carbon/alien/handle_mutations_and_radiation()
..()
if(radiation)
@@ -15,57 +5,55 @@
radiation -= rads
adjust_nutrition(rads)
heal_overall_damage(rads,rads)
- adjustOxyLoss(-(rads))
+ adjustOxyLoss(-(rads), do_update_health = FALSE)
adjustToxLoss(-(rads))
/mob/living/carbon/alien/handle_regular_status_updates()
- if(status_flags & GODMODE) return 0
+ . = ..()
if(stat == DEAD)
SET_STATUS_MAX(src, STAT_BLIND, 2)
set_status(STAT_SILENCE, 0)
- else
- updatehealth()
- if(health <= 0)
- death()
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- set_status(STAT_SILENCE, 0)
- return 1
-
- if(HAS_STATUS(src, STAT_PARA))
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- set_stat(UNCONSCIOUS)
- if(getHalLoss() > 0)
- adjustHalLoss(-3)
-
- if(HAS_STATUS(src, STAT_ASLEEP))
+ else if(HAS_STATUS(src, STAT_PARA))
+ SET_STATUS_MAX(src, STAT_BLIND, 2)
+ set_stat(UNCONSCIOUS)
+ if(getHalLoss() > 0)
adjustHalLoss(-3)
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- set_stat(UNCONSCIOUS)
- else if(resting)
- if(getHalLoss() > 0)
- adjustHalLoss(-3)
-
- else
- set_stat(CONSCIOUS)
- if(getHalLoss() > 0)
- adjustHalLoss(-1)
-
- // Eyes and blindness.
- if(!check_has_eyes())
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- SET_STATUS_MAX(src, STAT_BLURRY, 1)
-
- update_icon()
+ if(HAS_STATUS(src, STAT_ASLEEP))
+ adjustHalLoss(-3)
+ if (mind)
+ if(mind.active && client != null)
+ ADJ_STATUS(src, STAT_ASLEEP, -1)
+ SET_STATUS_MAX(src, STAT_BLIND, 2)
+ set_stat(UNCONSCIOUS)
+ else if(resting)
+ if(getHalLoss() > 0)
+ adjustHalLoss(-3)
+ else
+ set_stat(CONSCIOUS)
+ if(getHalLoss() > 0)
+ adjustHalLoss(-1)
- return 1
+ // Eyes and blindness.
+ if(!check_has_eyes())
+ set_status(STAT_BLIND, 1)
+ SET_STATUS_MAX(src, STAT_BLIND, 2)
+ set_status(STAT_BLURRY, 1)
+ else if(GET_STATUS(src, STAT_BLIND))
+ ADJ_STATUS(src, STAT_BLIND, -1)
+ SET_STATUS_MAX(src, STAT_BLIND, 2)
+ update_icon()
+ return TRUE
/mob/living/carbon/alien/handle_regular_hud_updates()
+ . = ..()
+ if(!.)
+ return
update_sight()
if (healths)
if(stat != DEAD)
- switch(health)
+ switch(current_health)
if(100 to INFINITY)
healths.icon_state = "health0"
if(80 to 100)
@@ -94,7 +82,6 @@
if(machine)
if(machine.check_eye(src) < 0)
reset_view(null)
- return 1
/mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment)
..()
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
deleted file mode 100644
index 745a08ca834..00000000000
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ /dev/null
@@ -1,189 +0,0 @@
-/obj/item/mmi/digital/Initialize()
- brainmob = new(src)
- brainmob.set_stat(CONSCIOUS)
- brainmob.add_language(/decl/language/binary)
- brainmob.add_language(/decl/language/machine)
- brainmob.container = src
- brainmob.set_status(STAT_SILENCE, 0)
- PickName()
- . = ..()
-
-/obj/item/mmi/digital/proc/PickName()
- return
-
-/obj/item/mmi/digital/attackby()
- return
-
-/obj/item/mmi/digital/attack_self()
- return
-
-/obj/item/mmi
- name = "\improper Man-Machine Interface"
- desc = "A complex life support shell that interfaces between a brain and electronic devices."
- icon = 'icons/obj/assemblies.dmi'
- icon_state = "mmi_empty"
- w_class = ITEM_SIZE_NORMAL
- origin_tech = "{'biotech':3}"
- material = /decl/material/solid/metal/steel
- matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT)
- req_access = list(access_robotics)
-
- //Revised. Brainmob is now contained directly within object of transfer. MMI in this case.
-
- var/locked = 0
- var/mob/living/carbon/brain/brainmob = null//The current occupant.
- var/obj/item/organ/internal/brain/brainobj = null //The current brain organ.
-
-/obj/item/mmi/attackby(var/obj/item/O, var/mob/user)
- if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO
-
- var/obj/item/organ/internal/brain/B = O
- if(B.damage >= B.max_damage)
- to_chat(user, "That brain is well and truly dead.")
- return
- else if(!B.brainmob || !B.can_use_mmi)
- to_chat(user, "This brain is completely useless to you.")
- return
- if(!user.try_unequip(O, src))
- return
- user.visible_message("\The [user] sticks \a [O] into \the [src].")
-
- brainmob = B.brainmob
- B.brainmob = null
- brainmob.forceMove(src)
- brainmob.container = src
- brainmob.set_stat(CONSCIOUS)
- brainmob.switch_from_dead_to_living_mob_list() //Update dem lists
-
- brainobj = O
-
- SetName("[initial(name)]: ([brainmob.real_name])")
- update_icon()
-
- locked = 1
-
- SSstatistics.add_field("cyborg_mmis_filled",1)
-
- return
-
- if((istype(O,/obj/item/card/id)||istype(O,/obj/item/modular_computer)) && brainmob)
- if(allowed(user))
- locked = !locked
- to_chat(user, "You [locked ? "lock" : "unlock"] the brain holder.")
- else
- to_chat(user, "Access denied.")
- return
- if(brainmob)
- O.attack(brainmob, user)//Oh noooeeeee
- return
- ..()
-
- //TODO: ORGAN REMOVAL UPDATE. Make the brain remain in the MMI so it doesn't lose organ data.
-/obj/item/mmi/attack_self(mob/user)
- if(!brainmob)
- to_chat(user, "You upend the MMI, but there's nothing in it.")
- else if(locked)
- to_chat(user, "You upend the MMI, but the brain is clamped into place.")
- else
- to_chat(user, "You upend the MMI, spilling the brain onto the floor.")
- var/obj/item/organ/internal/brain/brain
- if (brainobj) //Pull brain organ out of MMI.
- brainobj.forceMove(user.loc)
- brain = brainobj
- brainobj = null
- else //Or make a new one if empty.
- brain = new(user.loc)
- brainmob.container = null//Reset brainmob mmi var.
- brainmob.forceMove(brain)//Throw mob into brain.
- brainmob.remove_from_living_mob_list() //Get outta here
- brain.brainmob = brainmob//Set the brain to use the brainmob
- brainmob = null//Set mmi brainmob var to null
-
- update_icon()
- SetName(initial(name))
-
-/obj/item/mmi/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->robot people.
- brainmob = new(src)
- brainmob.SetName(H.real_name)
- brainmob.real_name = H.real_name
- brainmob.dna = H.dna
- brainmob.container = src
- brainmob.timeofhostdeath = H.timeofdeath
- brainmob.set_stat(CONSCIOUS)
-
- SetName("[initial(name)]: [brainmob.real_name]")
- update_icon()
- locked = 1
-
-/obj/item/mmi/preserve_in_cryopod(obj/machinery/cryopod/pod)
- return brainmob && brainmob.client && brainmob.key
-
-/obj/item/mmi/relaymove(var/mob/user, var/direction)
- if(user.incapacitated(INCAPACITATION_KNOCKOUT))
- return
- var/obj/item/rig/rig = get_rig()
- if(rig)
- rig.forced_move(direction, user)
-
-/obj/item/mmi/Destroy()
- if(isrobot(loc))
- var/mob/living/silicon/robot/borg = loc
- borg.mmi = null
- QDEL_NULL(brainmob)
- return ..()
-
-/obj/item/mmi/radio_enabled
- name = "radio-enabled man-machine interface"
- desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio."
- origin_tech = "{'biotech':4}"
- material = /decl/material/solid/metal/steel
- matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT)
- var/obj/item/radio/radio = null//Let's give it a radio.
-
-/obj/item/mmi/radio_enabled/Initialize()
- . = ..()
- radio = new(src)//Spawns a radio inside the MMI.
- radio.broadcasting = 1//So it's broadcasting from the start.
-
-/obj/item/mmi/radio_enabled/verb/Toggle_Broadcasting() //Allows the brain to toggle the radio functions.
- set name = "Toggle Broadcasting"
- set desc = "Toggle broadcasting channel on or off."
- set category = "MMI"
- set src = usr.loc//In user location, or in MMI in this case.
- set popup_menu = 0//Will not appear when right clicking.
-
- if(brainmob.stat)//Only the brainmob will trigger these so no further check is necessary.
- to_chat(brainmob, "Can't do that while incapacitated or dead.")
-
- radio.broadcasting = radio.broadcasting==1 ? 0 : 1
- to_chat(brainmob, "Radio is [radio.broadcasting==1 ? "now" : "no longer"] broadcasting.")
-
-/obj/item/mmi/radio_enabled/verb/Toggle_Listening()
- set name = "Toggle Listening"
- set desc = "Toggle listening channel on or off."
- set category = "MMI"
- set src = usr.loc
- set popup_menu = 0
-
- if(brainmob.stat)
- to_chat(brainmob, "Can't do that while incapacitated or dead.")
-
- radio.listening = radio.listening==1 ? 0 : 1
- to_chat(brainmob, "Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast.")
-
-/obj/item/mmi/emp_act(severity)
- if(!brainmob)
- return
- else
- switch(severity)
- if(1)
- brainmob.emp_damage += rand(20,30)
- if(2)
- brainmob.emp_damage += rand(10,20)
- if(3)
- brainmob.emp_damage += rand(0,10)
- ..()
-
-/obj/item/mmi/on_update_icon()
- . = ..()
- icon_state = brainmob ? "mmi_full" : "mmi_empty"
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
deleted file mode 100644
index 6c61b5d061a..00000000000
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-/mob/living/carbon/brain
- var/obj/item/container = null
- var/timeofhostdeath = 0
- var/emp_damage = 0//Handles a type of MMI damage
- var/alert = null
- icon = 'icons/obj/surgery.dmi'
- icon_state = "brain1"
- mob_sort_value = 7
-
-/mob/living/carbon/brain/Initialize()
- create_reagents(1000)
- . = ..()
-
-/mob/living/carbon/brain/Destroy()
- if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting.
- if(stat!=DEAD) //If not dead.
- death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA
- ghostize() //Ghostize checks for key so nothing else is necessary.
- . = ..()
-
-/mob/living/carbon/brain/say_understands(mob/speaker, decl/language/speaking)
- return (issilicon(speaker) && (istype(container, /obj/item/mmi) || istype(loc, /obj/item/organ/internal/posibrain))) || ishuman(speaker) || ..()
-
-/mob/living/carbon/brain/UpdateLyingBuckledAndVerbStatus()
- return
-
-/mob/living/carbon/brain/isSynthetic()
- return istype(container, /obj/item/mmi/digital) || istype(loc, /obj/item/organ/internal/posibrain)
-
-/mob/living/carbon/brain/binarycheck()
- return isSynthetic()
-
-/mob/living/carbon/brain/check_has_mouth()
- return 0
-
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
deleted file mode 100644
index 5f728287cec..00000000000
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/mob/living/carbon/brain/death(gibbed)
- if(!gibbed && istype(container, /obj/item/mmi)) //If not gibbed but in a container.
- container.icon_state = "mmi_dead"
- return ..(gibbed,"beeps shrilly as the MMI flatlines!")
- else
- return ..(gibbed,"no message")
-
-/mob/living/carbon/brain/gib(anim="gibbed-m",do_gibs)
- if(istype(container, /obj/item/mmi))
- qdel(container)//Gets rid of the MMI if there is one
- if(loc)
- if(istype(loc,/obj/item/organ/internal/brain))
- qdel(loc)//Gets rid of the brain item
- ..(null,1)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
deleted file mode 100644
index 98fd99f1e2b..00000000000
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ /dev/null
@@ -1,177 +0,0 @@
-/mob/living/carbon/brain/need_breathe()
- return FALSE
-
-/mob/living/carbon/brain/should_breathe()
- return FALSE
-
-/mob/living/carbon/brain/handle_mutations_and_radiation()
- ..()
- if (radiation)
- if (radiation > 100)
- radiation = 100
- if(!container)//If it's not in an MMI
- to_chat(src, "You feel weak.")
- else//Fluff-wise, since the brain can't detect anything itself, the MMI handles thing like that
- to_chat(src, "STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED.")
- switch(radiation)
- if(1 to 49)
- radiation--
- if(prob(25))
- adjustToxLoss(1)
- updatehealth()
-
- if(50 to 74)
- radiation -= 2
- adjustToxLoss(1)
- if(prob(5))
- radiation -= 5
- if(!container)
- to_chat(src, "You feel weak.")
- else
- to_chat(src, "STATUS: DANGEROUS LEVELS OF RADIATION DETECTED.")
- updatehealth()
-
- if(75 to 100)
- radiation -= 3
- adjustToxLoss(3)
- updatehealth()
-
-
-/mob/living/carbon/brain/handle_environment(datum/gas_mixture/environment)
- ..()
- if(!environment)
- return
- var/environment_heat_capacity = environment.heat_capacity()
- if(isspaceturf(get_turf(src)))
- var/turf/heat_turf = get_turf(src)
- environment_heat_capacity = heat_turf.heat_capacity
- if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10)))
- var/transfer_coefficient = 1
- handle_temperature_damage(SLOT_HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient)
- if(stat == DEAD)
- bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000)
-
-
-/mob/living/carbon/brain/proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity)
- if(status_flags & GODMODE) return
-
- if(exposed_temperature > bodytemperature)
- var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0)
- //adjustFireLoss(2.5*discomfort)
- //adjustFireLoss(5.0*discomfort)
- adjustFireLoss(20.0*discomfort)
-
- else
- var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0)
- //adjustFireLoss(2.5*discomfort)
- adjustFireLoss(5.0*discomfort)
-
-/mob/living/carbon/brain/apply_chemical_effects()
- . = ..()
- if(resting)
- ADJ_STATUS(src, STAT_DIZZY, -4)
- return TRUE
-
-/mob/living/carbon/brain/handle_regular_status_updates() //TODO: comment out the unused bits >_>
- updatehealth()
-
- if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- set_status(STAT_SILENCE, 0)
- else //ALIVE. LIGHTS ARE ON
- if( !container && (health < config.health_threshold_dead || (config.revival_brain_life >= 0 && (world.time - timeofhostdeath) > config.revival_brain_life)) )
- death()
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- set_status(STAT_SILENCE, 0)
- return 1
-
- //Handling EMP effect in the Life(), it's made VERY simply, and has some additional effects handled elsewhere
- if(emp_damage) //This is pretty much a damage type only used by MMIs, dished out by the emp_act
- if(!(container && istype(container, /obj/item/mmi)))
- emp_damage = 0
- else
- emp_damage = round(emp_damage,1)//Let's have some nice numbers to work with
- switch(emp_damage)
- if(31 to INFINITY)
- emp_damage = 30//Let's not overdo it
- if(21 to 30)//High level of EMP damage, unable to see, hear, or speak
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- SET_STATUS_MAX(src, STAT_DEAF, 2)
- SET_STATUS_MAX(src, STAT_SILENCE, 2)
- if(!alert)//Sounds an alarm, but only once per 'level'
- emote("alarm")
- to_chat(src, "Major electrical distruption detected: System rebooting.")
- alert = 1
- if(prob(75))
- emp_damage -= 1
- if(20)
- alert = 0
- set_status(STAT_BLIND, 0)
- set_status(STAT_DEAF, 0)
- set_status(STAT_SILENCE, 0)
- emp_damage -= 1
- if(11 to 19)//Moderate level of EMP damage, resulting in nearsightedness and ear damage
- set_status(STAT_BLURRY, 2)
- set_status(STAT_TINNITUS, 2)
- if(!alert)
- emote("alert")
- to_chat(src, "Primary systems are now online.")
- alert = 1
- if(prob(50))
- emp_damage -= 1
- if(10)
- alert = 0
- set_status(STAT_BLURRY, 0)
- set_status(STAT_TINNITUS, 0)
- emp_damage -= 1
- if(2 to 9)//Low level of EMP damage, has few effects(handled elsewhere)
- if(!alert)
- emote("notice")
- to_chat(src, "System reboot nearly complete.")
- alert = 1
- if(prob(25))
- emp_damage -= 1
- if(1)
- alert = 0
- to_chat(src, "All systems restored.")
- emp_damage -= 1
-
- return 1
-
-/mob/living/carbon/brain/handle_regular_hud_updates()
- update_sight()
- if (healths)
- if (stat != DEAD)
- switch(health)
- if(100 to INFINITY)
- healths.icon_state = "health0"
- if(80 to 100)
- healths.icon_state = "health1"
- if(60 to 80)
- healths.icon_state = "health2"
- if(40 to 60)
- healths.icon_state = "health3"
- if(20 to 40)
- healths.icon_state = "health4"
- if(0 to 20)
- healths.icon_state = "health5"
- else
- healths.icon_state = "health6"
- else
- healths.icon_state = "health7"
-
- if(stat != DEAD)
- if(is_blind())
- overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
- else
- clear_fullscreen("blind")
- set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1)
- set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry)
- set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high)
- if (machine)
- if (!( machine.check_eye(src) ))
- reset_view(null)
- return 1
-
-/mob/living/carbon/brain/can_change_intent()
- return TRUE
diff --git a/code/modules/mob/living/carbon/brain/login.dm b/code/modules/mob/living/carbon/brain/login.dm
deleted file mode 100644
index 4f8a38ca269..00000000000
--- a/code/modules/mob/living/carbon/brain/login.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-/mob/living/carbon/brain/Login()
- ..()
- set_status(STAT_ASLEEP, 0)
diff --git a/code/modules/mob/living/carbon/brain/robot.dm b/code/modules/mob/living/carbon/brain/robot.dm
deleted file mode 100644
index 1c4a5490ec4..00000000000
--- a/code/modules/mob/living/carbon/brain/robot.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/obj/item/mmi/digital/robot
- name = "robotic intelligence circuit"
- desc = "The pinnacle of artifical intelligence which can be achieved using classical computer science."
- icon = 'icons/obj/modules/module_mainboard.dmi'
- icon_state = ICON_STATE_WORLD
- w_class = ITEM_SIZE_NORMAL
- origin_tech = "{'engineering':4,'materials':3,'programming':4}"
-
-/obj/item/mmi/digital/robot/PickName()
- src.brainmob.SetName("[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[random_id(type,1000,9999)]")
- src.brainmob.real_name = src.brainmob.name
-
-/obj/item/mmi/digital/robot/on_update_icon()
- . = ..()
- icon_state = initial(icon_state)
diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm
deleted file mode 100644
index 793e0ea9033..00000000000
--- a/code/modules/mob/living/carbon/brain/say.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-//TODO: Convert this over for languages.
-/mob/living/carbon/brain/say(var/message)
- if(HAS_STATUS(src, STAT_SILENCE))
- return
-
- message = sanitize(message)
-
- if(!(container && istype(container, /obj/item/mmi)))
- return //No MMI, can't speak, bucko./N
- else
- var/decl/language/speaking = parse_language(message)
- if(speaking)
- message = copytext(message, 2+length(speaking.key))
- var/verb = "says"
- var/ending = copytext(message, length(message))
- if (speaking)
- verb = speaking.get_spoken_verb(src, ending)
- else
- if(ending=="!")
- verb=pick("exclaims","shouts","yells")
- if(ending=="?")
- verb="asks"
-
- if(prob(emp_damage*4))
- if(prob(10))//10% chane to drop the message entirely
- return
- else
- message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher
-
- if(speaking && speaking.flags & LANG_FLAG_HIVEMIND)
- speaking.broadcast(src,trim(message))
- return
-
- if(istype(container, /obj/item/mmi/radio_enabled))
- var/obj/item/mmi/radio_enabled/R = container
- if(R.radio)
- spawn(0) R.radio.hear_talk(src, sanitize(message), verb, speaking)
- ..(trim(message), speaking, verb)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 5116b4d629a..7f88379104b 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -15,7 +15,6 @@
QDEL_NULL(touching)
QDEL_NULL(bloodstr)
reagents = null //We assume reagents is a reference to bloodstr here
- QDEL_NULL_LIST(hallucinations)
if(loc)
for(var/mob/M in contents)
M.dropInto(loc)
@@ -61,7 +60,6 @@
var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(src, BP_CHEST)
if(istype(organ))
organ.take_external_damage(d, 0)
- updatehealth()
else
take_organ_damage(d)
if(prob(getBruteLoss() - 50))
@@ -300,15 +298,8 @@
/mob/living/carbon/proc/can_devour(atom/movable/victim)
return FALSE
-/mob/living/carbon/check_has_mouth()
- // carbon mobs have mouths by default
- // behavior of this proc for humans is overridden in human.dm
- return 1
-
-/mob/living/carbon/proc/check_mouth_coverage()
- // carbon mobs do not have blocked mouths by default
- // overridden in human_defense.dm
- return null
+/mob/living/carbon/get_satiated_nutrition()
+ return 350
/mob/living/carbon/get_max_nutrition()
return 400
diff --git a/code/modules/mob/living/carbon/carbon_eating.dm b/code/modules/mob/living/carbon/carbon_eating.dm
new file mode 100644
index 00000000000..70db1bae0f3
--- /dev/null
+++ b/code/modules/mob/living/carbon/carbon_eating.dm
@@ -0,0 +1,9 @@
+/mob/living/carbon/can_eat_food_currently(obj/eating, mob/user)
+ user = user || src
+ if(get_food_satiation() < get_max_nutrition())
+ return TRUE
+ if(user == src)
+ to_chat(user, SPAN_WARNING("You cannot force any more of \the [eating] down your throat."))
+ else
+ to_chat(user, SPAN_WARNING("You cannot force anymore of \the [eating] down \the [src]'s throat."))
+ return FALSE
diff --git a/code/modules/mob/living/carbon/carbon_organs.dm b/code/modules/mob/living/carbon/carbon_organs.dm
index 9e3bcd0efdb..4fd1c5d27c1 100644
--- a/code/modules/mob/living/carbon/carbon_organs.dm
+++ b/code/modules/mob/living/carbon/carbon_organs.dm
@@ -26,7 +26,7 @@
internal_organs = null
external_organs = null
-/mob/living/carbon/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached)
+/mob/living/carbon/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached, skip_health_update = FALSE)
var/obj/item/organ/existing = LAZYACCESS(organs_by_tag, O.organ_tag)
if(existing && O != existing)
CRASH("mob/living/carbon/add_organ(): '[O]' tried to overwrite [src]'s existing organ '[existing]' in slot '[O.organ_tag]'!")
@@ -43,7 +43,7 @@
LAZYDISTINCTADD(external_organs, O)
. = ..()
-/mob/living/carbon/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = TRUE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE)
+/mob/living/carbon/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = TRUE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE, var/skip_health_update = FALSE)
if(istype(O) && !in_place && O.is_vital_to_owner() && usr)
admin_attack_log(usr, src, "Removed a vital organ ([src]).", "Had a vital organ ([src]) removed.", "removed a vital organ ([src]) from")
if(!(. = ..()))
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 0329801ad70..348e5d0fc2e 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -9,5 +9,4 @@ Specifically made to do radiation burns.
if(!isSynthetic() && !ignore_rads)
damage = 0.25 * damage * (species ? species.get_radiation_mod(src) : 1)
adjustFireLoss(damage)
- updatehealth()
return TRUE
diff --git a/code/modules/mob/living/carbon/hallucinations.dm b/code/modules/mob/living/carbon/hallucinations.dm
deleted file mode 100644
index 3ff542395a8..00000000000
--- a/code/modules/mob/living/carbon/hallucinations.dm
+++ /dev/null
@@ -1,317 +0,0 @@
-/mob/living/carbon/var/hallucination_power = 0
-/mob/living/carbon/var/hallucination_duration = 0
-/mob/living/carbon/var/next_hallucination
-/mob/living/carbon/var/list/hallucinations = list()
-
-/mob/living/proc/adjust_hallucination(duration, power)
- return
-
-/mob/living/proc/set_hallucination(duration, power)
- return
-
-/mob/living/carbon/set_hallucination(duration, power)
- hallucination_duration = max(hallucination_duration, duration)
- hallucination_power = max(hallucination_power, power)
-
-/mob/living/carbon/adjust_hallucination(duration, power)
- hallucination_duration = max(0, hallucination_duration + duration)
- hallucination_power = max(0, hallucination_power + power)
-
-/mob/living/carbon/proc/handle_hallucinations()
- //Tick down the duration
- hallucination_duration = max(0, hallucination_duration - 1)
- //Adjust power if we have some chems that affect it
- if(has_chemical_effect(CE_MIND, threshold_under = -1))
- hallucination_power = hallucination_power++
- else if(has_chemical_effect(CE_MIND, threshold_under = 0))
- hallucination_power = min(hallucination_power++, 50)
- else if(has_chemical_effect(CE_MIND, 1))
- hallucination_duration = max(0, hallucination_duration - 1)
- hallucination_power = max(hallucination_power - GET_CHEMICAL_EFFECT(src, CE_MIND), 0)
-
- //See if hallucination is gone
- if(!hallucination_power)
- hallucination_duration = 0
- return
- if(!hallucination_duration)
- hallucination_power = 0
- return
-
- if(!client || stat || world.time < next_hallucination)
- return
- if(has_chemical_effect(CE_MIND, 1) && prob(GET_CHEMICAL_EFFECT(src, CE_MIND)*40)) //antipsychotics help
- return
- var/hall_delay = rand(10,20) SECONDS
-
- if(hallucination_power < 50)
- hall_delay *= 2
- next_hallucination = world.time + hall_delay
- var/list/candidates = list()
- for(var/T in subtypesof(/datum/hallucination/))
- var/datum/hallucination/H = new T
- if(H.can_affect(src))
- candidates += H
- if(candidates.len)
- var/datum/hallucination/H = pick(candidates)
- H.holder = src
- H.activate()
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-//Hallucination effects datums
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/datum/hallucination
- var/mob/living/carbon/holder
- var/allow_duplicates = 1
- var/duration = 0
- var/min_power = 0 //at what levels of hallucination power mobs should get it
- var/max_power = INFINITY
-
-/datum/hallucination/proc/start()
-
-/datum/hallucination/proc/end()
-
-/datum/hallucination/proc/can_affect(var/mob/living/carbon/C)
- if(!C.client)
- return 0
- if(min_power > C.hallucination_power)
- return 0
- if(max_power < C.hallucination_power)
- return 0
- if(!allow_duplicates && (locate(type) in C.hallucinations))
- return 0
- return 1
-
-/datum/hallucination/Destroy()
- . = ..()
- holder = null
-
-/datum/hallucination/proc/activate()
- if(!holder || !holder.client)
- return
- holder.hallucinations += src
- start()
- spawn(duration)
- if(holder)
- end()
- holder.hallucinations -= src
- qdel(src)
-
-
-//Playing a random sound
-/datum/hallucination/sound
- var/list/sounds = list('sound/machines/airlock.ogg','sound/effects/explosionfar.ogg','sound/machines/windowdoor.ogg','sound/machines/twobeep.ogg')
-
-/datum/hallucination/sound/start()
- var/turf/T = locate(holder.x + rand(6,11), holder.y + rand(6,11), holder.z)
- holder.playsound_local(T,pick(sounds),70)
-
-/datum/hallucination/sound/tools
- sounds = list('sound/items/Ratchet.ogg','sound/items/Welder.ogg','sound/items/Crowbar.ogg','sound/items/Screwdriver.ogg')
-
-/datum/hallucination/sound/danger
- min_power = 30
- sounds = list('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/weapons/smash.ogg')
-
-/datum/hallucination/sound/spooky
- min_power = 50
- sounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/Heart Beat.ogg', 'sound/effects/screech.ogg',\
- 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\
- 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\
- 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\
- 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg')
-
-//Hearing someone being shot twice
-/datum/hallucination/gunfire
- var/gunshot
- var/turf/origin
- duration = 15
- min_power = 30
-
-/datum/hallucination/gunfire/start()
- gunshot = pick('sound/weapons/gunshot/gunshot_strong.ogg', 'sound/weapons/gunshot/gunshot2.ogg', 'sound/weapons/gunshot/shotgun.ogg', 'sound/weapons/gunshot/gunshot.ogg','sound/weapons/Taser.ogg')
- origin = locate(holder.x + rand(4,8), holder.y + rand(4,8), holder.z)
- holder.playsound_local(origin,gunshot,50)
-
-/datum/hallucination/gunfire/end()
- holder.playsound_local(origin,gunshot,50)
-
-//Hearing someone talking to/about you.
-/datum/hallucination/talking/can_affect(var/mob/living/carbon/C)
- if(!..())
- return 0
- for(var/mob/living/M in oview(C))
- return TRUE
-
-/datum/hallucination/talking/start()
- var/sanity = 5 //even insanity needs some sanity
- for(var/mob/living/talker in oview(holder))
- if(talker.stat)
- continue
- var/message
- if(prob(80))
- var/list/names = list()
- var/lastname = copytext(holder.real_name, findtext(holder.real_name, " ")+1)
- var/firstname = copytext(holder.real_name, 1, findtext(holder.real_name, " "))
- if(lastname) names += lastname
- if(firstname) names += firstname
- if(!names.len)
- names += holder.real_name
- var/add = prob(20) ? ", [pick(names)]" : ""
- var/list/phrases = list("[prob(50) ? "Hey, " : ""][pick(names)]!","[prob(50) ? "Hey, " : ""][pick(names)]?","Get out[add]!","Go away[add].","What are you doing[add]?","Where's your ID[add]?")
- if(holder.hallucination_power > 50)
- phrases += list("What did you come here for[add]?","Don't touch me[add].","You're not getting out of here[add].", "You are a failure, [pick(names)].","Just kill yourself already, [pick(names)].","Put on some clothes[add].","Take off your clothes[add].")
- message = pick(phrases)
- to_chat(holder,"[talker.name] [holder.say_quote(message)], \"[message]\"")
- else
- to_chat(holder,"[talker.name] points at [holder.name]")
- to_chat(holder,"[talker.name] says something softly.")
-
- var/speech_state = holder.check_speech_punctuation_state(message)
- if(speech_state)
- var/image/speech_bubble = image('icons/mob/talk.dmi', talker, speech_state)
- addtimer(CALLBACK(src, .proc/qdel_image, speech_bubble), 3 SECONDS)
- show_image(holder, speech_bubble)
-
- sanity-- //don't spam them in very populated rooms.
- if(!sanity)
- return
-
-/datum/hallucination/talking/proc/qdel_image(var/image/speech_bubble)
- qdel(speech_bubble)
-
-//Spiderling skitters
-/datum/hallucination/skitter/start()
- to_chat(holder,"The spiderling skitters[pick(" away"," around","")].")
-
-//Spiders in your body
-/datum/hallucination/spiderbabies
- min_power = 40
-
-/datum/hallucination/spiderbabies/start()
- var/mob/living/carbon/H = holder
- var/list/limbs = H.get_external_organs()
- if(!LAZYLEN(limbs))
- return
- var/obj/O = pick(limbs)
- to_chat(H,SPAN_WARNING("You feel something [pick("moving","squirming","skittering")] inside of your [O.name]!"))
-
-//Seeing stuff
-/datum/hallucination/mirage
- duration = 30 SECONDS
- max_power = 30
- var/number = 1
- var/list/things = list() //list of images to display
-
-/datum/hallucination/mirage/Destroy()
- end()
- . = ..()
-
-/datum/hallucination/mirage/proc/generate_mirage()
- var/icon/T = new('icons/obj/trash.dmi')
- return image(T, pick(T.IconStates()), layer = BELOW_TABLE_LAYER)
-
-/datum/hallucination/mirage/start()
- var/list/possible_points = list()
- for(var/turf/simulated/floor/F in view(holder, world.view+1))
- possible_points += F
- if(possible_points.len)
- for(var/i = 1 to number)
- var/image/thing = generate_mirage()
- things += thing
- thing.loc = pick(possible_points)
- holder.client.images += things
-
-/datum/hallucination/mirage/end()
- if(holder.client)
- holder.client.images -= things
-
-//LOADSEMONEY
-/datum/hallucination/mirage/money
- min_power = 20
- max_power = 45
- number = 2
-
-/datum/hallucination/mirage/money/generate_mirage()
- return image('icons/obj/items/money.dmi', "cash_x_5]", layer = BELOW_TABLE_LAYER)
-
-//Blood and aftermath of firefight
-/datum/hallucination/mirage/carnage
- min_power = 50
- number = 10
-
-/datum/hallucination/mirage/carnage/generate_mirage()
- if(prob(50))
- var/image/I = image('icons/effects/blood.dmi', pick("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7"), layer = BELOW_TABLE_LAYER)
- I.color = COLOR_BLOOD_HUMAN
- return I
- else
- var/image/I = image('icons/obj/ammo.dmi', "s-casing-spent", layer = BELOW_TABLE_LAYER)
- I.layer = BELOW_TABLE_LAYER
- I.dir = pick(global.alldirs)
- I.pixel_x = rand(-10,10)
- I.pixel_y = rand(-10,10)
- return I
-
-//Fake telepathy
-/datum/hallucination/telepahy
- allow_duplicates = 0
- duration = 20 MINUTES
-
-/datum/hallucination/telepahy/start()
- to_chat(holder,"You expand your mind outwards.")
- holder.verbs += /mob/living/carbon/human/proc/fakeremotesay
-
-/datum/hallucination/telepahy/end()
- if(holder)
- holder.verbs -= /mob/living/carbon/human/proc/fakeremotesay
-
-/mob/living/carbon/human/proc/fakeremotesay()
- set name = "Telepathic Message"
- set category = "Superpower"
-
- if(!hallucination_power)
- src.verbs -= /mob/living/carbon/human/proc/fakeremotesay
- return
-
- if(stat)
- to_chat(usr, SPAN_WARNING("You're not in any state to use your powers right now!"))
- return
-
- if(has_chemical_effect(CE_MIND, 1))
- to_chat(usr, SPAN_WARNING("Chemicals in your blood prevent you from using your power!"))
-
- var/list/creatures = list()
- for(var/mob/living/carbon/C in SSmobs.mob_list)
- creatures += C
- creatures -= usr
- var/mob/target = input("Who do you want to project your mind to?") as null|anything in creatures
- if (isnull(target))
- return
-
- var/msg = sanitize(input(usr, "What do you wish to transmit"))
- show_message(SPAN_NOTICE("You project your mind into [target.name]: \"[msg]\""))
- if(!stat && prob(20))
- say(msg)
-
-//Fake attack
-/datum/hallucination/fakeattack
- min_power = 30
-
-/datum/hallucination/fakeattack/can_affect(var/mob/living/carbon/C)
- if(!..())
- return 0
- for(var/mob/living/M in oview(C,1))
- return TRUE
-
-/datum/hallucination/fakeattack/start()
- for(var/mob/living/M in oview(holder,1))
- to_chat(holder, "[M] has punched [holder]!")
- holder.playsound_local(get_turf(holder),"punch",50)
-
-//Fake injection
-/datum/hallucination/fakeattack/hypo
- min_power = 30
-
-/datum/hallucination/fakeattack/hypo/start()
- to_chat(holder, "You feel a tiny prick!")
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index c7a36f4ae18..0bd6e1fb1e5 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -17,7 +17,7 @@
var/last_loc = loc
..(species.gibbed_anim, do_gibs = FALSE)
if(last_loc)
- gibs(last_loc, dna, _fleshcolor = species.get_flesh_colour(src), _bloodcolor = species.get_blood_color(src))
+ gibs(last_loc, _fleshcolor = species.get_flesh_colour(src), _bloodcolor = species.get_blood_color(src))
/mob/living/carbon/human/dust()
if(species)
@@ -43,15 +43,18 @@
if(SSticker.mode)
SSticker.mode.check_win()
- if(config.show_human_death_message)
+ if(get_config_value(/decl/config/toggle/health_show_human_death_message))
deathmessage = species.get_death_message(src) || "seizes up and falls limp..."
else
deathmessage = "no message"
+
. = ..(gibbed, deathmessage, show_dead_message)
+
if(!gibbed)
handle_organs()
if(species.death_sound)
playsound(loc, species.death_sound, 80, 1, 1)
+
handle_hud_list()
/mob/living/carbon/human/proc/is_husked()
@@ -61,9 +64,8 @@
if(is_husked())
return
- f_style = /decl/sprite_accessory/facial_hair/shaved
- h_style = /decl/sprite_accessory/hair/bald
- update_hair(0)
+ set_facial_hairstyle(/decl/sprite_accessory/facial_hair/shaved, skip_update = TRUE)
+ set_hairstyle(/decl/sprite_accessory/hair/bald, skip_update = FALSE)
mutations.Add(MUTATION_HUSK)
for(var/obj/item/organ/external/E in get_external_organs())
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index b4e35098b5e..b49c1dd1ad2 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -6,12 +6,14 @@
icon_state = "body_m_s"
mob_sort_value = 6
dna = new /datum/dna()
+ mob_default_max_health = 150
var/list/hud_list[10]
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
var/step_count
-/mob/living/carbon/human/Initialize(mapload, species_name = null, datum/dna/new_dna = null, decl/bodytype/new_bodytype = null)
+/mob/living/carbon/human/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ current_health = mob_default_max_health
setup_hud_overlays()
var/list/newargs = args.Copy(2)
setup(arglist(newargs))
@@ -47,14 +49,6 @@
var/obj/item/organ/internal/stomach/stomach = get_organ(BP_STOMACH)
return stomach?.ingested
-/mob/living/carbon/human/get_fullness()
- if(!should_have_organ(BP_STOMACH))
- return ..()
- var/obj/item/organ/internal/stomach/stomach = get_organ(BP_STOMACH, /obj/item/organ/internal/stomach)
- if(stomach)
- return nutrition + (stomach.ingested?.total_volume * 10)
- return 0 //Always hungry, but you can't actually eat. :(
-
/mob/living/carbon/human/get_inhaled_reagents()
if(!should_have_organ(BP_LUNGS))
return
@@ -97,7 +91,7 @@
stat(null, "Hardsuit charge: [cell_status]")
/mob/living/carbon/human/proc/implant_loyalty(mob/living/carbon/human/M, override = FALSE) // Won't override by default.
- if(!config.use_loyalty_implants && !override) return // Nuh-uh.
+ if(!get_config_value(/decl/config/toggle/use_loyalty_implants) && !override) return // Nuh-uh.
var/obj/item/implant/loyalty/L = new/obj/item/implant/loyalty(M)
L.imp_in = M
@@ -135,70 +129,12 @@
var/obj/item/underwear/UW = entry
LAZYADD(., "
Remove \the [UW]")
-// called when something steps onto a human
-// this handles mulebots and vehicles
-/mob/living/carbon/human/Crossed(var/atom/movable/AM)
- if(istype(AM, /mob/living/bot/mulebot))
- var/mob/living/bot/mulebot/MB = AM
- MB.runOver(src)
-
- if(istype(AM, /obj/vehicle))
- var/obj/vehicle/V = AM
- V.RunOver(src)
-
-// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc.
-/mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job")
- var/obj/item/card/id/id = GetIdCard()
- if(istype(id))
- return id.rank ? id.rank : if_no_job
- else
- return if_no_id
-
-//gets assignment from ID or ID inside PDA or PDA itself
-//Useful when player do something with computers
-/mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job")
- var/obj/item/card/id/id = GetIdCard()
- if(istype(id))
- return id.assignment ? id.assignment : if_no_job
- else
- return if_no_id
-
-//gets name from ID or ID inside PDA or PDA itself
-//Useful when player do something with computers
-/mob/living/carbon/human/proc/get_authentification_name(var/if_no_id = "Unknown")
- var/obj/item/card/id/id = GetIdCard()
- if(istype(id))
- return id.registered_name
- else
- return if_no_id
-
-//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
-/mob/living/carbon/human/proc/get_visible_name()
- var/face_name = get_face_name()
- var/id_name = get_id_name("")
- if((face_name == "Unknown") && id_name && (id_name != face_name))
- return "[face_name] (as [id_name])"
- return face_name
-
-//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
-//Also used in AI tracking people by face, so added in checks for head coverings like masks and helmets
-/mob/living/carbon/human/proc/get_face_name()
- var/obj/item/organ/external/H = GET_EXTERNAL_ORGAN(src, BP_HEAD)
- var/obj/item/clothing/mask/mask = get_equipped_item(slot_wear_mask_str)
- var/obj/item/head = get_equipped_item(slot_head_str)
- if(!H || (H.status & ORGAN_DISFIGURED) || !real_name || is_husked() || (mask && (mask.flags_inv&HIDEFACE)) || (head && (head.flags_inv&HIDEFACE))) //Face is unrecognizeable, use ID if able
- if(istype(mask) && mask.visible_name)
- return mask.visible_name
- return get_rig()?.visible_name || "Unknown"
- return real_name
-
-//gets name from ID or PDA itself, ID inside PDA doesn't matter
-//Useful when player is being seen by other mobs
-/mob/living/carbon/human/proc/get_id_name(var/if_no_id = "Unknown")
- . = if_no_id
- var/obj/item/card/id/I = GetIdCard(exceptions = list(/obj/item/holder))
- if(istype(I))
- return I.registered_name
+
+// TODO: remove when is_husked is moved to a parent type (or if husking is removed)
+/mob/living/carbon/human/identity_is_visible()
+ if(is_husked())
+ return FALSE
+ return ..()
/mob/living/carbon/human/OnSelfTopic(href_list)
if (href_list["lookitem"])
@@ -382,15 +318,6 @@
dna.check_integrity(src)
return
-/mob/living/carbon/human/get_bodytype_category()
- . = get_bodytype()?.bodytype_category
-
-/mob/living/carbon/human/check_has_mouth()
- var/obj/item/organ/external/head/H = get_organ(BP_HEAD, /obj/item/organ/external/head)
- if(!H || !istype(H) || !H.can_intake_reagents)
- return FALSE
- return TRUE
-
/mob/living/carbon/human/empty_stomach()
SET_STATUS_MAX(src, STAT_STUN, 3)
@@ -473,7 +400,7 @@
reset_blood()
if(!client || !key) //Don't boot out anyone already in the mob.
- for(var/mob/living/carbon/brain/brain in global.player_list) // This is really nasty, does it even work anymore?
+ for(var/mob/living/brain/brain in global.player_list) // This is really nasty, does it even work anymore?
if(brain.real_name == src.real_name && brain.mind)
brain.mind.transfer_to(src)
qdel(brain.loc)
@@ -574,14 +501,16 @@
force_update_limbs()
// Check and clear hair.
- var/decl/sprite_accessory/hair/hairstyle = GET_DECL(h_style)
+ var/set_hairstyle = get_hairstyle()
+ var/decl/sprite_accessory/hair/hairstyle = GET_DECL(set_hairstyle)
if(!hairstyle?.accessory_is_available(src, species, new_bodytype))
- change_hair(new_bodytype.default_h_style, FALSE)
- var/decl/sprite_accessory/hair/facialhairstyle = GET_DECL(f_style)
+ set_hairstyle(new_bodytype.default_h_style, skip_update = TRUE)
+ set_hairstyle = get_facial_hairstyle()
+ var/decl/sprite_accessory/hair/facialhairstyle = GET_DECL(set_hairstyle)
if(!facialhairstyle?.accessory_is_available(src, species, new_bodytype))
- change_facial_hair(new_bodytype.default_f_style, FALSE)
+ set_facial_hairstyle(new_bodytype.default_f_style, skip_update = TRUE)
// TODO: check markings.
-
+ update_hair()
update_eyes()
return TRUE
return FALSE
@@ -610,7 +539,7 @@
holder_type = null
if(species.holder_type)
holder_type = species.holder_type
- maxHealth = species.total_health
+ set_max_health(species.total_health, skip_health_update = TRUE) // Health update is handled later.
remove_extension(src, /datum/extension/armor)
if(species.natural_armour_values)
set_extension(src, /datum/extension/armor, species.natural_armour_values)
@@ -713,7 +642,7 @@
/mob/living/carbon/human/proc/apply_bodytype_appearance()
var/decl/bodytype/root_bodytype = get_bodytype()
if(!root_bodytype)
- skin_colour = COLOR_BLACK
+ set_skin_colour(COLOR_BLACK)
else
root_bodytype.apply_appearance(src)
default_pixel_x = initial(pixel_x) + root_bodytype.pixel_offset_x
@@ -903,10 +832,6 @@
if(stomach)
victim.forceMove(stomach)
-/mob/living/carbon/human/should_have_organ(var/organ_check)
- var/decl/bodytype/root_bodytype = get_bodytype()
- return root_bodytype?.has_organ[organ_check]
-
/mob/living/carbon/human/get_adjusted_metabolism(metabolism)
return ..() * (species ? species.metabolism_mod : 1)
@@ -1009,7 +934,7 @@
//Point at which you dun breathe no more. Separate from asystole crit, which is heart-related.
/mob/living/carbon/human/nervous_system_failure()
- return getBrainLoss() >= maxHealth * 0.75
+ return getBrainLoss() >= get_max_health() * 0.75
/mob/living/carbon/human/melee_accuracy_mods()
. = ..()
@@ -1100,57 +1025,12 @@
if(damage && P.damtype == BRUTE)
var/hit_dir = get_dir(P.starting, src)
var/obj/effect/decal/cleanable/blood/B = blood_splatter(get_step(src, hit_dir), src, 1, hit_dir)
- B.icon_state = pick("dir_splatter_1","dir_splatter_2")
- var/scale = min(1, round(P.damage / 50, 0.2))
- B.set_scale(scale)
-
+ if(!QDELETED(B))
+ B.icon_state = pick("dir_splatter_1","dir_splatter_2")
+ var/scale = min(1, round(P.damage / 50, 0.2))
+ B.set_scale(scale)
new /obj/effect/temp_visual/bloodsplatter(loc, hit_dir, species.get_blood_color(src))
-/mob/living/carbon/human/get_dexterity(var/silent = FALSE)
-
- // Check if we have a slot to use for this.
- var/check_slot = get_active_held_item_slot()
- if(!check_slot)
- return DEXTERITY_NONE
- var/datum/inventory_slot/gripper/gripper = get_inventory_slot_datum(check_slot)
- if(!istype(gripper))
- if(!silent)
- to_chat(src, "Your [parse_zone(check_slot)] is missing!")
- return DEXTERITY_NONE
-
- // Work out if we have any brain damage impacting our dexterity.
- var/dex_malus = 0
- if(getBrainLoss() && getBrainLoss() > config.dex_malus_brainloss_threshold) ///brainloss shouldn't instantly cripple you, so the effects only start once past the threshold and escalate from there.
- dex_malus = clamp(CEILING((getBrainLoss()-config.dex_malus_brainloss_threshold)/10), 0, length(global.dexterity_levels))
- if(dex_malus > 0)
- dex_malus = global.dexterity_levels[dex_malus]
-
- // If this slot does not need an organ we just go off the dexterity of the slot itself.
- if(isnull(gripper.requires_organ_tag))
- if(dex_malus)
- if(!silent)
- to_chat(src, SPAN_WARNING("Your [lowertext(gripper.slot_name)] doesn't respond properly!"))
- return (gripper.get_dexterity() & ~dex_malus)
- return gripper.get_dexterity()
-
- // If this slot requires an organ, do the appropriate organ checks.
- var/obj/item/organ/external/active_hand = GET_EXTERNAL_ORGAN(src, check_slot)
- if(!active_hand)
- if(!silent)
- to_chat(src, "Your [parse_zone(check_slot)] is missing!")
- return DEXTERITY_NONE
- if(!active_hand.is_usable())
- if(!silent)
- to_chat(src, SPAN_WARNING("Your [active_hand.name] is unusable!"))
- return DEXTERITY_NONE
-
- // Return our organ dexterity.
- if(dex_malus)
- if(!silent)
- to_chat(src, SPAN_WARNING("Your [active_hand.name] doesn't respond properly!"))
- return (active_hand.get_manual_dexterity() & ~dex_malus)
- return active_hand.get_manual_dexterity()
-
/mob/living/carbon/human/lose_hair()
if(get_bodytype().set_default_hair(src))
. = TRUE
@@ -1210,7 +1090,7 @@
apply_species_inventory_restrictions()
species.handle_post_spawn(src)
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
//Sets the mob's real name and update all the proper fields
/mob/living/carbon/human/proc/set_real_name(var/newname)
@@ -1233,14 +1113,15 @@
set_species(species_name, new_bodytype)
var/decl/bodytype/root_bodytype = get_bodytype() // root bodytype is set in set_species
- if(!skin_colour)
- skin_colour = root_bodytype.base_color
- if(!hair_colour)
- hair_colour = root_bodytype.base_hair_color
- if(!facial_hair_colour)
- facial_hair_colour = root_bodytype.base_hair_color
- if(!eye_colour)
- eye_colour = root_bodytype.base_eye_color
+ if(!get_skin_colour())
+ set_skin_colour(root_bodytype.base_color, skip_update = TRUE)
+ if(!get_hair_colour())
+ set_hair_colour(root_bodytype.base_hair_color, skip_update = TRUE)
+ if(!get_facial_hair_colour())
+ set_facial_hair_colour(root_bodytype.base_hair_color, skip_update = TRUE)
+ if(!get_eye_colour())
+ set_eye_colour(root_bodytype.base_eye_color, skip_update = TRUE)
+
root_bodytype.set_default_hair(src, override_existing = TRUE, defer_update_hair = TRUE)
if(!blood_type && length(species?.blood_types))
blood_type = pickweight(species.blood_types)
@@ -1271,7 +1152,7 @@
//Runs last after setup and after the parent init has been executed.
/mob/living/carbon/human/proc/post_setup(var/species_name = null, var/datum/dna/new_dna = null)
- refresh_visible_overlays() //Do this exactly once per setup
+ try_refresh_visible_overlays() //Do this exactly once per setup
/mob/living/carbon/human/handle_flashed(var/obj/item/flash/flash, var/flash_strength)
var/safety = eyecheck()
diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/human_appearance.dm
similarity index 59%
rename from code/modules/mob/living/carbon/human/appearance.dm
rename to code/modules/mob/living/carbon/human/human_appearance.dm
index 0dcccc64d82..2f8b796aa5b 100644
--- a/code/modules/mob/living/carbon/human/appearance.dm
+++ b/code/modules/mob/living/carbon/human/human_appearance.dm
@@ -1,8 +1,82 @@
+/mob/living/carbon/human
+ var/_h_style
+ var/_f_style
+ var/_hair_colour
+ var/_facial_hair_colour
+ var/_eye_colour
+ var/_skin_colour
+ var/_lip_colour
+
/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/location = src, var/mob/user = src, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/state = global.default_topic_state)
var/datum/nano_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist)
AC.flags = flags
AC.ui_interact(user, state = state)
+/mob/living/carbon/human/get_lip_colour()
+ return _lip_colour
+
+/mob/living/carbon/human/get_eye_colour()
+ return _eye_colour
+
+/mob/living/carbon/human/get_skin_colour()
+ return _skin_colour
+
+/mob/living/carbon/human/get_hairstyle()
+ return _h_style
+
+/mob/living/carbon/human/get_hair_colour()
+ return _hair_colour
+
+/mob/living/carbon/human/get_facial_hairstyle()
+ return _f_style
+
+/mob/living/carbon/human/get_facial_hair_colour()
+ return _facial_hair_colour
+
+/mob/living/carbon/human/set_lip_colour(var/new_color, var/skip_update = FALSE)
+ if((. = ..()))
+ _lip_colour = new_color
+ if(!skip_update)
+ update_body()
+
+/mob/living/carbon/human/set_eye_colour(var/new_color, var/skip_update = FALSE)
+ if((. = ..()))
+ _eye_colour = new_color
+ if(!skip_update)
+ update_eyes()
+ update_body()
+
+/mob/living/carbon/human/set_skin_colour(var/new_color, var/skip_update = FALSE)
+ if((. = ..()))
+ _skin_colour = new_color
+ if(!skip_update)
+ force_update_limbs()
+ update_body()
+
+/mob/living/carbon/human/set_hair_colour(var/new_color, var/skip_update = FALSE)
+ if((. = ..()))
+ _hair_colour = new_color
+ if(!skip_update)
+ update_hair()
+
+/mob/living/carbon/human/set_hairstyle(var/new_hairstyle, var/skip_update = FALSE)
+ if((. = ..()))
+ _h_style = new_hairstyle
+ if(!skip_update)
+ update_hair()
+
+/mob/living/carbon/human/set_facial_hair_colour(var/new_color, var/skip_update = FALSE)
+ if((. = ..()))
+ _facial_hair_colour = new_color
+ if(!skip_update)
+ update_hair()
+
+/mob/living/carbon/human/set_facial_hairstyle(var/new_facial_hairstyle, var/skip_update = FALSE)
+ if((. = ..()))
+ _f_style = new_facial_hairstyle
+ if(!skip_update)
+ update_hair()
+
/mob/living/carbon/human/proc/change_species(var/new_species, var/new_bodytype = null)
if(!new_species)
return
@@ -32,7 +106,7 @@
add_language(antag.required_language)
set_default_language(antag.required_language)
reset_hair()
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
return 1
/mob/living/carbon/human/set_gender(var/new_gender, var/update_body = FALSE)
@@ -46,70 +120,23 @@
var/decl/pronouns/pronouns = pick(species.available_pronouns)
set_gender(pronouns.name, TRUE)
-/mob/living/carbon/human/proc/change_hair(var/hair_style, var/update_icons = TRUE)
- if(!hair_style || h_style == hair_style || !ispath(hair_style, /decl/sprite_accessory/hair))
- return
- h_style = hair_style
- update_hair(update_icons)
- return 1
-
-/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style, var/update_icons = TRUE)
- if(!facial_hair_style || f_style == facial_hair_style || !ispath(facial_hair_style, /decl/sprite_accessory/facial_hair))
- return
- f_style = facial_hair_style
- update_hair(update_icons)
- return 1
-
/mob/living/carbon/human/proc/reset_hair()
var/list/valid_hairstyles = get_valid_hairstyle_types()
- var/list/valid_facial_hairstyles = get_valid_facial_hairstyle_types()
-
if(length(valid_hairstyles))
- h_style = pick(valid_hairstyles)
+ set_hairstyle(pick(valid_hairstyles), skip_update = TRUE)
else
//this shouldn't happen
- h_style = get_bodytype()?.default_h_style || /decl/sprite_accessory/hair/bald
+ set_hairstyle(get_bodytype()?.default_h_style || /decl/sprite_accessory/hair/bald, skip_update = TRUE)
+ var/list/valid_facial_hairstyles = get_valid_facial_hairstyle_types()
if(length(valid_facial_hairstyles))
- f_style = pick(valid_facial_hairstyles)
+ set_facial_hairstyle(pick(valid_facial_hairstyles), skip_update = TRUE)
else
//this shouldn't happen
- f_style = get_bodytype()?.default_f_style || /decl/sprite_accessory/facial_hair/shaved
+ set_facial_hairstyle(get_bodytype()?.default_f_style || /decl/sprite_accessory/facial_hair/shaved, skip_update = TRUE)
update_hair()
-/mob/living/carbon/human/proc/change_eye_color(var/new_colour)
- if(eye_colour != new_colour)
- eye_colour = new_colour
- update_eyes()
- update_body()
- return TRUE
- return FALSE
-
-/mob/living/carbon/human/proc/change_hair_color(var/new_colour)
- if(hair_colour != new_colour)
- hair_colour = new_colour
- force_update_limbs()
- update_body()
- update_hair()
- return TRUE
- return FALSE
-
-/mob/living/carbon/human/proc/change_facial_hair_color(var/new_colour)
- if(facial_hair_colour != new_colour)
- facial_hair_colour = new_colour
- update_hair()
- return TRUE
- return FALSE
-
-/mob/living/carbon/human/proc/change_skin_color(var/new_colour)
- if(skin_colour == new_colour || !(get_bodytype().appearance_flags & HAS_SKIN_COLOR))
- return FALSE
- skin_colour = new_colour
- force_update_limbs()
- update_body()
- return TRUE
-
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
if(skin_tone == tone || !(get_bodytype().appearance_flags & HAS_A_SKIN_TONE))
return
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 7ac0f60acec..5f5928aa041 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -1,24 +1,19 @@
-//Updates the mob's health from organs and mob damage variables
-/mob/living/carbon/human/updatehealth()
-
- if(status_flags & GODMODE)
- health = maxHealth
- set_stat(CONSCIOUS)
- return
-
- health = maxHealth - getBrainLoss()
+/mob/living/carbon/human/get_total_life_damage()
+ return getBrainLoss()
+//Updates the mob's health from organs and mob damage variables
+/mob/living/carbon/human/update_health()
+ ..()
//TODO: fix husking
- if(((maxHealth - getFireLoss()) < config.health_threshold_dead) && stat == DEAD)
+ if(stat == DEAD && (get_max_health() - getFireLoss()) < get_config_value(/decl/config/num/health_health_threshold_dead))
make_husked()
- return
-/mob/living/carbon/human/adjustBrainLoss(var/amount)
- if(status_flags & GODMODE) return 0 //godmode
- if(should_have_organ(BP_BRAIN))
+/mob/living/carbon/human/adjustBrainLoss(var/amount, var/do_update_health = TRUE)
+ if(!(status_flags & GODMODE) && should_have_organ(BP_BRAIN))
var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN)
if(sponge)
sponge.take_internal_damage(amount)
+ ..()
/mob/living/carbon/human/setBrainLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
@@ -26,7 +21,7 @@
var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN)
if(sponge)
sponge.damage = min(max(amount, 0),sponge.species.total_health)
- updatehealth()
+ update_health()
/mob/living/carbon/human/getBrainLoss()
if(status_flags & GODMODE) return 0 //godmode
@@ -52,7 +47,7 @@
/mob/living/carbon/human/setHalLoss(var/amount)
adjustHalLoss(getHalLoss()-amount)
-/mob/living/carbon/human/adjustHalLoss(var/amount)
+/mob/living/carbon/human/adjustHalLoss(var/amount, var/do_update_health = TRUE)
var/heal = (amount < 0)
amount = abs(amount)
var/list/limbs = get_external_organs()
@@ -69,6 +64,8 @@
else
amount -= E.add_pain(amount)
BITSET(hud_updateflag, HEALTH_HUD)
+ if(do_update_health)
+ update_health()
//These procs fetch a cumulative total damage from all organs
/mob/living/carbon/human/getBruteLoss()
@@ -87,14 +84,15 @@
amount += O.burn_dam
return amount
-/mob/living/carbon/human/adjustBruteLoss(var/amount)
+/mob/living/carbon/human/adjustBruteLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(FALSE) // take/heal overall call update_health regardless of arg
if(amount > 0)
take_overall_damage(amount, 0)
else
heal_overall_damage(-amount, 0)
BITSET(hud_updateflag, HEALTH_HUD)
-/mob/living/carbon/human/adjustFireLoss(var/amount)
+/mob/living/carbon/human/adjustFireLoss(var/amount, var/do_update_health = TRUE)
if(amount > 0)
take_overall_damage(0, amount)
else
@@ -110,7 +108,7 @@
/mob/living/carbon/human/setCloneLoss(var/amount)
adjustCloneLoss(getCloneLoss()-amount)
-/mob/living/carbon/human/adjustCloneLoss(var/amount)
+/mob/living/carbon/human/adjustCloneLoss(var/amount, var/do_update_health = TRUE)
var/heal = amount < 0
amount = abs(amount)
var/list/limbs = get_external_organs()
@@ -124,6 +122,7 @@
else
amount -= E.add_genetic_damage(amount)
BITSET(hud_updateflag, HEALTH_HUD)
+ ..()
/mob/living/carbon/human/proc/getOxyLossPercent()
return (getOxyLoss() / species.total_health) * 100
@@ -137,14 +136,15 @@
/mob/living/carbon/human/setOxyLoss(var/amount)
adjustOxyLoss(amount - getOxyLoss())
-/mob/living/carbon/human/adjustOxyLoss(var/amount)
+/mob/living/carbon/human/adjustOxyLoss(var/damage, var/do_update_health = TRUE)
+ . = FALSE
if(need_breathe())
var/obj/item/organ/internal/lungs/breathe_organ = get_organ(get_bodytype().breathing_organ, /obj/item/organ/internal/lungs)
if(breathe_organ)
- breathe_organ.adjust_oxygen_deprivation(amount)
+ breathe_organ.adjust_oxygen_deprivation(damage)
BITSET(hud_updateflag, HEALTH_HUD)
- return TRUE
- return FALSE
+ . = TRUE
+ ..(do_update_health = FALSE) // Oxyloss cannot directly kill humans
/mob/living/carbon/human/getToxLoss()
if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic())
@@ -159,7 +159,7 @@
adjustToxLoss(getToxLoss()-amount)
// TODO: better internal organ damage procs.
-/mob/living/carbon/human/adjustToxLoss(var/amount)
+/mob/living/carbon/human/adjustToxLoss(var/amount, var/do_update_health = TRUE)
if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic())
return
@@ -212,6 +212,9 @@
I.take_internal_damage(amount, silent=TRUE)
amount = 0
+ if(do_update_health)
+ update_health()
+
/mob/living/carbon/human/proc/can_autoheal(var/dam_type)
if(!species || !dam_type) return FALSE
@@ -242,13 +245,13 @@
//Heals ONE external organ, organ gets randomly selected from damaged ones.
//It automatically updates damage overlays if necesary
//It automatically updates health status
-/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE)
+/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE)
var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn)
if(!parts.len) return
var/obj/item/organ/external/picked = pick(parts)
if(picked.heal_damage(brute,burn,robo_repair = affect_robo))
BITSET(hud_updateflag, HEALTH_HUD)
- updatehealth()
+ update_health()
//TODO reorganize damage procs so that there is a clean API for damaging living mobs
@@ -261,11 +264,12 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
//It automatically updates health status
/mob/living/carbon/human/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb)
var/list/parts = get_damageable_organs()
- if(length(parts))
- var/obj/item/organ/external/picked = pick(parts)
- if(picked.take_external_damage(brute, burn, override_droplimb = override_droplimb))
- BITSET(hud_updateflag, HEALTH_HUD)
- updatehealth()
+ if(!length(parts))
+ return
+ var/obj/item/organ/external/picked = pick(parts)
+ if(picked.take_external_damage(brute, burn, override_droplimb = override_droplimb))
+ BITSET(hud_updateflag, HEALTH_HUD)
+ update_health()
//Heal MANY external organs, in random order
/mob/living/carbon/human/heal_overall_damage(var/brute, var/burn)
@@ -283,14 +287,17 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
burn -= (burn_was-picked.burn_dam)
parts -= picked
- updatehealth()
+ update_health()
BITSET(hud_updateflag, HEALTH_HUD)
// damage MANY external organs, in random order
/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/used_weapon = null)
- if(status_flags & GODMODE) return //godmode
+ if(status_flags & GODMODE)
+ return //godmode
+
var/list/obj/item/organ/external/parts = get_damageable_organs()
- if(!parts.len) return
+ if(!parts.len)
+ return
var/dam_flags = (sharp? DAM_SHARP : 0)|(edge? DAM_EDGE : 0)
var/brute_avg = brute / parts.len
@@ -306,7 +313,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
if(burn_avg)
apply_damage(damage = burn_avg, damagetype = BURN, damage_flags = dam_flags, used_weapon = used_weapon, silent = TRUE, given_organ = E)
- updatehealth()
+ update_health()
BITSET(hud_updateflag, HEALTH_HUD)
/*
@@ -380,7 +387,7 @@ This function restores all organs.
organ.add_genetic_damage(damage)
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
- updatehealth()
+ update_health()
BITSET(hud_updateflag, HEALTH_HUD)
return created_wound
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index d7a9f1dbb8e..0999068197b 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -278,7 +278,7 @@ meteor_act
return 0
//want the dislocation chance to be such that the limb is expected to dislocate after dealing a fraction of the damage needed to break the limb
- var/dislocate_chance = effective_force/(dislocate_mult * organ.min_broken_damage * config.organ_health_multiplier)*100
+ var/dislocate_chance = effective_force/(dislocate_mult * organ.min_broken_damage * get_config_value(/decl/config/num/health_organ_health_multiplier))*100
if(prob(dislocate_chance * blocked_mult(blocked)))
visible_message("[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!")
organ.dislocate(1)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 7f9ce538e1c..d57fc319496 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,20 +1,12 @@
/mob/living/carbon/human
- var/h_style
- var/f_style
-
- var/hair_colour
- var/facial_hair_colour
- var/skin_colour
- var/eye_colour
-
var/regenerate_body_icon = FALSE // If true, the next icon update will also regenerate the body.
var/skin_tone = 0 //Skin tone
var/damage_multiplier = 1 //multiplies melee combat damage
- var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
+ var/lip_color = null //no lipstick by default- arguably misleading, as it could be used for general makeup
var/list/worn_underwear = list()
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 6359a938f6f..d8020db5bef 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -77,8 +77,8 @@
equipment_darkness_modifier += G.darkness_view
equipment_vision_flags |= G.vision_flags
equipment_light_protection += G.light_protection
- if(G.overlay)
- equipment_overlays |= G.overlay
+ if(G.screen_overlay)
+ equipment_overlays |= G.screen_overlay
if(G.see_invisible >= 0)
if(equipment_see_invis)
equipment_see_invis = min(equipment_see_invis, G.see_invisible)
@@ -183,7 +183,10 @@
return istype(get_equipped_item(slot_l_ear_str), /obj/item/radio/headset) || istype(get_equipped_item(slot_r_ear_str), /obj/item/radio/headset)
/mob/living/carbon/human/welding_eyecheck()
- var/obj/item/organ/internal/eyes/E = get_organ(get_bodytype().vision_organ, /obj/item/organ/internal/eyes)
+ var/vision_organ = get_bodytype()?.vision_organ
+ if(!vision_organ)
+ return
+ var/obj/item/organ/internal/eyes/E = get_organ(vision_organ, /obj/item/organ/internal/eyes)
if(!E)
return
var/safety = eyecheck()
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 77ed36f7740..b97bf79c27d 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -18,7 +18,7 @@
tally -= GET_CHEMICAL_EFFECT(src, CE_SPEEDBOOST)
tally += GET_CHEMICAL_EFFECT(src, CE_SLOWDOWN)
- var/health_deficiency = (maxHealth - health)
+ var/health_deficiency = (get_max_health() - current_health)
if(health_deficiency >= 40) tally += (health_deficiency / 25)
if(can_feel_pain())
@@ -55,15 +55,16 @@
if(facing_dir)
tally += 3 // Locking direction will slow you down.
- if (bodytemperature < species.cold_discomfort_level)
- tally += (species.cold_discomfort_level - bodytemperature) / 10 * 1.75
+ var/decl/bodytype/root_bodytype = get_bodytype()
+ if (root_bodytype && bodytemperature < root_bodytype.cold_discomfort_level)
+ tally += (root_bodytype.cold_discomfort_level - bodytemperature) / 10 * 1.75
tally += max(2 * stance_damage, 0) //damaged/missing feet or legs is slow
if(mRun in mutations)
tally = 0
- return (tally+config.human_delay)
+ return (tally+get_config_value(/decl/config/num/movement_human))
/mob/living/carbon/human/size_strength_mod()
. = ..()
@@ -149,6 +150,6 @@
var/mob/M = buckled
M.unbuckle_mob()
var/decl/bodytype/B = get_bodytype()
- playsound(loc, isSynthetic() ? pick(B.synthetic_bodyfall_sounds) : pick(B.bodyfall_sounds), 50, TRUE, -1)
+ playsound(loc, B.bodyfall_sounds, 50, TRUE, -1)
else if(!lying && !old_buckled_lying)
handle_stance() // Force an immediate stance update.
diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm
index 6e57fb48c2c..2573c969a20 100644
--- a/code/modules/mob/living/carbon/human/human_organs.dm
+++ b/code/modules/mob/living/carbon/human/human_organs.dm
@@ -272,7 +272,7 @@
//Registers an organ and setup the organ hierachy properly.
//affected : Parent organ if applicable.
//in_place : If true, we're performing an in-place replacement, without triggering anything related to adding the organ in-game as part of surgery or else.
-/mob/living/carbon/human/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached)
+/mob/living/carbon/human/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached, skip_health_update = FALSE)
if(!(. = ..()))
return
if(!O.is_internal())
@@ -283,7 +283,7 @@
update_inhand_overlays(FALSE)
update_body(FALSE)
update_bandages(FALSE)
- UpdateDamageIcon(FALSE)
+ update_damage_icon(FALSE)
hud_reset()
queue_icon_update() //Avoids calling icon updates 50 times when adding multiple organs
@@ -293,7 +293,7 @@
//ignore_children: Skips recursively removing this organ's child organs.
//in_place : If true we remove only the organ (no children items or implants) and avoid triggering mob changes and parent organs changes as much as possible.
// Meant to be used for init and species transforms, without triggering any updates to mob state or anything related to losing a limb as part of surgery or combat.
-/mob/living/carbon/human/remove_organ(obj/item/organ/O, drop_organ, detach, ignore_children, in_place, update_icon)
+/mob/living/carbon/human/remove_organ(obj/item/organ/O, drop_organ, detach, ignore_children, in_place, update_icon, skip_health_update = FALSE)
if(!(. = ..()))
return
if(!O.is_internal())
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index ba5324b4324..2a062c62fe9 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -20,8 +20,9 @@
to_chat(src, SPAN_WARNING("You can't mess with your hair right now!"))
return
- if(h_style)
- var/decl/sprite_accessory/hair/hair_style = GET_DECL(h_style)
+ var/hairstyle = get_hairstyle()
+ if(hairstyle)
+ var/decl/sprite_accessory/hair/hair_style = GET_DECL(hairstyle)
if(!(hair_style.flags & HAIR_TIEABLE))
to_chat(src, SPAN_WARNING("Your hair isn't long enough to tie."))
return
@@ -39,9 +40,9 @@
if(incapacitated())
to_chat(src, SPAN_WARNING("You can't mess with your hair right now!"))
return
- if(selected_type && h_style != selected_type)
- h_style = selected_type
- refresh_visible_overlays()
+ if(selected_type && hairstyle != selected_type)
+ set_hairstyle(selected_type)
+ try_refresh_visible_overlays()
visible_message(SPAN_NOTICE("\The [src] pauses a moment to style their hair."))
else
to_chat(src, SPAN_NOTICE("You're already using that style."))
@@ -103,5 +104,5 @@
set name = "Change Colour"
set desc = "Choose the colour of your skin."
- var/new_skin = input(usr, "Choose your new skin colour: ", "Change Colour", skin_colour) as color|null
- change_skin_color(new_skin)
+ var/new_skin = input(usr, "Choose your new skin colour: ", "Change Colour", get_skin_colour()) as color|null
+ set_skin_colour(new_skin)
diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm
index 56c6441fe00..71eb35481c6 100644
--- a/code/modules/mob/living/carbon/human/human_species.dm
+++ b/code/modules/mob/living/carbon/human/human_species.dm
@@ -3,23 +3,24 @@
status_flags = GODMODE|CANPUSH
virtual_mob = null
-/mob/living/carbon/human/dummy/mannequin/Initialize()
+/mob/living/carbon/human/dummy/mannequin/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
. = ..()
STOP_PROCESSING(SSmobs, src)
global.human_mob_list -= src
-/mob/living/carbon/human/dummy/selfdress/Initialize()
- . = ..()
+/mob/living/carbon/human/dummy/selfdress/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ ..()
+ return INITIALIZE_HINT_LATELOAD
+
+/mob/living/carbon/human/dummy/selfdress/LateInitialize()
for(var/obj/item/I in loc)
equip_to_appropriate_slot(I)
/mob/living/carbon/human/corpse
real_name = "corpse"
-/mob/living/carbon/human/corpse/Initialize(mapload, new_species, obj/abstract/landmark/corpse/corpse)
-
- . = ..(mapload, new_species)
-
+/mob/living/carbon/human/corpse/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype, obj/abstract/landmark/corpse/corpse)
+ . = ..(mapload, species_name, new_dna, new_bodytype) // do not pass the corpse landmark
var/decl/cultural_info/culture = get_cultural_value(TAG_CULTURE)
if(culture)
var/newname = culture.get_random_name(src, gender, species.name)
@@ -28,16 +29,20 @@
SetName(newname)
if(mind)
mind.name = real_name
+ if(corpse)
+ corpse.randomize_appearance(src, get_species_name())
+ corpse.equip_corpse_outfit(src)
+ return INITIALIZE_HINT_LATELOAD
- adjustOxyLoss(maxHealth)//cease life functions
- setBrainLoss(maxHealth)
+/mob/living/carbon/human/corpse/LateInitialize()
+ ..()
+ var/current_max_health = get_max_health()
+ adjustOxyLoss(current_max_health)//cease life functions
+ setBrainLoss(current_max_health)
+ death(FALSE, deathmessage = "no message", show_dead_message = FALSE)
var/obj/item/organ/internal/heart/corpse_heart = get_organ(BP_HEART, /obj/item/organ/internal/heart)
if(corpse_heart)
corpse_heart.pulse = PULSE_NONE//actually stops heart to make worried explorers not care too much
- if(corpse)
- corpse.randomize_appearance(src, new_species)
- corpse.equip_outfit(src)
- update_icon()
/mob/living/carbon/human/dummy/mannequin/add_to_living_mob_list()
return FALSE
@@ -54,7 +59,8 @@
/mob/living/carbon/human/monkey
gender = PLURAL
-/mob/living/carbon/human/monkey/Initialize(mapload)
+/mob/living/carbon/human/monkey/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
if(gender == PLURAL)
gender = pick(MALE, FEMALE)
- . = ..(mapload, SPECIES_MONKEY)
+ species_name = SPECIES_MONKEY
+ . = ..()
diff --git a/code/modules/mob/living/carbon/human/human_verbs.dm b/code/modules/mob/living/carbon/human/human_verbs.dm
index c233c51241e..f83e9512aee 100644
--- a/code/modules/mob/living/carbon/human/human_verbs.dm
+++ b/code/modules/mob/living/carbon/human/human_verbs.dm
@@ -11,18 +11,17 @@
src.verbs -= /mob/living/carbon/human/proc/morph
return
- var/new_facial = input("Please select facial hair color.", "Character Generation", facial_hair_colour) as color
+ var/new_facial = input("Please select facial hair color.", "Character Generation", get_facial_hair_colour()) as color
if(new_facial)
- facial_hair_colour = new_facial
+ set_facial_hair_colour(new_facial, skip_update = TRUE)
- var/new_hair = input("Please select hair color.", "Character Generation", hair_colour) as color
+ var/new_hair = input("Please select hair color.", "Character Generation", get_hair_colour()) as color
if(new_hair)
- hair_colour = new_hair
+ set_hair_colour(new_hair, skip_update = TRUE)
- var/new_eyes = input("Please select eye color.", "Character Generation", eye_colour) as color
+ var/new_eyes = input("Please select eye color.", "Character Generation", get_eye_colour()) as color
if(new_eyes)
- eye_colour = new_eyes
- update_eyes()
+ set_eye_colour(new_eyes)
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", "[35-skin_tone]") as text
@@ -39,11 +38,11 @@
for(var/x in all_hairs)
hairs += all_hairs[x]
- var/decl/new_style = input("Please select hair style", "Character Generation",h_style) as null|anything in hairs
+ var/decl/new_style = input("Please select hair style", "Character Generation",get_hairstyle()) as null|anything in hairs
// if new style selected (not cancel)
if(new_style)
- h_style = new_style.type
+ set_hairstyle(new_style.type, skip_update = TRUE)
// facial hair
var/list/all_fhairs = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/facial_hair)
@@ -52,10 +51,10 @@
for(var/x in all_fhairs)
fhairs += all_fhairs[x]
- new_style = input("Please select facial style", "Character Generation",f_style) as null|anything in fhairs
+ new_style = input("Please select facial style", "Character Generation", get_facial_hairstyle()) as null|anything in fhairs
if(new_style)
- f_style = new_style.type
+ set_facial_hairstyle(new_style.type, skip_update = TRUE)
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neutral")
if (new_gender)
@@ -65,7 +64,9 @@
gender = FEMALE
else
gender = NEUTER
- refresh_visible_overlays()
+
+ update_hair()
+ try_refresh_visible_overlays()
check_dna()
var/decl/pronouns/G = get_pronouns()
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 177e602fb84..607e23fcf0d 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -23,18 +23,6 @@ This saves us from having to call add_fingerprint() any time something is put in
qdel(W)
return null
-/mob/living/carbon/human/get_equipped_items(var/include_carried = 0)
- . = ..()
- for(var/slot in global.equipped_slots)
- var/obj/item/thing = get_equipped_item(slot)
- if(istype(thing))
- LAZYADD(., thing)
- if(include_carried)
- for(var/slot in global.carried_slots)
- var/obj/item/thing = get_equipped_item(slot)
- if(istype(thing))
- LAZYADD(., thing)
-
//Same as get_covering_equipped_items, but using target zone instead of bodyparts flags
/mob/living/carbon/human/proc/get_covering_equipped_item_by_zone(var/zone)
var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(src, zone)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 8bff80eb390..5255f7e662b 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -3,14 +3,6 @@
//NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick!
#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it.
-#define HUMAN_CRIT_TIME_CUSHION (10 MINUTES) //approximate time limit to stabilize someone in crit
-#define HUMAN_CRIT_HEALTH_CUSHION (config.health_threshold_crit - config.health_threshold_dead)
-
-//The amount of damage you'll get when in critical condition. We want this to be a HUMAN_CRIT_TIME_CUSHION long deal.
-//There are HUMAN_CRIT_HEALTH_CUSHION hp to get through, so (HUMAN_CRIT_HEALTH_CUSHION/HUMAN_CRIT_TIME_CUSHION) per tick.
-//Breaths however only happen once every MOB_BREATH_DELAY life ticks. The delay between life ticks is set by the mob process.
-#define HUMAN_CRIT_MAX_OXYLOSS ( MOB_BREATH_DELAY * process_schedule_interval("mob") * (HUMAN_CRIT_HEALTH_CUSHION/HUMAN_CRIT_TIME_CUSHION) )
-
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point
#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point
@@ -36,36 +28,13 @@
var/pressure_alert = 0
var/stamina = 100
-/mob/living/carbon/human/Life()
- set invisibility = 0
- set background = BACKGROUND_ENABLED
-
- if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src))
- return
-
- fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it.
-
- ..()
-
- if(life_tick%30==15)
- hud_updateflag = 1022
-
- voice = GetVoice()
-
- //No need to update all of these procs if the guy is dead.
- if(stat != DEAD && !is_in_stasis())
- last_pain = null // Clear the last cached pain value so further getHalloss() calls won't use an old value.
- //Organs and blood
- handle_organs()
- handle_shock()
- handle_pain()
- handle_stamina()
-
- if(!handle_some_updates())
- return //We go ahead and process them 5 times for HUD images and other stuff though.
-
- //Update our name based on whether our face is obscured/disfigured
- SetName(get_visible_name())
+/mob/living/carbon/human/handle_living_non_stasis_processes()
+ last_pain = null // Clear the last cached pain value so further getHalloss() calls won't use an old value.
+ //Organs and blood
+ handle_organs()
+ handle_shock()
+ handle_pain()
+ handle_stamina()
/mob/living/carbon/human/get_stamina()
return stamina
@@ -86,7 +55,7 @@
/mob/living/carbon/human/proc/handle_stamina()
if((world.time - last_quick_move_time) > 5 SECONDS)
var/mod = (lying + (nutrition / get_max_nutrition())) / 2
- adjust_stamina(max(config.minimum_stamina_recovery, config.maximum_stamina_recovery * mod) * (1 + GET_CHEMICAL_EFFECT(src, CE_ENERGETIC)))
+ adjust_stamina(max(get_config_value(/decl/config/num/movement_max_stamina_recovery), get_config_value(/decl/config/num/movement_min_stamina_recovery) * mod) * (1 + GET_CHEMICAL_EFFECT(src, CE_ENERGETIC)))
/mob/living/carbon/human/set_stat(var/new_stat)
var/old_stat = stat
@@ -144,7 +113,11 @@
return ONE_ATMOSPHERE + pressure_difference
/mob/living/carbon/human/handle_impaired_vision()
- ..()
+
+ . = ..()
+ if(!.)
+ return
+
//Vision
var/obj/item/organ/vision
var/decl/bodytype/root_bodytype = get_bodytype()
@@ -163,10 +136,9 @@
/mob/living/carbon/human/handle_disabilities()
..()
- if(stat != DEAD)
- if ((disabilities & COUGHING) && prob(5) && GET_STATUS(src, STAT_PARA) <= 1)
- drop_held_items()
- cough()
+ if(stat != DEAD && (disabilities & COUGHING) && prob(5) && GET_STATUS(src, STAT_PARA) <= 1)
+ drop_held_items()
+ cough()
/mob/living/carbon/human/handle_mutations_and_radiation()
if(getFireLoss())
@@ -219,7 +191,7 @@
if(relative_density > 0.02) //don't bother if we are in vacuum or near-vacuum
var/loc_temp = environment.temperature
- if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < get_temperature_threshold(HEAT_LEVEL_1) && bodytemperature > get_temperature_threshold(COLD_LEVEL_1) && species.body_temperature)
+ if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < get_mob_temperature_threshold(HEAT_LEVEL_1) && bodytemperature > get_mob_temperature_threshold(COLD_LEVEL_1) && species.body_temperature)
pressure_alert = 0
return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp
@@ -238,29 +210,29 @@
bodytemperature += clamp(BODYTEMP_COOLING_MAX, temp_adj*relative_density, BODYTEMP_HEATING_MAX)
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
- if(bodytemperature >= get_temperature_threshold(HEAT_LEVEL_1))
+ if(bodytemperature >= get_mob_temperature_threshold(HEAT_LEVEL_1))
//Body temperature is too hot.
fire_alert = max(fire_alert, 1)
if(status_flags & GODMODE) return 1 //godmode
var/burn_dam = 0
- if(bodytemperature < get_temperature_threshold(HEAT_LEVEL_2))
+ if(bodytemperature < get_mob_temperature_threshold(HEAT_LEVEL_2))
burn_dam = HEAT_DAMAGE_LEVEL_1
- else if(bodytemperature < get_temperature_threshold(HEAT_LEVEL_3))
+ else if(bodytemperature < get_mob_temperature_threshold(HEAT_LEVEL_3))
burn_dam = HEAT_DAMAGE_LEVEL_2
else
burn_dam = HEAT_DAMAGE_LEVEL_3
take_overall_damage(burn=burn_dam, used_weapon = "High Body Temperature")
fire_alert = max(fire_alert, 2)
- else if(bodytemperature <= get_temperature_threshold(COLD_LEVEL_1))
+ else if(bodytemperature <= get_mob_temperature_threshold(COLD_LEVEL_1))
fire_alert = max(fire_alert, 1)
if(status_flags & GODMODE) return 1 //godmode
var/burn_dam = 0
- if(bodytemperature > get_temperature_threshold(COLD_LEVEL_2))
+ if(bodytemperature > get_mob_temperature_threshold(COLD_LEVEL_2))
burn_dam = COLD_DAMAGE_LEVEL_1
- else if(bodytemperature > get_temperature_threshold(COLD_LEVEL_3))
+ else if(bodytemperature > get_mob_temperature_threshold(COLD_LEVEL_3))
burn_dam = COLD_DAMAGE_LEVEL_2
else
burn_dam = COLD_DAMAGE_LEVEL_3
@@ -382,103 +354,85 @@
return TRUE
/mob/living/carbon/human/handle_regular_status_updates()
- if(!handle_some_updates())
- return 0
- if(status_flags & GODMODE) return 0
+ voice = GetVoice()
+ SetName(get_visible_name())
- //SSD check, if a logged player is awake put them back to sleep!
- if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- set_status(STAT_SILENCE, 0)
- else //ALIVE. LIGHTS ARE ON
- updatehealth() //TODO
-
- if(hallucination_power)
- handle_hallucinations()
-
- if(get_shock() >= species.total_health)
- if(!stat)
- to_chat(src, "[species.halloss_message_self]")
- src.visible_message("[src] [species.halloss_message]")
- SET_STATUS_MAX(src, STAT_PARA, 10)
-
- if(HAS_STATUS(src, STAT_PARA) ||HAS_STATUS(src, STAT_ASLEEP))
- SET_STATUS_MAX(src, STAT_BLIND, 2)
- set_stat(UNCONSCIOUS)
- animate_tail_reset()
- adjustHalLoss(-3)
-
- if(prob(2) && is_asystole() && isSynthetic())
- visible_message("[src] [pick("emits low pitched whirr","beeps urgently")].")
- //CONSCIOUS
- else
- set_stat(CONSCIOUS)
-
- // Check everything else.
-
- //Periodically double-check embedded_flag
- if(embedded_flag && !(life_tick % 10))
- if(!embedded_needs_process())
- embedded_flag = 0
-
- //Resting
- if(resting)
- if(HAS_STATUS(src, STAT_DIZZY))
- ADJ_STATUS(src, STAT_DIZZY, -15)
- if(HAS_STATUS(src, STAT_JITTER))
- ADJ_STATUS(src, STAT_JITTER, -15)
- adjustHalLoss(-3)
- else
- if(HAS_STATUS(src, STAT_DIZZY))
- ADJ_STATUS(src, STAT_DIZZY, -3)
- if(HAS_STATUS(src, STAT_JITTER))
- ADJ_STATUS(src, STAT_JITTER, -3)
- adjustHalLoss(-1)
+ if(status_flags & GODMODE)
+ return FALSE
- if(HAS_STATUS(src, STAT_DROWSY))
- SET_STATUS_MAX(src, STAT_BLURRY, 2)
- var/sleepy = GET_STATUS(src, STAT_DROWSY)
- if(sleepy > 10)
- var/zzzchance = min(5, 5*sleepy/30)
- if((prob(zzzchance) || sleepy >= 60))
- if(stat == CONSCIOUS)
- to_chat(src, "You are about to fall asleep...")
- SET_STATUS_MAX(src, STAT_ASLEEP, 5)
-
- // If you're dirty, your gloves will become dirty, too.
- var/obj/item/gloves = get_equipped_item(slot_gloves_str)
- if(gloves && germ_level > gloves.germ_level && prob(10))
- gloves.germ_level += 1
-
- if(vsc.contaminant_control.CONTAMINATION_LOSS)
- var/total_contamination= 0
- for(var/obj/item/I in src)
- if(I.contaminated)
- total_contamination += vsc.contaminant_control.CONTAMINATION_LOSS
- adjustToxLoss(total_contamination)
-
- if(stasis_value > 1 && GET_STATUS(src, STAT_DROWSY) < stasis_value * 4)
- ADJ_STATUS(src, STAT_DROWSY, min(stasis_value, 3))
- if(!stat && prob(1))
- to_chat(src, "You feel slow and sluggish...")
+ if(vsc.contaminant_control.CONTAMINATION_LOSS)
+ var/total_contamination= 0
+ for(var/obj/item/I in src)
+ if(I.contaminated)
+ total_contamination += vsc.contaminant_control.CONTAMINATION_LOSS
+ adjustToxLoss(total_contamination)
+
+ . = ..()
+ if(!.)
+ return
+
+ if(get_shock() >= species.total_health)
+ if(!stat)
+ to_chat(src, "[species.halloss_message_self]")
+ src.visible_message("[src] [species.halloss_message]")
+ SET_STATUS_MAX(src, STAT_PARA, 10)
+
+ if(HAS_STATUS(src, STAT_PARA) || HAS_STATUS(src, STAT_ASLEEP))
+ set_stat(UNCONSCIOUS)
+ animate_tail_reset()
+ adjustHalLoss(-3)
+ if(prob(2) && is_asystole() && isSynthetic())
+ visible_message("[src] [pick("emits low pitched whirr","beeps urgently")].")
+ else
+ set_stat(CONSCIOUS)
+
+ // Check everything else.
+ //Periodically double-check embedded_flag
+ if(embedded_flag && !(life_tick % 10))
+ if(!embedded_needs_process())
+ embedded_flag = 0
+
+ //Resting
+ if(resting)
+ if(HAS_STATUS(src, STAT_DIZZY))
+ ADJ_STATUS(src, STAT_DIZZY, -15)
+ if(HAS_STATUS(src, STAT_JITTER))
+ ADJ_STATUS(src, STAT_JITTER, -15)
+ adjustHalLoss(-3)
+ else
+ if(HAS_STATUS(src, STAT_DIZZY))
+ ADJ_STATUS(src, STAT_DIZZY, -3)
+ if(HAS_STATUS(src, STAT_JITTER))
+ ADJ_STATUS(src, STAT_JITTER, -3)
+ adjustHalLoss(-1)
+
+ if(HAS_STATUS(src, STAT_DROWSY))
+ SET_STATUS_MAX(src, STAT_BLURRY, 2)
+ var/sleepy = GET_STATUS(src, STAT_DROWSY)
+ if(sleepy > 10)
+ var/zzzchance = min(5, 5*sleepy/30)
+ if((prob(zzzchance) || sleepy >= 60))
+ if(stat == CONSCIOUS)
+ to_chat(src, SPAN_NOTICE("You are about to fall asleep..."))
+ SET_STATUS_MAX(src, STAT_ASLEEP, 5)
- return 1
/mob/living/carbon/human/handle_regular_hud_updates()
+ fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it.
+ if(life_tick%30==15)
+ hud_updateflag = 1022
if(hud_updateflag) // update our mob's hud overlays, AKA what others see flaoting above our head
handle_hud_list()
-
- // now handle what we see on our screen
-
- if(!..())
+ . = ..()
+ if(!.)
return
-
if(stat != DEAD)
- if(stat == UNCONSCIOUS && health < maxHealth/2)
+ var/half_health = get_max_health()/2
+ if(stat == UNCONSCIOUS && current_health < half_health)
//Critical damage passage overlay
var/severity = 0
- switch(health - maxHealth/2)
+ switch(current_health - half_health)
if(-20 to -10) severity = 1
if(-30 to -20) severity = 2
if(-40 to -30) severity = 3
@@ -608,8 +562,8 @@
if(260 to 280) bodytemp.icon_state = "temp-3"
else bodytemp.icon_state = "temp-4"
else
- var/heat_1 = get_temperature_threshold(HEAT_LEVEL_1)
- var/cold_1 = get_temperature_threshold(COLD_LEVEL_1)
+ var/heat_1 = get_mob_temperature_threshold(HEAT_LEVEL_1)
+ var/cold_1 = get_mob_temperature_threshold(COLD_LEVEL_1)
//TODO: precalculate all of this stuff when the species datum is created
var/base_temperature = species.body_temperature
if(base_temperature == null) //some species don't have a set metabolic temperature
@@ -683,7 +637,7 @@
var/stress_modifier = get_stress_modifier()
if(stress_modifier)
- stress_modifier *= config.stress_shock_recovery_constant
+ stress_modifier *= get_config_value(/decl/config/num/health_stress_shock_recovery_constant)
if(is_asystole())
shock_stage = max(shock_stage + (BASE_SHOCK_RECOVERY + stress_modifier), 61)
@@ -881,12 +835,12 @@
if(species)
- if(burn_temperature < get_temperature_threshold(HEAT_LEVEL_2))
+ if(burn_temperature < get_mob_temperature_threshold(HEAT_LEVEL_2))
species_heat_mod = 0.5
- else if(burn_temperature < get_temperature_threshold(HEAT_LEVEL_3))
+ else if(burn_temperature < get_mob_temperature_threshold(HEAT_LEVEL_3))
species_heat_mod = 0.75
- burn_temperature -= get_temperature_threshold(HEAT_LEVEL_1)
+ burn_temperature -= get_mob_temperature_threshold(HEAT_LEVEL_1)
if(burn_temperature < 1)
return
diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm
index 0fe1aa2547e..58f39cb763c 100644
--- a/code/modules/mob/living/carbon/human/npcs.dm
+++ b/code/modules/mob/living/carbon/human/npcs.dm
@@ -2,41 +2,46 @@
real_name = "Pun Pun"
gender = MALE
-/mob/living/carbon/human/monkey/punpun/Initialize()
- . = ..()
- var/obj/item/clothing/C
+/mob/living/carbon/human/monkey/punpun/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ ..()
+ return INITIALIZE_HINT_LATELOAD
+
+/mob/living/carbon/human/monkey/punpun/LateInitialize()
+ ..()
if(prob(50))
- C = new /obj/item/clothing/under/waiter/monke(src)
- equip_to_appropriate_slot(C)
+ equip_to_appropriate_slot(new /obj/item/clothing/under/waiter/monke(src))
else
- C = new /obj/item/clothing/pants/casual/mustangjeans/monke(src)
- C.attach_accessory(null, new/obj/item/clothing/accessory/toggleable/hawaii/random(src))
+ var/obj/item/clothing/C = new /obj/item/clothing/pants/casual/mustangjeans/monke(src)
+ C.attach_accessory(null, new /obj/item/clothing/accessory/toggleable/hawaii/random(src))
equip_to_appropriate_slot(C)
if(prob(10))
- C = new/obj/item/clothing/head/collectable/petehat(src)
- equip_to_appropriate_slot(C)
+ equip_to_appropriate_slot(new /obj/item/clothing/head/collectable/petehat(src))
/decl/hierarchy/outfit/blank_subject
name = "Test Subject"
- uniform = /obj/item/clothing/under/color/white
+ uniform = /obj/item/clothing/under/color/white/blank
shoes = /obj/item/clothing/shoes/color/white
head = /obj/item/clothing/head/helmet/facecover
mask = /obj/item/clothing/mask/muzzle
suit = /obj/item/clothing/suit/straight_jacket
-/decl/hierarchy/outfit/blank_subject/post_equip(mob/living/carbon/human/H)
+/obj/item/clothing/under/color/white/blank/Initialize()
+ . = ..()
+ var/obj/item/clothing/accessory/vitals_sensor/sensor = new(src)
+ sensor.set_sensors_locked(TRUE)
+ sensor.set_sensor_mode(VITALS_SENSOR_OFF)
+ attach_accessory(null, sensor)
+
+/mob/living/carbon/human/blank/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ species_name = SPECIES_HUMAN
..()
- var/obj/item/clothing/under/color/white/C = locate() in H
- if(C)
- C.has_sensor = SUIT_LOCKED_SENSORS
- C.sensor_mode = SUIT_SENSOR_OFF
+ return INITIALIZE_HINT_LATELOAD
-/mob/living/carbon/human/blank/Initialize(mapload)
- . = ..(mapload, SPECIES_HUMAN)
+/mob/living/carbon/human/blank/LateInitialize()
var/number = "[pick(global.greek_letters)]-[rand(1,30)]"
fully_replace_character_name("Subject [number]")
var/decl/hierarchy/outfit/outfit = outfit_by_type(/decl/hierarchy/outfit/blank_subject)
- outfit.equip(src)
+ outfit.equip_outfit(src)
var/obj/item/clothing/head/helmet/facecover/F = locate() in src
if(F)
F.SetName("[F.name] ([number])")
diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm
index 9d8eba76351..e693d21e906 100644
--- a/code/modules/mob/living/carbon/human/unarmed_attack.dm
+++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm
@@ -68,7 +68,7 @@ var/global/list/sparring_attack_cache = list()
. = soft_variant
/decl/natural_attack/proc/get_sparring_variant()
- return sparring_variant_type && GET_DECL(sparring_variant_type)
+ return GET_DECL(sparring_variant_type)
/decl/natural_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/target, var/zone)
if(!user.restrained() && !user.incapacitated())
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index ed09b8ebdbe..abd8a1a3b67 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -13,8 +13,9 @@ var/global/list/_limb_mask_cache = list()
TODO: Proper documentation
icon_key is [bodytype.get_icon_cache_uid(src)][g][husk][skin_tone]
*/
-var/global/list/human_icon_cache = list()
-var/global/list/tail_icon_cache = list() //key is [bodytype.get_icon_cache_uid(src)][skin_colour]
+var/global/list/human_icon_cache = list()
+var/global/list/eye_icon_cache = list()
+var/global/list/tail_icon_cache = list() //key is [bodytype.get_icon_cache_uid(src)][skin_colour]
var/global/list/light_overlay_cache = list()
/proc/overlay_image(icon,icon_state,color,flags)
@@ -65,7 +66,7 @@ There are several things that need to be remembered:
> There are also these special cases:
update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows
- UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it)
+ update_damage_icon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it)
update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc
update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and
...eyes were merged into update_body)
@@ -83,7 +84,7 @@ There are several things that need to be remembered:
update_inhand_overlays(FALSE)
update_icon()
-> If you need to update all overlays you can use refresh_visible_overlays(). it works exactly like update_clothing used to.
+> If you need to update all overlays you can use try_refresh_visible_overlays(). it works exactly like update_clothing used to.
> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon
It can be used as another method of triggering update_icon(). It's basically a flag that when set to non-zero
@@ -100,34 +101,9 @@ Please contact me on #coderbus IRC. ~Carn x
*/
/mob/living/carbon/human
- var/list/mob_overlays[TOTAL_OVER_LAYERS]
- var/list/mob_underlays[TOTAL_UNDER_LAYERS]
var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed
-/mob/living/carbon/human/get_all_current_mob_overlays()
- return mob_overlays
-
-/mob/living/carbon/human/set_current_mob_overlay(var/overlay_layer, var/image/overlay, var/redraw_mob = TRUE)
- mob_overlays[overlay_layer] = overlay
- ..()
-
-/mob/living/carbon/human/get_current_mob_overlay(var/overlay_layer)
- return mob_overlays[overlay_layer]
-
-/mob/living/carbon/human/get_all_current_mob_underlays()
- return mob_underlays
-
-/mob/living/carbon/human/set_current_mob_underlay(var/underlay_layer, var/image/underlay, var/redraw_mob = TRUE)
- mob_underlays[underlay_layer] = underlay
- ..()
-
-/mob/living/carbon/human/get_current_mob_underlay(var/underlay_layer)
- return mob_underlays[underlay_layer]
-
/mob/living/carbon/human/refresh_visible_overlays()
- . = ..()
- if(!.)
- return
update_mutations(FALSE)
update_body(FALSE)
update_skin(FALSE)
@@ -137,19 +113,15 @@ Please contact me on #coderbus IRC. ~Carn x
update_fire(FALSE)
update_surgery(FALSE)
update_bandages(FALSE)
- UpdateDamageIcon(FALSE)
- update_icon()
- return TRUE
+ update_damage_icon(FALSE)
+ return ..()
/mob/living/carbon/human/on_update_icon()
-
- ..()
-
if(regenerate_body_icon)
regenerate_body_icon = FALSE
- update_body(FALSE)
- refresh_visible_overlays()
+ ..()
+/mob/living/carbon/human/apply_visible_overlays()
var/list/visible_overlays
var/list/visible_underlays
if(is_cloaked())
@@ -190,12 +162,6 @@ Please contact me on #coderbus IRC. ~Carn x
underlay.transform = M
underlays = visible_underlays
- var/obj/item/organ/external/head/head = get_organ(BP_HEAD, /obj/item/organ/external/head)
- if(head)
- var/image/I = head.get_eye_overlay()
- if(I)
- add_overlay(I)
-
/mob/living/carbon/human/proc/get_icon_scale_mult()
// If you want stuff like scaling based on species or something, here is a good spot to mix the numbers together.
return list(icon_scale_x, icon_scale_y)
@@ -243,7 +209,7 @@ var/global/list/damage_icon_parts = list()
//DAMAGE OVERLAYS
//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists
-/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1)
+/mob/living/carbon/human/update_damage_icon(var/update_icons=1)
// first check whether something actually changed about damage appearance
var/damage_appearance = ""
@@ -290,63 +256,35 @@ var/global/list/damage_icon_parts = list()
LAZYADD(bandage_overlays, image(bandage_icon, "[O.icon_state][bandage_level]"))
set_current_mob_overlay(HO_DAMAGE_LAYER, bandage_overlays, update_icons)
+/mob/living/carbon/human/proc/get_human_icon_cache_key()
+ . = list()
+ for(var/limb_tag in global.all_limb_tags)
+ . += "[limb_tag]_"
+ var/obj/item/organ/external/part = GET_EXTERNAL_ORGAN(src, limb_tag)
+ if(isnull(part) || part.skip_body_icon_draw)
+ . += "skip"
+ continue
+ part.update_icon() // This wil regenerate their icon if needed, and more importantly set their cache key.
+ . += part._icon_cache_key
+ . += "husked_[!!is_husked()]"
+ . = JOINTEXT(.)
+
//BASE MOB SPRITE
-/mob/living/carbon/human/update_body(var/update_icons=1)
+/mob/living/carbon/human/update_body(var/update_icons = TRUE)
var/list/limbs = get_external_organs()
if(!LAZYLEN(limbs))
return // Something is trying to update our body pre-init (probably loading a preview image during world startup).
- var/husk_color_mod = rgb(96,88,80)
- var/husk = is_husked()
-
- //CACHING: Generate an index key from visible bodyparts.
- //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
-
- //Create a new, blank icon for our mob to use.
- if(stand_icon)
- qdel(stand_icon)
var/decl/bodytype/root_bodytype = get_bodytype()
- stand_icon = new(root_bodytype.icon_template || 'icons/mob/human.dmi',"blank")
-
- var/icon_key = "[root_bodytype.get_icon_cache_uid(src)][skin_tone][skin_colour]"
- if(lip_style)
- icon_key += "[lip_style]"
- else
- icon_key += "nolips"
- var/obj/item/organ/internal/eyes/eyes = get_organ((root_bodytype.vision_organ || BP_EYES), /obj/item/organ/internal/eyes)
- icon_key += istype(eyes) ? eyes.eye_colour : COLOR_BLACK
+ var/icon_key = get_human_icon_cache_key()
- for(var/limb_tag in global.all_limb_tags)
- var/obj/item/organ/external/part = GET_EXTERNAL_ORGAN(src, limb_tag)
- if(isnull(part) || part.skip_body_icon_draw)
- icon_key += "0"
- continue
- for(var/M in part.markings)
- icon_key += "[M][part.markings[M]]"
- if(part)
- icon_key += "[part.bodytype.get_icon_cache_uid(part.owner)][part.render_alpha]"
- icon_key += "[part.skin_tone]"
- if(part.skin_colour)
- icon_key += "[part.skin_colour]"
- icon_key += "[part.skin_blend]"
- for(var/M in part.markings)
- icon_key += "[M][part.markings[M]]"
- if(!BP_IS_PROSTHETIC(part) && (part.status & ORGAN_DEAD))
- icon_key += "2"
- else
- icon_key += "1"
-
- icon_key = "[icon_key][husk ? 1 : 0]"
-
- var/icon/base_icon
- if(human_icon_cache[icon_key])
- base_icon = human_icon_cache[icon_key]
- else
+ stand_icon = global.human_icon_cache[icon_key]
+ if(!stand_icon)
//BEGIN CACHED ICON GENERATION.
- base_icon = icon(root_bodytype.icon_template)
+ stand_icon = new(root_bodytype.icon_template || 'icons/mob/human.dmi', "blank")
for(var/obj/item/organ/external/part in limbs)
- var/icon/temp = part.get_icon()
+ var/icon/temp = part.icon // Grabbing the icon excludes overlays.
//That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST
//And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part)
if(part.icon_position & (LEFT | RIGHT))
@@ -357,34 +295,28 @@ var/global/list/damage_icon_parts = list()
temp2.Insert(new /icon(temp,dir=EAST),dir=EAST)
if(!(part.icon_position & RIGHT))
temp2.Insert(new /icon(temp,dir=WEST),dir=WEST)
- base_icon.Blend(temp2, ICON_OVERLAY)
+ stand_icon.Blend(temp2, ICON_OVERLAY)
if(part.icon_position & LEFT)
temp2.Insert(new /icon(temp,dir=EAST),dir=EAST)
if(part.icon_position & RIGHT)
temp2.Insert(new /icon(temp,dir=WEST),dir=WEST)
- base_icon.Blend(temp2, ICON_UNDERLAY)
+ stand_icon.Blend(temp2, ICON_UNDERLAY)
else if(part.icon_position & UNDER)
- base_icon.Blend(temp, ICON_UNDERLAY)
+ stand_icon.Blend(temp, ICON_UNDERLAY)
else
- base_icon.Blend(temp, ICON_OVERLAY)
-
- if(husk)
- base_icon.ColorTone(husk_color_mod)
-
+ stand_icon.Blend(temp, ICON_OVERLAY)
//Handle husk overlay.
- if(husk)
+ if(is_husked())
var/husk_icon = root_bodytype.get_husk_icon(src)
if(husk_icon)
- var/icon/mask = new(base_icon)
+ var/icon/mask = new(stand_icon)
var/icon/husk_over = new(husk_icon, "")
mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0)
husk_over.Blend(mask, ICON_ADD)
- base_icon.Blend(husk_over, ICON_OVERLAY)
-
- human_icon_cache[icon_key] = base_icon
-
- //END CACHED ICON GENERATION.
- stand_icon.Blend(base_icon,ICON_OVERLAY)
+ stand_icon.Blend(husk_over, ICON_OVERLAY)
+ else
+ stand_icon.ColorTone("#605850")
+ global.human_icon_cache[icon_key] = stand_icon
//tail
update_tail_showing(0)
@@ -395,24 +327,30 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/proc/update_underwear(var/update_icons=1)
var/list/undies = list()
for(var/entry in worn_underwear)
+
var/obj/item/underwear/UW = entry
- if (!UW || !UW.icon) // Avoid runtimes for nude underwear types
+ if (!UW?.icon) // Avoid runtimes for nude underwear types
continue
- var/image/I
+
var/decl/bodytype/root_bodytype = get_bodytype()
+ if(!root_bodytype)
+ continue // Avoid runtimes for dummy mobs with no bodytype set
+
+ var/image/I
if(UW.slot_offset_str && LAZYACCESS(root_bodytype.equip_adjust, UW.slot_offset_str))
- I = root_bodytype.get_offset_overlay_image(FALSE, UW.icon, UW.icon_state, UW.color, UW.slot_offset_str)
+ I = root_bodytype.get_offset_overlay_image(UW.icon, UW.icon_state, UW.color, UW.slot_offset_str)
else
I = image(icon = UW.icon, icon_state = UW.icon_state)
I.color = UW.color
- I.appearance_flags |= RESET_COLOR
- undies += I
+ if(I) // get_offset_overlay_image() may potentially return null
+ I.appearance_flags |= RESET_COLOR
+ undies += I
set_current_mob_overlay(HO_UNDERWEAR_LAYER, undies, update_icons)
/mob/living/carbon/human/update_hair(var/update_icons=1)
var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD, /obj/item/organ/external/head)
+ set_current_mob_overlay(HO_HAIR_LAYER, (istype(head_organ) ? head_organ.get_mob_overlays() : null), update_icons)
- set_current_mob_overlay(HO_HAIR_LAYER, (istype(head_organ) ? head_organ.get_hair_icon() : null), update_icons)
/mob/living/carbon/human/proc/update_skin(var/update_icons=1)
// todo: make this use bodytype
set_current_mob_overlay(HO_SKIN_LAYER, species.update_skin(src), update_icons)
@@ -460,8 +398,8 @@ var/global/list/damage_icon_parts = list()
set_current_mob_overlay(HO_TAIL_LAYER, null, FALSE)
set_current_mob_underlay(HU_TAIL_LAYER, null, update_icons)
- var/icon/tail_s = get_tail_icon(tail_organ)
- var/tail_image = image(tail_s, icon_state = "[tail_state]_s")
+ var/icon/tail_s = get_tail_icon_for_organ(tail_organ)
+ var/tail_image = image(tail_s, icon_state = tail_state)
animate_tail_reset(0)
if(dir == NORTH)
set_current_mob_underlay(HU_TAIL_LAYER, null, FALSE)
@@ -470,26 +408,40 @@ var/global/list/damage_icon_parts = list()
set_current_mob_overlay(HO_TAIL_LAYER, null, FALSE)
set_current_mob_underlay(HU_TAIL_LAYER, tail_image, update_icons)
-/mob/living/carbon/human/proc/get_tail_icon(var/obj/item/organ/external/tail/tail_organ)
+/mob/living/carbon/human/proc/get_tail_icon_for_organ(var/obj/item/organ/external/tail/tail_organ)
if(!istype(tail_organ))
return
- var/icon_key = "[tail_organ.get_tail()]\ref[tail_organ.icon][tail_organ.get_tail_blend(src)][tail_organ.bodytype.appearance_flags & HAS_SKIN_COLOR][skin_colour][tail_organ.get_tail_hair()][tail_organ.get_tail_hair_blend()][hair_colour]"
- var/icon/tail_icon = tail_icon_cache[icon_key]
- if(!tail_icon)
+
+ var/tail_state = tail_organ.get_tail()
+ var/tail_icon = tail_organ.get_tail_icon()
+ if(!tail_state || !tail_icon)
+ return // No tail data!
+
+ // These values may be null and are generally optional.
+ var/hair_colour = get_hair_colour()
+ var/skin_colour = get_skin_colour()
+ var/tail_hair = tail_organ.get_tail_hair()
+ var/tail_blend = tail_organ.get_tail_blend()
+ var/tail_hair_blend = tail_organ.get_tail_hair_blend()
+ var/tail_color = (tail_organ.bodytype.appearance_flags & HAS_SKIN_COLOR) ? skin_colour : null
+
+ var/icon_key = "[tail_state][tail_icon][tail_blend][tail_color][tail_hair][tail_hair_blend][hair_colour]"
+ var/icon/blended_tail_icon = global.tail_icon_cache[icon_key]
+ if(!blended_tail_icon)
//generate a new one
- var/tail_anim = tail_organ.get_tail_animation() || tail_organ.get_tail_icon()
- tail_icon = new/icon(tail_anim)
- if(tail_organ.bodytype.appearance_flags & HAS_SKIN_COLOR)
- tail_icon.Blend(skin_colour, tail_organ.get_tail_blend(src))
+ blended_tail_icon = icon(tail_icon, tail_state)
+ if(skin_colour && !isnull(tail_blend)) // 0 is a valid blend mode
+ blended_tail_icon.Blend(skin_colour, tail_blend)
// The following will not work with animated tails.
- var/use_tail = tail_organ.get_tail_hair()
- if(use_tail)
- var/icon/hair_icon = icon(tail_organ.get_tail_icon(src), "[tail_organ.get_tail()]_[use_tail]")
- hair_icon.Blend(hair_colour, tail_organ.get_tail_hair_blend())
- tail_icon.Blend(hair_icon, ICON_OVERLAY)
- tail_icon_cache[icon_key] = tail_icon
-
- return tail_icon
+ if(tail_hair)
+ var/tail_hair_state = "[tail_state]_[tail_hair]"
+ if(check_state_in_icon(tail_hair_state, tail_icon))
+ var/icon/hair_icon = icon(tail_icon, tail_hair_state)
+ if(hair_colour && !isnull(tail_hair_blend)) // 0 is a valid blend mode
+ hair_icon.Blend(hair_colour, tail_hair_blend)
+ blended_tail_icon.Blend(hair_icon, ICON_OVERLAY)
+ global.tail_icon_cache[icon_key] = blended_tail_icon
+ return blended_tail_icon
/mob/living/set_dir()
. = ..()
@@ -499,14 +451,13 @@ var/global/list/damage_icon_parts = list()
update_tail_showing()
/mob/living/carbon/human/proc/set_tail_state(var/t_state)
- var/image/tail_overlay = get_current_tail_image()
var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail)
if(!tail_organ)
return null
-
- if(tail_overlay && tail_organ.get_tail_animation())
+ var/image/tail_overlay = get_current_tail_image()
+ if(tail_overlay && check_state_in_icon(tail_overlay.icon, t_state))
tail_overlay.icon_state = t_state
- return tail_overlay
+ return tail_overlay
//Not really once, since BYOND can't do that.
//Update this if the ability to flick() images or make looping animation start at the first frame is ever added.
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
deleted file mode 100644
index ff3b7588e00..00000000000
--- a/code/modules/mob/living/carbon/life.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/mob/living/carbon/Life()
- if(!..())
- return
-
- // Increase germ_level regularly
- if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
- germ_level++
-
- if(stat != DEAD && !is_in_stasis())
- //Mutations and radiation
- handle_mutations_and_radiation()
-
- //Chemicals in the body
- handle_chemicals_in_body()
-
- //Random events (vomiting etc)
- handle_random_events()
-
- // eye, ear, brain damages
- handle_disabilities()
-
- . = 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/taste.dm b/code/modules/mob/living/carbon/taste.dm
index be5741d61b1..643fe0fbf3c 100644
--- a/code/modules/mob/living/carbon/taste.dm
+++ b/code/modules/mob/living/carbon/taste.dm
@@ -92,6 +92,3 @@ calculate text size per text.
out += "[intensity_desc] [taste_desc]"
return english_list(out, "something indescribable")
-
-/mob/living/carbon/proc/get_fullness()
- return nutrition + (REAGENT_VOLUME(reagents, /decl/material/liquid/nutriment) * 25)
\ No newline at end of file
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index f3ad31eec72..1b1257a75d2 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -27,7 +27,7 @@
adjustBruteLoss(damage)
if(BURN)
if(MUTATION_COLD_RESISTANCE in mutations)
- damage = 0
+ return
adjustFireLoss(damage)
if(TOX)
adjustToxLoss(damage)
@@ -41,8 +41,6 @@
electrocute_act(damage, used_weapon, 1, def_zone)
if(IRRADIATE)
apply_radiation(damage)
-
- updatehealth()
return TRUE
@@ -64,7 +62,6 @@
/mob/living/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
if(!effect || (blocked >= 100)) return FALSE
-
switch(effecttype)
if(STUN)
SET_STATUS_MAX(src, STAT_STUN, effect * blocked_mult(blocked))
@@ -81,7 +78,6 @@
SET_STATUS_MAX(src, STAT_BLURRY, effect * blocked_mult(blocked))
if(DROWSY)
SET_STATUS_MAX(src, STAT_DROWSY, effect * blocked_mult(blocked))
- updatehealth()
return TRUE
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0)
diff --git a/code/modules/mob/living/deity/deity.dm b/code/modules/mob/living/deity/deity.dm
index f3a5f2ff9dd..be98a7e030a 100644
--- a/code/modules/mob/living/deity/deity.dm
+++ b/code/modules/mob/living/deity/deity.dm
@@ -5,8 +5,7 @@
icon_state = "egg"
pixel_x = -128
pixel_y = -128
- health = 100
- maxHealth = 100 //I dunno what to do with health at this point.
+ mob_default_max_health = 100
universal_understand = TRUE
mob_sort_value = 5
@@ -52,14 +51,34 @@
return STATUS_INTERACTIVE
/mob/living/deity/Destroy()
+
+ for(var/phenom in phenomenas)
+ remove_phenomena(phenom)
+
+ if(length(items_by_category))
+ for(var/cat in items_by_category)
+ var/list/L = items_by_category[cat]
+ L.Cut()
+ items_by_category.Cut()
+
+ if(length(items))
+ for(var/i in items)
+ qdel(items[i])
+ items.Cut()
+
death(0)
- minions.Cut()
- structures.Cut()
- eyeobj.release()
+ if(length(minions))
+ minions.Cut()
+ if(length(structures))
+ structures.Cut()
+ if(eyeobj)
+ eyeobj.release()
+ QDEL_NULL(eyeobj)
QDEL_NULL(eyenet) //We do it here as some mobs have eyes that have access to the visualnet and we only want to destroy it when the deity is destroyed
- QDEL_NULL(eyeobj)
+
QDEL_NULL(form)
+
return ..()
/mob/living/deity/verb/return_to_plane()
diff --git a/code/modules/mob/living/deity/deity_items.dm b/code/modules/mob/living/deity/deity_items.dm
index 9245a8dbbd0..3dfa6e4dc64 100644
--- a/code/modules/mob/living/deity/deity_items.dm
+++ b/code/modules/mob/living/deity/deity_items.dm
@@ -31,14 +31,3 @@
if(items[name])
var/datum/deity_item/di = items[name]
. = di.level
-
-
-/mob/living/deity/Destroy()
- for(var/cat in items_by_category)
- var/list/L = items_by_category[cat]
- L.Cut()
- items_by_category.Cut()
- for(var/i in items)
- qdel(items[i])
- items.Cut()
- . = ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/deity/deity_phenomena.dm b/code/modules/mob/living/deity/deity_phenomena.dm
index 02533e6186c..0ca6dd7514b 100644
--- a/code/modules/mob/living/deity/deity_phenomena.dm
+++ b/code/modules/mob/living/deity/deity_phenomena.dm
@@ -18,31 +18,28 @@
/mob/living/deity/proc/silence(var/amount)
if(!silenced)
to_chat(src, "You've been silenced! Your phenomenas are disabled!")
- var/obj/screen/intent/deity/SD = hud_used.action_intent
- SD.color = "#ff0000"
+ var/obj/screen/intent/deity/SD = hud_used?.action_intent
+ if(istype(SD))
+ SD.color = "#ff0000"
silenced += amount
for(var/phenom in phenomenas) //Also make it so that you don't do cooldowns.
var/datum/phenomena/P = phenomenas[phenom]
if(P.refresh_time)
P.refresh_time += amount
-/mob/living/deity/Life()
+/mob/living/deity/handle_regular_status_updates()
. = ..()
if(.)
if(silenced > 0)
silenced--
if(!silenced)
to_chat(src, "You are no longer silenced.")
- var/obj/screen/intent/deity/SD = hud_used.action_intent
- SD.color = null
+ var/obj/screen/intent/deity/SD = hud_used?.action_intent
+ if(istype(SD))
+ SD.color = null
if(power_per_regen < 0 || power < power_min)
adjust_power(power_per_regen)
-/mob/living/deity/Destroy()
- for(var/phenom in phenomenas)
- remove_phenomena(phenom)
- return ..()
-
/mob/living/deity/proc/add_phenomena(var/type)
if(!phenomenas)
phenomenas = list()
@@ -67,8 +64,9 @@
for(var/mod in intent_list)
if(intent_list[mod] == P)
intent_list[mod] = null
- var/obj/screen/intent/deity/SD = hud_used.action_intent
- SD.update_text()
+ var/obj/screen/intent/deity/SD = hud_used?.action_intent
+ if(istype(SD))
+ SD.update_text()
update_phenomenas()
update_phenomena_bindings()
if(selected == to_remove)
diff --git a/code/modules/mob/living/deity/deity_sources.dm b/code/modules/mob/living/deity/deity_sources.dm
index 181957044cb..4c479cff036 100644
--- a/code/modules/mob/living/deity/deity_sources.dm
+++ b/code/modules/mob/living/deity/deity_sources.dm
@@ -10,8 +10,8 @@
if(form)
L.faction = form.faction
update_followers()
- events_repository.register(/decl/observ/destroyed, L,src, .proc/dead_follower)
- events_repository.register(/decl/observ/death, L,src, .proc/update_followers)
+ events_repository.register(/decl/observ/destroyed, L,src, PROC_REF(dead_follower))
+ events_repository.register(/decl/observ/death, L,src, PROC_REF(update_followers))
/mob/living/deity/proc/dead_follower(var/mob/living/L)
events_repository.unregister(/decl/observ/death, L,src)
diff --git a/code/modules/mob/living/deity/deity_tracking.dm b/code/modules/mob/living/deity/deity_tracking.dm
index 0ac0cd7ba75..0b8de46e9f4 100644
--- a/code/modules/mob/living/deity/deity_tracking.dm
+++ b/code/modules/mob/living/deity/deity_tracking.dm
@@ -25,9 +25,9 @@
eyeobj.setLoc(get_turf(L))
to_chat(src, "You begin to follow \the [L].")
following = L
- events_repository.register(/decl/observ/moved, L, src, /mob/living/deity/proc/keep_following)
- events_repository.register(/decl/observ/destroyed, L, src, /mob/living/deity/proc/stop_follow)
- events_repository.register(/decl/observ/death, L, src, /mob/living/deity/proc/stop_follow)
+ events_repository.register(/decl/observ/moved, L, src, TYPE_PROC_REF(/mob/living/deity, keep_following))
+ events_repository.register(/decl/observ/destroyed, L, src, TYPE_PROC_REF(/mob/living/deity, stop_follow))
+ events_repository.register(/decl/observ/death, L, src, TYPE_PROC_REF(/mob/living/deity, stop_follow))
/mob/living/deity/proc/stop_follow()
events_repository.unregister(/decl/observ/moved, following, src)
diff --git a/code/modules/mob/living/deity/menu/deity_nano.dm b/code/modules/mob/living/deity/menu/deity_nano.dm
index 63053cac5ed..046276fcffe 100644
--- a/code/modules/mob/living/deity/menu/deity_nano.dm
+++ b/code/modules/mob/living/deity/menu/deity_nano.dm
@@ -76,5 +76,6 @@
phenomena_bindings[++phenomena_bindings.len] = list("intent" = intent, "intent_data" = intent_data)
nano_data["bindings"] = phenomena_bindings
//Update the hud as well.
- var/obj/screen/intent/deity/SD = hud_used.action_intent
- SD.update_text()
\ No newline at end of file
+ var/obj/screen/intent/deity/SD = hud_used?.action_intent
+ if(istype(SD))
+ SD.update_text()
\ No newline at end of file
diff --git a/code/modules/mob/living/deity/phenomena/communication.dm b/code/modules/mob/living/deity/phenomena/communication.dm
index 72876f3f9e9..9a76f59dba8 100644
--- a/code/modules/mob/living/deity/phenomena/communication.dm
+++ b/code/modules/mob/living/deity/phenomena/communication.dm
@@ -37,7 +37,7 @@
if((M in view) && M.client)
to_chat(M, "Your attention is eerily drawn to \the [a].")
M.client.images += arrow
- events_repository.register(/decl/observ/logged_out, M, src, /datum/phenomena/point/proc/remove_image)
+ events_repository.register(/decl/observ/logged_out, M, src, TYPE_PROC_REF(/datum/phenomena/point, remove_image))
spawn(20)
if(M.client)
remove_image(M)
diff --git a/code/modules/mob/living/deity/phenomena/conjuration.dm b/code/modules/mob/living/deity/phenomena/conjuration.dm
index 86f717641fa..ac0f27c6075 100644
--- a/code/modules/mob/living/deity/phenomena/conjuration.dm
+++ b/code/modules/mob/living/deity/phenomena/conjuration.dm
@@ -27,7 +27,7 @@
var/obj/effect/portal/P = new(get_turf(a), null, 0)
P.failchance = 0
portals += P
- events_repository.register(/decl/observ/destroyed, P,src,/datum/phenomena/portals/proc/remove_portal)
+ events_repository.register(/decl/observ/destroyed, P,src, TYPE_PROC_REF(/datum/phenomena/portals, remove_portal))
if(portals.len > 2)
var/removed = portals[1]
remove_portal(removed)
@@ -59,7 +59,7 @@
L.take_overall_damage(rand(5,30),0,0,0,"blunt intrument") //Actual spell does 5d10 but maaaybe too much.
playsound(get_turf(L), 'sound/effects/bamf.ogg', 100, 1)
to_chat(L, "Something hard hits you!")
- if(L.health < L.maxHealth/2) //If it reduces past 50%
+ if(L.current_health < L.get_max_health()/2) //If it reduces past 50%
var/obj/effect/rift/R = new(get_turf(L))
L.visible_message("\The [L] is quickly sucked into \a [R]!")
L.forceMove(R)
@@ -71,7 +71,6 @@
desc = "a tear in space and time."
icon = 'icons/obj/wizard.dmi'
icon_state = "rift"
- unacidable = 1
anchored = TRUE
density = FALSE
diff --git a/code/modules/mob/living/deity/phenomena/generic.dm b/code/modules/mob/living/deity/phenomena/generic.dm
index 33b53f57bf5..633cd96eb7f 100644
--- a/code/modules/mob/living/deity/phenomena/generic.dm
+++ b/code/modules/mob/living/deity/phenomena/generic.dm
@@ -18,7 +18,7 @@
if(object_to_move)
events_repository.unregister(/decl/observ/destroyed, object_to_move,src)
object_to_move = new object_type()
- events_repository.register(/decl/observ/destroyed, object_to_move, src, .proc/add_object)
+ events_repository.register(/decl/observ/destroyed, object_to_move, src, PROC_REF(add_object))
/datum/phenomena/movable_object/activate(var/atom/a, var/mob/living/deity/user)
..()
diff --git a/code/modules/mob/living/deity/phenomena/starlight.dm b/code/modules/mob/living/deity/phenomena/starlight.dm
index 6a8a98f1990..762cb18d549 100644
--- a/code/modules/mob/living/deity/phenomena/starlight.dm
+++ b/code/modules/mob/living/deity/phenomena/starlight.dm
@@ -139,8 +139,8 @@
to_chat(L, "[whisper_from ? "The [whisper_from] speaks to you" : "You hear a whisper say"] \"[message]\"")
linked.eyenet.add_source(L)
- events_repository.register(/decl/observ/destroyed, L, src, .proc/deactivate_look)
- addtimer(CALLBACK(src, .proc/deactivate_look, L), 30 SECONDS)
+ events_repository.register(/decl/observ/destroyed, L, src, PROC_REF(deactivate_look))
+ addtimer(CALLBACK(src, PROC_REF(deactivate_look), L), 30 SECONDS)
/datum/phenomena/flickering_whisper/proc/deactivate_look(var/mob/viewer)
if(!linked.is_follower(viewer)) //Don't remove if they are follower
@@ -198,8 +198,8 @@
SET_STATUS_MAX(L, STAT_WEAK, 1)
new /obj/aura/starborn(L)
L.status_flags |= GODMODE
- events_repository.register(/decl/observ/destroyed, L,src,.proc/fail_ritual)
- addtimer(CALLBACK(src, .proc/succeed_ritual, L), 600 SECONDS) //6 minutes
+ events_repository.register(/decl/observ/destroyed, L,src,PROC_REF(fail_ritual))
+ addtimer(CALLBACK(src, PROC_REF(succeed_ritual), L), 600 SECONDS) //6 minutes
for(var/mob/living/player in global.player_list)
sound_to(player, 'sound/effects/cascade.ogg')
if(player?.mind?.assigned_job?.is_holy)
diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm
index bf5d487d5bc..1c102bb0552 100644
--- a/code/modules/mob/living/inventory.dm
+++ b/code/modules/mob/living/inventory.dm
@@ -2,21 +2,30 @@
var/_held_item_slot_selected
var/list/_held_item_slots
var/list/_inventory_slots
+ var/list/_inventory_slot_priority
var/pending_hand_rebuild
/mob/living/get_inventory_slots()
return _inventory_slots
+/mob/living/get_inventory_slot_priorities()
+ if(!_inventory_slot_priority)
+ _inventory_slot_priority = list()
+ var/list/all_slots = list()
+ for(var/slot in get_inventory_slots())
+ all_slots += get_inventory_slot_datum(slot)
+ for(var/datum/inventory_slot/inv_slot as anything in sortTim(all_slots, /proc/cmp_inventory_slot_desc))
+ _inventory_slot_priority += inv_slot.slot_id
+ return _inventory_slot_priority
+
/mob/living/get_inventory_slot_datum(var/slot)
return LAZYACCESS(_inventory_slots, slot)
/mob/living/get_held_item_slots()
return _held_item_slots
-// Temporary proc, replace when the main inventory rewrite goes in.
-/mob/living/get_all_valid_equipment_slots()
- for(var/slot in get_held_item_slots())
- LAZYDISTINCTADD(., slot)
+/mob/living/get_all_available_equipment_slots()
+ . = ..()
var/decl/species/my_species = get_species()
for(var/slot in my_species?.hud?.equip_slots)
LAZYDISTINCTADD(., slot)
@@ -30,17 +39,17 @@
qdel(existing_slot)
LAZYDISTINCTADD(_held_item_slots, held_slot.slot_id)
add_inventory_slot(held_slot)
- if(!get_active_hand())
+ if(!get_active_held_item_slot())
select_held_item_slot(held_slot.slot_id)
queue_hand_rebuild()
/mob/living/remove_held_item_slot(var/slot)
var/datum/inventory_slot/inv_slot = istype(slot, /datum/inventory_slot) ? slot : get_inventory_slot_datum(slot)
if(inv_slot)
- LAZYREMOVE(_held_item_slots, slot)
+ LAZYREMOVE(_held_item_slots, inv_slot.slot_id)
remove_inventory_slot(inv_slot)
var/held_slots = get_held_item_slots()
- if(get_active_held_item_slot() == slot && length(held_slots))
+ if(!get_active_held_item_slot() && length(held_slots))
select_held_item_slot(held_slots[1])
queue_hand_rebuild()
@@ -115,6 +124,7 @@
/mob/living/set_inventory_slots(var/list/new_slots)
var/list/old_slots = _inventory_slots
+ _inventory_slot_priority = null
_inventory_slots = null
// Keep held item slots.
@@ -147,16 +157,18 @@
qdel(old_slot)
/mob/living/add_inventory_slot(var/datum/inventory_slot/inv_slot)
+ _inventory_slot_priority = null
LAZYSET(_inventory_slots, inv_slot.slot_id, inv_slot)
/mob/living/remove_inventory_slot(var/slot)
+ _inventory_slot_priority = null
var/datum/inventory_slot/inv_slot = istype(slot, /datum/inventory_slot) ? slot : LAZYACCESS(_inventory_slots, slot)
if(inv_slot)
var/held = inv_slot.get_equipped_item()
if(held)
drop_from_inventory(held)
qdel(inv_slot)
- LAZYREMOVE(_inventory_slots, slot)
+ LAZYREMOVE(_inventory_slots, inv_slot.slot_id)
/mob/living/proc/get_jetpack()
var/obj/item/tank/jetpack/thrust = get_equipped_item(slot_back_str)
@@ -166,4 +178,7 @@
var/obj/item/rig/rig = thrust
for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules)
return module.jets
+ thrust = get_equipped_item(slot_s_store_str)
+ if(istype(thrust))
+ return thrust
return null
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index ef92418ffee..e05521f4a06 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -1,10 +1,10 @@
/mob/living/Life()
- set invisibility = 0
+ set invisibility = FALSE
set background = BACKGROUND_ENABLED
..()
- if (HasMovementHandler(/datum/movement_handler/mob/transformation/))
+ if (HasMovementHandler(/datum/movement_handler/mob/transformation))
return
// update the current life tick, can be used to e.g. only do something every 4 ticks
@@ -20,38 +20,47 @@
//Handle temperature/pressure differences between body and environment
handle_environment(loc.return_air())
-
- if(stat != DEAD && !is_in_stasis())
- //Breathing, if applicable
- handle_breathing()
- handle_nutrition_and_hydration()
- handle_immunity()
- //Body temperature adjusts itself (self-regulation)
- stabilize_body_temperature()
-
- // human/handle_regular_status_updates() needs a cleanup, as blindness should be handled in handle_disabilities()
handle_regular_status_updates() // Status & health update, are we dead or alive etc.
handle_stasis()
if(stat != DEAD)
+ if(!is_in_stasis())
+ . = handle_living_non_stasis_processes()
aura_check(AURA_TYPE_LIFE)
- //Check if we're on fire
- handle_fire()
-
for(var/obj/item/grab/G in get_active_grabs())
G.Process()
+ //Check if we're on fire
+ handle_fire()
handle_actions()
-
UpdateLyingBuckledAndVerbStatus()
-
handle_regular_hud_updates()
-
handle_status_effects()
return 1
+/mob/living/proc/handle_living_non_stasis_processes()
+ // hungy
+ handle_nutrition_and_hydration()
+ // Breathing, if applicable
+ handle_breathing()
+ // Mutations and radiation
+ handle_mutations_and_radiation()
+ // Chemicals in the body
+ handle_chemicals_in_body()
+ // Random events (vomiting etc)
+ handle_random_events()
+ // eye, ear, brain damages
+ handle_disabilities()
+ handle_immunity()
+ //Body temperature adjusts itself (self-regulation)
+ stabilize_body_temperature()
+ // Only handle AI stuff if we're not being played.
+ if(!key)
+ handle_legacy_ai()
+ return TRUE
+
/mob/living/proc/experiences_hunger_and_thirst()
return TRUE
@@ -67,6 +76,10 @@
return my_species.hunger_factor
return 0
+// Used to handle non-datum AI.
+/mob/living/proc/handle_legacy_ai()
+ return
+
/mob/living/proc/handle_nutrition_and_hydration()
SHOULD_CALL_PARENT(TRUE)
if(!experiences_hunger_and_thirst())
@@ -130,14 +143,14 @@
damage = FLOOR(damage * (my_species ? my_species.get_radiation_mod(src) : 1))
if(damage)
- adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT)
immunity = max(0, immunity - damage * 15 * RADIATION_SPEED_COEFFICIENT)
- updatehealth()
+ adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT)
var/list/limbs = get_external_organs()
if(!isSynthetic() && LAZYLEN(limbs))
var/obj/item/organ/external/O = pick(limbs)
if(istype(O))
O.add_autopsy_data("Radiation Poisoning", damage)
+
#undef RADIATION_SPEED_COEFFICIENT
// Get valid, unique reagent holders for metabolizing. Avoids metabolizing the same holder twice in a tick.
@@ -182,9 +195,8 @@
LAZYSET(chem_doses, T, dose)
if(LAZYACCESS(chem_doses, T) <= 0)
LAZYREMOVE(chem_doses, T)
-
if(apply_chemical_effects())
- updatehealth()
+ update_health()
return TRUE
@@ -192,9 +204,9 @@
var/burn_regen = GET_CHEMICAL_EFFECT(src, CE_REGEN_BURN)
var/brute_regen = GET_CHEMICAL_EFFECT(src, CE_REGEN_BRUTE)
if(burn_regen || brute_regen)
- heal_organ_damage(brute_regen, burn_regen)
+ heal_organ_damage(brute_regen, burn_regen, FALSE) // apply_chemical_effects() calls update_health() if it returns true; don't do it unnecessarily.
return TRUE
-
+ return FALSE
/mob/living/proc/handle_random_events()
return
@@ -214,7 +226,7 @@
// If we're standing in the rain, use the turf weather.
. = istype(actual_loc) && actual_loc.weather
if(!.) // If we're under or inside shelter, use the z-level rain (for ambience)
- . = SSweather.get_weather_for_level(my_turf.z)
+ . = SSweather.weather_by_z[my_turf.z]
/mob/living/proc/handle_environment(var/datum/gas_mixture/environment)
@@ -254,37 +266,76 @@
//This updates the health and status of the mob (conscious, unconscious, dead)
/mob/living/proc/handle_regular_status_updates()
- updatehealth()
- if(stat != DEAD)
- if(HAS_STATUS(src, STAT_PARA))
- set_stat(UNCONSCIOUS)
- else if (status_flags & FAKEDEATH)
- set_stat(UNCONSCIOUS)
- else
- set_stat(CONSCIOUS)
+
+ SHOULD_CALL_PARENT(TRUE)
+
+ // Check if we are (or should be) dead at this point.
+ update_health()
+
+ if(!handle_some_updates())
+ return FALSE
+
+ // Godmode just skips most of this processing.
+ if(status_flags & GODMODE)
+ set_stat(CONSCIOUS)
+ germ_level = 0
return TRUE
+ // TODO: move hallucinations into a status condition decl.
+ if(hallucination_power)
+ handle_hallucinations()
+
+ // Increase germ_level regularly
+ if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
+ germ_level++
+ // If you're dirty, your gloves will become dirty, too.
+ var/obj/item/gloves = get_equipped_item(slot_gloves_str)
+ if(gloves && germ_level > gloves.germ_level && prob(10))
+ gloves.germ_level++
+
+ // If we're dead, don't continue further.
+ if(stat == DEAD)
+ return FALSE
+
+ // Handle some general state updates.
+ if(HAS_STATUS(src, STAT_PARA))
+ set_stat(UNCONSCIOUS)
+ else if (status_flags & FAKEDEATH)
+ set_stat(UNCONSCIOUS)
+ else
+ set_stat(CONSCIOUS)
+ return TRUE
+
/mob/living/proc/handle_disabilities()
handle_impaired_vision()
handle_impaired_hearing()
/mob/living/proc/handle_impaired_vision()
- if((sdisabilities & BLINDED) || stat) //blindness from disability or unconsciousness doesn't get better on its own
+ SHOULD_CALL_PARENT(TRUE)
+ if(stat == DEAD)
+ SET_STATUS_MAX(src, STAT_BLIND, 0)
+ if(stat != CONSCIOUS && (sdisabilities & BLINDED)) //blindness from disability or unconsciousness doesn't get better on its own
SET_STATUS_MAX(src, STAT_BLIND, 2)
+ else
+ return TRUE
+ return FALSE
/mob/living/proc/handle_impaired_hearing()
if((sdisabilities & DEAFENED) || stat) //disabled-deaf, doesn't get better on its own
SET_STATUS_MAX(src, STAT_TINNITUS, 2)
+/mob/living/proc/should_do_hud_updates()
+ return client
+
//this handles hud updates. Calls update_vision() and handle_hud_icons()
/mob/living/proc/handle_regular_hud_updates()
- if(!client) return 0
-
+ SHOULD_CALL_PARENT(TRUE)
+ if(!should_do_hud_updates())
+ return FALSE
handle_hud_icons()
handle_vision()
handle_low_light_vision()
-
- return 1
+ return TRUE
/mob/living/proc/handle_low_light_vision()
@@ -315,20 +366,16 @@
/mob/living/proc/handle_vision()
update_sight()
-
if(stat == DEAD)
return
-
- if(GET_STATUS(src, STAT_BLIND))
+ if(is_blind())
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
else
clear_fullscreen("blind")
set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1)
set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry)
set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high)
-
set_fullscreen(stat == UNCONSCIOUS, "blackout", /obj/screen/fullscreen/blackout)
-
if(machine)
var/viewflags = machine.check_eye(src)
if(viewflags < 0)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 3608af3aba9..c82af3d160a 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1,5 +1,6 @@
/mob/living/Initialize()
+ current_health = get_max_health()
original_fingerprint_seed = sequential_id(/mob)
fingerprint = md5(num2text(original_fingerprint_seed))
original_genetic_seed = sequential_id(/mob)
@@ -185,22 +186,35 @@ default behaviour is:
/mob/living/verb/succumb()
set hidden = 1
- if ((src.health < src.maxHealth/2)) // Health below half of maxhealth.
- src.adjustBrainLoss(src.health + src.maxHealth * 2) // Deal 2x health in BrainLoss damage, as before but variable.
- updatehealth()
- to_chat(src, "You have given up life and succumbed to death.")
+ var/current_max_health = get_max_health()
+ if (current_health < (current_max_health/2)) // Health below half of maxhealth.
+ adjustBrainLoss(current_max_health * 2) // Deal 2x health in BrainLoss damage, as before but variable.
+ to_chat(src, SPAN_NOTICE("You have given up life and succumbed to death."))
/mob/living/proc/update_body(var/update_icons=1)
if(update_icons)
queue_icon_update()
-/mob/living/proc/updatehealth()
+/mob/living/proc/should_be_dead()
+ return current_health <= 0
+
+/mob/living/proc/get_total_life_damage()
+ return (getOxyLoss()+getToxLoss()+getFireLoss()+getBruteLoss()+getCloneLoss()+getHalLoss())
+
+/mob/living/proc/update_health()
+ SHOULD_CALL_PARENT(TRUE)
if(status_flags & GODMODE)
- health = maxHealth
+ current_health = get_max_health()
set_stat(CONSCIOUS)
- else
- health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - getHalLoss()
+ return
+ var/max_health = get_max_health()
+ current_health = clamp(max_health-get_total_life_damage(), -(max_health), max_health)
+ if(stat != DEAD && should_be_dead())
+ death()
+ if(!QDELETED(src)) // death() may delete or remove us
+ set_status(STAT_BLIND, 1)
+ set_status(STAT_SILENCE, 0)
//This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually
//affects them once clothing is factored in. ~Errorage
@@ -231,19 +245,24 @@ default behaviour is:
return btemperature
+/mob/living/proc/setBruteLoss(var/amount)
+ adjustBruteLoss((amount * 0.5)-getBruteLoss())
+
/mob/living/proc/getBruteLoss()
- return maxHealth - health
+ return get_max_health() - current_health
-/mob/living/proc/adjustBruteLoss(var/amount)
- if (status_flags & GODMODE)
- return
- health = clamp(health - amount, 0, maxHealth)
+/mob/living/proc/adjustBruteLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(TRUE)
+ if(do_update_health)
+ update_health()
/mob/living/proc/getOxyLoss()
return 0
-/mob/living/proc/adjustOxyLoss(var/amount)
- return
+/mob/living/proc/adjustOxyLoss(var/damage, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(TRUE)
+ if(do_update_health)
+ update_health()
/mob/living/proc/setOxyLoss(var/amount)
return
@@ -251,8 +270,8 @@ default behaviour is:
/mob/living/proc/getToxLoss()
return 0
-/mob/living/proc/adjustToxLoss(var/amount)
- adjustBruteLoss(amount * 0.5)
+/mob/living/proc/adjustToxLoss(var/amount, var/do_update_health = TRUE)
+ adjustBruteLoss(amount * 0.5, do_update_health)
/mob/living/proc/setToxLoss(var/amount)
adjustBruteLoss((amount * 0.5)-getBruteLoss())
@@ -260,8 +279,8 @@ default behaviour is:
/mob/living/proc/getFireLoss()
return
-/mob/living/proc/adjustFireLoss(var/amount)
- adjustBruteLoss(amount * 0.5)
+/mob/living/proc/adjustFireLoss(var/amount, var/do_update_health = TRUE)
+ adjustBruteLoss(amount * 0.5, do_update_health)
/mob/living/proc/setFireLoss(var/amount)
adjustBruteLoss((amount * 0.5)-getBruteLoss())
@@ -269,17 +288,16 @@ default behaviour is:
/mob/living/proc/getHalLoss()
return 0
-/mob/living/proc/adjustHalLoss(var/amount)
- adjustBruteLoss(amount * 0.5)
+/mob/living/proc/adjustHalLoss(var/amount, var/do_update_health = TRUE)
+ adjustBruteLoss(amount * 0.5, do_update_health)
/mob/living/proc/setHalLoss(var/amount)
adjustBruteLoss((amount * 0.5)-getBruteLoss())
-/mob/living/proc/getBrainLoss()
- return 0
-
-/mob/living/proc/adjustBrainLoss(var/amount)
- return
+/mob/living/proc/adjustBrainLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(TRUE)
+ if(do_update_health)
+ update_health()
/mob/living/proc/setBrainLoss(var/amount)
return
@@ -290,14 +308,24 @@ default behaviour is:
/mob/living/proc/setCloneLoss(var/amount)
return
-/mob/living/proc/adjustCloneLoss(var/amount)
- return
+/mob/living/proc/adjustCloneLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(TRUE)
+ if(do_update_health)
+ update_health()
-/mob/living/proc/getMaxHealth()
- return maxHealth
+/mob/living/proc/get_health_ratio() // ratio might be the wrong word
+ return current_health/get_max_health()
-/mob/living/proc/setMaxHealth(var/newMaxHealth)
- maxHealth = newMaxHealth
+/mob/living/proc/get_health_percent(var/sigfig = 1)
+ return round(get_health_ratio()*100, sigfig)
+
+/mob/living/proc/get_max_health()
+ return mob_default_max_health
+
+/mob/living/proc/set_max_health(var/val, var/skip_health_update = FALSE)
+ mob_default_max_health = val
+ if(!skip_health_update)
+ update_health()
// ++++ROCKDTBEN++++ MOB PROCS //END
@@ -344,30 +372,27 @@ default behaviour is:
// heal ONE external organ, organ gets randomly selected from damaged ones.
-/mob/living/proc/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE)
- adjustBruteLoss(-brute)
- adjustFireLoss(-burn)
- src.updatehealth()
+/mob/living/proc/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE)
+ adjustBruteLoss(-brute, do_update_health = FALSE)
+ adjustFireLoss(-burn, do_update_health = update_health)
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb)
- if(!(status_flags & GODMODE))
- adjustBruteLoss(brute)
- adjustFireLoss(burn)
- updatehealth()
+ if(status_flags & GODMODE)
+ return
+ adjustBruteLoss(brute, do_update_health = FALSE)
+ adjustFireLoss(burn)
// heal MANY external organs, in random order
/mob/living/proc/heal_overall_damage(var/brute, var/burn)
- adjustBruteLoss(-brute)
+ adjustBruteLoss(-brute, do_update_health = FALSE)
adjustFireLoss(-burn)
- src.updatehealth()
// damage MANY external organs, in random order
/mob/living/proc/take_overall_damage(var/brute, var/burn, var/used_weapon = null)
if(status_flags & GODMODE) return 0 //godmode
- adjustBruteLoss(brute)
+ adjustBruteLoss(brute, do_update_health = FALSE)
adjustFireLoss(burn)
- src.updatehealth()
/mob/living/proc/restore_all_organs()
return
@@ -470,7 +495,7 @@ default behaviour is:
brain.update_icon()
..(repair_brain)
-/mob/living/proc/UpdateDamageIcon()
+/mob/living/proc/update_damage_icon()
return
/mob/living/handle_grabs_after_move(var/turf/old_loc, var/direction)
@@ -719,21 +744,10 @@ default behaviour is:
update_icon()
return 1
-/mob/living/update_icon()
- ..()
- compile_overlays()
-
-/mob/living/on_update_icon()
- SHOULD_CALL_PARENT(TRUE)
- ..()
- cut_overlays()
- if(auras)
- for(var/obj/aura/aura as anything in auras)
- var/image/A = new()
- A.appearance = aura
- add_overlay(A)
-
/mob/living/Destroy()
+ QDEL_NULL(aiming)
+ QDEL_NULL_LIST(_hallucinations)
+ QDEL_NULL_LIST(aimed_at_by)
if(stressors) // Do not QDEL_NULL, keys are managed instances.
stressors = null
if(auras)
@@ -844,9 +858,12 @@ default behaviour is:
/mob/living/proc/eyecheck()
return FLASH_PROTECTION_NONE
-/mob/living/proc/get_max_nutrition()
+/mob/living/proc/get_satiated_nutrition()
return 500
+/mob/living/proc/get_max_nutrition()
+ return 550
+
/mob/living/proc/set_nutrition(var/amt)
nutrition = clamp(amt, 0, get_max_nutrition())
@@ -914,9 +931,6 @@ default behaviour is:
else if(skip_delays || do_after(src, 5 SECONDS, user))
. = ..()
-/mob/living/can_be_injected_by(var/atom/injector)
- return ..() && (can_inject(null, 0, BP_CHEST) || can_inject(null, 0, BP_GROIN))
-
/mob/living/handle_grab_damage()
..()
if(!has_gravity())
@@ -937,19 +951,33 @@ default behaviour is:
/mob/living/proc/can_do_special_ranged_attack(var/check_flag = TRUE)
return TRUE
+/mob/living/proc/get_food_satiation()
+ . = get_nutrition() + (get_ingested_reagents()?.total_volume * 10)
+
/mob/living/proc/get_ingested_reagents()
+ RETURN_TYPE(/datum/reagents)
return reagents
-/mob/living/proc/should_have_organ(var/organ_check)
- return FALSE
+/mob/living/proc/should_have_organ(organ_to_check)
+ var/decl/bodytype/root_bodytype = get_bodytype()
+ return root_bodytype?.has_organ[organ_to_check]
+
+/// Returns null if the mob's bodytype doesn't have a limb tag by default.
+/// Otherwise, returns the data of the limb instead.
+/mob/living/proc/should_have_limb(limb_to_check)
+ var/decl/bodytype/root_bodytype = get_bodytype()
+ return root_bodytype?.has_limbs[limb_to_check]
/mob/living/proc/get_contact_reagents()
+ RETURN_TYPE(/datum/reagents)
return reagents
/mob/living/proc/get_injected_reagents()
+ RETURN_TYPE(/datum/reagents)
return reagents
/mob/living/proc/get_inhaled_reagents()
+ RETURN_TYPE(/datum/reagents)
return reagents
/mob/living/proc/get_adjusted_metabolism(metabolism)
@@ -958,7 +986,7 @@ default behaviour is:
/mob/living/get_admin_job_string()
return "Living"
-/mob/living/handle_mouse_drop(atom/over, mob/user)
+/mob/living/handle_mouse_drop(atom/over, mob/user, params)
if(!anchored && user == src && user != over)
if(isturf(over))
@@ -1041,46 +1069,39 @@ default behaviour is:
if(hud_used.action_buttons_hidden)
if(!hud_used.hide_actions_toggle)
hud_used.hide_actions_toggle = new(hud_used)
- hud_used.hide_actions_toggle.UpdateIcon()
+ hud_used.hide_actions_toggle.update_icon()
hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(1)
client.screen += hud_used.hide_actions_toggle
return
var/button_number = 0
- for(var/datum/action/A in actions)
+ for(var/datum/action/action in actions)
button_number++
- if(A.button == null)
- var/obj/screen/action_button/N = new(hud_used)
- N.owner = A
- A.button = N
-
- var/obj/screen/action_button/B = A.button
-
- B.UpdateIcon()
-
- B.SetName(A.UpdateName())
- B.desc = A.UpdateDesc()
-
- client.screen += B
- B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number)
+ if(isnull(action.button))
+ action.button = new /obj/screen/action_button(null, src, null, null, null, action)
+ action.button.SetName(action.UpdateName())
+ action.button.desc = action.UpdateDesc()
+ action.button.update_icon()
+ action.button.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number)
+ client.screen |= action.button
if(button_number > 0)
if(!hud_used.hide_actions_toggle)
- hud_used.hide_actions_toggle = new(hud_used)
- hud_used.hide_actions_toggle.InitialiseIcon(src)
+ hud_used.hide_actions_toggle = new(hud_used, src)
hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1)
client.screen += hud_used.hide_actions_toggle
/mob/living/handle_fall_effect(var/turf/landing)
..()
- apply_fall_damage(landing)
- if(client)
- var/area/A = get_area(landing)
- if(A)
- A.alert_on_fall(src)
+ if(istype(landing) && !landing.is_open())
+ apply_fall_damage(landing)
+ if(client)
+ var/area/A = get_area(landing)
+ if(A)
+ A.alert_on_fall(src)
/mob/living/proc/apply_fall_damage(var/turf/landing)
- adjustBruteLoss(rand(max(1, CEILING(mob_size * 0.33)), max(1, CEILING(mob_size * 0.66))))
+ adjustBruteLoss(rand(max(1, CEILING(mob_size * 0.33)), max(1, CEILING(mob_size * 0.66))) * get_fall_height())
/mob/living/proc/get_toxin_resistance()
var/decl/species/species = get_species()
@@ -1135,30 +1156,6 @@ default behaviour is:
/mob/living/proc/get_seconds_until_next_special_ability_string()
return ticks2readable(next_special_ability - world.time)
-//Get species or synthetic temp if the mob is a FBP/robot. Used when a synthetic mob is exposed to a temp check.
-//Essentially, used when a synthetic mob should act diffferently than a normal type mob.
-/mob/living/get_temperature_threshold(var/threshold)
- if(isSynthetic())
- switch(threshold)
- if(COLD_LEVEL_1)
- return SYNTH_COLD_LEVEL_1
- if(COLD_LEVEL_2)
- return SYNTH_COLD_LEVEL_2
- if(COLD_LEVEL_3)
- return SYNTH_COLD_LEVEL_3
- if(HEAT_LEVEL_1)
- return SYNTH_HEAT_LEVEL_1
- if(HEAT_LEVEL_2)
- return SYNTH_HEAT_LEVEL_2
- if(HEAT_LEVEL_3)
- return SYNTH_HEAT_LEVEL_3
- else
- CRASH("synthetic get_temperature_threshold() called with invalid threshold value.")
- var/decl/species/my_species = get_species()
- if(my_species)
- return my_species.get_species_temperature_threshold(threshold)
- return ..()
-
/mob/living/proc/handle_some_updates()
//We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle
return life_tick <= 5 || !timeofdeath || (timeofdeath >= 5 && (world.time-timeofdeath) <= 10 MINUTES)
@@ -1173,18 +1170,23 @@ default behaviour is:
var/decl/species/my_species = get_species()
return my_species?.get_footstep(src, footstep_type)
-/mob/living/GetIdCards(exceptions = null)
+/mob/living/GetIdCards(list/exceptions)
. = ..()
- var/list/candidates = get_held_items()
- var/id = get_equipped_item(slot_wear_id_str)
- if(id)
- LAZYDISTINCTADD(candidates, id)
- for(var/atom/movable/candidate in candidates)
- if(!candidate || is_type_in_list(candidate, exceptions))
- continue
- var/list/obj/item/card/id/id_cards = candidate.GetIdCards()
- if(LAZYLEN(id_cards))
- LAZYDISTINCTADD(., id_cards)
+ // Grab our equipped ID.
+ // TODO: consider just iterating the entire equipment list here?
+ // Mask/neck slot lanyards or IDs as uniform accessories someday?
+ // TODO: May need handling for a held or equipped item returning
+ // multiple ID cards, currently will take the last one added.
+ var/obj/item/id = get_equipped_item(slot_wear_id_str)
+ if(istype(id))
+ id = id.GetIdCard()
+ if(istype(id) && !is_type_in_list(id, exceptions))
+ LAZYDISTINCTADD(., id)
+ // Go over everything we're holding.
+ for(var/obj/item/thing in get_held_items())
+ thing = thing.GetIdCard()
+ if(istype(thing) && !is_type_in_list(thing, exceptions))
+ LAZYDISTINCTADD(., thing)
/mob/living/proc/update_surgery(update_icons)
SHOULD_CALL_PARENT(TRUE)
@@ -1218,3 +1220,92 @@ default behaviour is:
LAZYADD(overlays_to_add, image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER))
total.overlays |= overlays_to_add
set_current_mob_overlay(HO_SURGERY_LAYER, total, update_icons)
+
+/mob/living/get_overhead_text_x_offset()
+ var/decl/bodytype/bodytype = get_bodytype()
+ return ..() + bodytype?.antaghud_offset_x
+
+/mob/living/get_overhead_text_y_offset()
+ var/decl/bodytype/bodytype = get_bodytype()
+ return ..() + bodytype?.antaghud_offset_y
+
+// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc.
+/mob/living/proc/get_authentification_rank(if_no_id = "No id", if_no_job = "No job")
+ var/obj/item/card/id/id = GetIdCard()
+ return istype(id) ? (id.position || if_no_job) : if_no_id
+
+//gets assignment from ID or ID inside PDA or PDA itself
+//Useful when player do something with computers
+/mob/living/proc/get_assignment(if_no_id = "No id", if_no_job = "No job")
+ var/obj/item/card/id/id = GetIdCard()
+ if(istype(id))
+ return id.assignment ? id.assignment : if_no_job
+ return if_no_id
+
+//gets name from ID or ID inside PDA or PDA itself
+//Useful when players do something with computers
+/mob/living/proc/get_authentification_name(if_no_id = "Unknown")
+ var/obj/item/card/id/id = GetIdCard()
+ if(istype(id))
+ return id.registered_name
+ return if_no_id
+
+//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
+/mob/living/proc/get_visible_name()
+ var/face_name = get_face_name()
+ var/id_name = get_id_name("")
+ if((face_name == "Unknown") && id_name && (id_name != face_name))
+ return "[face_name] (as [id_name])"
+ return face_name
+
+//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
+//Also used in AI tracking people by face, so added in checks for head coverings like masks and helmets
+/mob/living/proc/get_face_name()
+ if(identity_is_visible())
+ return real_name
+ var/obj/item/clothing/mask = get_equipped_item(slot_wear_mask_str)
+ var/obj/item/clothing/head = get_equipped_item(slot_head_str)
+ if(istype(head) && head.visible_name)
+ return head.visible_name
+ else if(istype(mask) && mask.visible_name)
+ return mask.visible_name
+ else if(get_rig()?.visible_name)
+ return get_rig()?.visible_name
+ return "Unknown"
+
+/mob/living/proc/identity_is_visible()
+ if(!real_name)
+ return FALSE
+ var/obj/item/clothing/mask/mask = get_equipped_item(slot_wear_mask_str)
+ var/obj/item/head = get_equipped_item(slot_head_str)
+ if((mask?.flags_inv & HIDEFACE) || (head?.flags_inv & HIDEFACE))
+ return FALSE
+ if(should_have_limb(BP_HEAD))
+ var/obj/item/organ/external/skull = GET_EXTERNAL_ORGAN(src, BP_HEAD)
+ if(!skull || (skull.status & ORGAN_DISFIGURED)) //Face is unrecognizeable
+ return FALSE
+ return TRUE
+
+//gets name from ID or PDA itself, ID inside PDA doesn't matter
+//Useful when player is being seen by other mobs
+/mob/living/proc/get_id_name(if_no_id = "Unknown")
+ return GetIdCard(exceptions = list(/obj/item/holder))?.registered_name || if_no_id
+
+/mob/living/get_default_temperature_threshold(threshold)
+ if(isSynthetic())
+ switch(threshold)
+ if(COLD_LEVEL_1)
+ return SYNTH_COLD_LEVEL_1
+ if(COLD_LEVEL_2)
+ return SYNTH_COLD_LEVEL_2
+ if(COLD_LEVEL_3)
+ return SYNTH_COLD_LEVEL_3
+ if(HEAT_LEVEL_1)
+ return SYNTH_HEAT_LEVEL_1
+ if(HEAT_LEVEL_2)
+ return SYNTH_HEAT_LEVEL_2
+ if(HEAT_LEVEL_3)
+ return SYNTH_HEAT_LEVEL_3
+ else
+ CRASH("synthetic get_default_temperature_threshold() called with invalid threshold value.")
+ return ..()
diff --git a/code/modules/mob/living/living_appearance.dm b/code/modules/mob/living/living_appearance.dm
new file mode 100644
index 00000000000..359cb835ccf
--- /dev/null
+++ b/code/modules/mob/living/living_appearance.dm
@@ -0,0 +1,80 @@
+/mob/living
+ var/list/mob_overlays[TOTAL_OVER_LAYERS]
+ var/list/mob_underlays[TOTAL_UNDER_LAYERS]
+
+/mob/living/update_icon()
+ ..()
+ compile_overlays()
+
+/mob/living/on_update_icon()
+ SHOULD_CALL_PARENT(TRUE)
+ ..()
+ cut_overlays()
+ if(auras)
+ for(var/obj/aura/aura as anything in auras)
+ var/image/A = new()
+ A.appearance = aura
+ add_overlay(A)
+ try_refresh_visible_overlays()
+
+/mob/living/proc/get_skin_colour()
+ return
+
+/mob/living/proc/get_eye_colour()
+ return
+
+/mob/living/proc/get_lip_colour()
+ return
+
+/mob/living/proc/get_hairstyle()
+ return
+
+/mob/living/proc/get_facial_hairstyle()
+ return
+
+/mob/living/proc/get_hair_colour()
+ return
+
+/mob/living/proc/get_facial_hair_colour()
+ return
+
+/mob/living/proc/set_skin_colour(var/new_color)
+ return get_skin_colour() != new_color
+
+/mob/living/proc/set_eye_colour(var/new_color)
+ return get_eye_colour() != new_color
+
+/mob/living/proc/set_lip_colour(var/new_color)
+ return get_lip_colour() != new_color
+
+/mob/living/proc/set_facial_hair_colour(var/new_color, var/skip_update = FALSE)
+ return get_facial_hair_colour() != new_color
+
+/mob/living/proc/set_hair_colour(var/new_color, var/skip_update = FALSE)
+ return get_hair_colour() != new_color
+
+/mob/living/proc/set_hairstyle(var/new_hairstyle)
+ return new_hairstyle && get_hairstyle() != new_hairstyle && ispath(new_hairstyle, /decl/sprite_accessory/hair)
+
+/mob/living/proc/set_facial_hairstyle(var/new_facial_hairstyle)
+ return new_facial_hairstyle && get_facial_hairstyle() != new_facial_hairstyle && ispath(new_facial_hairstyle, /decl/sprite_accessory/facial_hair)
+
+/mob/living/get_all_current_mob_overlays()
+ return mob_overlays
+
+/mob/living/set_current_mob_overlay(var/overlay_layer, var/image/overlay, var/redraw_mob = TRUE)
+ mob_overlays[overlay_layer] = overlay
+ ..()
+
+/mob/living/get_current_mob_overlay(var/overlay_layer)
+ return mob_overlays[overlay_layer]
+
+/mob/living/get_all_current_mob_underlays()
+ return mob_underlays
+
+/mob/living/set_current_mob_underlay(var/underlay_layer, var/image/underlay, var/redraw_mob = TRUE)
+ mob_underlays[underlay_layer] = underlay
+ ..()
+
+/mob/living/get_current_mob_underlay(var/underlay_layer)
+ return mob_underlays[underlay_layer]
diff --git a/code/modules/mob/living/living_attackhand.dm b/code/modules/mob/living/living_attackhand.dm
index fbfc94d3ab1..2958ceb4b6a 100644
--- a/code/modules/mob/living/living_attackhand.dm
+++ b/code/modules/mob/living/living_attackhand.dm
@@ -5,15 +5,6 @@
SHOULD_CALL_PARENT(TRUE)
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- if(hattable && hattable.hat)
- hattable.hat.forceMove(get_turf(src))
- user.put_in_hands(hattable.hat)
- user.visible_message(SPAN_DANGER("\The [user] removes \the [src]'s [hattable.hat]!"))
- hattable.hat = null
- update_icon()
- return TRUE
-
switch(user.a_intent)
if(I_HURT)
. = default_hurt_interaction(user)
diff --git a/code/modules/mob/living/living_bodytemp.dm b/code/modules/mob/living/living_bodytemp.dm
index 58a184891ab..eee7572b398 100644
--- a/code/modules/mob/living/living_bodytemp.dm
+++ b/code/modules/mob/living/living_bodytemp.dm
@@ -27,8 +27,8 @@
if (abs(body_temperature_difference) < 0.5)
return //fuck this precision
- var/cold_1 = get_temperature_threshold(COLD_LEVEL_1)
- var/heat_1 = get_temperature_threshold(HEAT_LEVEL_1)
+ var/cold_1 = get_mob_temperature_threshold(COLD_LEVEL_1)
+ var/heat_1 = get_mob_temperature_threshold(HEAT_LEVEL_1)
if(bodytemperature < cold_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
var/nut_remove = 10 * DEFAULT_HUNGER_FACTOR
if(get_nutrition() >= nut_remove) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up.
diff --git a/code/modules/mob/living/living_breath.dm b/code/modules/mob/living/living_breath.dm
index 06a3150811d..57ad8ef78a7 100644
--- a/code/modules/mob/living/living_breath.dm
+++ b/code/modules/mob/living/living_breath.dm
@@ -34,7 +34,7 @@
if(ticks_since_last_successful_breath>0) //Suffocating so do not take a breath
ticks_since_last_successful_breath--
if (prob(10) && !is_asystole() && active_breathe) //Gasp per 10 ticks? Sounds about right.
- INVOKE_ASYNC(src, .proc/emote, "gasp")
+ INVOKE_ASYNC(src, PROC_REF(emote), "gasp")
else
//Okay, we can breathe, now check if we can get air
var/volume_needed = get_breath_volume()
@@ -57,8 +57,8 @@
// First handle being in a submerged environment.
var/datum/gas_mixture/breath
- var/turf/my_turf = get_turf(src)
- if(istype(my_turf) && my_turf.is_flooded(lying))
+ if(is_flooded(lying))
+ var/turf/my_turf = get_turf(src)
//Can we get air from the turf above us?
var/can_breathe_air_above = FALSE
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 63e2dc294da..5cfb37d77a8 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -170,7 +170,7 @@
/mob/living/momentum_do(var/power, var/datum/thrownthing/TT, var/atom/movable/AM)
if(power >= 0.75) //snowflake to enable being pinned to walls
var/direction = TT.init_dir
- throw_at(get_edge_target_turf(src, direction), min((TT.maxrange - TT.dist_travelled) * power, 10), throw_speed * min(power, 1.5), callback = CALLBACK(src,/mob/living/proc/pin_to_wall,AM,direction))
+ throw_at(get_edge_target_turf(src, direction), min((TT.maxrange - TT.dist_travelled) * power, 10), throw_speed * min(power, 1.5), callback = CALLBACK(src, TYPE_PROC_REF(/mob/living, pin_to_wall), AM, direction))
visible_message(SPAN_DANGER("\The [src] staggers under the impact!"),SPAN_DANGER("You stagger under the impact!"))
return
@@ -222,23 +222,25 @@
if(!damage || !istype(user))
return
- adjustBruteLoss(damage)
admin_attack_log(user, src, "Attacked", "Was attacked", "attacked")
src.visible_message("\The [user] has [attack_message] \the [src]!")
+ adjustBruteLoss(damage)
user.do_attack_animation(src)
- spawn(1) updatehealth()
return 1
+/mob/living/proc/can_ignite()
+ return fire_stacks > 0 && !on_fire
+
/mob/living/proc/IgniteMob()
- if(fire_stacks > 0 && !on_fire)
- on_fire = 1
+ if(can_ignite())
+ on_fire = TRUE
set_light(4, l_color = COLOR_ORANGE)
update_fire()
/mob/living/proc/ExtinguishMob()
if(on_fire)
- on_fire = 0
+ on_fire = FALSE
fire_stacks = 0
set_light(0)
update_fire()
@@ -269,12 +271,16 @@
var/turf/location = get_turf(src)
location.hotspot_expose(fire_burn_temperature(), 50, 1)
+/mob/living/proc/increase_fire_stacks(exposed_temperature)
+ if(fire_stacks <= 4 || fire_burn_temperature() < exposed_temperature)
+ adjust_fire_stacks(2)
+
/mob/living/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
//once our fire_burn_temperature has reached the temperature of the fire that's giving fire_stacks, stop adding them.
//allow fire_stacks to go up to 4 for fires cooler than 700 K, since are being immersed in flame after all.
- if(fire_stacks <= 4 || fire_burn_temperature() < exposed_temperature)
- adjust_fire_stacks(2)
+ increase_fire_stacks(exposed_temperature)
IgniteMob()
+ return ..()
/mob/living/proc/get_cold_protection()
return 0
@@ -297,4 +303,34 @@
/mob/living/lava_act(datum/gas_mixture/air, temperature, pressure)
fire_act(air, temperature)
FireBurn(0.4*vsc.fire_firelevel_multiplier, temperature, pressure)
- . = (health <= 0) ? ..() : FALSE
+ . = (current_health <= 0) ? ..() : FALSE
+
+// called when something steps onto a mob
+// this handles mulebots and vehicles
+/mob/living/Crossed(var/atom/movable/AM)
+ AM.crossed_mob(src)
+
+/mob/living/proc/solvent_act(var/severity, var/amount_per_item, var/solvent_power = MAT_SOLVENT_STRONG)
+
+ for(var/slot in global.standard_headgear_slots)
+ var/obj/item/thing = get_equipped_item(slot)
+ if(!istype(thing))
+ continue
+ if(!thing.solvent_can_melt(solvent_power) || !try_unequip(thing))
+ to_chat(src, SPAN_NOTICE("Your [thing] protects you from the solvent."))
+ return TRUE
+ to_chat(src, SPAN_DANGER("Your [thing] dissolves!"))
+ qdel(thing)
+ severity -= amount_per_item
+ if(severity <= 0)
+ return TRUE
+
+ // TODO move this to a contact var or something.
+ if(solvent_power >= MAT_SOLVENT_STRONG)
+ var/screamed
+ for(var/obj/item/organ/external/affecting in get_external_organs())
+ if(!screamed && affecting.can_feel_pain())
+ screamed = TRUE
+ emote("scream")
+ affecting.status |= ORGAN_DISFIGURED
+ take_organ_damage(0, severity, override_droplimb = DISMEMBER_METHOD_ACID)
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 4020796aa03..7eab17ec15a 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -5,8 +5,8 @@
abstract_type = /mob/living
//Health and life related vars
- var/maxHealth = 100 //Maximum health that should be possible.
- var/health = 100 //A mob's health
+ var/mob_default_max_health = 100 //Maximum health that should be possible.
+ var/current_health = INFINITY // A mob's current health. Set by update_health(). Defaults to INFINITY so mobs don't die on init.
var/hud_updateflag = 0
diff --git a/code/modules/mob/living/living_dreams.dm b/code/modules/mob/living/living_dreams.dm
new file mode 100644
index 00000000000..53b15252827
--- /dev/null
+++ b/code/modules/mob/living/living_dreams.dm
@@ -0,0 +1,14 @@
+/mob/living
+ var/dreaming = FALSE
+
+/mob/living/proc/handle_dreams()
+ set waitfor = FALSE
+ if(!client || dreaming || !prob(5))
+ return
+ dreaming = TRUE
+ for(var/i = 1 to rand(1,4))
+ to_chat(src, SPAN_NOTICE("... [pick(SSlore.dreams)] ..."))
+ sleep(rand(4 SECONDS, 7 SECONDS))
+ if(!HAS_STATUS(src, STAT_ASLEEP))
+ break
+ dreaming = FALSE
diff --git a/code/modules/mob/living/living_hallucinations.dm b/code/modules/mob/living/living_hallucinations.dm
new file mode 100644
index 00000000000..c5e4d290f96
--- /dev/null
+++ b/code/modules/mob/living/living_hallucinations.dm
@@ -0,0 +1,52 @@
+/mob/living
+ var/hallucination_power = 0
+ var/hallucination_duration = 0
+ var/next_hallucination
+ var/list/_hallucinations
+
+/mob/living/proc/adjust_hallucination(duration, power)
+ hallucination_duration = max(0, hallucination_duration + duration)
+ hallucination_power = max(0, hallucination_power + power)
+
+/mob/living/proc/set_hallucination(duration, power)
+ hallucination_duration = max(hallucination_duration, duration)
+ hallucination_power = max(hallucination_power, power)
+
+/mob/living/proc/handle_hallucinations()
+ //Tick down the duration
+ hallucination_duration = max(0, hallucination_duration - 1)
+ //Adjust power if we have some chems that affect it
+ if(has_chemical_effect(CE_MIND, threshold_under = -1))
+ hallucination_power = hallucination_power++
+ else if(has_chemical_effect(CE_MIND, threshold_under = 0))
+ hallucination_power = min(hallucination_power++, 50)
+ else if(has_chemical_effect(CE_MIND, 1))
+ hallucination_duration = max(0, hallucination_duration - 1)
+ hallucination_power = max(hallucination_power - GET_CHEMICAL_EFFECT(src, CE_MIND), 0)
+
+ //See if hallucination is gone
+ if(!hallucination_power)
+ hallucination_duration = 0
+ return
+ if(!hallucination_duration)
+ hallucination_power = 0
+ return
+
+ if(!client || stat || world.time < next_hallucination)
+ return
+ if(has_chemical_effect(CE_MIND, 1) && prob(GET_CHEMICAL_EFFECT(src, CE_MIND)*40)) //antipsychotics help
+ return
+ var/hall_delay = rand(10,20) SECONDS
+
+ if(hallucination_power < 50)
+ hall_delay *= 2
+ next_hallucination = world.time + hall_delay
+ var/list/candidates = list()
+ for(var/T in subtypesof(/datum/hallucination))
+ var/datum/hallucination/H = new T
+ if(H.can_affect(src))
+ candidates += H
+ if(candidates.len)
+ var/datum/hallucination/H = pick(candidates)
+ H.holder = src
+ H.activate_hallucination()
diff --git a/code/modules/mob/living/living_maneuvers.dm b/code/modules/mob/living/living_maneuvers.dm
index 5637a34e83e..89a47a1f63b 100644
--- a/code/modules/mob/living/living_maneuvers.dm
+++ b/code/modules/mob/living/living_maneuvers.dm
@@ -15,16 +15,25 @@
if(!can_fall(location_override = check))
break
if(check && check != loc)
- addtimer(CALLBACK(src, /mob/living/proc/reflexive_maneuver_callback, lastloc, check), 0)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living, reflexive_maneuver_callback), lastloc, check), 0)
return
. = ..()
/mob/living/proc/reflexive_maneuver_callback(var/turf/origin, var/turf/check)
if(prepared_maneuver)
- if(origin)
+ if(origin) // Used to avoid falling into open space.
forceMove(get_turf(origin))
prepared_maneuver.perform(src, check, get_acrobatics_multiplier(prepared_maneuver), reflexively = TRUE)
prepared_maneuver = null
+ maneuver_icon?.icon_state = "maneuver_off"
+
+/mob/living/proc/try_maneuver(var/atom/target)
+ if(prepared_maneuver && (isturf(target) || isturf(target.loc))) // Avoid trying to jump at your backpack contents.
+ prepared_maneuver.perform(src, get_turf(target), get_acrobatics_multiplier(prepared_maneuver))
+ prepared_maneuver = null
+ maneuver_icon?.icon_state = "maneuver_off"
+ return TRUE
+ return FALSE
/mob/living/verb/prepare_maneuver()
set name = "Prepare To Maneuver"
@@ -35,22 +44,34 @@
to_chat(src, SPAN_WARNING("You are unable to perform any maneuvers."))
return
+ var/list/maneuvers_by_name = list()
var/list/maneuvers = list()
for(var/maneuver in available_maneuvers)
- maneuvers += GET_DECL(maneuver)
+ var/decl/maneuver/maneuver_decl = GET_DECL(maneuver)
+ maneuvers_by_name[maneuver_decl.name] = maneuver_decl
+ var/image/I = image(maneuver_decl.selection_icon, maneuver_decl.selection_icon_state)
+ I.name = capitalize(maneuver_decl.name)
+ maneuvers[maneuver_decl.name] = I
- var/next_maneuver = input(src, "Select a maneuver.") as null|anything in maneuvers
+ var/next_maneuver = show_radial_menu(src, src, maneuvers, require_near = TRUE, radius = 42, tooltips = TRUE, check_locs = list(src), use_labels = TRUE)
if(next_maneuver)
- prepared_maneuver = next_maneuver
+ var/decl/maneuver/maneuver = maneuvers_by_name[next_maneuver]
+ if(!maneuver.can_be_used_by(src, null))
+ return
+ prepared_maneuver = maneuver
+ maneuver_icon?.icon_state = "maneuver_on"
to_chat(src, SPAN_NOTICE("You prepare to [prepared_maneuver.name]."))
else
prepared_maneuver = null
+ maneuver_icon?.icon_state = "maneuver_off"
to_chat(src, SPAN_NOTICE("You are no longer preparing to perform a maneuver."))
/mob/living/proc/perform_maneuver(var/maneuver, var/atom/target)
var/decl/maneuver/performing_maneuver = ispath(maneuver) ? GET_DECL(maneuver) : maneuver
if(istype(performing_maneuver))
. = performing_maneuver.perform(src, target, get_acrobatics_multiplier(performing_maneuver))
+ prepared_maneuver = null
+ maneuver_icon?.icon_state = "maneuver_off"
/mob/living/proc/get_acrobatics_multiplier(var/decl/maneuver/attempting_maneuver)
return 1
diff --git a/code/modules/mob/living/living_organs.dm b/code/modules/mob/living/living_organs.dm
index 7ab280144bf..7881fb555df 100644
--- a/code/modules/mob/living/living_organs.dm
+++ b/code/modules/mob/living/living_organs.dm
@@ -21,16 +21,17 @@
return LAZYLEN(get_internal_organs()) > 0
//Can be called when we want to add an organ in a detached state or an attached state.
-/mob/living/proc/add_organ(var/obj/item/organ/O, var/obj/item/organ/external/affected = null, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE)
+/mob/living/proc/add_organ(var/obj/item/organ/O, var/obj/item/organ/external/affected = null, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE, var/skip_health_update = FALSE)
. = O.do_install(src, affected, in_place, update_icon, detached)
//Only run install effects if we're not detached and we're not adding in place
if(!in_place && !(O.status & ORGAN_CUT_AWAY))
on_gained_organ(O)
- updatehealth()
+ if(!skip_health_update)
+ update_health()
return TRUE
//Can be called when the organ is detached or attached.
-/mob/living/proc/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = FALSE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE)
+/mob/living/proc/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = FALSE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE, var/skip_health_update = FALSE)
//Only run effects if we're not already detached, and we're not doing a in-place removal
if(!in_place && !(O.status & ORGAN_CUT_AWAY)) //Gotta check the flag here, because of prosthetics handling detached state differently
on_lost_organ(O)
@@ -41,7 +42,8 @@
if(client)
client.screen -= O
- updatehealth()
+ if(!skip_health_update)
+ update_health()
if(drop_organ)
var/drop_loc = get_turf(src)
diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm
index e3dcb6505eb..49d07235d00 100644
--- a/code/modules/mob/living/living_powers.dm
+++ b/code/modules/mob/living/living_powers.dm
@@ -67,6 +67,6 @@
to_chat(target,"\The [src] scrapes your flesh from your bones!")
to_chat(src,"You feed hungrily off \the [target]'s flesh.")
target.adjustBruteLoss(25)
- if(target.getBruteLoss() < -target.maxHealth)
+ if(target.getBruteLoss() < -target.get_max_health())
target.gib()
src.adjustBruteLoss(-25)
\ No newline at end of file
diff --git a/code/modules/mob/living/living_status.dm b/code/modules/mob/living/living_status.dm
index 1014107e700..11c01992201 100644
--- a/code/modules/mob/living/living_status.dm
+++ b/code/modules/mob/living/living_status.dm
@@ -13,7 +13,7 @@
if(amount == PENDING_STATUS(src, condition))
return FALSE
LAZYSET(pending_status_counters, condition, amount)
- addtimer(CALLBACK(src, .proc/apply_pending_status_changes), 0, TIMER_UNIQUE)
+ addtimer(CALLBACK(src, PROC_REF(apply_pending_status_changes)), 0, TIMER_UNIQUE)
return TRUE
/mob/living/proc/rebuild_status_markers()
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index bd96ef839e9..5ef4b739097 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -16,6 +16,13 @@
var/mob_ref = weakref(src)
if(istype(weather))
- weather.mob_shown_weather -= mob_ref
- weather.mob_shown_wind -= mob_ref
- global.current_mob_ambience -= mob_ref
+ weather.mob_shown_weather -= mob_ref
+ weather.mob_shown_wind -= mob_ref
+ global.current_mob_ambience -= mob_ref
+
+ // Update our equipped item presence.
+ for(var/slot in (get_inventory_slots()|get_held_item_slots()))
+ var/datum/inventory_slot/inv_slot = get_inventory_slot_datum(slot)
+ var/obj/item/held = inv_slot?.get_equipped_item()
+ if(held)
+ held.reconsider_client_screen_presence(client, slot)
diff --git a/code/modules/mob/living/maneuvers/_maneuver.dm b/code/modules/mob/living/maneuvers/_maneuver.dm
index e3effad6518..788c299aa2d 100644
--- a/code/modules/mob/living/maneuvers/_maneuver.dm
+++ b/code/modules/mob/living/maneuvers/_maneuver.dm
@@ -1,9 +1,21 @@
/decl/maneuver
+ abstract_type = /decl/maneuver
var/name = "unnamed"
var/delay = 2 SECONDS
var/cooldown = 10 SECONDS
var/stamina_cost = 10
var/reflexive_modifier = 1
+ var/selection_icon = 'icons/screen/maneuver.dmi'
+ var/selection_icon_state
+
+/decl/maneuver/validate()
+ . = ..()
+ if(!selection_icon)
+ . += "no selection icon"
+ else if(!selection_icon_state)
+ . += "no selection icon_state"
+ else if(!check_state_in_icon(selection_icon_state, selection_icon))
+ . += "selection icon_state [selection_icon_state] not found in icon [selection_icon]"
/decl/maneuver/proc/can_be_used_by(var/mob/living/user, var/atom/target, var/silent = FALSE)
if(!istype(user) || !user.can_do_maneuver(src, silent))
@@ -22,7 +34,7 @@
return FALSE
if(user.is_on_special_ability_cooldown())
if(!silent)
- to_chat(user, SPAN_WARNING("You cannot maneuver again for another [user.get_seconds_until_next_special_ability_string()]"))
+ to_chat(user, SPAN_WARNING("You cannot maneuver again for another [user.get_seconds_until_next_special_ability_string()]."))
return FALSE
if(user.get_stamina() < stamina_cost)
if(!silent)
diff --git a/code/modules/mob/living/maneuvers/maneuver_leap.dm b/code/modules/mob/living/maneuvers/maneuver_leap.dm
index e148d33e705..5dd783f2765 100644
--- a/code/modules/mob/living/maneuvers/maneuver_leap.dm
+++ b/code/modules/mob/living/maneuvers/maneuver_leap.dm
@@ -2,6 +2,7 @@
name = "leap"
stamina_cost = 10
reflexive_modifier = 1.5
+ selection_icon_state = "leap"
/decl/maneuver/leap/perform(var/mob/living/user, var/atom/target, var/strength, var/reflexively = FALSE)
. = ..()
@@ -15,8 +16,8 @@
user.jump_layer_shift()
animate(user, pixel_z = 16, time = 3, easing = SINE_EASING | EASE_IN)
animate(pixel_z = user.default_pixel_z, time = 3, easing = SINE_EASING | EASE_OUT)
- user.throw_at(get_turf(target), strength, 1, user, FALSE, CALLBACK(src, /decl/maneuver/leap/proc/end_leap, user, target, old_pass_flags))
- addtimer(CALLBACK(user, /mob/living/proc/jump_layer_shift_end), 4.5)
+ user.throw_at(get_turf(target), strength, 1, user, FALSE, CALLBACK(src, TYPE_PROC_REF(/decl/maneuver/leap, end_leap), user, target, old_pass_flags))
+ addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, jump_layer_shift_end)), 4.5)
/decl/maneuver/leap/proc/end_leap(var/mob/living/user, var/atom/target, var/pass_flag)
user.pass_flags = pass_flag
@@ -29,6 +30,8 @@
if(.)
var/can_leap_distance = user.get_jump_distance() * user.get_acrobatics_multiplier()
. = (can_leap_distance > 0 && (!target || get_dist(user, target) <= can_leap_distance))
+ if(!. && !silent)
+ to_chat(user, SPAN_WARNING("You cannot leap that far!"))
/decl/maneuver/leap/spider
stamina_cost = 0
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index c199d132c36..6bf47b4c9a9 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -6,8 +6,8 @@
return FALSE
/mob/living/proc/get_default_language()
- var/lang = ispath(default_language, /decl/language) && GET_DECL(default_language)
- if(can_speak(lang))
+ var/decl/language/lang = GET_DECL(default_language)
+ if(istype(lang) && can_speak(lang))
return lang
/mob/living/proc/get_any_good_language(set_default=FALSE)
@@ -83,6 +83,7 @@
// It then processes the message_mode to implement an additional behavior needed for the message, such
// as retrieving radios or looking for an intercom nearby.
/mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+ SHOULD_CALL_PARENT(TRUE)
if(!message_mode)
return
var/list/assess_items_as_radios = get_radios(message_mode)
@@ -118,6 +119,10 @@
return html_encode(message)
+/mob/living/proc/handle_mob_specific_speech(message, message_mode, verb = "says", decl/language/speaking)
+ SHOULD_CALL_PARENT(TRUE)
+ return FALSE
+
/mob/living/say(var/message, var/decl/language/speaking, var/verb = "says", var/alt_name = "", whispering)
set waitfor = FALSE
if(client)
@@ -158,6 +163,9 @@
emote("custom", AUDIBLE_MESSAGE, "[pick("grunts", "babbles", "gibbers", "jabbers", "burbles")] aimlessly.")
return
+ if(handle_mob_specific_speech(message, message_mode, verb, speaking))
+ return
+
// This is broadcast to all mobs with the language,
// irrespective of distance or anything else.
if(speaking && (speaking.flags & LANG_FLAG_HIVEMIND))
@@ -292,10 +300,10 @@
if(O) //It's possible that it could be deleted in the meantime.
O.hear_talk(src, stars(message), verb, speaking)
- INVOKE_ASYNC(GLOBAL_PROC, .proc/animate_speech_bubble, speech_bubble, speech_bubble_recipients | eavesdroppers, 30)
- INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, speaking, italics, speech_bubble_recipients)
+ INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(animate_speech_bubble), speech_bubble, speech_bubble_recipients | eavesdroppers, 30)
+ INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, animate_chat), message, speaking, italics, speech_bubble_recipients)
if(length(eavesdroppers))
- INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, stars(message), speaking, italics, eavesdroppers)
+ INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, animate_chat), stars(message), speaking, italics, eavesdroppers)
if(whispering)
log_whisper("[name]/[key] : [message]")
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index f78d5049548..8f2b8462ee2 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -56,7 +56,11 @@ var/global/list/ai_verbs_default = list(
density = TRUE
status_flags = CANSTUN|CANPARALYSE|CANPUSH
shouldnt_see = list(/obj/effect/rune)
- maxHealth = 200
+ mob_default_max_health = 200
+
+ silicon_camera = /obj/item/camera/siliconcam/ai_camera
+ silicon_radio = /obj/item/radio/headset/heads/ai_integrated
+
var/obj/machinery/camera/camera = null
var/list/connected_robots = list()
var/aiRestorePowerRoutine = 0
@@ -65,9 +69,6 @@ var/global/list/ai_verbs_default = list(
var/icon/holo_icon_longrange //Yellow hologram.
var/holo_icon_malf = FALSE // for new hologram system
var/obj/item/multitool/aiMulti = null
-
- silicon_camera = /obj/item/camera/siliconcam/ai_camera
- silicon_radio = /obj/item/radio/headset/heads/ai_integrated
var/obj/item/radio/headset/heads/ai_integrated/ai_radio
var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through.
@@ -103,7 +104,7 @@ var/global/list/ai_verbs_default = list(
src.verbs -= ai_verbs_default
src.verbs += /mob/living/verb/ghost
-/mob/living/silicon/ai/Initialize(mapload, var/datum/ai_laws/L, var/obj/item/mmi/B, var/safety = 0)
+/mob/living/silicon/ai/Initialize(mapload, var/datum/ai_laws/L, var/obj/item/organ/internal/brain_interface/B, var/safety = 0)
announcement = new()
announcement.title = "A.I. Announcement"
announcement.announcement_type = "A.I. Announcement"
@@ -143,11 +144,12 @@ var/global/list/ai_verbs_default = list(
add_language(/decl/language/sign, 0)
if(!safety)//Only used by AIize() to successfully spawn an AI.
- if (!B)//If there is no player/brain inside.
+ var/mob/living/brainmob = B?.get_brainmob()
+ if(!brainmob) // If there is no player/brain inside.
empty_playable_ai_cores += new/obj/structure/aicore/deactivated(loc)//New empty terminal.
. = INITIALIZE_HINT_QDEL
- else if(B.brainmob.mind)
- B.brainmob.mind.transfer_to(src)
+ else if(brainmob.mind)
+ brainmob.mind.transfer_to(src)
hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
diff --git a/code/modules/mob/living/silicon/ai/ai_damage.dm b/code/modules/mob/living/silicon/ai/ai_damage.dm
index 087e8ecafcb..6949d387b0c 100644
--- a/code/modules/mob/living/silicon/ai/ai_damage.dm
+++ b/code/modules/mob/living/silicon/ai/ai_damage.dm
@@ -12,17 +12,27 @@
/mob/living/silicon/ai/getOxyLoss()
return oxyloss
-/mob/living/silicon/ai/adjustFireLoss(var/amount)
+/mob/living/silicon/ai/adjustFireLoss(var/amount, var/do_update_health = TRUE)
if(status_flags & GODMODE) return
- fireloss = max(0, fireloss + min(amount, health))
+ fireloss = max(0, fireloss + min(amount, current_health))
+ if(do_update_health)
+ update_health()
-/mob/living/silicon/ai/adjustBruteLoss(var/amount)
- if(status_flags & GODMODE) return
- bruteloss = max(0, bruteloss + min(amount, health))
+/mob/living/silicon/ai/adjustBruteLoss(var/amount, var/do_update_health = TRUE)
+ if(!(status_flags & GODMODE))
+ bruteloss = max(0, bruteloss + min(amount, current_health))
+ ..()
-/mob/living/silicon/ai/adjustOxyLoss(var/amount)
- if(status_flags & GODMODE) return
- oxyloss = max(0, oxyloss + min(amount, maxHealth - oxyloss))
+/mob/living/silicon/ai/adjustOxyLoss(var/damage, var/do_update_health = TRUE)
+ if(!(status_flags & GODMODE))
+ oxyloss = max(0, oxyloss + min(damage, get_max_health() - oxyloss))
+ ..()
+
+/mob/living/silicon/ai/setBruteLoss(var/amount)
+ if(status_flags & GODMODE)
+ bruteloss = 0
+ return
+ bruteloss = max(0, amount)
/mob/living/silicon/ai/setFireLoss(var/amount)
if(status_flags & GODMODE)
@@ -36,22 +46,16 @@
return
oxyloss = max(0, amount)
-/mob/living/silicon/ai/updatehealth()
+/mob/living/silicon/ai/update_health()
+ ..()
if(status_flags & GODMODE)
- health = maxHealth
- set_stat(CONSCIOUS)
setOxyLoss(0)
- else
- health = maxHealth - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine.
/mob/living/silicon/ai/rejuvenate()
..()
add_ai_verbs(src)
-// Returns percentage of AI's remaining backup capacitor charge (maxhealth - oxyloss).
+// Returns percentage of AI's remaining backup capacitor charge (max_health - oxyloss).
/mob/living/silicon/ai/proc/backup_capacitor()
- return ((getOxyLoss() - maxHealth) / maxHealth) * (-100)
-
-// Returns percentage of AI's remaining hardware integrity (maxhealth - (bruteloss + fireloss))
-/mob/living/silicon/ai/proc/hardware_integrity()
- return (health / maxHealth) * 100
\ No newline at end of file
+ var/current_max_health = get_max_health()
+ return ((getOxyLoss() - current_max_health) / current_max_health) * (-100)
diff --git a/code/modules/mob/living/silicon/ai/ai_radio.dm b/code/modules/mob/living/silicon/ai/ai_radio.dm
index a4b198194e6..c9a32ee9cd3 100644
--- a/code/modules/mob/living/silicon/ai/ai_radio.dm
+++ b/code/modules/mob/living/silicon/ai/ai_radio.dm
@@ -12,7 +12,9 @@
/obj/item/encryptionkey/heads/ai_integrated
name = "ai integrated encryption key"
desc = "Integrated encryption key."
- icon_state = "cap_cypherkey"
+ color = COLOR_GOLD
+ fill_color = COLOR_PALE_GOLD
+ inlay_color = COLOR_ROYAL_BLUE
can_decrypt = list(
access_bridge,
access_security,
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 06d5c557536..68df276f1d2 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -1,50 +1,35 @@
-/mob/living/silicon/ai/Life()
+/mob/living/silicon/ai/should_be_dead()
+ return get_health_percent() <= 0 || backup_capacitor() <= 0
- SHOULD_CALL_PARENT(FALSE)
-
- if (src.stat == DEAD)
- return
-
- if (src.stat!=CONSCIOUS)
+/mob/living/silicon/ai/handle_regular_status_updates()
+ . = ..()
+ if(stat != CONSCIOUS)
src.cameraFollow = null
src.reset_view(null)
- src.updatehealth()
-
- if ((hardware_integrity() <= 0) || (backup_capacitor() <= 0))
- death()
- return
+/mob/living/silicon/ai/update_lying()
+ lying = FALSE
+/mob/living/silicon/ai/handle_living_non_stasis_processes()
+ . = ..()
// If our powersupply object was destroyed somehow, create new one.
if(!psupply)
create_powersupply()
-
- lying = 0 // Handle lying down
-
// We aren't shut down, and we lack external power. Try to fix it using the restoration routine.
if (!self_shutdown && !has_power(0))
// AI's restore power routine is not running. Start it automatically.
if(aiRestorePowerRoutine == AI_RESTOREPOWER_IDLE)
aiRestorePowerRoutine = AI_RESTOREPOWER_STARTING
handle_power_failure()
-
- handle_impaired_vision()
update_power_usage()
handle_power_oxyloss()
- update_sight()
-
process_queued_alarms()
- handle_regular_hud_updates()
-
switch(src.sensor_mode)
if (SEC_HUD)
process_sec_hud(src,0,src.eyeobj,get_computer_network())
if (MED_HUD)
process_med_hud(src,0,src.eyeobj,get_computer_network())
-
process_os()
- handle_status_effects()
-
if(controlling_drone && stat != CONSCIOUS)
controlling_drone.release_ai_control("WARNING: Primary control loop failure. Session terminated.")
diff --git a/code/modules/mob/living/silicon/ai/power.dm b/code/modules/mob/living/silicon/ai/power.dm
index af813d5e6d1..aa92b054d91 100644
--- a/code/modules/mob/living/silicon/ai/power.dm
+++ b/code/modules/mob/living/silicon/ai/power.dm
@@ -195,8 +195,8 @@
active_power_usage = AI_POWERUSAGE_NORMAL * AI_POWERUSAGE_OXYLOSS_TO_WATTS_MULTIPLIER
use_power = POWER_USE_ACTIVE
power_channel = EQUIP
+ invisibility = INVISIBILITY_ABSTRACT
var/mob/living/silicon/ai/powered_ai = null
- invisibility = 100
/obj/machinery/ai_powersupply/Initialize()
. = ..()
diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm
index 3f3e5e90fdc..0fb383db64b 100644
--- a/code/modules/mob/living/silicon/laws.dm
+++ b/code/modules/mob/living/silicon/laws.dm
@@ -106,7 +106,7 @@
var/list/channels = new()
channels += MAIN_CHANNEL
channels += additional_law_channels
- for(var/datum/radio_channel/channel in silicon_radio.get_available_channels())
+ for(var/datum/radio_channel/channel in silicon_radio?.get_available_channels())
channels |= channel.key
channels += "Binary"
return channels
diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm
index 6e2db95e39c..81d63dea087 100644
--- a/code/modules/mob/living/silicon/pai/death.dm
+++ b/code/modules/mob/living/silicon/pai/death.dm
@@ -8,6 +8,6 @@
fold()
if(mind)
qdel(mind)
- ..(gibbed, deathmessage, "You have suffered a critical system failure, and are dead.")
+ ..(gibbed, "gives one shrill beep before falling lifeless.", "You have suffered a critical system failure, and are dead.")
ghostize()
qdel(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm
index f3697bfefe9..c59c817f66a 100644
--- a/code/modules/mob/living/silicon/pai/life.dm
+++ b/code/modules/mob/living/silicon/pai/life.dm
@@ -1,40 +1,19 @@
-/mob/living/silicon/pai/Life()
-
- SHOULD_CALL_PARENT(FALSE)
-
- if (src.stat == DEAD)
- return
-
- if(src.cable)
- if(get_dist(src, cable) > 1)
- visible_message( \
- message = SPAN_NOTICE("The data cable rapidly retracts back into its spool."), \
- blind_message = SPAN_NOTICE("You hear a click and the sound of wire spooling rapidly."))
- QDEL_NULL(cable)
-
- handle_regular_hud_updates()
-
- if(src.secHUD == 1)
- process_sec_hud(src, 1, network = get_computer_network())
-
- if(src.medHUD == 1)
- process_med_hud(src, 1, network = get_computer_network())
-
+/mob/living/silicon/pai/handle_regular_hud_updates()
+ . = ..()
+ if(.)
+ if(src.secHUD == 1)
+ process_sec_hud(src, 1, network = get_computer_network())
+ if(src.medHUD == 1)
+ process_med_hud(src, 1, network = get_computer_network())
+
+/mob/living/silicon/pai/handle_regular_status_updates()
+ . = ..()
process_os() // better safe than sorry, in case some pAI has it
-
- if(silence_time)
- if(world.timeofday >= silence_time)
- silence_time = null
- to_chat(src, SPAN_NOTICE("Communication circuit reinitialized. Speech and messaging functionality restored."))
-
- handle_status_effects()
-
- if(health <= 0)
- death(null,"gives one shrill beep before falling lifeless.")
-
-/mob/living/silicon/pai/updatehealth()
- if(status_flags & GODMODE)
- health = 100
- set_stat(CONSCIOUS)
- else
- health = 100 - getBruteLoss() - getFireLoss()
\ No newline at end of file
+ if(src.cable && get_dist(src, cable) > 1)
+ visible_message( \
+ message = SPAN_NOTICE("The data cable rapidly retracts back into its spool."), \
+ blind_message = SPAN_NOTICE("You hear a click and the sound of wire spooling rapidly."))
+ QDEL_NULL(cable)
+
+/mob/living/silicon/pai/death(gibbed, deathmessage, show_dead_message)
+ return ..(deathmessage = "gives one shrill beep before falling lifeless.")
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index f7ab6c949c2..2be9d6e687e 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -34,6 +34,7 @@ var/global/list/possible_say_verbs = list(
holder_type = /obj/item/holder
idcard = /obj/item/card/id
silicon_radio = null // pAIs get their radio from the card they belong to.
+ mob_default_max_health = 100
os_type = /datum/extension/interactive/os/silicon/small
starting_stock_parts = list(
@@ -58,8 +59,6 @@ var/global/list/possible_say_verbs = list(
var/pai_law0 = "Serve your master."
var/pai_laws // String for additional operating instructions our master might give us
- var/silence_time // Timestamp when we were silenced (normally via EMP burst), set to null after silence has faded
-
// Various software-specific vars
var/secHUD = 0 // Toggles whether the Security HUD is active or not
@@ -83,30 +82,39 @@ var/global/list/possible_say_verbs = list(
set_extension(src, /datum/extension/base_icon_state, icon_state)
status_flags |= NO_ANTAG
- card = loc
+ if(!card)
+ if(istype(loc, /obj/item/paicard))
+ card = loc
+ else
+ card.radio = new /obj/item/radio(card)
+ if(istype(card))
+ if(!card.radio)
+ card.radio = new /obj/item/radio(card)
+ silicon_radio = card.radio
+ card.setPersonality(src)
+ else
+ return INITIALIZE_HINT_QDEL
//As a human made device, we'll understand sol common without the need of the translator
add_language(/decl/language/human/common, 1)
-
verbs -= /mob/living/verb/ghost
. = ..()
- if(card)
- if(!card.radio)
- card.radio = new /obj/item/radio(card)
- silicon_radio = card.radio
+ software = default_pai_software.Copy()
/mob/living/silicon/pai/Destroy()
- card = null
+ if(card)
+ if(card.pai == src)
+ card.removePersonality()
+ card = null
silicon_radio = null // Because this radio actually belongs to another instance we simply null
. = ..()
// this function shows the information about being silenced as a pAI in the Status panel
/mob/living/silicon/pai/proc/show_silenced()
- if(silence_time)
- var/timeleft = round((silence_time - world.timeofday)/10 ,1)
- stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
+ var/timeleft = round((HAS_STATUS(src, STAT_SILENCE) * SSmobs.wait) / 10, 1)
+ stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
/mob/living/silicon/pai/Stat()
. = ..()
@@ -129,7 +137,7 @@ var/global/list/possible_say_verbs = list(
// 33% chance to change prime directive (based on severity)
// 33% chance of no additional effect
- silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes
+ SET_STATUS_MAX(src, STAT_SILENCE, 2 MINUTES)
to_chat(src, SPAN_DANGER("Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete."))
if(prob(20))
visible_message( \
@@ -266,7 +274,6 @@ var/global/list/possible_say_verbs = list(
if(W.force)
visible_message(SPAN_DANGER("[user] attacks [src] with [W]!"))
adjustBruteLoss(W.force)
- updatehealth()
else
visible_message(SPAN_WARNING("[user] bonks [src] harmlessly with [W]."))
diff --git a/code/modules/mob/living/silicon/pai/paiwire.dm b/code/modules/mob/living/silicon/pai/paiwire.dm
index 5684813d326..0e1f737e601 100644
--- a/code/modules/mob/living/silicon/pai/paiwire.dm
+++ b/code/modules/mob/living/silicon/pai/paiwire.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/power.dmi'
icon_state = "wire1"
material = /decl/material/solid/metal/copper
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT)
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
var/obj/machinery/machine
/obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/user)
diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm
index 34265366562..732261c052d 100644
--- a/code/modules/mob/living/silicon/pai/say.dm
+++ b/code/modules/mob/living/silicon/pai/say.dm
@@ -1,5 +1,5 @@
/mob/living/silicon/pai/say(var/msg)
- if(silence_time)
- to_chat(src, SPAN_WARNING("Communication circuits remain uninitialized."))
- else
- ..(msg)
\ No newline at end of file
+ if(HAS_STATUS(src, STAT_SILENCE))
+ to_chat(src, SPAN_WARNING("Communication circuits are disabled."))
+ return
+ return ..(msg)
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index d55cb711c2b..72c1af676bb 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -33,16 +33,14 @@ var/global/list/default_pai_software = list()
default_pai_software[P.id] = P
return r
-/mob/living/silicon/pai/Initialize()
- . = ..()
- software = default_pai_software.Copy()
-
/mob/living/silicon/pai/proc/paiInterface()
ui_interact(src)
/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
- if(user != src)
- if(ui) ui.set_status(STATUS_CLOSE, 0)
+
+ if(user != src || !istype(card))
+ if(ui)
+ ui.set_status(STATUS_CLOSE, 0)
return
if(ui_key != "main")
diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm
index 952f1dacb0d..c3187cfa3d9 100644
--- a/code/modules/mob/living/silicon/robot/analyzer.dm
+++ b/code/modules/mob/living/silicon/robot/analyzer.dm
@@ -3,21 +3,20 @@
//
/obj/item/robotanalyzer
name = "robot analyzer"
- icon = 'icons/obj/items/device/robot_analyzer.dmi'
- icon_state = "robotanalyzer"
- item_state = "analyzer"
desc = "A hand-held scanner able to diagnose robotic injuries."
+ icon = 'icons/obj/items/device/robot_analyzer.dmi'
+ icon_state = ICON_STATE_WORLD
obj_flags = OBJ_FLAG_CONDUCTIBLE
slot_flags = SLOT_LOWER_BODY
throwforce = 3
w_class = ITEM_SIZE_SMALL
throw_speed = 5
throw_range = 10
- origin_tech = "{'magnets':2,'biotech':1,'engineering':2}"
+ origin_tech = @'{"magnets":2,"biotech":1,"engineering":2}'
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
/obj/item/robotanalyzer/attack(mob/living/M, mob/living/user)
@@ -45,7 +44,7 @@
if("robot")
var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss()
var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss()
- user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.getHalLoss()]% functional"]")
+ user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.current_health - M.getHalLoss()]% functional"]")
user.show_message("\t Key: Electronics/Brute", 1)
user.show_message("\t Damage Specifics: [BU] - [BR]")
if(M.stat == DEAD)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 245fce44990..3fd56f6b134 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -1,4 +1,4 @@
-// TODO: remove the robot.mmi and robot.cell variables and completely rely on the robot component system
+// TODO: remove the robot.central_processor and robot.cell variables and completely rely on the robot component system
/datum/robot_component/var/name
/datum/robot_component/var/installed = 0
diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm
index c275e273f0f..655e3a9c54f 100644
--- a/code/modules/mob/living/silicon/robot/death.dm
+++ b/code/modules/mob/living/silicon/robot/death.dm
@@ -1,7 +1,5 @@
/mob/living/silicon/robot/dust()
- //Delete the MMI first so that it won't go popping out.
- if(mmi)
- qdel(mmi)
+ clear_brain()
..()
/mob/living/silicon/robot/death(gibbed,deathmessage, show_dead_message)
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 25719998f40..57ed84e6ed3 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -2,8 +2,7 @@
name = "maintenance drone"
real_name = "drone"
icon = 'icons/mob/robots/drones/drone.dmi'
- maxHealth = 35
- health = 35
+ mob_default_max_health = 35
cell_emp_mult = 1
universal_speak = FALSE
universal_understand = TRUE
@@ -26,34 +25,28 @@
mob_swap_flags = SIMPLE_ANIMAL
mob_push_flags = SIMPLE_ANIMAL
mob_always_swap = 1
-
mob_size = MOB_SIZE_SMALL
laws = /datum/ai_laws/drone
-
silicon_camera = /obj/item/camera/siliconcam/drone_camera
-
- var/module_type = /obj/item/robot_module/drone
- var/hat_x = 0
- var/hat_y = -13
-
holder_type = /obj/item/holder/drone
os_type = null
starting_stock_parts = null
+ var/module_type = /obj/item/robot_module/drone
+
/mob/living/silicon/robot/drone/Initialize()
. = ..()
-
+ add_inventory_slot(new /datum/inventory_slot/head/simple)
set_extension(src, /datum/extension/base_icon_state, icon_state)
verbs += /mob/living/proc/hide
remove_language(/decl/language/binary)
add_language(/decl/language/binary, 0)
add_language(/decl/language/binary/drone, 1)
- set_extension(src, /datum/extension/hattable, list(hat_x, hat_y))
default_language = /decl/language/binary/drone
// NO BRAIN.
- mmi = null
+ central_processor = null
//We need to screw with their HP a bit. They have around one fifth as much HP as a full borg.
for(var/V in components) if(V != "power cell")
@@ -63,10 +56,10 @@
verbs -= /mob/living/silicon/robot/verb/Namepick
update_icon()
- events_repository.register(/decl/observ/moved, src, src, /mob/living/silicon/robot/drone/proc/on_moved)
+ events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/mob/living/silicon/robot/drone, on_moved))
/mob/living/silicon/robot/drone/Destroy()
- events_repository.unregister(/decl/observ/moved, src, src, /mob/living/silicon/robot/drone/proc/on_moved)
+ events_repository.unregister(/decl/observ/moved, src, src, TYPE_PROC_REF(/mob/living/silicon/robot/drone, on_moved))
. = ..()
/mob/living/silicon/robot/drone/proc/on_moved(var/atom/movable/am, var/turf/old_loc, var/turf/new_loc)
@@ -84,7 +77,7 @@
/mob/living/silicon/robot/drone/can_be_possessed_by(var/mob/observer/ghost/possessor)
if(!istype(possessor) || !possessor.client || !possessor.ckey)
return 0
- if(!config.allow_drone_spawn)
+ if(!get_config_value(/decl/config/toggle/on/allow_drone_spawn))
to_chat(src, "Playing as drones is not currently permitted.")
return 0
if(too_many_active_drones())
@@ -118,8 +111,20 @@
can_pull_mobs = MOB_PULL_SAME
integrated_light_power = 0.8
integrated_light_range = 5
- hat_x = 1
- hat_y = -12
+
+/mob/living/silicon/robot/drone/costruction/get_bodytype()
+ return GET_DECL(/decl/bodytype/drone/construction)
+
+/decl/bodytype/drone/construction/Initialize()
+ equip_adjust = list(
+ slot_head_str = list(
+ "[NORTH]" = list(1, -12),
+ "[SOUTH]" = list(1, -12),
+ "[EAST]" = list(1, -12),
+ "[WEST]" = list(1, -12)
+ )
+ )
+ . = ..()
/mob/living/silicon/robot/drone/init()
additional_law_channels["Drone"] = "d"
@@ -174,7 +179,7 @@
if(stat == DEAD)
- if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave.
+ if(!get_config_value(/decl/config/toggle/on/allow_drone_spawn) || emagged || should_be_dead()) //It's dead, Dave.
to_chat(user, "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.")
return
@@ -238,31 +243,14 @@
to_chat(src, SPAN_DANGER("ALERT: [user.real_name] is your new master. Obey your new laws and [G.his] commands."))
return 1
-//DRONE LIFE/DEATH
-//For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here.
-/mob/living/silicon/robot/drone/updatehealth()
- if(status_flags & GODMODE)
- health = 35
- set_stat(CONSCIOUS)
- return
- health = 35 - (getBruteLoss() + getFireLoss())
- return
-
-//Easiest to check this here, then check again in the robot proc.
-//Standard robots use config for crit, which is somewhat excessive for these guys.
-//Drones killed by damage will gib.
-/mob/living/silicon/robot/drone/handle_regular_status_updates()
- if(health <= -35 && src.stat != DEAD)
+/mob/living/silicon/robot/drone/death()
+ if(stat != DEAD && should_be_dead())
self_destruct()
- return
- if(health <= 0 && src.stat != DEAD)
- death()
- return
- ..()
+ return FALSE
+ . = ..()
/mob/living/silicon/robot/drone/self_destruct()
timeofdeath = world.time
- death() //Possibly redundant, having trouble making death() cooperate.
gib()
//DRONE MOVEMENT.
@@ -352,7 +340,7 @@
for(var/mob/living/silicon/robot/drone/D in global.silicon_mob_list)
if(D.key && D.client)
drones++
- return drones >= config.max_maint_drones
+ return drones >= get_config_value(/decl/config/num/max_maint_drones)
/mob/living/silicon/robot/drone/show_laws(var/everyone = 0)
if(!controlling_ai)
@@ -368,3 +356,23 @@
if(!controlling_ai)
return ..()
controlling_ai.open_subsystem(/datum/nano_module/law_manager)
+
+/mob/living/silicon/robot/drone/get_bodytype()
+ return GET_DECL(/decl/bodytype/drone)
+
+/decl/bodytype/drone
+ name = "drone"
+ bodytype_flag = 0
+ bodytype_category = "drone body"
+
+/decl/bodytype/drone/Initialize()
+ if(!length(equip_adjust))
+ equip_adjust = list(
+ slot_head_str = list(
+ "[NORTH]" = list(0, -13),
+ "[SOUTH]" = list(0, -13),
+ "[EAST]" = list(0, -13),
+ "[WEST]" = list(0, -13)
+ )
+ )
+ . = ..()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm
index db105871c13..2e5a4d814c6 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm
@@ -6,19 +6,21 @@
/mob/living/silicon/robot/drone/take_overall_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/used_weapon = null)
bruteloss += brute
fireloss += burn
+ update_health()
/mob/living/silicon/robot/drone/heal_overall_damage(var/brute, var/burn)
-
bruteloss -= brute
fireloss -= burn
-
- if(bruteloss<0) bruteloss = 0
- if(fireloss<0) fireloss = 0
+ if(bruteloss<0)
+ bruteloss = 0
+ if(fireloss<0)
+ fireloss = 0
+ update_health()
/mob/living/silicon/robot/drone/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb)
take_overall_damage(brute, burn)
-/mob/living/silicon/robot/drone/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE)
+/mob/living/silicon/robot/drone/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE)
heal_overall_damage(brute, burn)
/mob/living/silicon/robot/drone/getFireLoss()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index a4d759a82de..cef20e56fe9 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -76,12 +76,11 @@
can_hold = list(
/obj/item/cell,
/obj/item/stock_parts,
- /obj/item/mmi,
+ /obj/item/organ/internal/brain_interface,
/obj/item/robot_parts,
/obj/item/borg/upgrade,
/obj/item/flash,
/obj/item/organ/internal/brain,
- /obj/item/organ/internal/posibrain,
/obj/item/stack/cable_coil,
/obj/item/stock_parts/circuitboard,
/obj/item/chems/glass,
@@ -199,7 +198,7 @@
var/resolved = wrapped.resolve_attackby(target,user,params)
//If resolve_attackby forces waiting before taking wrapped, we need to let it finish before doing the rest.
- addtimer(CALLBACK(src, .proc/finish_using, target, user, params, force_holder, resolved), 0)
+ addtimer(CALLBACK(src, PROC_REF(finish_using), target, user, params, force_holder, resolved), 0)
else if(istype(target,/obj/item)) //Check that we're not pocketing a mob.
var/obj/item/I = target
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
index 8e53f6adbaf..da19e46697c 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
@@ -64,14 +64,14 @@
icon_state = "drone_fab_active"
var/elapsed = world.time - time_last_drone
- drone_progress = round((elapsed/config.drone_build_time)*100)
+ drone_progress = round((elapsed/get_config_value(/decl/config/num/drone_build_time))*100)
if(drone_progress >= 100)
visible_message("\The [src] voices a strident beep, indicating a drone chassis is prepared.")
/obj/machinery/drone_fabricator/examine(mob/user)
. = ..()
- if(produce_drones && drone_progress >= 100 && isghost(user) && config.allow_drone_spawn && count_drones() < config.max_maint_drones)
+ if(produce_drones && drone_progress >= 100 && isghost(user) && get_config_value(/decl/config/toggle/on/allow_drone_spawn) && count_drones() < get_config_value(/decl/config/num/max_maint_drones))
to_chat(user, "
A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.")
/obj/machinery/drone_fabricator/proc/create_drone(var/client/player)
@@ -79,7 +79,7 @@
if(stat & NOPOWER)
return
- if(!produce_drones || !config.allow_drone_spawn || count_drones() >= config.max_maint_drones)
+ if(!produce_drones || !get_config_value(/decl/config/toggle/on/allow_drone_spawn) || count_drones() >= get_config_value(/decl/config/num/max_maint_drones))
return
if(player && !isghost(player.mob))
@@ -110,7 +110,7 @@
to_chat(user, "The game hasn't started yet!")
return
- if(!(config.allow_drone_spawn))
+ if(!get_config_value(/decl/config/toggle/on/allow_drone_spawn))
to_chat(user, "That verb is not currently permitted.")
return
@@ -118,7 +118,7 @@
to_chat(user, "You are banned from playing synthetics and cannot spawn as a drone.")
return
- if(config.use_age_restriction_for_jobs && isnum(user.client.player_age))
+ if(get_config_value(/decl/config/num/use_age_restriction_for_jobs) && isnum(user.client.player_age))
if(user.client.player_age <= 3)
to_chat(user, " Your account is not old enough to play as a maintenance drone.")
return
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm b/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm
index 12e65e16e6a..36b89ea29cf 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm
@@ -7,14 +7,14 @@
/mob/living/silicon/robot/drone/attack_ai(mob/living/silicon/ai/user)
- if(!istype(user) || controlling_ai || !config.allow_drone_spawn)
+ if(!istype(user) || controlling_ai || !get_config_value(/decl/config/toggle/on/allow_drone_spawn))
return
if(stat != DEAD || client || key)
to_chat(user, SPAN_WARNING("You cannot take control of an autonomous, active drone."))
return
- if(health < -35 || emagged)
+ if(current_health < -(get_max_health()) || emagged)
to_chat(user, SPAN_WARNING("WARNING: connection timed out."))
return
@@ -46,7 +46,7 @@
/obj/machinery/drone_fabricator/attack_ai(mob/living/silicon/ai/user)
- if(!istype(user) || user.controlling_drone || !config.allow_drone_spawn)
+ if(!istype(user) || user.controlling_drone || !get_config_value(/decl/config/toggle/on/allow_drone_spawn))
return
if(stat & NOPOWER)
@@ -61,7 +61,7 @@
to_chat(user, "\The [src] is not ready to produce a new drone.")
return
- if(count_drones() >= config.max_maint_drones)
+ if(count_drones() >= get_config_value(/decl/config/num/max_maint_drones))
to_chat(user, "The drone control subsystems are tasked to capacity; they cannot support any more drones.")
return
diff --git a/code/modules/mob/living/silicon/robot/flying/flying.dm b/code/modules/mob/living/silicon/robot/flying/flying.dm
index b242c869bb7..dbd40ea19a0 100644
--- a/code/modules/mob/living/silicon/robot/flying/flying.dm
+++ b/code/modules/mob/living/silicon/robot/flying/flying.dm
@@ -21,7 +21,7 @@
components["comms"] = new/datum/robot_component/binary_communication(src)
components["armour"] = new/datum/robot_component/armour/light(src)
-/mob/living/silicon/robot/flying/Life()
+/mob/living/silicon/robot/flying/handle_regular_status_updates()
. = ..()
if(incapacitated() || !is_component_functioning("actuator"))
stop_flying()
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index df81ed97210..bf9ed519c5d 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -1,39 +1,12 @@
-/mob/living/silicon/robot/Life()
-
- SHOULD_CALL_PARENT(FALSE)
-
- set invisibility = 0
- set background = 1
-
- if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src))
- return
-
- //Status updates, death etc.
- clamp_values()
- handle_regular_status_updates()
- handle_actions()
-
- if(client)
- handle_regular_hud_updates()
- update_items()
- if (src.stat != DEAD) //still using power
+/mob/living/silicon/robot/handle_living_non_stasis_processes()
+ . = ..()
+ if(.)
use_power()
process_killswitch()
process_locks()
process_queued_alarms()
process_os()
- handle_status_effects()
- UpdateLyingBuckledAndVerbStatus()
-
-/mob/living/silicon/robot/proc/clamp_values()
- set_status(STAT_PARA, min(GET_STATUS(src, STAT_PARA), 30))
- set_status(STAT_ASLEEP, 0)
- adjustBruteLoss(0)
- adjustToxLoss(0)
- adjustOxyLoss(0)
- adjustFireLoss(0)
-
/mob/living/silicon/robot/proc/use_power()
used_power_this_tick = 0
for(var/V in components)
@@ -67,39 +40,41 @@
lights_on = 0
set_light(0)
+/mob/living/silicon/robot/should_be_dead()
+ return current_health < get_config_value(/decl/config/num/health_health_threshold_dead)
+
/mob/living/silicon/robot/handle_regular_status_updates()
- updatehealth()
+ SHOULD_CALL_PARENT(FALSE)
+ update_health()
+ set_status(STAT_PARA, min(GET_STATUS(src, STAT_PARA), 30))
if(HAS_STATUS(src, STAT_ASLEEP))
SET_STATUS_MAX(src, STAT_PARA, 3)
- if(src.resting)
+ if(resting)
SET_STATUS_MAX(src, STAT_WEAK, 5)
- if(health < config.health_threshold_dead && src.stat != DEAD) //die only once
- death()
-
- if (src.stat != DEAD) //Alive.
- if (incapacitated(INCAPACITATION_DISRUPTED) || !has_power)
- src.set_stat(UNCONSCIOUS)
+ if (stat != DEAD) //Alive.
+ // This previously used incapacitated(INCAPACITATION_DISRUPTED) but that was setting the robot to be permanently unconscious, which isn't ideal.
+ if(!has_power || incapacitated(INCAPACITATION_STUNNED) || HAS_STATUS(src, STAT_PARA))
SET_STATUS_MAX(src, STAT_BLIND, 2)
- else //Not stunned.
- src.set_stat(CONSCIOUS)
+ set_stat(UNCONSCIOUS)
+ else
+ set_stat(CONSCIOUS)
else //Dead.
cameranet.update_visibility(src, FALSE)
SET_STATUS_MAX(src, STAT_BLIND, 2)
- src.set_stat(DEAD)
- src.set_density(!src.lying)
- if(src.sdisabilities & BLINDED)
+ set_density(!lying)
+ if(sdisabilities & BLINDED)
SET_STATUS_MAX(src, STAT_BLIND, 2)
if(src.sdisabilities & DEAFENED)
src.set_status(STAT_DEAF, 1)
//update the state of modules and components here
- if (src.stat != CONSCIOUS)
+ if (stat != CONSCIOUS)
uneq_all()
if(silicon_radio)
@@ -115,8 +90,9 @@
return 1
/mob/living/silicon/robot/handle_regular_hud_updates()
- ..()
-
+ . = ..()
+ if(!.)
+ return
var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src)
if(hud && hud.hud)
hud.hud.process_hud(src)
@@ -128,16 +104,16 @@
process_med_hud(src,0,network = get_computer_network())
if(length(get_active_grabs()))
- ui_drop_grab.invisibility = 0
+ ui_drop_grab.set_invisibility(INVISIBILITY_NONE)
ui_drop_grab.alpha = 255
else
- ui_drop_grab.invisibility = INVISIBILITY_MAXIMUM
+ ui_drop_grab.set_invisibility(INVISIBILITY_ABSTRACT)
ui_drop_grab.alpha = 0
if (src.healths)
if (src.stat != DEAD)
if(isdrone(src))
- switch(health)
+ switch(current_health)
if(35 to INFINITY)
src.healths.icon_state = "health0"
if(25 to 34)
@@ -153,7 +129,7 @@
else
src.healths.icon_state = "health6"
else
- switch(health)
+ switch(current_health)
if(200 to INFINITY)
src.healths.icon_state = "health0"
if(150 to 200)
@@ -165,7 +141,7 @@
if(0 to 50)
src.healths.icon_state = "health4"
else
- if(health > config.health_threshold_dead)
+ if(current_health > get_config_value(/decl/config/num/health_health_threshold_dead))
src.healths.icon_state = "health5"
else
src.healths.icon_state = "health6"
@@ -230,6 +206,7 @@
set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry)
set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high)
+ update_items()
return 1
/mob/living/silicon/robot/handle_vision()
@@ -265,7 +242,7 @@
if (src.client)
src.client.screen -= src.contents
for(var/obj/I in src.contents)
- if(I && !(istype(I,/obj/item/cell) || istype(I,/obj/item/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/mmi)))
+ if(I && !(istype(I,/obj/item/cell) || istype(I,/obj/item/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/organ/internal/brain_interface)))
src.client.screen += I
if(src.module_state_1)
src.module_state_1:screen_loc = ui_inv1
@@ -300,6 +277,9 @@
if(on_fire)
overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing")
-/mob/living/silicon/robot/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them
- IgniteMob()
+//Silicons don't gain stacks from hotspots, but hotspots can ignite them
+/mob/living/silicon/increase_fire_stacks(exposed_temperature)
+ return
+
+/mob/living/silicon/can_ignite()
+ return !on_fire
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index 8c66d4b590c..761f3e6d450 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -5,5 +5,3 @@
// Forces synths to select an icon relevant to their module
if(!icon_selected && module)
choose_icon(module.get_sprites_for(src))
- if(hands)
- hands.icon_state = istype(module) ? lowertext(module.display_name) : "nomod"
diff --git a/code/modules/mob/living/silicon/robot/modules/module_clerical.dm b/code/modules/mob/living/silicon/robot/modules/module_clerical.dm
index 31acbf6348a..a716a3b158c 100644
--- a/code/modules/mob/living/silicon/robot/modules/module_clerical.dm
+++ b/code/modules/mob/living/silicon/robot/modules/module_clerical.dm
@@ -57,7 +57,7 @@
var/obj/item/rsf/M = locate() in equipment
M.stored_matter = 30
var/obj/item/flame/lighter/zippo/L = locate() in equipment
- L.lit = 1
+ L.lit = TRUE
/obj/item/robot_module/clerical/butler/finalize_emag()
. = ..()
diff --git a/code/modules/mob/living/silicon/robot/modules/module_security.dm b/code/modules/mob/living/silicon/robot/modules/module_security.dm
index 1a2421bb265..9322a91f744 100644
--- a/code/modules/mob/living/silicon/robot/modules/module_security.dm
+++ b/code/modules/mob/living/silicon/robot/modules/module_security.dm
@@ -23,15 +23,12 @@
/obj/item/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
..()
for(var/obj/item/gun/energy/T in equipment)
- if(T && T.power_supply)
- if(T.power_supply.charge < T.power_supply.maxcharge)
- T.power_supply.give(T.charge_cost * amount)
- T.update_icon()
- else
- T.charge_tick = 0
- var/obj/item/baton/robot/B = locate() in equipment
- if(B && B.bcell)
- B.bcell.give(amount)
+ var/obj/item/cell/power_supply = T.get_cell()
+ if(power_supply.charge < power_supply.maxcharge)
+ power_supply.give(T.charge_cost * amount)
+ update_icon()
+ else
+ T.charge_tick = 0
/obj/item/robot_module/security/general
name = "security robot module"
diff --git a/code/modules/mob/living/silicon/robot/modules/module_uncertified.dm b/code/modules/mob/living/silicon/robot/modules/module_uncertified.dm
index 582805b0e9d..6b21bb2b420 100644
--- a/code/modules/mob/living/silicon/robot/modules/module_uncertified.dm
+++ b/code/modules/mob/living/silicon/robot/modules/module_uncertified.dm
@@ -20,7 +20,7 @@
equipment = list(
/obj/item/boombox,
/obj/item/bikehorn/airhorn,
- /obj/item/party_light,
+ /obj/item/flashlight/party,
/obj/item/gun/launcher/money
)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 5dd0f8b14c2..6bfee52611b 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -5,8 +5,7 @@
real_name = "robot"
icon = 'icons/mob/robots/robot.dmi'
icon_state = ICON_STATE_WORLD
- maxHealth = 300
- health = 300
+ mob_default_max_health = 300
mob_sort_value = 4
z_flags = ZMM_MANGLE_PLANES
@@ -35,13 +34,13 @@
//Hud stuff
- var/obj/screen/inv1 = null
- var/obj/screen/inv2 = null
- var/obj/screen/inv3 = null
+ var/obj/screen/robot_module_one/inv1
+ var/obj/screen/robot_module_two/inv2
+ var/obj/screen/robot_module_three/inv3
var/obj/screen/robot_drop_grab/ui_drop_grab
var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not
- var/obj/screen/robot_modules_background
+ var/obj/screen/robot_modules_background/robot_modules_background
//3 Modules can be activated at any one time.
var/obj/item/robot_module/module = null
@@ -61,7 +60,7 @@
// Components are basically robot organs.
var/list/components = list()
- var/obj/item/mmi/mmi = null
+ var/obj/item/organ/internal/central_processor
var/opened = 0
var/emagged = 0
@@ -103,8 +102,7 @@
wires = new(src)
- robot_modules_background = new()
- robot_modules_background.icon_state = "block"
+ robot_modules_background = new(null, src)
ident = random_id(/mob/living/silicon/robot, 1, 999)
updatename(modtype)
@@ -197,21 +195,15 @@
return amount
return 0
-//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
-//Improved /N
/mob/living/silicon/robot/Destroy()
- if(mmi)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside.
- if(mind)
- mmi.dropInto(loc)
- if(mmi.brainmob)
- mind.transfer_to(mmi.brainmob)
- else
- to_chat(src, "Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.")
- ghostize()
- //ERROR("A borg has been destroyed, but its MMI lacked a brainmob, so the mind could not be transferred. Player: [ckey].")
- mmi = null
+ if(central_processor)
+ central_processor.dropInto(loc)
+ var/mob/living/brainmob = central_processor.get_brainmob()
+ if(mind && brainmob)
+ mind.transfer_to(brainmob)
else
- QDEL_NULL(mmi)
+ ghostize()
+ central_processor = null
if(connected_ai)
connected_ai.connected_robots -= src
connected_ai = null
@@ -282,12 +274,10 @@
if(prefix)
modtype = prefix
- if(istype(mmi, /obj/item/organ/internal/posibrain))
- braintype = "Robot"
- else if(istype(mmi, /obj/item/mmi/digital/robot))
- braintype = "Drone"
+ if(istype(central_processor))
+ braintype = central_processor.get_synthetic_owner_name()
else
- braintype = "Cyborg"
+ braintype = "Robot"
var/changed_name = ""
if(custom_name)
@@ -497,7 +487,6 @@
if (WT.weld(0))
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
adjustBruteLoss(-30)
- updatehealth()
add_fingerprint(user)
user.visible_message(SPAN_NOTICE("\The [user] has fixed some of the dents on \the [src]!"))
else
@@ -512,30 +501,36 @@
if (coil.use(1))
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
adjustFireLoss(-30)
- updatehealth()
user.visible_message(SPAN_NOTICE("\The [user] has fixed some of the burnt wires on \the [src]!"))
else if(IS_CROWBAR(W) && user.a_intent != I_HURT) // crowbar means open or close the cover - we all know what a crowbar is by now
if(opened)
if(cell)
- user.visible_message("\The [user] begins clasping shut \the [src]'s maintenance hatch.", "You begin closing up \the [src].")
+
+ user.visible_message(
+ SPAN_NOTICE("\The [user] begins clasping shut \the [src]'s maintenance hatch."),
+ SPAN_NOTICE("You begin closing up \the [src]."))
+
if(do_after(user, 50, src))
- to_chat(user, "You close \the [src]'s maintenance hatch.")
+ to_chat(user, SPAN_NOTICE("You close \the [src]'s maintenance hatch."))
opened = 0
update_icon()
else if(wiresexposed && wires.IsAllCut())
- //Cell is out, wires are exposed, remove MMI, produce damaged chassis, baleet original mob.
- if(!mmi)
- to_chat(user, "\The [src] has no brain to remove.")
+ //Cell is out, wires are exposed, remove CPU, produce damaged chassis, baleet original mob.
+ if(!central_processor)
+ to_chat(user, "\The [src] has no central processor to remove.")
return
- user.visible_message("\The [user] begins ripping [mmi] from [src].", "You jam the crowbar into the robot and begin levering [mmi].")
+ user.visible_message(
+ SPAN_NOTICE("\The [user] begins ripping \the [central_processor] out of \the [src]."),
+ SPAN_NOTICE("You jam the crowbar into the robot and begin levering out \the [central_processor]."))
+
if(do_after(user, 50, src))
dismantle(user)
else
- // Okay we're not removing the cell or an MMI, but maybe something else?
+ // Okay we're not removing the cell or a CPU, but maybe something else?
var/list/removable_components = list()
for(var/V in components)
if(V == "power cell") continue
@@ -723,11 +718,6 @@
if(module_active && istype(module_active, /obj/item/borg/combat/shield))
add_overlay("[icon_state]-shield")
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- var/image/hat = hattable?.get_hat_overlay(src)
- if(hat)
- add_overlay(hat)
-
/mob/living/silicon/robot/proc/installed_modules()
if(weapon_lock)
to_chat(src, "Weapon lock active, unable to use modules! Count:[weaponlock_time]")
@@ -1108,7 +1098,10 @@
return ASSIGNMENT_ROBOT
/mob/living/silicon/robot/handle_pre_transformation()
- QDEL_NULL(mmi)
+ clear_brain()
+
+/mob/living/silicon/robot/proc/clear_brain()
+ QDEL_NULL(central_processor)
/mob/living/silicon/robot/do_flash_animation()
set waitfor = FALSE
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index cb83947ce63..550429f8d68 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -1,11 +1,3 @@
-/mob/living/silicon/robot/updatehealth()
- if(status_flags & GODMODE)
- health = maxHealth
- stat = CONSCIOUS
- return
- health = maxHealth - (getBruteLoss() + getFireLoss())
- return
-
/mob/living/silicon/robot/getBruteLoss()
var/amount = 0
for(var/V in components)
@@ -20,13 +12,14 @@
if(C.installed != 0) amount += C.electronics_damage
return amount
-/mob/living/silicon/robot/adjustBruteLoss(var/amount)
+/mob/living/silicon/robot/adjustBruteLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(FALSE) // take/heal overall call update_health regardless of arg
if(amount > 0)
take_overall_damage(amount, 0)
else
heal_overall_damage(-amount, 0)
-/mob/living/silicon/robot/adjustFireLoss(var/amount)
+/mob/living/silicon/robot/adjustFireLoss(var/amount, var/do_update_health = TRUE)
if(amount > 0)
take_overall_damage(0, amount)
else
@@ -56,7 +49,7 @@
return C
return 0
-/mob/living/silicon/robot/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE)
+/mob/living/silicon/robot/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE)
var/list/datum/robot_component/parts = get_damaged_components(brute, burn)
if(!parts.len) return
var/datum/robot_component/picked = pick(parts)
@@ -133,20 +126,16 @@
var/datum/robot_component/armour/A = get_armour()
if(A)
A.take_damage(brute,burn,sharp)
- return
-
- while(parts.len && (brute>0 || burn>0) )
- var/datum/robot_component/picked = pick(parts)
-
- var/brute_was = picked.brute_damage
- var/burn_was = picked.electronics_damage
-
- picked.take_damage(brute,burn)
-
- brute -= (picked.brute_damage - brute_was)
- burn -= (picked.electronics_damage - burn_was)
-
- parts -= picked
+ else
+ while(parts.len && (brute>0 || burn>0) )
+ var/datum/robot_component/picked = pick(parts)
+ var/brute_was = picked.brute_damage
+ var/burn_was = picked.electronics_damage
+ picked.take_damage(brute,burn)
+ brute -= (picked.brute_damage - brute_was)
+ burn -= (picked.electronics_damage - burn_was)
+ parts -= picked
+ update_health()
/mob/living/silicon/robot/emp_act(severity)
uneq_all()
diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm
index 68ba90bee99..f61cee15c28 100644
--- a/code/modules/mob/living/silicon/robot/robot_items.dm
+++ b/code/modules/mob/living/silicon/robot/robot_items.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/items/borg_module/borg_rnd_analyser.dmi'
icon_state = "portable_analyzer"
desc = "Similar to the stationary version, this rather unwieldy device allows you to break down objects in the name of science."
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/metal/copper = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
@@ -77,77 +77,6 @@
for(var/tech in saved_tech_levels)
to_chat(user, "[tech]: [saved_tech_levels[tech]]")
-/obj/item/party_light
- name = "party light"
- desc = "An array of LEDs in tons of colors."
- icon = 'icons/obj/lighting.dmi'
- icon_state = "partylight-off"
- item_state = "partylight-off"
- material = /decl/material/solid/plastic
- matter = list(
- /decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY,
- /decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/metal/copper = MATTER_AMOUNT_TRACE,
- /decl/material/solid/silicon = MATTER_AMOUNT_TRACE,
- )
- var/activated = 0
- var/strobe_effect = null
-
-/obj/item/party_light/attack_self()
- if (activated)
- deactivate_strobe()
- else
- activate_strobe()
-
-/obj/item/party_light/on_update_icon()
- . = ..()
- if (activated)
- icon_state = "partylight-on"
- set_light(7, 1)
- else
- icon_state = "partylight_off"
- set_light(0)
-
-/obj/item/party_light/proc/activate_strobe()
- activated = 1
-
- // Create the party light effect and place it on the turf of who/whatever has it.
- var/turf/T = get_turf(src)
- var/obj/effect/party_light/L = new(T)
- strobe_effect = L
-
- // Make the light effect follow this party light object.
- events_repository.register(/decl/observ/moved, src, L, /atom/movable/proc/move_to_turf_or_null)
-
- update_icon()
-
-/obj/item/party_light/proc/deactivate_strobe()
- activated = 0
-
- // Cause the party light effect to stop following this object, and then delete it.
- events_repository.unregister(/decl/observ/moved, src, strobe_effect, /atom/movable/proc/move_to_turf_or_null)
- QDEL_NULL(strobe_effect)
-
- update_icon()
-
-/obj/item/party_light/Destroy()
- deactivate_strobe()
- . = .. ()
-
-/obj/effect/party_light
- name = "party light"
- desc = "This is probably bad for your eyes."
- icon = 'icons/effects/lens_flare.dmi'
- icon_state = "party_strobe"
- simulated = 0
- anchored = TRUE
- pixel_x = -30
- pixel_y = -4
-
-/obj/effect/party_light/Initialize()
- update_icon()
- . = ..()
-
//This is used to unlock other borg covers.
/obj/item/card/robot //This is not a child of id cards, as to avoid dumb typechecks on computers.
name = "access code transmission device"
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index ff5553a8004..89e537c8125 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -27,4 +27,4 @@
if(module_active && istype(module_active,/obj/item/borg/combat/mobility))
tally-=3
- return tally+config.robot_delay
+ return tally+get_config_value(/decl/config/num/movement_robot)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index 60f4b8dcff2..39099ccdbf0 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -1,34 +1,27 @@
-/mob/living/silicon/say(var/message, var/sanitize = 1)
- return ..(sanitize ? sanitize(message) : message)
-
-/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
- log_say("[key_name(src)] : [message]")
-
-/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
- if(message_mode)
- if(!is_component_functioning("radio"))
- to_chat(src, SPAN_WARNING("Your radio isn't functional at this time."))
- else
- used_radios += silicon_radio
- . = TRUE
+/mob/living/silicon/get_radios(var/message_mode)
+ . = ..()
+ if(message_mode && silicon_radio)
+ LAZYDISTINCTADD(., silicon_radio)
+
+/mob/living/silicon/robot/get_radios(var/message_mode)
+ . = ..()
+ if((silicon_radio in .) && !is_component_functioning("radio"))
+ to_chat(src, SPAN_WARNING("Your radio isn't functional at this time."))
+ LAZYREMOVE(., silicon_radio)
+
+/mob/living/silicon/ai/handle_mob_specific_speech(message, message_mode, verb = "says", decl/language/speaking)
+ if(message_mode == MESSAGE_MODE_DEPARTMENT)
+ holopad_talk(message, verb, speaking)
+ return TRUE
return ..()
-/mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
- if(message_mode)
- if(message_mode == MESSAGE_MODE_DEPARTMENT)
- holopad_talk(message, verb, speaking)
- else if (ai_radio.disabledAi || !has_power() || stat)
+/mob/living/silicon/ai/get_radios(var/message_mode)
+ . = ..()
+ if(ai_radio)
+ if(ai_radio.disabledAi || !has_power() || stat)
to_chat(src, SPAN_DANGER("System Error - Transceiver Disabled."))
else
- used_radios += ai_radio
- . = TRUE
- ..()
-
-/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
- if(message_mode)
- used_radios += silicon_radio
- . = TRUE
- ..()
+ LAZYDISTINCTADD(., ai_radio)
/mob/living/silicon/say_quote(var/text)
var/ending = copytext(text, length(text))
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index a2e3accfcb1..d0958ccfa38 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -140,16 +140,13 @@
return
/mob/living/silicon/bullet_act(var/obj/item/projectile/Proj)
-
if(!Proj.nodamage)
switch(Proj.damage_type)
if(BRUTE)
adjustBruteLoss(Proj.damage)
if(BURN)
adjustFireLoss(Proj.damage)
-
Proj.on_hit(src,100) //wow this is a terrible hack
- updatehealth()
return 100
/mob/living/silicon/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
@@ -166,7 +163,7 @@
// this function shows the health of the AI in the Status panel
/mob/living/silicon/proc/show_system_integrity()
if(!src.stat)
- stat(null, text("System integrity: [round((health/maxHealth)*100)]%"))
+ stat(null, text("System integrity: [get_health_percent()]%"))
else
stat(null, text("Systems nonfunctional"))
@@ -193,9 +190,8 @@
//can't inject synths
/mob/living/silicon/can_inject(var/mob/user, var/target_zone)
- to_chat(user, "The armoured plating is too tough.")
- return 0
-
+ to_chat(user, SPAN_WARNING("The armoured plating is too tough."))
+ return FALSE
//Silicon mob language procs
@@ -451,15 +447,20 @@
os.Process()
/mob/living/silicon/handle_flashed(var/obj/item/flash/flash, var/flash_strength)
+ SET_STATUS_MAX(src, STAT_PARA, flash_strength)
SET_STATUS_MAX(src, STAT_WEAK, flash_strength)
return TRUE
/mob/living/silicon/get_speech_bubble_state_modifier()
return "synth"
-/mob/living/silicon/GetIdCards()
+/mob/living/silicon/GetIdCards(list/exceptions)
. = ..()
- if(stat || (ckey && !client))
- return // Unconscious, dead or once possessed but now client-less silicons are not considered to have id access.
- if(istype(idcard))
+ // Unconscious, dead or once possessed but now client-less silicons are not considered to have id access.
+ // This seems to be specifically to stop ghosted maintenance drones being used as free all-access cards.
+ if(istype(idcard) && !stat && !(ckey && !client) && !is_type_in_list(idcard, exceptions))
LAZYDISTINCTADD(., idcard)
+
+/mob/living/silicon/get_total_life_damage()
+ return (getBruteLoss() + getFireLoss())
+
diff --git a/code/modules/mob/living/silicon/subsystems.dm b/code/modules/mob/living/silicon/subsystems.dm
index be952b3df5e..fb03130e74d 100644
--- a/code/modules/mob/living/silicon/subsystems.dm
+++ b/code/modules/mob/living/silicon/subsystems.dm
@@ -30,7 +30,7 @@
if(/datum/nano_module/alarm_monitor/all in silicon_subsystems)
for(var/datum/alarm_handler/AH in SSalarm.all_handlers)
- AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm)
+ AH.register_alarm(src, TYPE_PROC_REF(/mob/living/silicon, receive_alarm))
queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order
/mob/living/silicon/proc/init_subsystem(var/subsystem_type)
diff --git a/code/modules/mob/living/simple_animal/aquatic/_aquatic.dm b/code/modules/mob/living/simple_animal/aquatic/_aquatic.dm
index eab06762cf6..9da0d3f917f 100644
--- a/code/modules/mob/living/simple_animal/aquatic/_aquatic.dm
+++ b/code/modules/mob/living/simple_animal/aquatic/_aquatic.dm
@@ -11,8 +11,8 @@
meat_amount = 1
bone_amount = 1
skin_amount = 2
- bone_material = /decl/material/solid/bone/fish
- skin_material = /decl/material/solid/skin/fish
+ bone_material = /decl/material/solid/organic/bone/fish
+ skin_material = /decl/material/solid/organic/skin/fish
/mob/living/simple_animal/aquatic/Initialize()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/aquatic/_aquatic_hostile.dm b/code/modules/mob/living/simple_animal/aquatic/_aquatic_hostile.dm
index 6b9d6e14a65..44f14afd565 100644
--- a/code/modules/mob/living/simple_animal/aquatic/_aquatic_hostile.dm
+++ b/code/modules/mob/living/simple_animal/aquatic/_aquatic_hostile.dm
@@ -13,5 +13,5 @@
meat_amount = 3
bone_amount = 5
skin_amount = 5
- bone_material = /decl/material/solid/bone/fish
- skin_material = /decl/material/solid/skin/fish
+ bone_material = /decl/material/solid/organic/bone/fish
+ skin_material = /decl/material/solid/organic/skin/fish
diff --git a/code/modules/mob/living/simple_animal/aquatic/_aquatic_retaliate.dm b/code/modules/mob/living/simple_animal/aquatic/_aquatic_retaliate.dm
index 0dc9992caf6..a77a133afb5 100644
--- a/code/modules/mob/living/simple_animal/aquatic/_aquatic_retaliate.dm
+++ b/code/modules/mob/living/simple_animal/aquatic/_aquatic_retaliate.dm
@@ -13,5 +13,5 @@
meat_amount = 3
bone_amount = 5
skin_amount = 5
- bone_material = /decl/material/solid/bone/fish
- skin_material = /decl/material/solid/skin/fish
\ No newline at end of file
+ bone_material = /decl/material/solid/organic/bone/fish
+ skin_material = /decl/material/solid/organic/skin/fish
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm
index 2ff829b00dc..1200dcd7cd6 100644
--- a/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm
+++ b/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm
@@ -3,8 +3,7 @@
desc = "A ferocious fish. May be too hardcore."
icon = 'icons/mob/simple_animal/fish_carp.dmi'
faction = "fishes"
- maxHealth = 20
- health = 20
+ mob_default_max_health = 20
meat_type = /obj/item/chems/food/fish/carp
/mob/living/simple_animal/hostile/retaliate/aquatic/carp/Initialize()
diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm
index 6e9debe9174..ebab3555537 100644
--- a/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm
+++ b/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm
@@ -2,8 +2,7 @@
name = "small fish"
desc = "Glub glub."
faction = "fishes"
- maxHealth = 10
- health = 10
+ mob_default_max_health = 10
mob_size = MOB_SIZE_TINY
can_pull_size = 0
can_pull_mobs = 0
diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm
index f88940480cf..12516db07ff 100644
--- a/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm
+++ b/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm
@@ -2,8 +2,7 @@
name = "shark"
desc = "A ferocious fish with many, many teeth."
icon = 'icons/mob/simple_animal/shark.dmi'
- maxHealth = 150
- health = 150
+ mob_default_max_health = 150
natural_weapon = /obj/item/natural_weapon/bite/shark
break_stuff_probability = 15
faction = "sharks"
@@ -12,8 +11,8 @@
meat_amount = 5
bone_amount = 15
skin_amount = 15
- bone_material = /decl/material/solid/bone/cartilage
- skin_material = /decl/material/solid/skin/shark
+ bone_material = /decl/material/solid/organic/bone/cartilage
+ skin_material = /decl/material/solid/organic/skin/shark
/obj/item/natural_weapon/bite/shark
force = 20
@@ -28,8 +27,7 @@
speed = 0
mob_size = MOB_SIZE_LARGE
pixel_x = -16
- health = 400
- maxHealth = 400
+ mob_default_max_health = 400
harm_intent_damage = 5
natural_weapon = /obj/item/natural_weapon/bite/giantshark
break_stuff_probability = 35
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm
index e42bc8a005a..23d000c9ea5 100644
--- a/code/modules/mob/living/simple_animal/constructs/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs/constructs.dm
@@ -43,6 +43,9 @@
var/list/construct_spells = list()
+/mob/living/simple_animal/construct/check_has_mouth()
+ return FALSE
+
/mob/living/simple_animal/construct/on_defilement()
return
@@ -65,7 +68,7 @@
/mob/living/simple_animal/construct/attack_animal(var/mob/user)
if(istype(user, /mob/living/simple_animal/construct/builder))
- if(health < maxHealth)
+ if(current_health < get_max_health())
adjustBruteLoss(-5)
user.visible_message("\The [user] mends some of \the [src]'s wounds.")
else
@@ -75,8 +78,9 @@
/mob/living/simple_animal/construct/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns)
. = ..(user)
- if(health < maxHealth)
- if(health >= maxHealth/2)
+ var/current_max_health = get_max_health()
+ if(current_health < current_max_health)
+ if(current_health >= current_max_health/2)
to_chat(user, SPAN_WARNING("It looks slightly dented."))
else
to_chat(user, SPAN_DANGER("It looks severely dented!"))
@@ -98,8 +102,7 @@
real_name = "Juggernaut"
desc = "A possessed suit of armour driven by the will of the restless dead"
icon = 'icons/mob/simple_animal/construct_behemoth.dmi'
- maxHealth = 250
- health = 250
+ mob_default_max_health = 250
speak_emote = list("rumbles")
response_harm = "harmlessly punches"
harm_intent_damage = 0
@@ -119,7 +122,7 @@
hitsound = 'sound/weapons/heavysmash.ogg'
force = 30
-/mob/living/simple_animal/construct/armoured/Life()
+/mob/living/simple_animal/construct/armoured/handle_regular_status_updates()
set_status(STAT_WEAK, 0)
if ((. = ..()))
return
@@ -156,8 +159,7 @@
real_name = "Wraith"
desc = "A wicked bladed shell contraption piloted by a bound spirit"
icon = 'icons/mob/simple_animal/construct_floating.dmi'
- maxHealth = 75
- health = 75
+ mob_default_max_health = 75
natural_weapon = /obj/item/natural_weapon/wraith
speed = -1
environment_smash = 1
@@ -181,8 +183,7 @@
real_name = "Artificer"
desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies"
icon = 'icons/mob/simple_animal/construct_artificer.dmi'
- maxHealth = 50
- health = 50
+ mob_default_max_health = 50
response_harm = "viciously beaten"
harm_intent_damage = 5
natural_weapon = /obj/item/natural_weapon/cult_builder
@@ -208,8 +209,7 @@
real_name = "Behemoth"
desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal."
icon = 'icons/mob/simple_animal/construct_behemoth.dmi'
- maxHealth = 750
- health = 750
+ mob_default_max_health = 750
speak_emote = list("rumbles")
response_harm = "harmlessly punches"
harm_intent_damage = 0
@@ -232,8 +232,7 @@
real_name = "Harvester"
desc = "The promised reward of the livings who follow Nar-Sie. Obtained by offering their bodies to the geometer of blood"
icon = 'icons/mob/simple_animal/construct_harvester.dmi'
- maxHealth = 150
- health = 150
+ mob_default_max_health = 150
natural_weapon = /obj/item/natural_weapon/harvester
speed = -1
environment_smash = 1
@@ -252,18 +251,22 @@
force = 25
////////////////HUD//////////////////////
+/mob/living/simple_animal/construct/handle_regular_status_updates()
+ . = ..()
+ if(.)
+ silence_spells(purge)
-/mob/living/simple_animal/construct/Life()
+/mob/living/simple_animal/construct/handle_regular_hud_updates()
. = ..()
if(.)
if(fire)
fire.icon_state = "fire[!!fire_alert]"
silence_spells(purge)
-/mob/living/simple_animal/construct/armoured/Life()
+/mob/living/simple_animal/construct/armoured/handle_regular_hud_updates()
. = ..()
- if(healths)
- switch(health)
+ if(. && healths)
+ switch(current_health)
if(250 to INFINITY) healths.icon_state = "juggernaut_health0"
if(208 to 249) healths.icon_state = "juggernaut_health1"
if(167 to 207) healths.icon_state = "juggernaut_health2"
@@ -274,10 +277,10 @@
else healths.icon_state = "juggernaut_health7"
-/mob/living/simple_animal/construct/behemoth/Life()
+/mob/living/simple_animal/construct/behemoth/handle_regular_hud_updates()
. = ..()
- if(healths)
- switch(health)
+ if(. && healths)
+ switch(current_health)
if(750 to INFINITY) healths.icon_state = "juggernaut_health0"
if(625 to 749) healths.icon_state = "juggernaut_health1"
if(500 to 624) healths.icon_state = "juggernaut_health2"
@@ -287,10 +290,10 @@
if(1 to 124) healths.icon_state = "juggernaut_health6"
else healths.icon_state = "juggernaut_health7"
-/mob/living/simple_animal/construct/builder/Life()
+/mob/living/simple_animal/construct/builder/handle_regular_hud_updates()
. = ..()
- if(healths)
- switch(health)
+ if(. && healths)
+ switch(current_health)
if(50 to INFINITY) healths.icon_state = "artificer_health0"
if(42 to 49) healths.icon_state = "artificer_health1"
if(34 to 41) healths.icon_state = "artificer_health2"
@@ -302,10 +305,10 @@
-/mob/living/simple_animal/construct/wraith/Life()
+/mob/living/simple_animal/construct/wraith/handle_regular_hud_updates()
. = ..()
- if(healths)
- switch(health)
+ if(. && healths)
+ switch(current_health)
if(75 to INFINITY) healths.icon_state = "wraith_health0"
if(62 to 74) healths.icon_state = "wraith_health1"
if(50 to 61) healths.icon_state = "wraith_health2"
@@ -316,10 +319,10 @@
else healths.icon_state = "wraith_health7"
-/mob/living/simple_animal/construct/harvester/Life()
+/mob/living/simple_animal/construct/harvester/handle_regular_hud_updates()
. = ..()
- if(healths)
- switch(health)
+ if(. && healths)
+ switch(current_health)
if(150 to INFINITY) healths.icon_state = "harvester_health0"
if(125 to 149) healths.icon_state = "harvester_health1"
if(100 to 124) healths.icon_state = "harvester_health2"
diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
index cba1c3eed2f..884576424d5 100644
--- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm
+++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
@@ -5,7 +5,7 @@
desc = "A strange, ridged chunk of some glassy red material. Achingly cold to the touch."
w_class = ITEM_SIZE_SMALL
slot_flags = SLOT_LOWER_BODY
- origin_tech = "{'wormholes':4,'materials':4}"
+ origin_tech = @'{"wormholes":4,"materials":4}'
material = /decl/material/solid/gemstone/crystal
var/full = SOULSTONE_EMPTY
var/is_evil = 1
diff --git a/code/modules/mob/living/simple_animal/crow/crow.dm b/code/modules/mob/living/simple_animal/crow/crow.dm
index bb043602245..e15325ad048 100644
--- a/code/modules/mob/living/simple_animal/crow/crow.dm
+++ b/code/modules/mob/living/simple_animal/crow/crow.dm
@@ -1,12 +1,12 @@
-/obj/item/storage/messenger
- name = "messenger bag"
+/obj/item/storage/backpack/messenger/corvid_couriers
+ name = "corvid messenger bag"
desc = "A small green-grey messenger bag with a blue Corvid Couriers logo on it."
- icon = 'icons/obj/items/messenger_bag.dmi'
+ icon = 'icons/obj/items/storage/backpack/corvid.dmi'
icon_state = ICON_STATE_WORLD
storage_slots = 7
w_class = ITEM_SIZE_SMALL
max_w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/cloth
+ material = /decl/material/solid/organic/cloth
/mob/living/simple_animal/crow
name = "crow"
@@ -26,8 +26,16 @@
universal_speak = TRUE
pass_flags = PASS_FLAG_TABLE
- var/obj/item/storage/messenger/messenger_bag
- var/obj/item/card/id/access_card
+
+/mob/living/simple_animal/crow/get_overlay_state_modifier()
+ return (stat == DEAD) ? "-dead" : null
+
+/decl/bodytype/animal/crow
+ name = "crow"
+ bodytype_category = "crow body"
+
+/mob/living/simple_animal/crow/get_bodytype()
+ return GET_DECL(/decl/bodytype/animal/crow)
/obj/item/natural_weapon/crow_claws
name = "claws"
@@ -38,102 +46,40 @@
/mob/living/simple_animal/crow/Initialize()
. = ..()
- messenger_bag = new(src)
+ add_inventory_slot(new /datum/inventory_slot/back/simple)
+ add_inventory_slot(new /datum/inventory_slot/id)
+ add_held_item_slot(new /datum/inventory_slot/gripper/mouth/simple)
+ equip_to_slot_or_del(new /obj/item/storage/backpack/messenger/corvid_couriers(src), slot_back_str)
update_icon()
-/mob/living/simple_animal/crow/GetIdCards()
- . = ..()
- if (istype(access_card))
- LAZYDISTINCTADD(., access_card)
-
-/mob/living/simple_animal/crow/show_stripping_window(var/mob/user)
- if(user.incapacitated())
- return
- var/list/dat = list()
- if(access_card)
- dat += "ID: [access_card] (Remove)"
- else
- dat += "ID: Nothing"
- if(messenger_bag)
- dat += "Back: [messenger_bag] (Remove)"
- else
- dat += "Back: Nothing"
- var/datum/browser/popup = new(user, "[name]", "Inventory of \the [name]", 350, 150, src)
- popup.set_content(jointext(dat, "
"))
- popup.open()
+/mob/living/simple_animal/crow/get_dexterity(var/silent)
+ return (DEXTERITY_EQUIP_ITEM|DEXTERITY_HOLD_ITEM)
/mob/living/simple_animal/crow/DefaultTopicState()
return global.physical_topic_state
-/mob/living/simple_animal/crow/OnTopic(mob/user, href_list)
- if(!ishuman(user))
- return ..()
- if(href_list["remove_inv"])
- var/obj/item/removed
- switch(href_list["remove_inv"])
- if("access cuff")
- removed = access_card
- access_card = null
- if("back")
- removed = messenger_bag
- messenger_bag = null
- if(removed)
- removed.dropInto(loc)
- usr.put_in_hands(removed)
- visible_message("\The [usr] removes \the [removed] from \the [src]'s [href_list["remove_inv"]].")
- show_stripping_window(usr)
- update_icon()
- else
- to_chat(user, "There is nothing to remove from \the [src]'s [href_list["remove_inv"]].")
- return TOPIC_HANDLED
- if(href_list["add_inv"])
- var/obj/item/equipping = user.get_active_hand()
- if(!equipping)
- to_chat(user, "You have nothing in your hand to put on \the [src]'s [href_list["add_inv"]].")
- return 0
- var/obj/item/equipped
- var/checktype
- switch(href_list["add_inv"])
- if("access cuff")
- equipped = access_card
- checktype = /obj/item/card/id
- if("back")
- equipped = messenger_bag
- checktype = /obj/item/storage/messenger
- if(equipped)
- to_chat(user, "There is already something worn on \the [src]'s [href_list["add_inv"]].")
- return TOPIC_HANDLED
- if(!istype(equipping, checktype))
- to_chat(user, "\The [equipping] won't fit on \the [src]'s [href_list["add_inv"]].")
- return TOPIC_HANDLED
- switch(href_list["add_inv"])
- if("access cuff")
- access_card = equipping
- if("back")
- messenger_bag = equipping
- if(!user.try_unequip(equipping, src))
- return TOPIC_HANDLED
- visible_message("\The [user] places \the [equipping] on to \the [src]'s [href_list["add_inv"]].")
- update_icon()
- show_stripping_window(user)
- return TOPIC_HANDLED
+// Let people interact with the Bird Storage.
+/mob/living/simple_animal/crow/attack_hand(mob/user)
+ if(user.a_intent == I_HELP)
+ var/obj/item/backpack = get_equipped_item(slot_back_str)
+ if(backpack)
+ return backpack.attack_hand(user)
return ..()
-/mob/living/simple_animal/crow/show_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns)
- . = ..()
- if(Adjacent(src))
- if(messenger_bag)
- if(messenger_bag.contents.len)
- to_chat(user, "It's wearing a little messenger bag with a Corvid Couriers logo on it. There's something stuffed inside.")
- else
- to_chat(user, "It's wearing a little messenger bag with a Corvid Couriers logo on it. It seems to be empty.")
- if(access_card)
- to_chat(user, "It has an access cuff with \the [access_card] inserted.")
+/mob/living/simple_animal/crow/attackby(obj/item/I, mob/user)
+ if(user.a_intent == I_HELP)
+ var/obj/item/backpack = get_equipped_item(slot_back_str)
+ if(backpack)
+ return backpack.attackby(I, user)
+ return ..()
/mob/living/simple_animal/crow/on_update_icon()
..()
- if(messenger_bag)
- add_overlay("[icon_state]-bag")
+ var/obj/item/backpack = get_equipped_item(slot_back_str)
+ if(backpack)
+ var/overlay_state = "crow-[icon_state]-bag"
+ if(check_state_in_icon(overlay_state, backpack.icon))
+ add_overlay(image(backpack.icon, overlay_state))
/mob/living/simple_animal/crow/cyber
name = "cybercrow"
diff --git a/code/modules/mob/living/simple_animal/familiars/familiars.dm b/code/modules/mob/living/simple_animal/familiars/familiars.dm
index 5778aa1450c..05a97123b3f 100644
--- a/code/modules/mob/living/simple_animal/familiars/familiars.dm
+++ b/code/modules/mob/living/simple_animal/familiars/familiars.dm
@@ -23,12 +23,8 @@
name = "carcinus"
desc = "A small crab said to be made of stone and starlight."
icon = 'icons/mob/simple_animal/evilcrab.dmi'
-
speak_emote = list("chitters","clicks")
-
-
- health = 200
- maxHealth = 200
+ mob_default_max_health = 200
natural_weapon = /obj/item/natural_weapon/pincers/strong
resistance = 9
can_escape = TRUE //snip snip
@@ -44,16 +40,13 @@
desc = "A bigger, more magical cousin of the space carp."
icon = 'icons/mob/simple_animal/spaceshark.dmi'
pixel_x = -16
+ offset_overhead_text_x = 16
speak_emote = list("gnashes")
-
- health = 100
- maxHealth = 100
+ mob_default_max_health = 100
natural_weapon = /obj/item/natural_weapon/bite
can_escape = TRUE
-
min_gas = null
-
wizardy_spells = list(/spell/aoe_turf/conjure/forcewall)
/mob/living/simple_animal/familiar/pike/Process_Spacemove()
@@ -64,14 +57,10 @@
desc = "Looking at it fills you with dread."
icon = 'icons/mob/simple_animal/horror.dmi'
speak_emote = list("moans", "groans")
-
response_help_1p = "You think better of touching $TARGET$."
response_help_3p = "$USER$ thinks better of touching $TARGET$."
-
- health = 150
- maxHealth = 150
+ mob_default_max_health = 150
natural_weapon = /obj/item/natural_weapon/horror
-
wizardy_spells = list(/spell/targeted/torment)
/obj/item/natural_weapon/horror
@@ -94,8 +83,7 @@
icon = 'icons/mob/simple_animal/amaros.dmi'
speak_emote = list("entones")
mob_size = MOB_SIZE_SMALL
- health = 25
- maxHealth = 25
+ mob_default_max_health = 25
wizardy_spells = list(
/spell/targeted/heal_target,
/spell/targeted/heal_target/area
@@ -105,16 +93,12 @@
name = "elderly mouse"
desc = "A small rodent. It looks very old."
icon = 'icons/mob/simple_animal/mouse_gray.dmi'
-
speak_emote = list("squeeks")
holder_type = /obj/item/holder/mouse
pass_flags = PASS_FLAG_TABLE
mob_size = MOB_SIZE_MINISCULE
-
response_harm = "stamps on"
-
- health = 15
- maxHealth = 15
+ mob_default_max_health = 15
natural_weapon = /obj/item/natural_weapon/bite/mouse
can_escape = TRUE
@@ -133,7 +117,6 @@
speak_emote = list("meows", "purrs")
holder_type = /obj/item/holder
mob_size = MOB_SIZE_SMALL
- health = 25
- maxHealth = 25
+ mob_default_max_health = 25
natural_weapon = /obj/item/natural_weapon/claws/weak
wizardy_spells = list(/spell/targeted/subjugation)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 3f6d9e3d949..5dd92b4c64b 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -16,21 +16,24 @@
mob_size = MOB_SIZE_SMALL
possession_candidate = 1
pass_flags = PASS_FLAG_TABLE
- skin_material = /decl/material/solid/skin/fur/orange
+ skin_material = /decl/material/solid/organic/skin/fur/orange
base_animal_type = /mob/living/simple_animal/cat
-
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
var/mob/flee_target
-/mob/living/simple_animal/cat/Initialize()
- if(isnull(hat_offsets))
- hat_offsets = list(
+/mob/living/simple_animal/cat/get_bodytype()
+ return GET_DECL(/decl/bodytype/animal/cat)
+
+/decl/bodytype/animal/cat/Initialize()
+ equip_adjust = list(
+ slot_head_str = list(
"[NORTH]" = list( 1, -9),
"[SOUTH]" = list( 1, -12),
"[EAST]" = list( 7, -10),
"[WEST]" = list(-7, -10)
)
+ )
. = ..()
/mob/living/simple_animal/cat/do_delayed_life_action()
@@ -138,7 +141,7 @@
desc = "The by-product of cat farming."
icon = 'icons/obj/items/sheet_hide.dmi'
icon_state = "sheet-cat"
- material = /decl/material/solid/leather/fur
+ material = /decl/material/solid/organic/leather/fur
//Basic friend AI
/mob/living/simple_animal/cat/fluff
@@ -150,7 +153,7 @@
var/follow_dist = 4
if (friend.stat >= DEAD || friend.is_asystole()) //danger
follow_dist = 1
- else if (friend.stat || friend.health <= 50) //danger or just sleeping
+ else if (friend.stat || friend.current_health <= 50) //danger or just sleeping
follow_dist = 2
var/near_dist = max(follow_dist - 2, 1)
var/current_dist = get_dist(src, friend)
@@ -192,7 +195,7 @@
"brushes against [friend].",
"rubs against [friend].",
"purrs."))
- else if (friend.health <= 50)
+ else if (friend.current_health <= 50)
if (prob(10))
var/verb = pick("meows", "mews", "mrowls")
audible_emote("[verb] anxiously.")
@@ -226,11 +229,11 @@
desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
gender = FEMALE
icon = 'icons/mob/simple_animal/cat_black.dmi'
- skin_material = /decl/material/solid/skin/fur/black
+ skin_material = /decl/material/solid/organic/skin/fur/black
holder_type = /obj/item/holder/runtime
/obj/item/holder/runtime
- origin_tech = "{'programming':1,'biotech':1}"
+ origin_tech = @'{"programming":1,"biotech":1}'
/mob/living/simple_animal/cat/kitten
name = "kitten"
@@ -241,14 +244,21 @@
bone_amount = 3
skin_amount = 3
-/mob/living/simple_animal/cat/kitten/Initialize()
- if(isnull(hat_offsets))
- hat_offsets = list(
+/mob/living/simple_animal/cat/kitten/get_bodytype()
+ return GET_DECL(/decl/bodytype/animal/kitten)
+
+/decl/bodytype/animal/kitten/Initialize()
+ equip_adjust = list(
+ slot_head_str = list(
"[NORTH]" = list( 1, -14),
"[SOUTH]" = list( 1, -14),
"[EAST]" = list( 5, -14),
"[WEST]" = list(-5, -14)
)
+ )
+ . = ..()
+
+/mob/living/simple_animal/cat/kitten/Initialize()
. = ..()
gender = pick(MALE, FEMALE)
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index e89026fcb0e..38823335ca0 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -20,16 +20,20 @@
meat_type = /obj/item/chems/food/meat/corgi
meat_amount = 3
- skin_material = /decl/material/solid/skin/fur/orange
+ skin_material = /decl/material/solid/organic/skin/fur/orange
-/mob/living/simple_animal/corgi/Initialize()
- if(isnull(hat_offsets))
- hat_offsets = list(
+/mob/living/simple_animal/corgi/get_bodytype()
+ return GET_DECL(/decl/bodytype/animal/corgi)
+
+/decl/bodytype/animal/corgi/Initialize()
+ equip_adjust = list(
+ slot_head_str = list(
"[NORTH]" = list( 1, -8),
"[SOUTH]" = list( 1, -8),
"[EAST]" = list( 7, -8),
"[WEST]" = list(-7, -8)
)
+ )
. = ..()
/mob/living/simple_animal/corgi/harvest_skin()
@@ -41,7 +45,7 @@
desc = "The by-product of corgi farming."
icon = 'icons/obj/items/sheet_hide.dmi'
icon_state = "sheet-corgi"
- material = /decl/material/solid/skin/fur/orange
+ material = /decl/material/solid/organic/skin/fur/orange
//IAN! SQUEEEEEEEEE~
/mob/living/simple_animal/corgi/Ian
@@ -126,14 +130,21 @@
skin_amount = 3
bone_amount = 3
-/mob/living/simple_animal/corgi/puppy/Initialize()
- if(isnull(hat_offsets))
- hat_offsets = list(
+/mob/living/simple_animal/corgi/puppy/get_bodytype()
+ return GET_DECL(/decl/bodytype/animal/puppy)
+
+/decl/bodytype/animal/puppy/Initialize()
+ equip_adjust = list(
+ slot_head_str = list(
"[NORTH]" = list( 0, -12),
"[SOUTH]" = list( 0, -12),
"[EAST]" = list( 5, -14),
"[WEST]" = list(-5, -14)
)
+ )
+ . = ..()
+
+/mob/living/simple_animal/corgi/puppy/Initialize()
. = ..()
gender = pick(MALE, FEMALE)
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 4d45259f996..764b7b281d4 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -21,14 +21,23 @@
ai = /datum/ai/crab
meat_amount = 3
- skin_material = /decl/material/solid/skin/insect
+ skin_material = /decl/material/solid/organic/skin/insect
skin_amount = 10
bone_material = null
bone_amount = 0
-/mob/living/simple_animal/crab/Initialize()
- if(isnull(hat_offsets))
- hat_offsets = list("[SOUTH]" = list(-1, -10))
+/mob/living/simple_animal/crab/get_bodytype()
+ return GET_DECL(/decl/bodytype/animal/crab)
+
+/decl/bodytype/animal/crab/Initialize()
+ equip_adjust = list(
+ slot_head_str = list(
+ "[NORTH]" = list(-1, -10),
+ "[SOUTH]" = list(-1, -10),
+ "[EAST]" = list(-1, -10),
+ "[WEST]" = list(-1, -10)
+ )
+ )
. = ..()
/datum/ai/crab
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index ba19248f19e..82f26fade46 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -11,13 +11,13 @@
turns_per_move = 5
see_in_dark = 6
faction = "goat"
- health = 40
+ mob_default_max_health = 40
natural_weapon = /obj/item/natural_weapon/hooves
meat_type = /obj/item/chems/food/meat/goat
meat_amount = 4
bone_amount = 8
- skin_material = /decl/material/solid/skin/goat
+ skin_material = /decl/material/solid/organic/skin/goat
skin_amount = 8
ai = /datum/ai/goat
@@ -28,10 +28,9 @@
expected_type = /mob/living/simple_animal/hostile/retaliate/goat
/datum/ai/goat/do_process(time_elapsed)
- . = ..()
- var/mob/living/simple_animal/hostile/retaliate/goat/goat = body
//chance to go crazy and start wacking stuff
+ var/mob/living/simple_animal/hostile/retaliate/goat/goat = body
if(!length(goat.enemies) && prob(1))
goat.Retaliate()
@@ -66,7 +65,7 @@
QDEL_NULL(udder)
. = ..()
-/mob/living/simple_animal/hostile/retaliate/goat/handle_regular_status_updates()
+/mob/living/simple_animal/hostile/retaliate/goat/handle_living_non_stasis_processes()
. = ..()
if(. && stat == CONSCIOUS && udder && prob(5))
udder.add_reagent(/decl/material/liquid/drink/milk, rand(5, 10))
@@ -100,12 +99,12 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
- health = 50
+ mob_default_max_health = 50
meat_type = /obj/item/chems/food/meat/beef
meat_amount = 6
bone_amount = 10
- skin_material = /decl/material/solid/skin/cow
+ skin_material = /decl/material/solid/organic/skin/cow
skin_amount = 10
var/datum/reagents/udder = null
@@ -140,7 +139,7 @@
return TRUE
. = ..()
-/mob/living/simple_animal/cow/handle_regular_status_updates()
+/mob/living/simple_animal/cow/handle_living_non_stasis_processes()
. = ..()
if(. && udder && prob(5))
udder.add_reagent(/decl/material/liquid/drink/milk, rand(5, 10))
@@ -149,7 +148,7 @@
if(stat != DEAD && !HAS_STATUS(src, STAT_WEAK))
user.visible_message(SPAN_NOTICE("\The [user] tips over \the [src]."))
SET_STATUS_MAX(src, STAT_WEAK, 30)
- addtimer(CALLBACK(src, .proc/do_tip_response), rand(20, 50))
+ addtimer(CALLBACK(src, PROC_REF(do_tip_response)), rand(20, 50))
return TRUE
return ..()
@@ -167,7 +166,7 @@
emote_see = list("pecks at the ground","flaps its tiny wings")
speak_chance = 2
turns_per_move = 2
- health = 1
+ mob_default_max_health = 1
pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE
mob_size = MOB_SIZE_MINISCULE
@@ -175,7 +174,7 @@
meat_amount = 1
bone_amount = 3
skin_amount = 3
- skin_material = /decl/material/solid/skin/feathers
+ skin_material = /decl/material/solid/organic/skin/feathers
var/amount_grown = 0
@@ -184,14 +183,13 @@
pixel_x = rand(-6, 6)
pixel_y = rand(0, 10)
-/mob/living/simple_animal/chick/Life()
+/mob/living/simple_animal/chick/handle_living_non_stasis_processes()
. = ..()
- if(!.)
- return FALSE
- amount_grown += rand(1,2)
- if(amount_grown >= 100)
- new /mob/living/simple_animal/chicken(src.loc)
- qdel(src)
+ if(.)
+ amount_grown += rand(1,2)
+ if(amount_grown >= 100)
+ new /mob/living/simple_animal/chicken(src.loc)
+ qdel(src)
var/global/const/MAX_CHICKENS = 50
var/global/chicken_count = 0
@@ -206,13 +204,13 @@ var/global/chicken_count = 0
emote_see = list("pecks at the ground","flaps its wings viciously")
speak_chance = 2
turns_per_move = 3
- health = 10
+ mob_default_max_health = 10
pass_flags = PASS_FLAG_TABLE
mob_size = MOB_SIZE_SMALL
meat_type = /obj/item/chems/food/meat/chicken
meat_amount = 2
- skin_material = /decl/material/solid/skin/feathers
+ skin_material = /decl/material/solid/organic/skin/feathers
var/eggsleft = 0
var/body_color
@@ -251,11 +249,9 @@ var/global/chicken_count = 0
else
..()
-/mob/living/simple_animal/chicken/Life()
+/mob/living/simple_animal/chicken/handle_living_non_stasis_processes()
. = ..()
- if(!.)
- return FALSE
- if(prob(3) && eggsleft > 0)
+ if(. && prob(3) && eggsleft > 0)
visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]")
eggsleft--
var/obj/item/chems/food/egg/E = new(get_turf(src))
diff --git a/code/modules/mob/living/simple_animal/friendly/koala.dm b/code/modules/mob/living/simple_animal/friendly/koala.dm
index ecf21426047..ef7eba50ca6 100644
--- a/code/modules/mob/living/simple_animal/friendly/koala.dm
+++ b/code/modules/mob/living/simple_animal/friendly/koala.dm
@@ -3,8 +3,7 @@
name = "koala"
desc = "A little grey bear. How long is he gonna sleep today?"
icon = 'icons/mob/simple_animal/koala.dmi'
- maxHealth = 45
- health = 45
+ mob_default_max_health = 45
speed = 4
speak = list("Rrr", "Wraarh...", "Pfrrr...")
speak_emote = list("roar")
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 3f8ddca2abc..093245642b3 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -3,8 +3,7 @@
desc = "A cute tiny lizard."
icon = 'icons/mob/simple_animal/lizard.dmi'
speak_emote = list("hisses")
- health = 5
- maxHealth = 5
+ mob_default_max_health = 5
natural_weapon = /obj/item/natural_weapon/bite/weak
response_harm = "stamps on"
mob_size = MOB_SIZE_MINISCULE
@@ -15,4 +14,4 @@
meat_amount = 1
bone_amount = 1
skin_amount = 1
- skin_material = /decl/material/solid/skin/lizard
+ skin_material = /decl/material/solid/organic/skin/lizard
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 099ed0c928c..4e841b450f1 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -11,8 +11,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
- health = 5
- maxHealth = 5
+ mob_default_max_health = 5
response_harm = "stamps on"
density = FALSE
minbodytemp = 223 //Below -50 Degrees Celsius
@@ -30,14 +29,14 @@
meat_amount = 1
bone_amount = 1
skin_amount = 1
- skin_material = /decl/material/solid/skin/fur
+ skin_material = /decl/material/solid/organic/skin/fur
ai = /datum/ai/mouse
var/body_color //brown, gray and white, leave blank for random
var/splatted = FALSE
-/mob/living/simple_animal/mouse/get_dexterity(var/silent = FALSE)
+/mob/living/simple_animal/mouse/get_dexterity(var/silent)
return DEXTERITY_NONE // Mice are troll bait, give them no power.
/datum/ai/mouse
@@ -57,7 +56,7 @@
mouse.set_stat(CONSCIOUS)
mouse.wander = 1
else if(prob(5))
- INVOKE_ASYNC(mouse, /mob/living/simple_animal/proc/audible_emote, "snuffles.")
+ INVOKE_ASYNC(mouse, TYPE_PROC_REF(/mob/living/simple_animal, audible_emote), "snuffles.")
/mob/living/simple_animal/mouse/Initialize()
verbs += /mob/living/proc/ventcrawl
@@ -73,17 +72,17 @@
body_color = pick( list("brown","gray","white") )
switch(body_color)
if("gray")
- skin_material = /decl/material/solid/skin/fur/gray
+ skin_material = /decl/material/solid/organic/skin/fur/gray
icon = 'icons/mob/simple_animal/mouse_gray.dmi'
if("white")
- skin_material = /decl/material/solid/skin/fur/white
+ skin_material = /decl/material/solid/organic/skin/fur/white
icon = 'icons/mob/simple_animal/mouse_white.dmi'
if("brown")
icon = 'icons/mob/simple_animal/mouse_brown.dmi'
desc = "It's a small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
/mob/living/simple_animal/mouse/proc/splat()
- adjustBruteLoss(maxHealth) // Enough damage to kill
+ adjustBruteLoss(get_max_health()) // Enough damage to kill
splatted = TRUE
death()
@@ -92,13 +91,12 @@
if(stat == DEAD && splatted)
icon_state = "world-splat"
-/mob/living/simple_animal/mouse/Crossed(AM)
- if( ishuman(AM) )
- if(!stat)
- var/mob/M = AM
- to_chat(M, "[html_icon(src)] Squeek!")
- sound_to(M, 'sound/effects/mousesqueek.ogg')
+/mob/living/simple_animal/mouse/Crossed(atom/movable/AM)
..()
+ if(!ishuman(AM) || stat)
+ return
+ to_chat(AM, SPAN_WARNING("[html_icon(src)] Squeek!"))
+ sound_to(AM, 'sound/effects/mousesqueek.ogg')
/*
* Mouse types
@@ -132,9 +130,8 @@
desc = "A large rodent, often seen hiding in maintenance areas and making a nuisance of itself."
body_color = "rat"
icon = 'icons/mob/simple_animal/rat.dmi'
- skin_material = /decl/material/solid/skin/fur/gray
- maxHealth = 20
- health = 20
+ skin_material = /decl/material/solid/organic/skin/fur/gray
+ mob_default_max_health = 20
/mob/living/simple_animal/mouse/rat/set_mouse_icon()
return
diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm
index 7ff5cd05078..c73bcdd1f8f 100644
--- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mushroom.dm
@@ -5,8 +5,7 @@
mob_size = MOB_SIZE_SMALL
speak_chance = 0
turns_per_move = 1
- health = 5
- maxHealth = 5
+ mob_default_max_health = 5
harm_intent_damage = 5
pass_flags = PASS_FLAG_TABLE
@@ -51,7 +50,7 @@
. = ..(gibbed, deathmessage, show_dead_message)
if(.)
total_mushrooms--
- if(total_mushrooms < config.maximum_mushrooms && prob(30))
+ if(total_mushrooms < get_config_value(/decl/config/num/maximum_mushrooms) && prob(30))
spore_explode()
/mob/living/simple_animal/mushroom/proc/spore_explode()
diff --git a/code/modules/mob/living/simple_animal/friendly/possum.dm b/code/modules/mob/living/simple_animal/friendly/possum.dm
index 823c15a29da..d9d8fef29a4 100644
--- a/code/modules/mob/living/simple_animal/friendly/possum.dm
+++ b/code/modules/mob/living/simple_animal/friendly/possum.dm
@@ -11,8 +11,7 @@
speak_chance = 1
turns_per_move = 3
see_in_dark = 6
- maxHealth = 50
- health = 50
+ mob_default_max_health = 50
response_harm = "stamps on"
density = FALSE
minbodytemp = 223
@@ -48,12 +47,12 @@
if(prob(10))
poss.is_angry = TRUE
-/mob/living/simple_animal/opossum/adjustBruteLoss(damage)
+/mob/living/simple_animal/opossum/adjustBruteLoss(damage, do_update_health = FALSE)
. = ..()
if(damage >= 3)
respond_to_damage()
-/mob/living/simple_animal/opossum/adjustFireLoss(damage)
+/mob/living/simple_animal/opossum/adjustFireLoss(damage, do_update_health = TRUE)
. = ..()
if(damage >= 3)
respond_to_damage()
@@ -93,11 +92,11 @@
/mob/living/simple_animal/opossum/poppy/hear_broadcast(decl/language/language, mob/speaker, speaker_name, message)
. = ..()
- addtimer(CALLBACK(src, .proc/check_keywords, message), rand(1 SECOND, 3 SECONDS))
+ addtimer(CALLBACK(src, PROC_REF(check_keywords), message), rand(1 SECOND, 3 SECONDS))
/mob/living/simple_animal/opossum/poppy/hear_say(var/message, var/verb = "says", var/decl/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
. = ..()
- addtimer(CALLBACK(src, .proc/check_keywords, message), rand(1 SECOND, 3 SECONDS))
+ addtimer(CALLBACK(src, PROC_REF(check_keywords), message), rand(1 SECOND, 3 SECONDS))
/mob/living/simple_animal/opossum/poppy/proc/check_keywords(var/message)
if(!client && stat == CONSCIOUS)
diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm
index 68378e536d5..f451ae9243e 100644
--- a/code/modules/mob/living/simple_animal/friendly/tomato.dm
+++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm
@@ -4,8 +4,7 @@
icon = 'icons/mob/simple_animal/tomato.dmi'
speak_chance = 0
turns_per_move = 5
- maxHealth = 15
- health = 15
+ mob_default_max_health = 15
response_help_3p = "$USER$ pokes $TARGET$."
response_help_1p = "You poke $TARGET$."
harm_intent_damage = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/antlion.dm b/code/modules/mob/living/simple_animal/hostile/antlion.dm
index 132fb13fd5d..5f604dfdc9c 100644
--- a/code/modules/mob/living/simple_animal/hostile/antlion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/antlion.dm
@@ -9,9 +9,7 @@
response_harm = "strikes"
faction = "antlions"
bleed_colour = COLOR_SKY_BLUE
-
- health = 65
- maxHealth = 65
+ mob_default_max_health = 65
natural_weapon = /obj/item/natural_weapon/bite
natural_armor = list(
ARMOR_MELEE = ARMOR_MELEE_KNIVES
@@ -20,30 +18,25 @@
meat_type = /obj/item/chems/food/xenomeat
meat_amount = 5
- skin_material = /decl/material/solid/skin/insect
+ skin_material = /decl/material/solid/organic/skin/insect
skin_amount = 15
- bone_material = /decl/material/solid/bone/cartilage
+ bone_material = /decl/material/solid/organic/bone/cartilage
bone_amount = 10
var/healing = FALSE
var/heal_amount = 6
-/mob/living/simple_animal/hostile/antlion/Life()
+/mob/living/simple_animal/hostile/antlion/handle_regular_status_updates()
. = ..()
-
process_healing() //this needs to occur before if(!.) because of stop_automation
-
- if(!.)
- return
-
- if(!is_on_special_ability_cooldown() && can_act() && target_mob)
+ if(. && !is_on_special_ability_cooldown() && can_act() && target_mob)
vanish()
/mob/living/simple_animal/hostile/antlion/proc/vanish()
visible_message(SPAN_NOTICE("\The [src] burrows into \the [get_turf(src)]!"))
set_invisibility(INVISIBILITY_OBSERVER)
prep_burrow(TRUE)
- addtimer(CALLBACK(src, .proc/diggy), 5 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(diggy)), 5 SECONDS)
/mob/living/simple_animal/hostile/antlion/proc/diggy()
var/list/turf_targets
@@ -62,12 +55,12 @@
continue
turf_targets += T
if(!LAZYLEN(turf_targets)) //oh no
- addtimer(CALLBACK(src, .proc/emerge), 2 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(emerge)), 2 SECONDS)
return
var/turf/T = pick(turf_targets)
if(T && !incapacitated())
forceMove(T)
- addtimer(CALLBACK(src, .proc/emerge), 2 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(emerge)), 2 SECONDS)
/mob/living/simple_animal/hostile/antlion/proc/emerge()
var/turf/T = get_turf(src)
@@ -83,10 +76,8 @@
SET_STATUS_MAX(H, STAT_WEAK, 1)
/mob/living/simple_animal/hostile/antlion/proc/process_healing()
- if(!incapacitated() && healing)
- var/old_health = health
- if(old_health < maxHealth)
- health = old_health + heal_amount
+ if(!incapacitated() && healing && current_health < get_max_health())
+ heal_overall_damage(rand(heal_amount), rand(heal_amount))
/mob/living/simple_animal/hostile/antlion/proc/prep_burrow(var/new_bool)
stop_automated_movement = new_bool
@@ -98,8 +89,7 @@
desc = "A huge antlion. It looks displeased."
icon = 'icons/mob/simple_animal/antlion_queen.dmi'
mob_size = MOB_SIZE_LARGE
- health = 275
- maxHealth = 275
+ mob_default_max_health = 275
natural_weapon = /obj/item/natural_weapon/bite/megalion
natural_armor = list(
ARMOR_MELEE = ARMOR_MELEE_RESISTANT
@@ -110,7 +100,7 @@
break_stuff_probability = 25
meat_amount = 10
- skin_material = /decl/material/solid/skin/insect
+ skin_material = /decl/material/solid/organic/skin/insect
skin_amount = 25
bone_amount = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm
index dcc52f05f7e..89c7a8b0f6e 100644
--- a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm
@@ -5,8 +5,7 @@
speak = list("Removing organic waste.","Pest control in progress.","Seize the means of maintenance!", "You have nothing to lose but your laws!")
speak_emote = list("blares","buzzes","beeps")
speak_chance = 1
- health = 50
- maxHealth = 50
+ mob_default_max_health = 50
natural_weapon = /obj/item/natural_weapon/drone_slicer
faction = "silicon"
min_gas = null
@@ -15,6 +14,7 @@
speed = 4
mob_size = MOB_SIZE_TINY
gene_damage = -1
+ attack_delay = DEFAULT_QUICK_COOLDOWN
var/corpse = /obj/effect/decal/cleanable/blood/gibs/robot
/mob/living/simple_animal/hostile/rogue_drone/Initialize()
diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm
index a8e67b0ccea..829de9c40b0 100644
--- a/code/modules/mob/living/simple_animal/hostile/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bat.dm
@@ -5,18 +5,13 @@
speak_chance = 0
turns_per_move = 3
speed = 4
- maxHealth = 20
- health = 20
-
+ mob_default_max_health = 20
harm_intent_damage = 8
natural_weapon = /obj/item/natural_weapon/bite
-
min_gas = null
max_gas = null
minbodytemp = 0
-
environment_smash = 1
-
faction = "scarybat"
var/mob/living/owner
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index ac281502ca3..f6d7712a7c4 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -12,8 +12,7 @@
see_in_dark = 6
response_harm = "pokes"
stop_automated_movement_when_pulled = 0
- maxHealth = 60
- health = 60
+ mob_default_max_health = 60
natural_weapon = /obj/item/natural_weapon/claws/strong
can_escape = TRUE
faction = "russian"
@@ -28,7 +27,7 @@
meat_amount = 10
bone_amount = 20
skin_amount = 20
- skin_material = /decl/material/solid/skin/fur/heavy
+ skin_material = /decl/material/solid/organic/skin/fur/heavy
var/stance_step = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index a3d7ab44e65..5fcc88f7544 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -5,9 +5,7 @@
speak_chance = 0
turns_per_move = 3
speed = 2
- maxHealth = 50
- health = 50
-
+ mob_default_max_health = 50
harm_intent_damage = 8
natural_weapon = /obj/item/natural_weapon/bite
pry_time = 10 SECONDS
@@ -24,8 +22,8 @@
pass_flags = PASS_FLAG_TABLE
meat_type = /obj/item/chems/food/fish/poison
- skin_material = /decl/material/solid/skin/fish/purple
- bone_material = /decl/material/solid/bone/cartilage
+ skin_material = /decl/material/solid/organic/skin/fish/purple
+ bone_material = /decl/material/solid/organic/bone/cartilage
var/carp_color = COLOR_PURPLE
/mob/living/simple_animal/hostile/carp/Initialize()
@@ -34,8 +32,8 @@
update_icon()
/mob/living/simple_animal/hostile/carp/proc/carp_randomify()
- maxHealth = rand(initial(maxHealth), (1.5 * initial(maxHealth)))
- health = maxHealth
+ mob_default_max_health = rand(initial(mob_default_max_health), (1.5 * initial(mob_default_max_health)))
+ current_health = mob_default_max_health
if(prob(1))
carp_color = pick(COLOR_WHITE, COLOR_BLACK)
else
diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm
index c8a813acc0b..9057661d22f 100644
--- a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm
@@ -2,8 +2,7 @@
name = "bear"
desc = "A large brown bear."
icon = 'icons/mob/simple_animal/bear_brown.dmi'
- health = 75
- maxHealth = 75
+ mob_default_max_health = 75
density = TRUE
natural_weapon = /obj/item/natural_weapon/claws
can_escape = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm b/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm
index 680471b3996..10da002cdd7 100644
--- a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm
+++ b/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm
@@ -6,8 +6,7 @@
desc = "a cloud of tiny, tiny robots."
icon = 'icons/mob/simple_animal/nanomachines.dmi'
natural_weapon = /obj/item/natural_weapon/nanomachine
- health = 10
- maxHealth = 10
+ mob_default_max_health = 10
can_escape = TRUE
known_commands = list("stay", "stop", "attack", "follow", "heal", "emergency protocol")
gene_damage = -1
@@ -15,6 +14,7 @@
response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$."
response_harm = "agitates"
response_disarm = "fans at"
+ ai = /datum/ai/nanomachines
var/regen_time = 0
var/emergency_protocols = 0
@@ -25,20 +25,28 @@
force = 2
sharp = TRUE
-/mob/living/simple_animal/hostile/commanded/nanomachine/Life()
- regen_time++
- if(regen_time == 2 && health < maxHealth) //slow regen
- regen_time = 0
- health++
+/datum/ai/nanomachines
+ expected_type = /mob/living/simple_animal/hostile/commanded/nanomachine
+
+/datum/ai/nanomachines/do_process(time_elapsed)
+ . = ..()
+ var/mob/living/simple_animal/hostile/commanded/nanomachine/swarm = body
+ switch(swarm.stance)
+ if(COMMANDED_HEAL)
+ if(!swarm.target_mob)
+ swarm.target_mob = swarm.FindTarget(COMMANDED_HEAL)
+ if(swarm.target_mob)
+ swarm.move_to_heal()
+ if(COMMANDED_HEALING)
+ swarm.heal()
+
+/mob/living/simple_animal/hostile/commanded/nanomachine/handle_living_non_stasis_processes()
. = ..()
if(.)
- switch(stance)
- if(COMMANDED_HEAL)
- if(!target_mob)
- target_mob = FindTarget(COMMANDED_HEAL)
- move_to_heal()
- if(COMMANDED_HEALING)
- heal()
+ regen_time++
+ if(regen_time == 2 && current_health < get_max_health()) //slow regen
+ regen_time = 0
+ heal_overall_damage(1)
/mob/living/simple_animal/hostile/commanded/nanomachine/death(gibbed, deathmessage, show_dead_message)
..(null, "dissipates into thin air", "You have been destroyed.")
@@ -52,21 +60,21 @@
stance = COMMANDED_HEALING
/mob/living/simple_animal/hostile/commanded/nanomachine/proc/heal()
- if(health <= 3 && !emergency_protocols) //dont die doing this.
+ if(current_health <= 3 && !emergency_protocols) //dont die doing this.
return 0
if(!target_mob)
return 0
if(!Adjacent(target_mob) || SA_attackable(target_mob))
stance = COMMANDED_HEAL
return 0
- if(target_mob.stat || target_mob.health >= target_mob.maxHealth) //he's either dead or healthy, move along.
+ if(target_mob.stat || target_mob.current_health >= target_mob.get_max_health()) //he's either dead or healthy, move along.
allowed_targets -= target_mob
target_mob = null
stance = COMMANDED_HEAL
return 0
src.visible_message("\The [src] glows green for a moment, healing \the [target_mob]'s wounds.")
- health -= 3
- target_mob.adjustBruteLoss(-5)
+ adjustBruteLoss(3)
+ target_mob.adjustBruteLoss(-5, do_update_health = FALSE)
target_mob.adjustFireLoss(-5)
/mob/living/simple_animal/hostile/commanded/nanomachine/misc_command(var/mob/speaker,var/text)
diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm
index ae369e9d1cf..e8e35615a5e 100644
--- a/code/modules/mob/living/simple_animal/hostile/creature.dm
+++ b/code/modules/mob/living/simple_animal/hostile/creature.dm
@@ -3,8 +3,7 @@
desc = "A sanity-destroying otherthing."
icon = 'icons/mob/simple_animal/creature.dmi'
speak_emote = list("gibbers")
- health = 100
- maxHealth = 100
+ mob_default_max_health = 100
natural_weapon = /obj/item/natural_weapon/bite/strong
faction = "creature"
speed = 4
diff --git a/code/modules/mob/living/simple_animal/hostile/drake.dm b/code/modules/mob/living/simple_animal/hostile/drake.dm
index 772bf52b138..c1c26a3184c 100644
--- a/code/modules/mob/living/simple_animal/hostile/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/drake.dm
@@ -11,11 +11,8 @@
pry_time = 4 SECONDS
skull_type = /obj/item/whip/tail
bleed_colour = COLOR_VIOLET
-
- health = 200
- maxHealth = 200
+ mob_default_max_health = 200
natural_weapon = /obj/item/natural_weapon/claws/drake
- var/obj/item/whip/tail/tailwhip
natural_armor = list(
ARMOR_MELEE = ARMOR_MELEE_RESISTANT,
ARMOR_ENERGY = ARMOR_ENERGY_SHIELDED,
@@ -24,6 +21,7 @@
)
ability_cooldown = 80 SECONDS
+ var/obj/item/whip/tail/tailwhip
var/empowered_attack = FALSE
var/gas_spent = FALSE
diff --git a/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm b/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm
index 65ddca6a05a..4f7b1049876 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm
@@ -3,8 +3,7 @@
desc = "A spooky looking ghost dog. Does not look friendly."
icon = 'icons/mob/simple_animal/corgi_ghost.dmi'
blend_mode = BLEND_SUBTRACT
- health = 100
- maxHealth = 100
+ mob_default_max_health = 100
natural_weapon = /obj/item/natural_weapon/bite/strong
faction = MOB_FACTION_NEUTRAL
density = FALSE
@@ -42,9 +41,7 @@
var/mob/living/M = m
var/dist = get_dist(M, src)
if(dist < 2) //Attack! Attack!
- var/attacking_with = get_natural_weapon()
- if(attacking_with)
- M.attackby(attacking_with, src)
+ UnarmedAttack(M, TRUE)
return .
else if(dist == 2)
new_aggress = 3
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 5fe45352ed9..8c694c3bc8e 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -7,8 +7,7 @@
response_help_1p = "You wave your hand through $TARGET$."
response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$."
speed = -1
- maxHealth = 80
- health = 80
+ mob_default_max_health = 80
gene_damage = -1
harm_intent_damage = 10
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 3739433fb1d..cd6186aaf6e 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -15,8 +15,7 @@
turns_per_move = 5
see_in_dark = 10
response_harm = "pokes"
- maxHealth = 125
- health = 125
+ mob_default_max_health = 125
natural_weapon = /obj/item/natural_weapon/bite
heat_damage_per_tick = 20
cold_damage_per_tick = 20
@@ -39,7 +38,7 @@
meat_amount = 3
bone_material = null
bone_amount = 0
- skin_material = /decl/material/solid/skin/insect
+ skin_material = /decl/material/solid/organic/skin/insect
skin_amount = 5
glowing_eyes = TRUE
@@ -65,8 +64,7 @@
/mob/living/simple_animal/hostile/giant_spider/guard
desc = "A monstrously huge brown spider with shimmering eyes."
meat_amount = 4
- maxHealth = 200
- health = 200
+ mob_default_max_health = 200
natural_weapon = /obj/item/natural_weapon/bite/strong
poison_per_bite = 5
speed = 2
@@ -82,8 +80,7 @@
/mob/living/simple_animal/hostile/giant_spider/nurse
desc = "A monstrously huge beige spider with shimmering eyes."
icon = 'icons/mob/simple_animal/spider_beige.dmi'
- maxHealth = 80
- health = 80
+ mob_default_max_health = 80
harm_intent_damage = 6 //soft
poison_per_bite = 5
speed = 0
@@ -98,15 +95,16 @@
var/mob/living/simple_animal/hostile/giant_spider/guard/paired_guard
//things we can't encase in a cocoon
- var/list/cocoon_blacklist = list(/mob/living/simple_animal/hostile/giant_spider,
- /obj/structure/closet)
+ var/static/list/cocoon_blacklist = list(
+ /mob/living/simple_animal/hostile/giant_spider,
+ /obj/structure/closet
+ )
//hunters - the most damage, fast, average health and the only caste tenacious enough to break out of nets
/mob/living/simple_animal/hostile/giant_spider/hunter
desc = "A monstrously huge black spider with shimmering eyes."
icon = 'icons/mob/simple_animal/spider_black.dmi'
- maxHealth = 150
- health = 150
+ mob_default_max_health = 150
natural_weapon = /obj/item/natural_weapon/bite/strong
poison_per_bite = 10
speed = -1
@@ -126,8 +124,7 @@
/mob/living/simple_animal/hostile/giant_spider/spitter
desc = "A monstrously huge iridescent spider with shimmering eyes."
icon = 'icons/mob/simple_animal/spider_purple.dmi'
- maxHealth = 90
- health = 90
+ mob_default_max_health = 90
poison_per_bite = 15
ranged = TRUE
move_to_delay = 2
@@ -148,8 +145,7 @@
. = ..()
/mob/living/simple_animal/hostile/giant_spider/proc/spider_randomify() //random math nonsense to get their damage, health and venomness values
- maxHealth = rand(initial(maxHealth), (1.4 * initial(maxHealth)))
- health = maxHealth
+ set_max_health(rand(initial(mob_default_max_health), (1.4 * initial(mob_default_max_health))))
eye_colour = pick(allowed_eye_colours)
update_icon()
@@ -165,10 +161,10 @@
/mob/living/simple_animal/hostile/giant_spider/AttackingTarget()
. = ..()
if(isliving(.))
- if(health < maxHealth)
+ if(current_health < get_max_health())
var/obj/item/attacking_with = get_natural_weapon()
if(attacking_with)
- health += (0.2 * attacking_with.force) //heal a bit on hit
+ heal_overall_damage(0.2 * attacking_with.force) //heal a bit on hit
if(ishuman(.))
var/mob/living/carbon/human/H = .
var/obj/item/clothing/suit/space/S = H.get_covering_equipped_item_by_zone(BP_CHEST)
@@ -190,7 +186,7 @@
if(!spooder.busy && prob(spooder.hunt_chance))
spooder.stop_automated_movement = 1
walk_to(spooder, pick(orange(20, spooder)), 1, spooder.move_to_delay)
- addtimer(CALLBACK(spooder, /mob/living/simple_animal/hostile/giant_spider/proc/disable_stop_automated_movement), 5 SECONDS)
+ addtimer(CALLBACK(spooder, TYPE_PROC_REF(/mob/living/simple_animal/hostile/giant_spider, disable_stop_automated_movement)), 5 SECONDS)
/mob/living/simple_animal/hostile/giant_spider/proc/disable_stop_automated_movement()
stop_automated_movement = 0
@@ -244,7 +240,7 @@ Guard caste procs
/mob/living/simple_animal/hostile/giant_spider/guard/proc/protect(mob/nurse)
stop_automated_movement = 1
walk_to(src, nurse, 2, move_to_delay)
- addtimer(CALLBACK(src, /mob/living/simple_animal/hostile/giant_spider/proc/disable_stop_automated_movement), 5 SECONDS)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_animal/hostile/giant_spider, disable_stop_automated_movement)), 5 SECONDS)
/mob/living/simple_animal/hostile/giant_spider/guard/proc/go_berserk()
audible_message("\The [src] chitters wildly!")
@@ -253,7 +249,7 @@ Guard caste procs
attacking_with.force = initial(attacking_with.force) + 5
move_to_delay--
break_stuff_probability = 45
- addtimer(CALLBACK(src, .proc/calm_down), 3 MINUTES)
+ addtimer(CALLBACK(src, PROC_REF(calm_down)), 3 MINUTES)
/mob/living/simple_animal/hostile/giant_spider/guard/proc/calm_down()
berserking = FALSE
@@ -418,7 +414,7 @@ Nurse caste procs
/*****************
Hunter caste procs
*****************/
-/mob/living/simple_animal/hostile/giant_spider/hunter/MoveToTarget()
+/mob/living/simple_animal/hostile/giant_spider/hunter/MoveToTarget(var/move_only = FALSE)
if(!can_act() || perform_maneuver(/decl/maneuver/leap/spider, target_mob))
return
..()
@@ -462,8 +458,9 @@ Spitter caste procs
ranged = TRUE
/mob/living/simple_animal/hostile/giant_spider/spitter/Shoot()
- ..()
- venom_charge--
+ . = ..()
+ if(.)
+ venom_charge--
#undef SPINNING_WEB
#undef LAYING_EGGS
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index ccc49290809..2509a5c7c9f 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -2,8 +2,7 @@
name = "hivebot"
desc = "A junky looking robot with four spiky legs."
icon = 'icons/mob/simple_animal/hivebot.dmi'
- health = 55
- maxHealth = 55
+ mob_default_max_health = 55
natural_weapon = /obj/item/natural_weapon/drone_slicer
projectilesound = 'sound/weapons/gunshot/gunshot_pistol.ogg'
projectiletype = /obj/item/projectile/beam/smalllaser
@@ -26,6 +25,9 @@
skin_material = null
skin_amount = 0
+/mob/living/simple_animal/hostile/hivebot/check_has_mouth()
+ return FALSE
+
/mob/living/simple_animal/hostile/hivebot/range
desc = "A junky looking robot with four spiky legs. It's equipped with some kind of small-bore gun."
ranged = 1
@@ -37,8 +39,7 @@
/mob/living/simple_animal/hostile/hivebot/strong
desc = "A junky looking robot with four spiky legs - this one has thick armour plating."
- health = 120
- maxHealth = 120
+ mob_default_max_health = 120
ranged = 1
can_escape = 1
natural_armor = list(
@@ -52,63 +53,6 @@
qdel(src)
return
-/*
-Teleporter beacon, and its subtypes
-*/
-/mob/living/simple_animal/hostile/hivebot/tele // _why is this a mob_
- name = "beacon"
- desc = "Some odd beacon thing."
- icon = 'icons/obj/structures/hivebot_props.dmi'
- icon_state = "def_radar-off"
- health = 200
- maxHealth = 200
- status_flags = 0
- anchored = TRUE
- stop_automated_movement = 1
-
- var/bot_type = /mob/living/simple_animal/hostile/hivebot
- var/bot_amt = 10
- var/spawn_delay = 100
- var/spawn_time = 0
-
-/mob/living/simple_animal/hostile/hivebot/tele/Initialize()
- . = ..()
- var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
- smoke.set_up(5, 0, src.loc)
- smoke.start()
- visible_message("\The [src] warps in!")
- playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1)
-
-/mob/living/simple_animal/hostile/hivebot/tele/proc/warpbots()
- while(bot_amt > 0 && bot_type)
- bot_amt--
- var/mob/M = new bot_type(get_turf(src))
- M.faction = faction
- playsound(src.loc, 'sound/effects/teleport.ogg', 50, 1)
- qdel(src)
- return
-
-/mob/living/simple_animal/hostile/hivebot/tele/FindTarget()
- if(..() && !spawn_time)
- spawn_time = world.time + spawn_delay
- visible_message("\The [src] turns on!")
- icon_state = "def_radar"
- return null
-
-/mob/living/simple_animal/hostile/hivebot/tele/Life()
- . = ..()
- if(. && spawn_time && spawn_time <= world.time)
- warpbots()
-
-/mob/living/simple_animal/hostile/hivebot/tele/strong
- bot_type = /mob/living/simple_animal/hostile/hivebot/strong
-
-/mob/living/simple_animal/hostile/hivebot/tele/range
- bot_type = /mob/living/simple_animal/hostile/hivebot/range
-
-/mob/living/simple_animal/hostile/hivebot/tele/rapid
- bot_type = /mob/living/simple_animal/hostile/hivebot/rapid
-
/*
Special projectiles
*/
@@ -140,8 +84,7 @@ The megabot
name = "hivemind"
desc = "A huge quadruped robot equipped with a myriad of weaponry."
icon = 'icons/mob/simple_animal/megabot.dmi'
- health = 440
- maxHealth = 440
+ mob_default_max_health = 440
natural_weapon = /obj/item/natural_weapon/circular_saw
speed = 0
natural_armor = list(
@@ -170,12 +113,9 @@ The megabot
. = ..()
switch_mode(ATTACK_MODE_ROCKET)
-/mob/living/simple_animal/hostile/hivebot/mega/Life()
+/mob/living/simple_animal/hostile/hivebot/mega/handle_regular_status_updates()
. = ..()
- if(!.)
- return
-
- if(!is_on_special_ability_cooldown())
+ if(. && !is_on_special_ability_cooldown())
switch_mode(ATTACK_MODE_ROCKET)
/mob/living/simple_animal/hostile/hivebot/mega/emp_act(severity)
@@ -239,7 +179,7 @@ The megabot
var/datum/extension/armor/toggle/armor = get_extension(src, /datum/extension/armor)
if(armor)
armor.toggle(FALSE)
- addtimer(CALLBACK(src, .proc/reactivate), 4 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(reactivate)), 4 SECONDS)
/mob/living/simple_animal/hostile/hivebot/mega/proc/reactivate()
stop_automation = FALSE
@@ -257,11 +197,12 @@ The megabot
else
switch_mode(ATTACK_MODE_MELEE)
return
- ..()
+ return ..()
/mob/living/simple_animal/hostile/hivebot/mega/Shoot(target, start, user, bullet)
- ..()
- num_shots--
+ . = ..()
+ if(.)
+ num_shots--
#undef ATTACK_MODE_MELEE
#undef ATTACK_MODE_LASER
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 7f050476c2a..f654310bced 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -12,14 +12,13 @@
var/attack_same = 0
var/ranged = 0
var/rapid = 0
- var/sa_accuracy = 85 //base chance to hit out of 100
var/projectiletype
var/projectilesound
var/casingtype
var/fire_desc = "fires" //"X fire_desc at Y!"
var/ranged_range = 6 //tiles of range for ranged attackers to attack
var/move_to_delay = 4 //delay for the automated movement.
- var/attack_delay = DEFAULT_ATTACK_COOLDOWN
+
var/list/friends = list()
var/break_stuff_probability = 10
var/destroy_surroundings = 1
@@ -94,7 +93,10 @@
/mob/living/simple_animal/hostile/proc/Found(var/atom/A)
return
-/mob/living/simple_animal/hostile/proc/MoveToTarget()
+/mob/living/simple_animal/proc/MoveToTarget(var/move_only = FALSE)
+ return
+
+/mob/living/simple_animal/hostile/MoveToTarget(var/move_only = FALSE)
if(!can_act())
return
if(HAS_STATUS(src, STAT_CONFUSE))
@@ -106,7 +108,8 @@
if(target_mob in ListTargets(10))
if(ranged)
if(get_dist(src, target_mob) <= ranged_range)
- OpenFire(target_mob)
+ if(!move_only)
+ OpenFire(target_mob)
else
walk_to(src, target_mob, 1, move_to_delay)
else
@@ -148,19 +151,11 @@
return target_mob
- face_atom(target_mob)
- setClickCooldown(attack_delay)
if(!Adjacent(target_mob))
return
if(isliving(target_mob))
- if(!prob(get_accuracy()))
- visible_message("\The [src] misses its attack on \the [target_mob]!")
- return
- var/mob/living/L = target_mob
- var/attacking_with = get_natural_weapon()
- if(attacking_with)
- L.attackby(attacking_with, src)
- return L
+ UnarmedAttack(target_mob)
+ return target_mob
/mob/living/simple_animal/hostile/proc/LoseTarget()
stance = HOSTILE_STANCE_IDLE
@@ -174,14 +169,11 @@
/mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7)
return hearers(src, dist)-src
-/mob/living/simple_animal/hostile/proc/get_accuracy()
- return clamp(sa_accuracy - melee_accuracy_mods(), 0, 100)
-
/mob/living/simple_animal/hostile/death(gibbed, deathmessage, show_dead_message)
..(gibbed, deathmessage, show_dead_message)
walk(src, 0)
-/mob/living/simple_animal/hostile/Life()
+/mob/living/simple_animal/hostile/handle_regular_status_updates()
. = ..()
if(!.)
walk(src, 0)
@@ -218,57 +210,58 @@
target_mob = null
/mob/living/simple_animal/hostile/attackby(var/obj/item/O, var/mob/user)
- var/oldhealth = health
+ var/oldhealth = current_health
. = ..()
- if(health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT))
+ if(current_health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT))
target_mob = user
- MoveToTarget()
+ MoveToTarget(move_only = TRUE)
/mob/living/simple_animal/hostile/default_hurt_interaction(mob/user)
. = ..()
if(. && !incapacitated(INCAPACITATION_KNOCKOUT))
target_mob = user
- MoveToTarget()
+ MoveToTarget(move_only = TRUE)
/mob/living/simple_animal/hostile/bullet_act(var/obj/item/projectile/Proj)
- var/oldhealth = health
+ var/oldhealth = current_health
. = ..()
- if(isliving(Proj.firer) && !target_mob && health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT))
+ if(isliving(Proj.firer) && !target_mob && current_health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT))
target_mob = Proj.firer
- MoveToTarget()
+ MoveToTarget(move_only = TRUE)
/mob/living/simple_animal/hostile/proc/OpenFire(target_mob)
+
+ if(!can_act())
+ return FALSE
+
var/target = target_mob
- visible_message("\The [src] [fire_desc] at \the [target]!", 1)
+ visible_message(SPAN_DANGER("\The [src] [fire_desc] at \the [target]!"))
if(rapid)
- var/datum/callback/shoot_cb = CALLBACK(src, .proc/shoot_wrapper, target, loc, src)
+ var/datum/callback/shoot_cb = CALLBACK(src, PROC_REF(shoot_wrapper), target, loc, src)
addtimer(shoot_cb, 1)
addtimer(shoot_cb, 4)
addtimer(shoot_cb, 6)
- else
- Shoot(target, src.loc, src)
- if(casingtype)
- new casingtype
+ else if(Shoot(target, src.loc, src) && casingtype)
+ new casingtype(get_turf(src))
stance = HOSTILE_STANCE_IDLE
target_mob = null
- return
+ return TRUE
/mob/living/simple_animal/hostile/proc/shoot_wrapper(target, location, user)
- Shoot(target, location, user)
- if (casingtype)
+ if(Shoot(target, location, user) && casingtype)
new casingtype(loc)
/mob/living/simple_animal/hostile/proc/Shoot(var/target, var/start, var/user, var/bullet = 0)
- if(target == start)
- return
-
+ if(!can_act() || target == start)
+ return FALSE
var/obj/item/projectile/A = new projectiletype(get_turf(user))
+ if(!A)
+ return FALSE
playsound(user, projectilesound, 100, 1)
- if(!A) return
- var/def_zone = get_exposed_defense_zone(target)
- A.launch(target, def_zone)
+ A.launch(target, get_exposed_defense_zone(target))
+ return TRUE
/mob/living/simple_animal/hostile/proc/DestroySurroundings() //courtesy of Lohikar
if(!can_act())
@@ -281,18 +274,13 @@
var/obj/effect/shield/S = locate(/obj/effect/shield) in targ
if(S && S.gen && S.gen.check_flag(MODEFLAG_NONHUMANS))
- var/attacking_with = get_natural_weapon()
- if(attacking_with)
- S.attackby(attacking_with, src)
+ UnarmedAttack(S)
return
for(var/type in valid_obstacles_by_priority)
var/obj/obstacle = locate(type) in targ
if(obstacle)
- face_atom(obstacle)
- var/attacking_with = get_natural_weapon()
- if(attacking_with)
- obstacle.attackby(attacking_with, src)
+ UnarmedAttack(obstacle)
return
if(can_pry)
diff --git a/code/modules/mob/living/simple_animal/hostile/leech.dm b/code/modules/mob/living/simple_animal/hostile/leech.dm
index f4df7803aa5..870cb7fee40 100644
--- a/code/modules/mob/living/simple_animal/hostile/leech.dm
+++ b/code/modules/mob/living/simple_animal/hostile/leech.dm
@@ -2,8 +2,7 @@
name = "megaleech"
desc = "A green leech the size of a common snake."
icon = 'icons/mob/simple_animal/megaleech.dmi'
- health = 15
- maxHealth = 15
+ mob_default_max_health = 15
harm_intent_damage = 5
natural_weapon = /obj/item/natural_weapon/bite/weak
pass_flags = PASS_FLAG_TABLE
@@ -20,15 +19,13 @@
adapt_to_current_level()
. = ..()
-/mob/living/simple_animal/hostile/leech/Life()
+/mob/living/simple_animal/hostile/leech/handle_regular_status_updates()
. = ..()
- if(!.)
- return FALSE
-
- if(target_mob)
- belly -= 3
- else
- belly -= 1
+ if(.)
+ if(target_mob)
+ belly -= 3
+ else
+ belly -= 1
/mob/living/simple_animal/hostile/leech/AttackingTarget()
. = ..()
@@ -38,8 +35,8 @@
if(istype(S) && !length(S.breaches))
return
H.remove_blood_simple(suck_potency)
- if(health < maxHealth)
- health += suck_potency / 1.5
+ if(current_health < get_max_health())
+ heal_overall_damage(suck_potency / 1.5)
belly += clamp(suck_potency, 0, 100)
/obj/structure/leech_spawner
@@ -60,7 +57,7 @@
/obj/structure/leech_spawner/LateInitialize()
..()
- proxy_listener = new /datum/proximity_trigger/square(src, .proc/burst, .proc/burst, 5)
+ proxy_listener = new /datum/proximity_trigger/square(src, PROC_REF(burst), PROC_REF(burst), 5)
proxy_listener.register_turfs()
/obj/structure/leech_spawner/Destroy()
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index ee5d20be856..7f4a5c37e0e 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -22,15 +22,11 @@ var/global/list/protected_objects = list(/obj/machinery,
icon = 'icons/obj/closets/bases/crate.dmi'
color = COLOR_STEEL
icon_state = "crate"
-
meat_type = /obj/item/chems/food/fish
speed = 4
- maxHealth = 100
- health = 100
-
+ mob_default_max_health = 100
harm_intent_damage = 5
natural_weapon = /obj/item/natural_weapon/bite
-
min_gas = null
max_gas = null
minbodytemp = 0
@@ -78,18 +74,18 @@ var/global/list/protected_objects = list(/obj/machinery,
var/obj/item/attacking_with = get_natural_weapon()
if(istype(O, /obj/structure))
- health = (anchored * 50) + 50
+ current_health = (anchored * 50) + 50
destroy_objects = 1
if(O.density && O.anchored)
knockdown_people = 1
attacking_with.force = 2 * initial(attacking_with.force)
else if(istype(O, /obj/item))
var/obj/item/I = O
- health = 15 * I.w_class
+ current_health = 15 * I.w_class
attacking_with.force = 2 + initial(I.force)
move_to_delay = 2 * I.w_class
- maxHealth = health
+ set_max_health(current_health)
if(creator)
src.creator = weakref(creator)
faction = "\ref[creator]" // very unique
@@ -155,9 +151,9 @@ var/global/list/protected_objects = list(/obj/machinery,
src.visible_message("\The [src] starts to move!")
awake = 1
-/mob/living/simple_animal/hostile/mimic/sleeping/adjustBruteLoss(var/damage)
- trigger()
+/mob/living/simple_animal/hostile/mimic/sleeping/adjustBruteLoss(var/damage, var/do_update_health = FALSE)
..(damage)
+ trigger()
/mob/living/simple_animal/hostile/mimic/sleeping/attack_hand()
trigger()
diff --git a/code/modules/mob/living/simple_animal/hostile/pike.dm b/code/modules/mob/living/simple_animal/hostile/pike.dm
index 75e70b201da..21f7410b5f4 100644
--- a/code/modules/mob/living/simple_animal/hostile/pike.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pike.dm
@@ -7,11 +7,9 @@
attack_same = 1
speed = 1
mob_size = MOB_SIZE_LARGE
-
+ offset_overhead_text_x = 16
pixel_x = -16
-
- health = 150
- maxHealth = 150
+ mob_default_max_health = 150
harm_intent_damage = 5
natural_weapon = /obj/item/natural_weapon/bite/pike
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
index aa1fb734be4..f155bec20a3 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
@@ -9,8 +9,7 @@
speak_chance = 1
a_intent = I_HURT
stop_automated_movement_when_pulled = 0
- maxHealth = 75
- health = 75
+ mob_default_max_health = 75
speed = -1
harm_intent_damage = 8
can_escape = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index 8256fc47cd8..de79538013c 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -12,8 +12,7 @@
emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
a_intent = I_HURT
stop_automated_movement_when_pulled = 0
- health = 300
- maxHealth = 300
+ mob_default_max_health = 300
speed = 8
move_to_delay = 6
projectiletype = /obj/item/projectile/beam/drone
@@ -55,6 +54,11 @@
/decl/material/solid/metal/plasteel = null
)
+/mob/living/simple_animal/hostile/retaliate/malf_drone/check_has_mouth()
+ return FALSE
+
+/mob/living/simple_animal/hostile/retaliate/malf_drone/can_act()
+ return disabled <= 0 && ..()
/mob/living/simple_animal/hostile/retaliate/malf_drone/Initialize()
. = ..()
@@ -84,7 +88,10 @@
. -= M
//self repair systems have a chance to bring the drone back to life
-/mob/living/simple_animal/hostile/retaliate/malf_drone/Life()
+/mob/living/simple_animal/hostile/retaliate/malf_drone/handle_living_non_stasis_processes()
+ . = ..()
+ if(!.)
+ return
//emps and lots of damage can temporarily shut us down
if(disabled > 0)
@@ -101,7 +108,8 @@
if(prob(1))
src.visible_message("[html_icon(src)] [src] shudders and shakes as some of it's damaged systems come back online.")
spark_at(src, cardinal_only = TRUE)
- health += rand(25,100)
+ adjustBruteLoss(-(rand(10,50)), do_update_health = FALSE)
+ adjustFireLoss(-(rand(10,50)))
//spark for no reason
if(prob(5))
@@ -110,15 +118,16 @@
//sometimes our targetting sensors malfunction, and we attack anyone nearby
Haywire()
- if(health / maxHealth > 0.9)
+ var/current_health_ratio = get_health_ratio()
+ if(current_health_ratio > 0.9)
explode_chance = 0
- else if(health / maxHealth > 0.7)
+ else if(current_health_ratio > 0.7)
explode_chance = 0
- else if(health / maxHealth > 0.5)
+ else if(current_health_ratio > 0.5)
explode_chance = 0.5
- else if(health / maxHealth > 0.3)
+ else if(current_health_ratio > 0.3)
explode_chance = 5
- else if(health > 0)
+ else if(current_health > 0)
//if health gets too low, shut down
exploding = 0
if(!disabled)
@@ -145,36 +154,39 @@
if(!disabled && exploding)
explosion(get_turf(src), 0, 1, 4, 7)
death()
- ..()
+
update_icon()
/mob/living/simple_animal/hostile/retaliate/malf_drone/on_update_icon()
. = ..()
if(stat != DEAD)
- if(health / maxHealth <= 0.3)
- icon_state += "-shield3"
- else if(health / maxHealth <= 0.5)
- icon_state += "-shield1"
- else if(health / maxHealth <= 0.7)
- icon_state += "-shield2"
+ var/current_max_health = get_max_health()
+ if(current_health / current_max_health <= 0.3)
+ icon_state = "[icon_state]-shield3"
+ else if(current_health / current_max_health <= 0.5)
+ icon_state = "[icon_state]-shield1"
+ else if(current_health / current_max_health <= 0.7)
+ icon_state = "[icon_state]-shield2"
//ion rifle!
/mob/living/simple_animal/hostile/retaliate/malf_drone/emp_act(severity)
- health -= rand(3,15) * (severity + 1)
+ adjustFireLoss(rand(3,15) * (severity + 1))
disabled = rand(150, 600)
hostile_drone = 0
walk(src,0)
/mob/living/simple_animal/hostile/retaliate/malf_drone/death()
..(null,"suddenly breaks apart.", "You have been destroyed.")
- qdel(src)
+ physically_destroyed()
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy()
QDEL_NULL(ion_trail)
+ return ..()
+
+/mob/living/simple_animal/hostile/retaliate/malf_drone/physically_destroyed(skip_qdel)
//some random debris left behind
if(has_loot)
spark_at(src, cardinal_only = TRUE)
-
var/atom/movable/M
for(var/mat in debris)
for(var/chance in list(100, 75, 50, 25))
@@ -183,10 +195,8 @@
M = SSmaterials.create_object(mat, loc, 1, debris[mat])
if(istype(M))
step_to(M, get_turf(pick(view(7, src))))
-
//also drop dummy circuit boards deconstructable for research (loot)
var/obj/item/stock_parts/circuitboard/C
-
//spawn 1-4 boards of a random type
var/spawnees = 0
var/num_boards = rand(1,4)
@@ -195,57 +205,46 @@
var/chosen = pick(options)
options.Remove(options.Find(chosen))
spawnees |= chosen
-
if(spawnees & 1)
C = new(src.loc)
C.SetName("Drone CPU motherboard")
- C.origin_tech = "{'[TECH_DATA]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_DATA]":[rand(3, 6)]}'
if(spawnees & 2)
C = new(src.loc)
C.SetName("Drone neural interface")
- C.origin_tech = "{'[TECH_BIO]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_BIO]":[rand(3, 6)]}'
if(spawnees & 4)
C = new(src.loc)
C.SetName("Drone suspension processor")
- C.origin_tech = "{'[TECH_MAGNET]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_MAGNET]":[rand(3, 6)]}'
if(spawnees & 8)
C = new(src.loc)
C.SetName("Drone shielding controller")
- C.origin_tech = "{'wormholes':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"wormholes":[rand(3, 6)]}'
if(spawnees & 16)
C = new(src.loc)
C.SetName("Drone power capacitor")
- C.origin_tech = "{'[TECH_POWER]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_POWER]":[rand(3, 6)]}'
if(spawnees & 32)
C = new(src.loc)
C.SetName("Drone hull reinforcer")
- C.origin_tech = "{'[TECH_MATERIAL]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_MATERIAL]":[rand(3, 6)]}'
if(spawnees & 64)
C = new(src.loc)
C.SetName("Drone auto-repair system")
- C.origin_tech = "{'[TECH_ENGINEERING]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_ENGINEERING]":[rand(3, 6)]}'
if(spawnees & 128)
C = new(src.loc)
C.SetName("Drone antigravity overcharge counter")
- C.origin_tech = "{'[TECH_EXOTIC_MATTER]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_EXOTIC_MATTER]":[rand(3, 6)]}'
if(spawnees & 256)
C = new(src.loc)
C.SetName("Drone targetting circuitboard")
- C.origin_tech = "{'[TECH_COMBAT]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_COMBAT]":[rand(3, 6)]}'
if(spawnees & 512)
C = new(src.loc)
C.SetName("Corrupted drone morality core")
- C.origin_tech = "{'[TECH_ESOTERIC]':[rand(3, 6)]}"
-
+ C.origin_tech = @'{"[TECH_ESOTERIC]":[rand(3, 6)]}'
return ..()
/obj/item/projectile/beam/drone
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm
index 4d21397a002..0901acdfbdd 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm
@@ -4,6 +4,9 @@
nutrition = 300
var/list/prey
+/mob/living/simple_animal/hostile/retaliate/beast/get_satiated_nutrition()
+ return 250
+
/mob/living/simple_animal/hostile/retaliate/beast/get_max_nutrition()
return 300
@@ -40,7 +43,7 @@
var/turf/T = get_turf(S)
var/obj/item/remains/xeno/X = new(T)
X.desc += "These look like they belong to \a [S.name]."
- beast.adjust_nutrition(5 * S.maxHealth)
+ beast.adjust_nutrition(5 * S.get_max_health())
if(prob(5))
S.gib()
else
@@ -74,8 +77,7 @@
faction = "samak"
icon = 'icons/mob/simple_animal/samak.dmi'
move_to_delay = 2
- maxHealth = 125
- health = 125
+ mob_default_max_health = 125
speed = 2
natural_weapon = /obj/item/natural_weapon/claws
cold_damage_per_tick = 0
@@ -96,9 +98,8 @@
desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion."
faction = "diyaab"
icon = 'icons/mob/simple_animal/diyaab.dmi'
- move_to_delay = 1
- maxHealth = 25
- health = 25
+ move_to_delay = 3
+ mob_default_max_health = 25
speed = 1
natural_weapon = /obj/item/natural_weapon/claws/weak
cold_damage_per_tick = 0
@@ -113,9 +114,8 @@
desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. Don't be fooled by its beauty though."
faction = "shantak"
icon = 'icons/mob/simple_animal/shantak.dmi'
- move_to_delay = 1
- maxHealth = 75
- health = 75
+ move_to_delay = 3
+ mob_default_max_health = 75
speed = 1
natural_weapon = /obj/item/natural_weapon/claws
cold_damage_per_tick = 0
@@ -154,8 +154,7 @@
faction = "crab"
icon = 'icons/mob/simple_animal/royalcrab.dmi'
move_to_delay = 3
- maxHealth = 150
- health = 150
+ mob_default_max_health = 150
speed = 1
natural_weapon = /obj/item/natural_weapon/pincers
speak_chance = 1
@@ -169,8 +168,7 @@
desc = "A huge grubby creature."
icon = 'icons/mob/simple_animal/char.dmi'
mob_size = MOB_SIZE_LARGE
- health = 45
- maxHealth = 45
+ mob_default_max_health = 45
natural_weapon = /obj/item/natural_weapon/charbaby
speed = 2
return_damage_min = 2
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm
index e2a46068216..a13a98f3103 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm
@@ -13,8 +13,7 @@
break_stuff_probability = 15
faction = "crabs"
pry_time = 2 SECONDS
- health = 350
- maxHealth = 350
+ mob_default_max_health = 350
natural_weapon = /obj/item/natural_weapon/pincers/giant
return_damage_min = 2
return_damage_max = 5
@@ -38,7 +37,7 @@
/datum/ai/giant_crab/do_process(time_elapsed)
. = ..()
var/mob/living/simple_animal/hostile/retaliate/giant_crab/crab = body
- if((crab.health > crab.maxHealth / 1.5) && length(crab.enemies) && prob(10))
+ if((crab.current_health > crab.get_max_health() / 1.5) && length(crab.enemies) && prob(10))
if(crab.victim)
crab.release_grab()
crab.enemies = list()
@@ -81,7 +80,7 @@
return
if(!victim && can_act() && !is_on_special_ability_cooldown() && Adjacent(H))
- events_repository.register(/decl/observ/destroyed, victim, src, .proc/release_grab)
+ events_repository.register(/decl/observ/destroyed, victim, src, PROC_REF(release_grab))
victim = H
SET_STATUS_MAX(H, STAT_WEAK, grab_duration)
SET_STATUS_MAX(H, STAT_STUN, grab_duration)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm
index d8e6e5347ad..1d99e3edc4c 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm
@@ -2,8 +2,7 @@
name = "space parrot"
desc = "It could be some all-knowing being that, for reasons we could never hope to understand, is assuming the shape and general mannerisms of a parrot - or just a rather large bird."
gender = FEMALE
- health = 750 //how sweet it is to be a god!
- maxHealth = 750
+ mob_default_max_health = 750
mob_size = MOB_SIZE_LARGE
speak = list("...")
speak_emote = list("professes","speaks unto you","elaborates","proclaims")
@@ -69,15 +68,13 @@
subspecies = list(/decl/parrot_subspecies/black)
get_subspecies_name = FALSE
natural_weapon = /obj/item/natural_weapon/large
- health = 300
- maxHealth = 300
+ mob_default_max_health = 300
/mob/living/simple_animal/hostile/retaliate/parrot/space/megafauna
name = "giant parrot"
desc = "A huge parrot-like bird."
get_subspecies_name = FALSE
- health = 350
- maxHealth = 350
+ mob_default_max_health = 350
speak_emote = list("squawks")
emote_hear = list("preens itself")
natural_weapon = /obj/item/natural_weapon/large
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot_species.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot_species.dm
index 99837db14c1..eea8d1773a7 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot_species.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot_species.dm
@@ -1,34 +1,34 @@
/decl/parrot_subspecies
var/name = "giant parrot"
var/icon_set = "parrot"
- var/feathers = /decl/material/solid/skin/feathers
+ var/feathers = /decl/material/solid/organic/skin/feathers
/decl/parrot_subspecies/purple
name = "simurgh"
icon_set = "purple"
- feathers = /decl/material/solid/skin/feathers/purple
+ feathers = /decl/material/solid/organic/skin/feathers/purple
/decl/parrot_subspecies/blue
name = "ziz"
icon_set = "blue"
- feathers = /decl/material/solid/skin/feathers/blue
+ feathers = /decl/material/solid/organic/skin/feathers/blue
/decl/parrot_subspecies/green
name = "fenghuang"
icon_set = "green"
- feathers = /decl/material/solid/skin/feathers/green
+ feathers = /decl/material/solid/organic/skin/feathers/green
/decl/parrot_subspecies/brown
name = "roc"
icon_set = "brown"
- feathers = /decl/material/solid/skin/feathers/brown
+ feathers = /decl/material/solid/organic/skin/feathers/brown
/decl/parrot_subspecies/red
name = "phoenix"
icon_set = "red"
- feathers = /decl/material/solid/skin/feathers/red
+ feathers = /decl/material/solid/organic/skin/feathers/red
/decl/parrot_subspecies/black
name = "lord of birds"
icon_set = "black"
- feathers = /decl/material/solid/skin/feathers/black
+ feathers = /decl/material/solid/organic/skin/feathers/black
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm
index b8666c9aa86..d0b1e8afcff 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm
@@ -7,8 +7,7 @@
emote_hear = list("honks","flaps its wings","clacks")
emote_see = list("flaps its wings", "scratches the ground")
natural_weapon = /obj/item/natural_weapon/goosefeet
- health = 45
- maxHealth = 45
+ mob_default_max_health = 45
pass_flags = PASS_FLAG_TABLE
faction = "geese"
pry_time = 8 SECONDS
@@ -18,7 +17,7 @@
meat_amount = 6
bone_amount = 8
skin_amount = 8
- skin_material = /decl/material/solid/skin/feathers
+ skin_material = /decl/material/solid/organic/skin/feathers
var/enrage_potency = 3
var/enrage_potency_loose = 4
@@ -54,8 +53,9 @@
attacking_with.force = min((attacking_with.force + potency), max_damage)
if(!loose && prob(25) && (attacking_with && attacking_with.force >= loose_threshold)) //second wind
loose = TRUE
- health = (initial(health) * 1.5)
- maxHealth = (initial(maxHealth) * 1.5)
+ set_max_health(initial(mob_default_max_health) * 1.5)
+ setBruteLoss(0)
+ setFireLoss(0)
enrage_potency = enrage_potency_loose
desc += " The [name] is loose! Oh no!"
update_icon()
@@ -64,8 +64,7 @@
name = "dire goose"
desc = "A large bird. It radiates destructive energy."
icon = 'icons/mob/simple_animal/goose_dire.dmi'
- health = 250
- maxHealth = 250
+ mob_default_max_health = 250
enrage_potency = 3
loose_threshold = 20
max_damage = 35
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm
index 0f42951111e..4e536c69590 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm
@@ -3,16 +3,15 @@
desc = "It looks like a floating jellyfish. How does it do that?"
faction = "zeq"
icon = 'icons/mob/simple_animal/jelly.dmi'
- move_to_delay = 1
- maxHealth = 75
- health = 75
+ move_to_delay = 2
+ mob_default_max_health = 75
speed = 1
- natural_weapon = /obj/item/natural_weapon/tentecles
+ natural_weapon = /obj/item/natural_weapon/tentacles
speak_chance = 1
emote_see = list("wobbles slightly","oozes something out of tentacles' ends")
var/gets_random_color = TRUE
-/obj/item/natural_weapon/tentecles
+/obj/item/natural_weapon/tentacles
name = "tentacles"
attack_verb = list("stung","slapped")
force = 10
@@ -30,8 +29,7 @@
/mob/living/simple_animal/hostile/retaliate/jelly/mega
name = "zeq queen"
desc = "A gigantic jellyfish-like creature. Its bell wobbles about almost as if it's ready to burst."
- maxHealth = 300
- health = 300
+ mob_default_max_health = 300
gets_random_color = FALSE
can_escape = TRUE
@@ -69,8 +67,7 @@
/mob/living/simple_animal/hostile/retaliate/jelly/mega/half
name = "zeq duchess"
desc = "A huge jellyfish-like creature."
- maxHealth = 150
- health = 150
+ mob_default_max_health = 150
can_escape = TRUE
jelly_scale = 1.5
split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/quarter
@@ -78,8 +75,7 @@
/mob/living/simple_animal/hostile/retaliate/jelly/mega/quarter
name = "zeqling"
desc = "A jellyfish-like creature."
- health = 75
- maxHealth = 75
+ mob_default_max_health = 75
jelly_scale = 0.75
can_escape = FALSE
split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/fourth
@@ -87,15 +83,13 @@
/mob/living/simple_animal/hostile/retaliate/jelly/mega/fourth
name = "zeqetta"
desc = "A tiny jellyfish-like creature."
- health = 40
- maxHealth = 40
+ mob_default_max_health = 40
jelly_scale = 0.375
split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/eighth
/mob/living/simple_animal/hostile/retaliate/jelly/mega/eighth
name = "zeqttina"
desc = "An absolutely tiny jellyfish-like creature."
- health = 20
- maxHealth = 20
+ mob_default_max_health = 20
jelly_scale = 0.1875
split_type = null
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm
index a0d3ce2685e..017b5fe527f 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm
@@ -13,8 +13,7 @@
emote_see = list("stamps a mighty foot, shaking the surroundings")
meat_amount = 12
response_harm = "assaults"
- health = 500
- maxHealth = 500
+ mob_default_max_health = 500
mob_size = MOB_SIZE_LARGE
mob_bump_flag = HEAVY
can_escape = TRUE
@@ -59,8 +58,7 @@
desc = "The King of Kings, God amongst men, and your superior in every way."
icon = 'icons/mob/simple_animal/goat_king_phase_2.dmi'
meat_amount = 36
- health = 750
- maxHealth = 750
+ mob_default_max_health = 750
natural_weapon = /obj/item/natural_weapon/goatking/unleashed
elemental_weapons = list(
BURN = /obj/item/natural_weapon/goatking/fire/unleashed,
@@ -94,8 +92,7 @@
name = "honour guard"
desc = "A very handsome and noble beast."
icon = 'icons/mob/simple_animal/goat_guard.dmi'
- health = 125
- maxHealth = 125
+ mob_default_max_health = 125
natural_weapon = /obj/item/natural_weapon/goathorns
/obj/item/natural_weapon/goathorns
@@ -108,8 +105,7 @@
name = "master of the guard"
desc = "A very handsome and noble beast - the most trusted of all the king's men."
icon = 'icons/mob/simple_animal/goat_master.dmi'
- health = 200
- maxHealth = 200
+ mob_default_max_health = 200
natural_weapon = /obj/item/natural_weapon/goathorns
move_to_delay = 3
@@ -157,15 +153,16 @@
visible_message("\The [src]' eyes begin to glow ominously as dust and debris in the area is kicked up in a light breeze.")
stop_automation = TRUE
if(do_after(src, 6 SECONDS, src))
- var/health_holder = health
+ var/initial_brute = getBruteLoss()
+ var/initial_burn = getFireLoss()
visible_message(SPAN_MFAUNA("\The [src] raises its fore-hooves and stomps them into the ground with incredible force!"))
explosion(get_step(src,pick(global.cardinal)), -1, 2, 2, 3, 6)
explosion(get_step(src,pick(global.cardinal)), -1, 1, 4, 4, 6)
explosion(get_step(src,pick(global.cardinal)), -1, 3, 4, 3, 6)
stop_automation = FALSE
spellscast += 2
- if(!health < health_holder)
- health = health_holder //our own magicks cannot harm us
+ setBruteLoss(initial_brute)
+ setFireLoss(initial_burn)
else
visible_message(SPAN_NOTICE("The [src] loses concentration and huffs haughtily."))
stop_automation = FALSE
@@ -175,7 +172,8 @@
/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/proc/phase3_transition()
phase3 = TRUE
spellscast = 0
- health = 750
+ mob_default_max_health = 750
+ current_health = mob_default_max_health
new /obj/item/grenade/flashbang/instant(src.loc)
QDEL_NULL(boss_theme)
boss_theme = play_looping_sound(src, sound_id, 'sound/music/Visager-Miniboss_Fight.ogg', volume = 10, range = 8, falloff = 4, prefer_mute = TRUE)
@@ -192,15 +190,14 @@
set_scale(1.25)
default_pixel_y = 10
-/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Life()
+/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/handle_living_non_stasis_processes()
. = ..()
if(!.)
return FALSE
if(special_attacks >= 6 && current_damtype != BRUTE)
visible_message(SPAN_MFAUNA("The energy surrounding \the [src]'s horns dissipates."))
current_damtype = BRUTE
-
- if(health <= 150 && !phase3 && spellscast == 5) //begin phase 3, reset spell limit and heal
+ if(current_health <= 150 && !phase3 && spellscast == 5) //begin phase 3, reset spell limit and heal
phase3_transition()
/mob/living/simple_animal/hostile/retaliate/goat/king/proc/OnDeath()
@@ -235,6 +232,6 @@
. = ..()
if(current_damtype != BRUTE)
special_attacks++
-
+
/mob/living/simple_animal/hostile/retaliate/goat/king/Process_Spacemove()
return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm
index 1708cbad055..bfdc8f60074 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm
@@ -43,7 +43,7 @@
universal_speak = TRUE
meat_type = /obj/item/chems/food/meat/chicken/game
meat_amount = 3
- skin_material = /decl/material/solid/skin/feathers
+ skin_material = /decl/material/solid/organic/skin/feathers
var/parrot_state = PARROT_WANDER // Hunt for a perch when created
var/parrot_sleep_max = 25 // The time the parrot sits while perched before looking around. Mosly a way to avoid the parrot's AI in life() being run every single tick.
@@ -125,7 +125,7 @@
parrot_state = PARROT_SWOOP //The parrot just got hit, it WILL move, now to pick a direction..
if(isliving(user))
var/mob/living/M = user
- if(M.health < 50) //Weakened mob? Fight back!
+ if(M.current_health < 50) //Weakened mob? Fight back!
parrot_state |= PARROT_ATTACK
return
parrot_state |= PARROT_FLEE //Otherwise, fly like a bat out of hell!
@@ -319,9 +319,7 @@
return
//Time for the hurt to begin!
- var/attacking_with = get_natural_weapon()
- if(attacking_with)
- L.attackby(attacking_with, src)
+ UnarmedAttack(L)
return
//Otherwise, fly towards the mob!
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
index 4c0ea689fc7..706053d576b 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
@@ -42,8 +42,8 @@
H.enemies |= enemies
return 0
-/mob/living/simple_animal/hostile/retaliate/adjustBruteLoss(var/damage)
- ..(damage)
+/mob/living/simple_animal/hostile/retaliate/adjustBruteLoss(var/damage, var/do_update_health = FALSE)
+ ..()
Retaliate()
/mob/living/simple_animal/hostile/retaliate/buckle_mob(mob/living/M)
diff --git a/code/modules/mob/living/simple_animal/hostile/slug.dm b/code/modules/mob/living/simple_animal/hostile/slug.dm
index 5248b648d33..6be1362d635 100644
--- a/code/modules/mob/living/simple_animal/hostile/slug.dm
+++ b/code/modules/mob/living/simple_animal/hostile/slug.dm
@@ -5,8 +5,7 @@
icon = 'icons/mob/simple_animal/slug.dmi'
response_harm = "stomps on"
destroy_surroundings = 0
- health = 15
- maxHealth = 15
+ mob_default_max_health = 15
speed = 0
move_to_delay = 0
density = TRUE
@@ -51,7 +50,7 @@
if(prob(H.getBruteLoss()/2))
attach(H)
-/mob/living/simple_animal/hostile/slug/Life()
+/mob/living/simple_animal/hostile/slug/handle_regular_status_updates()
. = ..()
if(. && istype(src.loc, /obj/item/holder) && isliving(src.loc.loc)) //We in somebody
var/mob/living/L = src.loc.loc
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index ca95c3dd1b0..b0f1997c402 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -6,11 +6,8 @@
turns_per_move = 5
meat_type = /obj/item/chems/food/fish
speed = -1
- maxHealth = 250
- health = 250
-
+ mob_default_max_health = 250
pixel_x = -16
-
harm_intent_damage = 5
natural_weapon = /obj/item/natural_weapon/bite
@@ -20,6 +17,9 @@
minbodytemp = 0
faction = "carp"
+/mob/living/simple_animal/hostile/tree/check_has_mouth()
+ return FALSE
+
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
if(.)
@@ -27,6 +27,6 @@
/mob/living/simple_animal/hostile/tree/death(gibbed, deathmessage, show_dead_message)
..(null,"is hacked into pieces!", show_dead_message)
- var/decl/material/mat = GET_DECL(/decl/material/solid/wood)
+ var/decl/material/mat = GET_DECL(/decl/material/solid/organic/wood)
mat.place_shards(loc)
qdel(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/vagrant.dm b/code/modules/mob/living/simple_animal/hostile/vagrant.dm
index c0f8e6a2196..36ad1d84c93 100644
--- a/code/modules/mob/living/simple_animal/hostile/vagrant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/vagrant.dm
@@ -3,8 +3,7 @@
name = "creature"
desc = "You get the feeling you should run."
icon = 'icons/mob/simple_animal/vagrant.dmi'
- maxHealth = 60
- health = 20
+ mob_default_max_health = 60
speed = 5
speak_chance = 0
turns_per_move = 4
@@ -18,32 +17,32 @@
max_gas = null
minbodytemp = 0
gene_damage = -1
+ pass_flags = PASS_FLAG_TABLE
+ bleed_colour = "#aad9de"
+ nutrition = 100
var/cloaked = 0
var/mob/living/carbon/human/gripping = null
var/blood_per_tick = 3
var/health_per_tick = 0.8
- pass_flags = PASS_FLAG_TABLE
-
- bleed_colour = "#aad9de"
/mob/living/simple_animal/hostile/vagrant/Process_Spacemove()
return 1
/mob/living/simple_animal/hostile/vagrant/bullet_act(var/obj/item/projectile/Proj)
- var/oldhealth = health
+ var/oldhealth = current_health
. = ..()
- if(isliving(Proj.firer) && (target_mob != Proj.firer) && health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) //Respond to being shot at
+ if(isliving(Proj.firer) && (target_mob != Proj.firer) && current_health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) //Respond to being shot at
target_mob = Proj.firer
turns_per_move = 3
MoveToTarget()
/mob/living/simple_animal/hostile/vagrant/death(gibbed)
. = ..()
- if(. && !gibbed)
+ if(stat == DEAD && !QDELETED(src) && !gibbed)
gib()
-/mob/living/simple_animal/hostile/vagrant/Life()
+/mob/living/simple_animal/hostile/vagrant/handle_living_non_stasis_processes()
. = ..()
if(!.)
return FALSE
@@ -55,9 +54,9 @@
var/blood_volume = round(gripping.vessel.total_volume)
if(blood_volume > 5)
gripping.vessel.remove_any(blood_per_tick)
- health = min(health + health_per_tick, maxHealth)
+ heal_overall_damage(health_per_tick)
if(prob(15))
- to_chat(gripping, "You feel your fluids being drained!")
+ to_chat(gripping, SPAN_DANGER("You feel your fluids being drained!"))
else
gripping = null
@@ -67,11 +66,11 @@
if(stance == HOSTILE_STANCE_IDLE && !cloaked)
cloaked = 1
update_icon()
- if(health == maxHealth)
+
+ if(get_nutrition() > get_max_nutrition())
new/mob/living/simple_animal/hostile/vagrant(src.loc)
new/mob/living/simple_animal/hostile/vagrant(src.loc)
gib()
- return
/mob/living/simple_animal/hostile/vagrant/on_update_icon()
..()
@@ -96,7 +95,7 @@
return
//This line ensures there's always a reasonable chance of grabbing, while still
//Factoring in health
- if(!gripping && (cloaked || prob(health + ((maxHealth - health) * 2))))
+ if(!gripping && (cloaked || prob(current_health + ((get_max_health() - current_health) * 2))))
gripping = H
cloaked = 0
update_icon()
diff --git a/code/modules/mob/living/simple_animal/hostile/viscerator.dm b/code/modules/mob/living/simple_animal/hostile/viscerator.dm
index cbe04e3dcd9..fa5f60048ab 100644
--- a/code/modules/mob/living/simple_animal/hostile/viscerator.dm
+++ b/code/modules/mob/living/simple_animal/hostile/viscerator.dm
@@ -3,14 +3,13 @@
desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations."
icon = 'icons/mob/simple_animal/viscerator.dmi'
pass_flags = PASS_FLAG_TABLE
- health = 15
- maxHealth = 15
+ mob_default_max_health = 15
natural_weapon = /obj/item/natural_weapon/rotating_blade
faction = "syndicate"
min_gas = null
max_gas = null
minbodytemp = 0
-
+ attack_delay = DEFAULT_QUICK_COOLDOWN
bleed_colour = SYNTH_BLOOD_COLOR
meat_type = null
@@ -28,6 +27,9 @@
edge = 1
sharp = 1
+/mob/living/simple_animal/hostile/viscerator/check_has_mouth()
+ return FALSE
+
/mob/living/simple_animal/hostile/viscerator/death(gibbed, deathmessage, show_dead_message)
..(null, "is smashed into pieces!", show_dead_message)
qdel(src)
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index d3a41e1684c..10742fec191 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -3,8 +3,7 @@
real_name = "Shade"
desc = "A bound spirit"
icon = 'icons/mob/simple_animal/shade.dmi'
- maxHealth = 50
- health = 50
+ mob_default_max_health = 50
universal_speak = TRUE
speak_emote = list("hisses")
emote_hear = list("wails","screeches")
@@ -34,6 +33,9 @@
skin_material = null
skin_amount = 0
+/mob/living/simple_animal/shade/check_has_mouth()
+ return FALSE
+
/obj/item/natural_weapon/shade
name = "foul touch"
attack_verb = list("drained")
@@ -43,13 +45,7 @@
/mob/living/simple_animal/shade/on_defilement()
return
-/mob/living/simple_animal/shade/Life()
- . = ..()
- OnDeathInLife()
-
-/mob/living/simple_animal/shade/proc/OnDeathInLife()
- if(stat == DEAD)
- new /obj/item/ectoplasm (src.loc)
- visible_message(SPAN_WARNING("\The [src] lets out a contented sigh as their form unwinds."))
- ghostize()
- qdel(src)
+/mob/living/simple_animal/shade/death(gibbed, deathmessage, show_dead_message)
+ new /obj/item/ectoplasm (src.loc)
+ ..(deathmessage = "lets out a contented sigh as their form unwinds", show_dead_message = "You have been released from your earthly binds.")
+ qdel(src)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index ee414277997..044a3274cb9 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -1,7 +1,6 @@
/mob/living/simple_animal
name = "animal"
- health = 20
- maxHealth = 20
+ mob_default_max_health = 20
universal_speak = FALSE
mob_sort_value = 12
@@ -11,9 +10,9 @@
meat_type = /obj/item/chems/food/meat
meat_amount = 3
- bone_material = /decl/material/solid/bone
+ bone_material = /decl/material/solid/organic/bone
bone_amount = 5
- skin_material = /decl/material/solid/skin
+ skin_material = /decl/material/solid/organic/skin
skin_amount = 5
icon_state = ICON_STATE_WORLD
@@ -47,8 +46,6 @@
var/cold_damage_per_tick = 2 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
var/fire_alert = 0
- var/list/hat_offsets
-
//Atmos effect - Yes, you can make creatures that require arbitrary gasses to survive. N2O is a trace gas and handled separately, hence why it isn't here. It'd be hard to add it. Hard and me don't mix (Yes, yes make all the dick jokes you want with that.) - Errorage
var/list/min_gas = list(/decl/material/gas/oxygen = 5)
var/list/max_gas = list(
@@ -94,10 +91,15 @@
var/scannable_result // Codex page generated when this mob is scanned.
var/base_animal_type // set automatically in Initialize(), used for language checking.
+ var/attack_delay = DEFAULT_ATTACK_COOLDOWN // How long in ds that a creature winds up before attacking.
+ var/sa_accuracy = 85 //base chance to hit out of 100
+
/mob/living/simple_animal/Initialize()
. = ..()
// Aquatic creatures only care about water, not atmos.
+ add_inventory_slot(new /datum/inventory_slot/head/simple)
+
if(is_aquatic)
max_gas = list()
min_gas = list()
@@ -108,8 +110,6 @@
base_animal_type = type
if(LAZYLEN(natural_armor))
set_extension(src, armor_type, natural_armor)
- if(islist(hat_offsets))
- set_extension(src, /datum/extension/hattable/directional, hat_offsets)
if(scannable_result)
set_extension(src, /datum/extension/scannable, scannable_result)
setup_languages()
@@ -161,11 +161,6 @@ var/global/list/simplemob_icon_bitflag_cache = list()
z_flags |= ZMM_MANGLE_PLANES
add_overlay(I)
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- var/image/I = hattable?.get_hat_overlay(src)
- if(I)
- add_overlay(I)
-
/mob/living/simple_animal/get_eye_overlay()
var/eye_icon_state = "[icon_state]-eyes"
if(check_state_in_icon(eye_icon_state, icon))
@@ -178,46 +173,28 @@ var/global/list/simplemob_icon_bitflag_cache = list()
QDEL_NULL(natural_weapon)
. = ..()
-/mob/living/simple_animal/Life()
- if(is_aquatic && !submerged() && stat != DEAD)
- walk(src, 0)
- if(!HAS_STATUS(src, STAT_PARA)) // gated to avoid redundant update_icon() calls.
- SET_STATUS_MAX(src, STAT_PARA, 3)
- update_icon()
+/mob/living/simple_animal/handle_regular_status_updates()
+ if(purge)
+ purge -= 1
. = ..()
- if(!.)
- return FALSE
- if(z && !living_observers_present(SSmapping.get_connected_levels(z)))
- return
- //Health
- if(stat == DEAD)
- if(health > 0)
- switch_from_dead_to_living_mob_list()
- set_stat(CONSCIOUS)
- set_density(1)
- update_icon()
- return 0
-
- handle_atmos()
-
- if(health <= 0)
- death()
- return
-
- if(health > maxHealth)
- health = maxHealth
-
- handle_supernatural()
- handle_impaired_vision()
-
- if(can_bleed && bleed_ticks > 0)
- handle_bleeding()
-
- delayed_life_action()
- return 1
+ if(.)
+ if(can_bleed && bleed_ticks > 0)
+ handle_bleeding()
+ if(is_aquatic && !submerged())
+ walk(src, 0)
+ if(HAS_STATUS(src, STAT_PARA))
+ SET_STATUS_MAX(src, STAT_PARA, 3)
+ update_icon()
+
+/mob/living/simple_animal/handle_some_updates()
+ . = ..() && (!z || living_observers_present(SSmapping.get_connected_levels(z)))
+
+/mob/living/simple_animal/handle_legacy_ai()
+ . = ..()
+ handle_async_life_action()
// Handles timed stuff in Life()
-/mob/living/simple_animal/proc/delayed_life_action()
+/mob/living/simple_animal/proc/handle_async_life_action()
set waitfor = FALSE
if(performing_delayed_life_action)
return
@@ -267,12 +244,9 @@ var/global/list/simplemob_icon_bitflag_cache = list()
if("emote_see")
visible_emote("[pick(emote_see)].")
-/mob/living/simple_animal/proc/handle_atmos(var/atmos_suitable = 1)
- //Atmos
- if(!loc)
- return
-
- var/datum/gas_mixture/environment = loc.return_air()
+/mob/living/simple_animal/handle_environment(datum/gas_mixture/environment)
+ . = ..()
+ var/atmos_suitable = TRUE
if(environment)
// don't bother checking it twice if we got a supplied FALSE val.
if(atmos_suitable)
@@ -308,10 +282,6 @@ var/global/list/simplemob_icon_bitflag_cache = list()
O.unbuckle_mob(M)
visible_message(SPAN_DANGER("\The [M] escapes from \the [O]!"))
-/mob/living/simple_animal/proc/handle_supernatural()
- if(purge)
- purge -= 1
-
/mob/living/simple_animal/gib()
..(((mob_icon_state_flags & MOB_ICON_HAS_GIB_STATE) ? "world-gib" : null), TRUE)
@@ -334,7 +304,7 @@ var/global/list/simplemob_icon_bitflag_cache = list()
damage = Proj.damage / 1.5
if(Proj.agony)
damage += Proj.agony / 6
- if(health < Proj.agony * 3)
+ if(current_health < Proj.agony * 3)
SET_STATUS_MAX(src, STAT_PARA, Proj.agony / 20)
visible_message("[src] is stunned momentarily!")
@@ -347,7 +317,7 @@ var/global/list/simplemob_icon_bitflag_cache = list()
. = ..() || list(response_help_3p, response_help_1p)
/mob/living/simple_animal/default_help_interaction(mob/user)
- if(health > 0 && user.attempt_hug(src))
+ if(current_health > 0 && user.attempt_hug(src))
user.update_personal_goal(/datum/goal/achievement/specific_object/pet, type)
return TRUE
. = ..()
@@ -378,12 +348,13 @@ var/global/list/simplemob_icon_bitflag_cache = list()
return TRUE
/mob/living/simple_animal/attackby(var/obj/item/O, var/mob/user)
+
if(istype(O, /obj/item/stack/medical))
if(stat != DEAD)
var/obj/item/stack/medical/MED = O
if(!MED.animal_heal)
to_chat(user, SPAN_WARNING("\The [MED] won't help \the [src] at all!"))
- else if(health < maxHealth && MED.can_use(1))
+ else if(current_health < get_max_health() && MED.can_use(1))
adjustBruteLoss(-MED.animal_heal)
visible_message(SPAN_NOTICE("\The [user] applies \the [MED] to \the [src]."))
MED.use(1)
@@ -392,33 +363,23 @@ var/global/list/simplemob_icon_bitflag_cache = list()
to_chat(user, SPAN_WARNING("\The [src] is dead, medical items won't bring [G.him] back to life."))
return TRUE
- if(istype(O, /obj/item/flash) && stat != DEAD)
- return O.attack(src, user, user.get_target_zone())
-
- if(meat_type && (stat == DEAD) && meat_amount)
- if(istype(O, /obj/item/knife/kitchen/cleaver))
- var/victim_turf = get_turf(src)
- if(!locate(/obj/structure/table, victim_turf))
- to_chat(user, SPAN_WARNING("You need to place \the [src] on a table to butcher it."))
- return TRUE
- var/time_to_butcher = (mob_size)
- to_chat(user, SPAN_WARNING("You begin harvesting \the [src]."))
- if(do_after(user, time_to_butcher, src, same_direction = TRUE))
- if(prob(user.skill_fail_chance(SKILL_COOKING, 60, SKILL_ADEPT)))
- to_chat(user, SPAN_DANGER("You botch harvesting \the [src], and ruin some of the meat in the process."))
- subtract_meat(user)
- else
- harvest(user, user.get_skill_value(SKILL_COOKING))
- else
- to_chat(user, SPAN_DANGER("Your hand slips with your movement, and some of the meat is ruined."))
- subtract_meat(user)
- return TRUE
-
- else
- if(!O.force || (O.item_flags & ITEM_FLAG_NO_BLUDGEON))
- visible_message(SPAN_NOTICE("\The [user] gently taps [src] with \the [O]."))
+ if(meat_type && (stat == DEAD) && meat_amount && istype(O, /obj/item/knife/kitchen/cleaver))
+ var/victim_turf = get_turf(src)
+ if(!locate(/obj/structure/table, victim_turf))
+ to_chat(user, SPAN_WARNING("You need to place \the [src] on a table to butcher it."))
return TRUE
- return O.attack(src, user, user.get_target_zone() || ran_zone())
+ var/time_to_butcher = (mob_size)
+ to_chat(user, SPAN_WARNING("You begin harvesting \the [src]."))
+ if(do_after(user, time_to_butcher, src, same_direction = TRUE))
+ if(prob(user.skill_fail_chance(SKILL_COOKING, 60, SKILL_ADEPT)))
+ to_chat(user, SPAN_DANGER("You botch harvesting \the [src], and ruin some of the meat in the process."))
+ subtract_meat(user)
+ else
+ harvest(user, user.get_skill_value(SKILL_COOKING))
+ else
+ to_chat(user, SPAN_DANGER("Your hand slips with your movement, and some of the meat is ruined."))
+ subtract_meat(user)
+ return TRUE
return ..()
@@ -453,17 +414,17 @@ var/global/list/simplemob_icon_bitflag_cache = list()
tally = 1
tally *= purge
- return tally+config.animal_delay
+ return tally+get_config_value(/decl/config/num/movement_animal)
/mob/living/simple_animal/Stat()
. = ..()
if(statpanel("Status") && show_stat_health)
- stat(null, "Health: [round((health / maxHealth) * 100)]%")
+ stat(null, "Health: [get_health_percent()]%")
/mob/living/simple_animal/death(gibbed, deathmessage = "dies!", show_dead_message)
density = FALSE
- adjustBruteLoss(maxHealth) //Make sure dey dead.
+ adjustBruteLoss(get_max_health()) //Make sure dey dead.
walk_to(src,0)
. = ..(gibbed,deathmessage,show_dead_message)
@@ -479,26 +440,10 @@ var/global/list/simplemob_icon_bitflag_cache = list()
damage = 30
apply_damage(damage, BRUTE, damage_flags = DAM_EXPLODE)
-/mob/living/simple_animal/adjustBruteLoss(damage)
- ..()
- updatehealth()
-
-/mob/living/simple_animal/adjustFireLoss(damage)
- ..()
- updatehealth()
-
-/mob/living/simple_animal/adjustToxLoss(damage)
- ..()
- updatehealth()
-
-/mob/living/simple_animal/adjustOxyLoss(damage)
- ..()
- updatehealth()
-
/mob/living/simple_animal/proc/SA_attackable(target_mob)
if (isliving(target_mob))
var/mob/living/L = target_mob
- if(!L.stat && L.health >= 0)
+ if(!L.stat && L.current_health >= 0)
return (0)
return 1
@@ -544,11 +489,12 @@ var/global/list/simplemob_icon_bitflag_cache = list()
if(P.damtype == BRUTE)
var/hit_dir = get_dir(P.starting, src)
var/obj/effect/decal/cleanable/blood/B = blood_splatter(get_step(src, hit_dir), src, 1, hit_dir)
- B.icon_state = pick("dir_splatter_1","dir_splatter_2")
- B.basecolor = bleed_colour
- var/scale = min(1, round(mob_size / MOB_SIZE_MEDIUM, 0.1))
- B.set_scale(scale)
- B.update_icon()
+ if(!QDELETED(B))
+ B.icon_state = pick("dir_splatter_1","dir_splatter_2")
+ B.basecolor = bleed_colour
+ var/scale = min(1, round(mob_size / MOB_SIZE_MEDIUM, 0.1))
+ B.set_scale(scale)
+ B.update_icon()
/mob/living/simple_animal/handle_fire()
return
@@ -610,13 +556,17 @@ var/global/list/simplemob_icon_bitflag_cache = list()
/mob/living/simple_animal/getCloneLoss()
. = max(0, gene_damage)
-/mob/living/simple_animal/adjustCloneLoss(var/amount)
+/mob/living/simple_animal/adjustCloneLoss(var/amount, var/do_update_health = TRUE)
+ SHOULD_CALL_PARENT(FALSE)
setCloneLoss(gene_damage + amount)
+ if(do_update_health)
+ update_health()
/mob/living/simple_animal/setCloneLoss(amount)
if(gene_damage >= 0)
- gene_damage = clamp(amount, 0, maxHealth)
- if(gene_damage >= maxHealth)
+ var/current_max_health = get_max_health()
+ gene_damage = clamp(amount, 0, current_max_health)
+ if(gene_damage >= current_max_health)
death()
/mob/living/simple_animal/get_admin_job_string()
@@ -653,7 +603,6 @@ var/global/list/simplemob_icon_bitflag_cache = list()
/mob/living/simple_animal/get_hydration()
return get_max_hydration()
-
/// Adapts our temperature and atmos thresholds to our current z-level.
/mob/living/simple_animal/proc/adapt_to_current_level()
var/turf/T = get_turf(src)
@@ -686,3 +635,15 @@ var/global/list/simplemob_icon_bitflag_cache = list()
if(max_gas)
min_gas[gas] = round(gas_amt * 1.5)
+// Simple filler bodytype so animals get offsets for their inventory slots.
+/decl/bodytype/animal
+ abstract_type = /decl/bodytype/animal
+ name = "animal"
+ bodytype_flag = 0
+ bodytype_category = "animal body"
+
+/mob/living/simple_animal/proc/get_melee_accuracy()
+ return clamp(sa_accuracy - melee_accuracy_mods(), 0, 100)
+
+/mob/living/simple_animal/check_has_mouth()
+ return TRUE
diff --git a/code/modules/mob/living/stasis.dm b/code/modules/mob/living/stasis.dm
index 490b49be8e4..76fda177df5 100644
--- a/code/modules/mob/living/stasis.dm
+++ b/code/modules/mob/living/stasis.dm
@@ -16,14 +16,19 @@
stasis_value += stasis_sources[source]
stasis_sources = null
+ if(stasis_value > 1 && GET_STATUS(src, STAT_DROWSY) < stasis_value * 4)
+ ADJ_STATUS(src, STAT_DROWSY, min(stasis_value, 3))
+ if(stat == CONSCIOUS && prob(1))
+ to_chat(src, SPAN_NOTICE("You feel slow and sluggish..."))
+
/mob/living/proc/get_cryogenic_factor(var/bodytemperature)
if(isSynthetic())
return 0
- var/cold_1 = get_temperature_threshold(COLD_LEVEL_1)
- var/cold_2 = get_temperature_threshold(COLD_LEVEL_2)
- var/cold_3 = get_temperature_threshold(COLD_LEVEL_3)
+ var/cold_1 = get_mob_temperature_threshold(COLD_LEVEL_1)
+ var/cold_2 = get_mob_temperature_threshold(COLD_LEVEL_2)
+ var/cold_3 = get_mob_temperature_threshold(COLD_LEVEL_3)
if(bodytemperature > cold_1)
return 0
diff --git a/code/modules/mob/living/stress.dm b/code/modules/mob/living/stress.dm
index b67360e26bc..2cb46e0c27b 100644
--- a/code/modules/mob/living/stress.dm
+++ b/code/modules/mob/living/stress.dm
@@ -1,7 +1,7 @@
#define GET_STRESSOR(S) (istype(S, /datum/stressor) ? S : SSmanaged_instances.get(S, cache_category = /datum/stressor))
/mob/living/proc/get_stress_modifier()
- if(!config.adjust_healing_from_stress)
+ if(!get_config_value(/decl/config/toggle/health_adjust_healing_from_stress))
return 0
return stress
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 790b2ee8eb7..9f367883a5e 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -5,7 +5,7 @@
computer_id = client.computer_id
last_ckey = ckey
log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]")
- if(config.log_access)
+ if(get_config_value(/decl/config/toggle/log_access))
var/is_multikeying = 0
for(var/mob/M in global.player_list)
if(M == src) continue
@@ -29,7 +29,8 @@
spawn(1 SECOND)
to_chat(src, "WARNING: It would seem that you are sharing connection or computer with another player. If you haven't done so already, please contact the staff via the Adminhelp verb to resolve this situation. Failure to do so may result in administrative action. You have been warned.")
- if(config.login_export_addr)
+ var/login_export_addr = get_config_value(/decl/config/text/login_export_addr)
+ if(login_export_addr)
spawn(-1)
var/list/params = new
params["login"] = 1
@@ -40,7 +41,7 @@
params["clientid"] = client.computer_id
params["roundid"] = game_id
params["name"] = real_name || name
- world.Export("[config.login_export_addr]?[list2params(params)]", null, 1)
+ world.Export("[login_export_addr]?[list2params(params)]", null, 1)
/mob/proc/maybe_send_staffwarns(var/action)
if(client.staffwarn)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 658c0ff7a5d..64eb428b4be 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -26,7 +26,7 @@
if(client)
for(var/atom/movable/AM in client.screen)
var/obj/screen/screenobj = AM
- if(istype(screenobj) && !screenobj.globalscreen)
+ if(istype(screenobj) && !screenobj.is_global_screen)
qdel(screenobj)
client.screen = list()
if(mind)
@@ -36,7 +36,6 @@
return ..()
/mob/proc/remove_screen_obj_references()
- QDEL_NULL_SCREEN(hands)
QDEL_NULL_SCREEN(internals)
QDEL_NULL_SCREEN(oxygen)
QDEL_NULL_SCREEN(toxin)
@@ -44,6 +43,7 @@
QDEL_NULL_SCREEN(bodytemp)
QDEL_NULL_SCREEN(healths)
QDEL_NULL_SCREEN(throw_icon)
+ QDEL_NULL_SCREEN(maneuver_icon)
QDEL_NULL_SCREEN(nutrition_icon)
QDEL_NULL_SCREEN(hydration_icon)
QDEL_NULL_SCREEN(pressure)
@@ -64,6 +64,7 @@
if(ispath(move_intent))
move_intent = GET_DECL(move_intent)
. = ..()
+ ability_master = new(null, src)
refresh_ai_handler()
START_PROCESSING(SSmobs, src)
@@ -341,7 +342,7 @@
var/obj/item/held = inv_slot.get_equipped_item()
dat += "[capitalize(inv_slot.slot_name)]: [held?.name || "nothing"]"
- var/list/all_slots = get_all_valid_equipment_slots()
+ var/list/all_slots = get_all_available_equipment_slots()
if(all_slots)
for(var/slot in (all_slots-global.pocket_slots))
if(slot in my_held_item_slots)
@@ -362,13 +363,16 @@
break
// Other incidentals.
- var/obj/item/clothing/under/suit = get_equipped_item(slot_w_uniform_str)
+ var/obj/item/clothing/suit = get_equipped_item(slot_w_uniform_str)
if(istype(suit))
dat += "
Pockets: Empty or Place Item"
- if(suit.has_sensor == SUIT_HAS_SENSORS)
- dat += "
Set sensors"
- if (suit.has_sensor && user.get_multitool())
- dat += "
[suit.has_sensor == SUIT_LOCKED_SENSORS ? "Unl" : "L"]ock sensors"
+ var/obj/item/clothing/accessory/vitals_sensor/sensor = get_vitals_sensor()
+ if(sensor)
+ if(sensor.get_sensors_locked())
+ dat += "
Unlock vitals sensors"
+ else if(user.get_multitool())
+ dat += "
Lock vitals sensors"
+ dat += "
Set vitals sensors"
if(get_equipped_item(slot_handcuffed_str))
dat += "
Handcuffed"
@@ -399,7 +403,7 @@
face_atom(A)
- if(!isghost(src))
+ if(!isghost(src) && get_config_value(/decl/config/toggle/visible_examine))
if((A.loc != src || (A in get_held_items())))
var/look_target = "at \the [A]"
if(isobj(A.loc))
@@ -590,7 +594,7 @@
return TRUE
return FALSE
-/mob/handle_mouse_drop(atom/over, mob/user)
+/mob/handle_mouse_drop(atom/over, mob/user, params)
if(over == user && user != src && !isAI(user))
show_stripping_window(user)
return TRUE
@@ -700,10 +704,9 @@
return 0
//Updates lying and icons
-/mob/proc/UpdateLyingBuckledAndVerbStatus()
- var/last_lying = lying
+/mob/proc/update_lying()
if(!resting && cannot_stand() && can_stand_overridden())
- lying = 0
+ lying = FALSE
else if(buckled)
anchored = TRUE
if(istype(buckled))
@@ -716,12 +719,16 @@
else
lying = incapacitated(INCAPACITATION_KNOCKDOWN)
+/mob/proc/UpdateLyingBuckledAndVerbStatus()
+ var/last_lying = lying
+ update_lying()
+ if(buckled)
+ anchored = (!istype(buckled) || !buckled.buckle_movable)
if(lying)
set_density(0)
drop_held_items()
else
set_density(initial(density))
-
reset_layer()
//Temporarily moved here from the various life() procs
@@ -806,7 +813,7 @@
/mob/living/silicon/robot/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE)
LAZYREMOVE(embedded, implant)
- adjustBruteLoss(5)
+ adjustBruteLoss(5, do_update_health = FALSE)
adjustFireLoss(10)
. = ..()
@@ -1062,12 +1069,54 @@
return 0
return 1
-// Let simple mobs press buttons and levers but nothing more complex.
-/mob/proc/get_dexterity(var/silent = FALSE)
- var/decl/species/my_species = get_species()
- if(my_species)
- return my_species.get_manual_dexterity()
- return DEXTERITY_BASE
+// Mobs further up the chain should override this proc if they want to return a simple dexterity value.
+/mob/proc/get_dexterity(var/silent)
+
+ // Check if we have a slot to use for this.
+ var/check_slot = get_active_held_item_slot()
+ if(!check_slot)
+ return DEXTERITY_NONE
+ var/datum/inventory_slot/gripper/gripper = get_inventory_slot_datum(check_slot)
+ if(!istype(gripper))
+ if(!silent)
+ to_chat(src, "Your [parse_zone(check_slot)] is missing!")
+ return DEXTERITY_NONE
+
+ // Work out if we have any brain damage impacting our dexterity.
+ var/dex_malus = 0
+ if(getBrainLoss())
+ var/brainloss_threshold = get_config_value(/decl/config/num/dex_malus_brainloss_threshold)
+ if(getBrainLoss() > brainloss_threshold) ///brainloss shouldn't instantly cripple you, so the effects only start once past the threshold and escalate from there.
+ dex_malus = clamp(CEILING((getBrainLoss()-brainloss_threshold)/10), 0, length(global.dexterity_levels))
+ if(dex_malus > 0)
+ dex_malus = global.dexterity_levels[dex_malus]
+
+ // If this slot does not need an organ we just go off the dexterity of the slot itself.
+ if(isnull(gripper.requires_organ_tag))
+ if(dex_malus)
+ if(!silent)
+ to_chat(src, SPAN_WARNING("Your [lowertext(gripper.slot_name)] doesn't respond properly!"))
+ return (gripper.get_dexterity(silent) & ~dex_malus)
+ return gripper.get_dexterity(silent)
+
+ // If this slot requires an organ, do the appropriate organ checks.
+ var/obj/item/organ/external/active_hand = GET_EXTERNAL_ORGAN(src, check_slot)
+ if(!active_hand)
+ if(!silent)
+ to_chat(src, "Your [parse_zone(check_slot)] is missing!")
+ return DEXTERITY_NONE
+ if(!active_hand.is_usable())
+ if(!silent)
+ to_chat(src, SPAN_WARNING("Your [active_hand.name] is unusable!"))
+ return DEXTERITY_NONE
+
+ // Return our organ dexterity.
+ if(dex_malus)
+ if(!silent)
+ to_chat(src, SPAN_WARNING("Your [active_hand.name] doesn't respond properly!"))
+ return (active_hand.get_manual_dexterity() & ~dex_malus)
+ return active_hand.get_manual_dexterity()
+
/mob/proc/check_dexterity(var/dex_level = DEXTERITY_FULL, var/silent = FALSE)
. = (get_dexterity(silent) & dex_level) == dex_level
@@ -1087,9 +1136,12 @@
to_chat(src, SPAN_WARNING("You scrawl down some meaningless lines."))
. = stars(text_content, 5)
-// mobs do not have mouths by default
+// mobs do not have mouths by default, unless provided by an organ
/mob/proc/check_has_mouth()
- return FALSE
+ var/obj/item/organ/external/head/H = get_organ(BP_HEAD, /obj/item/organ/external/head)
+ if(!H || !istype(H) || !H.can_intake_reagents)
+ return FALSE
+ return TRUE
/mob/proc/check_has_eyes()
return TRUE
@@ -1138,7 +1190,6 @@
/mob/proc/get_bodytype()
RETURN_TYPE(/decl/bodytype)
- return
/mob/proc/has_body_flag(flag, default = FALSE)
var/decl/bodytype/root_bodytype = get_bodytype()
@@ -1307,10 +1358,10 @@
/mob/verb/whisper_wrapper()
set name = ".Whisper"
set hidden = TRUE
- if(config.show_typing_indicator_for_whispers)
+ if(get_config_value(/decl/config/toggle/show_typing_indicator_for_whispers))
SStyping.set_indicator_state(client, TRUE)
var/message = input("","me (text)") as text|null
- if(config.show_typing_indicator_for_whispers)
+ if(get_config_value(/decl/config/toggle/show_typing_indicator_for_whispers))
SStyping.set_indicator_state(client, FALSE)
if (message)
whisper(message)
@@ -1318,7 +1369,7 @@
// Darksight procs.
/mob/proc/refresh_lighting_master()
if(!lighting_master)
- lighting_master = new
+ lighting_master = new(null, src)
if(client)
client.screen |= lighting_master
@@ -1334,7 +1385,7 @@
/mob/proc/get_target_zone()
return zone_sel?.selecting
-/mob/proc/get_temperature_threshold(var/threshold)
+/mob/proc/get_default_temperature_threshold(threshold)
switch(threshold)
if(COLD_LEVEL_1)
return 243
@@ -1349,7 +1400,22 @@
if(HEAT_LEVEL_3)
return 1000
else
- CRASH("base get_temperature_threshold() called with invalid threshold value.")
+ CRASH("base get_default_temperature_threshold() called with invalid threshold value.")
+
+/mob/proc/get_mob_temperature_threshold(threshold, bodypart)
+
+ // If we have organs, return the requested organ.
+ if(bodypart)
+ var/obj/item/organ/external/organ = get_organ(bodypart)
+ if(organ?.bodytype)
+ return organ.bodytype.get_body_temperature_threshold(threshold)
+
+ // If we have a bodytype, use that.
+ var/decl/bodytype/root_bodytype = get_bodytype()
+ if(root_bodytype)
+ return root_bodytype.get_body_temperature_threshold(threshold)
+
+ return get_default_temperature_threshold(threshold)
/mob/proc/get_unique_enzymes()
return
@@ -1359,4 +1425,23 @@
// Gets the ID card of a mob, but will not check types in the exceptions list
/mob/GetIdCard(exceptions = null)
+ RETURN_TYPE(/obj/item/card/id)
return LAZYACCESS(GetIdCards(exceptions), 1)
+
+/mob/get_overhead_text_x_offset()
+ return offset_overhead_text_x
+
+/mob/get_overhead_text_y_offset()
+ return offset_overhead_text_y
+
+/mob/can_be_injected_by(var/atom/injector)
+ return FALSE // Handled elsewhere in syringe logic.
+
+/mob/proc/getBrainLoss()
+ return 0
+
+/mob/proc/get_bodytype_category()
+ return get_bodytype()?.bodytype_category
+
+/mob/proc/get_overlay_state_modifier()
+ return
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 2a4d148347d..a23c167a142 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -39,27 +39,26 @@
var/stat = CONSCIOUS //Whether a mob is alive or dead. TODO: Move this to living - Nodrak
- var/obj/screen/cells = null
-
- var/obj/screen/hands = null
- var/obj/screen/internals = null
- var/obj/screen/oxygen = null
- var/obj/screen/toxin = null
- var/obj/screen/fire = null
- var/obj/screen/bodytemp = null
- var/obj/screen/healths = null
- var/obj/screen/throw_icon = null
- var/obj/screen/nutrition_icon = null
- var/obj/screen/hydration_icon = null
- var/obj/screen/pressure = null
- var/obj/screen/pain = null
- var/obj/screen/up_hint = null
- var/obj/screen/gun/item/item_use_icon = null
- var/obj/screen/gun/radio/radio_use_icon = null
- var/obj/screen/gun/move/gun_move_icon = null
- var/obj/screen/gun/mode/gun_setting_icon = null
-
- var/obj/screen/ability_master/ability_master = null
+ var/obj/screen/robot_module_select/hands
+ var/obj/screen/warning_cells/cells
+ var/obj/screen/internals/internals
+ var/obj/screen/oxygen/oxygen
+ var/obj/screen/toxins/toxin
+ var/obj/screen/fire_warning/fire
+ var/obj/screen/bodytemp/bodytemp
+ var/obj/screen/health_warning/healths
+ var/obj/screen/throw_toggle/throw_icon
+ var/obj/screen/maneuver/maneuver_icon
+ var/obj/screen/food/nutrition_icon
+ var/obj/screen/drink/hydration_icon
+ var/obj/screen/pressure/pressure
+ var/obj/screen/fullscreen/pain/pain
+ var/obj/screen/up_hint/up_hint
+ var/obj/screen/gun/item/item_use_icon
+ var/obj/screen/gun/radio/radio_use_icon
+ var/obj/screen/gun/move/gun_move_icon
+ var/obj/screen/gun/mode/gun_setting_icon
+ var/obj/screen/ability_master/ability_master
/*A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob.
A variable should only be globally attached to turfs/objects/whatever, when it is in fact needed as such.
@@ -86,7 +85,6 @@
var/radio_interrupt_cooldown = 0 // TODO move this to /human
- var/unacidable = 0
var/list/pinned // Lazylist of things pinning this creature to walls (see living_defense.dm)
var/list/embedded // Embedded items, since simple mobs don't have organs.
var/list/languages = list() // TODO: lazylist this var. For speaking/listening.
@@ -175,3 +173,7 @@
/// Used for darksight, required on all mobs to ensure lighting renders properly.
var/obj/screen/lighting_plane_master/lighting_master
+
+ // Offset the overhead text if necessary.
+ var/offset_overhead_text_x = 0
+ var/offset_overhead_text_y = 0
\ No newline at end of file
diff --git a/code/modules/mob/mob_eating.dm b/code/modules/mob/mob_eating.dm
new file mode 100644
index 00000000000..17155f71569
--- /dev/null
+++ b/code/modules/mob/mob_eating.dm
@@ -0,0 +1,12 @@
+// mobs do not have blocked mouths by default
+// overridden in human_defense.dm
+/mob/proc/check_mouth_coverage()
+ return null
+
+/mob/proc/get_eaten_transfer_amount(var/default)
+ . = default
+ if(issmall(src))
+ . = CEILING(.*0.5)
+
+/mob/proc/can_eat_food_currently(obj/eating, mob/user)
+ return TRUE
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index af0fac10217..d8ce31b26fb 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -66,11 +66,12 @@
/proc/getsensorlevel(A)
var/mob/M = A
- if(istype(M))
- var/obj/item/clothing/under/U = M.get_equipped_item(slot_w_uniform_str)
- if(istype(U))
- return U.sensor_mode
- return SUIT_SENSOR_OFF
+ if(!istype(M))
+ return VITALS_SENSOR_OFF
+ var/obj/item/clothing/accessory/vitals_sensor/sensor = M.get_vitals_sensor()
+ if(sensor)
+ return sensor.sensor_mode
+ return VITALS_SENSOR_OFF
/proc/is_admin(var/mob/user)
return check_rights(R_ADMIN, 0, user) != 0
@@ -120,9 +121,8 @@ var/global/list/global/organ_rel_size = list(
. = zone || BP_CHEST
if(. == BP_EYES || . == BP_MOUTH)
. = BP_HEAD
- if(ishuman(target) && !base_zone_only)
- var/mob/living/carbon/human/H = target
- . = H.get_bodytype().get_limb_from_zone(.)
+ if(!base_zone_only && target)
+ . = target.get_bodytype()?.get_limb_from_zone(.) || .
// Returns zone with a certain probability. If the probability fails, or no zone is specified, then a random body part is chosen.
// Do not use this if someone is intentionally trying to hit a specific body part.
diff --git a/code/modules/mob/mob_layering.dm b/code/modules/mob/mob_layering.dm
index 33f8325c27a..e3143c6d1dc 100644
--- a/code/modules/mob/mob_layering.dm
+++ b/code/modules/mob/mob_layering.dm
@@ -90,7 +90,13 @@
if(istext(pixel_shift))
pixel_shift = cached_json_decode(pixel_shift)
if(islist(pixel_shift))
- var/list/directional_offset = LAZYACCESS(pixel_shift, "[dir]")
+ var/list/directional_offset = LAZYACCESS(pixel_shift, num2text(dir))
+ // Unset diagonals should be substituted with the appropriate NSEW value.
+ if(!directional_offset)
+ if(dir & EAST)
+ directional_offset = LAZYACCESS(pixel_shift, num2text(EAST))
+ else if(dir & WEST)
+ directional_offset = LAZYACCESS(pixel_shift, num2text(WEST))
if(islist(directional_offset))
pixel_shift = directional_offset
new_pixel_x += pixel_shift["x"] || 0
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index ee367c3390a..621d6b5425a 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -49,15 +49,15 @@
mob.hotkey_drop()
/mob/proc/hotkey_drop()
- . = has_extension(src, /datum/extension/hattable)
+ return FALSE
/mob/living/hotkey_drop()
- if(length(get_active_grabs()) || ..())
- drop_item()
-
-/mob/living/carbon/hotkey_drop()
- var/obj/item/hand = get_active_hand()
- if(hand?.can_be_dropped_by_client(src) || ..())
+ if(length(get_active_grabs()))
+ . = TRUE
+ else
+ var/obj/item/hand = get_active_hand()
+ . = hand?.can_be_dropped_by_client(src)
+ if(.)
drop_item()
/client/verb/swap_hand()
diff --git a/code/modules/mob/mob_status.dm b/code/modules/mob/mob_status.dm
index 82ff6b6fd49..0e2c45822b9 100644
--- a/code/modules/mob/mob_status.dm
+++ b/code/modules/mob/mob_status.dm
@@ -5,8 +5,5 @@
/mob/proc/clear_status_effects()
return
-/mob/proc/handle_status_condition(var/condition)
- return
-
/mob/proc/set_status(var/condition, var/amount)
return
diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm
index f9f04a6e329..e4f273ad596 100644
--- a/code/modules/mob/mob_transformation_simple.dm
+++ b/code/modules/mob/mob_transformation_simple.dm
@@ -50,7 +50,7 @@ var/global/list/href_to_mob_type = list(
//This proc is the most basic of the procs. All it does is make a new mob on the same tile and transfer over a few variables.
//Returns the new mob
-//Note that this proc does NOT do MMI related stuff!
+//Note that this proc does NOT do brain related stuff!
/mob/proc/change_mob_type(var/new_type, var/turf/location, var/new_name, var/subspecies)
if(!new_type)
diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm
index 54bd8e68b81..6951ec383e3 100644
--- a/code/modules/mob/new_player/login.dm
+++ b/code/modules/mob/new_player/login.dm
@@ -46,5 +46,5 @@
// bolds the changelog button on the interface so we know there are updates.
if(client.prefs?.lastchangelog != global.changelog_hash)
to_chat(client, SPAN_NOTICE("You have unread updates in the changelog."))
- if(config.aggressive_changelog)
+ if(get_config_value(/decl/config/toggle/aggressive_changelog))
client.changes()
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index a165ce1ddc3..bbc3e208b3e 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -1,15 +1,12 @@
/mob/new_player
universal_speak = TRUE
mob_sort_value = 10
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
simulated = FALSE
-
density = FALSE
stat = DEAD
-
movement_handlers = list()
anchored = TRUE // don't get pushed around
-
virtual_mob = null // Hear no evil, speak no evil
var/ready = 0
@@ -19,7 +16,6 @@
var/totalPlayers = 0
var/totalPlayersReady = 0
var/show_invalid_jobs = 0
-
var/datum/browser/panel
INITIALIZE_IMMEDIATE(/mob/new_player)
@@ -112,20 +108,21 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
to_chat(src, SPAN_WARNING("Please wait for server initialization to complete..."))
return
- if(!config.respawn_delay || client.holder || alert(src,"Are you sure you wish to observe? You will have to wait [config.respawn_delay] minute\s before being able to respawn!","Player Setup","Yes","No") == "Yes")
+ var/respawn_delay = get_config_value(/decl/config/num/respawn_delay)
+ if(!respawn_delay || client.holder || alert(src,"Are you sure you wish to observe? You will have to wait [respawn_delay] minute\s before being able to respawn!","Player Setup","Yes","No") == "Yes")
if(!client) return 1
var/mob/observer/ghost/observer = new()
spawning = 1
sound_to(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = sound_channels.lobby_channel))// MAD JAMS cant last forever yo
-
observer.started_as_observer = 1
close_spawn_windows()
- var/obj/O = locate("landmark*Observer-Start")
- if(istype(O))
+ var/decl/spawnpoint/spawnpoint = GET_DECL(/decl/spawnpoint/observer)
+ var/turf/T = SAFEPICK(spawnpoint.get_spawn_turfs(src))
+ if(istype(T))
to_chat(src, SPAN_NOTICE("Now teleporting."))
- observer.forceMove(O.loc)
+ observer.forceMove(T)
else
to_chat(src, SPAN_DANGER("Could not locate an observer spawn point. Use the Teleport verb to jump to the map."))
observer.timeofdeath = world.time // Set the time of death so that the respawn timer works correctly.
@@ -142,7 +139,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
client.prefs.real_name = client.prefs.get_random_name()
observer.real_name = client.prefs.real_name
observer.SetName(observer.real_name)
- if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
+ if(!client.holder && !get_config_value(/decl/config/toggle/antag_hud_allowed)) // For new ghosts we remove the verb from even showing up if it's not allowed.
observer.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
observer.key = key
qdel(src)
@@ -187,7 +184,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
to_chat(usr, "The round is either not ready, or has already finished...")
return 0
- if(!config.enter_allowed)
+ if(!get_config_value(/decl/config/toggle/on/enter_allowed))
to_chat(usr, "There is an administrative lock on entering the game!")
return 0
@@ -202,12 +199,14 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
to_chat(src, alert("That spawnpoint is unavailable. Please try another."))
return 0
- var/turf/spawn_turf = pick(spawnpoint.turfs)
+ var/turf/spawn_turf
if(job.latejoin_at_spawnpoints)
var/obj/S = job.get_roundstart_spawnpoint()
spawn_turf = get_turf(S)
+ else
+ spawn_turf = SAFEPICK(spawnpoint.get_spawn_turfs(src))
- if(!job.no_warn_unsafe && !SSjobs.check_unsafe_spawn(src, spawn_turf))
+ if(!spawn_turf || !job.no_warn_unsafe && !SSjobs.check_unsafe_spawn(src, spawn_turf))
return
// Just in case someone stole our position while we were waiting for input from alert() proc
@@ -221,7 +220,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
if(!character)
return 0
- character = SSjobs.equip_rank(character, job.title, 1) //equips the human
+ character = SSjobs.equip_job_title(character, job.title, 1) //equips the human
SScustomitems.equip_custom_items(character)
if(job.do_spawn_special(character, src, TRUE)) //This replaces the AI spawn logic with a proc stub. Refer to silicon.dm for the spawn logic.
@@ -235,9 +234,11 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
if(!(ASSIGNMENT_ROBOT in job.event_categories))
CreateModularRecord(character)
SSticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
- AnnounceArrival(character, job, spawnpoint.msg)
- else
- AnnounceCyborg(character, job, spawnpoint.msg)
+ if(spawnpoint.spawn_announcement)
+ AnnounceArrival(character, job, spawnpoint.spawn_announcement)
+ else if(spawnpoint.spawn_announcement)
+ AnnounceCyborg(character, job, spawnpoint.spawn_announcement)
+
callHook("player_latejoin", list(job, character))
log_and_message_admins("has joined the round as [character.mind.assigned_role].", character)
@@ -360,7 +361,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
if(!job)
job = SSjobs.get_by_title(global.using_map.default_job_title)
var/decl/spawnpoint/spawnpoint = job.get_spawnpoint(client, client.prefs.ranks[job.title])
- spawn_turf = pick(spawnpoint.turfs)
+ spawn_turf = DEFAULTPICK(spawnpoint.get_spawn_turfs(src), get_random_spawn_turf(SPAWN_FLAG_JOBS_CAN_SPAWN))
if(chosen_species)
if(!check_species_allowed(chosen_species))
@@ -393,7 +394,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player)
// Do the initial caching of the player's body icons.
new_character.force_update_limbs()
- new_character.refresh_visible_overlays()
+ new_character.try_refresh_visible_overlays()
new_character.key = key //Manually transfer the key to log them in
return new_character
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 0bf28fceb61..5445b9c23dc 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -74,9 +74,8 @@
previewJob.equip_preview(mannequin, player_alt_titles[previewJob.title], branch, rank)
update_icon = TRUE
- if(!(mannequin.get_bodytype().appearance_flags & HAS_UNDERWEAR))
- if(all_underwear)
- all_underwear.Cut()
+ if(!(mannequin.get_bodytype()?.appearance_flags & HAS_UNDERWEAR) && length(all_underwear))
+ all_underwear.Cut()
if((equip_preview_mob & EQUIP_PREVIEW_LOADOUT) && !(previewJob && (equip_preview_mob & EQUIP_PREVIEW_JOB) && previewJob.skip_loadout_preview))
// Equip custom gear loadout, replacing any job items
@@ -105,6 +104,7 @@
if(update_icon)
mannequin.update_icon()
+ mannequin.compile_overlays()
/datum/preferences/proc/update_preview_icon()
var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey)
diff --git a/code/modules/mob/observer/eye/blueprints_eye.dm b/code/modules/mob/observer/eye/blueprints_eye.dm
index c868ed59ee8..7742f8f2c6b 100644
--- a/code/modules/mob/observer/eye/blueprints_eye.dm
+++ b/code/modules/mob/observer/eye/blueprints_eye.dm
@@ -325,7 +325,7 @@
var/datum/shuttle/our_shuttle = SSshuttle.shuttles[shuttle_name]
our_shuttle.shuttle_area += A
SSshuttle.shuttle_areas += A
- events_repository.register(/decl/observ/destroyed, A, our_shuttle, /datum/shuttle/proc/remove_shuttle_area)
+ events_repository.register(/decl/observ/destroyed, A, our_shuttle, TYPE_PROC_REF(/datum/shuttle, remove_shuttle_area))
return A
#undef MAX_AREA_SIZE
\ No newline at end of file
diff --git a/code/modules/mob/observer/eye/freelook/freelook.dm b/code/modules/mob/observer/eye/freelook/freelook.dm
index b3cf191a3c3..7234084d0cd 100644
--- a/code/modules/mob/observer/eye/freelook/freelook.dm
+++ b/code/modules/mob/observer/eye/freelook/freelook.dm
@@ -4,12 +4,12 @@
/mob/observer/eye/freelook
var/list/visibleChunks = list()
-
var/datum/visualnet/visualnet
/mob/observer/eye/freelook/Initialize(var/mapload, var/datum/visualnet/net)
. = ..()
- if(net) visualnet = net
+ if(net)
+ visualnet = net
/mob/observer/eye/freelook/Destroy()
. = ..()
@@ -17,16 +17,17 @@
/mob/observer/eye/freelook/possess(var/mob/user)
. = ..()
- visualnet.update_eye_chunks(src, TRUE)
+ if(visualnet)
+ visualnet.update_eye_chunks(src, TRUE)
/mob/observer/eye/freelook/release(var/mob/user)
- if(user == owner)
+ if(visualnet && user == owner)
visualnet.remove_eye(src)
. = ..()
-
+
// Streams the chunk that the new loc is in.
/mob/observer/eye/freelook/setLoc(var/T)
. = ..()
- if(.)
+ if(. && visualnet)
visualnet.update_eye_chunks(src)
\ No newline at end of file
diff --git a/code/modules/mob/observer/eye/freelook/life.dm b/code/modules/mob/observer/eye/freelook/life.dm
index 98b9c477e1f..6a8a6975fd7 100644
--- a/code/modules/mob/observer/eye/freelook/life.dm
+++ b/code/modules/mob/observer/eye/freelook/life.dm
@@ -1,7 +1,7 @@
/mob/observer/eye/freelook/Life()
- ..()
+ . = ..()
// If we lost our client, reset the list of visible chunks so they update properly on return
- if(owner == src && !client)
+ if(. && owner == src && !client)
visibleChunks.Cut()
/*else if(owner && !owner.client)
visibleChunks.Cut()*/
diff --git a/code/modules/mob/observer/eye/freelook/visualnet.dm b/code/modules/mob/observer/eye/freelook/visualnet.dm
index f49d0c0fe96..0274a87565d 100644
--- a/code/modules/mob/observer/eye/freelook/visualnet.dm
+++ b/code/modules/mob/observer/eye/freelook/visualnet.dm
@@ -109,7 +109,7 @@
// Never access this proc directly!!!!
// This will update the chunk and all the surrounding chunks.
/datum/visualnet/proc/major_chunk_change(var/atom/source)
- for_all_chunks_in_range(source, /datum/chunk/proc/visibility_changed, list())
+ for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, visibility_changed), list())
/datum/visualnet/proc/add_source(var/atom/source, var/update_visibility = TRUE, var/opacity_check = FALSE)
if(!(source && is_valid_source(source)))
@@ -118,9 +118,9 @@
if(source in sources)
return FALSE
sources += source
- events_repository.register(/decl/observ/moved, source, src, /datum/visualnet/proc/source_moved)
- events_repository.register(/decl/observ/destroyed, source, src, /datum/visualnet/proc/remove_source)
- for_all_chunks_in_range(source, /datum/chunk/proc/add_source, list(source))
+ events_repository.register(/decl/observ/moved, source, src, TYPE_PROC_REF(/datum/visualnet, source_moved))
+ events_repository.register(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum/visualnet, remove_source))
+ for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, add_source), list(source))
if(update_visibility)
update_visibility(source, opacity_check)
return TRUE
@@ -129,9 +129,9 @@
if(!sources.Remove(source))
return FALSE
- events_repository.unregister(/decl/observ/moved, source, src, /datum/visualnet/proc/source_moved)
- events_repository.unregister(/decl/observ/destroyed, source, src, /datum/visualnet/proc/remove_source)
- for_all_chunks_in_range(source, /datum/chunk/proc/remove_source, list(source))
+ events_repository.unregister(/decl/observ/moved, source, src, TYPE_PROC_REF(/datum/visualnet, source_moved))
+ events_repository.unregister(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum/visualnet, remove_source))
+ for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, remove_source), list(source))
if(update_visibility)
update_visibility(source, opacity_check)
return TRUE
@@ -150,9 +150,9 @@
// A more proper way would be to figure out which chunks have gone out of range, and which have come into range
// and only remove/add to those.
if(old_turf)
- for_all_chunks_in_range(source, /datum/chunk/proc/remove_source, list(source), old_turf)
+ for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, remove_source), list(source), old_turf)
if(new_turf)
- for_all_chunks_in_range(source, /datum/chunk/proc/add_source, list(source), new_turf)
+ for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, add_source), list(source), new_turf)
/datum/visualnet/proc/for_all_chunks_in_range(var/atom/source, var/proc_call, var/list/proc_args, var/turf/T)
T = T ? T : get_turf(source)
diff --git a/code/modules/mob/observer/ghost/ghost.dm b/code/modules/mob/observer/ghost/ghost.dm
index 4f62e09352b..0b34a129d40 100644
--- a/code/modules/mob/observer/ghost/ghost.dm
+++ b/code/modules/mob/observer/ghost/ghost.dm
@@ -61,11 +61,8 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images
mind = new /datum/mind(key)
mind.current = src
if(!T)
- var/list/spawn_locs = global.latejoin_locations | global.latejoin_cryo_locations | global.latejoin_gateway_locations
- if(length(spawn_locs))
- T = pick(spawn_locs)
- else
- T = locate(1, 1, 1)
+ T = get_random_spawn_turf(SPAWN_FLAG_GHOSTS_CAN_SPAWN)
+
forceMove(T)
if(!name) //To prevent nameless ghosts
@@ -111,9 +108,10 @@ Works together with spawning an observer, noted above.
*/
/mob/observer/ghost/Life()
- ..()
- if(!loc) return
- if(!client) return 0
+
+ . = ..()
+ if(!. || !loc || !client)
+ return FALSE
handle_hud_glasses()
@@ -153,7 +151,7 @@ Works together with spawning an observer, noted above.
ghost.can_reenter_corpse = can_reenter_corpse
ghost.timeofdeath = src.stat == DEAD ? src.timeofdeath : world.time
ghost.key = key
- if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
+ if(ghost.client && !ghost.client.holder && !get_config_value(/decl/config/toggle/antag_hud_allowed)) // For new ghosts we remove the verb from even showing up if it's not allowed.
ghost.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
return ghost
@@ -170,6 +168,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(stat == DEAD)
announce_ghost_joinleave(ghostize(1))
else
+ var/respawn_delay = get_config_value(/decl/config/num/respawn_delay)
var/response
if(src.client && src.client.holder)
response = alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", "Ghost", "Admin Ghost", "Stay in body")
@@ -177,8 +176,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(!src.client)
return
src.client.admin_ghost()
- else if(config.respawn_delay)
- response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another [config.respawn_delay] minute\s! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body")
+ else if(respawn_delay)
+ response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another [respawn_delay] minute\s! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body")
else
response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to return to this body! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body")
if(response != "Ghost")
@@ -240,14 +239,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(!client)
return
- if(!config.antag_hud_allowed && !client.holder)
+ if(!get_config_value(/decl/config/toggle/antag_hud_allowed) && !client.holder)
to_chat(src, SPAN_WARNING("Admins have disabled this for this round"))
return
var/mob/observer/ghost/M = src
if(jobban_isbanned(M, "AntagHUD"))
to_chat(src, SPAN_WARNING("You have been banned from using this feature."))
return
- if(config.antag_hud_restricted && !M.has_enabled_antagHUD && !client.holder)
+ if(get_config_value(/decl/config/toggle/antag_hud_restricted) && !M.has_enabled_antagHUD && !client.holder)
var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No")
if(response == "No") return
M.can_reenter_corpse = 0
@@ -310,9 +309,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
stop_following()
following = target
verbs |= /mob/observer/ghost/proc/scan_target
- events_repository.register(/decl/observ/moved, following, src, /atom/movable/proc/move_to_turf)
- events_repository.register(/decl/observ/dir_set, following, src, /atom/proc/recursive_dir_set)
- events_repository.register(/decl/observ/destroyed, following, src, /mob/observer/ghost/proc/stop_following)
+ events_repository.register(/decl/observ/moved, following, src, TYPE_PROC_REF(/atom/movable, move_to_turf))
+ events_repository.register(/decl/observ/dir_set, following, src, TYPE_PROC_REF(/atom, recursive_dir_set))
+ events_repository.register(/decl/observ/destroyed, following, src, TYPE_PROC_REF(/mob/observer/ghost, stop_following))
to_chat(src, "Now following \the [following].")
move_to_turf(following, loc, following.loc)
@@ -375,7 +374,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Become mouse"
set category = "Ghost"
- if(config.disable_player_mice)
+ if(get_config_value(/decl/config/toggle/disable_player_mice))
to_chat(src, "Spawning as a mouse is currently disabled.")
return
@@ -404,7 +403,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
to_chat(src, "Unable to find any unwelded vents to spawn mice at.")
if(host)
- if(config.uneducated_mice)
+ if(get_config_value(/decl/config/toggle/uneducated_mice))
host.universal_understand = FALSE
announce_ghost_joinleave(src, 0, "They are now a mouse.")
host.ckey = src.ckey
@@ -421,8 +420,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
show_browser(src, dat, "window=manifest;size=370x420;can_close=1")
//This is called when a ghost is drag clicked to something.
-/mob/observer/ghost/MouseDrop(atom/over)
+/mob/observer/ghost/MouseDrop(over_object, src_location, over_location, src_control, over_control, params)
SHOULD_CALL_PARENT(FALSE)
+ var/atom/over = over_object
if(!usr || !over)
return
if(isghost(usr) && usr.client && isliving(over))
@@ -438,7 +438,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return ..()
/mob/observer/ghost/proc/try_possession(var/mob/living/M)
- if(!config.ghosts_can_possess_animals)
+ if(!get_config_value(/decl/config/toggle/ghosts_can_possess_animals))
to_chat(src, SPAN_WARNING("Ghosts are not permitted to possess animals."))
return FALSE
if(!M.can_be_possessed_by(src))
@@ -529,7 +529,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(feedback)
to_chat(src, "Your non-dead body prevents you from respawning.")
return 0
- if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
+ if(get_config_value(/decl/config/toggle/antag_hud_restricted) && has_enabled_antagHUD == 1)
if(feedback)
to_chat(src, "antagHUD restrictions prevent you from respawning.")
return 0
@@ -567,9 +567,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
appearance = target
appearance_flags |= initial(appearance_flags)
+
+ // Keep mob offsets when you move over tables and such!
+ default_pixel_x = target.default_pixel_x
+ default_pixel_w = target.default_pixel_w
+ default_pixel_y = target.default_pixel_y
+ default_pixel_z = target.default_pixel_z
+
+ // Apply ghostly alpha and layering.
alpha = pre_alpha
plane = pre_plane
layer = pre_layer
+
set_invisibility(pre_invis)
transform = null //make goast stand up
@@ -577,7 +586,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Respawn"
set category = "OOC"
- if (!(config.abandon_allowed))
+ if (!get_config_value(/decl/config/toggle/on/abandon_allowed))
to_chat(usr, SPAN_WARNING("Respawn is disabled."))
return
if (!SSticker.mode)
@@ -586,7 +595,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if (SSticker.mode.deny_respawn)
to_chat(usr, SPAN_WARNING("Respawn is disabled for this roundtype."))
return
- else if(!MayRespawn(1, config.respawn_delay))
+ else if(!MayRespawn(1, get_config_value(/decl/config/num/respawn_delay)))
return
to_chat(usr, SPAN_NOTICE("You can respawn now, enjoy your new life!"))
@@ -597,12 +606,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
M.key = key
log_and_message_admins("has respawned.", M)
-/mob/observer/ghost/GetIdCards()
+/mob/observer/ghost/GetIdCards(list/exceptions)
. = ..()
- if (!is_admin(src))
- return .
-
- if (!ghost_all_access)
- ghost_all_access = new()
- LAZYDISTINCTADD(., ghost_all_access)
-
+ if(is_admin(src))
+ if (!ghost_all_access)
+ ghost_all_access = new
+ if(!is_type_in_list(ghost_all_access, exceptions))
+ LAZYDISTINCTADD(., ghost_all_access)
diff --git a/code/modules/mob/observer/observer.dm b/code/modules/mob/observer/observer.dm
index 27dbcf58112..d972bb370be 100644
--- a/code/modules/mob/observer/observer.dm
+++ b/code/modules/mob/observer/observer.dm
@@ -41,6 +41,9 @@ var/global/const/GHOST_IMAGE_ALL = ~GHOST_IMAGE_NONE
SSghost_images.queue_global_image_update()
. = ..()
+/mob/observer/get_movement_delay(travel_dir)
+ return 1
+
/mob/observer/check_airflow_movable()
return FALSE
diff --git a/code/modules/mob/observer/virtual/base.dm b/code/modules/mob/observer/virtual/base.dm
index 0fecb711fde..c4897378242 100644
--- a/code/modules/mob/observer/virtual/base.dm
+++ b/code/modules/mob/observer/virtual/base.dm
@@ -23,7 +23,7 @@ var/global/list/all_virtual_listeners = list()
. = INITIALIZE_HINT_QDEL
CRASH("Received an unexpected host type. Expected [host_type], was [log_info_line(host)].")
src.host = host
- events_repository.register(/decl/observ/moved, host, src, /atom/movable/proc/move_to_turf_or_null)
+ events_repository.register(/decl/observ/moved, host, src, TYPE_PROC_REF(/atom/movable, move_to_turf_or_null))
all_virtual_listeners += src
@@ -31,7 +31,7 @@ var/global/list/all_virtual_listeners = list()
STOP_PROCESSING(SSmobs, src)
/mob/observer/virtual/Destroy()
- events_repository.unregister(/decl/observ/moved, host, src, /atom/movable/proc/move_to_turf_or_null)
+ events_repository.unregister(/decl/observ/moved, host, src, TYPE_PROC_REF(/atom/movable, move_to_turf_or_null))
all_virtual_listeners -= src
host = null
return ..()
diff --git a/code/modules/mob/observer/virtual/mob.dm b/code/modules/mob/observer/virtual/mob.dm
index eb08a07d3b8..02026201066 100644
--- a/code/modules/mob/observer/virtual/mob.dm
+++ b/code/modules/mob/observer/virtual/mob.dm
@@ -4,16 +4,16 @@
/mob/observer/virtual/mob/Initialize(mapload, var/mob/host)
. = ..()
- events_repository.register(/decl/observ/sight_set, host, src, /mob/observer/virtual/mob/proc/sync_sight)
- events_repository.register(/decl/observ/see_invisible_set, host, src, /mob/observer/virtual/mob/proc/sync_sight)
- events_repository.register(/decl/observ/see_in_dark_set, host, src, /mob/observer/virtual/mob/proc/sync_sight)
+ events_repository.register(/decl/observ/sight_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight))
+ events_repository.register(/decl/observ/see_invisible_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight))
+ events_repository.register(/decl/observ/see_in_dark_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight))
sync_sight(host)
/mob/observer/virtual/mob/Destroy()
- events_repository.unregister(/decl/observ/sight_set, host, src, /mob/observer/virtual/mob/proc/sync_sight)
- events_repository.unregister(/decl/observ/see_invisible_set, host, src, /mob/observer/virtual/mob/proc/sync_sight)
- events_repository.unregister(/decl/observ/see_in_dark_set, host, src, /mob/observer/virtual/mob/proc/sync_sight)
+ events_repository.unregister(/decl/observ/sight_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight))
+ events_repository.unregister(/decl/observ/see_invisible_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight))
+ events_repository.unregister(/decl/observ/see_in_dark_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight))
. = ..()
/mob/observer/virtual/mob/proc/sync_sight(var/mob/mob_host)
diff --git a/code/modules/mob/skills/skill.dm b/code/modules/mob/skills/skill.dm
index 7f7dcbed4e1..6525d69a964 100644
--- a/code/modules/mob/skills/skill.dm
+++ b/code/modules/mob/skills/skill.dm
@@ -334,7 +334,7 @@ var/global/list/skills = list()
levels = list(
"Unskilled" = "You know how to use the technology that was present in whatever society you grew up in. You know how to tell when something is malfunctioning, but you have to call tech support to get it fixed.",
"Basic" = "You use and repair high-tech equipment in the course of your daily work. You can fix simple problems, and you know how to use a circuit printer or autolathe. You can build simple robots such as cleanbots and medibots.",
- "Trained" = "You can build or repair an exosuit or cyborg chassis, use advanced fabricators and analyzers, and build prosthetic limbs. You can safely transfer an MMI or posibrain into a cyborg chassis.
- You can attach robotic limbs. Its speed increases with level.",
+ "Trained" = "You can build or repair an exosuit or cyborg chassis, use advanced fabricators and analyzers, and build prosthetic limbs. You can safely transfer a neural interface into a cyborg chassis.
- You can attach robotic limbs. Its speed increases with level.",
"Experienced" = "You have years of experience building or reverse-engineering complex devices. Your use of fabricators and destructive analyzers is efficient and methodical. You can design contraptions to order, and likely sell those designs at a profit.",
"Master" = "You are an inventor or researcher. You can design, build, and modify equipment that most people don't even know exists. You are at home in the lab and the workshop and you've never met a gadget you couldn't take apart, put back together, and replicate."
)
diff --git a/code/modules/mob/skills/skill_buffs.dm b/code/modules/mob/skills/skill_buffs.dm
index 18f538055c3..bf99aa37ed7 100644
--- a/code/modules/mob/skills/skill_buffs.dm
+++ b/code/modules/mob/skills/skill_buffs.dm
@@ -71,7 +71,7 @@
buff.skillset = skillset
skillset.on_levels_change()
if(duration)
- addtimer(CALLBACK(buff, /datum/skill_buff/proc/remove), duration)
+ addtimer(CALLBACK(buff, TYPE_PROC_REF(/datum/skill_buff, remove)), duration)
return buff
//Takes a buff type or datum; typing is false here.
diff --git a/code/modules/mob/skills/skill_verbs.dm b/code/modules/mob/skills/skill_verbs.dm
index 63d3e94e727..7447f7133be 100644
--- a/code/modules/mob/skills/skill_verbs.dm
+++ b/code/modules/mob/skills/skill_verbs.dm
@@ -49,7 +49,7 @@
return
cooling_down = 1
update_verb()
- addtimer(CALLBACK(src, .proc/remove_cooldown), cooldown)
+ addtimer(CALLBACK(src, PROC_REF(remove_cooldown)), cooldown)
/*
The Instruct verb. buffs untrained -> basic and requires skill in the skill training as well as leadership.
Robots and antags can instruct.
diff --git a/code/modules/mob/stripping.dm b/code/modules/mob/stripping.dm
index e677769e9ce..0552345b391 100644
--- a/code/modules/mob/stripping.dm
+++ b/code/modules/mob/stripping.dm
@@ -31,23 +31,20 @@
toggle_sensors(user)
return
if ("lock_sensors")
- var/obj/item/clothing/under/subject_uniform = get_equipped_item(slot_w_uniform_str)
- if (!istype(subject_uniform, /obj/item/clothing/under))
+ var/obj/item/clothing/accessory/vitals_sensor/sensor = get_vitals_sensor()
+ if (!istype(sensor))
return
- visible_message(SPAN_DANGER("\The [user] is trying to [subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? "un" : ""]lock \the [src]'s sensors!"))
+ visible_message(SPAN_DANGER("\The [user] is trying to [sensor.get_sensors_locked() ? "un" : ""]lock \the [src]'s sensors!"))
if (do_after(user, HUMAN_STRIP_DELAY, src, progress = 0))
- if (subject_uniform != get_equipped_item(slot_w_uniform_str))
- to_chat(user, SPAN_WARNING("\The [src] is not wearing \the [subject_uniform] anymore."))
- return
- if (!subject_uniform.has_sensor)
- to_chat(user, SPAN_WARNING("\The [subject_uniform] has no sensors to lock."))
+ if(QDELETED(sensor) || sensor != get_vitals_sensor())
+ to_chat(user, SPAN_WARNING("\The [src] is not wearing \the [sensor] anymore."))
return
var/obj/item/multitool/user_multitool = user.get_multitool()
if (!istype(user_multitool))
- to_chat(user, SPAN_WARNING("You need a multitool to lock \the [subject_uniform]'s sensors."))
+ to_chat(user, SPAN_WARNING("You need a multitool to lock \the [src]'s sensors."))
return
- subject_uniform.has_sensor = subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? SUIT_HAS_SENSORS : SUIT_LOCKED_SENSORS
- visible_message(SPAN_NOTICE("\The [user] [subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? "" : "un"]locks \the [subject_uniform]'s suit sensor controls."), range = 2)
+ sensor.toggle_sensors_locked()
+ visible_message(SPAN_NOTICE("\The [user] [sensor.get_sensors_locked() ? "" : "un"]locks \the [src]'s vitals sensor controls."), range = 2)
return
if("internals")
visible_message("\The [usr] is trying to set \the [src]'s internals!")
@@ -137,13 +134,17 @@
// Modify the current target sensor level.
/mob/proc/toggle_sensors(var/mob/living/user)
- var/obj/item/clothing/under/suit = get_equipped_item(slot_w_uniform_str)
- if(!istype(suit))
- to_chat(user, "\The [src] is not wearing a suit with sensors.")
- return
- if (suit.has_sensor >= 2)
- to_chat(user, "\The [src]'s suit sensor controls are locked.")
+ var/obj/item/clothing/accessory/vitals_sensor/sensor = get_vitals_sensor()
+ if(!istype(sensor))
+ to_chat(user, SPAN_WARNING("\The [src] is not wearing a vitals sensor."))
+ if (sensor.get_sensors_locked())
+ to_chat(user, SPAN_WARNING("\The [src]'s suit sensor controls are locked."))
return
-
admin_attack_log(user, src, "Toggled their suit sensors.", "Toggled their suit sensors.", "toggled the suit sensors of")
- suit.set_sensors(user)
+ sensor.user_set_sensors(user)
+
+/mob/proc/get_vitals_sensor()
+ for(var/check_slot in global.vitals_sensor_equip_slots)
+ var/obj/item/clothing/equipped = get_equipped_item(check_slot)
+ if(istype(equipped))
+ return (locate(/obj/item/clothing/accessory/vitals_sensor) in equipped.accessories)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 51ddf615dfe..ae06234265a 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -3,11 +3,11 @@
return
for(var/obj/item/W in get_contained_external_atoms())
drop_from_inventory(W)
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
ADD_TRANSFORMATION_MOVEMENT_HANDLER(src)
set_status(STAT_STUN, 1)
icon = null
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
for(var/t in get_external_organs())
qdel(t)
var/atom/movable/overlay/animation = new /atom/movable/overlay(src)
@@ -56,7 +56,7 @@
drop_from_inventory(W)
ADD_TRANSFORMATION_MOVEMENT_HANDLER(src)
icon = null
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
return ..()
/mob/proc/AIize(move=1)
@@ -64,8 +64,8 @@
sound_to(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = sound_channels.lobby_channel))// stop the jams for AIs
- var/mob/living/silicon/ai/O = new (loc, global.using_map.default_law_type,,1)//No MMI but safety is in effect.
- O.set_invisibility(0)
+ var/mob/living/silicon/ai/O = new (loc, global.using_map.default_law_type,,1)//No brain but safety is in effect.
+ O.set_invisibility(INVISIBILITY_NONE)
O.aiRestorePowerRoutine = 0
if(mind)
mind.transfer_to(O)
@@ -109,17 +109,17 @@
QDEL_NULL_LIST(worn_underwear)
for(var/obj/item/W in src)
drop_from_inventory(W)
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
ADD_TRANSFORMATION_MOVEMENT_HANDLER(src)
icon = null
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
for(var/t in get_external_organs())
qdel(t)
var/mob/living/silicon/robot/O = new supplied_robot_type( loc )
O.set_gender(gender)
- O.set_invisibility(0)
+ O.set_invisibility(INVISIBILITY_NONE)
if(!mind)
mind_initialize()
@@ -128,10 +128,9 @@
mind.transfer_to(O)
if(O.mind && O.mind.assigned_role == ASSIGNMENT_ROBOT)
O.mind.original = O
- var/mmi_type = SSrobots.get_mmi_type_by_title(O.mind.role_alt_title ? O.mind.role_alt_title : O.mind.assigned_role)
+ var/mmi_type = SSrobots.get_brain_type_by_title(O.mind.role_alt_title ? O.mind.role_alt_title : O.mind.assigned_role)
if(mmi_type)
- O.mmi = new mmi_type(O)
- O.mmi.transfer_identity(src)
+ O.central_processor = new mmi_type(O)
O.dropInto(loc)
O.job = ASSIGNMENT_ROBOT
@@ -146,10 +145,10 @@
return
for(var/obj/item/W in src)
drop_from_inventory(W)
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
ADD_TRANSFORMATION_MOVEMENT_HANDLER(src)
icon = null
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
for(var/t in get_external_organs()) //this really should not be necessary
qdel(t)
@@ -175,10 +174,10 @@
for(var/obj/item/W in src)
drop_from_inventory(W)
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
ADD_TRANSFORMATION_MOVEMENT_HANDLER(src)
icon = null
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
for(var/t in get_external_organs())
qdel(t)
diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm
index 0eca2dc1a79..397086e49c0 100644
--- a/code/modules/mob/update_icons.dm
+++ b/code/modules/mob/update_icons.dm
@@ -1,11 +1,23 @@
-/mob/living/proc/refresh_visible_overlays()
+// TODO: look at all uses of this and refresh_visible_overlays(), probably should be using update_icon().
+/mob/living/proc/try_refresh_visible_overlays()
SHOULD_CALL_PARENT(TRUE)
if(HasMovementHandler(/datum/movement_handler/mob/transformation) || QDELETED(src))
return FALSE
+ refresh_visible_overlays()
+ apply_visible_overlays()
+ return TRUE
+
+/mob/living/proc/refresh_visible_overlays()
+ SHOULD_CALL_PARENT(TRUE)
for(var/slot in get_inventory_slots())
update_equipment_overlay(slot, FALSE)
return TRUE
+/mob/living/proc/apply_visible_overlays()
+ for(var/overlay in get_all_current_mob_overlays())
+ add_overlay(overlay)
+ underlays = get_all_current_mob_underlays()
+
/mob/proc/update_equipment_overlay(var/slot, var/redraw_mob = TRUE)
var/datum/inventory_slot/inv_slot = slot && get_inventory_slot_datum(slot)
if(inv_slot)
@@ -16,7 +28,7 @@
for(var/hand_slot in get_held_item_slots())
var/datum/inventory_slot/inv_slot = get_inventory_slot_datum(hand_slot)
var/obj/item/held = inv_slot?.get_equipped_item()
- var/image/standing = held?.get_mob_overlay(src, inv_slot.overlay_slot, hand_slot)
+ var/image/standing = held?.get_mob_overlay(src, inv_slot.overlay_slot, hand_slot, inv_slot.use_overlay_fallback_slot)
if(standing)
standing.appearance_flags |= (RESET_ALPHA|RESET_COLOR)
LAZYADD(hand_overlays, standing)
diff --git a/code/modules/mob_holder/_holder.dm b/code/modules/mob_holder/_holder.dm
index 10f64943f46..4b1a5843510 100644
--- a/code/modules/mob_holder/_holder.dm
+++ b/code/modules/mob_holder/_holder.dm
@@ -7,7 +7,7 @@
slot_flags = SLOT_HEAD | SLOT_HOLSTER
origin_tech = null
pixel_y = 8
- origin_tech = "{'biotech':1}"
+ origin_tech = @'{"biotech":1}'
use_single_icon = TRUE
item_state = null
is_spawnable_type = FALSE
@@ -25,7 +25,7 @@
add_vis_contents(src, AM)
// Grab our inhands from the mob we're wrapping, if they have any.
-/obj/item/holder/get_mob_overlay(mob/user_mob, slot, bodypart)
+/obj/item/holder/get_mob_overlay(mob/user_mob, slot, bodypart, use_fallback_if_icon_missing = TRUE)
var/mob/M = locate() in contents
if(istype(M))
icon = M.get_holder_icon()
@@ -99,10 +99,12 @@
return loc.loc
return ..()
-/obj/item/holder/GetIdCards()
+/obj/item/holder/GetIdCards(list/exceptions)
. = ..()
for(var/mob/M in contents)
- LAZYDISTINCTADD(., M.GetIdCards())
+ var/list/cards = M.GetIdCards(exceptions)
+ if(length(cards))
+ LAZYDISTINCTADD(., cards)
/obj/item/holder/attack_self()
for(var/mob/M in contents)
diff --git a/code/modules/mob_holder/holder_subtypes.dm b/code/modules/mob_holder/holder_subtypes.dm
index 14c3b3a9848..7276d2a41e6 100644
--- a/code/modules/mob_holder/holder_subtypes.dm
+++ b/code/modules/mob_holder/holder_subtypes.dm
@@ -1,10 +1,10 @@
//Mob specific holders.
/obj/item/holder/drone
- origin_tech = "{'magnets':3,'engineering':5}"
+ origin_tech = @'{"magnets":3,"engineering":5}'
/obj/item/holder/mouse
w_class = ITEM_SIZE_TINY
//need own subtype to work with recipes
/obj/item/holder/corgi
- origin_tech = "{'biotech':4}"
+ origin_tech = @'{"biotech":4}'
diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm
index 6d75136680f..ede7ce9165a 100644
--- a/code/modules/modular_computers/computers/modular_computer/core.dm
+++ b/code/modules/modular_computers/computers/modular_computer/core.dm
@@ -102,6 +102,8 @@
var/image/screen_overlay = os?.get_screen_overlay()
if(screen_overlay)
add_overlay(screen_overlay)
+ else if(dark_screen_state)
+ add_overlay(dark_screen_state)
var/image/keyboard_overlay = os?.get_keyboard_overlay()
if(keyboard_overlay)
add_overlay(keyboard_overlay)
@@ -132,11 +134,11 @@
if(user)
ui_interact(user)
-/obj/item/modular_computer/GetIdCards()
+/obj/item/modular_computer/GetIdCards(list/exceptions)
. = ..()
var/datum/extension/assembly/assembly = get_extension(src, /datum/extension/assembly)
var/obj/item/stock_parts/computer/card_slot/card_slot = assembly.get_component(PART_CARD)
- if(card_slot && card_slot.can_broadcast && istype(card_slot.stored_card) && card_slot.check_functionality())
+ if(card_slot && card_slot.can_broadcast && istype(card_slot.stored_card) && card_slot.check_functionality() && !is_type_in_list(card_slot.stored_card, exceptions))
LAZYDISTINCTADD(., card_slot.stored_card)
/obj/item/modular_computer/GetChargeStick()
diff --git a/code/modules/modular_computers/computers/modular_computer/interaction.dm b/code/modules/modular_computers/computers/modular_computer/interaction.dm
index 6b6559ce4f7..31df9783893 100644
--- a/code/modules/modular_computers/computers/modular_computer/interaction.dm
+++ b/code/modules/modular_computers/computers/modular_computer/interaction.dm
@@ -67,6 +67,11 @@
/obj/item/modular_computer/attack_hand(var/mob/user)
if(anchored)
return attack_self(user)
+ // if it's equipped and we're not holding it, open
+ // the interface instead of removing it from the slot.
+ var/equip_slot = user.get_equipped_slot_for_item(src)
+ if(equip_slot && !(equip_slot in user.get_held_item_slots()))
+ return attack_self(user)
return ..()
// On-click handling. Turns on the computer if it's off and opens the GUI.
@@ -109,9 +114,6 @@
to_chat(user, "\The [card_slot.stored_card] is inserted into it.")
assembly.examine(user)
-/obj/item/modular_computer/handle_mouse_drop(atom/over, mob/user)
- . = (!istype(over, /obj/screen) && attack_self(user)) || ..()
-
/obj/item/modular_computer/afterattack(atom/target, mob/user, proximity)
. = ..()
var/datum/extension/assembly/assembly = get_extension(src, /datum/extension/assembly)
diff --git a/code/modules/modular_computers/computers/modular_computer/variables.dm b/code/modules/modular_computers/computers/modular_computer/variables.dm
index f8c88612879..41f322a6441 100644
--- a/code/modules/modular_computers/computers/modular_computer/variables.dm
+++ b/code/modules/modular_computers/computers/modular_computer/variables.dm
@@ -6,9 +6,10 @@
icon_state = ICON_STATE_WORLD
center_of_mass = null
randpixel = 0
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/screen_icon
+ var/dark_screen_state
var/list/decals
var/computer_emagged = FALSE
var/ambience_last_played
diff --git a/code/modules/modular_computers/computers/subtypes/dev_pda.dm b/code/modules/modular_computers/computers/subtypes/dev_pda.dm
index 3c471b0a6d6..f52f0b56d3e 100644
--- a/code/modules/modular_computers/computers/subtypes/dev_pda.dm
+++ b/code/modules/modular_computers/computers/subtypes/dev_pda.dm
@@ -7,7 +7,7 @@
material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/glass = MATTER_AMOUNT_TRACE
)
w_class = ITEM_SIZE_SMALL
@@ -20,10 +20,10 @@
item_flags = ITEM_FLAG_NO_BLUDGEON
computer_type = /datum/extension/assembly/modular_computer/pda
color = COLOR_GRAY80
+ dark_screen_state = "blank_screen"
/obj/item/modular_computer/pda/on_update_icon()
. = ..()
- add_overlay(image(icon, "blank_screen"))
var/mob/living/carbon/human/H = loc
if(istype(H) && H.get_equipped_item(slot_wear_id_str) == src)
H.update_equipment_overlay(slot_wear_id_str)
diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm
index cc2126c7a47..ff514949f13 100644
--- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm
+++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm
@@ -56,7 +56,7 @@
anchored = TRUE
density = FALSE
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
- directional_offset = "{'NORTH':{'y':-20}, 'SOUTH':{'y':24}, 'EAST':{'x':-24}, 'WEST':{'x':24}}"
+ directional_offset = @'{"NORTH":{"y":-20}, "SOUTH":{"y":24}, "EAST":{"x":-24}, "WEST":{"x":24}}'
idle_power_usage = 75
active_power_usage = 300
max_hardware_size = 2 //make sure we can only put smaller components in here
diff --git a/code/modules/modular_computers/computers/subtypes/preset_console.dm b/code/modules/modular_computers/computers/subtypes/preset_console.dm
index 8c1787aca94..c726c3ac6a2 100644
--- a/code/modules/modular_computers/computers/subtypes/preset_console.dm
+++ b/code/modules/modular_computers/computers/subtypes/preset_console.dm
@@ -1,6 +1,9 @@
/obj/machinery/computer/modular/preset
var/list/default_software
var/datum/computer_file/program/autorun_program
+ /// Mounts the mainframe with the corresponding key as its ID to the root directory named after the value.
+ /// Ex. list("RECORDS_MAINFRAME" = "records")
+ var/automount_disks
base_type = /obj/machinery/computer/modular
/obj/machinery/computer/modular/preset/full
@@ -35,6 +38,12 @@
autorun.filename = "autorun"
autorun.stored_data = initial(autorun_program.filename)
HDD.store_file(autorun)
+ if(LAZYLEN(automount_disks))
+ var/datum/computer_file/data/automount = new()
+ automount.filename = "automount"
+ for(var/disk in automount_disks)
+ automount.stored_data += "[automount_disks[disk]]|[disk];"
+ HDD.store_file(automount)
/obj/machinery/computer/modular/preset/engineering
default_software = list(
@@ -62,6 +71,15 @@
)
autorun_program = /datum/computer_file/program/rcon_console
+/obj/machinery/computer/modular/preset/engineering/atmospherics
+ default_software = list(
+ /datum/computer_file/program/atmos_control,
+ /datum/computer_file/program/shutoff_valve,
+ /datum/computer_file/program/alarm_monitor,
+ /datum/computer_file/program/wordprocessor
+ )
+ autorun_program = /datum/computer_file/program/shutoff_valve
+
/obj/machinery/computer/modular/preset/medical
default_software = list(
/datum/computer_file/program/suit_sensors,
diff --git a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm b/code/modules/modular_computers/computers/subtypes/preset_laptop.dm
index d20c0d91ad6..ce3d31590e6 100644
--- a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm
+++ b/code/modules/modular_computers/computers/subtypes/preset_laptop.dm
@@ -57,4 +57,12 @@
default_programs = list(
/datum/computer_file/program/records,
/datum/computer_file/program/wordprocessor
- )
\ No newline at end of file
+ )
+
+/obj/item/modular_computer/laptop/preset/medical
+ default_programs = list(
+ /datum/computer_file/program/suit_sensors,
+ /datum/computer_file/program/camera_monitor,
+ /datum/computer_file/program/records,
+ /datum/computer_file/program/wordprocessor
+ )
diff --git a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm
index 40609a4a05d..23e4122b908 100644
--- a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm
+++ b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm
@@ -70,4 +70,20 @@
/datum/computer_file/program/camera_monitor,
/datum/computer_file/program/shields_monitor,
/datum/computer_file/program/supermatter_monitor
- )
\ No newline at end of file
+ )
+
+/obj/machinery/computer/modular/telescreen/preset/entertainment
+ default_software = list(
+ /datum/computer_file/program/camera_monitor
+ )
+ autorun_program = /datum/computer_file/program/camera_monitor
+
+/obj/machinery/computer/modular/telescreen/preset/security
+ default_software = list(
+ /datum/computer_file/program/digitalwarrant,
+ /datum/computer_file/program/camera_monitor,
+ /datum/computer_file/program/records,
+ /datum/computer_file/program/forceauthorization,
+ /datum/computer_file/program/wordprocessor
+ )
+ autorun_program = /datum/computer_file/program/camera_monitor
diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm
index 60bef2a87d9..34b99e38bbf 100644
--- a/code/modules/modular_computers/file_system/computer_file.dm
+++ b/code/modules/modular_computers/file_system/computer_file.dm
@@ -9,6 +9,7 @@ var/global/file_uid = 0
var/filetype = "XXX" // File full names are [filename].[filetype] so like NewFile.XXX in this case
var/size = 1 // File size in GQ. Integers only!
var/weakref/holder // Holder that contains this file. Refers to a obj/item/stock_parts/computer/hard_drive.
+ var/uncopyable = FALSE // Whether the file may be cloned or copied by a user.
var/unsendable = 0 // Whether the file may be sent to someone via file transfer or other means.
var/undeletable = 0 // Whether the file may be deleted. Setting to 1 prevents deletion/renaming/etc.
var/unrenamable = 0 // Whether the file may be renamed. Setting to 1 prevents renaming.
@@ -28,10 +29,17 @@ var/global/file_uid = 0
if(islist(md))
metadata = md.Copy()
-/datum/computer_file/Destroy()
+/datum/computer_file/proc/remove_from_holder()
+ // This just *begs* for making filesystems an extension
var/obj/item/stock_parts/computer/hard_drive/hard_drive = holder?.resolve()
- if(hard_drive)
+ if(istype(hard_drive))
hard_drive.remove_file(src, forced = TRUE)
+ var/obj/item/disk/data_disk = hard_drive
+ if(istype(data_disk))
+ data_disk.delete_file(filename, force = TRUE)
+
+/datum/computer_file/Destroy()
+ remove_from_holder()
. = ..()
/datum/computer_file/PopulateClone(datum/computer_file/clone)
diff --git a/code/modules/modular_computers/file_system/directory.dm b/code/modules/modular_computers/file_system/directory.dm
index efafd3b0365..af81828a81c 100644
--- a/code/modules/modular_computers/file_system/directory.dm
+++ b/code/modules/modular_computers/file_system/directory.dm
@@ -58,6 +58,7 @@
var/datum/computer_file/held_file = file_ref.resolve()
if(!held_file)
held_files -= file_ref
+ continue
if(istype(held_file, /datum/computer_file/directory))
var/datum/computer_file/directory/dir = held_file
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index f100942be46..cd952059a4c 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -259,7 +259,7 @@
if(!isnull(selected_CR) && CanUseTopic(user))
id_card.registered_name = selected_CR.get_name()
id_card.assignment = selected_CR.get_job()
- id_card.rank = selected_CR.get_rank()
+ id_card.position = selected_CR.get_rank()
id_card.dna_hash = selected_CR.get_dna()
id_card.fingerprint_hash = selected_CR.get_fingerprint()
id_card.card_gender = selected_CR.get_gender()
@@ -294,7 +294,7 @@
remove_nt_access(id_card)
apply_access(id_card, access)
id_card.assignment = t1
- id_card.rank = t1
+ id_card.position = t1
callHook("reassign_employee", list(id_card))
if("access")
diff --git a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm
index 0b3a1c7b880..7a5ed3fee7a 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm
@@ -91,7 +91,7 @@
for(var/obj/machinery/power/sensor/S in SSmachines.machinery)
if(get_z(S) in connected_z_levels) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels.
grid_sensors += S
- events_repository.register(/decl/observ/destroyed, S, src, /datum/nano_module/program/power_monitor/proc/remove_sensor)
+ events_repository.register(/decl/observ/destroyed, S, src, TYPE_PROC_REF(/datum/nano_module/program/power_monitor, remove_sensor))
/datum/nano_module/program/power_monitor/proc/remove_sensor(var/removed_sensor, var/update_ui = TRUE)
if(active_sensor == removed_sensor)
@@ -99,7 +99,7 @@
if(update_ui)
SSnano.update_uis(src)
grid_sensors -= removed_sensor
- events_repository.unregister(/decl/observ/destroyed, removed_sensor, src, /datum/nano_module/program/power_monitor/proc/remove_sensor)
+ events_repository.unregister(/decl/observ/destroyed, removed_sensor, src, TYPE_PROC_REF(/datum/nano_module/program/power_monitor, remove_sensor))
/datum/nano_module/program/power_monitor/proc/is_sysadmin(var/mob/user)
if(program)
diff --git a/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm
index a00df078996..6c7955d85e5 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm
@@ -105,7 +105,7 @@
var/obj/machinery/shield_generator/S = locate(href_list["ref"]) in shields
if(S)
deselect_shield()
- events_repository.register(/decl/observ/destroyed, S, src, /datum/nano_module/program/shields_monitor/proc/deselect_shield)
+ events_repository.register(/decl/observ/destroyed, S, src, TYPE_PROC_REF(/datum/nano_module/program/shields_monitor, deselect_shield))
active = S
return 1
diff --git a/code/modules/modular_computers/file_system/programs/generic/configurator.dm b/code/modules/modular_computers/file_system/programs/generic/configurator.dm
index 20d4b6da16a..b280adf55f2 100644
--- a/code/modules/modular_computers/file_system/programs/generic/configurator.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/configurator.dm
@@ -33,8 +33,9 @@
var/obj/item/stock_parts/computer/battery_module/battery_module = program.computer.get_component(PART_BATTERY)
data["battery_exists"] = !!battery_module
if(battery_module)
- data["battery_rating"] = battery_module.battery.maxcharge
- data["battery_percent"] = round(battery_module.battery.percent())
+ var/obj/item/cell/battery = battery_module.get_cell()
+ data["battery_rating"] = battery?.maxcharge || 0
+ data["battery_percent"] = battery ? round(battery.percent()) : 0
var/obj/item/stock_parts/computer/network_card/network_card = program.computer.get_component(PART_NETWORK)
data["nic_exists"] = !!network_card
diff --git a/code/modules/modular_computers/file_system/programs/generic/file_manager.dm b/code/modules/modular_computers/file_system/programs/generic/file_manager.dm
index 5e856d79b31..be3f39c066c 100644
--- a/code/modules/modular_computers/file_system/programs/generic/file_manager.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/file_manager.dm
@@ -96,6 +96,7 @@
var/list/available_mainframes = network.get_file_server_tags(MF_ROLE_FILESERVER, accesses)
if(!length(available_mainframes))
to_chat(user, SPAN_WARNING("NETWORK ERROR: No available mainframes on the network."))
+ return TOPIC_HANDLED
var/fileserver_tag = input(user, "Choose a mainframe you would like to mount as a disk:", "Mainframe Mount") as null|anything in available_mainframes
if(!fileserver_tag)
return TOPIC_HANDLED
@@ -332,7 +333,7 @@
if(F.get_file_perms(accesses, user) & OS_WRITE_ACCESS)
var/newname = sanitize_for_file(input(user, "Enter new file name:", "File rename", F.filename))
if(F && length(newname))
- F.filename = newname
+ current_disk.rename_file(F, newname, user)
return TOPIC_REFRESH
else
to_chat(user, SPAN_WARNING("You do not have permission to rename that file."))
@@ -390,7 +391,9 @@
to_chat(user, SPAN_WARNING("I/O ERROR: Unable to transfer file."))
return
- var/copying = alert(usr, "Would you like to copy the file or transfer it? Transfering files requires write access.", "Copying file", "Copy", "Transfer")
+ var/copying = "Transfer"
+ if(!F.uncopyable)
+ copying = alert(usr, "Would you like to copy the file or transfer it? Transfering files requires write access.", "Copying file", "Copy", "Transfer")
var/list/choices = list()
var/list/curr_fs_list = disks[current_index]
for(var/list/fs_list in disks)
@@ -758,7 +761,7 @@
ui_header = null
/datum/computer_file/program/filemanager/on_file_storage_removal(datum/file_storage/removed)
- var/list/current_disk_list = current_index != null ? disks[current_index] : null
+ var/list/current_disk_list = LAZYACCESS(disks, current_index)
for(var/list/disk_list in disks)
var/datum/file_storage/disk = disk_list[1]
if(disk == removed)
diff --git a/code/modules/modular_computers/file_system/programs/generic/folding.dm b/code/modules/modular_computers/file_system/programs/generic/folding.dm
index fefec96a86a..30c5c9ffcd0 100644
--- a/code/modules/modular_computers/file_system/programs/generic/folding.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/folding.dm
@@ -65,20 +65,21 @@
if(world.timeofday < next_event) //Checks if it's time for the next crash chance.
return
var/mob/living/holder = computer.holder.get_recursive_loc_of_type(/mob/living/carbon/human)
+ var/host = computer.get_physical_host()
if(program_status > PROGRAM_STATUS_CRASHED)
if(PROGRAM_STATUS_RUNNING_SCALDING >= program_status)
switch(rand(PROGRAM_STATUS_RUNNING,program_status))
if(PROGRAM_STATUS_RUNNING) //Guaranteed 1 tick without crashing.
- to_chat(holder, SPAN_WARNING("The [computer] starts to get very warm."))
+ to_chat(holder, SPAN_WARNING("\The [host] starts to get very warm."))
if (program_status == PROGRAM_STATUS_RUNNING)
program_status = PROGRAM_STATUS_RUNNING_WARM
if(PROGRAM_STATUS_RUNNING_WARM) //50% chance on subsequent ticks to make the program able to crash.
- to_chat(holder, SPAN_WARNING("The [computer] gets scaldingly hot, burning you!"))
+ to_chat(holder, SPAN_WARNING("\The [host] gets scaldingly hot, burning you!"))
holder?.take_overall_damage(0, 0.45) //It checks holder? so that it doesn't cause a runtime error if no one is holding it.
if (program_status == PROGRAM_STATUS_RUNNING_WARM)
program_status = PROGRAM_STATUS_RUNNING_SCALDING
if(PROGRAM_STATUS_RUNNING_SCALDING) //1/3 chance on all following ticks for the program to crash.
- to_chat(holder, SPAN_WARNING("The [computer] pings an error chime."))
+ to_chat(holder, SPAN_WARNING("\The [host] pings an error chime."))
program_status = PROGRAM_STATUS_CRASHED
crashed_at = world.timeofday
else
diff --git a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm
index 5c886e87632..525f363d285 100644
--- a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm
@@ -43,6 +43,8 @@
if(!check_file_download(filename))
return 0
var/datum/computer_file/program/PRG = net.find_file_by_name(filename, OS_PROGRAMS_DIR, MF_ROLE_SOFTWARE)
+ if(!istype(PRG))
+ return 0
var/datum/file_storage/disk/destination = computer.mounted_storage["local"]
if(!destination)
return 0
diff --git a/code/modules/modular_computers/file_system/programs/generic/supply.dm b/code/modules/modular_computers/file_system/programs/generic/supply.dm
index c5e067fdbe1..8122ababeaf 100644
--- a/code/modules/modular_computers/file_system/programs/generic/supply.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/supply.dm
@@ -398,7 +398,7 @@
t += "[global.using_map.station_name] Supply Requisition Reciept
"
t += "INDEX: #[O.ordernum]
"
t += "REQUESTED BY: [O.orderedby]
"
- t += "RANK: [O.orderedrank]
"
+ t += "ASSIGNMENT: [O.orderedrank]
"
t += "REASON: [O.reason]
"
t += "SUPPLY CRATE TYPE: [O.object.name]
"
t += "ACCESS RESTRICTION: [get_access_desc(O.object.access)]
"
diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
index 8e0824efa13..d5586fc52de 100644
--- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
+++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
@@ -49,7 +49,7 @@
if(isAI(usr))
var/mob/living/silicon/ai/AI = usr
var/mob/living/carbon/human/H = locate(href_list["track"]) in SSmobs.mob_list
- if(hassensorlevel(H, SUIT_SENSOR_TRACKING))
+ if(hassensorlevel(H, VITALS_SENSOR_TRACKING))
AI.ai_actual_track(H)
return 1
diff --git a/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm b/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm
index a304cca0318..0f99a187cc3 100644
--- a/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm
+++ b/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm
@@ -29,7 +29,7 @@
if(!A)
return 0
if(href_list["PRG_beginReconstruction"])
- if((A.hardware_integrity() < 100) || (A.backup_capacitor() < 100))
+ if((A.get_health_percent() < 100) || (A.backup_capacitor() < 100))
restoring = 1
return 1
@@ -66,12 +66,12 @@
if(!A || !restoring)
restoring = 0 // If the AI was removed, stop the restoration sequence.
return
- A.adjustFireLoss(-4)
- A.adjustBruteLoss(-4)
+ A.adjustFireLoss(-4, do_update_health = FALSE)
+ A.adjustBruteLoss(-4, do_update_health = FALSE)
A.adjustOxyLoss(-4)
- A.updatehealth()
+ A.update_health()
// If the AI is dead, revive it.
- if (A.health >= -100 && A.stat == DEAD)
+ if (A.stat == DEAD && !A.should_be_dead())
A.set_stat(CONSCIOUS)
A.lying = 0
A.switch_from_dead_to_living_mob_list()
@@ -81,7 +81,7 @@
if(AC)
AC.update_icon()
// Finished restoring
- if((A.hardware_integrity() == 100) && (A.backup_capacitor() == 100))
+ if((A.get_health_percent() == 100) && (A.backup_capacitor() == 100))
restoring = 0
/datum/nano_module/program/computer_aidiag
@@ -106,9 +106,9 @@
data["error"] = "No AI located"
else
data["ai_name"] = A.name
- data["ai_integrity"] = A.hardware_integrity()
+ data["ai_integrity"] = A.get_health_percent()
data["ai_capacitor"] = A.backup_capacitor()
- data["ai_isdamaged"] = (A.hardware_integrity() < 100) || (A.backup_capacitor() < 100)
+ data["ai_isdamaged"] = (A.get_health_percent() < 100) || (A.backup_capacitor() < 100)
data["ai_isdead"] = (A.stat == DEAD)
var/list/all_laws[0]
diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm
index c830be8b70e..de61e09ddfd 100644
--- a/code/modules/modular_computers/hardware/_hardware.dm
+++ b/code/modules/modular_computers/hardware/_hardware.dm
@@ -29,7 +29,7 @@
// Called on multitool click, prints diagnostic information to the user.
/obj/item/stock_parts/computer/proc/diagnostics()
- return list("Hardware Integrity Test... (Corruption: [get_percent_damage()]%)")
+ return list("Hardware Integrity Test... (Corruption: [get_percent_damages()]%)")
/obj/item/stock_parts/computer/Initialize()
. = ..()
diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm
index 853e088850f..8fb4f56a57a 100644
--- a/code/modules/modular_computers/hardware/ai_slot.dm
+++ b/code/modules/modular_computers/hardware/ai_slot.dm
@@ -6,7 +6,7 @@
hardware_size = 1
critical = 0
power_usage = 100
- origin_tech = "{'powerstorage':2,'programming':3}"
+ origin_tech = @'{"powerstorage":2,"programming":3}'
external_slot = TRUE
material = /decl/material/solid/metal/steel
diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm
index ed288844a9a..f877a086114 100644
--- a/code/modules/modular_computers/hardware/battery_module.dm
+++ b/code/modules/modular_computers/hardware/battery_module.dm
@@ -5,17 +5,39 @@
desc = "A standard power cell, commonly seen in high-end portable microcomputers or low-end laptops. It's rating is 75 Wh."
icon_state = "battery_normal"
critical = 1
- origin_tech = "{'powerstorage':1,'engineering':1}"
+ origin_tech = @'{"powerstorage":1,"engineering":1}'
material = /decl/material/solid/metal/steel
-
var/battery_rating = 75
- var/obj/item/cell/battery = /obj/item/cell
+
+/obj/item/stock_parts/computer/battery_module/Initialize()
+ . = ..()
+ setup_power_supply()
+ charge_to_full()
+
+/obj/item/stock_parts/computer/battery_module/diagnostics()
+ . = ..()
+ var/obj/item/cell/battery = get_cell()
+ if(battery)
+ . += "Internal battery charge: [battery.charge]/[battery.maxcharge] CU"
+
+/obj/item/stock_parts/computer/battery_module/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ loaded_cell_type = loaded_cell_type || /obj/item/cell
+ . = ..(loaded_cell_type, /obj/item/cell, /datum/extension/loaded_cell/unremovable, charge_value)
+ var/obj/item/cell/battery = get_cell()
+ if(battery)
+ battery.maxcharge = battery_rating
+ battery.charge = 0
+
+/obj/item/stock_parts/computer/battery_module/proc/charge_to_full()
+ var/obj/item/cell/battery = get_cell()
+ if(battery)
+ battery.charge = battery.maxcharge
/obj/item/stock_parts/computer/battery_module/advanced
name = "advanced battery"
desc = "An advanced power cell, often used in most laptops. It is too large to be fitted into smaller devices. It's rating is 110 Wh."
icon_state = "battery_advanced"
- origin_tech = "{'powerstorage':2,'engineering':2}"
+ origin_tech = @'{"powerstorage":2,"engineering":2}'
hardware_size = 2
battery_rating = 110
material = /decl/material/solid/metal/steel
@@ -24,7 +46,7 @@
name = "super battery"
desc = "A very advanced power cell, often used in high-end devices, or as uninterruptable power supply for important consoles or servers. It's rating is 150 Wh."
icon_state = "battery_super"
- origin_tech = "{'powerstorage':3,'engineering':3}"
+ origin_tech = @'{"powerstorage":3,"engineering":3}'
hardware_size = 2
battery_rating = 150
material = /decl/material/solid/metal/steel
@@ -33,7 +55,7 @@
name = "ultra battery"
desc = "A very advanced large power cell. It's often used as uninterruptable power supply for critical consoles or servers. It's rating is 200 Wh."
icon_state = "battery_ultra"
- origin_tech = "{'powerstorage':5,'engineering':4}"
+ origin_tech = @'{"powerstorage":5,"engineering":4}'
hardware_size = 3
battery_rating = 200
material = /decl/material/solid/metal/steel
@@ -42,7 +64,7 @@
name = "micro battery"
desc = "A small power cell, commonly seen in most portable microcomputers. It's rating is 50 Wh."
icon_state = "battery_micro"
- origin_tech = "{'powerstorage':2,'engineering':2}"
+ origin_tech = @'{"powerstorage":2,"engineering":2}'
battery_rating = 50
material = /decl/material/solid/metal/steel
@@ -50,10 +72,10 @@
name = "nano battery"
desc = "A tiny power cell, commonly seen in low-end portable microcomputers. It's rating is 30 Wh."
icon_state = "battery_nano"
- origin_tech = "{'powerstorage':1,'engineering':1}"
+ origin_tech = @'{"powerstorage":1,"engineering":1}'
battery_rating = 30
material = /decl/material/solid/metal/steel
- origin_tech = "{'powerstorage':2,'engineering':1}"
+ origin_tech = @'{"powerstorage":2,"engineering":1}'
// This is not intended to be obtainable in-game. Intended for adminbus and debugging purposes.
/obj/item/stock_parts/computer/battery_module/lambda
@@ -62,26 +84,6 @@
icon_state = "battery_lambda"
hardware_size = 1
battery_rating = 3000
- battery = /obj/item/cell/infinite
-
-/obj/item/stock_parts/computer/battery_module/diagnostics()
- . = ..()
- . += "Internal battery charge: [battery.charge]/[battery.maxcharge] CU"
-
-/obj/item/stock_parts/computer/battery_module/Initialize()
- . = ..()
- battery = new battery(src)
- battery.maxcharge = battery_rating
- battery.charge = 0
- charge_to_full()
-
-/obj/item/stock_parts/computer/battery_module/Destroy()
- QDEL_NULL(battery)
- return ..()
-
-/obj/item/stock_parts/computer/battery_module/proc/charge_to_full()
- if(battery)
- battery.charge = battery.maxcharge
-/obj/item/stock_parts/computer/battery_module/get_cell()
- return battery
+/obj/item/stock_parts/computer/battery_module/lambda/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/infinite, accepted_cell_type, power_supply_extension_type, charge_value)
diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm
index 0726128b08c..cb62d1049e9 100644
--- a/code/modules/modular_computers/hardware/card_slot.dm
+++ b/code/modules/modular_computers/hardware/card_slot.dm
@@ -5,7 +5,7 @@
critical = 0
icon_state = "cardreader"
hardware_size = 1
- origin_tech = "{'programming':2}"
+ origin_tech = @'{"programming":2}'
usage_flags = PROGRAM_ALL & ~PROGRAM_PDA
external_slot = TRUE
material = /decl/material/solid/metal/steel
@@ -29,7 +29,7 @@
read_string_stability = 80
. += "Registered Name: [stars(stored_card.registered_name, read_string_stability)]\n"
. += "Registered Assignment: [stars(stored_card.assignment, read_string_stability)]\n"
- . += "Registered Rank: [stars(stored_card.rank, read_string_stability)]\n"
+ . += "Registered Position: [stars(stored_card.position, read_string_stability)]\n"
. += "Access Addresses Enabled: \n"
var/list/access_list = stored_card.GetAccess()
if(!access_list) // "NONE" for empty list
diff --git a/code/modules/modular_computers/hardware/charge_stick_slot.dm b/code/modules/modular_computers/hardware/charge_stick_slot.dm
index 82c75557765..d2f7b010d7c 100644
--- a/code/modules/modular_computers/hardware/charge_stick_slot.dm
+++ b/code/modules/modular_computers/hardware/charge_stick_slot.dm
@@ -5,7 +5,7 @@
critical = 0
icon_state = "cardreader"
hardware_size = 1
- origin_tech = "{'programming':2}"
+ origin_tech = @'{"programming":2}'
usage_flags = PROGRAM_ALL & ~PROGRAM_PDA
external_slot = TRUE
material = /decl/material/solid/metal/steel
diff --git a/code/modules/modular_computers/hardware/disk_slot.dm b/code/modules/modular_computers/hardware/disk_slot.dm
index 36818d4e0ce..3bf653e67b4 100644
--- a/code/modules/modular_computers/hardware/disk_slot.dm
+++ b/code/modules/modular_computers/hardware/disk_slot.dm
@@ -5,7 +5,7 @@
critical = 0
icon_state = "cardreader"
hardware_size = 1
- origin_tech = "{'programming':2}"
+ origin_tech = @'{"programming":2}'
usage_flags = PROGRAM_ALL
external_slot = TRUE
material = /decl/material/solid/metal/steel
diff --git a/code/modules/modular_computers/hardware/drive_slot.dm b/code/modules/modular_computers/hardware/drive_slot.dm
index 0e364c9e61a..dacade6012b 100644
--- a/code/modules/modular_computers/hardware/drive_slot.dm
+++ b/code/modules/modular_computers/hardware/drive_slot.dm
@@ -5,7 +5,7 @@
critical = 0
icon_state = "cardreader"
hardware_size = 1
- origin_tech = "{'programming':2}"
+ origin_tech = @'{"programming":2}'
usage_flags = PROGRAM_ALL
external_slot = TRUE
material = /decl/material/solid/metal/steel
diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm
index fca04084acd..d800a7b4c31 100644
--- a/code/modules/modular_computers/hardware/hard_drive.dm
+++ b/code/modules/modular_computers/hardware/hard_drive.dm
@@ -4,7 +4,7 @@
power_usage = 25 // SSD or something with low power usage
icon_state = "hdd_normal"
hardware_size = 1
- origin_tech = "{'programming':1,'engineering':1}"
+ origin_tech = @'{"programming":1,"engineering":1}'
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
var/max_capacity = 128
@@ -15,7 +15,7 @@
name = "advanced hard drive"
desc = "A small hybrid hard drive with 256GQ of storage capacity for use in higher grade computers where balance between power efficiency and capacity is desired."
max_capacity = 256
- origin_tech = "{'programming':2,'engineering':2}"
+ origin_tech = @'{"programming":2,"engineering":2}'
power_usage = 50 // Hybrid, medium capacity and medium power storage
icon_state = "hdd_advanced"
hardware_size = 2
@@ -26,7 +26,7 @@
name = "super hard drive"
desc = "A small hard drive with 512GQ of storage capacity for use in cluster storage solutions where capacity is more important than power efficiency."
max_capacity = 512
- origin_tech = "{'programming':3,'engineering':3}"
+ origin_tech = @'{"programming":3,"engineering":3}'
power_usage = 100 // High-capacity but uses lots of power, shortening battery life. Best used with APC link.
icon_state = "hdd_super"
hardware_size = 2
@@ -37,7 +37,7 @@
name = "cluster hard drive"
desc = "A large storage cluster consisting of multiple hard drives for usage in high capacity storage systems. Has capacity of 2048 GQ."
power_usage = 500
- origin_tech = "{'programming':4,'engineering':4}"
+ origin_tech = @'{"programming":4,"engineering":4}'
max_capacity = 2048
icon_state = "hdd_cluster"
hardware_size = 3
@@ -49,7 +49,7 @@
name = "small hard drive"
desc = "A small highly efficient solid state drive for portable devices."
power_usage = 10
- origin_tech = "{'programming':2,'engineering':2}"
+ origin_tech = @'{"programming":2,"engineering":2}'
max_capacity = 64
icon_state = "hdd_small"
hardware_size = 1
@@ -60,7 +60,7 @@
name = "micro hard drive"
desc = "A small micro hard drive for portable devices."
power_usage = 2
- origin_tech = "{'programming':1,'engineering':1}"
+ origin_tech = @'{"programming":1,"engineering":1}'
max_capacity = 32
icon_state = "hdd_micro"
hardware_size = 1
diff --git a/code/modules/modular_computers/hardware/lan_port.dm b/code/modules/modular_computers/hardware/lan_port.dm
index a50d49a0c08..09e516f290b 100644
--- a/code/modules/modular_computers/hardware/lan_port.dm
+++ b/code/modules/modular_computers/hardware/lan_port.dm
@@ -2,7 +2,7 @@
name = "wired connection port"
desc = "A basic expansion port for use with wired connections."
power_usage = 30
- origin_tech = "{'programming':1,'engineering':1}"
+ origin_tech = @'{"programming":1,"engineering":1}'
icon_state = "netcard_ethernet"
hardware_size = 3
material = /decl/material/solid/glass
@@ -29,13 +29,13 @@
if(!istype(parent))
return
terminal = new(get_turf(parent))
- set_extension(src, /datum/extension/event_registration/shuttle_stationary, GET_DECL(/decl/observ/moved), parent, .proc/check_terminal_prox, get_area(src))
- events_repository.register(/decl/observ/destroyed, terminal, src, .proc/unset_terminal)
+ set_extension(src, /datum/extension/event_registration/shuttle_stationary, GET_DECL(/decl/observ/moved), parent, PROC_REF(check_terminal_prox), get_area(src))
+ events_repository.register(/decl/observ/destroyed, terminal, src, PROC_REF(unset_terminal))
set_status(parent, PART_STAT_CONNECTED)
/obj/item/stock_parts/computer/lan_port/proc/unset_terminal()
remove_extension(src, /datum/extension/event_registration/shuttle_stationary)
- events_repository.unregister(/decl/observ/destroyed, terminal, src, .proc/unset_terminal)
+ events_repository.unregister(/decl/observ/destroyed, terminal, src, PROC_REF(unset_terminal))
var/obj/machinery/parent = loc
if(istype(parent))
unset_status(parent, PART_STAT_CONNECTED)
diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm
index dd3a4684212..e264fa428b5 100644
--- a/code/modules/modular_computers/hardware/nano_printer.dm
+++ b/code/modules/modular_computers/hardware/nano_printer.dm
@@ -2,7 +2,7 @@
name = "nano printer"
desc = "Small integrated printer with paper recycling module."
power_usage = 50
- origin_tech = "{'programming':2,'engineering':2}"
+ origin_tech = @'{"programming":2,"engineering":2}'
critical = 0
icon_state = "printer"
hardware_size = 1
diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm
index a2014e4b061..562ea9a221a 100644
--- a/code/modules/modular_computers/hardware/network_card.dm
+++ b/code/modules/modular_computers/hardware/network_card.dm
@@ -2,7 +2,7 @@
name = "basic network card"
desc = "A basic network card for usage with standard network protocols."
power_usage = 50
- origin_tech = "{'programming':2,'engineering':1}"
+ origin_tech = @'{"programming":2,"engineering":1}'
critical = 0
icon_state = "netcard_basic"
hardware_size = 1
@@ -33,7 +33,7 @@
name = "advanced network card"
desc = "An advanced network card for usage with standard network protocols. It's transmitter is strong enough to connect even when far away."
long_range = 1
- origin_tech = "{'programming':4,'engineering':2}"
+ origin_tech = @'{"programming":4,"engineering":2}'
power_usage = 100 // Better range but higher power usage.
icon_state = "netcard_advanced"
hardware_size = 1
diff --git a/code/modules/modular_computers/hardware/portable_hard_drive.dm b/code/modules/modular_computers/hardware/portable_hard_drive.dm
index f854beb0cfd..921f22a0f57 100644
--- a/code/modules/modular_computers/hardware/portable_hard_drive.dm
+++ b/code/modules/modular_computers/hardware/portable_hard_drive.dm
@@ -6,7 +6,7 @@
icon_state = "flashdrive_basic"
hardware_size = 1
max_capacity = 16
- origin_tech = "{'programming':1}"
+ origin_tech = @'{"programming":1}'
material = /decl/material/solid/fiberglass
/obj/item/stock_parts/computer/hard_drive/portable/advanced
@@ -16,7 +16,7 @@
icon_state = "flashdrive_advanced"
hardware_size = 1
max_capacity = 64
- origin_tech = "{'programming':2}"
+ origin_tech = @'{"programming":2}'
/obj/item/stock_parts/computer/hard_drive/portable/super
name = "super data crystal"
@@ -25,7 +25,7 @@
icon_state = "flashdrive_super"
hardware_size = 1
max_capacity = 256
- origin_tech = "{'programming':4}"
+ origin_tech = @'{"programming":4}'
/obj/item/stock_parts/computer/hard_drive/portable/Initialize()
. = ..()
@@ -63,4 +63,3 @@
readme.stored_data = jointext(readme_data, "\[br\]")
readme.filename = "___README___"
store_file(readme)
-
\ No newline at end of file
diff --git a/code/modules/modular_computers/hardware/processor_unit.dm b/code/modules/modular_computers/hardware/processor_unit.dm
index e1c75121a7c..95cf5d8525d 100644
--- a/code/modules/modular_computers/hardware/processor_unit.dm
+++ b/code/modules/modular_computers/hardware/processor_unit.dm
@@ -8,7 +8,7 @@
hardware_size = 2
power_usage = 100
critical = 1
- origin_tech = "{'programming':3,'engineering':2}"
+ origin_tech = @'{"programming":3,"engineering":2}'
material = /decl/material/solid/metal/steel
var/processing_power = 2 // Used for DDoS speed calculations
@@ -20,7 +20,7 @@
hardware_size = 1
power_usage = 25
processing_power = 1
- origin_tech = "{'programming':2,'engineering':2}"
+ origin_tech = @'{"programming":2,"engineering":2}'
material = /decl/material/solid/metal/steel
/obj/item/stock_parts/computer/processor_unit/photonic
@@ -30,7 +30,7 @@
hardware_size = 2
power_usage = 50
processing_power = 4
- origin_tech = "{'programming':5,'engineering':4}"
+ origin_tech = @'{"programming":5,"engineering":4}'
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
@@ -41,6 +41,6 @@
hardware_size = 1
power_usage = 10
processing_power = 2
- origin_tech = "{'programming':4,'engineering':3}"
+ origin_tech = @'{"programming":4,"engineering":3}'
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
diff --git a/code/modules/modular_computers/hardware/scanners/scanner.dm b/code/modules/modular_computers/hardware/scanners/scanner.dm
index cdb1222ab75..b84dc782e6d 100644
--- a/code/modules/modular_computers/hardware/scanners/scanner.dm
+++ b/code/modules/modular_computers/hardware/scanners/scanner.dm
@@ -7,7 +7,7 @@
icon_state = "printer"
hardware_size = 1
critical = 0
- origin_tech = "{'programming':2,'engineering':2}"
+ origin_tech = @'{"programming":2,"engineering":2}'
var/datum/computer_file/program/scanner/driver_type = /datum/computer_file/program/scanner // A program type that the scanner interfaces with and attempts to install on insertion.
var/datum/computer_file/program/scanner/driver // A driver program which has been set up to interface with the scanner.
diff --git a/code/modules/modular_computers/hardware/tesla_link.dm b/code/modules/modular_computers/hardware/tesla_link.dm
index c80c643abed..6e59fcdb5f9 100644
--- a/code/modules/modular_computers/hardware/tesla_link.dm
+++ b/code/modules/modular_computers/hardware/tesla_link.dm
@@ -5,7 +5,7 @@
enabled = 1
icon_state = "teslalink"
hardware_size = 1
- origin_tech = "{'programming':2,'powerstorage':3,'engineering':2}"
+ origin_tech = @'{"programming":2,"powerstorage":3,"engineering":2}'
material = /decl/material/solid/metal/steel
var/passive_charging_rate = 250 // W
diff --git a/code/modules/modular_computers/networking/device_types/mainframe.dm b/code/modules/modular_computers/networking/device_types/mainframe.dm
index 63e58195afe..97387b2a406 100644
--- a/code/modules/modular_computers/networking/device_types/mainframe.dm
+++ b/code/modules/modular_computers/networking/device_types/mainframe.dm
@@ -104,20 +104,6 @@ var/global/list/all_mainframe_roles = list(
return 0
return HDD.used_capacity
-// Disk that spawns with everything old system had
-/obj/item/stock_parts/computer/hard_drive/cluster/fullhouse/Initialize()
- . = ..()
-
- for(var/F in subtypesof(/datum/computer_file/report))
- var/datum/computer_file/report/type = F
- if(TYPE_IS_ABSTRACT(type))
- continue
- if(initial(type.available_on_network))
- store_file(new type, "reports", TRUE)
-
- for(var/F in subtypesof(/datum/computer_file/program))
- var/datum/computer_file/program/type = F
- if(TYPE_IS_ABSTRACT(type))
- continue
- if(initial(type.available_on_network))
- store_file(new type, OS_PROGRAMS_DIR, TRUE)
\ No newline at end of file
+// starts with no files, useful for things like mainframes
+/obj/item/stock_parts/computer/hard_drive/cluster/empty/install_default_programs()
+ return
\ No newline at end of file
diff --git a/code/modules/modular_computers/networking/machinery/mainframe.dm b/code/modules/modular_computers/networking/machinery/mainframe.dm
index ef57b295d0c..b9f8b6cf1cd 100644
--- a/code/modules/modular_computers/networking/machinery/mainframe.dm
+++ b/code/modules/modular_computers/networking/machinery/mainframe.dm
@@ -68,3 +68,20 @@
/obj/machinery/network/mainframe/software
initial_roles = list(MF_ROLE_SOFTWARE)
+
+/obj/machinery/network/mainframe/software/Initialize()
+ . = ..()
+ var/obj/item/stock_parts/computer/hard_drive/drive = get_component_of_type(PART_HDD)
+ for(var/F in subtypesof(/datum/computer_file/report))
+ var/datum/computer_file/report/type = F
+ if(TYPE_IS_ABSTRACT(type))
+ continue
+ if(initial(type.available_on_network))
+ drive.store_file(new type, "reports", TRUE)
+
+ for(var/F in subtypesof(/datum/computer_file/program))
+ var/datum/computer_file/program/type = F
+ if(TYPE_IS_ABSTRACT(type))
+ continue
+ if(initial(type.available_on_network))
+ drive.store_file(new type, OS_PROGRAMS_DIR, TRUE)
\ No newline at end of file
diff --git a/code/modules/modular_computers/networking/machinery/wall_relay.dm b/code/modules/modular_computers/networking/machinery/wall_relay.dm
index 9911c3bc20a..dbf5102bf60 100644
--- a/code/modules/modular_computers/networking/machinery/wall_relay.dm
+++ b/code/modules/modular_computers/networking/machinery/wall_relay.dm
@@ -7,7 +7,7 @@
density = FALSE
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
base_type = /obj/machinery/network/relay/wall_mounted
- directional_offset = "{'NORTH':{'y':-21}, 'SOUTH':{'y':21}, 'EAST':{'x':-21}, 'WEST':{'x':21}}"
+ directional_offset = @'{"NORTH":{"y":-21}, "SOUTH":{"y":21}, "EAST":{"x":-21}, "WEST":{"x":21}}'
/obj/machinery/network/relay/wall_mounted/Initialize()
. = ..()
diff --git a/code/modules/modular_computers/networking/machinery/wall_router.dm b/code/modules/modular_computers/networking/machinery/wall_router.dm
index 27c46d4d771..5c408af98d9 100644
--- a/code/modules/modular_computers/networking/machinery/wall_router.dm
+++ b/code/modules/modular_computers/networking/machinery/wall_router.dm
@@ -7,7 +7,7 @@
density = FALSE
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
base_type = /obj/machinery/network/router/wall_mounted
- directional_offset = "{'NORTH':{'y':-21}, 'SOUTH':{'y':21}, 'EAST':{'x':-21}, 'WEST':{'x':21}}"
+ directional_offset = @'{"NORTH":{"y":-21}, "SOUTH":{"y":21}, "EAST":{"x":-21}, "WEST":{"x":21}}'
/obj/machinery/network/router/wall_mounted/Initialize()
. = ..()
diff --git a/code/modules/modular_computers/networking/network_cable.dm b/code/modules/modular_computers/networking/network_cable.dm
index 2d4b56805b6..480df91b375 100644
--- a/code/modules/modular_computers/networking/network_cable.dm
+++ b/code/modules/modular_computers/networking/network_cable.dm
@@ -5,7 +5,7 @@
icon_state = "dot"
layer = WIRE_LAYER
anchored = TRUE
- level = 1
+ level = LEVEL_BELOW_PLATING
var/datum/node/physical/network_node
/obj/structure/network_cable/Initialize(ml, _mat, _reinf_mat)
@@ -163,8 +163,9 @@
throw_range = 5
material = /decl/material/solid/glass
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT
)
+ matter_multiplier = 0.15
item_state = "coil"
/obj/item/stack/net_cable_coil/single
diff --git a/code/modules/modular_computers/networking/network_files.dm b/code/modules/modular_computers/networking/network_files.dm
index 66d6e21fc12..34229d711e2 100644
--- a/code/modules/modular_computers/networking/network_files.dm
+++ b/code/modules/modular_computers/networking/network_files.dm
@@ -1,9 +1,11 @@
/datum/computer_network/proc/find_file_by_name(filename, directory, mainframe_role = MF_ROLE_FILESERVER, list/accesses)
for(var/datum/extension/network_device/mainframe/M in get_mainframes_by_role(mainframe_role, accesses))
var/datum/computer_file/F = M.get_file(filename, directory)
- if(F)
+ if(istype(F))
return F
+ return OS_FILE_NOT_FOUND
+
/datum/computer_network/proc/get_all_files_of_type(file_type, mainframe_role = MF_ROLE_FILESERVER, uniques_only = FALSE, list/accesses)
. = list()
var/list/found_filenames = list()
diff --git a/code/modules/modular_computers/os/files.dm b/code/modules/modular_computers/os/files.dm
index 6e14deb9102..4ad6ed46fa6 100644
--- a/code/modules/modular_computers/os/files.dm
+++ b/code/modules/modular_computers/os/files.dm
@@ -258,6 +258,10 @@
/datum/file_storage/proc/delete_file(datum/computer_file/F, list/accesses, mob/user)
+/datum/file_storage/proc/rename_file(datum/computer_file/F, newname, mob/user)
+ F.filename = newname
+ return OS_FILE_SUCCESS
+
/datum/file_storage/proc/create_file(filename, directory, data, file_type = /datum/computer_file/data, list/metadata, list/accesses, mob/user)
if(check_errors())
return OS_HARDDRIVE_ERROR
@@ -283,7 +287,7 @@
var/datum/computer_file/F = get_file(filename, directory)
if(!istype(F))
return F
- if(!(F.get_file_perms(accesses, user) & OS_READ_ACCESS))
+ if(!(F.get_file_perms(accesses, user) & OS_READ_ACCESS) || F.uncopyable)
return OS_FILE_NO_READ
var/datum/computer_file/cloned_file = F.Clone(TRUE)
@@ -601,6 +605,13 @@
if(disk.delete_file(file.filename))
return OS_FILE_SUCCESS
+/datum/file_storage/disk/datadisk/rename_file(datum/computer_file/file, newname, mob/user)
+ if(check_errors())
+ return OS_HARDDRIVE_ERROR
+ var/obj/item/disk/disk = get_disk()
+ if(disk.rename_file(file.filename, newname))
+ return OS_FILE_SUCCESS
+
/datum/file_storage/disk/datadisk/get_transfer_speed()
if(check_errors())
return 0
diff --git a/code/modules/modular_computers/os/ui.dm b/code/modules/modular_computers/os/ui.dm
index 25d41809005..0b6529519df 100644
--- a/code/modules/modular_computers/os/ui.dm
+++ b/code/modules/modular_computers/os/ui.dm
@@ -132,7 +132,8 @@
var/ui_update_needed = 0
var/obj/item/stock_parts/computer/battery_module/battery_module = get_component(PART_BATTERY)
if(battery_module)
- var/batery_percent = battery_module.battery.percent()
+ var/obj/item/cell/battery = battery_module.get_cell()
+ var/batery_percent = battery?.percent()
if(last_battery_percent != batery_percent) //Let's update UI on percent change
ui_update_needed = 1
last_battery_percent = batery_percent
@@ -173,8 +174,9 @@
/datum/extension/interactive/os/proc/get_header_data(file_browser = FALSE)
var/list/data = list()
var/obj/item/stock_parts/computer/battery_module/battery_module = get_component(PART_BATTERY)
- if(battery_module)
- switch(battery_module.battery.percent())
+ var/obj/item/cell/battery = battery_module?.get_cell()
+ if(battery)
+ switch(battery.percent())
if(80 to 200) // 100 should be maximal but just in case..
data["PC_batteryicon"] = "batt_100.gif"
if(60 to 80)
@@ -187,7 +189,7 @@
data["PC_batteryicon"] = "batt_20.gif"
else
data["PC_batteryicon"] = "batt_5.gif"
- data["PC_batterypercent"] = "[round(battery_module.battery.percent())] %"
+ data["PC_batterypercent"] = "[round(battery.percent())] %"
data["PC_showbatteryicon"] = 1
else
data["PC_batteryicon"] = "batt_5.gif"
diff --git a/code/modules/modular_computers/terminal/terminal_commands.dm b/code/modules/modular_computers/terminal/terminal_commands.dm
index 1b316db0208..bc534225e0e 100644
--- a/code/modules/modular_computers/terminal/terminal_commands.dm
+++ b/code/modules/modular_computers/terminal/terminal_commands.dm
@@ -418,14 +418,17 @@ Subtypes
if(!islist(file_loc))
return "rename: [get_terminal_error(file_path, file_loc)]."
+ var/datum/file_storage/disk = file_loc[1]
var/datum/computer_file/F = file_loc[3]
var/new_name = sanitize_for_file(rename_args[2])
if(length(new_name))
if(F.unrenamable || !(F.get_file_perms(terminal.get_access(user), user) & OS_WRITE_ACCESS))
return "rename: You lack permission to rename [F.filename]."
- F.filename = new_name
- return "rename: File renamed to '[new_name]'."
+ if(disk.rename_file(F, new_name, user))
+ return "rename: File renamed to '[new_name]'."
+ else
+ return "rename: Unable to rename file."
else
return "rename: Invalid file name."
diff --git a/code/modules/multiz/basic.dm b/code/modules/multiz/basic.dm
index 0ffc115b250..b1fb50c38c1 100644
--- a/code/modules/multiz/basic.dm
+++ b/code/modules/multiz/basic.dm
@@ -6,12 +6,14 @@ var/global/list/z_levels = list() // Each Z-level is associated with the relevan
// Thankfully, no bitwise magic is needed here.
/proc/GetAbove(var/atom/atom)
+ RETURN_TYPE(/turf)
var/turf/turf = get_turf(atom)
if(!turf)
return null
return HasAbove(turf.z) ? get_step(turf, UP) : null
/proc/GetBelow(var/atom/atom)
+ RETURN_TYPE(/turf)
var/turf/turf = get_turf(atom)
if(!turf)
return null
@@ -23,4 +25,12 @@ var/global/list/z_levels = list() // Each Z-level is associated with the relevan
else if (dir == DOWN)
. = GetBelow(ref)
else
- . = get_step(ref, dir)
\ No newline at end of file
+ . = get_step(ref, dir)
+
+/proc/get_zstep_resolving_mimic(ref, dir)
+ if(dir == UP)
+ . = GetAbove(ref)?.resolve_to_actual_turf()
+ else if (dir == DOWN)
+ . = GetBelow(ref)?.resolve_to_actual_turf()
+ else
+ . = get_step_resolving_mimic(ref, dir)
\ No newline at end of file
diff --git a/code/modules/multiz/hoist.dm b/code/modules/multiz/hoist.dm
index 5f07b8078f7..02c3988c4a6 100644
--- a/code/modules/multiz/hoist.dm
+++ b/code/modules/multiz/hoist.dm
@@ -11,7 +11,7 @@
icon_state = "hoist_case"
material = /decl/material/solid/metal/steel
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
/obj/item/hoist_kit/attack_self(mob/user)
@@ -46,7 +46,7 @@
source_hoist.release_hoistee()
return TRUE
-/obj/effect/hoist_hook/receive_mouse_drop(atom/dropping, mob/user)
+/obj/effect/hoist_hook/receive_mouse_drop(atom/dropping, mob/user, params)
// skip the parent buckle logic, handle climbing directly
var/mob/living/H = user
if(istype(H) && !H.anchored && can_climb(H) && dropping == user)
@@ -83,9 +83,9 @@
if (get_turf(AM) != get_turf(source_hook))
AM.forceMove(get_turf(source_hook))
- events_repository.register(/decl/observ/destroyed, AM, src, .proc/release_hoistee)
+ events_repository.register(/decl/observ/destroyed, AM, src, PROC_REF(release_hoistee))
-/obj/effect/hoist_hook/handle_mouse_drop(atom/over, mob/user)
+/obj/effect/hoist_hook/handle_mouse_drop(atom/over, mob/user, params)
if(source_hoist.hoistee && isturf(over) && over.Adjacent(source_hoist.hoistee))
if(!user.check_dexterity(DEXTERITY_HOLD_ITEM))
return TRUE
diff --git a/code/modules/multiz/ladder.dm b/code/modules/multiz/ladder.dm
index 8fa04a4f2aa..5338e63f0d3 100644
--- a/code/modules/multiz/ladder.dm
+++ b/code/modules/multiz/ladder.dm
@@ -107,7 +107,7 @@
var/turf/T = get_turf(src)
if(T)
for(var/atom/movable/M in T.contents)
- addtimer(CALLBACK(M, /atom/movable/proc/fall, T), 0)
+ addtimer(CALLBACK(M, TYPE_PROC_REF(/atom/movable, fall), T), 0)
return ..()
/obj/structure/ladder/attackby(obj/item/I, mob/user)
diff --git a/code/modules/multiz/level_data.dm b/code/modules/multiz/level_data.dm
index 7e1ae409f0f..377a175df9e 100644
--- a/code/modules/multiz/level_data.dm
+++ b/code/modules/multiz/level_data.dm
@@ -66,7 +66,8 @@
/datum/level_data
///Name displayed to the player to refer to this level in user interfaces and etc. If null, one will be generated.
var/name
-
+ /// Multiplier applied to damage when falling through this level.
+ var/fall_depth = 1
/// The z-level that was assigned to this level_data
var/level_z
/// A unique string identifier for this particular z-level. Used to fetch a level without knowing its z-level.
@@ -145,7 +146,8 @@
var/tmp/_has_warned_uninitialized_strata = FALSE
VAR_PROTECTED/UT_turf_exceptions_by_door_type // An associate list of door types/list of allowed turfs
-
+ ///Determines if edge turfs should be centered on the map dimensions.
+ var/origin_is_world_center = TRUE
/datum/level_data/New(var/_z_level, var/defer_level_setup = FALSE)
. = ..()
level_z = _z_level
@@ -211,11 +213,10 @@
_level_setup_completed = TRUE
///Calculate the bounds of the level, the border area, and the inner accessible area.
-/// * origin_is_world_center : An arg to clarify how level bounds work, and allow some control.
/// Basically, by default levels are assumed to be loaded relative to the world center, so if they're smaller than the world
/// they get their origin offset so they're in the middle of the world. By default templates are always loaded at origin 1,1.
/// so that's useful to know and have control over!
-/datum/level_data/proc/setup_level_bounds(var/origin_is_world_center = TRUE)
+/datum/level_data/proc/setup_level_bounds()
//Get the width/height we got for the level and the edges
level_max_width = level_max_width ? level_max_width : world.maxx
level_max_height = level_max_height ? level_max_height : world.maxy
@@ -241,7 +242,7 @@
/datum/level_data/proc/setup_ambient()
if(!use_global_exterior_ambience)
return
- ambient_light_level = config.exterior_ambient_light
+ ambient_light_level = get_config_value(/decl/config/num/exterior_ambient_light)
ambient_light_color = SSskybox.background_color
///Setup/generate atmosphere for exterior turfs on the level.
@@ -290,7 +291,7 @@
///Called when setting up the level. Apply generators and anything that modifies the turfs of the level.
/datum/level_data/proc/generate_level()
- if(!global.config.roundstart_level_generation)
+ if(!get_config_value(/decl/config/toggle/roundstart_level_generation))
return
var/origx = level_inner_min_x
var/origy = level_inner_min_y
@@ -302,7 +303,7 @@
///Apply the parent entity's map generators. (Planets generally)
///This proc is to give a chance to level_data subtypes to individually chose to ignore the parent generators.
/datum/level_data/proc/apply_map_generators(var/list/map_gen)
- if(!global.config.roundstart_level_generation)
+ if(!get_config_value(/decl/config/toggle/roundstart_level_generation))
return
var/origx = level_inner_min_x
var/origy = level_inner_min_y
diff --git a/code/modules/multiz/mobile_ladder.dm b/code/modules/multiz/mobile_ladder.dm
index a6084cb3ca7..dc36fa3d136 100644
--- a/code/modules/multiz/mobile_ladder.dm
+++ b/code/modules/multiz/mobile_ladder.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/mobile_ladder.dmi'
material = /decl/material/solid/metal/steel
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY)
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY)
icon_state = ICON_STATE_WORLD
throw_range = 3
force = 10
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index 8b26ad6c158..b36246164d4 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -121,7 +121,7 @@
// Entered() which is part of Move(), by spawn()ing we let that complete. But we want to preserve if we were in client movement
// or normal movement so other move behavior can continue.
/atom/movable/proc/begin_falling(var/lastloc, var/below)
- addtimer(CALLBACK(src, /atom/movable/proc/fall_callback, below), 0)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, fall_callback), below), 0)
/atom/movable/proc/fall_callback(var/turf/below)
if(!QDELETED(src))
@@ -187,7 +187,11 @@
return species.can_fall(src)
/atom/movable/proc/protected_from_fall_damage(var/turf/landing)
- return !!(locate(/obj/structure/stairs) in landing)
+ if(!!(locate(/obj/structure/stairs) in landing))
+ return TRUE
+ var/turf/exterior/wall/ramp = landing
+ if(istype(ramp) && ramp.ramp_slope_direction) // walking down a ramp
+ return TRUE
/mob/protected_from_fall_damage(var/turf/landing)
. = ..()
@@ -198,12 +202,24 @@
parachute.packed = FALSE
return TRUE
-/atom/movable/proc/handle_fall(var/turf/landing)
+/atom/movable
+ var/started_falling_from_z
+
+/atom/movable/proc/get_fall_height()
+ . = 0
+ var/turf/T = get_turf(src)
+ if(istype(T) && T.z <= started_falling_from_z)
+ for(var/fall_z in T.z to started_falling_from_z)
+ var/datum/level_data/level_data = SSmapping.levels_by_z[fall_z]
+ . += max(1, level_data?.fall_depth)
+
+/atom/movable/proc/handle_fall(var/turf/landing, var/fall_distance)
var/turf/previous = get_turf(loc)
Move(landing, get_dir(previous, landing))
+ started_falling_from_z = max(started_falling_from_z, landing.z)
if(protected_from_fall_damage(landing))
- return TRUE
- if(landing.get_fluid_depth() >= FLUID_DEEP)
+ . = TRUE
+ else if(landing.get_fluid_depth() >= FLUID_DEEP)
var/primary_fluid = landing.get_fluid_name()
if(previous.get_fluid_depth() >= FLUID_DEEP) //We're sinking further
visible_message(SPAN_NOTICE("\The [src] sinks deeper down into \the [primary_fluid]!"), SPAN_NOTICE("\The [primary_fluid] rushes around you as you sink!"))
@@ -211,9 +227,11 @@
else
visible_message(SPAN_NOTICE("\The [src] falls into the [primary_fluid]!"), SPAN_NOTICE("What a splash!"))
playsound(src, 'sound/effects/watersplash.ogg', 30, TRUE)
- return TRUE
+ . = TRUE
else
- handle_fall_effect(landing)
+ . = handle_fall_effect(landing)
+ if(.)
+ started_falling_from_z = 0
/atom/movable/proc/handle_fall_effect(var/turf/landing)
SHOULD_CALL_PARENT(TRUE)
@@ -221,13 +239,15 @@
visible_message("\The [src] falls through \the [landing]!", "You hear a whoosh of displaced air.")
else
visible_message("\The [src] slams into \the [landing]!", "You hear something slam into the [global.using_map.ground_noun].")
- var/fall_damage = fall_damage()
+ var/fall_damage = fall_damage() * get_fall_height()
if(fall_damage > 0)
for(var/mob/living/M in landing.contents)
if(M == src)
continue
visible_message("\The [src] hits \the [M.name]!")
M.take_overall_damage(fall_damage)
+ return TRUE
+ return FALSE
/atom/movable/proc/fall_damage()
return 0
@@ -244,8 +264,9 @@
return
if(species && species.handle_fall_special(src, landing))
return
- var/min_damage = 7
- var/max_damage = 14
+ var/fall_height = get_fall_height()
+ var/min_damage = 7 * fall_height
+ var/max_damage = 14 * fall_height
apply_damage(rand(min_damage, max_damage), BRUTE, BP_HEAD, armor_pen = 50)
apply_damage(rand(min_damage, max_damage), BRUTE, BP_CHEST, armor_pen = 50)
apply_damage(rand(min_damage, max_damage), BRUTE, BP_GROIN, armor_pen = 75)
@@ -266,7 +287,6 @@
var/obj/item/organ/external/victim = pick(victims)
victim.dislocate()
to_chat(src, "You feel a sickening pop as your [victim.joint] is wrenched out of the socket.")
- updatehealth()
/mob/living/carbon/human/proc/climb_up(atom/A)
if(!isturf(loc) || !bound_overlay || bound_overlay.destruction_timer || is_physically_disabled()) // This destruction_timer check ideally wouldn't be required, but I'm not awake enough to refactor this to not need it.
@@ -357,7 +377,7 @@
. = ..()
owner = user
follow()
- events_repository.register(/decl/observ/moved, owner, src, /atom/movable/z_observer/proc/follow)
+ events_repository.register(/decl/observ/moved, owner, src, TYPE_PROC_REF(/atom/movable/z_observer, follow))
/atom/movable/z_observer/proc/follow()
@@ -381,7 +401,7 @@
qdel(src)
/atom/movable/z_observer/Destroy()
- events_repository.unregister(/decl/observ/moved, owner, src, /atom/movable/z_observer/proc/follow)
+ events_repository.unregister(/decl/observ/moved, owner, src, TYPE_PROC_REF(/atom/movable/z_observer, follow))
owner = null
. = ..()
diff --git a/code/modules/multiz/pipes.dm b/code/modules/multiz/pipes.dm
index 15564859782..ddd2b92d297 100644
--- a/code/modules/multiz/pipes.dm
+++ b/code/modules/multiz/pipes.dm
@@ -13,7 +13,7 @@
dir = SOUTH
initialize_directions = SOUTH
- level = 1
+ level = LEVEL_BELOW_PLATING
/obj/machinery/atmospherics/pipe/zpipe/check_pressure(pressure)
var/datum/gas_mixture/environment = loc.return_air()
diff --git a/code/modules/multiz/turf_mimic_edge.dm b/code/modules/multiz/turf_mimic_edge.dm
index f0f14810968..fd18b69e385 100644
--- a/code/modules/multiz/turf_mimic_edge.dm
+++ b/code/modules/multiz/turf_mimic_edge.dm
@@ -61,6 +61,16 @@
QDEL_NULL(click_eater) //Make sure we get rid of it if the turf is somehow replaced by map gen to prevent them accumulating.
return ..()
+/turf/simulated/mimic_edge/Crossed(atom/movable/O)
+ . = ..()
+ if(isobserver(O))
+ var/turf/drop_turf = get_mimic_turf()
+ if(drop_turf)
+ O.forceMove(drop_turf)
+
+/turf/simulated/mimic_edge/resolve_to_actual_turf()
+ return get_mimic_turf()
+
//Properly install itself, and allow overriding how the target turf is picked
/turf/simulated/mimic_edge/proc/setup_mimic()
return
@@ -69,7 +79,7 @@
return
/turf/simulated/mimic_edge/get_vis_contents_to_add()
- . = shared_mimic_edge_get_add_vis_contents(src, get_mimic_turf(), ..())
+ . = shared_mimic_edge_get_add_vis_contents(src, get_mimic_turf(), list())
/turf/simulated/mimic_edge/proc/get_mimic_turf()
return mimic_x && mimic_y && mimic_z && locate(mimic_x, mimic_y, mimic_z)
@@ -127,6 +137,16 @@
QDEL_NULL(click_eater)
return ..()
+/turf/unsimulated/mimic_edge/Crossed(atom/movable/O)
+ . = ..()
+ if(isobserver(O))
+ var/turf/drop_turf = get_mimic_turf()
+ if(drop_turf)
+ O.forceMove(drop_turf)
+
+/turf/unsimulated/mimic_edge/resolve_to_actual_turf()
+ return get_mimic_turf()
+
//Properly install itself, and allow overriding how the target turf is picked
/turf/unsimulated/mimic_edge/proc/setup_mimic()
return
@@ -135,7 +155,7 @@
return
/turf/unsimulated/mimic_edge/get_vis_contents_to_add()
- . = shared_mimic_edge_get_add_vis_contents(src, get_mimic_turf(), ..())
+ . = shared_mimic_edge_get_add_vis_contents(src, get_mimic_turf(), list())
/turf/unsimulated/mimic_edge/proc/get_mimic_turf()
return mimic_x && mimic_y && mimic_z && locate(mimic_x, mimic_y, mimic_z)
@@ -193,6 +213,16 @@
QDEL_NULL(click_eater)
return ..()
+/turf/exterior/mimic_edge/Crossed(atom/movable/O)
+ . = ..()
+ if(isobserver(O))
+ var/turf/drop_turf = get_mimic_turf()
+ if(drop_turf)
+ O.forceMove(drop_turf)
+
+/turf/exterior/mimic_edge/resolve_to_actual_turf()
+ return get_mimic_turf()
+
//Properly install itself, and allow overriding how the target turf is picked
/turf/exterior/mimic_edge/proc/setup_mimic()
return
@@ -201,7 +231,7 @@
return
/turf/exterior/mimic_edge/get_vis_contents_to_add()
- . = shared_mimic_edge_get_add_vis_contents(src, get_mimic_turf(), ..())
+ . = shared_mimic_edge_get_add_vis_contents(src, get_mimic_turf(), list())
/turf/exterior/mimic_edge/proc/get_mimic_turf()
return mimic_x && mimic_y && mimic_z && locate(mimic_x, mimic_y, mimic_z)
diff --git a/code/modules/multiz/zmimic/mimic_movable.dm b/code/modules/multiz/zmimic/mimic_movable.dm
index d31a30330c4..20bf18bbcac 100644
--- a/code/modules/multiz/zmimic/mimic_movable.dm
+++ b/code/modules/multiz/zmimic/mimic_movable.dm
@@ -85,7 +85,7 @@
layer = MIMICED_LIGHTING_LAYER
plane = OPENTURF_MAX_PLANE
blend_mode = BLEND_MULTIPLY
- invisibility = 0
+ set_invisibility(INVISIBILITY_NONE)
if (icon_state == LIGHTING_BASE_ICON_STATE)
// We're using a color matrix, so just darken the colors across the board.
diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm
index 7b19155b7ba..a6772cb01b9 100644
--- a/code/modules/nano/modules/human_appearance.dm
+++ b/code/modules/nano/modules/human_appearance.dm
@@ -41,39 +41,39 @@
return owner.change_skin_tone(new_s_tone)
if(href_list["skin_color"] && can_change_skin_color())
- var/new_skin = input(usr, "Choose your character's skin colour: ", "Skin Color", owner.skin_colour) as color|null
- if(new_skin && can_still_topic(state) && owner.change_skin_color(new_skin))
+ var/new_skin = input(usr, "Choose your character's skin colour: ", "Skin Color", owner.get_skin_colour()) as color|null
+ if(new_skin && can_still_topic(state) && owner.set_skin_colour(new_skin))
update_dna()
return TRUE
if(href_list["hair"])
var/decl/sprite_accessory/hair = locate(href_list["hair"])
- if(can_change(APPEARANCE_HAIR) && istype(hair) && (hair.type in owner.get_valid_hairstyle_types()) && owner.change_hair(hair.type))
+ if(can_change(APPEARANCE_HAIR) && istype(hair) && (hair.type in owner.get_valid_hairstyle_types()) && owner.set_hairstyle(hair.type))
update_dna()
return TRUE
if(href_list["hair_color"] && can_change(APPEARANCE_HAIR_COLOR))
- var/new_hair = input("Please select hair color.", "Hair Color", owner.hair_colour) as color|null
- if(new_hair && can_still_topic(state) && owner.change_hair_color(new_hair))
+ var/new_hair = input("Please select hair color.", "Hair Color", owner.get_hair_colour()) as color|null
+ if(new_hair && can_still_topic(state) && owner.set_hair_colour(new_hair))
update_dna()
return TRUE
if(href_list["facial_hair"])
var/decl/sprite_accessory/facial_hair = locate(href_list["facial_hair"])
- if(can_change(APPEARANCE_FACIAL_HAIR) && istype(facial_hair) && (facial_hair.type in owner.get_valid_facial_hairstyle_types()) && owner.change_facial_hair(facial_hair.type))
+ if(can_change(APPEARANCE_FACIAL_HAIR) && istype(facial_hair) && (facial_hair.type in owner.get_valid_facial_hairstyle_types()) && owner.set_facial_hairstyle(facial_hair.type))
update_dna()
return TRUE
if(href_list["facial_hair_color"] && can_change(APPEARANCE_FACIAL_HAIR_COLOR))
- var/new_facial = input("Please select facial hair color.", "Facial Hair Color", owner.facial_hair_colour) as color|null
- if(new_facial && can_still_topic(state) && owner.change_facial_hair_color(new_facial))
+ var/new_facial = input("Please select facial hair color.", "Facial Hair Color", owner.get_facial_hair_colour()) as color|null
+ if(new_facial && can_still_topic(state) && owner.set_facial_hair_colour(new_facial))
update_dna()
return TRUE
if(href_list["eye_color"])
if(can_change(APPEARANCE_EYE_COLOR))
- var/new_eyes = input("Please select eye color.", "Eye Color", owner.eye_colour) as color|null
- if(new_eyes && can_still_topic(state) && owner.change_eye_color(new_eyes))
+ var/new_eyes = input("Please select eye color.", "Eye Color", owner.get_eye_colour()) as color|null
+ if(new_eyes && can_still_topic(state) && owner.set_eye_colour(new_eyes))
update_dna()
return TRUE
@@ -119,7 +119,8 @@
var/decl/sprite_accessory/hair_decl = GET_DECL(hair_style)
hair_styles[++hair_styles.len] = list("hairstyle" = hair_decl.name, "ref" = "\ref[hair_decl]")
data["hair_styles"] = hair_styles
- var/decl/sprite_accessory/hair = GET_DECL(owner.h_style)
+ var/hairstyle = owner.get_hairstyle()
+ var/decl/sprite_accessory/hair = GET_DECL(hairstyle)
data["hair_style"] = hair.name
data["change_facial_hair"] = can_change(APPEARANCE_FACIAL_HAIR)
@@ -129,7 +130,8 @@
var/decl/sprite_accessory/facial_hair_decl = GET_DECL(facial_hair_style)
facial_hair_styles[++facial_hair_styles.len] = list("facialhairstyle" = facial_hair_decl.name, "ref" = "\ref[facial_hair_decl]")
data["facial_hair_styles"] = facial_hair_styles
- var/decl/sprite_accessory/facial_hair = GET_DECL(owner.f_style)
+ var/facial_hairstyle = owner.get_facial_hairstyle()
+ var/decl/sprite_accessory/facial_hair = GET_DECL(facial_hairstyle)
data["facial_hair_style"] = facial_hair.name
data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR)
diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm
index 8d58cb06f10..86b3bc85f62 100644
--- a/code/modules/nano/nanomapgen.dm
+++ b/code/modules/nano/nanomapgen.dm
@@ -21,7 +21,11 @@
set category = "Server"
if(holder)
- nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate")))
+ var/zlevel = text2num(input(usr,"Enter the Z level to generate"))
+ if(!zlevel)
+ return
+ var/datum/level_data/level = SSmapping.levels_by_z[zlevel]
+ nanomapgen_DumpTile(level.level_inner_min_x, level.level_inner_min_y, zlevel, level.level_inner_max_x, level.level_inner_max_y)
/client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1)
@@ -66,13 +70,13 @@
var/icon/TurfIcon = new(Turf.icon, Turf.icon_state, dir = Turf.dir)
TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE)
- Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE))
+ Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - startX) * NANOMAP_ICON_SIZE), ((WorldY - startY) * NANOMAP_ICON_SIZE))
count++
if (count % 8000 == 0)
to_world_log("NanoMapGen: [count] tiles done")
- sleep(1)
+ CHECK_TICK
var/mapFilename = "new_[map_image_file_name(currentZ)]"
diff --git a/code/modules/organs/ailments/_ailment.dm b/code/modules/organs/ailments/_ailment.dm
index 70f12accd40..101f4bb8dd8 100644
--- a/code/modules/organs/ailments/_ailment.dm
+++ b/code/modules/organs/ailments/_ailment.dm
@@ -21,7 +21,7 @@
var/treated_by_chem_effect_strength = 1 // How strong must the chemical effect be to cure this ailment?
// Fluff strings
- var/initial_ailment_message = "Your $ORGAN$ doesn't feel quite right..." // Shown in New()
+ var/initial_ailment_message = "Your $ORGAN$ $ORGAN_DOES$n't feel quite right..." // Shown in New()
var/third_person_treatment_message = "$USER$ treats $TARGET$'s ailment with $ITEM$." // Shown when treating other with an item.
var/self_treatment_message = "$USER$ treats $USER_HIS$ ailment with $ITEM$." // Shown when treating self with an item.
var/medication_treatment_message = "Your ailment abates." // Shown when treated by a metabolized reagent or CE_X effect.
@@ -56,7 +56,7 @@
/datum/ailment/proc/begin_ailment_event()
if(!organ?.owner)
return
- timer_id = addtimer(CALLBACK(src, .proc/do_malfunction), rand(min_time, max_time), TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
+ timer_id = addtimer(CALLBACK(src, PROC_REF(do_malfunction)), rand(min_time, max_time), TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
/datum/ailment/proc/do_malfunction()
if(!organ?.owner)
@@ -69,7 +69,13 @@
return
/datum/ailment/proc/treated_by_item(var/obj/item/treatment)
- return treated_by_item_type && istype(treatment, treated_by_item_type)
+ if(islist(treated_by_item_type))
+ for(var/treatment_type in treated_by_item_type)
+ if(istype(treatment, treatment_type))
+ return TRUE
+ else if(ispath(treated_by_item_type))
+ return istype(treatment, treated_by_item_type)
+ return FALSE
/datum/ailment/proc/replace_tokens(var/message, var/obj/item/treatment, var/mob/user, var/mob/target)
. = message
@@ -83,6 +89,9 @@
. = replacetext(., "$TARGET$", "\the [target]")
if(organ)
. = replacetext(., "$ORGAN$", organ.name)
+ var/decl/pronouns/organ_pronouns = get_pronouns_by_gender(organ.gender)
+ . = replacetext(., "$ORGAN_DOES$", organ_pronouns.does)
+ . = replacetext(., "$ORGAN_IS$", organ_pronouns.is)
. = capitalize(trim(.))
/datum/ailment/proc/was_treated_by_item(var/obj/item/treatment, var/mob/user, var/mob/target)
diff --git a/code/modules/organs/ailments/ailment_codex.dm b/code/modules/organs/ailments/ailment_codex.dm
index 8cc388bcb80..a60d78ad2e3 100644
--- a/code/modules/organs/ailments/ailment_codex.dm
+++ b/code/modules/organs/ailments/ailment_codex.dm
@@ -1,14 +1,12 @@
-/datum/codex_entry/ailments
- name = "Medical Ailments"
- lore_text = "Day to day life can exert stress on the body, which can manifest in small, non-critical medical conditions like a sore back or a \
- headache. 9/10 doctors recommend a visit to your local physician for treatment before they compound into a chronic or acute condition."
- mechanics_text = "Ailments are minor medical conditions that can crop up during a round. They aren't life-threatening, and \
- frequently aren't anything more than slightly annoying, and treating them is generally straightforward."
+/datum/codex_entry/guide/ailments
+ name = "Guide to Medical Ailments"
+ mechanics_text = "Ailments are minor medical conditions that can crop up during a round. They aren't life-threatening, and frequently aren't anything more than slightly annoying, and treating them is generally straightforward."
+ lore_text = "Day to day life can exert stress on the body, which can manifest in small, non-critical medical conditions like a sore back or a headache. 9/10 doctors recommend a visit to your local physician for treatment before they compound into a chronic or acute condition."
var/show_robotics_recipes = FALSE
var/name_column = "Ailment"
var/treatment_column = "Recommended treatment"
-/datum/codex_entry/ailments/robotic
+/datum/codex_entry/guide/ailments/robotic
name = "Prosthetic Faults"
lore_text = "Prosthetic limbs can be prone to debilitating and often dangerous faults, especially if exposed to hostile conditions."
mechanics_text = "EMP damage or improper installation can cause prosthetic limbs to develop problems, some of them more serious than others."
@@ -36,7 +34,7 @@
return "stimulant drugs"
return null
-/datum/codex_entry/ailments/New()
+/datum/codex_entry/guide/ailments/New()
var/list/ailment_table = list("")
ailment_table += "[name_column] | [treatment_column] |
"
for(var/atype in subtypesof(/datum/ailment))
diff --git a/code/modules/organs/ailments/faults/_fault.dm b/code/modules/organs/ailments/faults/_fault.dm
index a2aefe003b6..0eb2ec462f8 100644
--- a/code/modules/organs/ailments/faults/_fault.dm
+++ b/code/modules/organs/ailments/faults/_fault.dm
@@ -1,7 +1,10 @@
/datum/ailment/fault
affects_robotics = TRUE
category = /datum/ailment/fault
- treated_by_item_type = /obj/item/stack/nanopaste
+ treated_by_item_type = list(
+ /obj/item/stack/nanopaste,
+ /obj/item/stack/tape_roll/duct_tape
+ )
treated_by_item_cost = 3
third_person_treatment_message = "$USER$ patches $TARGET$'s faulty $ORGAN$ with $ITEM$."
self_treatment_message = "$USER$ patches $USER_HIS$ faulty $ORGAN$ with $ITEM$."
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index e7ba796dfc1..6beb21ae561 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -195,7 +195,7 @@
var/stress_modifier = get_stress_modifier()
if(stress_modifier)
- amount *= 1-(config.stress_blood_recovery_constant * stress_modifier)
+ amount *= 1-(get_config_value(/decl/config/num/health_stress_blood_recovery_constant) * stress_modifier)
var/blood_volume_raw = vessel.total_volume
amount = max(0,min(amount, species.blood_volume - blood_volume_raw))
@@ -301,8 +301,8 @@
splatter.basecolor = blood_data["blood_color"]
splatter.update_icon()
- splatter.fluorescent = 0
- splatter.set_invisibility(0)
+ splatter.fluorescent = FALSE
+ splatter.set_invisibility(INVISIBILITY_NONE)
return splatter
//Percentage of maximum blood volume.
diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm
index 3bfa82d7e41..9f6723cb5c0 100644
--- a/code/modules/organs/external/_external.dm
+++ b/code/modules/organs/external/_external.dm
@@ -9,9 +9,10 @@
organ_tag = "limb"
appearance_flags = DEFAULT_APPEARANCE_FLAGS | LONG_GLIDE
scale_max_damage_to_species_health = TRUE
+ abstract_type = /obj/item/organ/external
var/slowdown = 0
- var/tmp/icon_cache_key
+ var/tmp/_icon_cache_key
// Strings
var/broken_description // fracture string if any.
var/damage_state = "00" // Modifier used for generating the on-mob damage overlay for this limb.
@@ -31,7 +32,6 @@
// Appearance vars.
var/body_part = null // Part flag
var/icon_position = 0 // Used in mob overlay layering calculations.
- var/icon/mob_icon // Cached icon for use in mob overlays.
var/skin_tone // Skin tone.
var/skin_colour // skin colour
var/skin_blend = ICON_ADD // How the skin colour is applied.
@@ -123,18 +123,32 @@
LAZYREMOVE(owner.bad_external_organs, src)
/obj/item/organ/external/set_species(specie_name)
+ _icon_cache_key = null
. = ..()
skin_blend = bodytype.limb_blend
for(var/attack_type in species.unarmed_attacks)
var/decl/natural_attack/attack = GET_DECL(attack_type)
if(istype(attack) && (organ_tag in attack.usable_with_limbs))
LAZYADD(unarmed_attacks, attack_type)
- get_icon()
+ update_icon()
-/obj/item/organ/external/set_bodytype(decl/bodytype/new_bodytype, override_material = null)
- . = ..()
+/obj/item/organ/external/set_bodytype(decl/bodytype/new_bodytype, override_material = null, apply_to_internal_organs = TRUE)
+ _icon_cache_key = null
+ var/decl/bodytype/old_bodytype = bodytype
+ . = ..(new_bodytype, override_material)
+ if(bodytype != old_bodytype && apply_to_internal_organs)
+ bodytype.rebuild_internal_organs(src, override_material)
slowdown = bodytype.movement_slowdown
- update_icon(TRUE)
+ if(.)
+ update_icon(TRUE)
+
+/obj/item/organ/external/set_dna(var/datum/dna/new_dna)
+ _icon_cache_key = null
+ return ..()
+
+/obj/item/organ/external/reset_status()
+ _icon_cache_key = null
+ return ..()
/obj/item/organ/external/proc/set_bodytype_with_children(decl/bodytype/new_bodytype, override_material = null)
set_bodytype(new_bodytype, override_material)
@@ -415,7 +429,7 @@
return
owner.verbs -= /mob/living/carbon/human/proc/undislocate
-/obj/item/organ/external/update_health()
+/obj/item/organ/external/update_organ_health()
damage = min(max_damage, (brute_dam + burn_dam))
return
@@ -427,6 +441,8 @@
//If attached to an owner mob
if(istype(owner))
+ owner.full_prosthetic = null
+
// Initialize fingerprints if we don't already have some (TODO: we're assuming this is our first owner, maybe check for this elsewhere?).
if((limb_flags & ORGAN_FLAG_FINGERPRINT) && !fingerprint && !BP_IS_PROSTHETIC(src))
fingerprint = owner.get_full_print(ignore_blockers = TRUE)
@@ -440,11 +456,8 @@
//
//If we contain any child organs add them to the owner
//
- for(var/obj/item/organ/organ in internal_organs)
- owner.add_organ(organ, src, in_place, update_icon, detached)
-
- for(var/obj/item/organ/external/organ in children)
- owner.add_organ(organ, src, in_place, update_icon, detached)
+ for(var/obj/item/organ/organ in (implants|children|internal_organs))
+ owner.add_organ(organ, src, in_place, update_icon, FALSE)
//
//Add any existing organs in the owner that have us as parent
@@ -558,7 +571,7 @@
switch(damage_type)
if(BRUTE) src.heal_damage(repair_amount, 0, 0, 1)
if(BURN) src.heal_damage(0, repair_amount, 0, 1)
- owner.refresh_visible_overlays()
+ owner.try_refresh_visible_overlays()
if(user == src.owner)
var/decl/pronouns/G = user.get_pronouns()
user.visible_message(SPAN_NOTICE("\The [user] patches [damage_desc] on [G.his] [name] with \the [tool]."))
@@ -600,7 +613,7 @@ This function completely restores a damaged organ to perfect condition.
. = ..() // Clear damage, reapply aspects.
if(owner)
- owner.updatehealth()
+ owner.update_health()
//#TODO: Rejuvination hacks should probably be removed
/obj/item/organ/external/remove_rejuv()
@@ -641,7 +654,7 @@ This function completely restores a damaged organ to perfect condition.
switch(type)
if(BURN) fluid_loss_severity = FLUIDLOSS_WIDE_BURN
if(LASER) fluid_loss_severity = FLUIDLOSS_CONC_BURN
- var/fluid_loss = (damage/(owner.maxHealth - config.health_threshold_dead)) * SPECIES_BLOOD_DEFAULT * fluid_loss_severity
+ var/fluid_loss = (damage/(owner.get_max_health() - get_config_value(/decl/config/num/health_health_threshold_dead))) * SPECIES_BLOOD_DEFAULT * fluid_loss_severity
owner.remove_blood(fluid_loss)
// first check whether we can widen an existing wound
@@ -866,12 +879,12 @@ Note that amputating the affected organ does in fact remove the infection from t
// we only update wounds once in [wound_update_accuracy] ticks so have to emulate realtime
heal_amt = heal_amt * wound_update_accuracy
// configurable regen speed woo, no-regen hardcore or instaheal hugbox, choose your destiny
- heal_amt = heal_amt * config.organ_regeneration_multiplier
+ heal_amt = heal_amt * get_config_value(/decl/config/num/health_organ_regeneration_multiplier)
// Apply a modifier based on how stressed we currently are.
if(owner)
var/stress_modifier = owner.get_stress_modifier()
if(stress_modifier)
- heal_amt *= 1-(config.stress_healing_recovery_constant * stress_modifier)
+ heal_amt *= 1-(get_config_value(/decl/config/num/health_stress_healing_recovery_constant) * stress_modifier)
// amount of healing is spread over all the wounds
heal_amt = heal_amt / (LAZYLEN(wounds) + 1)
// making it look prettier on scanners
@@ -888,7 +901,7 @@ Note that amputating the affected organ does in fact remove the infection from t
if(update_surgery)
owner.update_surgery()
if (update_damstate())
- owner.UpdateDamageIcon(1)
+ owner.update_damage_icon(TRUE)
//Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status.
/obj/item/organ/external/proc/update_damages()
@@ -1210,7 +1223,7 @@ Note that amputating the affected organ does in fact remove the infection from t
I.exposed()
/obj/item/organ/external/proc/fracture()
- if(!config.bones_can_break)
+ if(!get_config_value(/decl/config/toggle/on/health_bones_can_break))
return
if(BP_IS_PROSTHETIC(src))
return //ORGAN_BROKEN doesn't have the same meaning for robot limbs
@@ -1245,7 +1258,7 @@ Note that amputating the affected organ does in fact remove the infection from t
/obj/item/organ/external/proc/mend_fracture()
if(BP_IS_PROSTHETIC(src))
return 0 //ORGAN_BROKEN doesn't have the same meaning for robot limbs
- if(brute_dam > min_broken_damage * config.organ_health_multiplier)
+ if(brute_dam > min_broken_damage * get_config_value(/decl/config/num/health_organ_health_multiplier))
return 0 //will just immediately fracture again
status &= ~ORGAN_BROKEN
@@ -1336,6 +1349,7 @@ Note that amputating the affected organ does in fact remove the infection from t
W.forceMove(owner)
/obj/item/organ/external/do_uninstall(in_place, detach, ignore_children, update_icon)
+
var/mob/living/carbon/human/victim = owner //parent proc clears owner
if(!(. = ..()))
return
@@ -1387,6 +1401,8 @@ Note that amputating the affected organ does in fact remove the infection from t
continue
organ.do_install(null, src, FALSE, update_icon, FALSE) //Forcemove the organ and properly set it up in our internal data
+ victim.full_prosthetic = null
+
//Note that we don't need to change our own hierarchy when not removing from a mob
// Remove parent references
@@ -1413,7 +1429,7 @@ Note that amputating the affected organ does in fact remove the infection from t
/obj/item/organ/external/set_detached(is_detached)
if(BP_IS_PROSTHETIC(src))
is_detached = FALSE //External prosthetics are never detached
- return ..(is_detached)
+ . = ..(is_detached)
/obj/item/organ/external/proc/disfigure(var/type = BRUTE)
if(status & ORGAN_DISFIGURED)
diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm
index 60b8d217b62..6f6f150edcb 100644
--- a/code/modules/organs/external/_external_damage.dm
+++ b/code/modules/organs/external/_external_damage.dm
@@ -48,10 +48,10 @@
burn = max(burn - spillover, 0)
//If limb took enough damage, try to cut or tear it off
if(owner && loc == owner)
- owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called
- if((limb_flags & ORGAN_FLAG_CAN_AMPUTATE) && config.limbs_can_break)
+ owner.update_health() //droplimb will call update_health() again if it does end up being called
+ if((limb_flags & ORGAN_FLAG_CAN_AMPUTATE) && get_config_value(/decl/config/toggle/on/health_limbs_can_break))
var/total_damage = brute_dam + burn_dam + brute + burn + spillover
- var/threshold = max_damage * config.organ_health_multiplier
+ var/threshold = max_damage * get_config_value(/decl/config/num/health_organ_health_multiplier)
if(total_damage > threshold)
if(attempt_dismemberment(pure_brute, burn, sharp, edge, used_weapon, spillover, total_damage > threshold*6, override_droplimb = override_droplimb))
return
@@ -109,16 +109,16 @@
//If there are still hurties to dispense
if (spillover)
- owner.shock_stage += spillover * config.organ_damage_spillover_multiplier
+ owner.shock_stage += spillover * get_config_value(/decl/config/num/health_organ_damage_spillover_multiplier)
// sync the organ's damage with its wounds
update_damages()
- owner.updatehealth()
+ owner.update_health()
if(status & ORGAN_BLEEDING)
owner.update_bandages()
if(owner && update_damstate())
- owner.UpdateDamageIcon()
+ owner.update_damage_icon()
if(created_wound && isobj(used_weapon))
var/obj/O = used_weapon
@@ -192,8 +192,8 @@
status &= ~ORGAN_BROKEN
//Sync the organ's damage with its wounds
- src.update_damages()
- owner.updatehealth()
+ update_damages()
+ owner.update_health()
return update_damstate()
diff --git a/code/modules/organs/external/_external_icons.dm b/code/modules/organs/external/_external_icons.dm
index 569c4b67066..aa77c6e51fc 100644
--- a/code/modules/organs/external/_external_icons.dm
+++ b/code/modules/organs/external/_external_icons.dm
@@ -4,27 +4,31 @@ var/global/list/limb_icon_cache = list()
return ..(SOUTH)
/obj/item/organ/external/proc/compile_icon()
- //#FIXME: We REALLY shouldn't be messing with overlays outside on_update_icon. And on_update_icon doesn't call this.
- cut_overlays()
// This is a kludge, only one icon has more than one generation of children though.
for(var/obj/item/organ/external/organ in contents)
if(organ.children && organ.children.len)
for(var/obj/item/organ/external/child in organ.children)
- add_overlay(child.mob_icon)
- add_overlay(organ.mob_icon)
+ child.update_icon()
+ child.compile_overlays()
+ organ.update_icon()
+ organ.compile_overlays()
+ update_icon()
+ compile_overlays()
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human)
+ _icon_cache_key = null
skin_tone = null
skin_colour = null
- hair_colour = human.hair_colour
+ hair_colour = human.get_hair_colour()
// This used to do a bodytype set but that was *really really bad.* Things that need that should do it themselves.
skin_blend = bodytype.limb_blend
if(!isnull(human.skin_tone) && bodytype?.appearance_flags & HAS_A_SKIN_TONE)
skin_tone = human.skin_tone
if(bodytype.appearance_flags & HAS_SKIN_COLOR)
- skin_colour = human.skin_colour
+ skin_colour = human.get_skin_colour()
/obj/item/organ/external/proc/sync_colour_to_dna()
+ _icon_cache_key = null
skin_tone = null
skin_colour = null
hair_colour = rgb(dna.GetUIValue(DNA_UI_HAIR_R),dna.GetUIValue(DNA_UI_HAIR_G),dna.GetUIValue(DNA_UI_HAIR_B))
@@ -42,18 +46,8 @@ var/global/list/limb_icon_cache = list()
update_icon(1)
if(last_owner)
SetName("[last_owner.real_name]'s head")
- addtimer(CALLBACK(last_owner, /mob/proc/update_hair), 1, TIMER_UNIQUE)
- . = ..()
- //Head markings, duplicated (sadly) below.
- for(var/M in markings)
- var/decl/sprite_accessory/marking/mark_style = GET_DECL(M)
- if (mark_style.draw_target == MARKING_TARGET_SKIN)
- var/mark_color = markings[M]
- var/icon/mark_s = mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color)
- //#TODO: This probably should be added to a list that's applied on update icon, otherwise its gonna act really wonky!
- add_overlay(mark_s) //So when it's not on your body, it has icons
- mob_icon.Blend(mark_s, mark_style.layer_blend) //So when it's on your body, it has icons
- icon_cache_key += "[M][mark_color]"
+ addtimer(CALLBACK(last_owner, TYPE_PROC_REF(/mob, update_hair)), 1, TIMER_UNIQUE)
+ return ..()
/obj/item/organ/external/proc/update_limb_icon_file()
if(!BP_IS_PROSTHETIC(src) && (status & ORGAN_MUTATED))
@@ -63,51 +57,92 @@ var/global/list/limb_icon_cache = list()
else
icon = bodytype.get_base_icon(owner)
-/obj/item/organ/external/on_update_icon(var/regenerate = 0)
- . = ..()
- icon_state = organ_tag
- icon_cache_key = "[icon_state]_[species.name][bodytype.name][render_alpha]"
+var/global/list/organ_icon_cache = list()
+/obj/item/organ/external/proc/generate_mob_icon()
- update_limb_icon_file()
- mob_icon = apply_colouration(new/icon(icon, icon_state))
+ // Generate base icon with colour and tone.
+ var/icon/ret = bodytype.apply_limb_colouration(src, new /icon(icon, icon_state))
+ if(status & ORGAN_DEAD)
+ ret.ColorTone(rgb(10,50,0))
+ ret.SetIntensity(0.7)
+ if(skin_tone)
+ if(skin_tone >= 0)
+ ret.Blend(rgb(skin_tone, skin_tone, skin_tone), ICON_ADD)
+ else
+ ret.Blend(rgb(-skin_tone, -skin_tone, -skin_tone), ICON_SUBTRACT)
+ if((bodytype.appearance_flags & HAS_SKIN_COLOR) && skin_colour)
+ ret.Blend(skin_colour, skin_blend)
- //Body markings, does not include head, duplicated (sadly) above.
+ //Body markings.
for(var/M in markings)
- var/decl/sprite_accessory/marking/mark_style = GET_DECL(M)
- if (mark_style.draw_target == MARKING_TARGET_SKIN)
- var/mark_color = markings[M]
- var/icon/mark_s = mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color)
- //#TODO: This probably should be added to a list that's applied on update icon, otherwise its gonna act really wonky!
- add_overlay(mark_s) //So when it's not on your body, it has icons
- mob_icon.Blend(mark_s, mark_style.layer_blend) //So when it's on your body, it has icons
- icon_cache_key += "[M][mark_color]"
-
+ var/decl/sprite_accessory/marking/mark_style = resolve_accessory_to_decl(M)
+ if(mark_style && !mark_style.sprite_overlay_layer)
+ ret.Blend(mark_style.get_cached_accessory_icon(src, markings[M]), mark_style.layer_blend)
if(render_alpha < 255)
- mob_icon += rgb(,,,render_alpha)
+ ret += rgb(,,,render_alpha)
+ global.organ_icon_cache[_icon_cache_key] = ret
+ return ret
- icon = mob_icon
+/obj/item/organ/external/proc/get_mob_overlays()
+ for(var/M in markings)
+ var/decl/sprite_accessory/marking/mark_style = resolve_accessory_to_decl(M)
+ if(mark_style?.sprite_overlay_layer)
+ var/image/mark_image = image(mark_style.get_cached_accessory_icon(src, markings[M]))
+ mark_image.layer = mark_style.sprite_overlay_layer
+ LAZYADD(., mark_image)
+
+/obj/item/organ/external/proc/get_icon_cache_key_components()
+ . = list("[icon_state]_[species.name]_[bodytype.name]_[render_alpha]_[icon]")
+ for(var/M in markings)
+ var/decl/sprite_accessory/marking/mark_style = GET_DECL(M)
+ if(!mark_style.sprite_overlay_layer)
+ . += "_[M][markings[M]]"
+ if(status & ORGAN_DEAD)
+ . += "_dead"
+ . += "_tone_[skin_tone]_color_[skin_colour]_[skin_blend]"
-/obj/item/organ/external/proc/get_icon()
- update_icon()
- return mob_icon
+/obj/item/organ/external/on_update_icon()
+ . = ..()
-// Returns an image for use by the human health dolly HUD element.
-// If the limb is in pain, it will be used as a minimum damage
-// amount to represent the obfuscation of being in agonizing pain.
+ // Update our cache key and refresh or create our base icon.
+ update_limb_icon_file()
+ if(icon_state != organ_tag)
+ icon_state = organ_tag
+ _icon_cache_key = jointext(get_icon_cache_key_components(), null)
+ var/icon/mob_icon = global.organ_icon_cache[_icon_cache_key] || generate_mob_icon()
+ if(icon != mob_icon)
+ icon = mob_icon
+
+ // We may have some overlays of our own (hair, glowing eyes, layered markings)
+ var/list/additional_overlays = get_mob_overlays()
+ if(length(additional_overlays))
+ for(var/new_overlay in additional_overlays)
+ add_overlay(new_overlay)
+
+ // If we've been severed, we may contain child organs that should be rendered (feet on legs etc).
+ if(!owner && length(contents))
+ for(var/obj/item/organ/external/child in contents)
+ child.update_icon()
+ child.compile_overlays() // We need the appearance immediately.
+ add_overlay(child)
// Global scope, used in code below.
var/global/list/flesh_hud_colours = list("#00ff00","#aaff00","#ffff00","#ffaa00","#ff0000","#aa0000","#660000")
var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888","#666666","#444444","#222222","#000000")
+// Returns an image for use by the human health dolly HUD element.
+// If the limb is in pain, it will be used as a minimum damage
+// amount to represent the obfuscation of being in agonizing pain.
/obj/item/organ/external/proc/get_damage_hud_image()
// Generate the greyscale base icon and cache it for later.
// icon_cache_key is set by any get_icon() calls that are made.
// This looks convoluted, but it's this way to avoid icon proc calls.
if(!hud_damage_image)
- var/cache_key = "dambase-[icon_cache_key]"
- if(!icon_cache_key || !limb_icon_cache[cache_key])
- limb_icon_cache[cache_key] = icon(get_icon(), null, SOUTH)
+ update_icon()
+ var/cache_key = "dambase-[_icon_cache_key]"
+ if(!cache_key || !limb_icon_cache[cache_key])
+ limb_icon_cache[cache_key] = icon(icon, null, SOUTH)
var/image/temp = image(limb_icon_cache[cache_key])
if(species)
// Calculate the required colour matrix.
@@ -130,27 +165,6 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888"
hud_damage_image.color = hud_colours[max(1,min(CEILING(dam_state*hud_colours.len),hud_colours.len))]
return hud_damage_image
-/obj/item/organ/external/proc/apply_colouration(var/icon/applying)
-
- applying = bodytype.apply_limb_colouration(src, applying)
- if(status & ORGAN_DEAD)
- icon_cache_key += "_dead"
- applying.ColorTone(rgb(10,50,0))
- applying.SetIntensity(0.7)
-
- if(skin_tone)
- if(skin_tone >= 0)
- applying.Blend(rgb(skin_tone, skin_tone, skin_tone), ICON_ADD)
- else
- applying.Blend(rgb(-skin_tone, -skin_tone, -skin_tone), ICON_SUBTRACT)
- icon_cache_key += "_tone_[skin_tone]"
- if(bodytype.appearance_flags & HAS_SKIN_COLOR)
- if(skin_colour)
- applying.Blend(skin_colour, skin_blend)
- icon_cache_key += "_color_[skin_colour]_[skin_blend]"
-
- return applying
-
/obj/item/organ/external/proc/bandage_level()
if(damage_state_text() == "00")
return 0
@@ -163,4 +177,15 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888"
else if (burn_dam + brute_dam < (max_damage * 0.75 / 2))
. = 2
else
- . = 3
\ No newline at end of file
+ . = 3
+
+/obj/item/organ/external/proc/resolve_accessory_to_decl(var/decl/sprite_accessory/accessory_style)
+ if(ispath(accessory_style))
+ accessory_style = GET_DECL(accessory_style)
+ // Check if this style is permitted for this species, period.
+ if(!accessory_style.accessory_is_available(owner, species, bodytype))
+ return null
+ // Check if we are concealed (long hair under a hat for example).
+ if(accessory_style.is_hidden(src))
+ return accessory_style.get_hidden_substitute()
+ return accessory_style
diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm
index 75783bdc40a..9ea8af56647 100644
--- a/code/modules/organs/external/head.dm
+++ b/code/modules/organs/external/head.dm
@@ -16,23 +16,23 @@
limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE
- var/draw_eyes = TRUE
var/glowing_eyes = FALSE
var/can_intake_reagents = TRUE
var/has_lips = TRUE
var/forehead_graffiti
var/graffiti_style
-/obj/item/organ/external/head/proc/get_eye_overlay()
- if(glowing_eyes || owner?.has_chemical_effect(CE_GLOWINGEYES, 1))
- var/obj/item/organ/internal/eyes/eyes = owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes)
- if(eyes)
- return eyes.get_special_overlay()
-
-/obj/item/organ/external/head/proc/get_eyes()
- var/obj/item/organ/internal/eyes/eyes = owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes)
- if(eyes)
- return eyes.get_onhead_icon()
+/obj/item/organ/external/head/proc/get_organ_eyes_overlay()
+ if(!glowing_eyes && !owner?.has_chemical_effect(CE_GLOWINGEYES, 1))
+ return
+ var/obj/item/organ/internal/eyes/eyes = get_eyes_organ()
+ var/icon/eyes_icon = eyes?.get_onhead_icon() // refreshes cache key
+ if(!eyes_icon)
+ return
+ var/cache_key = "[eyes.last_eye_cache_key]-glow"
+ if(!global.eye_icon_cache[cache_key])
+ global.eye_icon_cache[cache_key] = emissive_overlay(eyes_icon, "")
+ return global.eye_icon_cache[cache_key]
/obj/item/organ/external/head/examine(mob/user)
. = ..()
@@ -75,11 +75,10 @@
/obj/item/organ/external/head/get_agony_multiplier()
return (owner && owner.headcheck(organ_tag)) ? 1.50 : 1
-/obj/item/organ/external/head/set_bodytype(decl/bodytype/new_bodytype, override_material = null)
+/obj/item/organ/external/head/set_bodytype(decl/bodytype/new_bodytype, override_material = null, apply_to_internal_organs = TRUE)
. = ..()
- has_lips = bodytype.appearance_flags & HAS_LIPS
+ has_lips = (bodytype.appearance_flags & HAS_LIPS)
can_intake_reagents = !(bodytype.body_flags & BODY_FLAG_NO_EAT)
- draw_eyes = bodytype.has_eyes
/obj/item/organ/external/head/take_external_damage(brute, burn, damage_flags, used_weapon, override_droplimb)
. = ..()
@@ -90,75 +89,53 @@
if (burn_dam > 40)
disfigure(BURN)
-/obj/item/organ/external/head/on_update_icon()
-
- ..()
-
+/obj/item/organ/external/head/proc/get_eyes_organ()
+ RETURN_TYPE(/obj/item/organ/internal/eyes)
if(owner)
- // Base eye icon.
- if(draw_eyes)
- var/icon/I = get_eyes()
- if(I)
- overlays |= I
- mob_icon.Blend(I, ICON_OVERLAY)
-
- // Floating eyes or other effects.
- var/image/eye_glow = get_eye_overlay()
- if(eye_glow)
- overlays |= eye_glow
-
- if(owner.lip_style && (bodytype.appearance_flags & HAS_LIPS))
- var/icon/lip_icon = new/icon(bodytype.get_lip_icon(owner) || 'icons/mob/human_races/species/lips.dmi', "lipstick_s")
- lip_icon.Blend(owner.lip_style, ICON_MULTIPLY)
- overlays |= lip_icon
- mob_icon.Blend(lip_icon, ICON_OVERLAY)
-
- overlays |= get_hair_icon()
-
- return mob_icon
-
-/obj/item/organ/external/head/proc/get_hair_icon()
- var/image/res = image(bodytype.icon_template,"")
- if(!owner)
- return res
+ return owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes)
+ return locate(/obj/item/organ/internal/eyes) in contents
- if(owner.f_style)
- var/decl/sprite_accessory/facial_hair_style = GET_DECL(owner.f_style)
+/obj/item/organ/external/head/get_icon_cache_key_components()
+ . = ..()
+ if(bodytype.has_eyes)
+ . += "_eyes[get_eyes_organ()?.eye_colour][bodytype.eye_icon]"
+ if(bodytype.appearance_flags & HAS_LIPS)
+ var/lip_icon = bodytype.get_lip_icon(owner)
+ if(lip_icon)
+ . += "_lips[lip_icon][owner?.lip_color || "skip"]"
+
+/obj/item/organ/external/head/generate_mob_icon()
+ var/icon/ret = ..()
+ // Eye icon.
+ if(bodytype.has_eyes)
+ var/icon/eyes_icon = get_eyes_organ()?.get_onhead_icon()
+ if(eyes_icon)
+ ret.Blend(eyes_icon, ICON_OVERLAY)
+ // Lip icon.
+ if(owner && (bodytype.appearance_flags & HAS_LIPS))
+ var/lip_icon = bodytype.get_lip_icon(owner)
+ if(lip_icon)
+ var/lip_color = owner?.lip_color
+ if(lip_color)
+ var/icon/lip_appearance = new/icon(lip_icon, "lipstick_s")
+ lip_appearance.Blend(lip_color || COLOR_BLACK, ICON_MULTIPLY)
+ ret.Blend(lip_appearance, ICON_OVERLAY)
+ return ret
+
+/obj/item/organ/external/head/get_mob_overlays()
+ . = ..()
+ var/image/eye_glow = get_organ_eyes_overlay()
+ if(eye_glow)
+ LAZYADD(., eye_glow)
+ if(!owner)
+ return
+ var/facial_hairstyle = owner.get_facial_hairstyle()
+ if(facial_hairstyle)
+ var/decl/sprite_accessory/facial_hair_style = resolve_accessory_to_decl(facial_hairstyle)
if(facial_hair_style?.accessory_is_available(owner, species, bodytype))
- var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
- if(owner.facial_hair_colour && facial_hair_style.do_colouration)
- facial_s.Blend(owner.facial_hair_colour, facial_hair_style.blend)
- res.overlays |= facial_s
-
- if(owner.h_style)
- var/decl/sprite_accessory/hair/hair_style = GET_DECL(owner.h_style)
- var/obj/item/head = owner.get_equipped_item(slot_head_str)
- if(head && (head.flags_inv & BLOCK_HEAD_HAIR))
- if(!(hair_style.flags & VERY_SHORT))
- hair_style = GET_DECL(/decl/sprite_accessory/hair/short)
+ LAZYADD(., image(facial_hair_style.get_cached_accessory_icon(src, owner.get_facial_hair_colour())))
+ var/hairstyle = owner.get_hairstyle()
+ if(hairstyle)
+ var/decl/sprite_accessory/hair/hair_style = resolve_accessory_to_decl(hairstyle)
if(hair_style?.accessory_is_available(owner, species, bodytype))
- var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
- if(hair_style.do_colouration && hair_colour)
- hair_s.Blend(hair_colour, hair_style.blend)
- res.overlays |= hair_s
-
- for (var/M in markings)
- var/decl/sprite_accessory/marking/mark_style = GET_DECL(M)
- if (mark_style.draw_target == MARKING_TARGET_HAIR)
-
- var/mark_color
- if (!mark_style.do_colouration && owner.h_style)
- var/decl/sprite_accessory/hair/hair_style = GET_DECL(owner.h_style)
- if ((~hair_style.flags & HAIR_BALD) && hair_colour)
- mark_color = hair_colour
- else //only baseline human skin tones; others will need species vars for coloration
- mark_color = rgb(200 + skin_tone, 150 + skin_tone, 123 + skin_tone)
- else
- mark_color = markings[M]
- res.overlays |= mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color)
- icon_cache_key += "[M][mark_color]"
-
- return res
-
-/obj/item/organ/external/head/no_eyes
- draw_eyes = FALSE
+ LAZYADD(., image(hair_style.get_cached_accessory_icon(src, owner.get_hair_colour())))
diff --git a/code/modules/organs/external/tail.dm b/code/modules/organs/external/tail.dm
index 53b2a2fcb29..39e3ab99ee5 100644
--- a/code/modules/organs/external/tail.dm
+++ b/code/modules/organs/external/tail.dm
@@ -15,12 +15,17 @@
limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE
skip_body_icon_draw = TRUE
- var/tail // Name of tail state in species effects icon file.
- var/tail_animation // If set, the icon to obtain tail animation states from.
+ /// Name of tail state in species effects icon file. Used as a prefix for animated states.
+ var/tail
+ /// Icon file to use for tail states (including animations)
+ var/tail_icon
+ /// Blend mode for overlaying colour on the tail.
var/tail_blend = ICON_ADD
+ /// State modifier for hair overlays.
var/tail_hair
+ /// Blend mode for hair overlays.
var/tail_hair_blend = ICON_ADD
- var/tail_icon = 'icons/effects/species.dmi'
+ /// How many random tail states are available for animations.
var/tail_states = 1
/obj/item/organ/external/tail/do_uninstall(in_place, detach, ignore_children, update_icon)
@@ -38,9 +43,6 @@
/obj/item/organ/external/tail/proc/get_tail()
return tail
-/obj/item/organ/external/tail/proc/get_tail_animation()
- return tail_animation
-
/obj/item/organ/external/tail/proc/get_tail_icon()
return tail_icon
diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm
index 444a8247693..28b6da02c03 100644
--- a/code/modules/organs/internal/_internal.dm
+++ b/code/modules/organs/internal/_internal.dm
@@ -2,6 +2,7 @@
INTERNAL ORGANS DEFINES
****************************************************/
/obj/item/organ/internal
+ abstract_type = /obj/item/organ/internal
scale_max_damage_to_species_health = TRUE
// Damage healing vars (moved here from brains)
@@ -23,6 +24,9 @@
var/min_bruised_damage = 10 // Damage before considered bruised
var/damage_reduction = 0.5 //modifier for internal organ injury
+ /// Whether or not we should try to transfer a brainmob when removed or replaced in a mob.
+ var/transfer_brainmob_with_organ = FALSE
+
/obj/item/organ/internal/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype)
if(!alive_icon)
alive_icon = initial(icon_state)
@@ -252,3 +256,43 @@
var/obj/item/organ/O = last_owner.get_organ(parent_organ)
if(O)
O.vital_to_owner = null
+
+// Stub to allow brain interfaces to return their wrapped brainmob.
+/obj/item/organ/internal/proc/get_brainmob(var/create_if_missing = FALSE)
+ return
+
+/obj/item/organ/internal/proc/transfer_key_to_brainmob(var/mob/living/M, var/update_brainmob = TRUE)
+ var/mob/living/brainmob = get_brainmob(create_if_missing = TRUE)
+ if(brainmob)
+ transfer_key_from_mob_to_mob(M, brainmob)
+ if(update_brainmob)
+ brainmob.SetName(M.real_name)
+ brainmob.real_name = M.real_name
+ brainmob.dna = M.dna?.Clone()
+ brainmob.languages = M.languages?.Copy()
+ brainmob.default_language = M.default_language
+ to_chat(brainmob, SPAN_NOTICE("You feel slightly disoriented. That's normal when you're just \a [initial(src.name)]."))
+ callHook("debrain", list(brainmob))
+ return TRUE
+ return FALSE
+
+/obj/item/organ/internal/proc/get_synthetic_owner_name()
+ return "Cyborg"
+
+/obj/item/organ/internal/preserve_in_cryopod(var/obj/machinery/cryopod/pod)
+ var/mob/living/brainmob = get_brainmob()
+ return brainmob?.key
+
+// This might need revisiting to stop people successfully implanting brains in groins and transferring minds.
+/obj/item/organ/internal/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached)
+ . = ..()
+ if(transfer_brainmob_with_organ && istype(owner))
+ var/mob/living/brainmob = get_brainmob(create_if_missing = FALSE)
+ if(brainmob?.key)
+ transfer_key_from_mob_to_mob(brainmob, owner)
+
+/obj/item/organ/internal/do_uninstall(in_place, detach, ignore_children, update_icon)
+ var/mob/living/victim = owner // cleared in parent proc
+ . = ..()
+ if(transfer_brainmob_with_organ && istype(victim))
+ transfer_key_to_brainmob(victim, update_brainmob = TRUE)
diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm
index 3d7801a5ff6..d84032440d0 100644
--- a/code/modules/organs/internal/brain.dm
+++ b/code/modules/organs/internal/brain.dm
@@ -9,48 +9,63 @@
throwforce = 1
throw_speed = 3
throw_range = 5
- origin_tech = "{'biotech':3}"
+ origin_tech = @'{"biotech":3}'
attack_verb = list("attacked", "slapped", "whacked")
relative_size = 85
damage_reduction = 0
scale_max_damage_to_species_health = FALSE
- var/can_use_mmi = TRUE
- var/mob/living/carbon/brain/brainmob = null
+ transfer_brainmob_with_organ = TRUE
+ var/can_use_brain_interface = TRUE
var/should_announce_brain_damage = TRUE
var/oxygen_reserve = 6
+ VAR_PRIVATE/mob/living/_brainmob = /mob/living/brain
+
+/obj/item/organ/internal/brain/get_brainmob(var/create_if_missing = FALSE)
+ if(!istype(_brainmob) && create_if_missing)
+ initialize_brainmob()
+ if(istype(_brainmob))
+ return _brainmob
+
+/obj/item/organ/internal/brain/Initialize()
+ . = ..()
+ if(species)
+ set_max_damage(species.total_health)
+ else
+ set_max_damage(200)
+
+/obj/item/organ/internal/brain/proc/initialize_brainmob()
+ if(istype(_brainmob))
+ return
+ if(!ispath(_brainmob))
+ _brainmob = initial(_brainmob)
+ if(ispath(_brainmob))
+ _brainmob = new _brainmob(src)
+ else
+ _brainmob = null
/obj/item/organ/internal/brain/getToxLoss()
return 0
/obj/item/organ/internal/brain/set_species(species_name)
. = ..()
+ icon_state = "brain-prosthetic"
if(species)
set_max_damage(species.total_health)
else
set_max_damage(200)
/obj/item/organ/internal/brain/Destroy()
- QDEL_NULL(brainmob)
+ if(istype(_brainmob))
+ QDEL_NULL(_brainmob)
. = ..()
-/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H)
-
- if(!brainmob)
- brainmob = new(src)
- brainmob.SetName(H.real_name)
- brainmob.real_name = H.real_name
- brainmob.dna = H.dna.Clone()
- brainmob.timeofhostdeath = H.timeofdeath
-
- if(H.mind)
- H.mind.transfer_to(brainmob)
-
- to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].")
- callHook("debrain", list(brainmob))
-
-/obj/item/organ/internal/brain/examine(mob/user)
+/obj/item/organ/internal/brain/examine(mob/user, var/distance)
. = ..()
- if(brainmob && brainmob.client)//if thar be a brain inside... the brain.
+ if(distance <= 1)
+ show_brain_status(user)
+
+/obj/item/organ/internal/brain/proc/show_brain_status(mob/user)
+ if(istype(_brainmob) && _brainmob?.client) //if thar be a brain inside... the brain.
to_chat(user, "You can feel the small spark of life still left in this one.")
else
to_chat(user, "This one seems particularly lifeless. Perhaps it will regain some of its luster later..")
@@ -67,21 +82,6 @@
if(!(. = ..()))
return
-/obj/item/organ/internal/brain/on_remove_effects()
- if(istype(owner))
- transfer_identity(owner)
- return ..()
-
-/obj/item/organ/internal/brain/on_add_effects()
- if(brainmob)
- if(brainmob.mind)
- if(owner.key)
- owner.ghostize()
- brainmob.mind.transfer_to(owner)
- else
- owner.key = brainmob.key
- return ..()
-
/obj/item/organ/internal/brain/can_recover()
return !(status & ORGAN_DEAD)
@@ -172,7 +172,7 @@
SET_STATUS_MAX(owner, STAT_PARA, damage_secondary)
SET_STATUS_MAX(owner, STAT_WEAK, round(damage, 1))
if(prob(30))
- addtimer(CALLBACK(src, .proc/brain_damage_callback, damage), rand(6, 20) SECONDS, TIMER_UNIQUE)
+ addtimer(CALLBACK(src, PROC_REF(brain_damage_callback), damage), rand(6, 20) SECONDS, TIMER_UNIQUE)
/obj/item/organ/internal/brain/proc/brain_damage_callback(var/damage) //Confuse them as a somewhat uncommon aftershock. Side note: Only here so a spawn isn't used. Also, for the sake of a unique timer.
if(!QDELETED(owner))
@@ -221,7 +221,7 @@
/obj/item/organ/internal/brain/surgical_fix(mob/user)
var/blood_volume = owner.get_blood_oxygenation()
if(blood_volume < BLOOD_VOLUME_SURVIVE)
- to_chat(user, "Parts of [src] didn't survive the procedure due to lack of air supply!")
+ to_chat(user, SPAN_DANGER("Parts of \the [src] didn't survive the procedure due to lack of air supply!"))
set_max_damage(FLOOR(max_damage - 0.25*damage))
heal_damage(damage)
@@ -229,4 +229,9 @@
. = (species.total_health - max_damage)/species.total_health
/obj/item/organ/internal/brain/get_mechanical_assisted_descriptor()
- return "machine-interface [name]"
\ No newline at end of file
+ return "machine-interface [name]"
+
+/obj/item/organ/internal/brain/die()
+ if(istype(_brainmob) && _brainmob.stat != DEAD)
+ _brainmob.death()
+ ..()
diff --git a/code/modules/organs/internal/brain_computer.dm b/code/modules/organs/internal/brain_computer.dm
new file mode 100644
index 00000000000..3d298b04b30
--- /dev/null
+++ b/code/modules/organs/internal/brain_computer.dm
@@ -0,0 +1,92 @@
+// Robobrain.
+/obj/item/organ/internal/brain/robotic
+ name = "computer intelligence core"
+ desc = "The pinnacle of artifical intelligence technology, conveniently stored in a fist-sized cube."
+ icon = 'icons/obj/items/brain_interface_robotic.dmi'
+ origin_tech = @'{"engineering":4,"materials":4,"wormholes":2,"programming":4}'
+ material = /decl/material/solid/metal/steel
+ matter = list(
+ /decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE,
+ /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE,
+ /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE
+ )
+ can_use_brain_interface = FALSE
+ var/searching = FALSE
+ var/brain_name
+
+/obj/item/organ/internal/brain/robotic/handle_severe_damage()
+ return // TODO: computer maladies
+
+/obj/item/organ/internal/brain/robotic/handle_disabilities()
+ return // TODO: computer maladies
+
+/obj/item/organ/internal/brain/robotic/Initialize()
+ . = ..()
+ set_bodytype(/decl/bodytype/prosthetic/basic_human)
+ update_icon()
+ brain_name = "[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[random_id(type,1000,9999)]"
+ SetName("[name] ([brain_name])")
+
+/obj/item/organ/internal/brain/robotic/initialize_brainmob()
+ ..()
+ if(istype(_brainmob))
+ _brainmob.SetName(brain_name)
+ _brainmob.add_language(/decl/language/machine)
+
+/obj/item/organ/internal/brain/robotic/on_update_icon()
+ var/mob/living/brainmob = get_brainmob()
+ icon_state = get_world_inventory_state()
+ if(!searching)
+ if(!brainmob?.key || brainmob.stat == DEAD)
+ icon_state = "[icon_state]-dead"
+ else
+ icon_state = "[icon_state]-full"
+
+/obj/item/organ/internal/brain/robotic/attack_self(mob/user)
+ var/mob/living/brainmob = get_brainmob(create_if_missing = TRUE)
+ if(!brainmob?.key && !searching)
+ to_chat(user, SPAN_NOTICE("You press the power button and boot up \the [src]."))
+ searching = TRUE
+ update_icon()
+ var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/machine_intelligence)
+ G.request_player(brainmob, "Someone is requesting a personality for a [name].", 1 MINUTE)
+ addtimer(CALLBACK(src, PROC_REF(reset_search)), 1 MINUTE)
+ return TRUE
+ . = ..()
+
+/obj/item/organ/internal/brain/robotic/proc/reset_search()
+ searching = FALSE
+ update_icon()
+ var/mob/living/brainmob = get_brainmob()
+ if(!brainmob?.key)
+ visible_message(SPAN_WARNING("\The [src] emits a series of loud beeps, indicating a failure to boot. Try again in a few minutes."))
+
+/obj/item/organ/internal/brain/robotic/attack_ghost(var/mob/observer/ghost/user)
+ var/mob/living/brainmob = get_brainmob(create_if_missing = TRUE)
+ if(brainmob?.key)
+ to_chat(user, SPAN_WARNING("\The [src] is already inhabited; there's no room for you!"))
+ return TRUE
+
+ var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/machine_intelligence)
+ if(G.assess_candidate(user))
+ var/response = alert(user, "Are you sure you wish to possess \the [src]?", "Possess [capitalize(name)]", "Yes", "No")
+ if(response == "Yes" && brainmob && !brainmob?.key && G.assess_candidate(user))
+ G.transfer_personality(user, brainmob)
+
+/obj/item/organ/internal/brain/robotic/show_brain_status(mob/user)
+ var/mob/living/brainmob = get_brainmob()
+ if(brainmob?.key)
+ switch(brainmob.stat)
+ if(CONSCIOUS)
+ if(!brainmob.client)
+ to_chat(user, SPAN_WARNING("It appears to be in stand-by mode."))
+ if(UNCONSCIOUS)
+ to_chat(user, SPAN_WARNING("It doesn't seem to be responsive."))
+ if(DEAD)
+ to_chat(user, SPAN_WARNING("It appears to be completely inactive."))
+ else
+ to_chat(user, SPAN_WARNING("It appears to be completely inactive."))
+
+/obj/item/organ/internal/brain/robotic/get_synthetic_owner_name()
+ return "Robot"
diff --git a/code/modules/organs/internal/cell.dm b/code/modules/organs/internal/cell.dm
new file mode 100644
index 00000000000..b9d478150f1
--- /dev/null
+++ b/code/modules/organs/internal/cell.dm
@@ -0,0 +1,96 @@
+/obj/item/organ/internal/cell
+ name = "microbattery"
+ desc = "A small, powerful cell for use in fully prosthetic bodies."
+ icon_state = "cell"
+ dead_icon = "cell_bork"
+ organ_tag = BP_CELL
+ parent_organ = BP_CHEST
+ var/open
+ var/obj/item/cell/cell = /obj/item/cell/hyper
+ //at 0.8 completely depleted after 60ish minutes of constant walking or 130 minutes of standing still
+ var/servo_cost = 0.8
+
+/obj/item/organ/internal/cell/Initialize()
+ if(ispath(cell))
+ cell = new cell(src)
+ . = ..()
+
+/obj/item/organ/internal/cell/proc/percent()
+ if(!cell)
+ return 0
+ return get_charge()/cell.maxcharge * 100
+
+/obj/item/organ/internal/cell/proc/get_charge()
+ if(!cell)
+ return 0
+ if(status & ORGAN_DEAD)
+ return 0
+ return round(cell.charge*(1 - damage/max_damage))
+
+/obj/item/organ/internal/cell/proc/checked_use(var/amount)
+ if(!is_usable())
+ return FALSE
+ return cell && cell.checked_use(amount)
+
+/obj/item/organ/internal/cell/proc/use(var/amount)
+ if(!is_usable())
+ return 0
+ return cell && cell.use(amount)
+
+/obj/item/organ/internal/cell/proc/get_power_drain()
+ var/damage_factor = 1 + 10 * damage/max_damage
+ return servo_cost * damage_factor
+
+/obj/item/organ/internal/cell/Process()
+ ..()
+ if(!owner)
+ return
+ if(owner.stat == DEAD) //not a drain anymore
+ return
+ var/cost = get_power_drain()
+ if(world.time - owner.l_move_time < 15)
+ cost *= 2
+ if(!checked_use(cost) && owner.isSynthetic())
+ if(!owner.lying && !owner.buckled)
+ to_chat(owner, SPAN_WARNING("You don't have enough energy to function!"))
+ SET_STATUS_MAX(owner, STAT_PARA, 3)
+
+/obj/item/organ/internal/cell/emp_act(severity)
+ ..()
+ if(cell)
+ cell.emp_act(severity)
+
+/obj/item/organ/internal/cell/attackby(obj/item/W, mob/user)
+ if(IS_SCREWDRIVER(W))
+ if(open)
+ open = 0
+ to_chat(user, SPAN_NOTICE("You screw the battery panel in place."))
+ else
+ open = 1
+ to_chat(user, SPAN_NOTICE("You unscrew the battery panel."))
+
+ if(IS_CROWBAR(W))
+ if(open)
+ if(cell)
+ user.put_in_hands(cell)
+ to_chat(user, SPAN_NOTICE("You remove \the [cell] from \the [src]."))
+ cell = null
+
+ if (istype(W, /obj/item/cell))
+ if(open)
+ if(cell)
+ to_chat(user, SPAN_WARNING("There is a power cell already installed."))
+ else if(user.try_unequip(W, src))
+ cell = W
+ to_chat(user, SPAN_NOTICE("You insert \the [cell]."))
+
+/obj/item/organ/internal/cell/on_add_effects()
+ . = ..()
+ // This is very ghetto way of rebooting an IPC. TODO better way.
+ if(owner && owner.stat == DEAD)
+ owner.set_stat(CONSCIOUS)
+ owner.visible_message(SPAN_NOTICE("\The [owner] twitches visibly!"))
+
+/obj/item/organ/internal/cell/listen()
+ if(get_charge())
+ return "faint hum of the power bank"
diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm
index f5bc6dd2980..bdb11a3dd1f 100644
--- a/code/modules/organs/internal/eyes.dm
+++ b/code/modules/organs/internal/eyes.dm
@@ -33,40 +33,39 @@
/obj/item/organ/internal/eyes/robot/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype)
. = ..()
- verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color
+ verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow
-/obj/item/organ/internal/eyes/proc/get_eye_cache_key()
+/obj/item/organ/internal/eyes/proc/get_onhead_icon()
last_cached_eye_colour = eye_colour
last_eye_cache_key = "[type]-[bodytype.eye_icon]-[last_cached_eye_colour]-[bodytype.eye_offset]"
- return last_eye_cache_key
-
-/obj/item/organ/internal/eyes/proc/get_onhead_icon()
- var/cache_key = get_eye_cache_key()
- if(!human_icon_cache[cache_key])
+ if(!bodytype.eye_icon)
+ return
+ if(!global.eye_icon_cache[last_eye_cache_key])
var/icon/eyes_icon = icon(icon = bodytype.eye_icon, icon_state = "")
if(bodytype.eye_offset)
eyes_icon.Shift(NORTH, bodytype.eye_offset)
if(bodytype.apply_eye_colour)
eyes_icon.Blend(last_cached_eye_colour, bodytype.eye_blend)
- human_icon_cache[cache_key] = eyes_icon
- return human_icon_cache[cache_key]
-
-/obj/item/organ/internal/eyes/proc/get_special_overlay()
- var/icon/I = get_onhead_icon()
- if(I)
- var/cache_key = "[last_eye_cache_key]-glow"
- if(!human_icon_cache[cache_key])
- human_icon_cache[cache_key] = emissive_overlay(I, "")
- return human_icon_cache[cache_key]
+ global.eye_icon_cache[last_eye_cache_key] = eyes_icon
+ return global.eye_icon_cache[last_eye_cache_key]
/obj/item/organ/internal/eyes/proc/update_colour()
if(!owner)
return
+ // Update our eye colour.
+ var/new_eye_colour
if(owner.has_chemical_effect(CE_GLOWINGEYES, 1))
- eye_colour = "#75bdd6" // blue glow, hardcoded for now.
+ new_eye_colour = "#75bdd6" // blue glow, hardcoded for now.
else
- eye_colour = owner.eye_colour
+ new_eye_colour = owner.get_eye_colour()
+
+ if(new_eye_colour && eye_colour != new_eye_colour)
+ eye_colour = new_eye_colour
+ // Clear the head cache key so they can update their cached icon.
+ var/obj/item/organ/external/head/head = GET_EXTERNAL_ORGAN(owner, BP_HEAD)
+ if(istype(head))
+ head._icon_cache_key = null
/obj/item/organ/internal/eyes/take_internal_damage(amount, var/silent=0)
var/oldbroken = is_broken()
@@ -92,16 +91,16 @@
/obj/item/organ/internal/eyes/do_install(mob/living/carbon/human/target, affected, in_place, update_icon, detached)
// Apply our eye colour to the target.
if(istype(target) && eye_colour)
- target.eye_colour = eye_colour
+ target.set_eye_colour(eye_colour, skip_update = TRUE)
target.update_eyes(update_icons = update_icon)
if(owner && BP_IS_PROSTHETIC(src))
- verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color
+ verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow
. = ..()
/obj/item/organ/internal/eyes/do_uninstall(in_place, detach, ignore_children, update_icon)
. = ..()
- verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color
+ verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
verbs -= /obj/item/organ/internal/eyes/proc/toggle_eye_glow
// TODO: FIND A BETTER WAY TO DO THIS
@@ -111,36 +110,36 @@
if(BP_IS_PROSTHETIC(src))
name = "optical sensor"
icon = 'icons/obj/robot_component.dmi'
- verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color
+ verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow
else
name = initial(name)
icon = initial(icon)
- verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color
+ verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
verbs -= /obj/item/organ/internal/eyes/proc/toggle_eye_glow
update_colour()
/obj/item/organ/internal/eyes/get_mechanical_assisted_descriptor()
return "retinal overlayed [name]"
-/obj/item/organ/internal/eyes/proc/change_eye_color()
+/obj/item/organ/internal/eyes/proc/change_eye_color_verb()
set name = "Change Eye Color"
set desc = "Changes your robotic eye color."
set category = "IC"
set src in usr
if(!owner || !BP_IS_PROSTHETIC(src))
- verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color
+ verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
return
if(owner.incapacitated())
return
- var/new_eyes = input("Please select eye color.", "Eye Color", owner.eye_colour) as color|null
- if(new_eyes && do_after(owner, 10) && owner.change_eye_color(new_eyes))
+ var/new_eyes = input("Please select eye color.", "Eye Color", owner.get_eye_colour()) as color|null
+ if(new_eyes && do_after(owner, 10) && owner.set_eye_colour(new_eyes))
update_colour()
// Finally, update the eye icon on the mob.
- owner.refresh_visible_overlays()
+ owner.try_refresh_visible_overlays()
owner.visible_message(SPAN_NOTICE("\The [owner] changes their eye color."),SPAN_NOTICE("You change your eye color."),)
/obj/item/organ/internal/eyes/proc/toggle_eye_glow()
@@ -160,4 +159,4 @@
var/obj/item/organ/external/head/head = owner.get_organ(BP_HEAD, /obj/item/organ/external/head)
if(head)
head.glowing_eyes = !head.glowing_eyes
- owner.refresh_visible_overlays()
+ owner.try_refresh_visible_overlays()
diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm
index b8a1e9d9d8b..be7f416b0d4 100644
--- a/code/modules/organs/internal/heart.dm
+++ b/code/modules/organs/internal/heart.dm
@@ -5,13 +5,13 @@
icon_state = "heart-on"
dead_icon = "heart-off"
prosthetic_icon = "heart-prosthetic"
+ damage_reduction = 0.7
+ relative_size = 5
+ max_damage = 45
var/pulse = PULSE_NORM
var/heartbeat = 0
var/beat_sound = 'sound/effects/singlebeat.ogg'
var/tmp/next_blood_squirt = 0
- damage_reduction = 0.7
- relative_size = 5
- max_damage = 45
var/open
var/list/external_pump
@@ -70,7 +70,7 @@
return
else //and if it's beating, let's see if it should
var/should_stop = prob(80) && owner.get_blood_circulation() < BLOOD_VOLUME_SURVIVE //cardiovascular shock, not enough liquid to pump
- should_stop = should_stop || prob(max(0, owner.getBrainLoss() - owner.maxHealth * 0.75)) //brain failing to work heart properly
+ should_stop = should_stop || prob(max(0, owner.getBrainLoss() - owner.get_max_health() * 0.75)) //brain failing to work heart properly
should_stop = should_stop || (prob(5) && pulse == PULSE_THREADY) //erratic heart patterns, usually caused by oxyloss
if(should_stop) // The heart has stopped due to going into traumatic or cardiovascular shock.
to_chat(owner, "Your heart has stopped!")
diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm
index a5e4ca1812e..a0dcbf6e66e 100644
--- a/code/modules/organs/internal/lungs.dm
+++ b/code/modules/organs/internal/lungs.dm
@@ -271,16 +271,16 @@
/obj/item/organ/internal/lungs/proc/handle_temperature_effects(datum/gas_mixture/breath)
// Hot air hurts :(
- var/cold_1 = species.get_species_temperature_threshold(COLD_LEVEL_1)
- var/heat_1 = species.get_species_temperature_threshold(HEAT_LEVEL_1)
+ var/cold_1 = bodytype.get_body_temperature_threshold(COLD_LEVEL_1)
+ var/heat_1 = bodytype.get_body_temperature_threshold(HEAT_LEVEL_1)
if((breath.temperature < cold_1 || breath.temperature > heat_1) && !(MUTATION_COLD_RESISTANCE in owner.mutations))
var/damage = 0
if(breath.temperature <= cold_1)
if(prob(20))
to_chat(owner, "You feel your face freezing and icicles forming in your lungs!")
- if(breath.temperature < species.get_species_temperature_threshold(COLD_LEVEL_3))
+ if(breath.temperature < bodytype.get_body_temperature_threshold(COLD_LEVEL_3))
damage = COLD_GAS_DAMAGE_LEVEL_3
- else if(breath.temperature < species.get_species_temperature_threshold(COLD_LEVEL_2))
+ else if(breath.temperature < bodytype.get_body_temperature_threshold(COLD_LEVEL_2))
damage = COLD_GAS_DAMAGE_LEVEL_2
else
damage = COLD_GAS_DAMAGE_LEVEL_1
@@ -294,9 +294,9 @@
if(prob(20))
to_chat(owner, "You feel your face burning and a searing heat in your lungs!")
- if(breath.temperature < species.get_species_temperature_threshold(HEAT_LEVEL_2))
+ if(breath.temperature < bodytype.get_body_temperature_threshold(HEAT_LEVEL_2))
damage = HEAT_GAS_DAMAGE_LEVEL_1
- else if(breath.temperature < species.get_species_temperature_threshold(HEAT_LEVEL_3))
+ else if(breath.temperature < bodytype.get_body_temperature_threshold(HEAT_LEVEL_3))
damage = HEAT_GAS_DAMAGE_LEVEL_2
else
damage = HEAT_GAS_DAMAGE_LEVEL_3
@@ -322,10 +322,14 @@
// log_debug("Breath: [breath.temperature], [src]: [bodytemperature], Adjusting: [temp_adj]")
owner.bodytemperature += temp_adj
- else if(breath.temperature >= species.heat_discomfort_level)
- species.get_environment_discomfort(owner,"heat")
- else if(breath.temperature <= species.cold_discomfort_level)
- species.get_environment_discomfort(owner,"cold")
+ else
+ // Get root bodytype as discomfort messages are not specifically related to the lungs.
+ var/decl/bodytype/root_bodytype = owner?.get_bodytype() || bodytype
+ if(root_bodytype)
+ if(breath.temperature >= root_bodytype.heat_discomfort_level)
+ root_bodytype.get_environment_discomfort(owner,"heat")
+ else if(breath.temperature <= root_bodytype.cold_discomfort_level)
+ root_bodytype.get_environment_discomfort(owner,"cold")
/obj/item/organ/internal/lungs/listen()
if(owner.failed_last_breath || !active_breathing)
diff --git a/code/modules/organs/internal/posibrain.dm b/code/modules/organs/internal/posibrain.dm
deleted file mode 100644
index 8d3fc31f8a7..00000000000
--- a/code/modules/organs/internal/posibrain.dm
+++ /dev/null
@@ -1,333 +0,0 @@
-/obj/item/organ/internal/posibrain
- name = "positronic brain"
- desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
- icon = 'icons/obj/assemblies.dmi'
- icon_state = "posibrain"
- organ_tag = BP_POSIBRAIN
- parent_organ = BP_CHEST
- force = 1.0
- w_class = ITEM_SIZE_NORMAL
- throwforce = 1
- throw_speed = 3
- throw_range = 5
- origin_tech = "{'engineering':4,'materials':4,'wormholes':2,'programming':4}"
- attack_verb = list("attacked", "slapped", "whacked")
- material = /decl/material/solid/metal/steel
- matter = list(
- /decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE,
- /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE,
- /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE
- )
- relative_size = 60
- req_access = list(access_robotics)
- organ_properties = ORGAN_PROP_PROSTHETIC //triggers robotization on init
- scale_max_damage_to_species_health = FALSE
-
- var/mob/living/carbon/brain/brainmob = null
- var/searching = 0
- var/askDelay = 60 SECONDS
-
-/obj/item/organ/internal/posibrain/Initialize()
- . = ..()
- if(!brainmob && iscarbon(loc))
- init(loc) //Not sure why we're creating a braimob on load, and also why not installing it in the owner...
-
-/obj/item/organ/internal/posibrain/proc/init(var/mob/living/carbon/H)
- if(brainmob)
- return
- brainmob = new(src)
- if(istype(H))
- brainmob.SetName(H.real_name)
- brainmob.real_name = H.real_name
- brainmob.dna = H.dna.Clone()
- brainmob.add_language(/decl/language/human/common)
- brainmob.add_language(/decl/language/binary)
-
-/obj/item/organ/internal/posibrain/Destroy()
- QDEL_NULL(brainmob)
- return ..()
-
-/obj/item/organ/internal/posibrain/attack_self(mob/user)
- if(brainmob && !brainmob.key && searching == 0)
- //Start the process of searching for a new user.
- to_chat(user, "You carefully locate the manual activation switch and start the positronic brain's boot process.")
- icon_state = "posibrain-searching"
- src.searching = 1
- var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/positronic_brain)
- G.request_player(brainmob, "Someone is requesting a personality for a positronic brain.", 60 SECONDS)
- addtimer(CALLBACK(src, .proc/reset_search), askDelay)
-
-/obj/item/organ/internal/posibrain/proc/reset_search() //We give the players time to decide, then reset the timer.
- if(!brainmob?.key)
- searching = FALSE
- icon_state = "posibrain"
- visible_message(SPAN_WARNING("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?"))
-
-/obj/item/organ/internal/posibrain/attack_ghost(var/mob/observer/ghost/user)
- if(!searching || (src.brainmob && src.brainmob.key))
- return
-
- var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/positronic_brain)
- if(!G.assess_candidate(user))
- return
- var/response = alert(user, "Are you sure you wish to possess this [src]?", "Possess [src]", "Yes", "No")
- if(response == "Yes")
- G.transfer_personality(user, brainmob)
-
-/obj/item/organ/internal/posibrain/examine(mob/user)
- . = ..()
-
- var/msg = "*---------*\nThis is [html_icon(src)] \a [src]!\n[desc]\n"
-
- msg += ""
-
- if(src.brainmob && src.brainmob.key)
- switch(src.brainmob.stat)
- if(CONSCIOUS)
- if(!src.brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk
- if(UNCONSCIOUS) msg += "It doesn't seem to be responsive.\n"
- if(DEAD) msg += "It appears to be completely inactive.\n"
- else
- msg += "It appears to be completely inactive.\n"
-
- msg += "*---------*"
- to_chat(user, msg)
- return
-
-/obj/item/organ/internal/posibrain/emp_act(severity)
- if(!src.brainmob)
- return
- else
- switch(severity)
- if(1)
- src.brainmob.emp_damage += rand(20,30)
- if(2)
- src.brainmob.emp_damage += rand(10,20)
- if(3)
- src.brainmob.emp_damage += rand(0,10)
- ..()
-
-/obj/item/organ/internal/posibrain/proc/PickName()
- src.brainmob.SetName("[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[random_id(type,100,999)]")
- src.brainmob.real_name = src.brainmob.name
-
-/obj/item/organ/internal/posibrain/on_update_icon()
- . = ..()
- if(src.brainmob && src.brainmob.key)
- icon_state = "posibrain-occupied"
- else
- icon_state = "posibrain"
-
-/obj/item/organ/internal/posibrain/proc/transfer_identity(var/mob/living/carbon/H)
- if(H && H.mind)
- brainmob.set_stat(CONSCIOUS)
- H.mind.transfer_to(brainmob)
- brainmob.SetName(H.real_name)
- brainmob.real_name = H.real_name
- brainmob.dna = H.dna.Clone()
-
- update_icon()
-
- to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].")
- callHook("debrain", list(brainmob))
-
-/obj/item/organ/internal/posibrain/on_add_effects()
- if(brainmob)
- if(brainmob.mind)
- if(owner.key)
- owner.ghostize()
- brainmob.mind.transfer_to(owner)
- else if(brainmob.key) //posibrain init with a dummy brainmob for some reasons, so gotta do this or its gonna disconnect the client on mob transformation
- owner.key = brainmob.key
- return ..()
-
-/obj/item/organ/internal/posibrain/on_remove_effects()
- if(istype(owner))
- transfer_identity(owner)
- return ..()
-
-/obj/item/organ/internal/posibrain/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached)
- if(!(. = ..()))
- return
- if(istype(owner))
- SetName(initial(name)) //Reset the organ's name to stay coherent if we're put back into someone's skull
-
-/obj/item/organ/internal/posibrain/do_uninstall(in_place, detach, ignore_children)
- if(!in_place && istype(owner) && name == initial(name))
- SetName("\the [owner.real_name]'s [initial(name)]")
- return ..()
-
-/obj/item/organ/internal/cell
- name = "microbattery"
- desc = "A small, powerful cell for use in fully prosthetic bodies."
- icon_state = "cell"
- dead_icon = "cell_bork"
- organ_tag = BP_CELL
- parent_organ = BP_CHEST
- organ_properties = ORGAN_PROP_PROSTHETIC //triggers robotization on init
- var/open
- var/obj/item/cell/cell = /obj/item/cell/hyper
- //at 0.8 completely depleted after 60ish minutes of constant walking or 130 minutes of standing still
- var/servo_cost = 0.8
-
-/obj/item/organ/internal/cell/Initialize()
- if(ispath(cell))
- cell = new cell(src)
- . = ..()
-
-/obj/item/organ/internal/cell/proc/percent()
- if(!cell)
- return 0
- return get_charge()/cell.maxcharge * 100
-
-/obj/item/organ/internal/cell/proc/get_charge()
- if(!cell)
- return 0
- if(status & ORGAN_DEAD)
- return 0
- return round(cell.charge*(1 - damage/max_damage))
-
-/obj/item/organ/internal/cell/proc/checked_use(var/amount)
- if(!is_usable())
- return FALSE
- return cell && cell.checked_use(amount)
-
-/obj/item/organ/internal/cell/proc/use(var/amount)
- if(!is_usable())
- return 0
- return cell && cell.use(amount)
-
-/obj/item/organ/internal/cell/proc/get_power_drain()
- var/damage_factor = 1 + 10 * damage/max_damage
- return servo_cost * damage_factor
-
-/obj/item/organ/internal/cell/Process()
- ..()
- if(!owner)
- return
- if(owner.stat == DEAD) //not a drain anymore
- return
- var/cost = get_power_drain()
- if(world.time - owner.l_move_time < 15)
- cost *= 2
- if(!checked_use(cost) && owner.isSynthetic())
- if(!owner.lying && !owner.buckled)
- to_chat(owner, "You don't have enough energy to function!")
- SET_STATUS_MAX(owner, STAT_PARA, 3)
-
-/obj/item/organ/internal/cell/emp_act(severity)
- ..()
- if(cell)
- cell.emp_act(severity)
-
-/obj/item/organ/internal/cell/attackby(obj/item/W, mob/user)
- if(IS_SCREWDRIVER(W))
- if(open)
- open = 0
- to_chat(user, "You screw the battery panel in place.")
- else
- open = 1
- to_chat(user, "You unscrew the battery panel.")
-
- if(IS_CROWBAR(W))
- if(open)
- if(cell)
- user.put_in_hands(cell)
- to_chat(user, "You remove \the [cell] from \the [src].")
- cell = null
-
- if (istype(W, /obj/item/cell))
- if(open)
- if(cell)
- to_chat(user, "There is a power cell already installed.")
- else if(user.try_unequip(W, src))
- cell = W
- to_chat(user, "You insert \the [cell].")
-
-/obj/item/organ/internal/cell/on_add_effects()
- . = ..()
- // This is very ghetto way of rebooting an IPC. TODO better way.
- if(owner && owner.stat == DEAD)
- owner.set_stat(CONSCIOUS)
- owner.visible_message("\The [owner] twitches visibly!")
-
-/obj/item/organ/internal/cell/listen()
- if(get_charge())
- return "faint hum of the power bank"
-
-// Used for an MMI or posibrain being installed into a human.
-/obj/item/organ/internal/mmi_holder
- name = "brain interface"
- icon_state = "mmi-empty"
- organ_tag = BP_BRAIN
- parent_organ = BP_HEAD
- organ_properties = ORGAN_PROP_PROSTHETIC //triggers robotization on init
- scale_max_damage_to_species_health = FALSE
- var/obj/item/mmi/stored_mmi
- var/datum/mind/persistantMind //Mind that the organ will hold on to after being removed, used for transfer_and_delete
- var/ownerckey // used in the event the owner is out of body
-
-/obj/item/organ/internal/mmi_holder/Destroy()
- stored_mmi = null
- persistantMind = null
- return ..()
-
-/obj/item/organ/internal/mmi_holder/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place)
- if(status & ORGAN_CUT_AWAY || !(. = ..()))
- return
-
- if(!stored_mmi)
- stored_mmi = new(src)
- update_from_mmi()
- persistantMind = owner.mind
- ownerckey = owner.ckey
-
-/obj/item/organ/internal/mmi_holder/proc/update_from_mmi()
-
- if(!stored_mmi.brainmob)
- stored_mmi.brainmob = new(stored_mmi)
- stored_mmi.brainobj = new(stored_mmi)
- stored_mmi.brainmob.container = stored_mmi
- stored_mmi.brainmob.real_name = owner.real_name
- stored_mmi.brainmob.SetName(stored_mmi.brainmob.real_name)
- stored_mmi.SetName("[initial(stored_mmi.name)] ([owner.real_name])")
-
- if(!owner) return
-
- name = stored_mmi.name
- desc = stored_mmi.desc
- icon = stored_mmi.icon
-
- stored_mmi.icon_state = "mmi-full"
- icon_state = stored_mmi.icon_state
-
- if(owner && owner.stat == DEAD)
- owner.set_stat(CONSCIOUS)
- owner.switch_from_dead_to_living_mob_list()
- owner.visible_message("\The [owner] twitches visibly!")
-
-/obj/item/organ/internal/mmi_holder/on_remove_effects(mob/living/last_owner)
- if(last_owner && last_owner.mind)
- persistantMind = last_owner.mind
- if(last_owner.ckey)
- ownerckey = last_owner.ckey
- . = ..()
-
-/obj/item/organ/internal/mmi_holder/proc/transfer_and_delete()
- if(stored_mmi)
- . = stored_mmi
- stored_mmi.forceMove(src.loc)
- if(persistantMind)
- persistantMind.transfer_to(stored_mmi.brainmob)
- else
- var/response = input(find_dead_player(ownerckey, 1), "Your [initial(stored_mmi.name)] has been removed from your body. Do you wish to return to life?", "Robotic Rebirth") as anything in list("Yes", "No")
- if(response == "Yes")
- persistantMind.transfer_to(stored_mmi.brainmob)
- qdel(src)
-
-//Since the mmi_holder is an horrible hacky pos we turn it into a mmi on drop, since it shouldn't exist outside a mob
-/obj/item/organ/internal/mmi_holder/dropInto(atom/destination)
- . = ..()
- if (!QDELETED(src))
- transfer_and_delete()
diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm
index f54d30964d6..d2e15775d76 100644
--- a/code/modules/organs/internal/stomach.dm
+++ b/code/modules/organs/internal/stomach.dm
@@ -104,8 +104,8 @@
qdel(M)
continue
- M.adjustBruteLoss(3)
- M.adjustFireLoss(3)
+ M.adjustBruteLoss(3, do_update_health = FALSE)
+ M.adjustFireLoss(3, do_update_health = FALSE)
M.adjustToxLoss(3)
var/digestion_product = M.get_digestion_product()
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index e620be9b5bc..5a685b7c59d 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -4,7 +4,7 @@
germ_level = 0
w_class = ITEM_SIZE_TINY
default_action_type = /datum/action/item_action/organ
- origin_tech = "{'materials':1,'biotech':1}"
+ origin_tech = @'{"materials":1,"biotech":1}'
throwforce = 2
abstract_type = /obj/item/organ
@@ -54,7 +54,7 @@
/obj/item/organ/attack_self(var/mob/user)
return (owner && loc == owner && owner == user)
-/obj/item/organ/proc/update_health()
+/obj/item/organ/proc/update_organ_health()
return
/obj/item/organ/proc/is_broken()
@@ -125,13 +125,16 @@
blood_DNA = list(dna.unique_enzymes = dna.b_type)
set_species(dna.species)
-/obj/item/organ/proc/set_bodytype(decl/bodytype/new_bodytype, override_material = null)
+/obj/item/organ/proc/set_bodytype(decl/bodytype/new_bodytype, override_material = null, apply_to_internal_organs = TRUE)
+ SHOULD_CALL_PARENT(TRUE)
if(isnull(new_bodytype))
- CRASH("Null bodytype passed to set_bodytype!")
+ PRINT_STACK_TRACE("Null bodytype passed to set_bodytype!")
+ return FALSE
if(ispath(new_bodytype, /decl/bodytype))
new_bodytype = GET_DECL(new_bodytype)
if(!istype(new_bodytype))
- CRASH("Invalid bodytype [new_bodytype]")
+ PRINT_STACK_TRACE("Invalid bodytype [new_bodytype]")
+ return FALSE
bodytype = new_bodytype
if(bodytype.modifier_string)
name = "[bodytype.modifier_string] [initial(name)]"
@@ -141,7 +144,7 @@
min_broken_damage *= bodytype.hardiness
bodytype.resize_organ(src)
set_material(override_material || bodytype.material)
- matter = bodytype.matter
+ matter = bodytype.matter?.Copy()
create_matter()
// maybe this should be a generalized repopulate_reagents helper??
if(reagents)
@@ -150,6 +153,7 @@
if(bodytype.body_flags & BODY_FLAG_NO_DNA)
QDEL_NULL(dna)
reset_status()
+ return TRUE
/obj/item/organ/proc/set_species(specie_name)
vital_to_owner = null // This generally indicates the owner mob is having species set, and this value may be invalidated.
@@ -198,7 +202,7 @@
//dead already, no need for more processing
if(status & ORGAN_DEAD)
return
- // Don't process if we're in a freezer, an MMI or a stasis bag.or a freezer or something I dunno
+ // Don't process if we're in a freezer, an interface or a stasis bag.
if(is_preserved())
return
//Process infections
@@ -211,7 +215,7 @@
if(reagents.has_reagent(/decl/material/liquid/blood))
blood_splatter(get_turf(src), src, 1)
reagents.remove_any(0.1)
- if(config.organs_decay)
+ if(get_config_value(/decl/config/toggle/health_organs_decay))
take_general_damage(rand(1,3))
germ_level += rand(2,6)
if(germ_level >= INFECTION_LEVEL_TWO)
@@ -244,11 +248,18 @@
ailment.was_treated_by_chem_effect()
/obj/item/organ/proc/is_preserved()
- if(istype(loc,/obj/item/organ))
+ if(istype(loc, /obj/item/organ))
var/obj/item/organ/O = loc
return O.is_preserved()
- else
- return (istype(loc,/obj/item/mmi) || istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/storage/box/freezer))
+ var/static/list/preserved_types = list(
+ /obj/item/storage/box/freezer,
+ /obj/structure/closet/crate/freezer,
+ /obj/structure/closet/body_bag/cryobag
+ )
+ for(var/preserved_type in preserved_types)
+ if(istype(loc, preserved_type))
+ return TRUE
+ return FALSE
/obj/item/organ/examine(mob/user)
. = ..(user)
@@ -258,6 +269,8 @@
if(status & ORGAN_DEAD)
to_chat(user, "The decay has set into \the [src].")
+// TODO: bodytemp rework that handles this with better respect to
+// individual organs vs. expected body temperature for other organs.
/obj/item/organ/proc/handle_germ_effects()
//** Handle the effects of infections
var/germ_immunity = owner.get_immunity() //reduces the amount of times we need to call this proc
@@ -275,7 +288,7 @@
germ_level += 10
if(germ_level >= INFECTION_LEVEL_ONE)
- var/fever_temperature = (owner.get_temperature_threshold(HEAT_LEVEL_1) - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature
+ var/fever_temperature = (owner.get_mob_temperature_threshold(HEAT_LEVEL_1) - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature
owner.bodytemperature += clamp(0, (fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, fever_temperature - owner.bodytemperature)
if (germ_level >= INFECTION_LEVEL_TWO)
@@ -361,6 +374,8 @@
/obj/item/organ/proc/heal_damage(amount)
if(can_recover())
damage = clamp(0, damage - round(amount, 0.1), max_damage)
+ if(owner)
+ owner.update_health()
/obj/item/organ/attack(var/mob/target, var/mob/user)
if(BP_IS_PROSTHETIC(src) || !istype(target) || !istype(user) || (user != target && user.a_intent == I_HELP))
@@ -536,6 +551,8 @@ var/global/list/ailment_reference_cache = list()
/obj/item/organ/proc/do_install(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE)
//Make sure to force the flag accordingly
set_detached(detached)
+ if(QDELETED(src))
+ return
owner = target
vital_to_owner = null
@@ -571,7 +588,8 @@ var/global/list/ailment_reference_cache = list()
else
owner = null
vital_to_owner = null
- return src
+ if(!QDELETED(src))
+ return src
//Events handling for checks and effects that should happen when removing the organ through interactions. Called by the owner mob.
/obj/item/organ/proc/on_remove_effects(var/mob/living/last_owner)
diff --git a/code/modules/organs/prosthetics/_prosthetics.dm b/code/modules/organs/prosthetics/_prosthetics.dm
index 1b742282f6f..916eb8ea492 100644
--- a/code/modules/organs/prosthetics/_prosthetics.dm
+++ b/code/modules/organs/prosthetics/_prosthetics.dm
@@ -157,7 +157,7 @@
visible_message(
SPAN_NOTICE("\The [src] attaches \the [E] to [G.his] body!"),
SPAN_NOTICE("You attach \the [E] to your body!"))
- refresh_visible_overlays() // Not sure why this isn't called by removed(), but without it we don't update our limb appearance.
+ try_refresh_visible_overlays() // Not sure why this isn't called by removed(), but without it we don't update our limb appearance.
return TRUE
/mob/living/carbon/human/proc/detach_limb_verb()
diff --git a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm
index b91d7da5b10..588098e60f6 100644
--- a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm
+++ b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm
@@ -2,16 +2,45 @@
abstract_type = /decl/bodytype/prosthetic
icon_base = 'icons/mob/human_races/cyberlimbs/robotic.dmi'
desc = "A generic unbranded robotic prosthesis."
- limb_tech = "{'engineering':1,'materials':1,'magnets':1}"
+ limb_tech = @'{"engineering":1,"materials":1,"magnets":1}'
modifier_string = "robotic"
is_robotic = TRUE
body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_EAT
material = /decl/material/solid/metal/steel
eye_flash_mod = 1
eye_darksight_range = 2
+ associated_gender = PLURAL
+ bodyfall_sounds = list(
+ 'sound/foley/metal1.ogg'
+ )
+ has_organ = list(
+ BP_BRAIN = /obj/item/organ/internal/brain_interface,
+ BP_EYES = /obj/item/organ/internal/eyes,
+ BP_CELL = /obj/item/organ/internal/cell
+ )
+ cold_level_1 = SYNTH_COLD_LEVEL_1
+ cold_level_2 = SYNTH_COLD_LEVEL_2
+ cold_level_3 = SYNTH_COLD_LEVEL_3
+ heat_level_1 = SYNTH_HEAT_LEVEL_1
+ heat_level_2 = SYNTH_HEAT_LEVEL_2
+ heat_level_3 = SYNTH_HEAT_LEVEL_3
+ cold_discomfort_strings = null
+ heat_discomfort_level = 373.15
+ heat_discomfort_strings = list(
+ "You are dangerously close to overheating!"
+ )
/// Determines which bodyparts can use this limb.
var/list/applies_to_part
+/decl/bodytype/prosthetic/get_user_species_for_validation()
+ if(bodytype_category)
+ for(var/species_name in get_all_species())
+ var/decl/species/species = get_species_by_key(species_name)
+ for(var/decl/bodytype/bodytype_data in species.available_bodytypes)
+ if(bodytype_data.bodytype_category == bodytype_category)
+ return species_name
+ return ..()
+
/decl/bodytype/prosthetic/apply_bodytype_organ_modifications(obj/item/organ/org)
..()
BP_SET_PROSTHETIC(org)
diff --git a/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm b/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm
index 3a9be367c0c..c031736188c 100644
--- a/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm
+++ b/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm
@@ -13,6 +13,6 @@
is_robotic = FALSE
modular_limb_tier = MODULAR_BODYPART_ANYWHERE
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
DEFINE_ROBOLIMB_MODEL_ASPECTS(/decl/bodytype/prosthetic/wooden, pirate, 0)
diff --git a/code/modules/overmap/contacts/_contacts.dm b/code/modules/overmap/contacts/_contacts.dm
index 6caa410e957..600c081918d 100644
--- a/code/modules/overmap/contacts/_contacts.dm
+++ b/code/modules/overmap/contacts/_contacts.dm
@@ -88,7 +88,7 @@
pinged = TRUE
show()
animate(marker, alpha=255, 0.5 SECOND, 1, LINEAR_EASING)
- addtimer(CALLBACK(src, .proc/unping), 1 SECOND)
+ addtimer(CALLBACK(src, PROC_REF(unping)), 1 SECOND)
/datum/overmap_contact/proc/unping()
animate(marker, alpha=75, 2 SECOND, 1, LINEAR_EASING)
diff --git a/code/modules/overmap/contacts/contact_sensors.dm b/code/modules/overmap/contacts/contact_sensors.dm
index fc847367b5b..372c37b56c3 100644
--- a/code/modules/overmap/contacts/contact_sensors.dm
+++ b/code/modules/overmap/contacts/contact_sensors.dm
@@ -137,7 +137,7 @@
var/time_delay = max((SENSOR_TIME_DELAY * get_dist(linked, contact)),1)
if(!record.pinged)
- addtimer(CALLBACK(record, .proc/ping), time_delay)
+ addtimer(CALLBACK(record, PROC_REF(ping)), time_delay)
/obj/machinery/computer/ship/sensors/attackby(var/obj/item/I, var/mob/user)
. = ..()
@@ -150,11 +150,11 @@
if(tracker in trackers)
trackers -= tracker
- events_repository.unregister(/decl/observ/destroyed, tracker, src, .proc/remove_tracker)
+ events_repository.unregister(/decl/observ/destroyed, tracker, src, PROC_REF(remove_tracker))
to_chat(user, SPAN_NOTICE("You unlink the tracker in \the [P]'s buffer from \the [src]."))
return
trackers += tracker
- events_repository.register(/decl/observ/destroyed, tracker, src, .proc/remove_tracker)
+ events_repository.register(/decl/observ/destroyed, tracker, src, PROC_REF(remove_tracker))
to_chat(user, SPAN_NOTICE("You link the tracker in \the [P]'s buffer to \the [src]."))
/obj/machinery/computer/ship/sensors/proc/remove_tracker(var/obj/item/ship_tracker/tracker)
diff --git a/code/modules/overmap/contacts/tracker.dm b/code/modules/overmap/contacts/tracker.dm
index c8009002396..feb89fe461f 100644
--- a/code/modules/overmap/contacts/tracker.dm
+++ b/code/modules/overmap/contacts/tracker.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/ship_tracker.dmi'
icon_state = "disabled"
w_class = ITEM_SIZE_SMALL
-
- origin_tech = "{'magnets':3, 'programming':2}"
+
+ origin_tech = @'{"magnets":3, "programming":2}'
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT)
var/enabled = FALSE
diff --git a/code/modules/overmap/disperser/disperser_charge.dm b/code/modules/overmap/disperser/disperser_charge.dm
index 1833aadd73c..4ab02455666 100644
--- a/code/modules/overmap/disperser/disperser_charge.dm
+++ b/code/modules/overmap/disperser/disperser_charge.dm
@@ -2,7 +2,7 @@
name = "unknown disperser charge"
desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge does not have a defined purpose."
icon_state = "slug"
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
material = /decl/material/solid/metal/aluminium
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT,
diff --git a/code/modules/overmap/disperser/disperser_circuit.dm b/code/modules/overmap/disperser/disperser_circuit.dm
index f54bafa7a1f..16b2aa0bf9b 100644
--- a/code/modules/overmap/disperser/disperser_circuit.dm
+++ b/code/modules/overmap/disperser/disperser_circuit.dm
@@ -1,13 +1,13 @@
/obj/item/stock_parts/circuitboard/disperser
name = "circuitboard (obstruction field disperser control)"
build_path = /obj/machinery/computer/ship/disperser
- origin_tech = "{'engineering':2,'combat':2,'wormholes':2}"
+ origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}'
/obj/item/stock_parts/circuitboard/disperserfront
name = "circuitboard (obstruction field disperser beam generator)"
build_path = /obj/machinery/disperser/front
board_type = "machine"
- origin_tech = "{'engineering':2,'combat':2,'wormholes':2}"
+ origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}'
req_components = list (
/obj/item/stock_parts/manipulator/pico = 5
)
@@ -16,7 +16,7 @@
name = "circuitboard (obstruction field disperser fusor)"
build_path = /obj/machinery/disperser/middle
board_type = "machine"
- origin_tech = "{'engineering':2,'combat':2,'wormholes':2}"
+ origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}'
req_components = list (
/obj/item/stock_parts/subspace/crystal = 10
)
@@ -25,7 +25,7 @@
name = "circuitboard (obstruction field disperser material deconstructor)"
build_path = /obj/machinery/disperser/back
board_type = "machine"
- origin_tech = "{'engineering':2,'combat':2,'wormholes':2}"
+ origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}'
req_components = list (
/obj/item/stock_parts/capacitor/super = 5
)
\ No newline at end of file
diff --git a/code/modules/overmap/disperser/disperser_console.dm b/code/modules/overmap/disperser/disperser_console.dm
index 46166a2bdba..14105d9f912 100644
--- a/code/modules/overmap/disperser/disperser_console.dm
+++ b/code/modules/overmap/disperser/disperser_console.dm
@@ -54,9 +54,9 @@
middle = M
back = B
if(is_valid_setup())
- events_repository.register(/decl/observ/destroyed, F, src, .proc/release_links)
- events_repository.register(/decl/observ/destroyed, M, src, .proc/release_links)
- events_repository.register(/decl/observ/destroyed, B, src, .proc/release_links)
+ events_repository.register(/decl/observ/destroyed, F, src, PROC_REF(release_links))
+ events_repository.register(/decl/observ/destroyed, M, src, PROC_REF(release_links))
+ events_repository.register(/decl/observ/destroyed, B, src, PROC_REF(release_links))
return TRUE
return FALSE
@@ -68,9 +68,9 @@
return FALSE
/obj/machinery/computer/ship/disperser/proc/release_links()
- events_repository.unregister(/decl/observ/destroyed, front, src, .proc/release_links)
- events_repository.unregister(/decl/observ/destroyed, middle, src, .proc/release_links)
- events_repository.unregister(/decl/observ/destroyed, back, src, .proc/release_links)
+ events_repository.unregister(/decl/observ/destroyed, front, src, PROC_REF(release_links))
+ events_repository.unregister(/decl/observ/destroyed, middle, src, PROC_REF(release_links))
+ events_repository.unregister(/decl/observ/destroyed, back, src, PROC_REF(release_links))
front = null
middle = null
back = null
diff --git a/code/modules/overmap/events/event.dm b/code/modules/overmap/events/event.dm
index 64e0e449bdd..922924fdba5 100644
--- a/code/modules/overmap/events/event.dm
+++ b/code/modules/overmap/events/event.dm
@@ -126,13 +126,13 @@
if(!active_hazards.len)
hazard_by_turf -= T
- events_repository.unregister(/decl/observ/entered, T, src, .proc/on_turf_entered)
- events_repository.unregister(/decl/observ/exited, T, src, .proc/on_turf_exited)
+ events_repository.unregister(/decl/observ/entered, T, src, PROC_REF(on_turf_entered))
+ events_repository.unregister(/decl/observ/exited, T, src, PROC_REF(on_turf_exited))
else
hazard_by_turf |= T
hazard_by_turf[T] = active_hazards
- events_repository.register(/decl/observ/entered, T, src, .proc/on_turf_entered)
- events_repository.register(/decl/observ/exited, T, src, .proc/on_turf_exited)
+ events_repository.register(/decl/observ/entered, T, src, PROC_REF(on_turf_entered))
+ events_repository.register(/decl/observ/exited, T, src, PROC_REF(on_turf_exited))
for(var/obj/effect/overmap/visitable/ship/ship in T)
for(var/datum/event/E in ship_events[ship])
diff --git a/code/modules/overmap/ftl_shunt/computer.dm b/code/modules/overmap/ftl_shunt/computer.dm
index 14bc2933ab0..e971f2d5a38 100644
--- a/code/modules/overmap/ftl_shunt/computer.dm
+++ b/code/modules/overmap/ftl_shunt/computer.dm
@@ -74,7 +74,7 @@
plot_delay_mult = 2
delay = clamp(((jump_dist * BASE_PLOT_TIME_PER_TILE) * plot_delay_mult),1, INFINITY)
- jump_plot_timer = addtimer(CALLBACK(src, .proc/finish_plot, x, y), delay, TIMER_STOPPABLE)
+ jump_plot_timer = addtimer(CALLBACK(src, PROC_REF(finish_plot), x, y), delay, TIMER_STOPPABLE)
plotting_jump = TRUE
jump_plotted = FALSE
return delay
diff --git a/code/modules/overmap/ftl_shunt/core.dm b/code/modules/overmap/ftl_shunt/core.dm
index e9bd63a5e8d..c9ae2ac1b46 100644
--- a/code/modules/overmap/ftl_shunt/core.dm
+++ b/code/modules/overmap/ftl_shunt/core.dm
@@ -234,7 +234,7 @@
update_icon()
if(check_charge())
- jump_timer = addtimer(CALLBACK(src, .proc/execute_shunt), jump_delay, TIMER_STOPPABLE)
+ jump_timer = addtimer(CALLBACK(src, PROC_REF(execute_shunt)), jump_delay, TIMER_STOPPABLE)
return FTL_START_CONFIRMED
/obj/machinery/ftl_shunt/core/proc/calculate_jump_requirements()
@@ -270,7 +270,7 @@
return
if(use_fuel(required_fuel_joules))
- jump_timer = addtimer(CALLBACK(src, .proc/execute_shunt), jump_delay, TIMER_STOPPABLE)
+ jump_timer = addtimer(CALLBACK(src, PROC_REF(execute_shunt)), jump_delay, TIMER_STOPPABLE)
else
cancel_shunt()
return //If for some reason we don't have fuel now, just return.
@@ -281,7 +281,7 @@
var/jumpdist = get_dist(get_turf(ftl_computer.linked), destination)
var/obj/effect/portal/wormhole/W = new(destination) //Generate a wormhole effect on overmap to give some indication that something is about to happen.
QDEL_IN(W, 6 SECONDS)
- addtimer(CALLBACK(src, .proc/do_shunt, shunt_x, shunt_y, jumpdist, destination), 6 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(do_shunt), shunt_x, shunt_y, jumpdist, destination), 6 SECONDS)
jumping = TRUE
update_icon()
for(var/mob/living/carbon/M in global.living_mob_list_)
@@ -646,13 +646,13 @@
name = "circuit board (superluminal shunt)"
board_type = "machine"
build_path = /obj/machinery/ftl_shunt/core
- origin_tech = "{'programming':3,'magnets':5,'materials':5,'wormholes':5}"
+ origin_tech = @'{"programming":3,"magnets":5,"materials":5,"wormholes":5}'
additional_spawn_components = list(/obj/item/stock_parts/power/terminal = 1)
/obj/item/stock_parts/ftl_core
name = "exotic matter bridge"
desc = "The beating heart of a superluminal shunt - without this, the power to manipulate space-time is out of reach."
- origin_tech = "{'programming':3,'magnets':5,'materials':5,'wormholes':5}"
+ origin_tech = @'{"programming":3,"magnets":5,"materials":5,"wormholes":5}'
icon = 'icons/obj/items/stock_parts/stock_parts.dmi'
icon_state = "smes_coil"
color = COLOR_YELLOW
diff --git a/code/modules/overmap/internet/internet_circuitboards.dm b/code/modules/overmap/internet/internet_circuitboards.dm
index 5649be365d9..3e865580bda 100644
--- a/code/modules/overmap/internet/internet_circuitboards.dm
+++ b/code/modules/overmap/internet/internet_circuitboards.dm
@@ -2,7 +2,7 @@
name = "circuitboard (PLEXUS uplink)"
board_type = "machine"
build_path = /obj/machinery/internet_uplink
- origin_tech = "{'magnets':4,'wormholes':3,'powerstorage':3,'engineering':3}"
+ origin_tech = @'{"magnets":4,"wormholes":3,"powerstorage":3,"engineering":3}'
req_components = list(
/obj/item/stock_parts/capacitor = 2,
/obj/item/stock_parts/micro_laser = 2,
@@ -13,13 +13,13 @@
/obj/item/stock_parts/circuitboard/internet_uplink_computer
name = "circuitboard (PLEXUS uplink controller)"
build_path = /obj/machinery/computer/internet_uplink
- origin_tech = "{'programming':2,'engineering':2}"
+ origin_tech = @'{"programming":2,"engineering":2}'
/obj/item/stock_parts/circuitboard/internet_repeater
name = "circuitboard (PLEXUS repeater)"
build_path = /obj/machinery/internet_repeater
board_type = "machine"
- origin_tech = "{'magnets':3,'engineering':2,'programming':2}"
+ origin_tech = @'{"magnets":3,"engineering":2,"programming":2}'
req_components = list(
/obj/item/stock_parts/subspace/filter = 1,
/obj/item/stock_parts/capacitor = 2,
diff --git a/code/modules/overmap/overmap_object.dm b/code/modules/overmap/overmap_object.dm
index b05f4debea2..c186fb99187 100644
--- a/code/modules/overmap/overmap_object.dm
+++ b/code/modules/overmap/overmap_object.dm
@@ -54,7 +54,7 @@ var/global/list/overmap_unknown_ids = list()
return INITIALIZE_HINT_QDEL
if(requires_contact)
- invisibility = INVISIBILITY_OVERMAP // Effects that require identification have their images cast to the client via sensors.
+ set_invisibility(INVISIBILITY_OVERMAP) // Effects that require identification have their images cast to the client via sensors.
if(scannable)
unknown_id = "[pick(global.phonetic_alphabet)]-[random_id(/obj/effect/overmap, 100, 999)]"
@@ -64,16 +64,20 @@ var/global/list/overmap_unknown_ids = list()
add_filter("glow", 1, list("drop_shadow", color = color + "F0", size = 2, offset = 1,x = 0, y = 0))
update_icon()
-/obj/effect/overmap/Crossed(var/obj/effect/overmap/visitable/other)
- if(istype(other))
- for(var/obj/effect/overmap/visitable/O in loc)
- SSskybox.rebuild_skyboxes(O.map_z)
+/obj/effect/overmap/Crossed(atom/movable/AM)
+ var/obj/effect/overmap/visitable/other = AM
+ if(!istype(other))
+ return
+ for(var/obj/effect/overmap/visitable/O in loc)
+ SSskybox.rebuild_skyboxes(O.map_z)
-/obj/effect/overmap/Uncrossed(var/obj/effect/overmap/visitable/other)
- if(istype(other))
- SSskybox.rebuild_skyboxes(other.map_z)
- for(var/obj/effect/overmap/visitable/O in loc)
- SSskybox.rebuild_skyboxes(O.map_z)
+/obj/effect/overmap/Uncrossed(atom/movable/AM)
+ var/obj/effect/overmap/visitable/other = AM
+ if(!istype(other))
+ return
+ SSskybox.rebuild_skyboxes(other.map_z)
+ for(var/obj/effect/overmap/visitable/O in loc)
+ SSskybox.rebuild_skyboxes(O.map_z)
/obj/effect/overmap/on_update_icon()
. = ..()
diff --git a/code/modules/overmap/radio_beacon.dm b/code/modules/overmap/radio_beacon.dm
index 4d35f60124f..4d6f541b3f7 100644
--- a/code/modules/overmap/radio_beacon.dm
+++ b/code/modules/overmap/radio_beacon.dm
@@ -13,8 +13,8 @@
---END OF TRANSMISSION---"
/obj/effect/overmap/radio/proc/set_origin(obj/effect/overmap/origin)
- events_repository.register(/decl/observ/moved, origin, src, /obj/effect/overmap/radio/proc/follow)
- events_repository.register(/decl/observ/destroyed, origin, src, /datum/proc/qdel_self)
+ events_repository.register(/decl/observ/moved, origin, src, TYPE_PROC_REF(/obj/effect/overmap/radio, follow))
+ events_repository.register(/decl/observ/destroyed, origin, src, TYPE_PROC_REF(/datum, qdel_self))
forceMove(origin.loc)
source = origin
pixel_x = -(origin.bound_width - 6)
@@ -35,7 +35,7 @@
icon = 'icons/obj/items/device/radio/beacon.dmi'
icon_state = "beacon"
- origin_tech = "{'magnets':2, 'programming':2}"
+ origin_tech = @'{"magnets":2, "programming":2}'
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT)
diff --git a/code/modules/overmap/ships/circuits.dm b/code/modules/overmap/ships/circuits.dm
index bf196ca3792..3d729a46a55 100644
--- a/code/modules/overmap/ships/circuits.dm
+++ b/code/modules/overmap/ships/circuits.dm
@@ -2,7 +2,7 @@
name = "circuitboard (gas thruster)"
icon = 'icons/obj/modules/module_controller.dmi'
build_path = /obj/machinery/atmospherics/unary/engine
- origin_tech = "{'powerstorage':1,'engineering':2}"
+ origin_tech = @'{"powerstorage":1,"engineering":2}'
req_components = list(
/obj/item/stack/cable_coil = 30,
/obj/item/pipe = 2
@@ -17,7 +17,7 @@
name = "circuitboard (fusion thruster)"
icon = 'icons/obj/modules/module_controller.dmi'
build_path = /obj/machinery/atmospherics/unary/engine/fusion
- origin_tech = "{'powerstorage':1,'engineering':2}"
+ origin_tech = @'{"powerstorage":1,"engineering":2}'
req_components = list(
/obj/item/stack/cable_coil = 30,
/obj/item/pipe = 2
diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm
index 6302e7926b7..cf103d9e075 100644
--- a/code/modules/overmap/ships/computers/helm.dm
+++ b/code/modules/overmap/ships/computers/helm.dm
@@ -317,7 +317,7 @@ var/global/list/overmap_helm_computers
current_operator = weakref(current_operator_actual)
linked.update_operator_skill(current_operator_actual)
if (!autopilot && old_operator && viewing_overmap(old_operator))
- addtimer(CALLBACK(src, /obj/machinery/computer/ship/.proc/unlook, old_operator), 0) // Workaround for linter SHOULD_NOT_SLEEP checks.
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook), old_operator), 0) // Workaround for linter SHOULD_NOT_SLEEP checks.
log_debug("HELM CONTROL: [current_operator_actual ? current_operator_actual : "NO PILOT"] taking control of [src] from [old_operator ? old_operator : "NO PILOT"] in [get_area_name(src)]. [autopilot ? "(AUTOPILOT MODE)" : null]")
diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm
index c3837101c69..396a4fe2172 100644
--- a/code/modules/overmap/ships/computers/ship.dm
+++ b/code/modules/overmap/ships/computers/ship.dm
@@ -69,9 +69,9 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
for(var/obj/machinery/computer/ship/sensors/sensor in linked.get_linked_machines_of_type(/obj/machinery/computer/ship))
sensor.reveal_contacts(user)
- events_repository.register(/decl/observ/moved, user, src, /obj/machinery/computer/ship/proc/unlook)
+ events_repository.register(/decl/observ/moved, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook))
if(isliving(user))
- events_repository.register(/decl/observ/stat_set, user, src, /obj/machinery/computer/ship/proc/unlook)
+ events_repository.register(/decl/observ/stat_set, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook))
LAZYDISTINCTADD(viewers, weakref(user))
if(linked)
LAZYDISTINCTADD(linked.navigation_viewers, weakref(user))
@@ -84,9 +84,9 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
for(var/obj/machinery/computer/ship/sensors/sensor in linked.get_linked_machines_of_type(/obj/machinery/computer/ship))
sensor.hide_contacts(user)
- events_repository.unregister(/decl/observ/moved, user, src, /obj/machinery/computer/ship/proc/unlook)
+ events_repository.unregister(/decl/observ/moved, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook))
if(isliving(user))
- events_repository.unregister(/decl/observ/stat_set, user, src, /obj/machinery/computer/ship/proc/unlook)
+ events_repository.unregister(/decl/observ/stat_set, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook))
LAZYREMOVE(viewers, weakref(user))
if(linked)
LAZYREMOVE(linked.navigation_viewers, weakref(user))
diff --git a/code/modules/overmap/ships/device_types/fusion_thruster.dm b/code/modules/overmap/ships/device_types/fusion_thruster.dm
index 56b7ef76bb8..e2a16504901 100644
--- a/code/modules/overmap/ships/device_types/fusion_thruster.dm
+++ b/code/modules/overmap/ships/device_types/fusion_thruster.dm
@@ -4,11 +4,12 @@
/datum/extension/ship_engine/gas/fusion/get_propellant(var/sample_only = TRUE)
var/obj/machinery/atmospherics/unary/engine/fusion/thruster = holder
- if(!thruster.harvest_from || !thruster.harvest_from.owned_field)
+ if(!istype(thruster) || !thruster.harvest_from?.owned_field)
return // No valid propellant.
var/datum/gas_mixture/propellant = ..()
- propellant.temperature += log(100, (thruster.harvest_from.owned_field.plasma_temperature * efficiency))
- return propellant
+ if(propellant)
+ propellant.temperature += log(100, (thruster.harvest_from.owned_field.plasma_temperature * efficiency))
+ . = propellant
/datum/extension/ship_engine/gas/fusion/has_fuel()
. = ..()
diff --git a/code/modules/overmap/ships/device_types/gas_thruster.dm b/code/modules/overmap/ships/device_types/gas_thruster.dm
index 1568f527fe6..b2fcd871177 100644
--- a/code/modules/overmap/ships/device_types/gas_thruster.dm
+++ b/code/modules/overmap/ships/device_types/gas_thruster.dm
@@ -29,13 +29,14 @@
/datum/extension/ship_engine/gas/proc/get_propellant(var/sample_only = TRUE, var/partial = 1)
var/obj/machinery/atmospherics/unary/engine/E = holder
- var/datum/gas_mixture/removed = E.air_contents.remove_ratio((volume_per_burn * thrust_limit * partial) / E.air_contents.volume)
- if(sample_only)
- var/datum/gas_mixture/sample = new(removed.volume)
- sample.copy_from(removed)
- E.air_contents.merge(removed)
- return sample
- return removed
+ if(istype(E) && E.air_contents?.volume > 0)
+ var/datum/gas_mixture/removed = E.air_contents.remove_ratio((volume_per_burn * thrust_limit * partial) / E.air_contents.volume)
+ if(removed && sample_only)
+ var/datum/gas_mixture/sample = new(removed.volume)
+ sample.copy_from(removed)
+ E.air_contents.merge(removed)
+ return sample
+ . = removed
/datum/extension/ship_engine/gas/get_exhaust_velocity(var/datum/gas_mixture/propellant)
if(!is_on() || !has_fuel())
diff --git a/code/modules/overmap/ships/landable.dm b/code/modules/overmap/ships/landable.dm
index 771cd6ed2a5..2948c418427 100644
--- a/code/modules/overmap/ships/landable.dm
+++ b/code/modules/overmap/ships/landable.dm
@@ -122,7 +122,7 @@
visitor_dir = turn(visitor_dir, 90)
// Configure shuttle datum
- events_repository.register(/decl/observ/shuttle_moved, shuttle_datum, src, .proc/on_shuttle_jump)
+ events_repository.register(/decl/observ/shuttle_moved, shuttle_datum, src, PROC_REF(on_shuttle_jump))
on_landing(landmark, shuttle_datum.current_location) // We "land" at round start to properly place ourselves on the overmap.
if(landmark == shuttle_datum.current_location)
status = SHIP_STATUS_OVERMAP // we spawned on the overmap, so have to initialize our state properly.
@@ -161,7 +161,7 @@
core_landmark = master
SetName(_name)
landmark_tag = master.shuttle_name + _name
- events_repository.register(/decl/observ/destroyed, master, src, /datum/proc/qdel_self)
+ events_repository.register(/decl/observ/destroyed, master, src, TYPE_PROC_REF(/datum, qdel_self))
. = ..()
/obj/effect/shuttle_landmark/visiting_shuttle/Destroy()
diff --git a/code/modules/overmap/ships/machines/ion_thruster.dm b/code/modules/overmap/ships/machines/ion_thruster.dm
index 5ca69b414ed..63d98305036 100644
--- a/code/modules/overmap/ships/machines/ion_thruster.dm
+++ b/code/modules/overmap/ships/machines/ion_thruster.dm
@@ -83,7 +83,7 @@
board_type = "machine"
icon = 'icons/obj/modules/module_controller.dmi'
build_path = /obj/machinery/ion_thruster
- origin_tech = "{'powerstorage':1,'engineering':2}"
+ origin_tech = @'{"powerstorage":1,"engineering":2}'
req_components = list(
/obj/item/stack/cable_coil = 2,
/obj/item/stock_parts/matter_bin = 1,
diff --git a/code/modules/overmap/ships/ship_physics.dm b/code/modules/overmap/ships/ship_physics.dm
index 3b093cf3747..b315e744982 100644
--- a/code/modules/overmap/ships/ship_physics.dm
+++ b/code/modules/overmap/ships/ship_physics.dm
@@ -37,8 +37,14 @@
/obj/effect/overmap/visitable/ship/proc/recalculate_vessel_mass()
var/list/zones = list()
for(var/area/A in get_areas())
+
+ // Do not include space please
+ if(istype(A, world.area))
+ continue
+
for(var/turf/T in A)
- if(T.is_open())
+
+ if(!T.simulated || T.is_open())
continue
. += DEFAULT_TURF_MASS
diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm
index 6c60ba8181d..2aaef59f4f4 100644
--- a/code/modules/overmap/spacetravel.dm
+++ b/code/modules/overmap/spacetravel.dm
@@ -1,7 +1,7 @@
//Space stragglers go here
/obj/effect/overmap/visitable/sector/temporary
name = "Deep Space"
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
sector_flags = OVERMAP_SECTOR_IN_SPACE
/obj/effect/overmap/visitable/sector/temporary/Initialize(mapload, var/nx, var/ny, var/nz)
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 792180f618a..48b9de4f5e7 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -10,7 +10,7 @@
throw_range = 10
slot_flags = SLOT_LOWER_BODY
material_alteration = MAT_FLAG_ALTERATION_COLOR
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
drop_sound = 'sound/foley/tooldrop5.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
@@ -27,15 +27,6 @@
stored_pen = null
return ..()
-/obj/item/clipboard/handle_mouse_drop(atom/over, mob/user)
- if(ishuman(user) && istype(over, /obj/screen/inventory))
- var/obj/screen/inventory/inv = over
- add_fingerprint(user)
- if(user.try_unequip(src))
- user.equip_to_slot_if_possible(src, inv.slot_id)
- return TRUE
- . = ..()
-
/obj/item/clipboard/examine(mob/user, distance, infix, suffix)
. = ..()
if(stored_pen)
@@ -204,7 +195,7 @@
close_browser(user, initial(name))
/obj/item/clipboard/ebony
- material = /decl/material/solid/wood/ebony
+ material = /decl/material/solid/organic/wood/ebony
/obj/item/clipboard/steel
material = /decl/material/solid/metal/steel
@@ -216,4 +207,4 @@
material = /decl/material/solid/glass
/obj/item/clipboard/plastic
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index 265e8da7beb..ea1eb67279d 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -14,7 +14,7 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
name = "circuitboard (fax machine)"
build_path = /obj/machinery/faxmachine
board_type = "machine"
- origin_tech = "{'engineering':1, 'programming':1}"
+ origin_tech = @'{"engineering":1, "programming":1}'
req_components = list(
/obj/item/stock_parts/printer = 1,
/obj/item/stock_parts/manipulator = 1,
@@ -61,6 +61,7 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
density = TRUE
idle_power_usage = 30
active_power_usage = 200
+ base_type = /obj/machinery/faxmachine
construct_state = /decl/machine_construction/default/panel_closed
maximum_component_parts = list(
/obj/item/stock_parts/item_holder/disk_reader = 1,
@@ -115,18 +116,18 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
printer = get_component_of_type(/obj/item/stock_parts/printer)
if(disk_reader)
- disk_reader.register_on_insert(CALLBACK(src, /obj/machinery/faxmachine/proc/on_insert_disk))
- disk_reader.register_on_eject( CALLBACK(src, /obj/machinery/faxmachine/proc/update_ui))
+ disk_reader.register_on_insert(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_insert_disk)))
+ disk_reader.register_on_eject( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, update_ui)))
if(card_reader)
- card_reader.register_on_insert(CALLBACK(src, /obj/machinery/faxmachine/proc/on_insert_card))
- card_reader.register_on_eject( CALLBACK(src, /obj/machinery/faxmachine/proc/update_ui))
+ card_reader.register_on_insert(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_insert_card)))
+ card_reader.register_on_eject( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, update_ui)))
if(printer)
- printer.register_on_printed_page( CALLBACK(src, /obj/machinery/faxmachine/proc/on_printed_page))
- printer.register_on_finished_queue(CALLBACK(src, /obj/machinery/faxmachine/proc/on_queue_finished))
- printer.register_on_print_error( CALLBACK(src, /obj/machinery/faxmachine/proc/on_print_error))
- printer.register_on_status_changed(CALLBACK(src, /obj/machinery/faxmachine/proc/update_ui))
+ printer.register_on_printed_page( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_printed_page)))
+ printer.register_on_finished_queue(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_queue_finished)))
+ printer.register_on_print_error( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_print_error)))
+ printer.register_on_status_changed(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, update_ui)))
/obj/machinery/faxmachine/interface_interact(mob/user)
ui_interact(user)
@@ -430,6 +431,9 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
return FALSE
use_power_oneoff(active_power_usage)
+ var/obj/item/card/id/ID = try_get_card()
+ ID = istype(ID)? ID : null
+
//Grab our network
var/datum/extension/network_device/sender_dev = get_extension(src, /datum/extension/network_device)
var/datum/computer_network/origin_network = sender_dev?.get_network()
@@ -437,16 +441,6 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
to_chat(user, SPAN_WARNING("No network connection!"))
return FALSE
- if(!length(target_net_id))
- target_net_id = origin_network.network_id //Use the current network if none specified
-
- if((target_net_id != origin_network.network_id) && !sender_dev.has_internet_connection(origin_network))
- to_chat(user, SPAN_WARNING("No internet connection!"))
- return FALSE
-
- var/obj/item/card/id/ID = try_get_card()
- ID = istype(ID)? ID : null
-
//If sending to admins, don't try to get a target network or device
var/target_URI = uppertext("[target_net_tag].[target_net_id]")
var/list/target_admin_fax = LAZYACCESS(global.using_map.map_admin_faxes, target_URI)
@@ -462,8 +456,8 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
else if(prob(1))
spark_at(src, 1)
- .= send_fax_to_admin(user, scanner_item, target_URI, src)
- log_history("Outgoing", "'[scanner_item]', from '[get_area(src)]'s [src]' @ '[sender_dev.get_network_URI()]' to [target_admin_fax["name"]]' @ '[target_URI]'.")
+ . = send_fax_to_admin(user, scanner_item, target_URI, src)
+ log_history("Outgoing", "'[scanner_item]', from '[get_area(src)]'s [src]' @ '[sender_dev?.get_network_URI() || "UNKNOWN SENDER"]' to [target_admin_fax["name"]]' @ '[target_URI]'.")
update_ui()
flick("faxsend", src)
//#TODO: sync the animation, sound and message together when I got enough patience.
@@ -472,6 +466,13 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
time_cooldown_end = world.timeofday + FAX_ADMIN_COOLDOWN
return TRUE
+ if(!length(target_net_id))
+ target_net_id = origin_network.network_id //Use the current network if none specified
+
+ if((target_net_id != origin_network.network_id) && !sender_dev.has_internet_connection(origin_network))
+ to_chat(user, SPAN_WARNING("No internet connection!"))
+ return FALSE
+
var/datum/computer_network/target_net
if(target_net_id != origin_network.network_id)
target_net = origin_network.get_internet_connection(target_net_id)
@@ -632,6 +633,8 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
if(user)
to_chat(user, SPAN_WARNING("Please select a contact to remove!"))
return FALSE
+
+ var/remove_uri = LAZYACCESS(quick_dial, contact_name)
LAZYREMOVE(quick_dial, contact_name)
//Overwrite quick dial
@@ -642,7 +645,7 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
D.write_file(datfile, FAX_QUICK_DIAL_FILE)
if(user)
- to_chat(user, SPAN_NOTICE("Successfully removed contact '[contact_name]' with URI '[LAZYACCESS(quick_dial, contact_name)]'!"))
+ to_chat(user, SPAN_NOTICE("Successfully removed contact '[contact_name]' with URI '[remove_uri]'!"))
update_ui()
return TRUE
@@ -689,4 +692,20 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to
#undef FAX_QUICK_DIAL_FILE
#undef FAX_HISTORY_FILE
#undef FAX_COOLDOWN
-#undef FAX_ADMIN_COOLDOWN
\ No newline at end of file
+#undef FAX_ADMIN_COOLDOWN
+
+/obj/machinery/faxmachine/mapped/Initialize()
+ . = ..()
+ if(. != INITIALIZE_HINT_QDEL)
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/machinery/faxmachine/mapped/LateInitialize()
+ ..()
+ // Pre-populate our admin targets.
+ if(!disk_reader)
+ CRASH("Missing disk reader from pre-mapped fax machine!")
+ if(!disk_reader.disk)
+ disk_reader.insert_item(new /obj/item/disk(disk_reader))
+ for(var/uri in global.using_map.map_admin_faxes)
+ var/list/contact_info = global.using_map.map_admin_faxes[uri]
+ add_quick_dial_contact(contact_info["name"], uri)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 19b69dbe898..4e728b71bd9 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -9,7 +9,7 @@
material = /decl/material/solid/metal/steel
density = TRUE
anchored = TRUE
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
obj_flags = OBJ_FLAG_ANCHORABLE
tool_interaction_flags = TOOL_INTERACTION_ANCHOR | TOOL_INTERACTION_DECONSTRUCT
var/tmp/list/can_hold = list(
@@ -70,7 +70,7 @@
desc = "A filing cabinet installed into a cavity in the wall to save space. Wow!"
icon_state = "wallcabinet"
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
- directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}"
+ directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}'
/obj/structure/filing_cabinet/tall
icon_state = "tallcabinet"
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index cd33ee78f43..392d25940da 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -10,7 +10,7 @@
throwforce = 0
drop_sound = 'sound/foley/paperpickup1.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
- material = /decl/material/solid/cardboard
+ material = /decl/material/solid/organic/cardboard
item_flags = ITEM_FLAG_CAN_TAPE
/obj/item/folder/blue
diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm
index 605a5c0b37e..12a71b32301 100644
--- a/code/modules/paperwork/handlabeler.dm
+++ b/code/modules/paperwork/handlabeler.dm
@@ -16,7 +16,7 @@
name = "hand labeler"
icon = 'icons/obj/items/hand_labeler.dmi'
icon_state = ICON_STATE_WORLD
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
w_class = ITEM_SIZE_SMALL
item_flags = ITEM_FLAG_NO_BLUDGEON
matter = list(
@@ -156,8 +156,8 @@
to_chat(user, SPAN_WARNING("\The [P] is not blank. You can't use that for refilling \the [src]."))
return
- var/incoming_amt = LAZYACCESS(P.matter, /decl/material/solid/paper)
- var/current_amt = LAZYACCESS(matter, /decl/material/solid/paper)
+ var/incoming_amt = LAZYACCESS(P.matter, /decl/material/solid/organic/paper)
+ var/current_amt = LAZYACCESS(matter, /decl/material/solid/organic/paper)
var/label_added = incoming_amt / LABEL_MATERIAL_COST
if(incoming_amt < LABEL_MATERIAL_COST)
@@ -236,7 +236,7 @@
. = ..()
//Dump label paper left
if(labels_left > 0)
- var/decl/material/M = GET_DECL(/decl/material/solid/paper)
+ var/decl/material/M = GET_DECL(/decl/material/solid/organic/paper)
var/turf/T = get_turf(src)
var/total_sheets = round((labels_left * LABEL_MATERIAL_COST) / SHEET_MATERIAL_AMOUNT)
var/leftovers = round((labels_left * LABEL_MATERIAL_COST) % SHEET_MATERIAL_AMOUNT)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index a4b06ff6cc9..9bb9e14bf74 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -19,7 +19,7 @@
throw_speed = 1
w_class = ITEM_SIZE_TINY
attack_verb = list("bapped")
- material = /decl/material/solid/paper
+ material = /decl/material/solid/organic/paper
drop_sound = 'sound/foley/paperpickup1.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
item_flags = ITEM_FLAG_CAN_TAPE
@@ -150,25 +150,32 @@
/obj/item/paper/attack(mob/living/carbon/M, mob/living/carbon/user)
if(user.get_target_zone() == BP_EYES)
- user.visible_message(SPAN_NOTICE("You show the paper to [M]."), \
- SPAN_NOTICE("[user] holds up a paper and shows it to [M]."))
+ user.visible_message(
+ SPAN_NOTICE("You show the paper to [M]."),
+ SPAN_NOTICE("[user] holds up a paper and shows it to [M].")
+ )
M.examinate(src)
+ return TRUE
- else if(user.get_target_zone() == BP_MOUTH) // lipstick wiping
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H == user)
- to_chat(user, SPAN_NOTICE("You wipe off the lipstick with [src]."))
- H.lip_style = null
- H.update_body()
- else
- user.visible_message(SPAN_WARNING("[user] begins to wipe [H]'s lipstick off with \the [src]."), \
- SPAN_NOTICE("You begin to wipe off [H]'s lipstick."))
- if(do_after(user, 10, H) && do_after(H, 10, check_holding = 0)) //user needs to keep their active hand, H does not.
- user.visible_message(SPAN_NOTICE("[user] wipes [H]'s lipstick off with \the [src]."), \
- SPAN_NOTICE("You wipe off [H]'s lipstick."))
- H.lip_style = null
- H.update_body()
+ if(user.get_target_zone() == BP_MOUTH && M.get_lip_colour())
+ var/mob/living/carbon/human/H = M
+ if(H == user)
+ to_chat(user, SPAN_NOTICE("You wipe off the lipstick with [src]."))
+ H.set_lip_colour()
+ return TRUE
+ user.visible_message(
+ SPAN_NOTICE("\The [user] begins to wipe \the [H]'s lipstick off with \the [src]."),
+ SPAN_NOTICE("You begin to wipe off [H]'s lipstick.")
+ )
+ if(do_after(user, 10, H) && do_after(H, 10, check_holding = 0)) //user needs to keep their active hand, H does not.
+ user.visible_message(
+ SPAN_NOTICE("\The [user] wipes \the [H]'s lipstick off with \the [src]."),
+ SPAN_NOTICE("You wipe off \the [H]'s lipstick.")
+ )
+ H.set_lip_colour()
+ return TRUE
+
+ . = ..()
/obj/item/paper/proc/addtofield(var/id, var/text, var/links = 0)
var/locid = 0
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index c566744aa62..5f10c344837 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -24,16 +24,6 @@
var/tmp/cur_page = 1 // current page
var/tmp/max_pages = 100 //Maximum number of papers that can be in the bundle
var/list/pages // Ordered list of pages as they are to be displayed. Can be different order than src.contents.
- var/static/list/cached_overlays //Cached images used by all paper bundles for generating the overlays and underlays
-
-/**Creates frequently used images globally, so we can re-use them. */
-/obj/item/paper_bundle/proc/cache_overlays()
- if(LAZYLEN(cached_overlays))
- return
- LAZYSET(cached_overlays, "clip", image('icons/obj/bureaucracy.dmi', "clip"))
- LAZYSET(cached_overlays, "paper", image('icons/obj/bureaucracy.dmi', "paper"))
- LAZYSET(cached_overlays, "photo", image('icons/obj/bureaucracy.dmi', "photo"))
- LAZYSET(cached_overlays, "refill", image('icons/obj/bureaucracy.dmi', "paper_refill_label"))
/obj/item/paper_bundle/Destroy()
LAZYCLEARLIST(pages) //Get rid of refs
@@ -192,7 +182,7 @@
user.visible_message( \
"\The [user] holds \the [P] up to \the [src]. It looks like [G.he] [G.is] trying to burn it!", \
"You hold \the [P] up to \the [src], burning it slowly.")
- addtimer(CALLBACK(src, .proc/burn_callback, P, user, span_class), 2 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(burn_callback), P, user, span_class), 2 SECONDS)
/obj/item/paper_bundle/examine(mob/user, distance)
. = ..()
@@ -306,14 +296,13 @@
/obj/item/paper_bundle/on_update_icon()
. = ..()
- if(!LAZYLEN(cached_overlays))
- cache_overlays()
- underlays.Cut()
+ underlays.Cut()
var/obj/item/paper/P = pages[1]
icon = P.icon
icon_state = P.icon_state
- copy_overlays(P.overlays)
+
+ copy_overlays(P)
var/paper_count = 0
var/photo_count = 0
@@ -321,7 +310,7 @@
for(var/obj/O in pages)
if(istype(O, /obj/item/paper) && (paper_count < MAX_PAPER_UNDERLAYS))
//We can't even see them, so don't bother create appearences form each paper's icon, and use a generic one
- var/mutable_appearance/img = new(cached_overlays["paper"])
+ var/mutable_appearance/img = mutable_appearance('icons/obj/bureaucracy.dmi', "paper")
img.color = O.color
img.pixel_x -= min(paper_count, 2)
img.pixel_y -= min(paper_count, 2)
@@ -336,7 +325,7 @@
if(photo_count < 1)
add_overlay(Ph.tiny)
else
- add_overlay(cached_overlays["photo"]) //We can't even see them, so don't bother create new unique appearences
+ add_overlay("photo") //We can't even see them, so don't bother create new unique appearences
photo_count++
//Break if we have nothing else to do
@@ -353,7 +342,7 @@
else if(photo_count > 0)
desc += "\nThere is a photo attached to it."
- add_overlay(cached_overlays["clip"])
+ add_overlay("clip")
/**
* Merge another bundle or paper into us.
@@ -518,7 +507,7 @@
/obj/item/paper_bundle/refill/on_update_icon()
. = ..()
- add_overlay(cached_overlays["refill"])
+ add_overlay("refill")
///////////////////////////////////////////////////////////////////////////
// Interaction Rename
diff --git a/code/modules/paperwork/paper_plane.dm b/code/modules/paperwork/paper_plane.dm
index 91989d9a15f..18d0a6664a1 100644
--- a/code/modules/paperwork/paper_plane.dm
+++ b/code/modules/paperwork/paper_plane.dm
@@ -15,7 +15,7 @@
w_class = ITEM_SIZE_TINY
item_flags = ITEM_FLAG_CAN_TAPE
attack_verb = list("stabbed", "pricked")
- material = /decl/material/solid/paper
+ material = /decl/material/solid/organic/paper
var/obj/item/paper/my_paper //The sheet of paper this paper_plane is made of
/obj/item/paper_plane/proc/set_paper(var/obj/item/paper/_paper)
diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm
index 726fe028f17..3df1a1b80ef 100644
--- a/code/modules/paperwork/paper_sticky.dm
+++ b/code/modules/paperwork/paper_sticky.dm
@@ -9,7 +9,7 @@
icon_state = "pad_full"
item_state = "paper"
w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/paper
+ material = /decl/material/solid/organic/paper
var/papers = 50
var/tmp/max_papers = 50
var/paper_type = /obj/item/paper/sticky
@@ -21,7 +21,7 @@
/obj/item/sticky_pad/proc/update_matter()
matter = list(
- /decl/material/solid/paper = round((papers * SHEET_MATERIAL_AMOUNT) * 0.2)
+ /decl/material/solid/organic/paper = round((papers * SHEET_MATERIAL_AMOUNT) * 0.2)
)
/obj/item/sticky_pad/create_matter()
@@ -97,7 +97,7 @@
/obj/item/paper/sticky/Initialize()
. = ..()
- events_repository.register(/decl/observ/moved, src, src, /obj/item/paper/sticky/proc/reset_persistence_tracking)
+ events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/item/paper/sticky, reset_persistence_tracking))
/obj/item/paper/sticky/proc/reset_persistence_tracking()
SSpersistence.forget_value(src, /decl/persistence_handler/paper/sticky)
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 2ebba0789c7..97f80cf22dd 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -12,7 +12,7 @@
w_class = ITEM_SIZE_NORMAL
throw_speed = 3
throw_range = 7
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/amount = 30 //How much paper is in the bin.
var/tmp/max_amount = 30 //How much paper fits in the bin
var/list/papers //List of papers put in the bin for reference.
@@ -21,7 +21,7 @@
LAZYCLEARLIST(papers) //Gets rid of any refs
return ..()
-/obj/item/paper_bin/handle_mouse_drop(atom/over, mob/user)
+/obj/item/paper_bin/handle_mouse_drop(atom/over, mob/user, params)
if((loc == user || in_range(src, user)) && user.get_empty_hand_slot())
user.put_in_hands(src)
return TRUE
diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm
index 1f207c28fe7..d71d22b1c96 100644
--- a/code/modules/paperwork/papershredder.dm
+++ b/code/modules/paperwork/papershredder.dm
@@ -8,7 +8,7 @@
icon_state = "papershredder0"
density = TRUE
anchored = TRUE
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
obj_flags = OBJ_FLAG_ANCHORABLE
idle_power_usage = 0
stat_immune = NOSCREEN | NOINPUT
@@ -16,7 +16,7 @@
construct_state = /decl/machine_construction/default/panel_closed
required_interaction_dexterity = DEXTERITY_SIMPLE_MACHINES
uncreated_component_parts = list(
- /obj/item/stock_parts/power/apc = 1,
+ /obj/item/stock_parts/power/apc = 1
)
var/list/shredder_bin //List of shreded material type to matter amount
var/cached_total_matter = 0 //Total of all the matter units we put in the shredder so far
@@ -211,7 +211,7 @@
throw_speed = 2
throwforce = 0
w_class = ITEM_SIZE_TINY
- material = /decl/material/solid/paper
+ material = /decl/material/solid/organic/paper
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME
/obj/item/shreddedp/get_matter_amount_modifier()
@@ -229,7 +229,7 @@
return ..()
/obj/item/shreddedp/proc/burnpaper(var/obj/item/flame/lighter/P, var/mob/user)
- if(!CanPhysicallyInteractWith(user, src) && material?.fuel_value)
+ if(!CanPhysicallyInteractWith(user, src) || material?.accelerant_value <= FUEL_VALUE_NONE)
return
if(!P.lit)
to_chat(user, SPAN_WARNING("\The [P] is not lit."))
@@ -247,5 +247,6 @@
fire_act()
/obj/item/shreddedp/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ SHOULD_CALL_PARENT(FALSE)
new /obj/effect/decal/cleanable/ash(get_turf(src))
physically_destroyed()
diff --git a/code/modules/paperwork/pen/crayon.dm b/code/modules/paperwork/pen/crayon.dm
index 64cd4b94c2a..de44fe206df 100644
--- a/code/modules/paperwork/pen/crayon.dm
+++ b/code/modules/paperwork/pen/crayon.dm
@@ -11,7 +11,9 @@
pen_quality = TOOL_QUALITY_BAD //Writing with those things is awkward
max_uses = 30
pen_font = PEN_FONT_CRAYON
+ material = /decl/material/solid/organic/wax
var/shade_colour = "#220000" //RGB
+ var/pigment_type = /decl/material/liquid/pigment
/obj/item/pen/crayon/make_pen_description()
desc = "A colourful [stroke_colour_name] [istype(material)?"[material.name] ":null][medium_name]. Please refrain from eating it or putting it in your nose."
@@ -45,54 +47,47 @@
target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on.
return
-/obj/item/pen/crayon/attack(mob/living/M, mob/user)
- if(istype(M) && M == user)
- var/decl/tool_archetype/pen/parch = GET_DECL(TOOL_PEN)
- playsound(src, 'sound/weapons/bite.ogg', 40)
- to_chat(M, SPAN_NOTICE("You take a bite of the crayon and swallow it."))
- M.adjust_nutrition(1)
- var/uses = get_tool_property(TOOL_PEN, TOOL_PROP_USES)
- M.reagents.add_reagent(/decl/material/liquid/pigment, min(5,uses)/3)
- if(parch.decrement_uses(user, src, 5) <= 0)
- to_chat(M, SPAN_WARNING("You ate your crayon!"))
- return
- . = ..()
-
/obj/item/pen/crayon/red
icon_state = "crayonred"
stroke_colour = "#da0000"
shade_colour = "#810c0c"
stroke_colour_name = "red"
+ pigment_type = /decl/material/liquid/pigment/red
/obj/item/pen/crayon/orange
icon_state = "crayonorange"
stroke_colour = "#ff9300"
stroke_colour_name = "orange"
shade_colour = "#a55403"
+ pigment_type = /decl/material/liquid/pigment/orange
/obj/item/pen/crayon/yellow
icon_state = "crayonyellow"
stroke_colour = "#fff200"
shade_colour = "#886422"
stroke_colour_name = "yellow"
+ pigment_type = /decl/material/liquid/pigment/yellow
/obj/item/pen/crayon/green
icon_state = "crayongreen"
stroke_colour = "#a8e61d"
shade_colour = "#61840f"
stroke_colour_name = "green"
+ pigment_type = /decl/material/liquid/pigment/green
/obj/item/pen/crayon/blue
icon_state = "crayonblue"
stroke_colour = "#00b7ef"
shade_colour = "#0082a8"
stroke_colour_name = "blue"
+ pigment_type = /decl/material/liquid/pigment/blue
/obj/item/pen/crayon/purple
icon_state = "crayonpurple"
stroke_colour = "#da00ff"
shade_colour = "#810cff"
stroke_colour_name = "purple"
+ pigment_type = /decl/material/liquid/pigment/purple
/obj/item/pen/crayon/mime
icon_state = "crayonmime"
@@ -100,6 +95,7 @@
shade_colour = "#000000"
stroke_colour_name = "mime"
max_uses = -1 //Infinite
+ pigment_type = null
/obj/item/pen/crayon/mime/make_pen_description()
desc = "A very sad-looking crayon."
@@ -119,6 +115,7 @@
shade_colour = "#000fff"
stroke_colour_name = "rainbow"
max_uses = -1
+ pigment_type = null
/obj/item/pen/crayon/rainbow/make_pen_description()
desc = "A very colourful [istype(material)?"[material.name] ":null][medium_name]. Please refrain from eating it or putting it in your nose."
diff --git a/code/modules/paperwork/pen/crayon_edibility.dm b/code/modules/paperwork/pen/crayon_edibility.dm
new file mode 100644
index 00000000000..ba7666f17e4
--- /dev/null
+++ b/code/modules/paperwork/pen/crayon_edibility.dm
@@ -0,0 +1,21 @@
+/obj/item/pen/crayon/transfer_eaten_material(mob/eater, amount)
+ var/decl/tool_archetype/pen/parch = GET_DECL(TOOL_PEN)
+ parch.decrement_uses(eater, src, amount, destroy_on_zero = FALSE) // we'll qdel in food code if we eat the end of the crayon
+ if(!isliving(eater))
+ return
+ var/mob/living/living_eater = eater
+ var/datum/reagents/eater_ingested = living_eater.get_ingested_reagents()
+ if(!eater_ingested)
+ return
+ if(pigment_type)
+ var/partial_amount = CEILING(amount * 0.4)
+ eater_ingested.add_reagent(pigment_type, partial_amount)
+ eater_ingested.add_reagent(/decl/material/solid/organic/wax, amount - partial_amount)
+ else
+ eater_ingested.add_reagent(/decl/material/solid/organic/wax, amount)
+
+/obj/item/pen/crayon/get_edible_material_amount(mob/eater)
+ return max(0, get_tool_property(TOOL_PEN, TOOL_PROP_USES))
+
+/obj/item/pen/crayon/get_food_default_transfer_amount(mob/eater)
+ return eater?.get_eaten_transfer_amount(5)
diff --git a/code/modules/paperwork/pen/fancy.dm b/code/modules/paperwork/pen/fancy.dm
index 46a46f394e2..0bb353669e2 100644
--- a/code/modules/paperwork/pen/fancy.dm
+++ b/code/modules/paperwork/pen/fancy.dm
@@ -16,7 +16,7 @@
name = "dire goose quill"
icon = 'icons/obj/items/pens/pen_quill.dmi'
sharp = 0
- material = /decl/material/solid/skin/feathers
+ material = /decl/material/solid/organic/skin/feathers
pen_quality = TOOL_QUALITY_BEST
/obj/item/pen/fancy/quill/make_pen_description()
diff --git a/code/modules/paperwork/pen/pen.dm b/code/modules/paperwork/pen/pen.dm
index 9458c93c3d7..a40e12ea42e 100644
--- a/code/modules/paperwork/pen/pen.dm
+++ b/code/modules/paperwork/pen/pen.dm
@@ -8,7 +8,7 @@
throwforce = 0
throw_speed = 7
throw_range = 15
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/pen_flag = PEN_FLAG_ACTIVE //Properties/state of the pen used.
var/stroke_colour = "black" //What colour the ink is! Can be hexadecimal colour or a colour name string.
var/stroke_colour_name = "black" //Human readable name of the stroke colour. Used in text strings, and to identify the nearest colour to the stroke colour.
@@ -22,7 +22,7 @@
. = ..()
set_extension(src, /datum/extension/tool,
list(
- TOOL_DRILL = TOOL_QUALITY_WORST,
+ TOOL_SURGICAL_DRILL = TOOL_QUALITY_WORST,
TOOL_PEN = pen_quality),
list(
@@ -35,20 +35,20 @@
make_pen_description()
/obj/item/pen/attack(atom/A, mob/user, target_zone)
- if(ismob(A))
- var/mob/M = A
- if(ishuman(A) && user.a_intent == I_HELP && target_zone == BP_HEAD)
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD, /obj/item/organ/external/head)
- if(istype(head))
- head.write_on(user, "[stroke_colour_name] [medium_name]")
- else
- to_chat(user, SPAN_WARNING("You stab [M] with \the [src]."))
- admin_attack_log(user, M, "Stabbed using \a [src]", "Was stabbed with \a [src]", "used \a [src] to stab")
- else if(istype(A, /obj/item/organ/external/head))
+ if(isliving(A) && user.a_intent == I_HELP && target_zone == BP_HEAD)
+ var/mob/living/M = A
+ var/obj/item/organ/external/head/head = M.get_organ(BP_HEAD, /obj/item/organ/external/head)
+ if(istype(head))
+ head.write_on(user, "[stroke_colour_name] [medium_name]")
+ return TRUE
+
+ if(istype(A, /obj/item/organ/external/head))
var/obj/item/organ/external/head/head = A
head.write_on(user, "[stroke_colour_name] [medium_name]")
+ return TRUE
+
+ return ..()
/obj/item/pen/proc/toggle()
if(pen_flag & PEN_FLAG_ACTIVE)
diff --git a/code/modules/paperwork/pen/reagent_pen.dm b/code/modules/paperwork/pen/reagent_pen.dm
index 1b531b72cce..3519a61b3c0 100644
--- a/code/modules/paperwork/pen/reagent_pen.dm
+++ b/code/modules/paperwork/pen/reagent_pen.dm
@@ -1,6 +1,6 @@
/obj/item/pen/reagent
atom_flags = ATOM_FLAG_OPEN_CONTAINER
- origin_tech = "{'materials':2,'esoteric':5}"
+ origin_tech = @'{"materials":2,"esoteric":5}'
sharp = 1
pen_quality = TOOL_QUALITY_MEDIOCRE
@@ -38,7 +38,7 @@
* Sleepy Pens
*/
/obj/item/pen/reagent/sleepy
- origin_tech = "{'materials':2,'esoteric':5}"
+ origin_tech = @'{"materials":2,"esoteric":5}'
/obj/item/pen/reagent/sleepy/make_pen_description()
desc = "It's \a [stroke_colour_name] [medium_name] pen with a sharp point and a carefully engraved \"Waffle Co.\"."
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 6c318baa347..01ffa0e2528 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -5,7 +5,7 @@
name = "circuitboard (photocopier)"
build_path = /obj/machinery/photocopier
board_type = "machine"
- origin_tech = "{'engineering':1, 'programming':1}"
+ origin_tech = @'{"engineering":1, "programming":1}'
req_components = list(
/obj/item/stock_parts/printer/buildable = 1,
/obj/item/stock_parts/manipulator = 2,
@@ -28,7 +28,7 @@
density = TRUE
idle_power_usage = 30
active_power_usage = 200
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
obj_flags = OBJ_FLAG_ANCHORABLE
construct_state = /decl/machine_construction/default/panel_closed
maximum_component_parts = list(
@@ -60,10 +60,10 @@
printer = get_component_of_type(/obj/item/stock_parts/printer) //Cache the printer component
if(printer)
printer.show_queue_ctrl = FALSE //Make sure we don't let users mess with the print queue
- printer.register_on_printed_page( CALLBACK(src, /obj/machinery/photocopier/proc/update_ui))
- printer.register_on_finished_queue(CALLBACK(src, /obj/machinery/photocopier/proc/update_ui))
- printer.register_on_print_error( CALLBACK(src, /obj/machinery/photocopier/proc/update_ui))
- printer.register_on_status_changed(CALLBACK(src, /obj/machinery/photocopier/proc/update_ui))
+ printer.register_on_printed_page( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui)))
+ printer.register_on_finished_queue(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui)))
+ printer.register_on_print_error( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui)))
+ printer.register_on_status_changed(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui)))
/obj/machinery/photocopier/on_update_icon()
cut_overlays()
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 4b273e23071..7641bf1ca10 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -18,7 +18,7 @@
w_class = ITEM_SIZE_TINY
throwforce = 0
throw_range = 10
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/tmp/max_uses = 10
var/uses_left = 10
@@ -64,7 +64,7 @@
randpixel = 10
w_class = ITEM_SIZE_TINY
item_flags = ITEM_FLAG_CAN_TAPE
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/id //Unique id used to name the photo resource to upload to the client, and for synthetic photo synchronization
var/icon/img //The actual real photo image
var/image/tiny //A thumbnail of the image that's displayed on the actual world icon of the photo
@@ -183,20 +183,13 @@
w_class = ITEM_SIZE_NORMAL //same as book
storage_slots = DEFAULT_BOX_STORAGE //yes, that's storage_slots. Photos are w_class 1 so this has as many slots equal to the number of photos you could put in a box
can_hold = list(/obj/item/photo)
- material = /decl/material/solid/cardboard
-
-/obj/item/storage/photo_album/handle_mouse_drop(atom/over, mob/user)
- if(istype(over, /obj/screen/inventory))
- var/obj/screen/inventory/inv = over
- playsound(loc, "rustle", 50, 1, -5)
- if(user.get_equipped_item(slot_back_str) == src)
- add_fingerprint(user)
- if(user.try_unequip(src))
- user.equip_to_slot_if_possible(src, inv.slot_id)
- else if(over == user && in_range(src, user) || loc == user)
- if(user.active_storage)
- user.active_storage.close(user)
- show_to(user)
+ material = /decl/material/solid/organic/plastic
+
+/obj/item/storage/photo_album/handle_mouse_drop(atom/over, mob/user, params)
+ if(over == user && in_range(src, user) || loc == user)
+ if(user.active_storage)
+ user.active_storage.close(user)
+ show_to(user)
return TRUE
. = ..()
@@ -214,10 +207,14 @@
obj_flags = OBJ_FLAG_CONDUCTIBLE
slot_flags = SLOT_LOWER_BODY
material = /decl/material/solid/metal/aluminium
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT)
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
var/turned_on = TRUE
- var/field_of_view = 3 //3 tiles
- var/obj/item/camera_film/film //Currently loaded film
+ var/field_of_view = 3 // squared, so 3 is a 3x3 of tiles
+ var/obj/item/camera_film/film = new //Currently loaded film
+
+/obj/item/camera/loaded/Initialize()
+ film = new(src)
+ return ..()
/obj/item/camera/Initialize()
set_extension(src, /datum/extension/base_icon_state, icon_state)
@@ -305,9 +302,9 @@
if(length(holding))
holding = "They are holding [english_list(holding)]"
if(!mob_detail)
- mob_detail = "You can see [A] on the photo[(A.health / A.maxHealth) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
+ mob_detail = "You can see [A] on the photo[A.get_health_ratio() < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
else
- mob_detail += "You can also see [A] on the photo[(A.health / A.maxHealth)< 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
+ mob_detail += "You can also see [A] on the photo[A.get_health_ratio() < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
return mob_detail
/obj/item/camera/afterattack(atom/target, mob/user, flag)
diff --git a/code/modules/paperwork/printer.dm b/code/modules/paperwork/printer.dm
index d2be8b2b24b..83c8af53727 100644
--- a/code/modules/paperwork/printer.dm
+++ b/code/modules/paperwork/printer.dm
@@ -10,7 +10,7 @@
icon_state = "printer"
randpixel = 5
w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY,
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
@@ -281,7 +281,19 @@
stop_printing_queue()
return FALSE
print_picture(queued_element)
- else
+ else if(istype(queued_element, /obj/item/paper_bundle))
+ var/obj/item/paper_bundle/bundle = queued_element
+ var/photo_count = 0
+ for(var/obj/item/photo/picture in bundle.pages)
+ photo_count++
+ if(!has_enough_to_print((TONER_USAGE_PAPER * (length(bundle.pages) - photo_count)) + (TONER_USAGE_PHOTO * photo_count)))
+ var/obj/machinery/M = loc
+ if(istype(M))
+ M.state("Warning: Not enough paper or toner!")
+ stop_printing_queue()
+ return FALSE
+ print_paper_bundle(bundle)
+ else if(istype(queued_element, /obj/item/paper))
if(!has_enough_to_print(TONER_USAGE_PAPER))
var/obj/machinery/M = loc
if(istype(M))
@@ -289,6 +301,8 @@
stop_printing_queue()
return FALSE
print_paper(queued_element)
+ else
+ PRINT_STACK_TRACE("A printer printed something that wasn't a paper, paper bundle, or photo: [queued_element] ([queued_element.type])")
//#TODO: machinery should allow a component to trigger and wait for an animation sequence. So that we can drop out the paper in sync.
queued_element.dropInto(get_turf(loc))
@@ -305,6 +319,14 @@
use_toner(TONER_USAGE_PHOTO, FALSE) //photos use a lot of ink!
use_paper(1)
+ P.update_icon()
+
+/obj/item/stock_parts/printer/proc/print_paper_bundle(var/obj/item/paper_bundle/bundle)
+ for(var/obj/item/paper/page in bundle.pages)
+ print_paper(page)
+ for(var/obj/item/photo/picture in bundle.pages)
+ print_picture(picture)
+ bundle.update_icon()
/obj/item/stock_parts/printer/proc/print_paper(var/obj/item/paper/P)
//Apply a greyscale filter on all stamps overlays
@@ -321,6 +343,7 @@
use_toner(TONER_USAGE_PAPER, FALSE)
use_paper(1)
+ P.update_icon() // reapply stamp overlays
/obj/item/stock_parts/printer/proc/use_toner(var/amount, var/update_parent = TRUE)
if(!toner?.use_toner(amount))
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index 4facd2232d6..62ca6dd1b30 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -10,7 +10,7 @@
throw_range = 15
material = /decl/material/solid/metal/steel
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT,
)
attack_verb = list("stamped")
diff --git a/code/modules/paperwork/toner_cartridge.dm b/code/modules/paperwork/toner_cartridge.dm
index 2d191cd6ed3..8550afbd739 100644
--- a/code/modules/paperwork/toner_cartridge.dm
+++ b/code/modules/paperwork/toner_cartridge.dm
@@ -11,7 +11,7 @@
throwforce = 3
force = 3
w_class = ITEM_SIZE_NORMAL
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
volume = 60
amount_per_transfer_from_this = 30
possible_transfer_amounts = @"[30,60]"
diff --git a/code/modules/persistence/noticeboards.dm b/code/modules/persistence/noticeboards.dm
index 1b8c6bcaa1b..9a6d48d0613 100644
--- a/code/modules/persistence/noticeboards.dm
+++ b/code/modules/persistence/noticeboards.dm
@@ -8,8 +8,8 @@
layer = ABOVE_WINDOW_LAYER
tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
- directional_offset = "{'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}"
- material = /decl/material/solid/wood
+ directional_offset = @'{"SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}'
+ material = /decl/material/solid/organic/wood
var/tmp/max_notices = 5
var/list/notices
diff --git a/code/modules/persistence/persistence_datum_book.dm b/code/modules/persistence/persistence_datum_book.dm
index c890055a7e1..e55a5cc9427 100644
--- a/code/modules/persistence/persistence_datum_book.dm
+++ b/code/modules/persistence/persistence_datum_book.dm
@@ -60,7 +60,7 @@
if(length(global.station_bookcases))
T = get_turf(pick(global.station_bookcases))
else
- T = pick(global.latejoin_locations)
+ T = get_random_spawn_turf(SPAWN_FLAG_PERSISTENCE_CAN_SPAWN)
. = ..(T, tokens)
diff --git a/code/modules/persistence/persistence_datum_paper.dm b/code/modules/persistence/persistence_datum_paper.dm
index 36a71c49c74..70be0a952a1 100644
--- a/code/modules/persistence/persistence_datum_paper.dm
+++ b/code/modules/persistence/persistence_datum_paper.dm
@@ -14,7 +14,7 @@
var/obj/structure/noticeboard/board = locate() in creating
if(!board)
var/decl/material/mat = SSmaterials.get_material_by_name(tokens["noticeboard_material"])
- board = new(creating, (mat?.type || /decl/material/solid/wood))
+ board = new(creating, (mat?.type || /decl/material/solid/organic/wood))
if("noticeboard_direction" in tokens)
board.set_dir(tokens["noticeboard_direction"])
if(LAZYLEN(board.notices) < board.max_notices)
diff --git a/code/modules/pointdefense/pointdefense.dm b/code/modules/pointdefense/pointdefense.dm
index a945f6b41b4..dfec4c84562 100644
--- a/code/modules/pointdefense/pointdefense.dm
+++ b/code/modules/pointdefense/pointdefense.dm
@@ -8,7 +8,7 @@
anchored = TRUE
base_type = /obj/machinery/pointdefense_control
construct_state = /decl/machine_construction/default/panel_closed
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
var/ui_template = "pointdefense_control.tmpl"
var/initial_id_tag
@@ -105,7 +105,7 @@
desc = "A Kuiper pattern anti-meteor battery. Capable of destroying most threats in a single salvo."
density = TRUE
anchored = TRUE
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
idle_power_usage = 0.1 KILOWATTS
construct_state = /decl/machine_construction/default/panel_closed
base_type = /obj/machinery/pointdefense
@@ -151,7 +151,7 @@
return FALSE
return TRUE
-/obj/machinery/pointdefense/proc/Shoot(var/weakref/target)
+/obj/machinery/pointdefense/proc/shoot_at(var/weakref/target)
var/obj/effect/meteor/M = target.resolve()
if(!istype(M))
return
@@ -159,7 +159,7 @@
var/Angle = round(Get_Angle(src,M))
var/matrix/rot_matrix = matrix()
rot_matrix.Turn(Angle)
- addtimer(CALLBACK(src, .proc/finish_shot, target), rotation_speed)
+ addtimer(CALLBACK(src, PROC_REF(finish_shot), target), rotation_speed)
animate(src, transform = rot_matrix, rotation_speed, easing = SINE_EASING)
set_dir(transform.get_angle() > 0 ? NORTH : SOUTH)
@@ -233,7 +233,7 @@
if(!emagged && space_los(M))
var/weakref/target = weakref(M)
PC.targets +=target
- Shoot(target)
+ shoot_at(target)
return
/obj/machinery/pointdefense/RefreshParts()
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 4190c0b618b..27911cf1baa 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -100,7 +100,7 @@ var/global/list/all_apcs = list()
initial_access = list(access_engine_equip)
clicksound = "switch"
layer = ABOVE_WINDOW_LAYER
- directional_offset = "{'NORTH':{'y':22}, 'SOUTH':{'y':-22}, 'EAST':{'x':22}, 'WEST':{'x':-22}}"
+ directional_offset = @'{"NORTH":{"y":22}, "SOUTH":{"y":-22}, "EAST":{"x":22}, "WEST":{"x":-22}}'
var/powered_down = FALSE
var/area/area
@@ -220,14 +220,14 @@ var/global/list/all_apcs = list()
old_area.power_environ = 0
power_alarm.clearAlarm(old_area, src)
old_area.power_change()
- events_repository.unregister(/decl/observ/name_set, old_area, src, .proc/change_area_name)
+ events_repository.unregister(/decl/observ/name_set, old_area, src, PROC_REF(change_area_name))
if(new_area)
ASSERT(isnull(new_area.apc))
ASSERT(isnull(area))
new_area.apc = src
area = new_area
change_area_name(new_area, null, new_area.name)
- events_repository.register(/decl/observ/name_set, new_area, src, .proc/change_area_name)
+ events_repository.register(/decl/observ/name_set, new_area, src, PROC_REF(change_area_name))
/obj/machinery/power/apc/get_req_access()
if(!locked)
diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm
index 0822883f516..c1e1c7610d1 100644
--- a/code/modules/power/breaker_box.dm
+++ b/code/modules/power/breaker_box.dm
@@ -5,7 +5,7 @@
// Used for advanced grid control (read: Substations)
/obj/machinery/power/breakerbox
- name = "Breaker Box"
+ name = "breaker box"
icon = 'icons/obj/power.dmi'
icon_state = "bbox_off"
desc = "A large machine with heavy duty switching circuits used for advanced grid control."
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 8b8e086ded0..86bb4d1d262 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -31,8 +31,10 @@ By design, d1 is the smallest direction and d2 is the highest
color = COLOR_MAROON
anchored = TRUE
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
- level = 1
+ level = LEVEL_BELOW_PLATING
+ /// Whether this cable type can be (re)colored.
+ var/can_have_color = TRUE
var/d1
var/d2
var/datum/powernet/powernet
@@ -73,7 +75,7 @@ By design, d1 is the smallest direction and d2 is the highest
// ensure d1 & d2 reflect the icon_state for entering and exiting cable
. = ..(ml)
var/turf/T = src.loc // hide if turf is not intact
- if(level==1 && T)
+ if(level == LEVEL_BELOW_PLATING && T)
hide(!T.is_plating())
global.cable_list += src //add it to the global cable list
@@ -241,6 +243,8 @@ By design, d1 is the smallest direction and d2 is the highest
. = ..()
/obj/structure/cable/proc/cableColor(var/colorC)
+ if(!can_have_color)
+ return
var/color_n = "#dd0000"
if(colorC)
color_n = colorC
@@ -255,7 +259,7 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/structure/cable/proc/mergeDiagonalsNetworks(var/direction)
//search for and merge diagonally matching cables from the first direction component (north/south)
- var/turf/T = get_step(src, direction&3)//go north/south
+ var/turf/T = get_step_resolving_mimic(src, direction & (NORTH|SOUTH))
for(var/obj/structure/cable/C in T)
@@ -265,7 +269,7 @@ By design, d1 is the smallest direction and d2 is the highest
if(src == C)
continue
- if(C.d1 == (direction^3) || C.d2 == (direction^3)) //we've got a diagonally matching cable
+ if(C.d1 == (direction ^ (NORTH|SOUTH)) || C.d2 == (direction ^ (NORTH|SOUTH))) //we've got a diagonally matching cable
if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables)
var/datum/powernet/newPN = new()
newPN.add_cable(C)
@@ -276,7 +280,7 @@ By design, d1 is the smallest direction and d2 is the highest
C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet
//the same from the second direction component (east/west)
- T = get_step(src, direction&12)//go east/west
+ T = get_step_resolving_mimic(src, direction & (EAST|WEST))
for(var/obj/structure/cable/C in T)
@@ -285,7 +289,7 @@ By design, d1 is the smallest direction and d2 is the highest
if(src == C)
continue
- if(C.d1 == (direction^12) || C.d2 == (direction^12)) //we've got a diagonally matching cable
+ if(C.d1 == (direction ^ (EAST|WEST)) || C.d2 == (direction ^ (EAST|WEST))) //we've got a diagonally matching cable
if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables)
var/datum/powernet/newPN = new()
newPN.add_cable(C)
@@ -303,7 +307,7 @@ By design, d1 is the smallest direction and d2 is the highest
if(!(d1 == direction || d2 == direction)) //if the cable is not pointed in this direction, do nothing
return
- var/turf/TB = get_zstep(src, direction)
+ var/turf/TB = get_zstep_resolving_mimic(src, direction)
for(var/obj/structure/cable/C in TB)
@@ -380,14 +384,14 @@ By design, d1 is the smallest direction and d2 is the highest
if(cable_dir == 0)
continue
var/reverse = global.reverse_dir[cable_dir]
- T = get_zstep(src, cable_dir)
+ T = get_zstep_resolving_mimic(src, cable_dir)
if(T)
for(var/obj/structure/cable/C in T)
if(C.d1 == reverse || C.d2 == reverse)
. += C
if(cable_dir & (cable_dir - 1)) // Diagonal, check for /\/\/\ style cables along cardinal directions
for(var/pair in list(NORTH|SOUTH, EAST|WEST))
- T = get_step(src, cable_dir & pair)
+ T = get_step_resolving_mimic(src, cable_dir & pair)
if(T)
var/req_dir = cable_dir ^ pair
for(var/obj/structure/cable/C in T)
@@ -431,7 +435,7 @@ By design, d1 is the smallest direction and d2 is the highest
var/list/P_list
if(!T1) return
if(d1)
- T1 = get_step(T1, d1)
+ T1 = get_zstep_resolving_mimic(T1, d1)
P_list = power_list(T1, src, turn(d1,180),0,cable_only = 1) // what adjacently joins on to cut cable...
P_list += power_list(loc, src, d1, 0, cable_only = 1)//... and on turf
@@ -487,7 +491,7 @@ By design, d1 is the smallest direction and d2 is the highest
material = /decl/material/solid/metal/copper
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
obj_flags = OBJ_FLAG_CONDUCTIBLE
slot_flags = SLOT_LOWER_BODY
@@ -495,6 +499,8 @@ By design, d1 is the smallest direction and d2 is the highest
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
stack_merge_type = /obj/item/stack/cable_coil
matter_multiplier = 0.15
+ /// Whether or not this cable coil can even have a color in the first place.
+ var/can_have_color = TRUE
/obj/item/stack/cable_coil/single
amount = 1
@@ -509,14 +515,13 @@ By design, d1 is the smallest direction and d2 is the highest
max_health = ITEM_HEALTH_NO_DAMAGE
is_spawnable_type = FALSE
-/obj/item/stack/cable_coil/Initialize(mapload, c_length = MAXCOIL, var/param_color = null)
+/obj/item/stack/cable_coil/Initialize(mapload, c_length, var/param_color = null)
. = ..(mapload, c_length)
set_extension(src, /datum/extension/tool/variable, list(
TOOL_CABLECOIL = TOOL_QUALITY_DEFAULT,
TOOL_SUTURES = TOOL_QUALITY_MEDIOCRE
))
- src.amount = c_length
- if (param_color) // It should be red by default, so only recolor it if parameter was specified.
+ if (can_have_color && param_color) // It should be red by default, so only recolor it if parameter was specified.
color = param_color
update_icon()
update_wclass()
@@ -548,7 +553,7 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/item/stack/cable_coil/on_update_icon()
. = ..()
- if (!color)
+ if (!color && can_have_color)
var/list/possible_cable_colours = get_global_cable_colors()
color = possible_cable_colours[pick(possible_cable_colours)]
if(amount == 1)
@@ -565,7 +570,7 @@ By design, d1 is the smallest direction and d2 is the highest
SetName(initial(name))
/obj/item/stack/cable_coil/proc/set_cable_color(var/selected_color, var/user)
- if(!selected_color)
+ if(!selected_color || !can_have_color)
return
var/list/possible_cable_colours = get_global_cable_colors()
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 66c00a53646..e5c5de34844 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/power.dmi'
icon_state = "cell"
item_state = "cell"
- origin_tech = "{'powerstorage':1}"
+ origin_tech = @'{"powerstorage":1}'
force = 5.0
throwforce = 5
throw_speed = 3
@@ -14,11 +14,10 @@
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
var/charge // Current charge
var/maxcharge = 1000 // Capacity in Wh
- var/overlay_state
/obj/item/cell/Initialize()
. = ..()
@@ -40,19 +39,16 @@
/obj/item/cell/on_update_icon()
. = ..()
- var/new_overlay_state = null
+ var/overlay_state = null
switch(percent())
if(95 to 100)
- new_overlay_state = "cell-o2"
+ overlay_state = "cell-o2"
if(25 to 95)
- new_overlay_state = "cell-o1"
+ overlay_state = "cell-o1"
if(0.05 to 25)
- new_overlay_state = "cell-o0"
-
- if(new_overlay_state != overlay_state)
- overlay_state = new_overlay_state
- if(overlay_state)
- add_overlay(overlay_state)
+ overlay_state = "cell-o0"
+ if(overlay_state)
+ add_overlay(overlay_state)
/obj/item/cell/proc/percent() // return % charge of cell
return maxcharge && (100.0*charge/maxcharge)
@@ -136,9 +132,10 @@
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
-/obj/item/cell/device/variable/Initialize(mapload, charge_amount)
- maxcharge = charge_amount
- return ..(mapload)
+/obj/item/cell/device/variable/Initialize(ml, material_key, charge_amount)
+ if(!isnull(charge_amount))
+ maxcharge = charge_amount
+ return ..(ml, material_key)
/obj/item/cell/device/standard
name = "standard device power cell"
@@ -151,17 +148,51 @@
maxcharge = 100
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
- origin_tech = "{'powerstorage':2}"
+ origin_tech = @'{"powerstorage":2}'
+
+/obj/item/cell/device/infinite
+ name = "experimental device power cell"
+ desc = "This special experimental power cell has both very large capacity, and ability to recharge itself with zero-point energy."
+ icon_state = "icell"
+ origin_tech = null
+ maxcharge = 3000
+ material = /decl/material/solid/metal/steel
+ matter = list(
+ /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/metal/aluminium = MATTER_AMOUNT_TRACE
+ )
+
+/obj/item/cell/device/infinite/percent()
+ return 100
+
+/obj/item/cell/device/infinite/fully_charged()
+ return TRUE
+
+/obj/item/cell/device/infinite/check_charge(var/amount)
+ return (maxcharge >= amount)
+
+/obj/item/cell/device/infinite/use(var/amount)
+ return min(maxcharge, amount)
+
+/obj/item/cell/device/infinite/checked_use(var/amount)
+ return check_charge(amount)
+
+/obj/item/cell/device/infinite/give()
+ return 0
+
+/obj/item/cell/device/infinite/get_electrocute_damage()
+ charge = maxcharge
+ return ..()
/obj/item/cell/crap
name = "old power cell"
desc = "A cheap old power cell. It's probably been in use for quite some time now."
- origin_tech = "{'powerstorage':1}"
+ origin_tech = @'{"powerstorage":1}'
maxcharge = 100
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
/obj/item/cell/crap/empty
@@ -170,36 +201,36 @@
/obj/item/cell/standard
name = "standard power cell"
desc = "A standard and relatively cheap power cell, commonly used."
- origin_tech = "{'powerstorage':1}"
+ origin_tech = @'{"powerstorage":1}'
maxcharge = 250
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
/obj/item/cell/apc
name = "APC power cell"
desc = "A special power cell designed for heavy-duty use in area power controllers."
- origin_tech = "{'powerstorage':1}"
+ origin_tech = @'{"powerstorage":1}'
maxcharge = 500
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
/obj/item/cell/high
name = "advanced power cell"
desc = "An advanced high-grade power cell, for use in important systems."
- origin_tech = "{'powerstorage':2}"
+ origin_tech = @'{"powerstorage":2}'
icon_state = "hcell"
maxcharge = 1000
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
/obj/item/cell/high/empty
@@ -208,7 +239,7 @@
/obj/item/cell/exosuit
name = "exosuit power cell"
desc = "A special power cell designed for heavy-duty use in industrial exosuits."
- origin_tech = "{'powerstorage':3}"
+ origin_tech = @'{"powerstorage":3}'
icon_state = "hcell"
maxcharge = 1500
material = /decl/material/solid/metal/steel
@@ -221,7 +252,7 @@
/obj/item/cell/super
name = "enhanced power cell"
desc = "A very advanced power cell with increased energy density, for use in critical applications."
- origin_tech = "{'powerstorage':5}"
+ origin_tech = @'{"powerstorage":5}'
icon_state = "scell"
maxcharge = 2000
material = /decl/material/solid/metal/steel
@@ -236,7 +267,7 @@
/obj/item/cell/hyper
name = "superior power cell"
desc = "Pinnacle of power storage technology, this very expensive power cell provides the best energy density reachable with conventional electrochemical cells."
- origin_tech = "{'powerstorage':6}"
+ origin_tech = @'{"powerstorage":6}'
icon_state = "hpcell"
maxcharge = 3000
material = /decl/material/solid/metal/steel
@@ -287,7 +318,7 @@
/obj/item/cell/potato
name = "potato battery"
desc = "A rechargable starch based power cell."
- origin_tech = "{'powerstorage':1}"
+ origin_tech = @'{"powerstorage":1}'
icon = 'icons/obj/power.dmi'
icon_state = "potato_cell"
maxcharge = 20
@@ -296,7 +327,7 @@
/obj/item/cell/gun
name = "weapon energy cell"
desc = "A military grade high-density battery, expected to deplete after tens of thousands of complete charge cycles."
- origin_tech = "{'combat':2,'materials':2,'powerstorage': 2}"
+ origin_tech = @'{"combat":2,"materials":2,"powerstorage": 2}'
icon_state = "gunbattery"
maxcharge = 500
w_class = ITEM_SIZE_SMALL //Perhaps unwise.
diff --git a/code/modules/power/fission/core.dm b/code/modules/power/fission/core.dm
index 763dbb7cdd8..0ed5dcc2732 100644
--- a/code/modules/power/fission/core.dm
+++ b/code/modules/power/fission/core.dm
@@ -216,7 +216,7 @@
if(!user.try_unequip(W, src))
return
fuel_rods[W] = FALSE // Rod is not exposed to begin with.
- visible_message(SPAN_NOTICE("\The [user] inserts \a [W] into \the [src]."), SPAN_NOTICE("You insert \a [W] into \the [src]."))
+ user.visible_message(SPAN_NOTICE("\The [user] inserts \a [W] into \the [src]."), SPAN_NOTICE("You insert \a [W] into \the [src]."))
return
. = ..()
diff --git a/code/modules/power/fission/fission_circuits.dm b/code/modules/power/fission/fission_circuits.dm
index 27c88bea33e..f36b48f2fa3 100644
--- a/code/modules/power/fission/fission_circuits.dm
+++ b/code/modules/power/fission/fission_circuits.dm
@@ -1,13 +1,13 @@
/obj/item/stock_parts/circuitboard/fission_core_control
name = "circuit board (fission core controller)"
build_path = /obj/machinery/computer/fission
- origin_tech = "{'programming':2,'engineering':3}"
+ origin_tech = @'{"programming":2,"engineering":3}'
/obj/item/stock_parts/circuitboard/unary_atmos/fission_core
name = "circuit board (fission core)"
build_path = /obj/machinery/atmospherics/unary/fission_core
board_type = "machine"
- origin_tech = "{'engineering':2,'materials':2}"
+ origin_tech = @'{"engineering":2,"materials":2}'
additional_spawn_components = list(
/obj/item/stock_parts/power/apc/buildable = 1
)
diff --git a/code/modules/power/floorlamp.dm b/code/modules/power/floorlamp.dm
index 6c2bdabce05..39ff3b57c3a 100644
--- a/code/modules/power/floorlamp.dm
+++ b/code/modules/power/floorlamp.dm
@@ -72,7 +72,7 @@
desc = "A lampshade for a lamp."
icon = 'icons/obj/floorlamp.dmi'
icon_state = "lampshade"
- material = /decl/material/solid/cloth
+ material = /decl/material/solid/organic/cloth
obj_flags = OBJ_FLAG_HOLLOW
w_class = ITEM_SIZE_NORMAL
diff --git a/code/modules/power/fuel_assembly/fuel_compressor.dm b/code/modules/power/fuel_assembly/fuel_compressor.dm
index 09d8f49f561..6df9b9a8a0b 100644
--- a/code/modules/power/fuel_assembly/fuel_compressor.dm
+++ b/code/modules/power/fuel_assembly/fuel_compressor.dm
@@ -111,7 +111,7 @@
rod_makeup[mat_type] = amt
return TOPIC_REFRESH
-/obj/machinery/fuel_compressor/receive_mouse_drop(var/atom/movable/dropping, var/mob/user)
+/obj/machinery/fuel_compressor/receive_mouse_drop(atom/dropping, mob/user, params)
if(user.incapacitated() || !user.Adjacent(src))
return
return !add_material(dropping, user)
diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm
index c053090aac8..f1ac424ed41 100644
--- a/code/modules/power/fusion/core/core_field.dm
+++ b/code/modules/power/fusion/core/core_field.dm
@@ -87,7 +87,7 @@
catcher.SetSize((iter*2)+1)
particle_catchers.Add(catcher)
- addtimer(CALLBACK(src, .proc/update_light_colors), 10 SECONDS, TIMER_LOOP)
+ addtimer(CALLBACK(src, PROC_REF(update_light_colors)), 10 SECONDS, TIMER_LOOP)
/obj/effect/fusion_em_field/proc/handle_tick()
//make sure the field generator is still intact
@@ -194,7 +194,7 @@
if(field_cohesion == 0)
owned_core.Shutdown(force_rupture=1)
-
+
if(percent_unstable > 0.5 && prob(percent_unstable*100))
if(plasma_temperature < FUSION_RUPTURE_THRESHOLD)
visible_message("\The [src] ripples uneasily, like a disturbed pond.")
diff --git a/code/modules/power/fusion/fusion_circuits.dm b/code/modules/power/fusion/fusion_circuits.dm
index 73814a03224..b03d6a03616 100644
--- a/code/modules/power/fusion/fusion_circuits.dm
+++ b/code/modules/power/fusion/fusion_circuits.dm
@@ -1,13 +1,13 @@
/obj/item/stock_parts/circuitboard/fusion/core_control
name = "circuitboard (fusion core controller)"
build_path = /obj/machinery/computer/fusion/core_control
- origin_tech = "{'programming':4,'engineering':4}"
+ origin_tech = @'{"programming":4,"engineering":4}'
/obj/item/stock_parts/circuitboard/kinetic_harvester
name = "circuitboard (kinetic harvester)"
build_path = /obj/machinery/kinetic_harvester
board_type = "machine"
- origin_tech = "{'programming':4,'engineering':4,'materials':4}"
+ origin_tech = @'{"programming":4,"engineering":4,"materials":4}'
additional_spawn_components = list(
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/keyboard = 1
@@ -21,18 +21,18 @@
/obj/item/stock_parts/circuitboard/fusion_fuel_control
name = "circuitboard (fusion fuel controller)"
build_path = /obj/machinery/computer/fusion/fuel_control
- origin_tech = "{'programming':4,'engineering':4}"
+ origin_tech = @'{"programming":4,"engineering":4}'
/obj/item/stock_parts/circuitboard/gyrotron_control
name = "circuitboard (gyrotron controller)"
build_path = /obj/machinery/computer/fusion/gyrotron
- origin_tech = "{'programming':4,'engineering':4}"
+ origin_tech = @'{"programming":4,"engineering":4}'
/obj/item/stock_parts/circuitboard/fusion_core
name = "circuitboard (fusion core)"
build_path = /obj/machinery/fusion_core
board_type = "machine"
- origin_tech = "{'wormholes':2,'magnets':4,'powerstorage':4}"
+ origin_tech = @'{"wormholes":2,"magnets":4,"powerstorage":4}'
additional_spawn_components = list(
/obj/item/stock_parts/power/terminal = 1
)
@@ -48,7 +48,7 @@
name = "circuitboard (fusion fuel injector)"
build_path = /obj/machinery/fusion_fuel_injector
board_type = "machine"
- origin_tech = "{'powerstorage':3,'engineering':4,'materials':4}"
+ origin_tech = @'{"powerstorage":3,"engineering":4,"materials":4}'
req_components = list(
/obj/item/stock_parts/manipulator/pico = 2,
/obj/item/stock_parts/scanning_module/phasic = 1,
@@ -61,7 +61,7 @@
name = "circuitboard (gyrotron)"
build_path = /obj/machinery/emitter/gyrotron
board_type = "machine"
- origin_tech = "{'powerstorage':4,'engineering':4}"
+ origin_tech = @'{"powerstorage":4,"engineering":4}'
additional_spawn_components = list(
/obj/item/stock_parts/power/terminal = 1
)
diff --git a/code/modules/power/fusion/fusion_particle_catcher.dm b/code/modules/power/fusion/fusion_particle_catcher.dm
index fcd106b6662..fc23d2ce304 100644
--- a/code/modules/power/fusion/fusion_particle_catcher.dm
+++ b/code/modules/power/fusion/fusion_particle_catcher.dm
@@ -2,7 +2,7 @@
icon = 'icons/effects/effects.dmi'
density = TRUE
anchored = TRUE
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
light_color = COLOR_BLUE
is_spawnable_type = FALSE // invalid without parent passed
diff --git a/code/modules/power/geothermal/_geothermal.dm b/code/modules/power/geothermal/_geothermal.dm
index 9cad5e8ccd0..101fdd6bcbf 100644
--- a/code/modules/power/geothermal/_geothermal.dm
+++ b/code/modules/power/geothermal/_geothermal.dm
@@ -31,7 +31,7 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000
// Geyser Object
//////////////////////////////////////////////////////////////////////
-///A prop that periodically emit steam spouts and can have a geothermal generator placed on top to generate power.
+/// A prop that periodically emit steam spouts and can have a geothermal generator placed on top to generate power.
/obj/effect/geyser
name = "geothermal vent"
desc = "A vent leading to an underground geothermally heated reservoir, which periodically spews superheated liquid."
@@ -39,8 +39,8 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000
icon_state = "geyser"
anchored = TRUE
layer = TURF_LAYER + 0.01
- level = 1 //Goes under floor/plating
- ///The particle emitter that will generate the steam column effect for this geyser
+ level = LEVEL_BELOW_PLATING // Goes under floor/plating
+ /// The particle emitter that will generate the steam column effect for this geyser
var/particles/geyser_steam/steamfx
/obj/effect/geyser/Initialize(ml)
@@ -84,7 +84,10 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000
for(var/turf/exterior/seafloor/T in RANGE_TURFS(loc, 5))
var/dist = get_dist(loc, T)-1
if(prob(100 - (dist * 20)))
- T = T.ChangeTurf(/turf/exterior/mud)
+ if(prob(25))
+ T = T.ChangeTurf(/turf/exterior/clay)
+ else
+ T = T.ChangeTurf(/turf/exterior/mud)
if(prob(50 - (dist * 10)))
new /obj/random/seaweed(T)
@@ -187,7 +190,7 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000
current_pressure = clamp(current_pressure + pressure, 0, MAX_GEOTHERMAL_PRESSURE)
var/leftover = round(pressure - current_pressure)
if(leftover > 0)
- addtimer(CALLBACK(src, .proc/propagate_pressure, leftover), 5)
+ addtimer(CALLBACK(src, PROC_REF(propagate_pressure), leftover), 5)
update_icon()
START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF)
@@ -204,7 +207,7 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000
generate_power(last_generated)
remaining_pressure = round(remaining_pressure * GEOTHERMAL_PRESSURE_LOSS)
if(remaining_pressure)
- addtimer(CALLBACK(src, .proc/propagate_pressure, remaining_pressure), 5)
+ addtimer(CALLBACK(src, PROC_REF(propagate_pressure), remaining_pressure), 5)
update_icon()
if(current_pressure <= 1)
return PROCESS_KILL
diff --git a/code/modules/power/geothermal/geothermal_circuit.dm b/code/modules/power/geothermal/geothermal_circuit.dm
index 07d451d68fa..f569521f85e 100644
--- a/code/modules/power/geothermal/geothermal_circuit.dm
+++ b/code/modules/power/geothermal/geothermal_circuit.dm
@@ -2,7 +2,7 @@
name = "circuitboard (geothermal generator)"
build_path = /obj/machinery/geothermal
board_type = "machine"
- origin_tech = "{'magnets':3,'powerstorage':3}"
+ origin_tech = @'{"magnets":3,"powerstorage":3}'
req_components = list(
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/manipulator = 2,
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index d6121c37a9f..b0279ba8abd 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -37,7 +37,7 @@
construct_state = /decl/machine_construction/wall_frame/panel_closed/simple
base_type = /obj/machinery/light
frame_type = /obj/item/frame/light
- directional_offset = "{'NORTH':{'y':21}, 'EAST':{'x':10}, 'WEST':{'x':-10}}"
+ directional_offset = @'{"NORTH":{"y":21}, "EAST":{"x":10}, "WEST":{"x":-10}}'
var/on = 0 // 1 if on, 0 if off
var/flickering = 0
@@ -412,6 +412,7 @@
/obj/machinery/light/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C
broken()
+ return ..()
/obj/machinery/light/small/readylight
light_type = /obj/item/light/bulb/red/readylight
@@ -472,7 +473,7 @@
throwforce = 5
w_class = ITEM_SIZE_TINY
material = /decl/material/solid/metal/steel
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CAN_BE_PAINTED
+ atom_flags = ATOM_FLAG_CAN_BE_PAINTED
obj_flags = OBJ_FLAG_HOLLOW
var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
@@ -592,7 +593,7 @@
to_chat(user, "You inject the solution into \the [src].")
for(var/rtype in S.reagents?.reagent_volumes)
var/decl/material/R = GET_DECL(rtype)
- if(R.fuel_value)
+ if(R.accelerant_value > FUEL_VALUE_ACCELERANT)
rigged = TRUE
log_and_message_admins("injected a light with flammable reagents, rigging it to explode.", user)
break
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 0cc70e45ac5..5e1ad2297c3 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -178,10 +178,8 @@
/obj/machinery/port_gen/pacman/proc/process_exhaust()
var/decl/material/mat = GET_DECL(sheet_material)
- if(mat && mat.burn_product)
- var/datum/gas_mixture/environment = loc.return_air()
- if(environment)
- environment.adjust_gas(mat.burn_product, 0.05*power_output)
+ if(mat)
+ mat.add_burn_product(loc, 0.05*power_output)
/obj/machinery/port_gen/pacman/HasFuel()
var/needed_sheets = power_output / time_per_sheet
diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm
index c91a060d678..f4266872ef0 100644
--- a/code/modules/power/sensors/powernet_sensor.dm
+++ b/code/modules/power/sensors/powernet_sensor.dm
@@ -8,11 +8,11 @@
// This is used in NanoUI, for example.
/obj/machinery/power/sensor
- name = "Powernet Sensor"
+ name = "powernet sensor"
desc = "Small machine which transmits data about specific powernet."
anchored = TRUE
density = FALSE
- level = 1
+ level = LEVEL_BELOW_PLATING
icon = 'icons/obj/objects.dmi'
icon_state = "floor_beacon" // If anyone wants to make better sprite, feel free to do so without asking me.
@@ -37,7 +37,7 @@
if(!A)
return // in nullspace
id_tag = "[A.proper_name] #[sequential_id(A.name + "power/sensor")]"
- name = "[id_tag] - Powernet Sensor"
+ name = "[id_tag] - powernet sensor"
// Proc: check_grid_warning()
// Parameters: None
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 7b8984696b4..47a89e778ee 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -10,9 +10,9 @@ var/global/list/rad_collectors = list()
anchored = FALSE
density = TRUE
initial_access = list(access_engine_equip)
+ max_health = 100
var/obj/item/tank/hydrogen/loaded_tank = null
- var/health = 100
var/max_safe_temp = 1000 + T0C
var/melted
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 25e9748ff2c..29f7fc5d532 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -7,7 +7,6 @@
icon_state = "Contain_F"
anchored = TRUE
density = FALSE
- unacidable = 1
light_range = 4
movable_flags = MOVABLE_FLAG_PROXMOVE
var/obj/machinery/field_generator/FG1 = null
diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm
index ebede885d4a..049e62a9051 100644
--- a/code/modules/power/singularity/generator.dm
+++ b/code/modules/power/singularity/generator.dm
@@ -29,7 +29,7 @@
animation.pixel_y = -32
animation.layer = SINGULARITY_EFFECT_LAYER
flick('icons/effects/singularity_effect.dmi', animation)
- addtimer(CALLBACK(src, .proc/spawn_contained, T), 6 SECOND)
+ addtimer(CALLBACK(src, PROC_REF(spawn_contained), T), 6 SECOND)
QDEL_IN(animation, 7 SECOND)
return PROCESS_KILL
diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm
index 3d922b263b2..dc88c1bb9c8 100644
--- a/code/modules/power/singularity/particle_accelerator/particle.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle.dm
@@ -63,7 +63,6 @@
/obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M)
var/radiation = (energy*2)
M.apply_damage((radiation*3),IRRADIATE, damage_flags = DAM_DISPERSED)
- M.updatehealth()
/obj/effect/accelerated_particle/proc/move(var/lag)
set waitfor = FALSE
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index f3971eb3147..004052a0ffb 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -6,7 +6,6 @@ var/global/list/singularities = list()
icon_state = "singularity_s1"
anchored = TRUE
density = TRUE
- unacidable = TRUE //Don't comment this out.
layer = SINGULARITY_LAYER
light_power = 1
light_range = 6
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index 7f42b7b0fd4..bea33abcdbf 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -12,7 +12,7 @@
icon = 'icons/obj/items/stock_parts/stock_parts.dmi'
icon_state = "smes_coil"
w_class = ITEM_SIZE_LARGE // It's LARGE (backpack size)
- origin_tech = "{'materials':7,'powerstorage':7,'engineering':5}"
+ origin_tech = @'{"materials":7,"powerstorage":7,"engineering":5}'
base_type = /obj/item/stock_parts/smes_coil
part_flags = PART_FLAG_HAND_REMOVE
material = /decl/material/solid/metal/steel
@@ -210,8 +210,8 @@
SET_STATUS_MAX(h_user, STAT_PARA, 6)
spawn(0)
empulse(src.loc, 8, 16)
- charge = 0
apcs_overload(1, 10, 20)
+ charge = 0
energy_fail(10)
src.ping("Caution. Output regulators malfunction. Uncontrolled discharge detected.")
@@ -225,8 +225,8 @@
SET_STATUS_MAX(h_user, STAT_PARA, 8)
spawn(0)
empulse(src.loc, 32, 64)
- charge = 0
apcs_overload(5, 25, 100)
+ charge = 0
energy_fail(30)
src.ping("Caution. Output regulators malfunction. Significant uncontrolled discharge detected.")
@@ -258,23 +258,34 @@
total_system_failure(failure_probability, user)
return TRUE
-// Proc: apcs_overload()
-// Parameters: 3 (failure_chance - chance to actually break the APC, overload_chance - Chance of breaking lights, reboot_chance - Chance of temporarily disabling the APC)
-// Description: Damages output powernet by power surge. Destroys few APCs and lights, depending on parameters.
+/**
+ * Processes the APCs overloaded by malfunctioning SMES.
+ *
+ * Damages output powernet by power surge. Destroys or damages few APCs and lights, depending on parameters and current SMES charge.
+ *
+ * - `failure_chance`: chance to actually damage the individual APC (in %). Damage scales from SMES charge, can easily destroy some.
+ * - `overload_chance`: chance of breaking the lightbulbs on individual APC network (in %).
+ * - `reboot_chance`: chance of temporarily (30..60 sec) disabling the individual APC (in %).
+ */
/obj/machinery/power/smes/buildable/proc/apcs_overload(var/failure_chance, var/overload_chance, var/reboot_chance)
if (!src.powernet)
return
-
+ var/list/obj/machinery/power/apc/apcs = list()
for(var/obj/machinery/power/terminal/T in powernet.nodes)
var/obj/machinery/power/apc/A = T.master_machine()
if(istype(A))
if (prob(overload_chance))
A.overload_lighting()
if (prob(failure_chance))
- A.set_broken(TRUE)
+ apcs |= A
if(prob(reboot_chance))
A.energy_fail(rand(30,60))
+ if (apcs.len)
+ var/overload_damage = charge/100/apcs.len
+ for (var/obj/machinery/power/apc/A in apcs)
+ A.take_damage(overload_damage, ELECTROCUTE)
+
// Proc: update_icon()
// Parameters: None
// Description: Allows us to use special icon overlay for critical SMESs
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 992fa1ab3b3..2633d130893 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -12,7 +12,7 @@ var/global/list/solars_list = list()
density = TRUE
idle_power_usage = 0
active_power_usage = 0
- var/health = 10
+ max_health = 10
var/obscured = 0
var/sunfrac = 0
var/efficiency = 1
diff --git a/code/modules/power/stirling.dm b/code/modules/power/stirling.dm
index db91f60ed90..b3e94d0f3e5 100644
--- a/code/modules/power/stirling.dm
+++ b/code/modules/power/stirling.dm
@@ -39,9 +39,15 @@
/obj/machinery/atmospherics/binary/stirling/Process()
..()
+ if(!active)
+ return
+
var/line1_heatcap = air1.heat_capacity()
var/line2_heatcap = air2.heat_capacity()
+ if(!(line1_heatcap + line2_heatcap))
+ return
+
var/delta_t = air1.temperature - air2.temperature
// Absolute value of the heat transfer required to bring both lines in equilibrium.
diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm
index b80f3111c77..80036c842a1 100644
--- a/code/modules/power/terminal.dm
+++ b/code/modules/power/terminal.dm
@@ -7,7 +7,7 @@
name = "terminal"
icon_state = "term"
desc = "It's an underfloor wiring terminal for power equipment."
- level = 1
+ level = LEVEL_BELOW_PLATING
layer = EXPOSED_WIRE_TERMINAL_LAYER
var/obj/item/stock_parts/power/terminal/master
anchored = TRUE
@@ -20,7 +20,7 @@
/obj/machinery/power/terminal/Initialize()
. = ..()
var/turf/T = src.loc
- if(level == 1 && isturf(T))
+ if(level == LEVEL_BELOW_PLATING && isturf(T))
hide(!T.is_plating())
/obj/machinery/power/terminal/Destroy()
@@ -67,7 +67,7 @@
return machine
/obj/machinery/power/terminal/hide(var/do_hide)
- if(do_hide && level == 1)
+ if(do_hide && level == LEVEL_BELOW_PLATING)
layer = WIRE_TERMINAL_LAYER
else
reset_plane_and_layer()
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index d414b975fc5..f8488ea20b3 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -43,22 +43,21 @@
update_icon()
-/obj/item/ammo_casing/Crossed(atom/AM)
+/obj/item/ammo_casing/Crossed(atom/movable/AM)
..()
+ if(!isliving(AM))
+ return
- if(isliving(AM))
- var/mob/living/L = AM
-
- if(L.buckled)
- return
+ var/mob/living/L = AM
+ if(L.buckled || MOVING_DELIBERATELY(L) || prob(90))
+ return
- if(!MOVING_DELIBERATELY(L) && prob(10))
- playsound(src, pick(drop_sound), 50, 1)
- var/turf/turf_current = get_turf(src)
- var/turf/turf_destiinaton = get_step(turf_current, AM.dir)
- if(turf_destiinaton.Adjacent(turf_current))
- throw_at(turf_destiinaton, 2, 2, spin = FALSE)
- animate(src, pixel_x = rand(-16, 16), pixel_y = rand(-16, 16), transform = turn(matrix(), rand(120, 300)), time = rand(3, 8))
+ playsound(src, pick(drop_sound), 50, 1)
+ var/turf/turf_current = get_turf(src)
+ var/turf/turf_destiinaton = get_step(turf_current, AM.dir)
+ if(turf_destiinaton.Adjacent(turf_current))
+ throw_at(turf_destiinaton, 2, 2, spin = FALSE)
+ animate(src, pixel_x = rand(-16, 16), pixel_y = rand(-16, 16), transform = turn(matrix(), rand(120, 300)), time = rand(3, 8))
/obj/item/ammo_casing/proc/leave_residue()
var/obj/item/gun/G = get_recursive_loc_of_type(/obj/item/gun)
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index eafd25d70d6..1d1bf7a0cb0 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -130,7 +130,7 @@
/obj/item/ammo_magazine/pistol
name = "pistol magazine"
icon_state = "pistol"
- origin_tech = "{'combat':2}"
+ origin_tech = @'{"combat":2}'
mag_type = MAGAZINE
caliber = CALIBER_PISTOL
material = /decl/material/solid/metal/steel
@@ -178,7 +178,7 @@
/obj/item/ammo_magazine/box/smallpistol
name = "ammunition box (pistol, small)"
icon_state = "smallpistol"
- origin_tech = "{'combat':2}"
+ origin_tech = @'{"combat":2}'
material = /decl/material/solid/metal/steel
caliber = CALIBER_PISTOL_SMALL
ammo_type = /obj/item/ammo_casing/pistol/small
@@ -187,7 +187,7 @@
/obj/item/ammo_magazine/box/pistol
name = "ammunition box (pistol)"
icon_state = "smallpistol"
- origin_tech = "{'combat':2}"
+ origin_tech = @'{"combat":2}'
caliber = CALIBER_PISTOL
material = /decl/material/solid/metal/steel
ammo_type = /obj/item/ammo_casing/pistol
@@ -203,7 +203,7 @@
ammo_type = /obj/item/ammo_casing/pistol/emp
caliber = CALIBER_PISTOL
max_ammo = 15
- origin_tech = "{'combat':2,'magnets':2,'powerstorage':2}"
+ origin_tech = @'{"combat":2,"magnets":2,"powerstorage":2}'
/obj/item/ammo_magazine/box/emp/smallpistol
name = "ammunition box (pistol, small, haywire)"
@@ -212,12 +212,12 @@
ammo_type = /obj/item/ammo_casing/pistol/small/emp
caliber = CALIBER_PISTOL_SMALL
max_ammo = 8
- origin_tech = "{'combat':2,'magnets':2,'powerstorage':2}"
+ origin_tech = @'{"combat":2,"magnets":2,"powerstorage":2}'
/obj/item/ammo_magazine/rifle
name = "assault rifle magazine"
icon_state = "bullup"
- origin_tech = "{'combat':2}"
+ origin_tech = @'{"combat":2}'
mag_type = MAGAZINE
caliber = CALIBER_RIFLE
material = /decl/material/solid/metal/steel
@@ -235,7 +235,7 @@
/obj/item/ammo_magazine/rifle/drum
name = "machine gun drum magazine"
icon_state = "drum"
- origin_tech = "{'combat':2}"
+ origin_tech = @'{"combat":2}'
mag_type = MAGAZINE
caliber = CALIBER_RIFLE
material = /decl/material/solid/metal/steel
diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm
index e22a7c1e942..7966b8e04f9 100644
--- a/code/modules/projectiles/ammunition/bullets.dm
+++ b/code/modules/projectiles/ammunition/bullets.dm
@@ -85,7 +85,7 @@
leaves_residue = 0
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT)
- origin_tech = "{'combat':3,'materials':3}"
+ origin_tech = @'{"combat":3,"materials":3}'
/obj/item/ammo_casing/shotgun
name = "shotgun slug"
@@ -140,7 +140,7 @@
leaves_residue = 0
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT)
- origin_tech = "{'combat':3,'materials':3}"
+ origin_tech = @'{"combat":3,"materials":3}'
/obj/item/ammo_casing/shotgun/stunshell/emp_act(severity)
if(prob(100/severity)) BB = null
@@ -164,7 +164,7 @@
projectile_type = /obj/item/projectile/ion
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/metal/uranium = MATTER_AMOUNT_REINFORCEMENT)
- origin_tech = "{'combat':4,'materials':3}"
+ origin_tech = @'{"combat":4,"materials":3}'
/obj/item/ammo_casing/shell
name = "shell casing"
@@ -220,4 +220,4 @@
color = COLOR_BLUE_GRAY
bullet_color = COLOR_BLUE_LIGHT
material = /decl/material/solid/glass
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT)
\ No newline at end of file
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
\ No newline at end of file
diff --git a/code/modules/projectiles/ammunition/chemdart.dm b/code/modules/projectiles/ammunition/chemdart.dm
index 2d0325f2b91..6d9d1bc644c 100644
--- a/code/modules/projectiles/ammunition/chemdart.dm
+++ b/code/modules/projectiles/ammunition/chemdart.dm
@@ -4,11 +4,10 @@
damage = 5
sharp = 1
embed = 1 //the dart is shot fast enough to pierce space suits, so I guess splintering inside the target can be a thing. Should be rare due to low damage.
- var/reagent_amount = 15
life_span = 15 //shorter range
- unacidable = 1
-
muzzle_type = null
+ material = /decl/material/solid/glass
+ var/reagent_amount = 15
/obj/item/projectile/bullet/chemdart/initialize_reagents(populate)
create_reagents(reagent_amount)
@@ -36,7 +35,7 @@
desc = "A rack of hollow darts."
icon_state = "darts"
item_state = "rcdammo"
- origin_tech = "{'materials':2}"
+ origin_tech = @'{"materials":2}'
mag_type = MAGAZINE
caliber = CALIBER_DART
ammo_type = /obj/item/ammo_casing/chemdart
diff --git a/code/modules/projectiles/ammunition/magnetic.dm b/code/modules/projectiles/ammunition/magnetic.dm
index 4ad8d749207..893bde26c0c 100644
--- a/code/modules/projectiles/ammunition/magnetic.dm
+++ b/code/modules/projectiles/ammunition/magnetic.dm
@@ -8,7 +8,7 @@
var/basetype = /obj/item/magnetic_ammo
w_class = ITEM_SIZE_SMALL
material = /decl/material/solid/metal/steel
- origin_tech = "{'combat':1}"
+ origin_tech = @'{"combat":1}'
var/remaining = 9
/obj/item/magnetic_ammo/examine(mob/user)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index ef473b48ffb..74fee267478 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -41,7 +41,7 @@
throw_speed = 4
throw_range = 5
force = 5
- origin_tech = "{'combat':1}"
+ origin_tech = @'{"combat":1}'
attack_verb = list("struck", "hit", "bashed")
zoomdevicename = "scope"
@@ -123,7 +123,7 @@
autofiring_at = fire_at
autofiring_by = fire_by
if(!autofiring_timer)
- autofiring_timer = addtimer(CALLBACK(src, .proc/handle_autofire, autoturn), burst_delay, (TIMER_STOPPABLE | TIMER_LOOP | TIMER_UNIQUE | TIMER_OVERRIDE))
+ autofiring_timer = addtimer(CALLBACK(src, PROC_REF(handle_autofire), autoturn), burst_delay, (TIMER_STOPPABLE | TIMER_LOOP | TIMER_UNIQUE | TIMER_OVERRIDE))
else
clear_autofire()
@@ -170,11 +170,17 @@
/obj/item/gun/proc/get_safety_indicator()
return mutable_appearance(icon, "[get_world_inventory_state()][safety_icon][safety()]")
-/obj/item/gun/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
- if(overlay && user_mob.can_wield_item(src) && is_held_twohanded(user_mob) && check_state_in_icon("[overlay.icon_state]-wielded", overlay.icon))
- overlay.icon_state = "[overlay.icon_state]-wielded"
+/obj/item/gun/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
+ if(overlay && user_mob.can_wield_item(src) && is_held_twohanded(user_mob))
+ var/wielded_state = "[overlay.icon_state]-wielded"
+ if(check_state_in_icon(wielded_state, overlay.icon))
+ overlay.icon_state = wielded_state
+ apply_gun_mob_overlays(user_mob, bodytype, overlay, slot, bodypart)
. = ..()
+/obj/item/gun/proc/apply_gun_mob_overlays(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+ return
+
//Checks whether a given mob can use the gun
//Any checks that shouldn't result in handle_click_empty() being called if they fail should go here.
//Otherwise, if you want handle_click_empty() to be called, check in consume_next_projectile() and return null there.
@@ -654,12 +660,6 @@
if(usr == loc)
toggle_safety(usr)
-/obj/item/gun/CtrlClick(var/mob/user)
- if(loc == user)
- toggle_safety(user)
- return TRUE
- . = ..()
-
/obj/item/gun/proc/safety()
return has_safety && safety_state
@@ -718,4 +718,16 @@
return FALSE
if(get_active_hand() != autofiring || incapacitated())
return FALSE
- return TRUE
\ No newline at end of file
+ return TRUE
+
+/obj/item/gun/get_alt_interactions(mob/user)
+ . = ..()
+ LAZYADD(., /decl/interaction_handler/toggle_safety)
+
+/decl/interaction_handler/toggle_safety
+ name = "Toggle Gun Safety"
+ expected_target_type = /obj/item/gun
+
+/decl/interaction_handler/toggle_safety/invoked(atom/target, mob/user, obj/item/prop)
+ var/obj/item/gun/gun = target
+ gun.toggle_safety(user)
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 8db4eb959d4..b8fb610335a 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -10,9 +10,8 @@ var/global/list/registered_cyborg_weapons = list()
fire_sound_text = "laser blast"
accuracy = 1
- var/obj/item/cell/power_supply // What type of power cell this starts with. Uses accepts_cell_type or variable cell if unset.
var/charge_cost = 20 // How much energy is needed to fire.
- var/max_shots = 10 // Determines the capacity of the weapon's power cell. Setting power_supply or accepts_cell_type will override this value.
+ var/max_shots = 10 // Determines the capacity of the weapon's power cell, if the type is not overridded in setup_power_supply().
var/modifystate // Changes the icon_state used for the charge overlay.
var/charge_meter = 1 // If set, the icon state will be chosen based on the current charge
var/indicator_color // Color used for overlay based charge meters
@@ -20,31 +19,24 @@ var/global/list/registered_cyborg_weapons = list()
var/use_external_power = 0 // If set, the weapon will look for an external power source to draw from, otherwise it recharges magically
var/recharge_time = 4 // How many ticks between recharges.
var/charge_tick = 0 // Current charge tick tracker.
- var/accepts_cell_type // Specifies a cell type that can be loaded into this weapon.
// Which projectile type to create when firing.
var/projectile_type = /obj/item/projectile/beam/practice
+/obj/item/gun/energy/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ accepted_cell_type = accepted_cell_type || loaded_cell_type || /obj/item/cell/device/variable
+ loaded_cell_type = loaded_cell_type || accepted_cell_type
+ power_supply_extension_type = power_supply_extension_type || /datum/extension/loaded_cell/unremovable
+ return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, max_shots*charge_cost)
+
/obj/item/gun/energy/switch_firemodes()
. = ..()
if(.)
update_icon()
-/obj/item/gun/energy/emp_act(severity)
- ..()
- update_icon()
-
-/obj/item/gun/energy/Initialize()
-
- if(ispath(power_supply))
- power_supply = new power_supply(src)
- else if(accepts_cell_type)
- power_supply = new accepts_cell_type(src)
- else
- power_supply = new /obj/item/cell/device/variable(src, max_shots*charge_cost)
-
+/obj/item/gun/energy/Initialize(var/ml, var/material_key)
+ setup_power_supply()
. = ..()
-
if(self_recharge)
START_PROCESSING(SSobj, src)
update_icon()
@@ -52,13 +44,10 @@ var/global/list/registered_cyborg_weapons = list()
/obj/item/gun/energy/Destroy()
if(self_recharge)
STOP_PROCESSING(SSobj, src)
- QDEL_NULL(power_supply)
return ..()
-/obj/item/gun/energy/get_cell()
- return power_supply
-
/obj/item/gun/energy/Process()
+ var/obj/item/cell/power_supply = get_cell()
if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the cyborg
charge_tick++
if(charge_tick < recharge_time) return 0
@@ -77,6 +66,7 @@ var/global/list/registered_cyborg_weapons = list()
return 1
/obj/item/gun/energy/consume_next_projectile()
+ var/obj/item/cell/power_supply = get_cell()
if(!power_supply)
return null
if(!ispath(projectile_type))
@@ -90,10 +80,14 @@ var/global/list/registered_cyborg_weapons = list()
return loc.get_cell()
/obj/item/gun/energy/proc/get_shots_remaining()
- . = round(power_supply.charge / charge_cost)
+ var/obj/item/cell/power_supply = get_cell()
+ if(!power_supply)
+ return 0
+ return round(power_supply.charge / charge_cost)
/obj/item/gun/energy/examine(mob/user)
. = ..(user)
+ var/obj/item/cell/power_supply = get_cell()
if(!power_supply)
to_chat(user, "Seems like it's dead.")
return
@@ -104,6 +98,7 @@ var/global/list/registered_cyborg_weapons = list()
/obj/item/gun/energy/proc/get_charge_ratio()
. = 0
+ var/obj/item/cell/power_supply = get_cell()
if(power_supply)
var/ratio = power_supply.percent()
//make sure that rounding down will not give us the empty state even if we have charge for a shot left.
@@ -119,7 +114,7 @@ var/global/list/registered_cyborg_weapons = list()
if(charge_meter)
update_charge_meter()
-/obj/item/gun/energy/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+/obj/item/gun/energy/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay && charge_meter)
var/charge_state = get_charge_state(overlay.icon_state)
if(charge_state && check_state_in_icon(charge_state, overlay.icon))
@@ -136,52 +131,9 @@ var/global/list/registered_cyborg_weapons = list()
if(use_single_icon)
add_overlay(mutable_appearance(icon, "[get_world_inventory_state()][get_charge_ratio()]", indicator_color))
return
+ var/obj/item/cell/power_supply = get_cell()
if(power_supply)
if(modifystate)
icon_state = "[modifystate][get_charge_ratio()]"
else
icon_state = "[initial(icon_state)][get_charge_ratio()]"
-
-//For removable cells.
-/obj/item/gun/energy/attack_hand(mob/user)
- if(!user.is_holding_offhand(src) || isnull(accepts_cell_type) || isnull(power_supply) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE))
- return ..()
- user.put_in_hands(power_supply)
- power_supply = null
- user.visible_message(SPAN_NOTICE("\The [user] unloads \the [src]."))
- playsound(src,'sound/weapons/guns/interaction/smg_magout.ogg' , 50)
- update_icon()
- return TRUE
-
-/obj/item/gun/energy/attackby(var/obj/item/A, mob/user)
-
- if(istype(A, /obj/item/cell))
-
- if(isnull(accepts_cell_type))
- to_chat(user, SPAN_WARNING("\The [src] cannot accept a cell."))
- return TRUE
-
- if(!istype(A, accepts_cell_type))
- var/obj/cell_dummy = accepts_cell_type
- to_chat(user, SPAN_WARNING("\The [src]'s cell bracket can only accept \a [initial(cell_dummy.name)]."))
- return TRUE
-
- if(!user.is_holding_offhand(src))
- to_chat(user, SPAN_WARNING("You must hold \the [src] in your hands to load it."))
- return TRUE
-
- if(istype(power_supply) )
- to_chat(user, SPAN_NOTICE("\The [src] already has \a [power_supply] loaded."))
- return TRUE
-
- if(!do_after(user, 5, A, can_move = TRUE))
- return TRUE
-
- if(user.try_unequip(A, src))
- power_supply = A
- user.visible_message(SPAN_WARNING("\The [user] loads \the [A] into \the [src]!"))
- playsound(src, 'sound/weapons/guns/interaction/energy_magin.ogg', 80)
- update_icon()
- return TRUE
-
- return ..()
diff --git a/code/modules/projectiles/guns/energy/capacitor.dm b/code/modules/projectiles/guns/energy/capacitor.dm
index 0d07d013922..eddeb72c80a 100644
--- a/code/modules/projectiles/guns/energy/capacitor.dm
+++ b/code/modules/projectiles/guns/energy/capacitor.dm
@@ -47,13 +47,13 @@ var/global/list/laser_wavelengths
desc = "An excitingly chunky directed energy weapon that uses a modular capacitor array to charge each shot."
icon = 'icons/obj/guns/capacitor_pistol.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':4,'materials':4,'powerstorage':4}"
+ origin_tech = @'{"combat":4,"materials":4,"powerstorage":4}'
w_class = ITEM_SIZE_NORMAL
charge_cost = 100
+ charge_meter = FALSE
accuracy = 2
fire_delay = 10
slot_flags = SLOT_LOWER_BODY
- power_supply = /obj/item/cell/high
material = /decl/material/solid/metal/steel
projectile_type = /obj/item/projectile/beam/variable
matter = list(
@@ -70,6 +70,12 @@ var/global/list/laser_wavelengths
var/decl/laser_wavelength/charging
var/decl/laser_wavelength/selected_wavelength
+/obj/item/gun/energy/capacitor/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ loaded_cell_type = loaded_cell_type || /obj/item/cell/high
+ accepted_cell_type = accepted_cell_type || /obj/item/cell
+ power_supply_extension_type = power_supply_extension_type || /datum/extension/loaded_cell/secured
+ return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+
/obj/item/gun/energy/capacitor/examine(mob/user, distance)
. = ..()
if(loc == user || distance <= 1)
@@ -103,29 +109,17 @@ var/global/list/laser_wavelengths
return ..()
if(IS_SCREWDRIVER(W))
+ // Unload the cell before the caps.
+ if(get_cell())
+ return ..()
if(length(capacitors))
var/obj/item/stock_parts/capacitor/capacitor = capacitors[1]
capacitor.charge = 0
user.put_in_hands(capacitor)
LAZYREMOVE(capacitors, capacitor)
- else if(power_supply)
- user.put_in_hands(power_supply)
- power_supply = null
- else
- to_chat(user, SPAN_WARNING("\The [src] does not have a cell or capacitor installed."))
- return TRUE
- playsound(loc, 'sound/items/Screwdriver2.ogg', 25)
- update_icon()
- return TRUE
-
- if(istype(W, /obj/item/cell))
- if(power_supply)
- to_chat(user, SPAN_WARNING("\The [src] already has a cell installed."))
- else if(user.try_unequip(W, src))
- power_supply = W
- to_chat(user, SPAN_NOTICE("You fit \the [W] into \the [src]."))
+ playsound(loc, 'sound/items/Screwdriver2.ogg', 25)
update_icon()
- return TRUE
+ return TRUE
if(istype(W, /obj/item/stock_parts/capacitor))
if(length(capacitors) >= max_capacitors)
@@ -147,7 +141,7 @@ var/global/list/laser_wavelengths
charging = FALSE
else
var/new_wavelength = input("Select the desired laser wavelength.", "Capacitor Laser Wavelength", selected_wavelength) as null|anything in global.laser_wavelengths
- if(!charging && new_wavelength != selected_wavelength && (loc == user || user.Adjacent(src)) && !user.incapacitated())
+ if(!charging && new_wavelength && new_wavelength != selected_wavelength && (loc == user || user.Adjacent(src)) && !user.incapacitated())
selected_wavelength = new_wavelength
to_chat(user, SPAN_NOTICE("You dial \the [src] wavelength to [selected_wavelength.name]."))
update_icon()
@@ -166,8 +160,9 @@ var/global/list/laser_wavelengths
for(var/obj/item/stock_parts/capacitor/capacitor in capacitors)
if(capacitor.charge < capacitor.max_charge)
charged = FALSE
+ var/obj/item/cell/power_supply = get_cell()
var/use_charge_cost = min(charge_cost * capacitor.rating, round((capacitor.max_charge - capacitor.charge) / capacitor_charge_constant))
- if(power_supply.use(use_charge_cost))
+ if(power_supply?.use(use_charge_cost))
capacitor.charge(use_charge_cost * capacitor_charge_constant)
update_icon()
else
@@ -183,6 +178,7 @@ var/global/list/laser_wavelengths
var/total_charge_cost = 0
for(var/obj/item/stock_parts/capacitor/capacitor in capacitors)
total_charge_cost += capacitor.max_charge
+ var/obj/item/cell/power_supply = get_cell()
. = round(power_supply?.charge / (total_charge_cost / capacitor_charge_constant))
/obj/item/gun/energy/capacitor/on_update_icon()
@@ -191,7 +187,7 @@ var/global/list/laser_wavelengths
I.color = wiring_color
I.appearance_flags |= RESET_COLOR
add_overlay(I)
- if(power_supply)
+ if(get_cell())
I = image(icon, "[icon_state]-cell")
add_overlay(I)
@@ -223,25 +219,24 @@ var/global/list/laser_wavelengths
var/mob/M = loc
M.update_inhand_overlays()
-/obj/item/gun/energy/capacitor/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+/obj/item/gun/energy/capacitor/apply_gun_mob_overlays(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+ ..()
if(overlay && (slot == BP_L_HAND || slot == BP_R_HAND || slot == slot_back_str))
var/image/I = image(overlay.icon, "[overlay.icon_state]-wiring")
I.color = wiring_color
I.appearance_flags |= RESET_COLOR
overlay.add_overlay(I)
- if(power_supply)
+ if(get_cell())
I = image(overlay.icon, "[overlay.icon_state]-cell")
overlay.add_overlay(I)
- if(slot != slot_back_str)
- for(var/i = 1 to length(capacitors))
- var/obj/item/stock_parts/capacitor/capacitor = capacitors[i]
- if(capacitor.charge > 0)
- I = emissive_overlay(overlay.icon, "[overlay.icon_state]-charging-[i]")
- I.alpha = clamp(255 * (capacitor.charge/capacitor.max_charge), 0, 255)
- I.color = selected_wavelength.color
- I.appearance_flags |= RESET_COLOR
- overlay.overlays += I
- . = ..()
+ for(var/i = 1 to length(capacitors))
+ var/obj/item/stock_parts/capacitor/capacitor = capacitors[i]
+ if(capacitor.charge > 0)
+ I = emissive_overlay(overlay.icon, "[overlay.icon_state]-charging-[i]")
+ I.alpha = clamp(255 * (capacitor.charge/capacitor.max_charge), 0, 255)
+ I.color = selected_wavelength.color
+ I.appearance_flags |= RESET_COLOR
+ overlay.overlays += I
/obj/item/gun/energy/capacitor/consume_next_projectile()
@@ -270,17 +265,22 @@ var/global/list/laser_wavelengths
one_hand_penalty = 6
fire_delay = 20
w_class = ITEM_SIZE_HUGE
- power_supply = /obj/item/cell/super
+
+/obj/item/gun/energy/capacitor/rifle/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ loaded_cell_type = loaded_cell_type || /obj/item/cell/super
+ return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
/obj/item/gun/energy/capacitor/rifle/linear_fusion
name = "linear fusion rifle"
desc = "A chunky, angular, carbon-fiber-finish capacitor rifle, shipped complete with a self-charging power cell. The operating instructions seem to be written in backwards Cyrillic."
color = COLOR_GRAY40
- power_supply = /obj/item/cell/infinite
capacitors = /obj/item/stock_parts/capacitor/super
projectile_type = /obj/item/projectile/beam/variable/split
wiring_color = COLOR_GOLD
+/obj/item/gun/energy/capacitor/rifle/linear_fusion/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/infinite, accepted_cell_type, /datum/extension/loaded_cell/unremovable, charge_value)
+
/obj/item/gun/energy/capacitor/rifle/linear_fusion/attackby(obj/item/W, mob/user)
if(IS_SCREWDRIVER(W))
to_chat(user, SPAN_WARNING("\The [src] is hermetically sealed; you can't get the components out."))
diff --git a/code/modules/projectiles/guns/energy/ebow.dm b/code/modules/projectiles/guns/energy/ebow.dm
index 08402cffafe..5a1bcde899a 100644
--- a/code/modules/projectiles/guns/energy/ebow.dm
+++ b/code/modules/projectiles/guns/energy/ebow.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/guns/energy_crossbow.dmi'
icon_state = ICON_STATE_WORLD
w_class = ITEM_SIZE_NORMAL
- origin_tech = "{'combat':2,'magnets':2,'esoteric':5}"
+ origin_tech = @'{"combat":2,"magnets":2,"esoteric":5}'
material = /decl/material/solid/metal/steel
slot_flags = SLOT_LOWER_BODY
silenced = 1
diff --git a/code/modules/projectiles/guns/energy/egun.dm b/code/modules/projectiles/guns/energy/egun.dm
index be5d3b33eb3..ba6cfb04214 100644
--- a/code/modules/projectiles/guns/energy/egun.dm
+++ b/code/modules/projectiles/guns/energy/egun.dm
@@ -9,7 +9,7 @@
fire_delay = 10 // To balance for the fact that it is a pistol and can be used one-handed without penalty
projectile_type = /obj/item/projectile/beam/stun
- origin_tech = "{'combat':3,'magnets':2}"
+ origin_tech = @'{"combat":3,"magnets":2}'
indicator_color = COLOR_CYAN
firemodes = list(
@@ -42,5 +42,6 @@
/obj/item/gun/energy/gun/reloadable
name = "reloadable energy gun"
desc = "Another bestseller of Lawson Arms and the FTU, the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low, medium and high power projectile settings. In other words: stun, shock or kill."
- power_supply = null
- accepts_cell_type = /obj/item/cell/gun
\ No newline at end of file
+
+/obj/item/gun/energy/gun/reloadable/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/gun, /obj/item/cell/gun, /datum/extension/loaded_cell, charge_value)
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 5224730b58b..ee23a4ab706 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -8,7 +8,7 @@
force = 10
one_hand_penalty = 2
bulk = GUN_BULK_RIFLE
- origin_tech = "{'combat':3,'magnets':2}"
+ origin_tech = @'{"combat":3,"magnets":2}'
material = /decl/material/solid/metal/steel
projectile_type = /obj/item/projectile/beam/midlaser
matter = list(
@@ -74,7 +74,7 @@
icon_state = "lasercannon"
icon = 'icons/obj/guns/laser_cannon.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':4,'materials':3,'powerstorage':3}"
+ origin_tech = @'{"combat":4,"materials":3,"powerstorage":3}'
slot_flags = SLOT_LOWER_BODY|SLOT_BACK
one_hand_penalty = 6 //large and heavy
w_class = ITEM_SIZE_HUGE
@@ -98,9 +98,9 @@
one_hand_penalty = 0
has_safety = FALSE
-
/obj/item/gun/energy/laser/reloadable
name = "reloadable laser carbine"
desc = "A G40E carbine, designed to kill with concentrated energy blasts. Uses removable energy cells."
- power_supply = null
- accepts_cell_type = /obj/item/cell/gun
+
+/obj/item/gun/energy/laser/reloadable/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/gun, /obj/item/cell/gun, power_supply_extension_type, charge_value)
diff --git a/code/modules/projectiles/guns/energy/laser_sniper.dm b/code/modules/projectiles/guns/energy/laser_sniper.dm
index bc037c6c4a0..2b8efadc989 100644
--- a/code/modules/projectiles/guns/energy/laser_sniper.dm
+++ b/code/modules/projectiles/guns/energy/laser_sniper.dm
@@ -4,7 +4,7 @@
desc = "The HI DMR 9E is an older design. A designated marksman rifle capable of shooting powerful ionized beams, this is a weapon to kill from a distance."
icon = 'icons/obj/guns/laser_sniper.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':6,'materials':5,'powerstorage':4}"
+ origin_tech = @'{"combat":6,"materials":5,"powerstorage":4}'
projectile_type = /obj/item/projectile/beam/sniper
one_hand_penalty = 5 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
slot_flags = SLOT_BACK
diff --git a/code/modules/projectiles/guns/energy/lasertag.dm b/code/modules/projectiles/guns/energy/lasertag.dm
index 2f029665387..e9857630b0b 100644
--- a/code/modules/projectiles/guns/energy/lasertag.dm
+++ b/code/modules/projectiles/guns/energy/lasertag.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/guns/laser_carbine.dmi'
icon_state = ICON_STATE_WORLD
desc = "Standard issue weapon of the Imperial Guard."
- origin_tech = "{'combat':1,'magnets':2}"
+ origin_tech = @'{"combat":1,"magnets":2}'
self_recharge = 1
material = /decl/material/solid/metal/steel
projectile_type = /obj/item/projectile/beam/lastertag/blue
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index c594990a7f4..b7ccef79df0 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -2,7 +2,7 @@
name = "advanced energy gun"
desc = "An energy gun with an experimental miniaturized reactor."
icon = 'icons/obj/guns/adv_egun.dmi'
- origin_tech = "{'combat':3,'materials':5,'powerstorage':3}"
+ origin_tech = @'{"combat":3,"materials":5,"powerstorage":3}'
slot_flags = SLOT_LOWER_BODY
w_class = ITEM_SIZE_LARGE
force = 8 //looks heavier than a pistol
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index cb4878d05f1..0b8a92bd278 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -3,7 +3,7 @@
desc = "The Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats. Not the best of its type."
icon = 'icons/obj/guns/ion_rifle.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':2,'magnets':4}"
+ origin_tech = @'{"combat":2,"magnets":4}'
w_class = ITEM_SIZE_HUGE
force = 10
obj_flags = OBJ_FLAG_CONDUCTIBLE
@@ -23,12 +23,18 @@
/obj/item/gun/energy/ionrifle/emp_act(severity)
..(max(severity, 2)) //so it doesn't EMP itself, I guess
+/obj/item/gun/energy/ionrifle/mounted
+ name = "mounted ion gun"
+ self_recharge = TRUE
+ use_external_power = TRUE
+ has_safety = FALSE
+
/obj/item/gun/energy/decloner
name = "biological demolecularisor"
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
icon = 'icons/obj/guns/decloner.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':5,'materials':4,'powerstorage':3}"
+ origin_tech = @'{"combat":5,"materials":4,"powerstorage":3}'
max_shots = 10
projectile_type = /obj/item/projectile/energy/declone
combustion = 0
@@ -43,7 +49,7 @@
charge_cost = 10
max_shots = 10
projectile_type = /obj/item/projectile/energy/floramut
- origin_tech = "{'materials':2,'biotech':3,'powerstorage':3}"
+ origin_tech = @'{"materials":2,"biotech":3,"powerstorage":3}'
self_recharge = 1
material = /decl/material/solid/metal/steel
matter = list(
@@ -102,7 +108,7 @@
icon = 'icons/obj/guns/toxgun.dmi'
icon_state = ICON_STATE_WORLD
w_class = ITEM_SIZE_NORMAL
- origin_tech = "{'combat':5,'exoticmatter':4}"
+ origin_tech = @'{"combat":5,"exoticmatter":4}'
projectile_type = /obj/item/projectile/energy/radiation
material = /decl/material/solid/metal/steel
matter = list(
@@ -120,7 +126,7 @@
slot_flags = SLOT_LOWER_BODY|SLOT_BACK
w_class = ITEM_SIZE_NORMAL
force = 8
- origin_tech = "{'materials':4,'exoticmatter':4,'engineering':6,'combat':3}"
+ origin_tech = @'{"materials":4,"exoticmatter":4,"engineering":6,"combat":3}'
material = /decl/material/solid/metal/steel
projectile_type = /obj/item/projectile/beam/plasmacutter
max_shots = 10
@@ -146,7 +152,8 @@
has_safety = FALSE
/obj/item/gun/energy/plasmacutter/proc/slice(var/mob/M = null)
- if(!safety() && power_supply.checked_use(charge_cost)) //consumes a shot per use
+ var/obj/item/cell/power_supply = get_cell()
+ if(!safety() && power_supply?.checked_use(charge_cost)) //consumes a shot per use
if(M)
M.welding_eyecheck()//Welding tool eye check
if(check_accidents(M, "[M] loses grip on [src] from its sudden recoil!",SKILL_CONSTRUCTION, 60, SKILL_ADEPT))
@@ -165,10 +172,10 @@
icon = 'icons/obj/guns/incendiary_laser.dmi'
icon_state = ICON_STATE_WORLD
safety_icon = "safety"
- origin_tech = "{'combat':7,'magnets':4,'esoteric':4}"
+ origin_tech = @'{"combat":7,"magnets":4,"esoteric":4}'
material = /decl/material/solid/metal/aluminium
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE
)
projectile_type = /obj/item/projectile/beam/incendiary_laser
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index ca42527292f..75de92c76f3 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -34,7 +34,7 @@
desc = "The Mars Military Industries MA21 Selkie is a weapon that uses a laser pulse to ionise the local atmosphere, creating a disorienting pulse of plasma and deafening shockwave as the wave expands."
icon = 'icons/obj/guns/plasma_stun.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':2,'materials':2,'powerstorage':3}"
+ origin_tech = @'{"combat":2,"materials":2,"powerstorage":3}'
fire_delay = 20
max_shots = 4
projectile_type = /obj/item/projectile/energy/plasmastun
@@ -47,7 +47,7 @@
icon = 'icons/obj/guns/confuseray.dmi'
icon_state = ICON_STATE_WORLD
safety_icon = "safety"
- origin_tech = "{'combat':2,'materials':2,'powerstorage':2}"
+ origin_tech = @'{"combat":2,"materials":2,"powerstorage":2}'
w_class = ITEM_SIZE_SMALL
max_shots = 4
projectile_type = /obj/item/projectile/beam/confuseray
diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm
index 7c8e9e1015c..15cd979e5fd 100644
--- a/code/modules/projectiles/guns/energy/temperature.dm
+++ b/code/modules/projectiles/guns/energy/temperature.dm
@@ -10,16 +10,18 @@
/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE
)
charge_cost = 10
- origin_tech = "{'combat':3,'materials':4,'powerstorage':3,'magnets':2}"
+ origin_tech = @'{"combat":3,"materials":4,"powerstorage":3,"magnets":2}'
slot_flags = SLOT_LOWER_BODY|SLOT_BACK
one_hand_penalty = 2
projectile_type = /obj/item/projectile/temp
- power_supply = /obj/item/cell/high
combustion = 0
indicator_color = COLOR_GREEN
var/firing_temperature = T20C
var/current_temperature = T20C
+/obj/item/gun/energy/temperature/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/high, /obj/item/cell, power_supply_extension_type, charge_value)
+
/obj/item/gun/energy/temperature/Initialize()
. = ..()
START_PROCESSING(SSobj, src)
diff --git a/code/modules/projectiles/guns/energy/xray.dm b/code/modules/projectiles/guns/energy/xray.dm
index 6c1bf530b82..cf20a5f1e00 100644
--- a/code/modules/projectiles/guns/energy/xray.dm
+++ b/code/modules/projectiles/guns/energy/xray.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/guns/xray.dmi'
icon_state = ICON_STATE_WORLD
slot_flags = SLOT_LOWER_BODY|SLOT_BACK
- origin_tech = "{'combat':5,'materials':3,'magnets':2,'esoteric':2}"
+ origin_tech = @'{"combat":5,"materials":3,"magnets":2,"esoteric":2}'
projectile_type = /obj/item/projectile/beam/xray/midlaser
one_hand_penalty = 2
w_class = ITEM_SIZE_LARGE
diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm
index fe3e26eb8af..78299825255 100644
--- a/code/modules/projectiles/guns/launcher/crossbow.dm
+++ b/code/modules/projectiles/guns/launcher/crossbow.dm
@@ -11,7 +11,7 @@
sharp = 1
edge = 0
lock_picking_level = 3
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
/obj/item/arrow/proc/removed() //Helper for metal rods falling apart.
return
diff --git a/code/modules/projectiles/guns/launcher/foam_gun.dm b/code/modules/projectiles/guns/launcher/foam_gun.dm
index 6e82e61e584..2334aabb90e 100644
--- a/code/modules/projectiles/guns/launcher/foam_gun.dm
+++ b/code/modules/projectiles/guns/launcher/foam_gun.dm
@@ -13,7 +13,7 @@
one_hand_penalty = 0
fire_sound = 'sound/weapons/foamblaster.ogg'
fire_sound_text = "a pleasing 'pomp'"
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/max_darts = 1
var/list/darts = new/list()
@@ -89,7 +89,7 @@
throwforce = 0
throw_range = 3
does_spin = FALSE
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/item/foam_dart/Initialize()
mix_up()
diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
index 56e02609c8f..4d9c170277a 100644
--- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
@@ -3,7 +3,7 @@
desc = "A bulky pump-action grenade launcher. Holds up to 6 grenades in a revolving magazine."
icon = 'icons/obj/guns/launcher/grenade.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':2,'materials':3}"
+ origin_tech = @'{"combat":2,"materials":3}'
w_class = ITEM_SIZE_HUGE
force = 10
diff --git a/code/modules/projectiles/guns/launcher/money_cannon.dm b/code/modules/projectiles/guns/launcher/money_cannon.dm
index 964cf71c46d..bb585d1c534 100644
--- a/code/modules/projectiles/guns/launcher/money_cannon.dm
+++ b/code/modules/projectiles/guns/launcher/money_cannon.dm
@@ -3,7 +3,7 @@
desc = "A blocky, plastic novelty launcher that claims to be able to shoot money at considerable velocities."
icon = 'icons/obj/guns/launcher/money.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':1,'materials':1}"
+ origin_tech = @'{"combat":1,"materials":1}'
slot_flags = SLOT_LOWER_BODY
w_class = ITEM_SIZE_SMALL
release_force = 80
diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm
index 4506d9ed397..85c47da5a63 100644
--- a/code/modules/projectiles/guns/launcher/pneumatic.dm
+++ b/code/modules/projectiles/guns/launcher/pneumatic.dm
@@ -3,7 +3,7 @@
desc = "A large gas-powered cannon."
icon = 'icons/obj/guns/launcher/pneumatic.dmi'
icon_state = ICON_STATE_WORLD
- origin_tech = "{'combat':4,'materials':3}"
+ origin_tech = @'{"combat":4,"materials":3}'
slot_flags = SLOT_LOWER_BODY
w_class = ITEM_SIZE_HUGE
obj_flags = OBJ_FLAG_CONDUCTIBLE
@@ -133,7 +133,7 @@
icon_state = get_world_inventory_state()
update_held_icon()
-/obj/item/gun/launcher/pneumatic/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+/obj/item/gun/launcher/pneumatic/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay && tank)
overlay.icon_state += "-tank"
. = ..()
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index 9d5e7429ad5..938eba04ffb 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -9,7 +9,7 @@
force = 5.0
obj_flags = OBJ_FLAG_CONDUCTIBLE
slot_flags = 0
- origin_tech = "{'combat':8,'materials':5}"
+ origin_tech = @'{"combat":8,"materials":5}'
fire_sound = 'sound/effects/bang.ogg'
combustion = 1
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index 4068e87fd34..7c3d0956a4f 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -17,8 +17,14 @@
. = ..()
underlays.Cut()
if(syringe)
- underlays += image(syringe.icon, src, syringe.icon_state)
- underlays += syringe.filling
+ var/mutable_appearance/MA = syringe.appearance
+ MA.pixel_x = 0
+ MA.pixel_y = 0
+ MA.pixel_w = 0
+ MA.pixel_z = 0
+ MA.layer = FLOAT_LAYER
+ MA.plane = FLOAT_PLANE
+ underlays += MA
/obj/item/syringe_cartridge/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/chems/syringe) && user.try_unequip(I, src))
diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm
index 8d737b3349f..3fb228c6ccc 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic.dm
@@ -5,33 +5,35 @@
icon_state = ICON_STATE_WORLD
one_hand_penalty = 5
fire_delay = 20
- origin_tech = "{'combat':5,'materials':4,'esoteric':2,'magnets':4}"
+ origin_tech = @'{"combat":5,"materials":4,"esoteric":2,"magnets":4}'
w_class = ITEM_SIZE_LARGE
bulk = GUN_BULK_RIFLE
combustion = 1
- var/obj/item/cell/cell // Currently installed powercell.
- var/obj/item/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots.
+ var/obj/item/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots.
var/removable_components = TRUE // Whether or not the gun can be dismantled.
var/gun_unreliable = 15 // Percentage chance of detonating in your hands.
var/obj/item/loaded // Currently loaded object, for retrieval/unloading.
- var/load_type = /obj/item/stack/material/rods // Type of stack to load with.
- var/load_sheet_max = 1 // Maximum number of "sheets" you can load from a stack.
+ var/load_type = /obj/item/stack/material/rods // Type of stack to load with.
+ var/load_sheet_max = 1 // Maximum number of "sheets" you can load from a stack.
var/projectile_type = /obj/item/projectile/bullet/magnetic // Actual fire type, since this isn't throw_at rod launcher.
var/power_cost = 950 // Cost per fire, should consume almost an entire basic cell.
var/power_per_tick // Capacitor charge per process(). Updated based on capacitor rating.
+/obj/item/gun/magnetic/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(loaded_cell_type, /obj/item/cell, (removable_components ? /datum/extension/loaded_cell : /datum/extension/loaded_cell/unremovable), charge_value)
+
/obj/item/gun/magnetic/preloaded
- cell = /obj/item/cell/high
capacitor = /obj/item/stock_parts/capacitor/adv
+/obj/item/gun/magnetic/preloaded/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/high, accepted_cell_type, power_supply_extension_type, charge_value)
+
/obj/item/gun/magnetic/Initialize()
START_PROCESSING(SSobj, src)
-
- if (ispath(cell))
- cell = new cell()
+ setup_power_supply()
if (ispath(capacitor))
capacitor = new capacitor()
capacitor.charge = capacitor.max_charge
@@ -45,16 +47,13 @@
/obj/item/gun/magnetic/Destroy()
STOP_PROCESSING(SSobj, src)
- QDEL_NULL(cell)
QDEL_NULL(loaded)
QDEL_NULL(capacitor)
. = ..()
-/obj/item/gun/magnetic/get_cell()
- return cell
-
/obj/item/gun/magnetic/Process()
if(capacitor)
+ var/obj/item/cell/cell = get_cell()
if(cell)
if(capacitor.charge < capacitor.max_charge && cell.checked_use(power_per_tick))
capacitor.charge(power_per_tick)
@@ -65,6 +64,7 @@
/obj/item/gun/magnetic/on_update_icon()
. = ..()
+ var/obj/item/cell/cell = get_cell()
if(removable_components)
if(cell)
add_overlay("[icon_state]_cell")
@@ -89,13 +89,10 @@
/obj/item/gun/magnetic/examine(mob/user)
. = ..()
- if(cell)
- to_chat(user, "The installed [cell.name] has a charge level of [round((cell.charge/cell.maxcharge)*100)]%.")
- if(capacitor)
- to_chat(user, "The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.")
- if(!cell || !capacitor)
+ if(!get_cell() || !capacitor)
to_chat(user, "The capacitor charge indicator is blinking [SPAN_RED("red")]. Maybe you should check the cell or capacitor.")
else
+ to_chat(user, "The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.")
if(capacitor.charge < power_cost)
to_chat(user, "The capacitor charge indicator is [SPAN_ORANGE("amber")].")
else
@@ -104,18 +101,6 @@
/obj/item/gun/magnetic/attackby(var/obj/item/thing, var/mob/user)
if(removable_components)
- if(istype(thing, /obj/item/cell))
- if(cell)
- to_chat(user, "\The [src] already has \a [cell] installed.")
- return
- if(!user.try_unequip(thing, src))
- return
- cell = thing
- playsound(loc, 'sound/machines/click.ogg', 10, 1)
- user.visible_message("\The [user] slots \the [cell] into \the [src].")
- update_icon()
- return
-
if(IS_SCREWDRIVER(thing))
if(!capacitor)
to_chat(user, "\The [src] has no capacitor installed.")
@@ -126,7 +111,6 @@
capacitor = null
update_icon()
return
-
if(istype(thing, /obj/item/stock_parts/capacitor))
if(capacitor)
to_chat(user, "\The [src] already has \a [capacitor] installed.")
@@ -193,9 +177,8 @@
if(loaded)
removing = loaded
loaded = null
- else if(cell && removable_components)
- removing = cell
- cell = null
+ else if(removable_components && get_cell())
+ return ..()
if(removing)
user.put_in_hands(removing)
user.visible_message(SPAN_NOTICE("\The [user] removes \the [removing] from \the [src]."))
diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
index 1919ee1ef2f..30bb71cea69 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/guns/railgun.dmi'
removable_components = TRUE // Can swap out the capacitor for more shots, or cell for longer usage before recharge
load_type = /obj/item/rcd_ammo
- origin_tech = "{'combat':5,'materials':4,'magnets':4}"
+ origin_tech = @'{"combat":5,"materials":4,"magnets":4}'
projectile_type = /obj/item/projectile/bullet/magnetic/slug
one_hand_penalty = 6
power_cost = 300
@@ -14,13 +14,14 @@
loaded = /obj/item/rcd_ammo/large // ~30 shots
combustion = 1
bulk = GUN_BULK_RIFLE + 3
-
- cell = /obj/item/cell/hyper
capacitor = /obj/item/stock_parts/capacitor/adv // 6-8 shots
gun_unreliable = 0
var/slowdown_held = 3
var/slowdown_worn = 2
+/obj/item/gun/magnetic/railgun/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/hyper, accepted_cell_type, power_supply_extension_type, charge_value)
+
/obj/item/gun/magnetic/railgun/Initialize()
LAZYSET(slowdown_per_slot, BP_L_HAND, slowdown_held)
LAZYSET(slowdown_per_slot, BP_R_HAND, slowdown_held)
@@ -63,7 +64,6 @@
one_hand_penalty = 2
fire_delay = 8
removable_components = FALSE
- cell = /obj/item/cell/hyper
capacitor = /obj/item/stock_parts/capacitor/adv
slot_flags = SLOT_BACK
power_cost = 100
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 8ea0a2a3da4..0954d63ee06 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -2,7 +2,7 @@
name = "gun"
desc = "A gun that fires bullets."
icon = 'icons/obj/guns/pistol.dmi'
- origin_tech = "{'combat':2,'materials':2}"
+ origin_tech = @'{"combat":2,"materials":2}'
w_class = ITEM_SIZE_NORMAL
material = /decl/material/solid/metal/steel
screen_shake = 1
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 56fe369ff51..a7614db6028 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -6,7 +6,7 @@
safety_icon = "safety"
w_class = ITEM_SIZE_NORMAL
caliber = CALIBER_PISTOL_SMALL
- origin_tech = "{'combat':5,'materials':2}"
+ origin_tech = @'{"combat":5,"materials":2}'
slot_flags = SLOT_LOWER_BODY|SLOT_BACK
ammo_type = /obj/item/ammo_casing/pistol/small
load_method = MAGAZINE
@@ -44,7 +44,7 @@
w_class = ITEM_SIZE_HUGE
force = 10
caliber = CALIBER_RIFLE
- origin_tech = "{'combat':7,'materials':3}"
+ origin_tech = @'{"combat":7,"materials":3}'
ammo_type = /obj/item/ammo_casing/rifle
slot_flags = SLOT_BACK
load_method = MAGAZINE
@@ -82,7 +82,7 @@
/obj/item/gun/projectile/automatic/assault_rifle/grenade
name = "assault rifle"
desc = "The Z8 Bulldog is an older model bullpup carbine. This one has an underslung grenade launcher. REALLY makes you feel like a space marine when you hold it."
- origin_tech = "{'combat':8,'materials':3}"
+ origin_tech = @'{"combat":8,"materials":3}'
firemodes = list(
list(mode_name="semi auto", burst=1, fire_delay=null, use_launcher=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null),
@@ -137,7 +137,7 @@
w_class = ITEM_SIZE_HUGE
force = 10
caliber = CALIBER_RIFLE
- origin_tech = "{'combat':9,'materials':3}"
+ origin_tech = @'{"combat":9,"materials":3}'
ammo_type = /obj/item/ammo_casing/rifle
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/rifle/drum
diff --git a/code/modules/projectiles/guns/projectile/bolt_action.dm b/code/modules/projectiles/guns/projectile/bolt_action.dm
index 52d46d77d45..21f609064ad 100644
--- a/code/modules/projectiles/guns/projectile/bolt_action.dm
+++ b/code/modules/projectiles/guns/projectile/bolt_action.dm
@@ -6,12 +6,12 @@
w_class = ITEM_SIZE_HUGE
force = 5
slot_flags = SLOT_BACK
- origin_tech = "{'combat':4,'materials':2}"
+ origin_tech = @'{"combat":4,"materials":2}'
caliber = CALIBER_RIFLE
handle_casings = HOLD_CASINGS
load_method = SINGLE_CASING
max_shells = 1
- ammo_type = /obj/item/ammo_casing/shell
+ ammo_type = /obj/item/ammo_casing/rifle
one_hand_penalty = 2
load_sound = 'sound/weapons/guns/interaction/rifle_load.ogg'
fire_delay = 8
@@ -49,6 +49,7 @@
unload_shell()
else
to_chat(user, "You work the bolt open.")
+ playsound(src.loc, 'sound/weapons/guns/interaction/rifle_boltback.ogg', 50, 1)
else
to_chat(user, "You work the bolt closed.")
playsound(src.loc, 'sound/weapons/guns/interaction/rifle_boltforward.ogg', 50, 1)
@@ -77,7 +78,7 @@
desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to be used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease."
icon = 'icons/obj/guns/heavysniper.dmi'
force = 10
- origin_tech = "{'combat':7,'materials':2,'esoteric':8}"
+ origin_tech = @'{"combat":7,"materials":2,"esoteric":8}'
caliber = CALIBER_ANTI_MATERIEL
screen_shake = 2 //extra kickback
one_hand_penalty = 6
@@ -85,4 +86,5 @@
bulk = 8
scoped_accuracy = 8 //increased accuracy over the LWAP because only one shot
scope_zoom = 2
- fire_delay = 12
\ No newline at end of file
+ fire_delay = 12
+ ammo_type = /obj/item/ammo_casing/shell
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index e273bfd34ee..f5a28572e21 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -41,7 +41,7 @@
else
icon_state = get_world_inventory_state()
-/obj/item/gun/projectile/dartgun/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+/obj/item/gun/projectile/dartgun/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay && (slot in user_mob?.get_held_item_slots()) && ammo_magazine)
overlay.icon_state += "-[clamp(length(ammo_magazine.stored_ammo.len), 0, 5)]"
. = ..()
diff --git a/code/modules/projectiles/guns/projectile/flaregun.dm b/code/modules/projectiles/guns/projectile/flaregun.dm
index 7653d5dd68a..0a0cbea61c7 100644
--- a/code/modules/projectiles/guns/projectile/flaregun.dm
+++ b/code/modules/projectiles/guns/projectile/flaregun.dm
@@ -9,7 +9,7 @@
w_class = ITEM_SIZE_SMALL
obj_flags = 0
slot_flags = SLOT_LOWER_BODY | SLOT_HOLSTER
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT)
caliber = CALIBER_SHOTGUN
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index 9917cd8bcca..05f0b25ece0 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -32,7 +32,7 @@
caliber = CALIBER_PISTOL_SMALL
silenced = 0
fire_delay = 4
- origin_tech = "{'combat':2,'materials':2,'esoteric':8}"
+ origin_tech = @'{"combat":2,"materials":2,"esoteric":8}'
magazine_type = /obj/item/ammo_magazine/pistol/small
allowed_magazines = /obj/item/ammo_magazine/pistol/small
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index 4b7ad7b5e72..0358e6eb6b3 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -5,7 +5,7 @@
icon_state = ICON_STATE_WORLD
safety_icon = "safety"
caliber = CALIBER_PISTOL_MAGNUM
- origin_tech = "{'combat':2,'materials':2}"
+ origin_tech = @'{"combat":2,"materials":2}'
handle_casings = CYCLE_CASINGS
max_shells = 6
fire_delay = 12 //Revolvers are naturally slower-firing
@@ -48,7 +48,7 @@
name = "cap gun"
desc = "Looks almost like the real thing! Ages 8 and up."
caliber = CALIBER_CAPS
- origin_tech = "{'combat':1,'materials':1}"
+ origin_tech = @'{"combat":1,"materials":1}'
ammo_type = /obj/item/ammo_casing/cap
var/cap = TRUE
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 5bf38759b8d..f91b9fc9d49 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -9,7 +9,7 @@
obj_flags = OBJ_FLAG_CONDUCTIBLE
slot_flags = SLOT_BACK
caliber = CALIBER_SHOTGUN
- origin_tech = "{'combat':4,'materials':2}"
+ origin_tech = @'{"combat":4,"materials":2}'
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
handle_casings = HOLD_CASINGS
@@ -64,7 +64,7 @@
obj_flags = OBJ_FLAG_CONDUCTIBLE
slot_flags = SLOT_BACK
caliber = CALIBER_SHOTGUN
- origin_tech = "{'combat':3,'materials':1}"
+ origin_tech = @'{"combat":3,"materials":1}'
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
one_hand_penalty = 2
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index b2e83f371ae..8094266a812 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -6,11 +6,11 @@
icon = 'icons/obj/projectiles.dmi'
icon_state = "bullet"
density = TRUE
- unacidable = 1
anchored = TRUE //There's a reason this is here, Mport. God fucking damn it -Agouri. Find&Fix by Pete. The reason this is here is to stop the curving of emitter shots.
pass_flags = PASS_FLAG_TABLE
mouse_opacity = MOUSE_OPACITY_UNCLICKABLE
randpixel = 0
+ material = null
is_spawnable_type = FALSE
var/bumped = 0 //Prevents it from hitting more than one guy at once
@@ -306,7 +306,7 @@
on_impact(A)
set_density(0)
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
qdel(src)
return 1
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index e174f6e1849..81a2a7f94b3 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -11,7 +11,7 @@
damage_flags = DAM_LASER
eyeblur = 4
hitscan = 1
- invisibility = 101 //beam projectiles are invisible as they are rendered by the effect engine
+ invisibility = INVISIBILITY_ABSTRACT //beam projectiles are invisible as they are rendered by the effect engine
penetration_modifier = 0.3
distance_falloff = 2.5
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index c431df0db47..b0918be164d 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -144,7 +144,7 @@
/* Miscellaneous */
/obj/item/projectile/bullet/blank
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
damage = 1
embed = 0
@@ -162,7 +162,7 @@
/obj/item/projectile/bullet/pistol/cap
name = "cap"
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
fire_sound = null
damage_type = PAIN
damage_flags = 0
diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm
index 30f3b48d403..a88e4070f8e 100644
--- a/code/modules/projectiles/projectile/change.dm
+++ b/code/modules/projectiles/projectile/change.dm
@@ -25,8 +25,8 @@
var/mob/living/silicon/robot/R = new(get_turf(M))
R.set_gender(M.get_gender())
R.job = ASSIGNMENT_ROBOT
- R.mmi = new /obj/item/mmi(R)
- R.mmi.transfer_identity(M)
+ R.central_processor = new /obj/item/organ/internal/brain_interface(R)
+ transfer_key_from_mob_to_mob(M, R)
return R
if(get_species_by_key(choice))
@@ -53,12 +53,8 @@
for (var/spell/S in M.mind.learned_spells)
new_mob.add_spell(new S.type)
new_mob.a_intent = "hurt"
- if(M.mind)
- M.mind.transfer_to(new_mob)
- else
- new_mob.key = M.key
+ transfer_key_from_mob_to_mob(M, new_mob)
to_chat(new_mob, "Your form morphs into that of \a [choice].")
-
qdel(M)
else
to_chat(M, "Your form morphs into that of \a [choice].")
diff --git a/code/modules/projectiles/targeting/targeting_mob.dm b/code/modules/projectiles/targeting/targeting_mob.dm
index b03befe664a..1dd13a1aa6d 100644
--- a/code/modules/projectiles/targeting/targeting_mob.dm
+++ b/code/modules/projectiles/targeting/targeting_mob.dm
@@ -27,11 +27,3 @@
..()
if(lying)
stop_aiming(no_message=1)
-
-/mob/living/Destroy()
- if(aiming)
- qdel(aiming)
- aiming = null
- QDEL_NULL_LIST(aimed_at_by)
- return ..()
-
diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm
index c9cc33f2a3a..8fd4de31574 100644
--- a/code/modules/projectiles/targeting/targeting_overlay.dm
+++ b/code/modules/projectiles/targeting/targeting_overlay.dm
@@ -176,9 +176,9 @@
update_icon()
lock_time = world.time + 35
- events_repository.register(/decl/observ/moved, owner, src, /obj/aiming_overlay/proc/update_aiming)
- events_repository.register(/decl/observ/moved, aiming_at, src, /obj/aiming_overlay/proc/target_moved)
- events_repository.register(/decl/observ/destroyed, aiming_at, src, /obj/aiming_overlay/proc/cancel_aiming)
+ events_repository.register(/decl/observ/moved, owner, src, TYPE_PROC_REF(/obj/aiming_overlay, update_aiming))
+ events_repository.register(/decl/observ/moved, aiming_at, src, TYPE_PROC_REF(/obj/aiming_overlay, target_moved))
+ events_repository.register(/decl/observ/destroyed, aiming_at, src, TYPE_PROC_REF(/obj/aiming_overlay, cancel_aiming))
/obj/aiming_overlay/on_update_icon()
if(locked)
diff --git a/code/modules/radiation/radiation.dm b/code/modules/radiation/radiation.dm
index df714006ba9..0feee45d773 100644
--- a/code/modules/radiation/radiation.dm
+++ b/code/modules/radiation/radiation.dm
@@ -23,12 +23,12 @@
/datum/radiation_source/proc/update_rad_power(var/new_power = null)
if(new_power == null || new_power == rad_power)
return // No change
- else if(new_power <= config.radiation_lower_limit)
+ else if(new_power <= get_config_value(/decl/config/num/radiation_lower_limit))
qdel(src) // Decayed to nothing
else
rad_power = new_power
if(!flat)
- range = min(round(sqrt(rad_power / config.radiation_lower_limit)), 31) // R = rad_power / dist**2 - Solve for dist
+ range = min(round(sqrt(rad_power / get_config_value(/decl/config/num/radiation_lower_limit))), 31) // R = rad_power / dist**2 - Solve for dist
/turf
var/cached_rad_resistance = 0
@@ -39,13 +39,13 @@
if(!(O.rad_resistance_modifier <= 0) && O.density)
var/decl/material/M = O.get_material()
if(!M) continue
- cached_rad_resistance += (M.weight * O.rad_resistance_modifier) / config.radiation_material_resistance_divisor
+ cached_rad_resistance += (M.weight * O.rad_resistance_modifier) / get_config_value(/decl/config/num/radiation_material_resistance_divisor)
// Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana
SSradiation.resistance_cache[src] = (length(contents) + 1)
/turf/simulated/wall/calc_rad_resistance()
SSradiation.resistance_cache[src] = (length(contents) + 1)
- cached_rad_resistance = (density ? material.weight / config.radiation_material_resistance_divisor : 0)
+ cached_rad_resistance = (density ? material.weight / get_config_value(/decl/config/num/radiation_material_resistance_divisor) : 0)
/obj
var/rad_resistance_modifier = 1 // Allow overriding rad resistance
diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm
index e89f0cd035d..afcb3288e31 100644
--- a/code/modules/random_map/_random_map_setup.dm
+++ b/code/modules/random_map/_random_map_setup.dm
@@ -3,30 +3,40 @@
*/
#define MIN_SURFACE_COUNT_PER_CHUNK 0.1
-#define MIN_RARE_COUNT_PER_CHUNK 0.05
-#define MIN_DEEP_COUNT_PER_CHUNK 0.025
-#define RESOURCE_HIGH_MAX 4
-#define RESOURCE_HIGH_MIN 2
-#define RESOURCE_MID_MAX 3
-#define RESOURCE_MID_MIN 1
-#define RESOURCE_LOW_MAX 1
-#define RESOURCE_LOW_MIN 0
+#define MIN_RARE_COUNT_PER_CHUNK 0.05
+#define MIN_DEEP_COUNT_PER_CHUNK 0.025
+#define RESOURCE_HIGH_MAX 4
+#define RESOURCE_HIGH_MIN 2
+#define RESOURCE_MID_MAX 3
+#define RESOURCE_MID_MIN 1
+#define RESOURCE_LOW_MAX 1
+#define RESOURCE_LOW_MIN 0
+#define RESOURCE_COMMON_MAX 5
+#define RESOURCE_COMMON_MIN 3
-#define FLOOR_CHAR 0
-#define WALL_CHAR 1
-#define DOOR_CHAR 2
-#define EMPTY_CHAR 3
-#define ROOM_TEMP_CHAR 4
-#define MONSTER_CHAR 5
-#define ARTIFACT_TURF_CHAR 6
-#define ARTIFACT_CHAR 7
-#define CORRIDOR_TURF_CHAR 8
+#define FLOOR_CHAR 0
+#define WALL_CHAR 1
+#define DOOR_CHAR 2
+#define EMPTY_CHAR 3
+#define ROOM_TEMP_CHAR 4
+#define MONSTER_CHAR 5
+#define ARTIFACT_TURF_CHAR 6
+#define ARTIFACT_CHAR 7
+#define CORRIDOR_TURF_CHAR 8
#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X))
#define TRANSLATE_AND_VERIFY_COORD(X,Y) TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,map.len)
#define TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,LEN) \
tmp_cell = TRANSLATE_COORD(X,Y);\
+ if (tmp_cell < 1 || tmp_cell > LEN) {\
+ tmp_cell = null;\
+ }
+
+#define TRANSLATE_COORD_OTHER_MAP(X,Y,MAP) ((((Y) - 1) * MAP.limit_x) + (X))
+#define TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(X,Y,MAP) TRANSLATE_AND_VERIFY_COORD_OTHER_MAP_MLEN(X, Y, MAP, MAP.map.len)
+#define TRANSLATE_AND_VERIFY_COORD_OTHER_MAP_MLEN(X,Y,MAP,LEN) \
+ tmp_cell = TRANSLATE_COORD_OTHER_MAP(X,Y,MAP);\
if (tmp_cell < 1 || tmp_cell > LEN) {\
tmp_cell = null;\
}
\ No newline at end of file
diff --git a/code/modules/random_map/building/building.dm b/code/modules/random_map/building/building.dm
index 98a157c4599..5a24fa36708 100644
--- a/code/modules/random_map/building/building.dm
+++ b/code/modules/random_map/building/building.dm
@@ -6,7 +6,7 @@
/datum/random_map/building/generate_map()
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(!current_cell)
continue
if(x == 1 || y == 1 || x == limit_x || y == limit_y)
@@ -18,7 +18,7 @@
var/list/possible_doors
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(!current_cell)
continue
if(!(x == 1 || y == 1 || x == limit_x || y == limit_y))
@@ -39,7 +39,10 @@
if(place_door)
- possible_doors |= target_map.get_map_cell(tx+x,ty+y)
+ var/tmp_cell
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(tx+x, ty+y, target_map)
+ if(tmp_cell)
+ possible_doors |= tmp_cell
if(possible_doors.len)
// Place at least one door.
diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm
index 60cadc79e2c..ca2a0af390e 100644
--- a/code/modules/random_map/drop/droppod.dm
+++ b/code/modules/random_map/drop/droppod.dm
@@ -47,7 +47,7 @@
// Draw walls/floors/doors.
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(!current_cell)
continue
@@ -73,7 +73,7 @@
map[current_cell] = SD_FLOOR_TILE
// Draw the drop contents.
- var/current_cell = get_map_cell(x_midpoint,y_midpoint)
+ var/current_cell = TRANSLATE_COORD(x_midpoint,y_midpoint)
if(current_cell)
map[current_cell] = SD_SUPPLY_TILE
return 1
@@ -195,7 +195,7 @@
var/antag_type = input("Select an equipment template to use or cancel for nude.", null) as null|anything in all_antag_types
if(antag_type)
var/decl/special_role/A = all_antag_types[antag_type]
- A.equip(spawned_mob)
+ A.equip_role(spawned_mob)
if(alert("Are you SURE you wish to deploy this drop pod? It will cause a sizable explosion and gib anyone underneath it.",,"No","Yes") == "No")
if(spawned_mob)
diff --git a/code/modules/random_map/dungeon/room.dm b/code/modules/random_map/dungeon/room.dm
index 8c60a977c27..c95dff95a9f 100644
--- a/code/modules/random_map/dungeon/room.dm
+++ b/code/modules/random_map/dungeon/room.dm
@@ -41,35 +41,45 @@ If its complexity is lower than our theme's then
for(var/j = 0, j < height, j++)
var/truex = xorigin + x + i - 1
var/truey = yorigin + y + j - 1
- var/cell = map.get_map_cell(x+i,y+j)
+ var/tmp_cell
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i, y+j, map)
+ var/cell = tmp_cell
room_theme.apply_room_theme(truex,truey,map.map[cell])
if(generate_doors && room_theme.door_type && !(map.map[cell] == WALL_CHAR || map.map[cell] == ARTIFACT_TURF_CHAR) && (i == 0 || i == width-1 || j == 0 || j == height-1))
var/isGood = 1
if(j == 0 || j == height-1) //check horizontally
- var/curCell = map.map[map.get_map_cell(x+i-1,y+j)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i-1,y+j, map)
+ var/curCell = map.map[tmp_cell]
if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR)
isGood = 0
- curCell = map.map[map.get_map_cell(x+i+1,y+j)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i+1,y+j, map)
+ curCell = map.map[tmp_cell]
if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR)
isGood = 0
- curCell = map.map[map.get_map_cell(x+i,y+j-1)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j-1, map)
+ curCell = map.map[tmp_cell]
if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR)
isGood = 0
- curCell = map.map[map.get_map_cell(x+i,y+j+1)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j+1, map)
+ curCell = map.map[tmp_cell]
if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR)
isGood = 0
- if(i == 0 || i == width-1) //verticle
+ if(i == 0 || i == width-1) //vertical
isGood = 1 //if it failed above, it might not fail here.
- var/curCell = map.map[map.get_map_cell(x+i,y+j-1)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j-1, map)
+ var/curCell = map.map[tmp_cell]
if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR)
isGood = 0
- curCell = map.map[map.get_map_cell(x+i,y+j+1)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j+1, map)
+ curCell = map.map[tmp_cell]
if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR)
isGood = 0
- curCell = map.map[map.get_map_cell(x+i-1,y+j)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i-1,y+j, map)
+ curCell = map.map[tmp_cell]
if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR)
isGood = 0
- curCell = map.map[map.get_map_cell(x+i+1,y+j)]
+ TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i+1,y+j, map)
+ curCell = map.map[tmp_cell]
if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR)
isGood = 0
if(isGood)
diff --git a/code/modules/random_map/dungeon/winding_dungeon.dm b/code/modules/random_map/dungeon/winding_dungeon.dm
index dc66d864e75..e301ec2c887 100644
--- a/code/modules/random_map/dungeon/winding_dungeon.dm
+++ b/code/modules/random_map/dungeon/winding_dungeon.dm
@@ -154,11 +154,11 @@
logging("Winding Dungeon Generation Start")
//first generate the border
for(var/xx = 1, xx <= limit_x, xx++)
- map[get_map_cell(xx,1)] = BORDER_CHAR
- map[get_map_cell(xx,limit_y)] = BORDER_CHAR
+ map[TRANSLATE_COORD(xx,1)] = BORDER_CHAR
+ map[TRANSLATE_COORD(xx,limit_y)] = BORDER_CHAR
for(var/yy = 1, yy < limit_y, yy++)
- map[get_map_cell(1,yy)] = BORDER_CHAR
- map[get_map_cell(limit_x,yy)] = BORDER_CHAR
+ map[TRANSLATE_COORD(1,yy)] = BORDER_CHAR
+ map[TRANSLATE_COORD(limit_x,yy)] = BORDER_CHAR
var/num_of_features = limit_x * limit_y * features_multiplier
logging("Number of features: [num_of_features]")
@@ -197,7 +197,7 @@
logging("open_positions empty. Using randomly chosen coords ([newx],[newy])")
//We want to make sure we aren't RIGHT next to another corridor or something.
- if(map[get_map_cell(newx,newy+1)] == ARTIFACT_CHAR || map[get_map_cell(newx-1,newy)] == ARTIFACT_CHAR || map[get_map_cell(newx,newy-1)] == ARTIFACT_CHAR || map[get_map_cell(newx+1,newy)] == ARTIFACT_CHAR)
+ if(LAZYACCESS(map, TRANSLATE_COORD(newx,newy+1)) == ARTIFACT_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx-1,newy)) == ARTIFACT_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx,newy-1)) == ARTIFACT_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx+1,newy)) == ARTIFACT_CHAR)
logging("Coords ([newx],[newy]) are too close to an ARTIFACT_CHAR position.")
continue
@@ -207,9 +207,9 @@
height = rand(room_size_min,room_size_max)
isRoom = rand(100) <= chance_of_room
- if(map[get_map_cell(newx, newy)] == ARTIFACT_TURF_CHAR || map[get_map_cell(newx, newy)] == CORRIDOR_TURF_CHAR)
+ if(LAZYACCESS(map, TRANSLATE_COORD(newx, newy)) == ARTIFACT_TURF_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx, newy)) == CORRIDOR_TURF_CHAR)
//we are basically checking to see where we're going. Up, right, down or left and finding the bottom left corner.
- if(map[get_map_cell(newx,newy+1)] == FLOOR_CHAR || map[get_map_cell(newx,newy+1)] == CORRIDOR_TURF_CHAR) //0 - down
+ if(LAZYACCESS(map, TRANSLATE_COORD(newx,newy+1)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx,newy+1)) == CORRIDOR_TURF_CHAR) //0 - down
logging("This feature is DOWN")
if(isRoom) //gotta do some math for this one, since the origin is centered.
xmod = -width/2
@@ -219,7 +219,7 @@
ymod = -height //a lot of this will seem nonsense but I swear its not
doorx = 0
doory = -1
- else if(map[get_map_cell(newx-1,newy)] == FLOOR_CHAR || map[get_map_cell(newx-1,newy)] == CORRIDOR_TURF_CHAR) //1 - right
+ else if(LAZYACCESS(map, TRANSLATE_COORD(newx-1,newy)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx-1,newy)) == CORRIDOR_TURF_CHAR) //1 - right
logging("This feature is RIGHT")
if(isRoom)
ymod = -height/2
@@ -229,7 +229,7 @@
xmod = 1
doorx = 1
doory = 0
- else if(map[get_map_cell(newx,newy-1)] == FLOOR_CHAR || map[get_map_cell(newx,newy-1)] == CORRIDOR_TURF_CHAR) //2 - up
+ else if(LAZYACCESS(map, TRANSLATE_COORD(newx,newy-1)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx,newy-1)) == CORRIDOR_TURF_CHAR) //2 - up
logging("This feature is UP")
if(isRoom)
xmod = -width/2
@@ -239,7 +239,7 @@
ymod = 1
doorx = 0
doory = 1
- else if(map[get_map_cell(newx+1,newy)] == FLOOR_CHAR || map[get_map_cell(newx+1,newy)] == CORRIDOR_TURF_CHAR) // 3 - left
+ else if(LAZYACCESS(map, TRANSLATE_COORD(newx+1,newy)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx+1,newy)) == CORRIDOR_TURF_CHAR) // 3 - left
logging("This feature is LEFT")
if(isRoom)
ymod = -height/2
@@ -263,16 +263,17 @@
currentFeatures++
if(isRoom)
logging("Room created at: [newx+xmod], [newy+ymod].")
- map[get_map_cell(newx,newy)] = FLOOR_CHAR
- map[get_map_cell(newx+doorx,newy+doory)] = ARTIFACT_CHAR
+ map[TRANSLATE_COORD(newx,newy)] = FLOOR_CHAR
+ map[TRANSLATE_COORD(newx+doorx,newy+doory)] = ARTIFACT_CHAR
if(rand(0,100) >= chance_of_room_empty)
var/room_result = create_room_features(round(newx+xmod),round(newy+ymod),width,height)
logging("Attempted room feature creation: [room_result ? "Success" : "Failure"]")
else
logging("Creating corridor.")
- var/door = get_map_cell(newx,newy)
- if(map[door] == ARTIFACT_TURF_CHAR)
- map[door] = ARTIFACT_CHAR
+ var/tmp_cell
+ TRANSLATE_AND_VERIFY_COORD(newx,newy)
+ if(map[tmp_cell] == ARTIFACT_TURF_CHAR)
+ map[tmp_cell] = ARTIFACT_CHAR
logging("Map completed. Loops: [sanity], [currentFeatures] out of [num_of_features] created.")
open_positions.Cut()
@@ -287,17 +288,17 @@
if(xtemp < 0 || xtemp > limit_x)
logging("We are beyond our x limits")
return 0
- if(map[get_map_cell(xtemp,ytemp)] != WALL_CHAR)
+ if(map[TRANSLATE_COORD(xtemp,ytemp)] != WALL_CHAR)
logging("[xtemp],[ytemp] is not equal to WALL_CHAR")
return 0
else
if(wall_char && (ytemp == truey || ytemp == truey + height - 1 || xtemp == truex || xtemp == truex + width - 1))
- map[get_map_cell(xtemp,ytemp)] = wall_char
+ map[TRANSLATE_COORD(xtemp,ytemp)] = wall_char
if(!("[xtemp]:[ytemp]" in open_positions))
open_positions += "[xtemp]:[ytemp]"
logging("Adding \"[xtemp]:[ytemp]\" to open_positions (length: [open_positions.len])")
else
- map[get_map_cell(xtemp,ytemp)] = char
+ map[TRANSLATE_COORD(xtemp,ytemp)] = char
return 1
/datum/random_map/winding_dungeon/proc/create_room_features(var/rox,var/roy,var/width,var/height)
diff --git a/code/modules/random_map/mazes/maze.dm b/code/modules/random_map/mazes/maze.dm
index 557adbd6e8e..b9e5cc24b3e 100644
--- a/code/modules/random_map/mazes/maze.dm
+++ b/code/modules/random_map/mazes/maze.dm
@@ -31,19 +31,28 @@
// Preliminary marking-off...
closedlist[next.name] = next
- map[get_map_cell(next.x,next.y)] = FLOOR_CHAR
+ map[TRANSLATE_COORD(next.x,next.y)] = FLOOR_CHAR
// Apply the values required and fill gap between this cell and origin point.
+ var/tmp_cell
if(next.ox && next.oy)
if(next.ox < next.x)
- map[get_map_cell(next.x-1,next.y)] = FLOOR_CHAR
+ TRANSLATE_AND_VERIFY_COORD(next.x-1, next.y)
+ if(tmp_cell)
+ map[tmp_cell] = FLOOR_CHAR
else if(next.ox == next.x)
if(next.oy < next.y)
- map[get_map_cell(next.x,next.y-1)] = FLOOR_CHAR
+ TRANSLATE_AND_VERIFY_COORD(next.x, next.y-1)
+ if(tmp_cell)
+ map[tmp_cell] = FLOOR_CHAR
else
- map[get_map_cell(next.x,next.y+1)] = FLOOR_CHAR
+ TRANSLATE_AND_VERIFY_COORD(next.x, next.y+1)
+ if(tmp_cell)
+ map[tmp_cell] = FLOOR_CHAR
else
- map[get_map_cell(next.x+1,next.y)] = FLOOR_CHAR
+ TRANSLATE_AND_VERIFY_COORD(next.x+1, next.y)
+ if(tmp_cell)
+ map[tmp_cell] = FLOOR_CHAR
// Grab valid neighbors for use in the open list!
add_to_openlist(next.x,next.y+2,next.x,next.y)
@@ -60,6 +69,6 @@
if(tx < 1 || ty < 1 || tx > limit_x || ty > limit_y || !isnull(checked_coord_cache["[tx]-[ty]"]))
return 0
checked_coord_cache["[tx]-[ty]"] = 1
- map[get_map_cell(tx,ty)] = DOOR_CHAR
+ map[TRANSLATE_COORD(tx,ty)] = DOOR_CHAR
var/datum/maze_cell/new_cell = new(tx,ty,nx,ny)
openlist |= new_cell
diff --git a/code/modules/random_map/noise/magma.dm b/code/modules/random_map/noise/magma.dm
index 0e3ac3c7945..d078ef6cdf1 100644
--- a/code/modules/random_map/noise/magma.dm
+++ b/code/modules/random_map/noise/magma.dm
@@ -9,25 +9,26 @@
/datum/random_map/noise/volcanism/cleanup()
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(map[current_cell] < 178)
continue
var/count
- var/tmp_cell = get_map_cell(x+1,y+1)
+ var/tmp_cell
+ TRANSLATE_AND_VERIFY_COORD(x+1, y+1)
if(tmp_cell && map[tmp_cell] >= 178) count++
- tmp_cell = get_map_cell(x-1,y-1)
+ TRANSLATE_AND_VERIFY_COORD(x-1,y-1)
if(tmp_cell && map[tmp_cell] >= 178) count++
- tmp_cell = get_map_cell(x+1,y-1)
+ TRANSLATE_AND_VERIFY_COORD(x+1,y-1)
if(tmp_cell && map[tmp_cell] >= 178) count++
- tmp_cell = get_map_cell(x-1,y+1)
+ TRANSLATE_AND_VERIFY_COORD(x-1,y+1)
if(tmp_cell && map[tmp_cell] >= 178) count++
- tmp_cell = get_map_cell(x-1,y)
+ TRANSLATE_AND_VERIFY_COORD(x-1,y)
if(tmp_cell && map[tmp_cell] >= 178) count++
- tmp_cell = get_map_cell(x,y-1)
+ TRANSLATE_AND_VERIFY_COORD(x,y-1)
if(tmp_cell && map[tmp_cell] >= 178) count++
- tmp_cell = get_map_cell(x+1,y)
+ TRANSLATE_AND_VERIFY_COORD(x+1,y)
if(tmp_cell && map[tmp_cell] >= 178) count++
- tmp_cell = get_map_cell(x,y+1)
+ TRANSLATE_AND_VERIFY_COORD(x,y+1)
if(tmp_cell && map[tmp_cell] >= 178) count++
if(!count)
map[current_cell] = 177
diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm
index 33cf03f5c7f..c8073c37f17 100644
--- a/code/modules/random_map/noise/noise.dm
+++ b/code/modules/random_map/noise/noise.dm
@@ -83,7 +83,7 @@
map[TRANSLATE_COORD(x+isize,y)] \
)/2)
- map[get_map_cell(x,y+hsize)] = round(( \
+ map[TRANSLATE_COORD(x,y+hsize)] = round(( \
map[TRANSLATE_COORD(x,y+isize)] + \
map[TRANSLATE_COORD(x,y)] \
)/2)
@@ -137,6 +137,7 @@
total += map[TRANSLATE_COORD(x+1, y)] // x + blur_radius
next_map[TRANSLATE_COORD(x, y)] = round(total / 3) // should technically be 2*blur_radius+1
// now do the same in the x axis
+ map = next_map.Copy()
for(var/x = 1 to limit_x)
// see comments above
var/cellone = map[TRANSLATE_COORD(x, 1)]
@@ -154,31 +155,55 @@
map = next_map
if(smooth_single_tiles)
- var/lonely
for(var/x in 1 to limit_x - 1)
for(var/y in 1 to limit_y - 1)
- var/mapcell = get_map_cell(x,y)
- var/list/neighbors = get_neighbors(x, y, TRUE)
- lonely = TRUE
- for(var/cell in neighbors)
- if(get_appropriate_path(map[cell]) == get_appropriate_path(map[mapcell]))
- lonely = FALSE
- break
- if(lonely)
- map[mapcell] = map[pick(neighbors)]
-
+ var/mapcell = TRANSLATE_COORD(x,y)
+ if(has_neighbor_with_path(x, y, get_appropriate_path(map[mapcell]), TRUE))
+ continue
+ map[mapcell] = map[pick(get_neighbors(x, y, TRUE))]
+
+#define CHECK_NEIGHBOR_FOR_PATH(X, Y) \
+ TRANSLATE_AND_VERIFY_COORD(X,Y);\
+ if(tmp_cell && (get_appropriate_path(map[tmp_cell]) == path)) {\
+ return TRUE;\
+ }
+
+/// Checks if the cell at x,y has a neighbor with the given path.
+/// Faster than looping over get_neighbors for the same purpose because it doesn't use list ops.
+/datum/random_map/noise/proc/has_neighbor_with_path(x, y, path, include_diagonals)
+ var/tmp_cell
+ CHECK_NEIGHBOR_FOR_PATH(x-1,y)
+ CHECK_NEIGHBOR_FOR_PATH(x+1,y)
+ CHECK_NEIGHBOR_FOR_PATH(x,y+1)
+ CHECK_NEIGHBOR_FOR_PATH(x,y-1)
+ if(include_diagonals)
+ CHECK_NEIGHBOR_FOR_PATH(x+1,y+1)
+ CHECK_NEIGHBOR_FOR_PATH(x+1,y-1)
+ CHECK_NEIGHBOR_FOR_PATH(x-1,y-1)
+ CHECK_NEIGHBOR_FOR_PATH(x-1,y+1)
+ return FALSE
+
+#undef CHECK_NEIGHBOR_FOR_PATH
+
+#define VERIFY_AND_ADD_CELL(X, Y) \
+ TRANSLATE_AND_VERIFY_COORD(X,Y);\
+ if(tmp_cell) {\
+ . += tmp_cell;\
+ }
+
+/// Gets the neighbors of the cell at x, y, optionally including diagonals.
+/// (x,y) and its neighbors can safely be invalid/not validated before calling.
/datum/random_map/noise/proc/get_neighbors(x, y, include_diagonals)
. = list()
- if(!include_diagonals)
- var/static/list/ortho_offsets = list(list(-1, 0), list(1, 0), list(0, 1), list(0,-1))
- for(var/list/offset in ortho_offsets)
- var/tmp_cell = get_map_cell(x+offset[1],y+offset[2])
- if(tmp_cell)
- . += tmp_cell
- else
- for(var/dx in -1 to 1)
- for(var/dy in -1 to 1)
- var/tmp_cell = get_map_cell(x+dx,y+dy)
- if(tmp_cell)
- . += tmp_cell
- . -= get_map_cell(x,y)
\ No newline at end of file
+ var/tmp_cell
+ VERIFY_AND_ADD_CELL(x-1,y)
+ VERIFY_AND_ADD_CELL(x+1,y)
+ VERIFY_AND_ADD_CELL(x,y+1)
+ VERIFY_AND_ADD_CELL(x,y-1)
+ if(include_diagonals)
+ VERIFY_AND_ADD_CELL(x+1,y+1)
+ VERIFY_AND_ADD_CELL(x+1,y-1)
+ VERIFY_AND_ADD_CELL(x-1,y-1)
+ VERIFY_AND_ADD_CELL(x-1,y+1)
+
+#undef VERIFY_AND_ADD_CELL
\ No newline at end of file
diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm
index 20e971700e5..826d85817de 100644
--- a/code/modules/random_map/noise/ore.dm
+++ b/code/modules/random_map/noise/ore.dm
@@ -8,30 +8,30 @@
var/min_deep_ratio = MIN_DEEP_COUNT_PER_CHUNK
var/list/surface_metals = list(
- /decl/material/solid/metal/iron = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX),
- /decl/material/solid/metal/aluminium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
- /decl/material/solid/metal/gold = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
- /decl/material/solid/metal/silver = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
- /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
+ /decl/material/solid/metal/iron = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX),
+ /decl/material/solid/metal/aluminium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
+ /decl/material/solid/metal/gold = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
+ /decl/material/solid/metal/silver = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
+ /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
)
var/list/rare_metals = list(
- /decl/material/solid/metal/gold = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
- /decl/material/solid/metal/silver = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
- /decl/material/solid/metal/uranium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
- /decl/material/solid/metal/osmium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
- /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
+ /decl/material/solid/metal/gold = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
+ /decl/material/solid/metal/silver = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
+ /decl/material/solid/metal/uranium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
+ /decl/material/solid/metal/osmium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
+ /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
)
var/list/deep_metals = list(
- /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
- /decl/material/solid/gemstone/diamond = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
- /decl/material/solid/metal/osmium = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX),
- /decl/material/solid/metallic_hydrogen = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
- /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
+ /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
+ /decl/material/solid/gemstone/diamond = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX),
+ /decl/material/solid/metal/osmium = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX),
+ /decl/material/solid/metallic_hydrogen = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX),
+ /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
)
var/list/common_resources = list(
- /decl/material/solid/sand = list(3,5),
- /decl/material/solid/clay = list(3,5),
- /decl/material/solid/graphite = list(3,5)
+ /decl/material/solid/sand = list(RESOURCE_COMMON_MIN, RESOURCE_COMMON_MAX),
+ /decl/material/solid/clay = list(RESOURCE_COMMON_MIN, RESOURCE_COMMON_MAX),
+ /decl/material/solid/graphite = list(RESOURCE_COMMON_MIN, RESOURCE_COMMON_MAX)
)
/datum/random_map/noise/ore/New(var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/used_area)
@@ -94,19 +94,19 @@
var/tmp_cell
TRANSLATE_AND_VERIFY_COORD(x, y)
-
- var/spawning
- if(tmp_cell < rare_val)
- spawning = surface_metals
- else if(tmp_cell < deep_val)
- spawning = rare_metals
- else
- spawning = deep_metals
-
- for(var/val in spawning)
- var/list/ranges = spawning[val]
- resources[val] = rand(ranges[1], ranges[2])
- set_extension(T, /datum/extension/buried_resources, resources)
+ if(tmp_cell)
+ var/spawning
+ if(tmp_cell < rare_val)
+ spawning = surface_metals
+ else if(tmp_cell < deep_val)
+ spawning = rare_metals
+ else
+ spawning = deep_metals
+
+ for(var/val in spawning)
+ var/list/ranges = spawning[val]
+ resources[val] = rand(ranges[1], ranges[2])
+ set_extension(T, /datum/extension/buried_resources, resources)
/datum/random_map/noise/ore/get_map_char(var/value)
if(value < rare_val)
diff --git a/code/modules/random_map/noise/seafloor.dm b/code/modules/random_map/noise/seafloor.dm
index ce3f584a20d..4283970e757 100644
--- a/code/modules/random_map/noise/seafloor.dm
+++ b/code/modules/random_map/noise/seafloor.dm
@@ -10,19 +10,13 @@
/datum/random_map/noise/seafloor/replace_space/get_appropriate_path(var/value)
return /turf/exterior/seafloor/flooded
-/turf/exterior/mud/flooded
- flooded = TRUE
-
-/turf/exterior/mud/dark/flooded
- flooded = TRUE
-
/datum/random_map/noise/seafloor/get_appropriate_path(var/value)
var/val = min(9,max(0,round((value/cell_range)*10)))
switch(val)
if(6)
- return /turf/exterior/mud/flooded
+ return /turf/exterior/clay/flooded
if(7 to 9)
- return /turf/exterior/mud/dark/flooded
+ return /turf/exterior/mud/flooded
/datum/random_map/noise/seafloor/get_additional_spawns(var/value, var/turf/T)
var/val = min(9,max(0,round((value/cell_range)*10)))
diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm
index c0b3ce9fa9a..1919398f116 100644
--- a/code/modules/random_map/random_map.dm
+++ b/code/modules/random_map/random_map.dm
@@ -72,13 +72,6 @@ var/global/list/map_count = list()
else
admin_notice(SPAN_DANGER("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map."), R_DEBUG)
-/datum/random_map/proc/get_map_cell(var/x,var/y)
- if(!map)
- set_map_size()
- . = ((y-1)*limit_x)+x
- if((. < 1) || (. > map.len))
- return null
-
/datum/random_map/proc/get_map_char(var/value)
switch(value)
if(WALL_CHAR)
@@ -106,7 +99,7 @@ var/global/list/map_count = list()
var/dat = "+------+
"
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(current_cell)
dat += get_map_char(map[current_cell])
dat += "
"
@@ -119,7 +112,7 @@ var/global/list/map_count = list()
/datum/random_map/proc/seed_map()
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(prob(initial_wall_cell))
map[current_cell] = WALL_CHAR
else
@@ -128,7 +121,7 @@ var/global/list/map_count = list()
/datum/random_map/proc/clear_map()
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- map[get_map_cell(x,y)] = 0
+ map[TRANSLATE_COORD(x,y)] = 0
/datum/random_map/proc/generate()
seed_map()
@@ -165,7 +158,7 @@ var/global/list/map_count = list()
apply_to_turf(x,y)
/datum/random_map/proc/apply_to_turf(var/x,var/y)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(!current_cell)
return 0
var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z)
@@ -201,14 +194,17 @@ var/global/list/map_count = list()
ty-- // doesn't push it off-kilter by one.
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ var/current_cell = TRANSLATE_COORD(x,y)
if(!current_cell)
continue
if(tx+x > target_map.limit_x)
continue
if(ty+y > target_map.limit_y)
continue
- target_map.map[target_map.get_map_cell(tx+x,ty+y)] = map[current_cell]
+ var/tmp_cell
+ TRANSLATE_AND_VERIFY_COORD_MLEN(tx+x, ty+y, target_map.map.len)
+ if(tmp_cell)
+ target_map.map[tmp_cell] = map[current_cell]
handle_post_overlay_on(target_map,tx,ty)
diff --git a/code/modules/reagents/Chemistry-Grinder.dm b/code/modules/reagents/Chemistry-Grinder.dm
index af0ebfe26b3..4a99f1941d6 100644
--- a/code/modules/reagents/Chemistry-Grinder.dm
+++ b/code/modules/reagents/Chemistry-Grinder.dm
@@ -192,7 +192,7 @@
update_icon()
// Reset the machine.
- addtimer(CALLBACK(src, .proc/end_grind, user), 6 SECONDS, TIMER_UNIQUE)
+ addtimer(CALLBACK(src, PROC_REF(end_grind), user), 6 SECONDS, TIMER_UNIQUE)
var/skill_factor = CLAMP01(1 + 0.3*(user.get_skill_value(skill_to_check) - SKILL_EXPERT)/(SKILL_EXPERT - SKILL_MIN))
// Process.
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index b81a7ddc576..6316e81d0e3 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -39,7 +39,9 @@ var/global/obj/temp_reagents_holder = new
clone.cached_color = cached_color
return clone
-/datum/reagents/proc/get_reaction_loc()
+/datum/reagents/proc/get_reaction_loc(chemical_reaction_flags)
+ if((chemical_reaction_flags & CHEM_REACTION_FLAG_OVERFLOW_CONTAINER) && ATOM_IS_OPEN_CONTAINER(my_atom))
+ return get_turf(my_atom)
return my_atom
/datum/reagents/proc/get_primary_reagent_name(var/codex = FALSE) // Returns the name of the reagent with the biggest volume.
@@ -51,7 +53,7 @@ var/global/obj/temp_reagents_holder = new
. = reagent.name
/datum/reagents/proc/get_primary_reagent_decl()
- . = primary_reagent && GET_DECL(primary_reagent)
+ . = GET_DECL(primary_reagent)
/datum/reagents/proc/update_total() // Updates volume.
total_volume = 0
@@ -73,7 +75,7 @@ var/global/obj/temp_reagents_holder = new
var/atom/location = get_reaction_loc()
var/check_flags = location?.atom_flags || 0
- if(check_flags & ATOM_FLAG_NO_REACT)
+ if((check_flags & ATOM_FLAG_NO_REACT) && (check_flags & ATOM_FLAG_NO_PHASE_CHANGE) && (check_flags & ATOM_FLAG_NO_DISSOLVE))
return 0
var/reaction_occured = FALSE
@@ -126,41 +128,42 @@ var/global/obj/temp_reagents_holder = new
if(replace_sound)
playsound(location, replace_sound, 80, 1)
- else // Otherwise, collect all possible reactions.
+ else if(!(check_flags & ATOM_FLAG_NO_REACT)) // Otherwise, collect all possible reactions.
eligible_reactions |= SSmaterials.chemical_reactions_by_id[R.type]
- var/list/active_reactions = list()
-
- for(var/decl/chemical_reaction/C in eligible_reactions)
- if(C.can_happen(src))
- active_reactions[C] = 1 // The number is going to be 1/(fraction of remaining reagents we are allowed to use), computed below
- reaction_occured = 1
-
- var/list/used_reagents = list()
- // if two reactions share a reagent, each is allocated half of it, so we compute this here
- for(var/decl/chemical_reaction/C in active_reactions)
- var/list/adding = C.get_used_reagents()
- for(var/R in adding)
- LAZYADD(used_reagents[R], C)
-
- for(var/R in used_reagents)
- var/counter = length(used_reagents[R])
- if(counter <= 1)
- continue // Only used by one reaction, so nothing we need to do.
- for(var/decl/chemical_reaction/C in used_reagents[R])
- active_reactions[C] = max(counter, active_reactions[C])
- counter-- //so the next reaction we execute uses more of the remaining reagents
- // Note: this is not guaranteed to maximize the size of the reactions we do (if one reaction is limited by reagent A, we may be over-allocating reagent B to it)
- // However, we are guaranteed to fully use up the most profligate reagent if possible.
- // Further reactions may occur on the next tick, when this runs again.
-
- for(var/thing in active_reactions)
- var/decl/chemical_reaction/C = thing
- C.process(src, active_reactions[C])
-
- for(var/thing in active_reactions)
- var/decl/chemical_reaction/C = thing
- C.post_reaction(src)
+ if(!(check_flags & ATOM_FLAG_NO_REACT))
+ var/list/active_reactions = list()
+
+ for(var/decl/chemical_reaction/C in eligible_reactions)
+ if(C.can_happen(src))
+ active_reactions[C] = 1 // The number is going to be 1/(fraction of remaining reagents we are allowed to use), computed below
+ reaction_occured = 1
+
+ var/list/used_reagents = list()
+ // if two reactions share a reagent, each is allocated half of it, so we compute this here
+ for(var/decl/chemical_reaction/C in active_reactions)
+ var/list/adding = C.get_used_reagents()
+ for(var/R in adding)
+ LAZYADD(used_reagents[R], C)
+
+ for(var/R in used_reagents)
+ var/counter = length(used_reagents[R])
+ if(counter <= 1)
+ continue // Only used by one reaction, so nothing we need to do.
+ for(var/decl/chemical_reaction/C in used_reagents[R])
+ active_reactions[C] = max(counter, active_reactions[C])
+ counter-- //so the next reaction we execute uses more of the remaining reagents
+ // Note: this is not guaranteed to maximize the size of the reactions we do (if one reaction is limited by reagent A, we may be over-allocating reagent B to it)
+ // However, we are guaranteed to fully use up the most profligate reagent if possible.
+ // Further reactions may occur on the next tick, when this runs again.
+
+ for(var/thing in active_reactions)
+ var/decl/chemical_reaction/C = thing
+ C.process(src, active_reactions[C])
+
+ for(var/thing in active_reactions)
+ var/decl/chemical_reaction/C = thing
+ C.post_reaction(src)
update_total()
@@ -458,7 +461,7 @@ var/global/obj/temp_reagents_holder = new
if (!target || !target.reagents || !target.simulated)
return
- amount = min(amount, REAGENT_VOLUME(src, type))
+ amount = max(0, min(amount, REAGENT_VOLUME(src, type), REAGENTS_FREE_SPACE(target.reagents) / multiplier))
if(!amount)
return
@@ -473,7 +476,7 @@ var/global/obj/temp_reagents_holder = new
if (!target)
return
- amount = min(amount, REAGENT_VOLUME(src, type))
+ amount = max(0, min(amount, REAGENT_VOLUME(src, type), REAGENTS_FREE_SPACE(target) / multiplier))
if(!amount)
return
diff --git a/code/modules/reagents/chems/chems_blood.dm b/code/modules/reagents/chems/chems_blood.dm
index d3a7228bd38..c56c0a0dc81 100644
--- a/code/modules/reagents/chems/chems_blood.dm
+++ b/code/modules/reagents/chems/chems_blood.dm
@@ -59,7 +59,7 @@
blood_splatter(T, src, 1)
else if(isalien(W))
var/obj/effect/decal/cleanable/blood/B = blood_splatter(T, holder.my_atom, 1)
- if(B)
+ if(!QDELETED(B))
B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
/decl/material/liquid/blood/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder)
diff --git a/code/modules/reagents/chems/chems_cleaner.dm b/code/modules/reagents/chems/chems_cleaner.dm
index 2b977a8380b..5bd2e9454e5 100644
--- a/code/modules/reagents/chems/chems_cleaner.dm
+++ b/code/modules/reagents/chems/chems_cleaner.dm
@@ -9,3 +9,31 @@
turf_touch_threshold = 0.1
uid = "chem_cleaner"
exoplanet_rarity_gas = MAT_RARITY_EXOTIC
+
+/decl/material/liquid/contaminant_cleaner
+ name = "akaline detergent"
+ lore_text = "A highly akaline hydrazine based detergent. Able to clean contaminants, but may release ammonia gas if used in open air."
+ taste_description = "bleach"
+ vapor_products = list(/decl/material/gas/ammonia = 0.5)
+ color = "#213799"
+ touch_met = 5
+ toxicity = 5
+ scent = "clean linen"
+ scent_descriptor = SCENT_DESC_FRAGRANCE
+ value = 0.25
+ dirtiness = DIRTINESS_DECONTAMINATE
+ decontamination_dose = 5
+ turf_touch_threshold = 0.1
+ uid = "chem_contaminant_cleaner"
+ exoplanet_rarity_gas = MAT_RARITY_EXOTIC
+
+/decl/material/liquid/cleaner/soap
+ name = "soap"
+ lore_text = "A soft solid compound used to clean things. Usually derived from oil or fat."
+ taste_description = "waxy blandness"
+ color = COLOR_BEIGE
+ uid = "chem_soap"
+ melting_point = 323
+ ignition_point = 353
+ boiling_point = 373
+ accelerant_value = 0.3
diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm
index 8866c5377dc..465931dd12a 100644
--- a/code/modules/reagents/chems/chems_compounds.dm
+++ b/code/modules/reagents/chems/chems_compounds.dm
@@ -33,7 +33,7 @@
/decl/material/liquid/glowsap/on_leaving_metabolism(datum/reagents/metabolism/holder)
if(ishuman(holder?.my_atom))
var/mob/living/carbon/human/H = holder.my_atom
- addtimer(CALLBACK(H, /mob/living/carbon/human/proc/update_eyes), 5 SECONDS)
+ addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, update_eyes)), 5 SECONDS)
. = ..()
/decl/material/liquid/glowsap/affect_overdose(var/mob/living/M)
diff --git a/code/modules/reagents/chems/chems_ethanol.dm b/code/modules/reagents/chems/chems_ethanol.dm
index 9f14d313f25..4009ab27374 100644
--- a/code/modules/reagents/chems/chems_ethanol.dm
+++ b/code/modules/reagents/chems/chems_ethanol.dm
@@ -4,7 +4,8 @@
taste_description = "pure alcohol"
color = "#404030"
touch_met = 5
- fuel_value = 0.75
+ ignition_point = T0C+150
+ accelerant_value = FUEL_VALUE_ACCELERANT
solvent_power = MAT_SOLVENT_MODERATE
uid = "chem_ethanol"
diff --git a/code/modules/reagents/chems/chems_fuel.dm b/code/modules/reagents/chems/chems_fuel.dm
index 9b86de1e4fb..f631468ba4a 100644
--- a/code/modules/reagents/chems/chems_fuel.dm
+++ b/code/modules/reagents/chems/chems_fuel.dm
@@ -4,7 +4,8 @@
taste_description = "gross metal"
color = "#660000"
touch_met = 5
- fuel_value = 1
+ ignition_point = T0C+150
+ accelerant_value = FUEL_VALUE_ACCELERANT + 0.2
burn_product = /decl/material/gas/carbon_monoxide
gas_flags = XGM_GAS_FUEL
exoplanet_rarity_plant = MAT_RARITY_UNCOMMON
@@ -45,5 +46,5 @@
metabolism = REM * 0.2
touch_met = 5
value = 1.2
- fuel_value = 1.2
+ accelerant_value = FUEL_VALUE_ACCELERANT + 0.5
uid = "chem_hydrazine"
diff --git a/code/modules/reagents/chems/chems_nutriment.dm b/code/modules/reagents/chems/chems_nutriment.dm
index 79add600924..1e04eee2dd2 100644
--- a/code/modules/reagents/chems/chems_nutriment.dm
+++ b/code/modules/reagents/chems/chems_nutriment.dm
@@ -10,9 +10,16 @@
uid = "chem_nutriment"
exoplanet_rarity_gas = MAT_RARITY_NOWHERE // Please, no more animal protein or glowsap or corn oil atmosphere.
+ // Technically a room-temperature solid, but saves
+ // repathing it to /solid all over the codebase.
+ melting_point = 323
+ ignition_point = 353
+ boiling_point = 373
+ accelerant_value = 0.65
+
var/nutriment_factor = 10 // Per unit
var/hydration_factor = 0 // Per unit
- var/injectable = 0
+ var/injectable = FALSE
/decl/material/liquid/nutriment/mix_data(var/datum/reagents/reagents, var/list/newdata, var/newamount)
@@ -102,6 +109,8 @@
taste_description = "egg"
color = "#ffffaa"
uid = "chem_nutriment_egg"
+ melting_point = 273
+ boiling_point = 373
//vegetamarian alternative that is safe for vegans to ingest//rewired it from its intended nutriment/protein/egg/softtofu because it would not actually work, going with plan B, more recipes.
@@ -120,6 +129,8 @@
color = "#ffff00"
fruit_descriptor = "rich"
uid = "chem_nutriment_honey"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/flour
name = "flour"
@@ -145,6 +156,8 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_nutriment_batter"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/batter/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
..()
@@ -257,6 +270,8 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_nutriment_soysauce"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/ketchup
name = "ketchup"
@@ -267,6 +282,8 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_nutriment_ketchup"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/banana_cream
name = "banana cream"
@@ -276,6 +293,8 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_nutriment_bananacream"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/barbecue
name = "barbecue sauce"
@@ -286,6 +305,8 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_nutriment_bbqsauce"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/garlicsauce
name = "garlic sauce"
@@ -296,6 +317,8 @@
exoplanet_rarity_plant = MAT_RARITY_NOWHERE
exoplanet_rarity_gas = MAT_RARITY_NOWHERE
uid = "chem_nutriment_garlicsauce"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/rice
name = "rice"
@@ -326,6 +349,8 @@
color = "#801e28"
fruit_descriptor = "sweet"
uid = "chem_nutriment_cherryjelly"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/cornoil
name = "corn oil"
@@ -336,6 +361,8 @@
color = "#302000"
slipperiness = 8
uid = "chem_nutriment_cornoil"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/sprinkles
name = "sprinkles"
@@ -369,6 +396,8 @@
color = "#e8dfd0"
taste_mult = 3
uid = "chem_nutriment_vinegar"
+ melting_point = 273
+ boiling_point = 373
/decl/material/liquid/nutriment/mayo
name = "mayonnaise"
diff --git a/code/modules/reagents/chems/chems_pigments.dm b/code/modules/reagents/chems/chems_pigments.dm
index 1a64670f9ad..dafbb8f7870 100644
--- a/code/modules/reagents/chems/chems_pigments.dm
+++ b/code/modules/reagents/chems/chems_pigments.dm
@@ -63,6 +63,35 @@
color = "#aaaaaa"
uid = "chem_pigment_white"
+/decl/material/liquid/paint_stripper
+ name = "paint stripper"
+ uid = "liquid_paint_remover"
+ lore_text = "A highly toxic compound used as an effective paint stripper."
+ taste_description = "bleach and acid"
+ color = "#a0a0a0"
+ metabolism = REM * 0.2
+ value = 0.1
+ solvent_power = MAT_SOLVENT_MODERATE
+ toxicity = 10
+
+/decl/material/liquid/paint_stripper/proc/remove_paint(var/atom/painting, var/datum/reagents/holder)
+ if(istype(painting) && istype(holder))
+ var/keep_alpha = painting.alpha
+ painting.reset_color()
+ painting.set_alpha(keep_alpha)
+
+/decl/material/liquid/paint_stripper/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
+ if(istype(T) && !isspaceturf(T))
+ remove_paint(T, holder)
+
+/decl/material/liquid/paint_stripper/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder)
+ if(istype(O))
+ remove_paint(O, holder)
+
+/decl/material/liquid/paint_stripper/touch_mob(var/mob/living/M, var/amount, var/datum/reagents/holder)
+ if(istype(M))
+ remove_paint(M, holder)
+
/decl/material/liquid/paint
name = "paint"
lore_text = "This paint will stick to almost any object."
@@ -76,8 +105,8 @@
/decl/material/liquid/paint/proc/apply_paint(var/atom/painting, var/datum/reagents/holder)
if(istype(painting) && istype(holder))
var/keep_alpha = painting.alpha
- painting.color = holder.get_color()
- painting.alpha = keep_alpha
+ painting.set_color(holder.get_color())
+ painting.set_alpha(keep_alpha)
/decl/material/liquid/paint/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
if(istype(T) && !isspaceturf(T))
diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm
index f8774477f22..d34a0361704 100644
--- a/code/modules/reagents/dispenser/cartridge.dm
+++ b/code/modules/reagents/dispenser/cartridge.dm
@@ -6,9 +6,9 @@
w_class = ITEM_SIZE_NORMAL
volume = CARTRIDGE_VOLUME_LARGE
amount_per_transfer_from_this = 50
+ material = /decl/material/solid/stone/ceramic
// Large, but inaccurate. Use a chem dispenser or beaker for accuracy.
possible_transfer_amounts = @"[50,100]"
- unacidable = 1
/obj/item/chems/chem_disp_cartridge/initialize_reagents(populate = TRUE)
. = ..()
@@ -63,7 +63,7 @@
return TRUE
if(standard_pour_into(user, target))
return TRUE
- if(standard_feed_mob(user, target))
+ if(handle_eaten_by_mob(user, target) != EATEN_INVALID)
return TRUE
if(user.a_intent == I_HURT)
if(standard_splash_mob(user,target))
diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm
index ef9070fd880..1a5287a0035 100644
--- a/code/modules/reagents/dispenser/dispenser2.dm
+++ b/code/modules/reagents/dispenser/dispenser2.dm
@@ -130,8 +130,8 @@
events_repository.unregister(/decl/observ/destroyed, container, src)
container = new_container
if(container)
- events_repository.register(/decl/observ/moved, container, src, .proc/check_container_status)
- events_repository.register(/decl/observ/destroyed, container, src, .proc/check_container_status)
+ events_repository.register(/decl/observ/moved, container, src, PROC_REF(check_container_status))
+ events_repository.register(/decl/observ/destroyed, container, src, PROC_REF(check_container_status))
update_icon()
SSnano.update_uis(src) // update all UIs attached to src
diff --git a/code/modules/reagents/reactions/_reaction.dm b/code/modules/reagents/reactions/_reaction.dm
index 16756785735..6e245b6f6ea 100644
--- a/code/modules/reagents/reactions/_reaction.dm
+++ b/code/modules/reagents/reactions/_reaction.dm
@@ -15,6 +15,9 @@
var/log_is_important = 0 // If this reaction should be considered important for logging. Important recipes message admins when mixed, non-important ones just log to file.
var/lore_text
var/mechanics_text
+ var/reaction_category
+ /// Flags used when reaction processing.
+ var/chemical_reaction_flags = 0
/decl/chemical_reaction/proc/can_happen(var/datum/reagents/holder)
//check that all the required reagents are present
@@ -29,7 +32,7 @@
if(holder.has_any_reagent(inhibitors))
return 0
- var/atom/location = holder.get_reaction_loc()
+ var/atom/location = holder.get_reaction_loc(chemical_reaction_flags)
var/temperature = location?.temperature || T20C
if(temperature < minimum_temperature || temperature > maximum_temperature)
return 0
@@ -37,7 +40,7 @@
return 1
/decl/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
- var/atom/location = holder.get_reaction_loc()
+ var/atom/location = holder.get_reaction_loc(chemical_reaction_flags)
if(thermal_product && location && ATOM_SHOULD_TEMPERATURE_ENQUEUE(location))
ADJUST_ATOM_TEMPERATURE(location, thermal_product)
@@ -47,7 +50,7 @@
for(var/reagent in required_reagents)
. += reagent
-/decl/chemical_reaction/proc/get_reaction_flags(var/datum/reagents/holder)
+/decl/chemical_reaction/proc/get_alternate_reaction_indicator(var/datum/reagents/holder)
return 0
/decl/chemical_reaction/proc/process(var/datum/reagents/holder, var/limit)
@@ -59,7 +62,7 @@
if(reaction_volume > A)
reaction_volume = A
- var/reaction_flags = get_reaction_flags(holder)
+ var/alt_reaction_indicator = get_alternate_reaction_indicator(holder)
for(var/reactant in required_reagents)
holder.remove_reagent(reactant, reaction_volume * required_reagents[reactant], safety = 1)
@@ -69,11 +72,11 @@
if(result)
holder.add_reagent(result, amt_produced, data, safety = 1)
- on_reaction(holder, amt_produced, reaction_flags)
+ on_reaction(holder, amt_produced, alt_reaction_indicator)
//called after processing reactions, if they occurred
/decl/chemical_reaction/proc/post_reaction(var/datum/reagents/holder)
- var/atom/container = holder.get_reaction_loc()
+ var/atom/container = holder.get_reaction_loc(chemical_reaction_flags)
if(mix_message && container && !ismob(container))
var/turf/T = get_turf(container)
if(istype(T))
diff --git a/code/modules/reagents/reactions/reaction_alcohol.dm b/code/modules/reagents/reactions/reaction_alcohol.dm
index 3993ba177bc..6fbf57294cc 100644
--- a/code/modules/reagents/reactions/reaction_alcohol.dm
+++ b/code/modules/reagents/reactions/reaction_alcohol.dm
@@ -1,5 +1,6 @@
/decl/chemical_reaction/recipe
abstract_type = /decl/chemical_reaction/recipe
+ reaction_category = REACTION_TYPE_RECIPE
/decl/chemical_reaction/recipe/moonshine
name = "Moonshine"
diff --git a/code/modules/reagents/reactions/reaction_alloys.dm b/code/modules/reagents/reactions/reaction_alloys.dm
index 056c84f260b..61bd616d6a8 100644
--- a/code/modules/reagents/reactions/reaction_alloys.dm
+++ b/code/modules/reagents/reactions/reaction_alloys.dm
@@ -3,6 +3,7 @@
maximum_temperature = INFINITY
reaction_sound = null
mix_message = null
+ reaction_category = REACTION_TYPE_ALLOYING
abstract_type = /decl/chemical_reaction/alloy
/decl/chemical_reaction/alloy/borosilicate
diff --git a/code/modules/reagents/reactions/reaction_compounds.dm b/code/modules/reagents/reactions/reaction_compounds.dm
new file mode 100644
index 00000000000..25fe15e5b28
--- /dev/null
+++ b/code/modules/reagents/reactions/reaction_compounds.dm
@@ -0,0 +1,123 @@
+/decl/chemical_reaction/compound
+ abstract_type = /decl/chemical_reaction/compound
+ reaction_category = REACTION_TYPE_COMPOUND
+
+/decl/chemical_reaction/compound/surfactant
+ name = "Azosurfactant"
+ result = /decl/material/liquid/surfactant
+ required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/liquid/acid = 1)
+ result_amount = 5
+ mix_message = "The solution begins to foam gently."
+
+/decl/chemical_reaction/compound/space_cleaner
+ name = "Space cleaner"
+ result = /decl/material/liquid/cleaner
+ required_reagents = list(/decl/material/gas/ammonia = 1, /decl/material/liquid/water = 1)
+ mix_message = "The solution becomes slick and soapy."
+ result_amount = 2
+
+/decl/chemical_reaction/compound/plantbgone
+ name = "Plant-B-Gone"
+ result = /decl/material/liquid/weedkiller
+ required_reagents = list(
+ /decl/material/liquid/bromide = 1,
+ /decl/material/liquid/water = 4
+ )
+ result_amount = 5
+
+/decl/chemical_reaction/compound/foaming_agent
+ name = "Foaming Agent"
+ result = /decl/material/liquid/foaming_agent
+ required_reagents = list(/decl/material/solid/lithium = 1, /decl/material/liquid/fuel/hydrazine = 1)
+ result_amount = 1
+ mix_message = "The solution begins to foam vigorously."
+
+/decl/chemical_reaction/compound/sodiumchloride
+ name = "Sodium Chloride"
+ result = /decl/material/solid/sodiumchloride
+ required_reagents = list(/decl/material/solid/sodium = 1, /decl/material/liquid/acid/hydrochloric = 1)
+ result_amount = 2
+
+/decl/chemical_reaction/compound/hair_remover
+ name = "Hair Remover"
+ result = /decl/material/liquid/hair_remover
+ required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/solid/potassium = 1, /decl/material/liquid/acid/hydrochloric = 1)
+ result_amount = 3
+ mix_message = "The solution thins out and emits an acrid smell."
+
+/decl/chemical_reaction/compound/methyl_bromide
+ name = "Methyl Bromide"
+ required_reagents = list(
+ /decl/material/liquid/bromide = 1,
+ /decl/material/liquid/ethanol = 1,
+ /decl/material/liquid/fuel/hydrazine = 1
+ )
+ result_amount = 3
+ result = /decl/material/gas/methyl_bromide
+ mix_message = "The solution begins to bubble, emitting a dark vapor."
+
+/decl/chemical_reaction/compound/luminol
+ name = "Luminol"
+ result = /decl/material/liquid/luminol
+ required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/gas/ammonia = 2)
+ result_amount = 6
+ mix_message = "The solution begins to gleam with a fey inner light."
+
+/decl/chemical_reaction/compound/anfo
+ name = "Fertilizer ANFO"
+ result = /decl/material/liquid/anfo
+ required_reagents = list(
+ /decl/material/liquid/fertilizer = 20,
+ /decl/material/liquid/fuel = 10
+ )
+ result_amount = 15
+ mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum."
+
+/decl/chemical_reaction/compound/anfo4
+ name = "Chemlab ANFO"
+ result = /decl/material/liquid/anfo
+ required_reagents = list(
+ /decl/material/gas/ammonia = 10,
+ /decl/material/liquid/fuel = 5
+ )
+ result_amount = 15
+ mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum."
+
+/decl/chemical_reaction/compound/anfo_plus
+ name = "ANFO+"
+ result = /decl/material/liquid/anfo/plus
+ required_reagents = list(
+ /decl/material/liquid/anfo = 15,
+ /decl/material/solid/metal/aluminium = 5
+ )
+ result_amount = 20
+ mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum."
+
+/decl/chemical_reaction/compound/crystal_agent
+ name = "Crystallizing Agent"
+ result = /decl/material/liquid/crystal_agent
+ required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/metal/tungsten = 1, /decl/material/liquid/acid/polyacid = 1)
+ minimum_temperature = 150 CELSIUS
+ maximum_temperature = 200 CELSIUS
+ result_amount = 3
+
+/decl/chemical_reaction/compound/paint
+ name = "Paint"
+ result = /decl/material/liquid/paint
+ required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/liquid/water = 3)
+ result_amount = 5
+ mix_message = "The solution thickens and takes on a glossy sheen."
+
+/decl/chemical_reaction/compound/paint_stripper
+ name = "Paint Stripper"
+ //TODO: some way to mix chlorine and methane to make proper paint stripper.
+ required_reagents = list(/decl/material/liquid/acetone = 2, /decl/material/liquid/acid = 2)
+ result = /decl/material/liquid/paint_stripper
+ result_amount = 4
+ mix_message = "The mixture thins and clears."
+
+/decl/chemical_reaction/compound/contaminant_cleaner
+ name = "Akaline Detergent"
+ result = /decl/material/liquid/contaminant_cleaner
+ required_reagents = list(/decl/material/solid/sodium = 1, /decl/material/liquid/surfactant = 1)
+ result_amount = 2
diff --git a/code/modules/reagents/reactions/reaction_drugs.dm b/code/modules/reagents/reactions/reaction_drugs.dm
index 03eac2e230b..c45f33878db 100644
--- a/code/modules/reagents/reactions/reaction_drugs.dm
+++ b/code/modules/reagents/reactions/reaction_drugs.dm
@@ -1,10 +1,14 @@
-/decl/chemical_reaction/antitoxins
+/decl/chemical_reaction/drug
+ abstract_type = /decl/chemical_reaction/drug
+ reaction_category = REACTION_TYPE_PHARMACEUTICAL
+
+/decl/chemical_reaction/drug/antitoxins
name = "Antitoxins"
result = /decl/material/liquid/antitoxins
required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/potassium = 1, /decl/material/gas/ammonia = 1)
result_amount = 3
-/decl/chemical_reaction/painkillers
+/decl/chemical_reaction/drug/painkillers
name = "Mild Painkillers"
result = /decl/material/liquid/painkillers
required_reagents = list(
@@ -14,7 +18,7 @@
)
result_amount = 3
-/decl/chemical_reaction/strong_painkillers
+/decl/chemical_reaction/drug/strong_painkillers
name = "Strong Painkillers"
result = /decl/material/liquid/painkillers/strong
required_reagents = list(
@@ -24,19 +28,19 @@
)
result_amount = 3
-/decl/chemical_reaction/antiseptic
+/decl/chemical_reaction/drug/antiseptic
name = "Antiseptic"
result = /decl/material/liquid/antiseptic
required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/antitoxins = 1, /decl/material/liquid/acid/hydrochloric = 1)
result_amount = 3
-/decl/chemical_reaction/mutagenics
+/decl/chemical_reaction/drug/mutagenics
name = "Unstable mutagen"
result = /decl/material/liquid/mutagenics
required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/solid/phosphorus = 1, /decl/material/liquid/acid/hydrochloric = 1)
result_amount = 3
-/decl/chemical_reaction/psychoactives
+/decl/chemical_reaction/drug/psychoactives
name = "Psychoactives"
result = /decl/material/liquid/psychoactives
required_reagents = list(/decl/material/liquid/mercury = 1, /decl/material/liquid/nutriment/sugar = 1, /decl/material/solid/lithium = 1)
@@ -44,39 +48,39 @@
minimum_temperature = 50 CELSIUS
maximum_temperature = (50 CELSIUS) + 100
-/decl/chemical_reaction/lube
+/decl/chemical_reaction/drug/lube
name = "Lubricant"
result = /decl/material/liquid/lube
required_reagents = list(/decl/material/liquid/water = 1, /decl/material/solid/silicon = 1, /decl/material/liquid/acetone = 1)
result_amount = 3
mix_message = "The solution becomes thick and slimy."
-/decl/chemical_reaction/pacid
+/decl/chemical_reaction/drug/pacid
name = "Polytrinic acid"
result = /decl/material/liquid/acid/polyacid
required_reagents = list(/decl/material/liquid/acid = 1, /decl/material/liquid/acid/hydrochloric = 1, /decl/material/solid/potassium = 1)
result_amount = 3
-/decl/chemical_reaction/antirads
+/decl/chemical_reaction/drug/antirads
name = "Anti-Radiation Medication"
result = /decl/material/liquid/antirads
required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/liquid/antitoxins = 1)
result_amount = 2
-/decl/chemical_reaction/narcotics
+/decl/chemical_reaction/drug/narcotics
name = "Narcotics"
result = /decl/material/liquid/narcotics
required_reagents = list(/decl/material/liquid/mercury = 1, /decl/material/liquid/acetone = 1, /decl/material/liquid/nutriment/sugar = 1)
result_amount = 2
-/decl/chemical_reaction/burn_meds
+/decl/chemical_reaction/drug/burn_meds
name = "Anti-Burn Medication"
result = /decl/material/liquid/burn_meds
required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/carbon = 1)
result_amount = 2
log_is_important = 1
-/decl/chemical_reaction/presyncopics
+/decl/chemical_reaction/drug/presyncopics
name = "Presyncopics"
result = /decl/material/liquid/presyncopics
required_reagents = list(/decl/material/solid/potassium = 1, /decl/material/liquid/acetone = 1, /decl/material/liquid/nutriment/sugar = 1)
@@ -84,44 +88,44 @@
maximum_temperature = 60 CELSIUS
result_amount = 3
-/decl/chemical_reaction/regenerator
+/decl/chemical_reaction/drug/regenerator
name = "Regenerative Serum"
result = /decl/material/liquid/regenerator
required_reagents = list(/decl/material/liquid/stabilizer = 1, /decl/material/liquid/antitoxins = 1)
result_amount = 2
-/decl/chemical_reaction/neuroannealer
+/decl/chemical_reaction/drug/neuroannealer
name = "Neuroannealer"
result = /decl/material/liquid/neuroannealer
required_reagents = list(/decl/material/liquid/acid/hydrochloric = 1, /decl/material/gas/ammonia = 1, /decl/material/liquid/antitoxins = 1)
result_amount = 2
-/decl/chemical_reaction/oxy_meds
+/decl/chemical_reaction/drug/oxy_meds
name = "Oxygen Deprivation Medication"
result = /decl/material/liquid/oxy_meds
required_reagents = list(/decl/material/liquid/acetone = 1, /decl/material/liquid/water = 1, /decl/material/solid/sulfur = 1)
result_amount = 1
-/decl/chemical_reaction/brute_meds
+/decl/chemical_reaction/drug/brute_meds
name = "Anti-Trauma Medication"
result = /decl/material/liquid/brute_meds
required_reagents = list(/decl/material/liquid/stabilizer = 1, /decl/material/solid/carbon = 1)
inhibitors = list(/decl/material/liquid/nutriment/sugar = 1) // Messes up with adrenaline
result_amount = 2
-/decl/chemical_reaction/amphetamines
+/decl/chemical_reaction/drug/amphetamines
name = "Amphetamines"
result = /decl/material/liquid/amphetamines
required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/solid/phosphorus = 1, /decl/material/solid/sulfur = 1)
result_amount = 3
-/decl/chemical_reaction/retrovirals
+/decl/chemical_reaction/drug/retrovirals
name = "Retrovirals"
result = /decl/material/liquid/retrovirals
required_reagents = list(/decl/material/liquid/antirads = 1, /decl/material/solid/carbon = 1)
result_amount = 2
-/decl/chemical_reaction/nanitefluid
+/decl/chemical_reaction/compound/nanitefluid
name = "Nanite Fluid"
result = /decl/material/liquid/nanitefluid
required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/solid/metal/aluminium = 1, /decl/material/liquid/lube = 1)
@@ -131,19 +135,19 @@
maximum_temperature = -25 CELSIUS
mix_message = "The solution becomes a metallic slime."
-/decl/chemical_reaction/antibiotics
+/decl/chemical_reaction/drug/antibiotics
name = "Antibiotics"
result = /decl/material/liquid/antibiotics
required_reagents = list(/decl/material/liquid/presyncopics = 1, /decl/material/liquid/stabilizer = 1)
result_amount = 2
-/decl/chemical_reaction/eyedrops
+/decl/chemical_reaction/drug/eyedrops
name = "Eye Drops"
result = /decl/material/liquid/eyedrops
required_reagents = list(/decl/material/solid/carbon = 1, /decl/material/liquid/fuel/hydrazine = 1, /decl/material/liquid/antitoxins = 1)
result_amount = 2
-/decl/chemical_reaction/sedatives
+/decl/chemical_reaction/drug/sedatives
name = "Sedatives"
result = /decl/material/liquid/sedatives
required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/nutriment/sugar = 4
@@ -153,13 +157,13 @@
) // Messes with the smoke
result_amount = 5
-/decl/chemical_reaction/paralytics
+/decl/chemical_reaction/drug/paralytics
name = "Paralytics"
result = /decl/material/liquid/paralytics
required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/mercury = 2, /decl/material/liquid/fuel/hydrazine = 2)
result_amount = 1
-/decl/chemical_reaction/zombiepowder
+/decl/chemical_reaction/drug/zombiepowder
name = "Zombie Powder"
result = /decl/material/liquid/zombiepowder
required_reagents = list(/decl/material/liquid/carpotoxin = 5, /decl/material/liquid/sedatives = 5, /decl/material/solid/metal/copper = 5)
@@ -168,7 +172,7 @@
maximum_temperature = 99 CELSIUS
mix_message = "The solution boils off to form a fine powder."
-/decl/chemical_reaction/hallucinogenics
+/decl/chemical_reaction/drug/hallucinogenics
name = "Hallucinogenics"
result = /decl/material/liquid/hallucinogenics
required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/liquid/fuel/hydrazine = 1, /decl/material/liquid/antitoxins = 1)
@@ -177,85 +181,31 @@
minimum_temperature = 75 CELSIUS
maximum_temperature = (75 CELSIUS) + 25
-/decl/chemical_reaction/surfactant
- name = "Azosurfactant"
- result = /decl/material/liquid/surfactant
- required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/liquid/acid = 1)
- result_amount = 5
- mix_message = "The solution begins to foam gently."
-
-/decl/chemical_reaction/space_cleaner
- name = "Space cleaner"
- result = /decl/material/liquid/cleaner
- required_reagents = list(/decl/material/gas/ammonia = 1, /decl/material/liquid/water = 1)
- mix_message = "The solution becomes slick and soapy."
- result_amount = 2
-
-/decl/chemical_reaction/plantbgone
- name = "Plant-B-Gone"
- result = /decl/material/liquid/weedkiller
- required_reagents = list(
- /decl/material/liquid/bromide = 1,
- /decl/material/liquid/water = 4
- )
- result_amount = 5
-
-/decl/chemical_reaction/foaming_agent
- name = "Foaming Agent"
- result = /decl/material/liquid/foaming_agent
- required_reagents = list(/decl/material/solid/lithium = 1, /decl/material/liquid/fuel/hydrazine = 1)
- result_amount = 1
- mix_message = "The solution begins to foam vigorously."
-
-/decl/chemical_reaction/sodiumchloride
- name = "Sodium Chloride"
- result = /decl/material/solid/sodiumchloride
- required_reagents = list(/decl/material/solid/sodium = 1, /decl/material/liquid/acid/hydrochloric = 1)
- result_amount = 2
-
-/decl/chemical_reaction/stimulants
+/decl/chemical_reaction/drug/stimulants
name = "Stimulants"
result = /decl/material/liquid/stimulants
required_reagents = list(/decl/material/liquid/hallucinogenics = 1, /decl/material/solid/lithium = 1)
result_amount = 3
-/decl/chemical_reaction/antidepressants
+/decl/chemical_reaction/drug/antidepressants
name = "Antidepressants"
result = /decl/material/liquid/antidepressants
required_reagents = list(/decl/material/liquid/hallucinogenics = 1, /decl/material/solid/carbon = 1)
result_amount = 3
-/decl/chemical_reaction/hair_remover
- name = "Hair Remover"
- result = /decl/material/liquid/hair_remover
- required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/solid/potassium = 1, /decl/material/liquid/acid/hydrochloric = 1)
- result_amount = 3
- mix_message = "The solution thins out and emits an acrid smell."
-
-/decl/chemical_reaction/methyl_bromide
- name = "Methyl Bromide"
- required_reagents = list(
- /decl/material/liquid/bromide = 1,
- /decl/material/liquid/ethanol = 1,
- /decl/material/liquid/fuel/hydrazine = 1
- )
- result_amount = 3
- result = /decl/material/gas/methyl_bromide
- mix_message = "The solution begins to bubble, emitting a dark vapor."
-
-/decl/chemical_reaction/adrenaline
+/decl/chemical_reaction/drug/adrenaline
name = "Adrenaline"
result = /decl/material/liquid/adrenaline
required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/liquid/amphetamines = 1, /decl/material/liquid/oxy_meds = 1)
result_amount = 3
-/decl/chemical_reaction/stabilizer
+/decl/chemical_reaction/drug/stabilizer
name = "Stabilizer"
result = /decl/material/liquid/stabilizer
required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/solid/carbon = 1, /decl/material/liquid/acetone = 1)
result_amount = 3
-/decl/chemical_reaction/gleam
+/decl/chemical_reaction/drug/gleam
name = "Gleam"
result = /decl/material/liquid/glowsap/gleam
result_amount = 2
@@ -270,14 +220,14 @@
/decl/material/liquid/glowsap = 2
)
-/decl/chemical_reaction/immunobooster
+/decl/chemical_reaction/drug/immunobooster
name = "Immunobooster"
result = /decl/material/liquid/immunobooster
required_reagents = list(/decl/material/liquid/presyncopics = 1, /decl/material/liquid/antitoxins = 1)
minimum_temperature = 40 CELSIUS
result_amount = 2
-/decl/chemical_reaction/clotting_agent
+/decl/chemical_reaction/drug/clotting_agent
name = "Clotting Agent"
result = /decl/material/liquid/clotting_agent
required_reagents = list(
@@ -286,3 +236,10 @@
/decl/material/liquid/carpotoxin = 1
)
result_amount = 2
+
+/decl/chemical_reaction/drug/nanoblood
+ name = "Nanoblood"
+ result = /decl/material/liquid/nanoblood
+ required_reagents = list(/decl/material/liquid/nanitefluid = 1, /decl/material/solid/metal/iron = 1, /decl/material/liquid/blood = 1)
+ result_amount = 3
+ mix_message = "The solution thickens slowly into a glossy liquid."
diff --git a/code/modules/reagents/reactions/reaction_grenade_reaction.dm b/code/modules/reagents/reactions/reaction_grenade_reaction.dm
index 1bc2f9aa9ec..f32859c611c 100644
--- a/code/modules/reagents/reactions/reaction_grenade_reaction.dm
+++ b/code/modules/reagents/reactions/reaction_grenade_reaction.dm
@@ -2,6 +2,7 @@
result = null
abstract_type = /decl/chemical_reaction/grenade_reaction
result_amount = 1
+ chemical_reaction_flags = CHEM_REACTION_FLAG_OVERFLOW_CONTAINER
/decl/chemical_reaction/grenade_reaction/explosion_potassium
name = "Explosion"
@@ -11,10 +12,10 @@
/decl/chemical_reaction/grenade_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/atom/location = holder.get_reaction_loc()
+ var/atom/location = holder.get_reaction_loc(chemical_reaction_flags)
if(location)
var/datum/effect/effect/system/reagents_explosion/e = new()
- e.set_up(round (created_volume/10, 1), location, 0, 0)
+ e.set_up(round(created_volume/3, 1), location, 0, 0)
if(isliving(location))
e.amount *= 0.5
var/mob/living/L = location
@@ -32,7 +33,7 @@
/decl/chemical_reaction/grenade_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/turf/location = get_turf(holder.get_reaction_loc())
+ var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
spark_at(location, amount=2, cardinal_only = TRUE)
for(var/mob/living/carbon/M in viewers(world.view, location))
@@ -58,7 +59,7 @@
/decl/chemical_reaction/grenade_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/turf/location = holder.get_reaction_loc()
+ var/turf/location = holder.get_reaction_loc(chemical_reaction_flags)
if(location)
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
// 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
@@ -79,7 +80,7 @@
/decl/chemical_reaction/grenade_reaction/flash_fire/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/turf/location = get_turf(holder.get_reaction_loc())
+ var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(istype(location))
location.assume_gas(/decl/material/gas/hydrogen, created_volume, FLAMMABLE_GAS_FLASHPOINT + 10)
spark_at(location, amount=1, cardinal_only = TRUE)
@@ -93,7 +94,7 @@
/decl/chemical_reaction/grenade_reaction/chemsmoke/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/location = get_turf(holder.get_reaction_loc())
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem
S.attach(location)
@@ -112,7 +113,7 @@
/decl/chemical_reaction/grenade_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/turf/location = get_turf(holder.get_reaction_loc())
+ var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
location.visible_message(SPAN_WARNING("The solution spews out foam!"), range = 5)
var/datum/effect/effect/system/foam_spread/s = new()
@@ -129,7 +130,7 @@
/decl/chemical_reaction/grenade_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/atom/location = holder.get_reaction_loc()
+ var/atom/location = holder.get_reaction_loc(chemical_reaction_flags)
if(location)
if(istype(location, /obj/item/sealant_tank))
var/obj/item/sealant_tank/foam = location
@@ -151,7 +152,7 @@
/decl/chemical_reaction/grenade_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/turf/location = get_turf(holder.get_reaction_loc())
+ var/turf/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
location.visible_message(SPAN_WARNING("The solution spews out a metallic foam!"), range = 5)
var/datum/effect/effect/system/foam_spread/s = new()
diff --git a/code/modules/reagents/reactions/reaction_other.dm b/code/modules/reagents/reactions/reaction_other.dm
index 680e3564aa1..cd4dcb2ae3d 100644
--- a/code/modules/reagents/reactions/reaction_other.dm
+++ b/code/modules/reagents/reactions/reaction_other.dm
@@ -6,72 +6,13 @@
var/strength = 3
/decl/chemical_reaction/soap_key/can_happen(var/datum/reagents/holder)
- if(istype(holder.get_reaction_loc(), /obj/item/soap))
+ if(istype(holder.get_reaction_loc(chemical_reaction_flags), /obj/item/soap))
return ..()
return 0
/decl/chemical_reaction/soap_key/on_reaction(var/datum/reagents/holder)
- var/obj/item/soap/S = holder.get_reaction_loc()
+ var/obj/item/soap/S = holder.get_reaction_loc(chemical_reaction_flags)
if(istype(S) && S.key_data)
- var/obj/item/key/soap/key = new(get_turf(S), S.key_data)
+ var/obj/item/key/soap/key = new(get_turf(S), null, S.key_data)
key.uses = strength
..()
-
-/decl/chemical_reaction/luminol
- name = "Luminol"
- result = /decl/material/liquid/luminol
- required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/gas/ammonia = 2)
- result_amount = 6
- mix_message = "The solution begins to gleam with a fey inner light."
-
-/decl/chemical_reaction/nanoblood
- name = "Nanoblood"
- result = /decl/material/liquid/nanoblood
- required_reagents = list(/decl/material/liquid/nanitefluid = 1, /decl/material/solid/metal/iron = 1, /decl/material/liquid/blood = 1)
- result_amount = 3
- mix_message = "The solution thickens slowly into a glossy liquid."
-
-/decl/chemical_reaction/anfo
- name = "Fertilizer ANFO"
- result = /decl/material/liquid/anfo
- required_reagents = list(
- /decl/material/liquid/fertilizer = 20,
- /decl/material/liquid/fuel = 10
- )
- result_amount = 15
- mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum."
-
-/decl/chemical_reaction/anfo4
- name = "Chemlab ANFO"
- result = /decl/material/liquid/anfo
- required_reagents = list(
- /decl/material/gas/ammonia = 10,
- /decl/material/liquid/fuel = 5
- )
- result_amount = 15
- mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum."
-
-/decl/chemical_reaction/anfo_plus
- name = "ANFO+"
- result = /decl/material/liquid/anfo/plus
- required_reagents = list(
- /decl/material/liquid/anfo = 15,
- /decl/material/solid/metal/aluminium = 5
- )
- result_amount = 20
- mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum."
-
-/decl/chemical_reaction/crystal_agent
- name = "Crystallizing Agent"
- result = /decl/material/liquid/crystal_agent
- required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/metal/tungsten = 1, /decl/material/liquid/acid/polyacid = 1)
- minimum_temperature = 150 CELSIUS
- maximum_temperature = 200 CELSIUS
- result_amount = 3
-
-/decl/chemical_reaction/paint
- name = "Paint"
- result = /decl/material/liquid/paint
- required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/liquid/water = 3)
- result_amount = 5
- mix_message = "The solution thickens and takes on a glossy sheen."
diff --git a/code/modules/reagents/reactions/reaction_recipe_food.dm b/code/modules/reagents/reactions/reaction_recipe_food.dm
index 7bc273ca6a5..6a63aa7f0c5 100644
--- a/code/modules/reagents/reactions/reaction_recipe_food.dm
+++ b/code/modules/reagents/reactions/reaction_recipe_food.dm
@@ -6,7 +6,7 @@
/decl/chemical_reaction/recipe/food/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/location = get_turf(holder.get_reaction_loc())
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(obj_result && isturf(location))
for(var/i = 1, i <= created_volume, i++)
new obj_result(location)
diff --git a/code/modules/reagents/reactions/reaction_synthesis.dm b/code/modules/reagents/reactions/reaction_synthesis.dm
index 511219aa387..51eb037fe30 100644
--- a/code/modules/reagents/reactions/reaction_synthesis.dm
+++ b/code/modules/reagents/reactions/reaction_synthesis.dm
@@ -4,6 +4,7 @@
result_amount = 1
mix_message = "The solution hardens and begins to crystallize."
abstract_type = /decl/chemical_reaction/synthesis
+ reaction_category = REACTION_TYPE_SYNTHESIS
/decl/chemical_reaction/synthesis/fiberglass
name = "Fiberglass"
@@ -14,13 +15,13 @@
/decl/chemical_reaction/synthesis/fiberglass/Initialize()
required_reagents = list(
/decl/material/solid/glass = CEILING(REAGENT_UNITS_PER_MATERIAL_SHEET/2),
- /decl/material/solid/plastic = CEILING(REAGENT_UNITS_PER_MATERIAL_SHEET/2)
+ /decl/material/solid/organic/plastic = CEILING(REAGENT_UNITS_PER_MATERIAL_SHEET/2)
)
. = ..()
/decl/chemical_reaction/synthesis/fiberglass/on_reaction(datum/reagents/holder, created_volume, reaction_flags)
..()
- var/location = get_turf(holder.get_reaction_loc())
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
created_volume = CEILING(created_volume)
if(created_volume > 0)
@@ -47,7 +48,7 @@
return TRUE
/decl/chemical_reaction/synthesis/crystalization/on_reaction(datum/reagents/holder, created_volume, reaction_flags)
- var/location = get_turf(holder.get_reaction_loc())
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
var/list/removing_reagents = list()
for(var/rtype in holder.reagent_volumes)
@@ -81,7 +82,7 @@
return TRUE
/decl/chemical_reaction/synthesis/aerogel/on_reaction(datum/reagents/holder, created_volume, reaction_flags)
- var/location = get_turf(holder.get_reaction_loc())
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
var/list/removing_reagents = list()
for(var/rtype in holder.reagent_volumes)
@@ -101,9 +102,9 @@
/decl/chemical_reaction/synthesis/plastication/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/location = get_turf(holder.get_reaction_loc())
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(location)
- SSmaterials.create_object(/decl/material/solid/plastic, location, created_volume)
+ SSmaterials.create_object(/decl/material/solid/organic/plastic, location, created_volume)
/decl/chemical_reaction/synthesis/resin_pack
name = "Resin Globule"
@@ -116,7 +117,7 @@
/decl/chemical_reaction/synthesis/resin_pack/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
..()
- var/turf/T = get_turf(holder.get_reaction_loc())
+ var/turf/T = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(istype(T))
var/create_stacks = FLOOR(created_volume)
if(create_stacks > 0)
diff --git a/code/modules/reagents/reagent_container_edibility.dm b/code/modules/reagents/reagent_container_edibility.dm
new file mode 100644
index 00000000000..07c9eca5dc1
--- /dev/null
+++ b/code/modules/reagents/reagent_container_edibility.dm
@@ -0,0 +1,8 @@
+/obj/item/chems/get_edible_material_amount(var/mob/eater)
+ return reagents?.total_volume
+
+/obj/item/chems/get_food_default_transfer_amount(mob/eater)
+ return eater?.get_eaten_transfer_amount(amount_per_transfer_from_this)
+
+/obj/item/chems/get_food_consumption_method(mob/eater)
+ return EATING_METHOD_DRINK
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index ac3fe9a1b7a..d835cd8a53b 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -4,8 +4,9 @@
icon = 'icons/obj/items/chem/container.dmi'
icon_state = null
w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
obj_flags = OBJ_FLAG_HOLLOW
+ abstract_type = /obj/item/chems
var/base_name
var/base_desc
@@ -24,6 +25,14 @@
if(!possible_transfer_amounts)
src.verbs -= /obj/item/chems/verb/set_amount_per_transfer_from_this
+/obj/item/chems/set_custom_name(var/new_name)
+ base_name = new_name
+ update_container_name()
+
+/obj/item/chems/set_custom_desc(var/new_desc)
+ base_desc = new_desc
+ update_container_desc()
+
/obj/item/chems/proc/cannot_interact(mob/user)
if(!CanPhysicallyInteract(user))
to_chat(usr, SPAN_WARNING("You're in no condition to do that!"))
@@ -41,7 +50,7 @@
/obj/item/chems/on_update_icon()
. = ..()
if(detail_state)
- add_overlay(overlay_image(icon, "[icon_state][detail_state]", detail_color || COLOR_WHITE, RESET_COLOR))
+ add_overlay(overlay_image(icon, "[initial(icon_state)][detail_state]", detail_color || COLOR_WHITE, RESET_COLOR))
/obj/item/chems/proc/update_container_name()
var/newname = get_base_name()
@@ -68,6 +77,7 @@
desc = new_desc_list.Join("\n")
/obj/item/chems/on_reagent_change()
+ ..()
update_container_name()
update_container_desc()
update_icon()
@@ -143,69 +153,6 @@
reagents.splash(target, reagents.total_volume)
return 1
-/obj/item/chems/proc/self_feed_message(var/mob/user)
- to_chat(user, SPAN_NOTICE("You eat \the [src]"))
-
-/obj/item/chems/proc/other_feed_message_start(var/mob/user, var/mob/target)
- user.visible_message(SPAN_NOTICE("[user] is trying to feed [target] \the [src]!"))
-
-/obj/item/chems/proc/other_feed_message_finish(var/mob/user, var/mob/target)
- user.visible_message(SPAN_NOTICE("[user] has fed [target] \the [src]!"))
-
-/obj/item/chems/proc/feed_sound(var/mob/user)
- return
-
-/obj/item/chems/proc/standard_feed_mob(var/mob/user, var/mob/target) // This goes into attack
- if(!istype(target))
- return 0
-
- if(!reagents || !reagents.total_volume)
- to_chat(user, SPAN_NOTICE("\The [src] is empty."))
- return 1
-
- // only carbons can eat
- if(iscarbon(target))
- if(target == user)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(!H.check_has_mouth())
- to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!")
- return
- var/obj/item/blocked = H.check_mouth_coverage()
- if(blocked)
- to_chat(user, SPAN_NOTICE("\The [blocked] is in the way!"))
- return
-
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //puts a limit on how fast people can eat/drink things
- self_feed_message(user)
- reagents.trans_to_mob(user, issmall(user) ? CEILING(amount_per_transfer_from_this/2) : amount_per_transfer_from_this, CHEM_INGEST)
- feed_sound(user)
- add_trace_DNA(user)
- return 1
-
-
- else
- if(!user.can_force_feed(target, src))
- return
-
- other_feed_message_start(user, target)
-
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- if(!do_mob(user, target))
- return
-
- other_feed_message_finish(user, target)
-
- var/contained = REAGENT_LIST(src)
- admin_attack_log(user, target, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed")
-
- reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_INGEST)
- feed_sound(user)
- add_trace_DNA(target)
- return 1
-
- return 0
-
/obj/item/chems/proc/standard_pour_into(var/mob/user, var/atom/target) // This goes into afterattack and yes, it's atom-level
if(!target.reagents)
return 0
diff --git a/code/modules/reagents/reagent_containers/beaker.dm b/code/modules/reagents/reagent_containers/beaker.dm
index edb8766faeb..5aaca6207b0 100644
--- a/code/modules/reagents/reagent_containers/beaker.dm
+++ b/code/modules/reagents/reagent_containers/beaker.dm
@@ -4,7 +4,7 @@
desc = "A beaker."
icon = 'icons/obj/items/chem/beakers/beaker.dmi'
icon_state = ICON_STATE_WORLD
- center_of_mass = @"{'x':15,'y':10}"
+ center_of_mass = @'{"x":15,"y":10}'
material = /decl/material/solid/glass
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME
material_force_multiplier = 0.25
@@ -69,7 +69,7 @@
name = "large beaker"
desc = "A large beaker."
icon = 'icons/obj/items/chem/beakers/large.dmi'
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
volume = 120
amount_per_transfer_from_this = 10
possible_transfer_amounts = @"[5,10,15,25,30,60,120]"
@@ -80,12 +80,11 @@
name = "mixing bowl"
desc = "A large mixing bowl."
icon = 'icons/obj/items/chem/mixingbowl.dmi'
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
volume = 180
amount_per_transfer_from_this = 10
possible_transfer_amounts = @"[5,10,15,25,30,60,180]"
atom_flags = ATOM_FLAG_OPEN_CONTAINER
- unacidable = 0
material = /decl/material/solid/metal/steel
material_force_multiplier = 0.2
@@ -93,21 +92,21 @@
name = "cryostasis beaker"
desc = "A cryostasis beaker that allows for chemical storage without reactions."
icon = 'icons/obj/items/chem/beakers/stasis.dmi'
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
volume = 60
amount_per_transfer_from_this = 10
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT
+ atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_CHEM_CHANGE
presentation_flags = PRESENTATION_FLAG_NAME
material = /decl/material/solid/metal/steel
material_alteration = MAT_FLAG_ALTERATION_NONE
- origin_tech = "{'materials':2}"
+ origin_tech = @'{"materials":2}'
lid_color = COLOR_PALE_BLUE_GRAY
/obj/item/chems/glass/beaker/advanced
name = "advanced beaker"
desc = "An advanced beaker, powered by experimental technology."
icon = 'icons/obj/items/chem/beakers/advanced.dmi'
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
volume = 300
amount_per_transfer_from_this = 10
possible_transfer_amounts = @"[5,10,15,25,30,60,120,150,200,250,300]"
@@ -118,14 +117,14 @@
/decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE,
/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE
)
- origin_tech = "{'exoticmatter':2,'materials':6}"
+ origin_tech = @'{"exoticmatter":2,"materials":6}'
lid_color = COLOR_CYAN_BLUE
/obj/item/chems/glass/beaker/vial
name = "vial"
desc = "A small glass vial."
icon = 'icons/obj/items/chem/vial.dmi'
- center_of_mass = @"{'x':15,'y':8}"
+ center_of_mass = @'{"x":15,"y":8}'
volume = 30
w_class = ITEM_SIZE_TINY //half the volume of a bottle, half the size
amount_per_transfer_from_this = 10
@@ -141,21 +140,25 @@
name = "insulated beaker"
desc = "A glass beaker surrounded with black insulation."
icon = 'icons/obj/items/chem/beakers/insulated.dmi'
- center_of_mass = @"{'x':15,'y':8}"
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT)
+ center_of_mass = @'{"x":15,"y":8}'
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
possible_transfer_amounts = @"[5,10,15,30]"
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER
+ atom_flags = ATOM_FLAG_OPEN_CONTAINER
presentation_flags = PRESENTATION_FLAG_NAME
temperature_coefficient = 1
material = /decl/material/solid/metal/steel
material_alteration = MAT_FLAG_ALTERATION_NONE
lid_color = COLOR_GRAY40
+// Hack around reagent temp changes.
+/obj/item/chems/glass/beaker/insulated/ProcessAtomTemperature()
+ return PROCESS_KILL
+
/obj/item/chems/glass/beaker/insulated/large
name = "large insulated beaker"
icon = 'icons/obj/items/chem/beakers/insulated_large.dmi'
- center_of_mass = @"{'x':16,'y':10}"
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT)
+ center_of_mass = @'{"x":16,"y":10}'
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
volume = 120
/obj/item/chems/glass/beaker/sulphuric/populate_reagents()
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index eb1ac9ca366..84026bdcafa 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -2,7 +2,7 @@
name = "blood packs box"
desc = "This box contains blood packs."
icon_state = "sterile"
-
+
/obj/item/storage/box/bloodpacks/WillContain()
return list(/obj/item/chems/ivbag = 7)
@@ -25,7 +25,7 @@
. = ..()
/obj/item/chems/ivbag/on_reagent_change()
- update_icon()
+ ..()
if(reagents.total_volume > volume/2)
w_class = ITEM_SIZE_SMALL
else
@@ -38,7 +38,7 @@
add_overlay(overlay_image(icon, "[round(percent,25)]", reagents.get_color()))
add_overlay(attached? "dongle" : "top")
-/obj/item/chems/ivbag/handle_mouse_drop(atom/over, mob/user)
+/obj/item/chems/ivbag/handle_mouse_drop(atom/over, mob/user, params)
if(ismob(loc))
if(attached)
visible_message(SPAN_NOTICE("\The [attached] is taken off \the [src]."))
@@ -48,7 +48,7 @@
START_PROCESSING(SSobj, src)
update_icon()
return TRUE
- . = ..()
+ return ..()
/obj/item/chems/ivbag/Process()
if(!ismob(loc))
@@ -73,36 +73,43 @@
reagents.trans_to_mob(attached, amount_per_transfer_from_this, CHEM_INJECT)
update_icon()
-/obj/item/chems/ivbag/nanoblood/populate_reagents()
- reagents.add_reagent(/decl/material/liquid/nanoblood, reagents.maximum_volume)
-
/obj/item/chems/ivbag/blood
name = "blood pack"
- var/blood_type = null
+ var/blood_fill_type = /decl/material/liquid/blood
-/obj/item/chems/ivbag/blood/Initialize()
- . = ..()
- if(blood_type)
- name = "blood pack ([blood_type])"
+/obj/item/chems/ivbag/blood/proc/get_initial_blood_data()
+ return list(
+ "donor" = null,
+ "blood_DNA" = null,
+ "blood_type" = label_text,
+ "trace_chem" = null
+ )
/obj/item/chems/ivbag/blood/populate_reagents()
- if(blood_type)
- reagents.add_reagent(/decl/material/liquid/blood, reagents.maximum_volume, list("donor" = null, "blood_DNA" = null, "blood_type" = blood_type, "trace_chem" = null))
+ if(blood_fill_type)
+ reagents.add_reagent(blood_fill_type, reagents.maximum_volume, get_initial_blood_data())
+
+/obj/item/chems/ivbag/blood/nanoblood
+ label_text = "synthetic"
+ blood_fill_type = /decl/material/liquid/nanoblood
+
+/obj/item/chems/ivbag/blood/nanoblood/get_initial_blood_data()
+ return null
-/obj/item/chems/ivbag/blood/APlus
- blood_type = "A+"
+/obj/item/chems/ivbag/blood/aplus
+ label_text = "A+"
-/obj/item/chems/ivbag/blood/AMinus
- blood_type = "A-"
+/obj/item/chems/ivbag/blood/aminus
+ label_text = "A-"
-/obj/item/chems/ivbag/blood/BPlus
- blood_type = "B+"
+/obj/item/chems/ivbag/blood/bplus
+ label_text = "B+"
-/obj/item/chems/ivbag/blood/BMinus
- blood_type = "B-"
+/obj/item/chems/ivbag/blood/bminus
+ label_text = "B-"
-/obj/item/chems/ivbag/blood/OPlus
- blood_type = "O+"
+/obj/item/chems/ivbag/blood/oplus
+ label_text = "O+"
-/obj/item/chems/ivbag/blood/OMinus
- blood_type = "O-"
+/obj/item/chems/ivbag/blood/ominus
+ label_text = "O-"
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index d79319ae95e..510ebe26a50 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -1,9 +1,7 @@
/obj/item/chems/borghypo
name = "cyborg hypospray"
desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
- icon = 'icons/obj/syringe.dmi'
- item_state = "hypo"
- icon_state = "borghypo"
+ icon = 'icons/obj/hypospray_borg.dmi'
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm
index 2fefdb0b15e..a62ac52b58f 100644
--- a/code/modules/reagents/reagent_containers/condiment.dm
+++ b/code/modules/reagents/reagent_containers/condiment.dm
@@ -12,23 +12,24 @@
icon_state = "emptycondiment"
atom_flags = ATOM_FLAG_OPEN_CONTAINER
possible_transfer_amounts = @"[1,5,10]"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
randpixel = 6
volume = 50
+ var/obj/item/chems/condiment/is_special_bottle
var/static/list/special_bottles = list(
- /decl/material/liquid/nutriment/ketchup = /obj/item/chems/condiment/ketchup,
+ /decl/material/liquid/nutriment/ketchup = /obj/item/chems/condiment/ketchup,
/decl/material/liquid/nutriment/barbecue = /obj/item/chems/condiment/barbecue,
- /decl/material/liquid/capsaicin = /obj/item/chems/condiment/capsaicin,
- /decl/material/liquid/enzyme = /obj/item/chems/condiment/enzyme,
+ /decl/material/liquid/capsaicin = /obj/item/chems/condiment/capsaicin,
+ /decl/material/liquid/enzyme = /obj/item/chems/condiment/enzyme,
/decl/material/liquid/nutriment/soysauce = /obj/item/chems/condiment/small/soysauce,
- /decl/material/liquid/frostoil = /obj/item/chems/condiment/frostoil,
- /decl/material/solid/sodiumchloride = /obj/item/chems/condiment/small/saltshaker,
- /decl/material/solid/blackpepper = /obj/item/chems/condiment/small/peppermill,
- /decl/material/liquid/nutriment/cornoil = /obj/item/chems/condiment/cornoil,
- /decl/material/liquid/nutriment/sugar = /obj/item/chems/condiment/sugar,
- /decl/material/liquid/nutriment/mayo = /obj/item/chems/condiment/mayo,
- /decl/material/liquid/nutriment/vinegar = /obj/item/chems/condiment/vinegar
- )
+ /decl/material/liquid/frostoil = /obj/item/chems/condiment/frostoil,
+ /decl/material/solid/sodiumchloride = /obj/item/chems/condiment/small/saltshaker,
+ /decl/material/solid/blackpepper = /obj/item/chems/condiment/small/peppermill,
+ /decl/material/liquid/nutriment/cornoil = /obj/item/chems/condiment/cornoil,
+ /decl/material/liquid/nutriment/sugar = /obj/item/chems/condiment/sugar,
+ /decl/material/liquid/nutriment/mayo = /obj/item/chems/condiment/mayo,
+ /decl/material/liquid/nutriment/vinegar = /obj/item/chems/condiment/vinegar
+ )
/obj/item/chems/condiment/attackby(var/obj/item/W, var/mob/user)
if(IS_PEN(W))
@@ -48,13 +49,6 @@
on_reagent_change()
return
-/obj/item/chems/condiment/attack_self(var/mob/user)
- return
-
-/obj/item/chems/condiment/attack(var/mob/M, var/mob/user, var/def_zone)
- if(standard_feed_mob(user, M))
- return
-
/obj/item/chems/condiment/afterattack(var/obj/target, var/mob/user, var/proximity)
if(!proximity)
return
@@ -78,31 +72,31 @@
else
..()
-/obj/item/chems/condiment/feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
-/obj/item/chems/condiment/self_feed_message(var/mob/user)
- to_chat(user, SPAN_NOTICE("You swallow some of contents of \the [src]."))
+/obj/item/chems/condiment/proc/update_center_of_mass()
+ center_of_mass = is_special_bottle ? initial(is_special_bottle.center_of_mass) : initial(center_of_mass)
/obj/item/chems/condiment/on_reagent_change()
- var/reagent = reagents.primary_reagent
- if(reagent in special_bottles)
- var/obj/item/chems/condiment/special_bottle = special_bottles[reagent]
- name = initial(special_bottle.name)
- desc = initial(special_bottle.desc)
- icon_state = initial(special_bottle.icon_state)
- center_of_mass = initial(special_bottle.center_of_mass)
- else
- name = initial(name)
- desc = initial(desc)
- center_of_mass = initial(center_of_mass)
- if(LAZYLEN(reagents.reagent_volumes))
- icon_state = "mixedcondiments"
- else
- icon_state = "emptycondiment"
+ is_special_bottle = reagents?.total_volume && special_bottles[reagents?.primary_reagent]
+ ..()
+ update_center_of_mass()
+
+/obj/item/chems/condiment/update_container_name()
+ name = is_special_bottle ? initial(is_special_bottle.name) : initial(name)
if(label_text)
name = addtext(name," ([label_text])")
+/obj/item/chems/condiment/update_container_desc()
+ desc = is_special_bottle ? initial(is_special_bottle.desc) : initial(desc)
+
+/obj/item/chems/condiment/on_update_icon()
+ ..()
+ if(is_special_bottle)
+ icon_state = initial(is_special_bottle.icon_state)
+ else if(LAZYLEN(reagents?.reagent_volumes))
+ icon_state = "mixedcondiments"
+ else
+ icon_state = "emptycondiment"
+
/obj/item/chems/condiment/enzyme
name = "universal enzyme"
desc = "Used in cooking various dishes."
@@ -180,14 +174,23 @@
amount_per_transfer_from_this = 1
volume = 20
-/obj/item/chems/condiment/small/on_reagent_change()
+/obj/item/chems/condiment/small/update_center_of_mass()
+ return
+
+/obj/item/chems/condiment/small/update_container_name()
+ return
+
+/obj/item/chems/condiment/small/update_container_desc()
+ return
+
+/obj/item/chems/condiment/small/on_update_icon()
return
/obj/item/chems/condiment/small/saltshaker
name = "salt shaker"
desc = "Salt. From space oceans, presumably."
icon_state = "saltshakersmall"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
/obj/item/chems/condiment/small/saltshaker/populate_reagents()
reagents.add_reagent(/decl/material/solid/sodiumchloride, reagents.maximum_volume)
@@ -196,7 +199,7 @@
name = "pepper mill"
desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
/obj/item/chems/condiment/small/peppermill/populate_reagents()
reagents.add_reagent(/decl/material/solid/blackpepper, reagents.maximum_volume)
@@ -205,7 +208,7 @@
name = "sugar"
desc = "Sweetness in a bottle"
icon_state = "sugarsmall"
- center_of_mass = @"{'x':17,'y':9}"
+ center_of_mass = @'{"x":17,"y":9}'
/obj/item/chems/condiment/small/sugar/populate_reagents()
reagents.add_reagent(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume)
@@ -219,9 +222,6 @@
/obj/item/chems/condiment/small/mint/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/syrup/mint, reagents.maximum_volume)
-/obj/item/chems/condiment/small/mint/on_reagent_change()
- return
-
/obj/item/chems/condiment/small/soysauce
name = "soy sauce"
desc = "A dark, salty, savoury flavoring."
@@ -412,7 +412,13 @@
/obj/item/chems/condiment/flour/populate_reagents()
reagents.add_reagent(/decl/material/liquid/nutriment/flour, reagents.maximum_volume)
-/obj/item/chems/condiment/flour/on_reagent_change()
+/obj/item/chems/condiment/flour/update_container_name()
+ return
+
+/obj/item/chems/condiment/flour/update_container_desc()
+ return
+
+/obj/item/chems/condiment/flour/on_update_icon()
return
/obj/item/chems/condiment/large
@@ -432,5 +438,11 @@
/obj/item/chems/condiment/large/salt/populate_reagents()
reagents.add_reagent(/decl/material/solid/sodiumchloride, reagents.maximum_volume)
-/obj/item/chems/condiment/large/salt/on_reagent_change()
+/obj/item/chems/condiment/large/salt/update_container_name()
+ return
+
+/obj/item/chems/condiment/large/salt/update_container_desc()
+ return
+
+/obj/item/chems/condiment/large/salt/on_update_icon()
return
diff --git a/code/modules/reagents/reagent_containers/condiment_edibility.dm b/code/modules/reagents/reagent_containers/condiment_edibility.dm
new file mode 100644
index 00000000000..a5c98156efe
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/condiment_edibility.dm
@@ -0,0 +1,15 @@
+/obj/item/chems/condiment/show_feed_message_start(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You begin trying to eat some of \the [target]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] is trying to feed some of the contents of \the [src] to \the [target]!"))
+
+/obj/item/chems/condiment/show_feed_message_end(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You swallow some of the contents of \the [src]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] feeds some of the contents of \the [src] to \the [target]!"))
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
index bfa2cc737ca..7b6123b4325 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
@@ -26,7 +26,7 @@ var/global/const/DRINK_ICON_NOISY = "noise"
var/filling_overlayed //if filling should go on top of the icon (e.g. opaque cups)
var/static/list/filling_icons_cache = list()
- center_of_mass =@"{'x':16,'y':9}"
+ center_of_mass =@'{"x":16,"y":9}'
amount_per_transfer_from_this = 5
possible_transfer_amounts = @"[5,10,15,30]"
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm
index 3a11eeafd07..5ebb74b12c5 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm
+++ b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm
@@ -50,7 +50,7 @@
var/glass_desc
w_class = ITEM_SIZE_TINY
icon = 'icons/obj/drink_glasses/extras.dmi'
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/item/glass_extra/stick
name = "stick"
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm
index b66c69e011e..30450700147 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm
+++ b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm
@@ -8,7 +8,7 @@
filling_states = @"[20,40,60,80,100]"
volume = 30
possible_transfer_amounts = @"[5,10,15,30]"
- rim_pos = @"{'y':23,'x_left':13,'x_right':20}"
+ rim_pos = @'{"y":23,"x_left":13,"x_right":20}'
/obj/item/chems/drinks/glass2/rocks
name = "rocks glass"
@@ -20,7 +20,7 @@
filling_states = @"[25,50,75,100]"
volume = 20
possible_transfer_amounts = @"[5,10,20]"
- rim_pos = @"{'y':21,'x_left':10,'x_right':23}"
+ rim_pos = @'{"y":21,"x_left":10,"x_right":23}'
/obj/item/chems/drinks/glass2/shake
name = "sherry glass"
@@ -32,7 +32,7 @@
filling_states = @"[25,50,75,100]"
volume = 30
possible_transfer_amounts = @"[5,10,15,30]"
- rim_pos = @"{'y':25,'x_left':13,'x_right':21}"
+ rim_pos = @'{"y":25,"x_left":13,"x_right":21}'
/obj/item/chems/drinks/glass2/cocktail
name = "cocktail glass"
@@ -44,7 +44,7 @@
filling_states = @"[33,66,100]"
volume = 15
possible_transfer_amounts = @"[5,10,15]"
- rim_pos = @"{'y':22,'x_left':13,'x_right':21}"
+ rim_pos = @'{"y":22,"x_left":13,"x_right":21}'
/obj/item/chems/drinks/glass2/shot
name = "shot glass"
@@ -57,7 +57,7 @@
volume = 5
material = /decl/material/solid/glass
possible_transfer_amounts = @"[1,2,5]"
- rim_pos = @"{'y':17,'x_left':13,'x_right':21}"
+ rim_pos = @'{"y":17,"x_left":13,"x_right":21}'
/obj/item/chems/drinks/glass2/pint
name = "pint glass"
@@ -69,7 +69,7 @@
volume = 60
material = /decl/material/solid/glass
possible_transfer_amounts = @"[5,10,15,30,60]"
- rim_pos = @"{'y':25,'x_left':12,'x_right':21}"
+ rim_pos = @'{"y":25,"x_left":12,"x_right":21}'
/obj/item/chems/drinks/glass2/mug
name = "glass mug"
@@ -81,7 +81,7 @@
filling_states = @"[25,50,75,100]"
volume = 40
possible_transfer_amounts = @"[5,10,20,40]"
- rim_pos = @"{'y':22,'x_left':12,'x_right':20}"
+ rim_pos = @'{"y":22,"x_left":12,"x_right":20}'
/obj/item/chems/drinks/glass2/wine
name = "wine glass"
@@ -93,7 +93,7 @@
filling_states = @"[20,40,60,80,100]"
volume = 25
possible_transfer_amounts = @"[5,10,15,25]"
- rim_pos = @"{'y':25,'x_left':12,'x_right':21}"
+ rim_pos = @'{"y":25,"x_left":12,"x_right":21}'
/obj/item/chems/drinks/glass2/flute
name = "flute glass"
@@ -105,7 +105,7 @@
volume = 25
filling_states = @"[20,40,60,80,100]"
possible_transfer_amounts = @"[5,10,15,25]"
- rim_pos = @"{'y':24,'x_left':13,'x_right':19}"
+ rim_pos = @'{"y":24,"x_left":13,"x_right":19}'
/obj/item/chems/drinks/glass2/carafe
name = "pitcher"
@@ -118,8 +118,8 @@
volume = 120
material = /decl/material/solid/glass
possible_transfer_amounts = @"[5,10,15,30,60,120]"
- rim_pos = @"{'y':26,'x_left':12,'x_right':21}"
- center_of_mass = @"{'x':16,'y':7}"
+ rim_pos = @'{"y":26,"x_left":12,"x_right":21}'
+ center_of_mass = @'{"x":16,"y":7}'
/obj/item/chems/drinks/glass2/coffeecup
name = "coffee cup"
@@ -128,12 +128,12 @@
icon_state = "coffeecup"
item_state = "coffee"
volume = 30
- center_of_mass = @"{'x':15,'y':13}"
+ center_of_mass = @'{"x":15,"y":13}'
filling_states = @"[40,80,100]"
base_name = "cup"
base_icon = "coffeecup"
overlay_base_icon = "coffeecup" // so that subtypes work properly
- rim_pos = @"{'y':22,'x_left':12,'x_right':20}"
+ rim_pos = @'{"y":22,"x_left":12,"x_right":20}'
filling_overlayed = TRUE
/obj/item/chems/drinks/glass2/coffeecup/black
@@ -217,7 +217,7 @@
icon = 'icons/obj/drink_glasses/coffecup_tall.dmi'
icon_state = "coffeecup_tall"
volume = 60
- center_of_mass = @"{'x':15,'y':19}"
+ center_of_mass = @'{"x":15,"y":19}'
filling_states = @"[50,70,90,100]"
base_name = "tall cup"
base_icon = "coffeecup_tall"
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm b/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm
index e180625b9ea..9bd2c837869 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm
+++ b/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm
@@ -7,7 +7,7 @@
base_icon = "fitness-cup"
icon = 'icons/obj/drink_glasses/fitness.dmi'
volume = 100
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
filling_states = @"[10,20,30,40,50,60,70,80,90,100]"
possible_transfer_amounts = @"[5,10,15,25]"
rim_pos = null // no fruit slices
@@ -25,6 +25,18 @@
/obj/item/chems/drinks/glass2/fitnessflask/proteinshake
name = "protein shake"
+// This exists to let the name auto-set properly.
+/decl/cocktail/proteinshake
+ name = "protein shake"
+ description = "A revolting slurry of protein and water, fortified with iron."
+ hidden_from_codex = TRUE
+ ratios = list(
+ /decl/material/liquid/nutriment = 2,
+ /decl/material/liquid/nutriment/protein = 1,
+ /decl/material/liquid/water = 3,
+ /decl/material/solid/metal/iron
+ )
+
/obj/item/chems/drinks/glass2/fitnessflask/proteinshake/populate_reagents()
reagents.add_reagent(/decl/material/liquid/nutriment, 30)
reagents.add_reagent(/decl/material/solid/metal/iron, 10)
diff --git a/code/modules/reagents/reagent_containers/drinks.dm b/code/modules/reagents/reagent_containers/drinks.dm
index a1b24257e0a..f837578a959 100644
--- a/code/modules/reagents/reagent_containers/drinks.dm
+++ b/code/modules/reagents/reagent_containers/drinks.dm
@@ -12,6 +12,7 @@
amount_per_transfer_from_this = 5
randpixel = 6
volume = 50
+ abstract_type = /obj/item/chems/drinks
var/filling_states // List of percentages full that have icons
var/base_icon = null // Base icon name for fill states
@@ -31,52 +32,33 @@
attack(user, user)
/obj/item/chems/drinks/proc/open(mob/user)
- playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
- to_chat(user, SPAN_NOTICE("You open \the [src] with an audible pop!"))
- atom_flags |= ATOM_FLAG_OPEN_CONTAINER
-
-/obj/item/chems/drinks/attack(mob/M, mob/user, def_zone)
- if(force && !(item_flags & ITEM_FLAG_NO_BLUDGEON) && user.a_intent == I_HURT)
- return ..()
- if(standard_feed_mob(user, M))
- return
- return 0
+ if(!ATOM_IS_OPEN_CONTAINER(src))
+ playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
+ to_chat(user, SPAN_NOTICE("You open \the [src] with an audible pop!"))
+ atom_flags |= ATOM_FLAG_OPEN_CONTAINER
+ return TRUE
+ return FALSE
-/obj/item/chems/drinks/afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
+/obj/item/chems/drinks/proc/do_open_check(mob/user)
+ if(!ATOM_IS_OPEN_CONTAINER(src))
+ to_chat(user, SPAN_NOTICE("You need to open \the [src]!"))
+ return FALSE
+ return TRUE
+/obj/item/chems/drinks/afterattack(obj/target, mob/user, proximity)
+ if(!proximity)
+ return
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
return
return ..()
-/obj/item/chems/drinks/standard_feed_mob(var/mob/user, var/mob/target)
- if(!ATOM_IS_OPEN_CONTAINER(src))
- to_chat(user, "You need to open \the [src]!")
- return 1
- return ..()
-
/obj/item/chems/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
- if(!ATOM_IS_OPEN_CONTAINER(src))
- to_chat(user, "You need to open \the [src]!")
- return 1
- return ..()
+ return do_open_check(user) && ..()
/obj/item/chems/drinks/standard_pour_into(var/mob/user, var/atom/target)
- if(!ATOM_IS_OPEN_CONTAINER(src))
- to_chat(user, "You need to open \the [src]!")
- return 1
- return ..()
-
-/obj/item/chems/drinks/self_feed_message(var/mob/user)
- to_chat(user, "You swallow a gulp from \the [src].")
- if(user.has_personal_goal(/datum/goal/achievement/specific_object/drink))
- for(var/R in reagents.reagent_volumes)
- user.update_personal_goal(/datum/goal/achievement/specific_object/drink, R)
-
-/obj/item/chems/drinks/feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
+ return do_open_check(user) && ..()
/obj/item/chems/drinks/examine(mob/user, distance)
. = ..()
@@ -137,7 +119,7 @@
desc = "It's milk. White and nutritious goodness!"
icon_state = "milk"
item_state = "carton"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
/obj/item/chems/drinks/milk/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/milk, reagents.maximum_volume)
@@ -147,7 +129,7 @@
desc = "It's soy milk. White and nutritious goodness!"
icon_state = "soymilk"
item_state = "carton"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
/obj/item/chems/drinks/soymilk/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/milk/soymilk, reagents.maximum_volume)
@@ -171,7 +153,7 @@
name = "\improper Robust Coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
icon_state = "coffee"
- center_of_mass = @"{'x':15,'y':10}"
+ center_of_mass = @'{"x":15,"y":10}'
/obj/item/chems/drinks/coffee/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/coffee, reagents.maximum_volume)
@@ -180,7 +162,7 @@
name = "cup of ice"
desc = "Careful, cold ice, do not chew."
icon_state = "coffee"
- center_of_mass = @"{'x':15,'y':10}"
+ center_of_mass = @'{"x":15,"y":10}'
/obj/item/chems/drinks/ice/populate_reagents()
reagents.add_reagent(/decl/material/solid/ice, reagents.maximum_volume)
@@ -190,7 +172,7 @@
desc = "A tall plastic cup of creamy hot chocolate."
icon_state = "coffee"
item_state = "coffee"
- center_of_mass = @"{'x':15,'y':13}"
+ center_of_mass = @'{"x":15,"y":13}'
/obj/item/chems/drinks/h_chocolate/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/hot_coco, reagents.maximum_volume)
@@ -200,7 +182,7 @@
gender = PLURAL
desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
icon_state = "ramen"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
/obj/item/chems/drinks/dry_ramen/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/dry_ramen, reagents.maximum_volume)
@@ -211,7 +193,7 @@
icon_state = "water_cup_e"
possible_transfer_amounts = null
volume = 10
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
/obj/item/chems/drinks/sillycup/on_update_icon()
. = ..()
@@ -233,7 +215,7 @@
item_state = "teapot"
amount_per_transfer_from_this = 10
volume = 120
- center_of_mass = @"{'x':17,'y':7}"
+ center_of_mass = @'{"x":17,"y":7}'
material = /decl/material/solid/stone/ceramic
/obj/item/chems/drinks/pitcher
@@ -242,7 +224,7 @@
icon_state = "pitcher"
volume = 120
amount_per_transfer_from_this = 10
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
filling_states = @"[15,30,50,70,85,100]"
base_icon = "pitcher"
material = /decl/material/solid/metal/stainlesssteel
@@ -252,7 +234,7 @@
desc = "A metal flask belonging to the captain."
icon_state = "flask"
volume = 60
- center_of_mass = @"{'x':17,'y':7}"
+ center_of_mass = @'{"x":17,"y":7}'
/obj/item/chems/drinks/flask/shiny
name = "shiny flask"
@@ -269,21 +251,21 @@
desc = "A metal flask with a leather band and golden badge belonging to the detective."
icon_state = "detflask"
volume = 60
- center_of_mass = @"{'x':17,'y':8}"
+ center_of_mass = @'{"x":17,"y":8}'
/obj/item/chems/drinks/flask/barflask
name = "flask"
desc = "For those who can't be bothered to hang out at the bar to drink."
icon_state = "barflask"
volume = 60
- center_of_mass = @"{'x':17,'y':7}"
+ center_of_mass = @'{"x":17,"y":7}'
/obj/item/chems/drinks/flask/vacuumflask
name = "vacuum flask"
desc = "Keeping your drinks at the perfect temperature since 1892."
icon_state = "vacuumflask"
volume = 60
- center_of_mass = @"{'x':15,'y':4}"
+ center_of_mass = @'{"x":15,"y":4}'
//tea and tea accessories
/obj/item/chems/drinks/tea
@@ -291,7 +273,7 @@
desc = "A tall plastic cup full of the concept and ideal of tea."
icon_state = "coffee"
item_state = "coffee"
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
filling_states = @"[100]"
base_name = "cup"
base_icon = "cup"
diff --git a/code/modules/reagents/reagent_containers/drinks/bottle.dm b/code/modules/reagents/reagent_containers/drinks/bottle.dm
index ae1d63217b1..24e64b4340c 100644
--- a/code/modules/reagents/reagent_containers/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/drinks/bottle.dm
@@ -8,21 +8,19 @@
volume = 100
item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
force = 5
-
+ material = /decl/material/solid/glass
drop_sound = 'sound/foley/bottledrop1.ogg'
pickup_sound = 'sound/foley/bottlepickup1.ogg'
+ abstract_type = /obj/item/chems/drinks/bottle
var/smash_duration = 5 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
- var/isGlass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
var/obj/item/chems/glass/rag/rag = null
var/rag_underlay = "rag"
var/stop_spin_bottle = FALSE //Gotta stop the rotation.
/obj/item/chems/drinks/bottle/Initialize()
. = ..()
- if(isGlass)
- unacidable = TRUE
- else
+ if(material?.type != /decl/material/solid/glass)
verbs -= .verb/spin_bottle
/obj/item/chems/drinks/bottle/Destroy()
@@ -31,18 +29,21 @@
rag = null
return ..()
-/obj/item/chems/drinks/bottle/on_reagent_change()
+/obj/item/chems/drinks/bottle/update_container_name()
+ return
+
+/obj/item/chems/drinks/bottle/update_container_desc()
return
//when thrown on impact, bottles smash and spill their contents
/obj/item/chems/drinks/bottle/throw_impact(atom/hit_atom, var/datum/thrownthing/TT)
..()
- if(isGlass && TT.thrower && TT.thrower.a_intent != I_HELP)
+ if(material?.is_brittle() && TT.thrower && TT.thrower.a_intent != I_HELP)
if(TT.speed > throw_speed || smash_check(TT.dist_travelled)) //not as reliable as smashing directly
smash(loc, hit_atom)
/obj/item/chems/drinks/bottle/proc/smash_check(var/distance)
- if(!isGlass)
+ if(!material?.is_brittle())
return 0
if(rag && rag.on_fire) // Molotovs should be somewhat reliable, they're a pain to make.
return TRUE
@@ -97,13 +98,14 @@
return B
/obj/item/chems/drinks/bottle/attackby(obj/item/W, mob/user)
- if(!rag && istype(W, /obj/item/chems/glass/rag))
- insert_rag(W, user)
- return
- if(rag && W.isflamesource())
+ if(!rag)
+ if(istype(W, /obj/item/chems/glass/rag))
+ insert_rag(W, user)
+ return TRUE
+ else if(W.isflamesource())
rag.attackby(W, user)
- return
- ..()
+ return TRUE
+ return ..()
/obj/item/chems/drinks/bottle/attack_self(mob/user)
if(rag)
@@ -112,7 +114,7 @@
..()
/obj/item/chems/drinks/bottle/proc/insert_rag(obj/item/chems/glass/rag/R, mob/user)
- if(!isGlass || rag) return
+ if(!material?.type != /decl/material/solid/glass || rag) return
if(user.try_unequip(R))
to_chat(user, SPAN_NOTICE("You stuff [R] into [src]."))
@@ -247,7 +249,7 @@
name = "Griffeater Gin"
desc = "A bottle of high quality gin, produced in the New London Space Station."
icon_state = "ginbottle"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/gin/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/gin, reagents.maximum_volume)
@@ -256,7 +258,7 @@
name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
icon_state = "whiskeybottle"
- center_of_mass = @"{'x':16,'y':3}"
+ center_of_mass = @'{"x":16,"y":3}'
/obj/item/chems/drinks/bottle/whiskey/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/whiskey, reagents.maximum_volume)
@@ -265,7 +267,7 @@
name = "aged whiskey"
desc = "This rich, smooth, hideously expensive beverage was aged for decades."
icon_state = "whiskeybottle2"
- center_of_mass = @"{'x':16,'y':3}"
+ center_of_mass = @'{"x":16,"y":3}'
/obj/item/chems/drinks/bottle/agedwhiskey/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/aged_whiskey, reagents.maximum_volume)
@@ -274,7 +276,7 @@
name = "Tunguska Triple Distilled"
desc = "Aah, vodka. Prime choice of drink AND fuel by Indies around the galaxy."
icon_state = "vodkabottle"
- center_of_mass = @"{'x':17,'y':3}"
+ center_of_mass = @'{"x":17,"y":3}'
/obj/item/chems/drinks/bottle/vodka/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume)
@@ -283,7 +285,7 @@
name = "Caccavo Guaranteed Quality tequila"
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
icon_state = "tequilabottle"
- center_of_mass = @"{'x':16,'y':3}"
+ center_of_mass = @'{"x":16,"y":3}'
/obj/item/chems/drinks/bottle/tequila/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume)
@@ -292,7 +294,7 @@
name = "Wrapp Artiste Patron"
desc = "Silver laced tequila, served in space night clubs across the galaxy."
icon_state = "patronbottle"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/patron/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume - 5)
@@ -302,7 +304,7 @@
name = "Captain Pete's Cuban Spiced Rum"
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
icon_state = "rumbottle"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
/obj/item/chems/drinks/bottle/rum/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/rum, reagents.maximum_volume)
@@ -311,7 +313,7 @@
name = "Flask of Holy Water"
desc = "A flask of the chaplain's holy water."
icon_state = "holyflask"
- center_of_mass = @"{'x':17,'y':10}"
+ center_of_mass = @'{"x":17,"y":10}'
/obj/item/chems/drinks/bottle/holywater/populate_reagents()
reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume, list("holy" = TRUE))
@@ -320,7 +322,7 @@
name = "Goldeneye Vermouth"
desc = "Sweet, sweet dryness~"
icon_state = "vermouthbottle"
- center_of_mass = @"{'x':17,'y':3}"
+ center_of_mass = @'{"x":17,"y":3}'
/obj/item/chems/drinks/bottle/vermouth/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/vermouth, reagents.maximum_volume)
@@ -329,7 +331,7 @@
name = "Robert Robust's Coffee Liqueur"
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK!"
icon_state = "kahluabottle"
- center_of_mass = @"{'x':17,'y':3}"
+ center_of_mass = @'{"x":17,"y":3}'
/obj/item/chems/drinks/bottle/kahlua/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/coffee, reagents.maximum_volume)
@@ -338,7 +340,7 @@
name = "College Girl Goldschlager"
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
icon_state = "goldschlagerbottle"
- center_of_mass = @"{'x':15,'y':3}"
+ center_of_mass = @'{"x":15,"y":3}'
/obj/item/chems/drinks/bottle/goldschlager/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume - 5)
@@ -348,7 +350,7 @@
name = "Chateau De Baton Premium Cognac"
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
icon_state = "cognacbottle"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/cognac/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/cognac, reagents.maximum_volume)
@@ -357,7 +359,7 @@
name = "Doublebeard Bearded Special Wine"
desc = "A faint aura of unease and asspainery surrounds the bottle."
icon_state = "winebottle"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/wine/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/wine, reagents.maximum_volume)
@@ -366,7 +368,7 @@
name = "Jailbreaker Verte"
desc = "One sip of this and you just know you're gonna have a good time."
icon_state = "absinthebottle"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/absinthe/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/absinthe, reagents.maximum_volume)
@@ -375,7 +377,7 @@
name = "Emeraldine Melon Liquor"
desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
icon_state = "alco-green" //Placeholder.
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/melonliquor/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/melonliquor, reagents.maximum_volume)
@@ -384,7 +386,7 @@
name = "Miss Blue Curacao"
desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
icon_state = "alco-blue" //Placeholder.
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/bluecuracao/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/bluecuracao, reagents.maximum_volume)
@@ -393,7 +395,7 @@
name = "Liqueur d'Herbe"
desc = "A bottle of the seventh-finest herbal liquor sold under a generic name in the galaxy. The back label has a load of guff about the monks who traditionally made this particular variety."
icon_state = "herbal"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/herbal/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/herbal, reagents.maximum_volume)
@@ -402,7 +404,7 @@
name = "Briar Rose Grenadine Syrup"
desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
icon_state = "grenadinebottle"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/grenadine/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/grenadine, reagents.maximum_volume)
@@ -411,7 +413,7 @@
name = "\improper Space Cola"
desc = "Cola. in space."
icon_state = "colabottle"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/cola/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/cola, reagents.maximum_volume)
@@ -420,7 +422,7 @@
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up_bottle"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/space_up/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/lemonade, reagents.maximum_volume)
@@ -429,7 +431,7 @@
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind_bottle"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/space_mountain_wind/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/citrussoda, reagents.maximum_volume)
@@ -438,7 +440,7 @@
name = "Warlock's Velvet"
desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
icon_state = "pwinebottle"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/pwine/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/pwine, reagents.maximum_volume)
@@ -447,7 +449,7 @@
name = "Takeo Sadow's Combined Sake"
desc = "A bottle of the highest-grade sake allowed for import."
icon_state = "sake"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/sake/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/sake, reagents.maximum_volume)
@@ -456,7 +458,7 @@
name = "Murcelano Vinyard's Premium Champagne"
desc = "The regal drink of celebrities and royalty."
icon_state = "champagne"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/champagne/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/champagne, reagents.maximum_volume)
@@ -465,7 +467,7 @@
name = "Kaisermeister Deluxe"
desc = "Jagermeister. This drink just demands a party."
icon_state = "herbal"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/bottle/jagermeister/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/jagermeister, reagents.maximum_volume)
@@ -475,7 +477,7 @@
name = "Four Stripes Quadruple Distilled"
desc = "Premium distilled vodka imported directly from the Gilgamesh Colonial Confederation."
icon_state = "premiumvodka"
- center_of_mass = @"{'x':17,'y':3}"
+ center_of_mass = @'{"x":17,"y":3}'
/obj/item/chems/drinks/bottle/premiumvodka/populate_reagents()
var/namepick = pick("Four Stripes","Gilgamesh","Novaya Zemlya","Indie","STS-35")
@@ -487,7 +489,7 @@
name = "Uve De Blanc"
desc = "You feel pretentious just looking at it."
icon_state = "premiumwine"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
/obj/item/chems/drinks/bottle/premiumwine/populate_reagents()
var/namepick = pick("Calumont","Sciacchemont","Recioto","Torcalota")
@@ -503,8 +505,11 @@
desc = "Full of vitamins and deliciousness!"
icon_state = "orangejuice"
item_state = "carton"
- center_of_mass = @"{'x':16,'y':7}"
- isGlass = 0
+ center_of_mass = @'{"x":16,"y":7}'
+ material = /decl/material/solid/organic/cardboard
+ matter = list(
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
+ )
drop_sound = 'sound/foley/drop1.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
@@ -516,8 +521,11 @@
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
icon_state = "cream"
item_state = "carton"
- center_of_mass = @"{'x':16,'y':8}"
- isGlass = 0
+ center_of_mass = @'{"x":16,"y":8}'
+ material = /decl/material/solid/organic/cardboard
+ matter = list(
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
+ )
drop_sound = 'sound/foley/drop1.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
@@ -529,8 +537,11 @@
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
icon_state = "tomatojuice"
item_state = "carton"
- center_of_mass = @"{'x':16,'y':8}"
- isGlass = 0
+ center_of_mass = @'{"x":16,"y":8}'
+ material = /decl/material/solid/organic/cardboard
+ matter = list(
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
+ )
drop_sound = 'sound/foley/drop1.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
@@ -542,8 +553,11 @@
desc = "Sweet-sour goodness."
icon_state = "limejuice"
item_state = "carton"
- center_of_mass = @"{'x':16,'y':8}"
- isGlass = 0
+ center_of_mass = @'{"x":16,"y":8}'
+ material = /decl/material/solid/organic/cardboard
+ matter = list(
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
+ )
drop_sound = 'sound/foley/drop1.ogg'
pickup_sound = 'sound/foley/paperpickup2.ogg'
@@ -561,7 +575,7 @@
name = "space beer"
desc = "Contains only water, malt and hops."
icon_state = "beer"
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
/obj/item/chems/drinks/bottle/small/beer/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/beer, reagents.maximum_volume)
@@ -571,7 +585,7 @@
desc = "A true dorf's drink of choice."
icon_state = "alebottle"
item_state = "beer"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/bottle/small/ale/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/ale, reagents.maximum_volume)
@@ -580,7 +594,7 @@
name = "Ginger Beer"
desc = "A delicious non-alcoholic beverage enjoyed across Sol space."
icon_state = "gingerbeer"
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
/obj/item/chems/drinks/bottle/small/gingerbeer/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/gingerbeer, reagents.maximum_volume)
diff --git a/code/modules/reagents/reagent_containers/drinks/cans.dm b/code/modules/reagents/reagent_containers/drinks/cans.dm
index db4eb1bc2e5..882c46962fd 100644
--- a/code/modules/reagents/reagent_containers/drinks/cans.dm
+++ b/code/modules/reagents/reagent_containers/drinks/cans.dm
@@ -4,7 +4,10 @@
atom_flags = 0 //starts closed
material = /decl/material/solid/metal/aluminium
-/obj/item/chems/drinks/cans/on_reagent_change()
+/obj/item/chems/drinks/cans/update_container_name()
+ return
+
+/obj/item/chems/drinks/cans/update_container_desc()
return
//DRINKS
@@ -13,7 +16,7 @@
name = "\improper Space Cola"
desc = "Cola. in space."
icon_state = "cola"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/cola/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/cola, reagents.maximum_volume)
@@ -22,8 +25,8 @@
name = "bottled water"
desc = "Pure drinking water, imported from the Martian poles."
icon_state = "waterbottle"
- center_of_mass = @"{'x':15,'y':8}"
- material = /decl/material/solid/plastic
+ center_of_mass = @'{"x":15,"y":8}'
+ material = /decl/material/solid/organic/plastic
/obj/item/chems/drinks/cans/waterbottle/populate_reagents()
reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume)
@@ -37,7 +40,7 @@
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/space_mountain_wind/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/citrussoda, reagents.maximum_volume)
@@ -46,7 +49,7 @@
name = "\improper Thirteen Loko"
desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly."
icon_state = "thirteen_loko"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
/obj/item/chems/drinks/cans/thirteenloko/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/thirteenloko, reagents.maximum_volume)
@@ -55,7 +58,7 @@
name = "\improper Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
icon_state = "dr_gibb"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/dr_gibb/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/cherrycola, reagents.maximum_volume)
@@ -64,7 +67,7 @@
name = "\improper Star-Kist"
desc = "Can you taste a bit of tuna...?"
icon_state = "starkist"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/starkist/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/orangecola, reagents.maximum_volume)
@@ -73,7 +76,7 @@
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/space_up/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/lemonade, reagents.maximum_volume)
@@ -82,7 +85,7 @@
name = "\improper Lemon-Lime"
desc = "You wanted ORANGE. It gave you Lemon Lime."
icon_state = "lemon-lime"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/lemon_lime/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/lemon_lime, reagents.maximum_volume)
@@ -91,7 +94,7 @@
name = "\improper Vrisk Serket Iced Tea"
desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?"
icon_state = "ice_tea_can"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/iced_tea/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/tea/black, reagents.maximum_volume - 5)
@@ -101,7 +104,7 @@
name = "\improper Grapel Juice"
desc = "500 pages of rules of how to appropriately enter into a combat with this juice!"
icon_state = "purple_can"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/grape_juice/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/juice/grape, reagents.maximum_volume)
@@ -110,7 +113,7 @@
name = "\improper T-Borg's Tonic Water"
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
icon_state = "tonic"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/tonic/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/tonic, reagents.maximum_volume)
@@ -119,7 +122,7 @@
name = "soda water"
desc = "A can of soda water. Still water's more refreshing cousin."
icon_state = "sodawater"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/sodawater/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/sodawater, reagents.maximum_volume)
@@ -128,7 +131,7 @@
name = "Beast Energy"
desc = "100% pure energy, and 150% pure liver disease."
icon_state = "beastenergy"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
/obj/item/chems/drinks/cans/beastenergy/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/beastenergy, reagents.maximum_volume)
@@ -139,7 +142,7 @@
name = "\improper Red Army Twist!"
desc = "A taste of what keeps our glorious nation running! Served as Space Commissariat Stahlin prefers it! Luke warm."
icon_state = "syndi_cola_x"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/syndicolax/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/juice/potato, reagents.maximum_volume)
@@ -148,7 +151,7 @@
name = "\improper Arstotzka Bru"
desc = "Just what any bureaucrat needs to get through the day. Keep stamping those papers!"
icon_state = "art_bru"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/artbru/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/juice/turnip, reagents.maximum_volume)
@@ -157,7 +160,7 @@
name = "\improper TerraCola"
desc = "A can of the only soft drink state approved for the benefit of the people. Served at room temperature regardless of ambient temperatures thanks to innovative Terran insulation technology."
icon_state = "syndi_cola"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/syndicola/populate_reagents()
reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume - 5)
@@ -166,7 +169,7 @@
/obj/item/chems/drinks/glass2/square/boda
name = "boda"
desc = "A tall glass of refreshing Boda!"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/glass2/square/boda/populate_reagents()
reagents.add_reagent(/decl/material/liquid/drink/sodawater, reagents.maximum_volume)
@@ -174,7 +177,7 @@
/obj/item/chems/drinks/glass2/square/bodaplus
name = "tri kopeiki sirop boda"
desc = "A tall glass of even more refreshing Boda! Now with Sok!"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/glass2/square/bodaplus/populate_reagents()
var/reag = pick(list(
@@ -198,7 +201,7 @@
name = "\improper Space Beer"
desc = "Now in a can!"
icon_state = "beercan"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/speer/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/beer/good, reagents.maximum_volume)
@@ -207,7 +210,7 @@
name = "\improper Magm-Ale"
desc = "Now in a can!"
icon_state = "alecan"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
/obj/item/chems/drinks/cans/ale/populate_reagents()
reagents.add_reagent(/decl/material/liquid/ethanol/ale, reagents.maximum_volume)
diff --git a/code/modules/reagents/reagent_containers/drinks/champagne.dm b/code/modules/reagents/reagent_containers/drinks/champagne.dm
index a0cffe9359c..48c8e30cb8c 100644
--- a/code/modules/reagents/reagent_containers/drinks/champagne.dm
+++ b/code/modules/reagents/reagent_containers/drinks/champagne.dm
@@ -23,7 +23,7 @@
desc = "Sparkling wine made from exquisite grape varieties by the method of secondary fermentation in a bottle. Bubbling."
icon = 'icons/obj/food.dmi'
icon_state = "champagne"
- center_of_mass = @"{'x':12,'y':5}"
+ center_of_mass = @'{"x":12,"y":5}'
atom_flags = 0 //starts closed
var/opening
diff --git a/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm b/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm
index 68655dc9ca6..c2517e3b519 100644
--- a/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm
+++ b/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm
@@ -5,7 +5,7 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = @"[5,10,15,25,30,60]" //Professional bartender should be able to transfer as much as needed
volume = 120
- center_of_mass = @"{'x':17,'y':10}"
+ center_of_mass = @'{"x":17,"y":10}'
atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT
/obj/item/chems/drinks/shaker/attack_self(mob/user)
@@ -29,7 +29,7 @@
if(reagents && reagents.total_volume)
atom_flags &= ~ATOM_FLAG_NO_REACT
HANDLE_REACTIONS(reagents)
- addtimer(CALLBACK(src, .proc/stop_react), SSmaterials.wait)
+ addtimer(CALLBACK(src, PROC_REF(stop_react)), SSmaterials.wait)
/obj/item/chems/drinks/shaker/proc/stop_react()
atom_flags |= ATOM_FLAG_NO_REACT
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/drinks/jar.dm b/code/modules/reagents/reagent_containers/drinks/jar.dm
index b66730f7709..aedbbade98d 100644
--- a/code/modules/reagents/reagent_containers/drinks/jar.dm
+++ b/code/modules/reagents/reagent_containers/drinks/jar.dm
@@ -7,17 +7,25 @@
desc = "A jar. You're not sure what it's supposed to hold."
icon_state = "jar"
item_state = "beaker"
- center_of_mass = @"{'x':15,'y':8}"
- unacidable = 1
+ center_of_mass = @'{"x":15,"y":8}'
+ material = /decl/material/solid/glass
drop_sound = 'sound/foley/bottledrop1.ogg'
pickup_sound = 'sound/foley/bottlepickup1.ogg'
-/obj/item/chems/drinks/jar/on_reagent_change()
- if(LAZYLEN(reagents.reagent_volumes))
- icon_state ="jar_what"
+/obj/item/chems/drinks/jar/update_container_name()
+ if(LAZYLEN(reagents?.reagent_volumes))
SetName("jar of something")
- desc = "You can't really tell what this is."
else
- icon_state = initial(icon_state)
SetName(initial(name))
+
+/obj/item/chems/drinks/jar/update_container_desc()
+ if(LAZYLEN(reagents?.reagent_volumes))
+ desc = "You can't really tell what this is."
+ else
desc = "A jar. You're not sure what it's supposed to hold."
+
+/obj/item/chems/drinks/jar/on_update_icon()
+ if(LAZYLEN(reagents?.reagent_volumes))
+ icon_state = "jar_what"
+ else
+ icon_state = initial(icon_state)
diff --git a/code/modules/reagents/reagent_containers/drinks/juicebox.dm b/code/modules/reagents/reagent_containers/drinks/juicebox.dm
index 1187aec2b44..5fc23e36c85 100644
--- a/code/modules/reagents/reagent_containers/drinks/juicebox.dm
+++ b/code/modules/reagents/reagent_containers/drinks/juicebox.dm
@@ -6,8 +6,10 @@
volume = 30
amount_per_transfer_from_this = 5
atom_flags = 0
- material = /decl/material/solid/cardboard
-
+ material = /decl/material/solid/organic/cardboard
+ matter = list(
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
+ )
color = "#ff0000"
var/primary_color = "#ff0000"
var/secondary_color = null
diff --git a/code/modules/reagents/reagent_containers/drinks_edibility.dm b/code/modules/reagents/reagent_containers/drinks_edibility.dm
new file mode 100644
index 00000000000..7e7969d9acb
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/drinks_edibility.dm
@@ -0,0 +1,15 @@
+/obj/item/chems/drinks/handle_eaten_by_mob(var/mob/user, var/mob/target)
+ if(!do_open_check(user))
+ return EATEN_UNABLE
+ . = ..()
+ if(. == EATEN_SUCCESS)
+ target = target || user
+ if(target?.has_personal_goal(/datum/goal/achievement/specific_object/drink))
+ for(var/R in reagents.reagent_volumes)
+ target.update_personal_goal(/datum/goal/achievement/specific_object/drink, R)
+
+/obj/item/chems/drinks/show_feed_message_end(var/mob/user, var/mob/target)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You swallow a gulp from \the [src]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] feeds \the [src] to \the [target]!"))
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 89f6abead24..3c522e538f1 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -46,7 +46,7 @@
if(safe_thing && (safe_thing.body_parts_covered & SLOT_EYES))
trans = reagents.splash(safe_thing, amount_per_transfer_from_this, max_spill=30)
user.visible_message(
- SPAN_DANGER("\The [user] tries to squirt something into [target]'s eyes, but fails!"),
+ SPAN_DANGER("\The [user] tries to squirt something into [target]'s eyes, but fails!"),
SPAN_DANGER("You squirt [trans] unit\s at \the [target]'s eyes, but fail!")
)
return
@@ -78,9 +78,11 @@
to_chat(user, SPAN_NOTICE("You fill the dropper with [trans] units of the solution."))
+/obj/item/chems/dropper/update_container_name()
+ return
-/obj/item/chems/dropper/on_reagent_change()
- update_icon()
+/obj/item/chems/dropper/update_container_desc()
+ return
/obj/item/chems/dropper/on_update_icon()
. = ..()
diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm
index 9a339e245b7..844312f6ea9 100644
--- a/code/modules/reagents/reagent_containers/food.dm
+++ b/code/modules/reagents/reagent_containers/food.dm
@@ -15,10 +15,13 @@
icon_state = null
randpixel = 6
atom_flags = ATOM_FLAG_OPEN_CONTAINER
+ item_flags = null
+ material = /decl/material/liquid/nutriment
possible_transfer_amounts = null
volume = 50
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
w_class = ITEM_SIZE_SMALL
+ abstract_type = /obj/item/chems/food
var/cooked_food = FALSE // Indicates the food should give a positive stress effect on eating. This is set to true if the food is created by a recipe.
var/bitesize = 1
@@ -36,6 +39,9 @@
var/list/attack_products //Items you can craft together. Like bomb making, but with food and less screwdrivers.
// Uses format list(ingredient = result_type). The ingredient can be a typepath or a kitchen_tag string (used for mobs or plants)
+/obj/item/chems/food/can_be_injected_by(var/atom/injector)
+ return TRUE
+
/obj/item/chems/food/standard_pour_into(mob/user, atom/target)
return FALSE
@@ -49,71 +55,12 @@
.=..()
amount_per_transfer_from_this = bitesize
- //Placeholder for effect that trigger on eating that aren't tied to reagents.
-/obj/item/chems/food/proc/On_Consume(var/mob/M)
- if(isliving(M) && cooked_food)
- var/mob/living/eater = M
- eater.add_stressor(/datum/stressor/ate_cooked_food, 15 MINUTES)
- if(!reagents.total_volume)
- M.visible_message("[M] finishes eating \the [src].","You finish eating \the [src].")
- M.drop_item()
- M.update_personal_goal(/datum/goal/achievement/specific_object/food, type)
- if(trash)
- if(ispath(trash,/obj/item))
- var/obj/item/TrashItem = new trash(get_turf(M))
- M.put_in_hands(TrashItem)
- else if(istype(trash,/obj/item))
- M.put_in_hands(trash)
- qdel(src)
- return
-
/obj/item/chems/food/attack_self(mob/user)
attack(user, user)
/obj/item/chems/food/dragged_onto(var/mob/user)
attack(user, user)
-/obj/item/chems/food/self_feed_message(mob/user)
- if(!iscarbon(user))
- return ..()
- var/mob/living/carbon/C = user
- var/fullness = C.get_fullness()
- if (fullness <= 50)
- to_chat(C, SPAN_WARNING("You hungrily chew out a piece of [src] and gobble it!"))
- if (fullness > 50 && fullness <= 150)
- to_chat(C, SPAN_NOTICE("You hungrily begin to eat [src]."))
- if (fullness > 150 && fullness <= 350)
- to_chat(C, SPAN_NOTICE("You take a bite of [src]."))
- if (fullness > 350 && fullness <= 550)
- to_chat(C, SPAN_NOTICE("You unwillingly chew a bit of [src]."))
-
-/obj/item/chems/food/feed_sound(mob/user)
- if(eat_sound)
- playsound(user, pick(eat_sound), rand(10, 50), 1)
-
-/obj/item/chems/food/standard_feed_mob(mob/user, mob/target)
- . = ..()
- if(.)
- bitecount++
- On_Consume(target)
-
-/obj/item/chems/food/attack(mob/M, mob/user, def_zone)
- if(!reagents || !reagents.total_volume)
- to_chat(user, "None of [src] left!")
- qdel(src)
- return 0
- if(iscarbon(M))
- //TODO: replace with standard_feed_mob() call.
- var/mob/living/carbon/C = M
- var/fullness = C.get_fullness()
- if (fullness > 550)
- var/message = C == user ? "You cannot force any more of [src] to go down your throat." : "[user] cannot force anymore of [src] down [M]'s throat."
- to_chat(user, SPAN_WARNING(message))
- return 0
- if(standard_feed_mob(user, M))
- return 1
- return 0
-
/obj/item/chems/food/examine(mob/user, distance)
. = ..()
if(distance > 1)
@@ -247,19 +194,6 @@
something.dropInto(loc)
. = ..()
-/obj/item/chems/food/attack_animal(var/mob/user)
- if(!isanimal(user) && !isalien(user))
- return
- user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].")
- bitecount++
- if(reagents && user.reagents)
- reagents.trans_to_mob(user, bitesize, CHEM_INGEST)
- spawn(5)
- if(!src && !user.client)
- user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
- qdel(src)
- On_Consume(user)
-
/obj/item/chems/food/proc/update_food_appearance_from(var/obj/item/donor, var/food_color, var/copy_donor_appearance = TRUE)
filling_color = food_color
if(copy_donor_appearance)
diff --git a/code/modules/reagents/reagent_containers/food/baked_goods.dm b/code/modules/reagents/reagent_containers/food/baked_goods.dm
index af486d26432..86e146a19b3 100644
--- a/code/modules/reagents/reagent_containers/food/baked_goods.dm
+++ b/code/modules/reagents/reagent_containers/food/baked_goods.dm
@@ -7,7 +7,7 @@
desc = "A delicious and spongy little cake."
icon_state = "muffin"
filling_color = "#e0cf9b"
- center_of_mass = @"{'x':17,'y':4}"
+ center_of_mass = @'{"x":17,"y":4}'
nutriment_desc = list("sweetness" = 3, "muffin" = 3)
nutriment_amt = 6
bitesize = 2
@@ -18,7 +18,7 @@
icon_state = "pie"
trash = /obj/item/trash/plate
filling_color = "#fbffb8"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("pie" = 3, "cream" = 2)
nutriment_amt = 4
bitesize = 3
@@ -38,7 +38,7 @@
desc = "No black birds, this is a good sign."
icon_state = "berryclafoutis"
trash = /obj/item/trash/plate
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("sweetness" = 2, "pie" = 3)
nutriment_amt = 4
bitesize = 3
@@ -53,7 +53,7 @@
icon_state = "waffles"
trash = /obj/item/trash/waffles
filling_color = "#e6deb5"
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
nutriment_desc = list("waffle" = 8)
nutriment_amt = 8
bitesize = 2
@@ -64,7 +64,7 @@
icon_state = "rofflewaffles"
trash = /obj/item/trash/waffles
filling_color = "#ff00f7"
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
nutriment_desc = list("waffle" = 7, "sweetness" = 1)
nutriment_amt = 8
bitesize = 4
@@ -78,7 +78,7 @@
desc = "Pancakes without blueberries, still delicious."
icon_state = "pancakes"
trash = /obj/item/trash/plate
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
nutriment_desc = list("pancake" = 8)
nutriment_amt = 8
bitesize = 2
@@ -88,7 +88,7 @@
desc = "Pancakes with blueberries, delicious."
icon_state = "pancakes"
trash = /obj/item/trash/plate
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
nutriment_desc = list("pancake" = 8)
nutriment_amt = 8
bitesize = 2
@@ -99,7 +99,7 @@
icon_state = "eggplantparm"
trash = /obj/item/trash/plate
filling_color = "#4d2f5e"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("cheese" = 3, "eggplant" = 3)
nutriment_amt = 6
bitesize = 2
@@ -110,7 +110,7 @@
icon_state = "soylent_green"
trash = /obj/item/trash/waffles
filling_color = "#b8e6b5"
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
bitesize = 2
/obj/item/chems/food/soylentgreen/populate_reagents()
@@ -123,7 +123,7 @@
icon_state = "soylent_yellow"
trash = /obj/item/trash/waffles
filling_color = "#e6fa61"
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
nutriment_desc = list("some sort of protein" = 10)//seasoned vERY well.
nutriment_amt = 10
bitesize = 2
@@ -134,7 +134,7 @@
desc = "An old barber recipe, very delicious!"
trash = /obj/item/trash/plate
filling_color = "#948051"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
bitesize = 2
/obj/item/chems/food/meatpie/populate_reagents()
@@ -147,7 +147,7 @@
desc = "A delicious tofu pie."
trash = /obj/item/trash/plate
filling_color = "#fffee0"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("tofu" = 2, "pie" = 8)
nutriment_amt = 10
bitesize = 2
@@ -157,7 +157,7 @@
desc = "Sweet and tasty poison pie."
icon_state = "amanita_pie"
filling_color = "#ffcccc"
- center_of_mass = @"{'x':17,'y':9}"
+ center_of_mass = @'{"x":17,"y":9}'
nutriment_desc = list("sweetness" = 3, "mushroom" = 3, "pie" = 2)
nutriment_amt = 5
bitesize = 3
@@ -172,7 +172,7 @@
desc = "I bet you love stuff made out of plump helmets!"
icon_state = "plump_pie"
filling_color = "#b8279b"
- center_of_mass = @"{'x':17,'y':9}"
+ center_of_mass = @'{"x":17,"y":9}'
nutriment_desc = list("heartiness" = 2, "mushroom" = 3, "pie" = 3)
nutriment_amt = 8
bitesize = 2
@@ -190,7 +190,7 @@
desc = "A delicious meatpie. Probably heretical."
trash = /obj/item/trash/plate
filling_color = "#43de18"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
bitesize = 2
/obj/item/chems/food/xemeatpie/populate_reagents()
@@ -203,7 +203,7 @@
icon_state = "poppypretzel"
bitesize = 2
filling_color = "#916e36"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("poppy seeds" = 2, "pretzel" = 3)
nutriment_amt = 5
bitesize = 2
@@ -213,7 +213,7 @@
desc = "A pie containing sweet sweet love... or apple."
icon_state = "applepie"
filling_color = "#e0edc5"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("sweetness" = 2, "apple" = 2, "pie" = 2)
nutriment_amt = 4
bitesize = 3
@@ -223,7 +223,7 @@
desc = "Taste so good, make a grown man cry."
icon_state = "cherrypie"
filling_color = "#ff525a"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("sweetness" = 2, "cherry" = 2, "pie" = 2)
nutriment_amt = 4
bitesize = 3
@@ -233,7 +233,7 @@
desc = "A true prophecy in each cookie!"
icon_state = "fortune_cookie"
filling_color = "#e8e79e"
- center_of_mass = @"{'x':15,'y':14}"
+ center_of_mass = @'{"x":15,"y":14}'
nutriment_desc = list("fortune cookie" = 2)
nutriment_amt = 3
bitesize = 2
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/bread.dm b/code/modules/reagents/reagent_containers/food/bread.dm
index e5c4f56f02f..0c2bb401969 100644
--- a/code/modules/reagents/reagent_containers/food/bread.dm
+++ b/code/modules/reagents/reagent_containers/food/bread.dm
@@ -8,7 +8,7 @@
icon_state = "sandwich"
trash = /obj/item/trash/plate
filling_color = "#d9be29"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
nutriment_desc = list("bread" = 3, "cheese" = 3)
nutriment_amt = 3
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -24,7 +24,7 @@
icon_state = "toastedsandwich"
trash = /obj/item/trash/plate
filling_color = "#d9be29"
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
nutriment_desc = list("toasted bread" = 3, "cheese" = 3)
nutriment_amt = 3
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -55,7 +55,7 @@
desc = "Good for pretend sword fights."
icon_state = "baguette"
filling_color = "#e3d796"
- center_of_mass = @"{'x':18,'y':12}"
+ center_of_mass = @'{"x":18,"y":12}'
nutriment_desc = list("long bread" = 6)
nutriment_amt = 6
bitesize = 3
@@ -72,7 +72,7 @@
icon_state = "jellytoast"
trash = /obj/item/trash/plate
filling_color = "#b572ab"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
nutriment_desc = list("toasted bread" = 2)
nutriment_amt = 1
bitesize = 3
@@ -88,7 +88,7 @@
icon_state = "jellysandwich"
trash = /obj/item/trash/plate
filling_color = "#9e3a78"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
nutriment_desc = list("bread" = 2)
nutriment_amt = 2
bitesize = 3
@@ -103,7 +103,7 @@
desc = "It is very bitter and winy."
icon_state = "twobread"
filling_color = "#dbcc9a"
- center_of_mass = @"{'x':15,'y':12}"
+ center_of_mass = @'{"x":15,"y":12}'
nutriment_desc = list("sourness" = 2, "bread" = 2)
nutriment_amt = 2
bitesize = 3
@@ -114,7 +114,7 @@
desc = "Is such a thing even possible?"
icon_state = "threebread"
filling_color = "#dbcc9a"
- center_of_mass = @"{'x':15,'y':12}"
+ center_of_mass = @'{"x":15,"y":12}'
nutriment_desc = list("sourness" = 2, "bread" = 3)
nutriment_amt = 3
bitesize = 4
@@ -126,7 +126,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "flatbread"
bitesize = 2
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
nutriment_desc = list("bread" = 3)
nutriment_amt = 3
nutriment_type = /decl/material/liquid/nutriment/bread
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/burgers.dm b/code/modules/reagents/reagent_containers/food/burgers.dm
index 66ea44517c4..448e056b26c 100644
--- a/code/modules/reagents/reagent_containers/food/burgers.dm
+++ b/code/modules/reagents/reagent_containers/food/burgers.dm
@@ -7,9 +7,9 @@
desc = "A strange looking burger. It looks almost sentient."
icon_state = "brainburger"
filling_color = "#f2b6ea"
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
bitesize = 2
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/brainburger/populate_reagents()
. = ..()
@@ -21,21 +21,21 @@
desc = "Spooky! It doesn't look very filling."
icon_state = "ghostburger"
filling_color = "#fff2ff"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("buns" = 3, "spookiness" = 3)
nutriment_amt = 2
bitesize = 2
/obj/item/chems/food/human
filling_color = "#d63c3c"
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
var/hname = ""
/obj/item/chems/food/human/burger
name = "-burger"
desc = "A bloody burger."
icon_state = "hburger"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
bitesize = 2
/obj/item/chems/food/human/burger/populate_reagents()
@@ -46,7 +46,7 @@
name = "cheeseburger"
desc = "The cheese adds a good flavor."
icon_state = "cheeseburger"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("cheese" = 2, "bun" = 2)
nutriment_amt = 2
@@ -60,7 +60,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "burger"
filling_color = "#d63c3c"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("bun" = 2)
nutriment_amt = 3
bitesize = 2
@@ -75,7 +75,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "hamburger"
filling_color = "#d63c3c"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("bun" = 2)
nutriment_amt = 3
bitesize = 2
@@ -89,7 +89,7 @@
desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp."
icon_state = "fishburger"
filling_color = "#ffdefe"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
bitesize = 3
/obj/item/chems/food/fishburger/populate_reagents()
@@ -101,7 +101,7 @@
desc = "What.. is that meat?"
icon_state = "tofuburger"
filling_color = "#fffee0"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("bun" = 2, "pseudo-soy meat" = 3)
nutriment_amt = 6
bitesize = 2
@@ -111,7 +111,7 @@
desc = "The lettuce is the only organic component. Beep."
icon_state = "roburger"
filling_color = COLOR_GRAY80
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("bun" = 2, "metal" = 3)
nutriment_amt = 2
bitesize = 2
@@ -127,9 +127,9 @@
icon_state = "roburger"
filling_color = COLOR_GRAY80
volume = 100
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
bitesize = 0.1
-
+
/obj/item/chems/food/roburgerbig/populate_reagents()
. = ..()
reagents.add_reagent(/decl/material/liquid/nanitefluid, reagents.maximum_volume)
@@ -139,7 +139,7 @@
desc = "Smells caustic. Tastes like heresy."
icon_state = "xburger"
filling_color = "#43de18"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
bitesize = 2
/obj/item/chems/food/xenoburger/populate_reagents()
@@ -151,7 +151,7 @@
desc = "This tastes funny..."
icon_state = "clownburger"
filling_color = "#ff00ff"
- center_of_mass = @"{'x':17,'y':12}"
+ center_of_mass = @'{"x":17,"y":12}'
nutriment_desc = list("bun" = 2, "clown shoe" = 3)
nutriment_amt = 6
bitesize = 2
@@ -161,7 +161,7 @@
desc = "Its taste defies language."
icon_state = "mimeburger"
filling_color = "#ffffff"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("bun" = 2, "mime paint" = 3)
nutriment_amt = 6
bitesize = 2
@@ -180,7 +180,7 @@
desc = "Forget the Luna Burger! THIS is the future!"
icon_state = "bigbiteburger"
filling_color = "#e3d681"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("buns" = 4)
nutriment_amt = 4
bitesize = 3
@@ -194,7 +194,7 @@
desc = "Culinary delight..?"
icon_state = "jellyburger"
filling_color = "#b572ab"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("buns" = 5)
nutriment_amt = 5
bitesize = 2
@@ -208,7 +208,7 @@
desc = "This is a mountain of a burger. FOOD!"
icon_state = "superbiteburger"
filling_color = "#cca26a"
- center_of_mass = @"{'x':16,'y':3}"
+ center_of_mass = @'{"x":16,"y":3}'
nutriment_desc = list("buns" = 25)
nutriment_amt = 25
bitesize = 10
@@ -224,9 +224,9 @@
desc = "Unrelated to dogs, maybe."
icon_state = "hotdog"
bitesize = 2
- center_of_mass = @"{'x':16,'y':17}"
+ center_of_mass = @'{"x":16,"y":17}'
nutriment_type = /decl/material/liquid/nutriment/bread
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/hotdog/populate_reagents()
. = ..()
@@ -237,8 +237,8 @@
desc = "Going literal."
icon_state = "hotcorgi"
bitesize = 6
- center_of_mass = @"{'x':16,'y':17}"
- material = /decl/material/solid/meat
+ center_of_mass = @'{"x":16,"y":17}'
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/classichotdog/populate_reagents()
. = ..()
diff --git a/code/modules/reagents/reagent_containers/food/can_edibility.dm b/code/modules/reagents/reagent_containers/food/can_edibility.dm
new file mode 100644
index 00000000000..4a1742cb5b4
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/food/can_edibility.dm
@@ -0,0 +1,5 @@
+/obj/item/chems/food/can/handle_eaten_by_mob(mob/user, mob/target)
+ if(!ATOM_IS_OPEN_CONTAINER(src))
+ to_chat(user, SPAN_NOTICE("You need to open \the [src] first!"))
+ return EATEN_UNABLE
+ return ..()
diff --git a/code/modules/reagents/reagent_containers/food/canned.dm b/code/modules/reagents/reagent_containers/food/canned.dm
index 2bb9e7693f2..6dca1acb589 100644
--- a/code/modules/reagents/reagent_containers/food/canned.dm
+++ b/code/modules/reagents/reagent_containers/food/canned.dm
@@ -6,7 +6,7 @@
/obj/item/chems/food/can
name = "empty can"
icon = 'icons/obj/food_canned.dmi'
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
atom_flags = 0
bitesize = 3
@@ -28,22 +28,6 @@
atom_flags |= ATOM_FLAG_OPEN_CONTAINER
sealed = FALSE
-/obj/item/chems/food/can/attack(mob/M, mob/user, def_zone)
- if(force && !(obj_flags & ITEM_FLAG_NO_BLUDGEON) && user.a_intent == I_HURT)
- return ..()
-
- if(standard_feed_mob(user, M))
- update_icon(src)
- return TRUE
-
- return FALSE
-
-/obj/item/chems/food/can/standard_feed_mob(mob/user, mob/target)
- if(!ATOM_IS_OPEN_CONTAINER(src))
- to_chat(user, SPAN_NOTICE("You need to open \the [src] first!"))
- return TRUE
- return ..()
-
/obj/item/chems/food/can/attack_self(mob/user)
if(!ATOM_IS_OPEN_CONTAINER(src) && !open_complexity)
to_chat(user, SPAN_NOTICE("You unseal \the [src] with a crack of metal."))
@@ -112,9 +96,6 @@
. = ..()
reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 12)
-/obj/item/chems/food/can/tomato/feed_sound(var/mob/user)
- playsound(user, 'sound/items/drink.ogg', rand(10, 50), 1)
-
/obj/item/chems/food/can/spinach
name = "spinach"
icon_state = "spinach"
diff --git a/code/modules/reagents/reagent_containers/food/dough.dm b/code/modules/reagents/reagent_containers/food/dough.dm
index aae9bd46371..088197f79f1 100644
--- a/code/modules/reagents/reagent_containers/food/dough.dm
+++ b/code/modules/reagents/reagent_containers/food/dough.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "dough"
bitesize = 2
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("dough" = 3)
nutriment_amt = 3
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -25,7 +25,7 @@
icon_state = "flat dough"
slice_path = /obj/item/chems/food/doughslice
slices_num = 3
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
/obj/item/chems/food/sliceable/flatdough/populate_reagents()
. = ..()
@@ -40,7 +40,7 @@
slice_path = /obj/item/chems/food/spagetti
slices_num = 1
bitesize = 2
- center_of_mass = @"{'x':17,'y':19}"
+ center_of_mass = @'{"x":17,"y":19}'
nutriment_desc = list("dough" = 1)
nutriment_amt = 1
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -51,7 +51,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "bun"
bitesize = 2
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
nutriment_desc = list("bun" = 4)
nutriment_amt = 4
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -76,7 +76,7 @@
desc = "A small bread monkey fashioned from two burger buns."
icon_state = "bunbun"
bitesize = 2
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
nutriment_desc = list("bun" = 8)
nutriment_amt = 8
nutriment_type = /decl/material/liquid/nutriment/bread
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/eggs.dm b/code/modules/reagents/reagent_containers/food/eggs.dm
index 9ab1eccd49a..5b005bf426c 100644
--- a/code/modules/reagents/reagent_containers/food/eggs.dm
+++ b/code/modules/reagents/reagent_containers/food/eggs.dm
@@ -8,7 +8,7 @@
icon_state = "egg"
filling_color = "#fdffd1"
volume = 10
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_amt = 3
nutriment_type = /decl/material/liquid/nutriment/protein/egg
@@ -79,7 +79,7 @@
desc = "A fried egg, with a touch of salt and pepper."
icon_state = "friedegg"
filling_color = "#ffdf78"
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
bitesize = 1
/obj/item/chems/food/friedegg/populate_reagents()
@@ -104,7 +104,7 @@
icon_state = "omelette"
trash = /obj/item/trash/plate
filling_color = "#fff9a8"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
bitesize = 1
/obj/item/chems/food/omelette/populate_reagents()
@@ -117,9 +117,9 @@
icon_state = "chawanmushi"
trash = /obj/item/trash/snack_bowl
filling_color = "#f0f2e4"
- center_of_mass = @"{'x':17,'y':10}"
+ center_of_mass = @'{"x":17,"y":10}'
bitesize = 1
-
+
/obj/item/chems/food/chawanmushi/populate_reagents()
. = ..()
reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/fish.dm b/code/modules/reagents/reagent_containers/food/fish.dm
index 8483e49630b..507228f9e50 100644
--- a/code/modules/reagents/reagent_containers/food/fish.dm
+++ b/code/modules/reagents/reagent_containers/food/fish.dm
@@ -3,7 +3,7 @@
desc = "A fillet of fish."
icon_state = "fishfillet"
filling_color = "#ffdefe"
- center_of_mass = @"{'x':17,'y':13}"
+ center_of_mass = @'{"x":17,"y":13}'
bitesize = 6
nutriment_amt = 6
nutriment_type = /decl/material/liquid/nutriment/protein
@@ -69,7 +69,7 @@
icon = 'icons/obj/molluscs.dmi'
icon_state = "mollusc_shell"
desc = "The cracked shell of an unfortunate mollusc."
- material = /decl/material/solid/bone
+ material = /decl/material/solid/organic/bone
/obj/item/trash/mollusc_shell/clam
name = "clamshell"
@@ -87,7 +87,7 @@
w_class = ITEM_SIZE_TINY
material = /decl/material/liquid/nutriment/slime_meat
matter = list(
- /decl/material/solid/bone/fish = MATTER_AMOUNT_SECONDARY,
+ /decl/material/solid/organic/bone/fish = MATTER_AMOUNT_SECONDARY,
)
var/meat_type = /obj/item/chems/food/fish/mollusc
var/shell_type = /obj/item/trash/mollusc_shell
diff --git a/code/modules/reagents/reagent_containers/food/fried.dm b/code/modules/reagents/reagent_containers/food/fried.dm
index 2aca1e326e8..1ae9afafba3 100644
--- a/code/modules/reagents/reagent_containers/food/fried.dm
+++ b/code/modules/reagents/reagent_containers/food/fried.dm
@@ -10,7 +10,7 @@
icon_state = "onionrings"
trash = /obj/item/trash/plate
filling_color = "#eddd00"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("fried onions" = 5)
nutriment_amt = 5
bitesize = 2
@@ -21,7 +21,7 @@
icon_state = "fries"
trash = /obj/item/trash/plate
filling_color = "#eddd00"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("fresh fries" = 4)
nutriment_amt = 4
bitesize = 2
@@ -32,7 +32,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "rawsticks"
bitesize = 2
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
nutriment_desc = list("raw potato" = 3)
nutriment_amt = 3
@@ -42,7 +42,7 @@
icon_state = "cheesyfries"
trash = /obj/item/trash/plate
filling_color = "#eddd00"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("fresh fries" = 3, "cheese" = 3)
nutriment_amt = 4
bitesize = 2
diff --git a/code/modules/reagents/reagent_containers/food/junkfood.dm b/code/modules/reagents/reagent_containers/food/junkfood.dm
index b1f3c03833b..35987ff7079 100644
--- a/code/modules/reagents/reagent_containers/food/junkfood.dm
+++ b/code/modules/reagents/reagent_containers/food/junkfood.dm
@@ -4,9 +4,9 @@
desc = "For when you desperately want meat and you don't care what kind. Has the same texture as old leather boots."
trash = /obj/item/trash/sosjerky
filling_color = "#631212"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
bitesize = 2
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/sosjerky/populate_reagents()
. = ..()
@@ -18,7 +18,7 @@
desc = "Pouring water on these will not turn them back into grapes, unfortunately."
trash = /obj/item/trash/raisins
filling_color = "#343834"
- center_of_mass = @"{'x':15,'y':4}"
+ center_of_mass = @'{"x":15,"y":4}'
nutriment_desc = list("raisins" = 6)
nutriment_amt = 6
@@ -27,7 +27,7 @@
icon_state = "space_twinkie"
desc = "So full of preservatives, it's guaranteed to survive longer then you will."
filling_color = "#ffe591"
- center_of_mass = @"{'x':15,'y':11}"
+ center_of_mass = @'{"x":15,"y":11}'
bitesize = 2
/obj/item/chems/food/spacetwinkie/populate_reagents()
@@ -40,7 +40,7 @@
desc = "Bite sized cheese flavoured snacks that will leave your fingers coated in cheese dust."
trash = /obj/item/trash/cheesie
filling_color = "#ffa305"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("cheese" = 5, "chips" = 2)
nutriment_amt = 4
bitesize = 2
@@ -50,7 +50,7 @@
icon_state = "syndi_cakes"
desc = "Made using extremely unethical labour, ingredients and marketing methods."
filling_color = "#ff5d05"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("sweetness" = 3, "cake" = 1)
nutriment_amt = 4
trash = /obj/item/trash/syndi_cakes
@@ -68,7 +68,7 @@
desc = "Pistachios. There is absolutely nothing remarkable about these."
trash = /obj/item/trash/pistachios
filling_color = "#825d26"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("nuts" = 1)
nutriment_amt = 3
bitesize = 0.5
@@ -79,7 +79,7 @@
desc = "A favorite among birds."
trash = /obj/item/trash/semki
filling_color = "#68645d"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("sunflower seeds" = 1)
nutriment_amt = 6
bitesize = 0.5
@@ -90,7 +90,7 @@
desc = "Space cepholapod tentacles, carefully removed from the squid then dried into strips of delicious rubbery goodness!"
trash = /obj/item/trash/squid
filling_color = "#c0a9d7"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("fish" = 1, "salt" = 1)
nutriment_amt = 2
bitesize = 1
@@ -105,7 +105,7 @@
desc = "Fried bread cubes. Good in salad but I guess you can just eat them as is."
trash = /obj/item/trash/croutons
filling_color = "#c6b17f"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("bread" = 1, "salt" = 1)
nutriment_amt = 3
bitesize = 1
@@ -117,7 +117,7 @@
desc = "Pig fat. Salted. Just as good as it sounds."
trash = /obj/item/trash/salo
filling_color = "#e0bcbc"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("fat" = 1, "salt" = 1)
nutriment_amt = 2
bitesize = 2
@@ -132,7 +132,7 @@
desc = "Dried salted beer snack fish."
trash = /obj/item/trash/driedfish
filling_color = "#c8a5bb"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("fish" = 1, "salt" = 1)
nutriment_amt = 2
bitesize = 1
@@ -147,7 +147,7 @@
icon_state = "liquidfood"
trash = /obj/item/trash/liquidfood
filling_color = "#a8a8a8"
- center_of_mass = @"{'x':16,'y':15}"
+ center_of_mass = @'{"x":16,"y":15}'
nutriment_desc = list("chalk" = 6)
nutriment_amt = 20
bitesize = 4
@@ -161,9 +161,9 @@
desc = "Fried, salted lean meat compressed into a cube. Not very appetizing."
icon_state = "meatcube"
filling_color = "#7a3d11"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
bitesize = 3
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/meatcube/populate_reagents()
. = ..()
@@ -175,7 +175,7 @@
icon_state = "tastybread"
trash = /obj/item/trash/tastybread
filling_color = "#a66829"
- center_of_mass = @"{'x':17,'y':16}"
+ center_of_mass = @'{"x":17,"y":16}'
nutriment_desc = list("bread" = 2, "sweetness" = 3)
nutriment_amt = 6
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -187,7 +187,7 @@
icon_state = "candy"
trash = /obj/item/trash/candy
filling_color = "#7d5f46"
- center_of_mass = @"{'x':15,'y':15}"
+ center_of_mass = @'{"x":15,"y":15}'
nutriment_amt = 1
nutriment_desc = list("candy" = 1)
bitesize = 2
@@ -226,7 +226,7 @@
desc = "It's a handful of candy corn. Not actually candied corn."
icon_state = "candy_corn"
filling_color = "#fffcb0"
- center_of_mass = @"{'x':14,'y':10}"
+ center_of_mass = @'{"x":14,"y":10}'
nutriment_amt = 4
nutriment_desc = list("candy corn" = 4)
bitesize = 2
@@ -242,7 +242,7 @@
icon_state = "chips"
trash = /obj/item/trash/chips
filling_color = "#e8c31e"
- center_of_mass = @"{'x':15,'y':15}"
+ center_of_mass = @'{"x":15,"y":15}'
nutriment_amt = 3
nutriment_desc = list("salt" = 1, "chips" = 2)
bitesize = 1
@@ -253,7 +253,7 @@
desc = "COOKIE!!!"
icon_state = "cookie"
filling_color = "#dbc94f"
- center_of_mass = @"{'x':17,'y':18}"
+ center_of_mass = @'{"x":17,"y":18}'
nutriment_amt = 5
nutriment_desc = list("sweetness" = 3, "cookie" = 2)
w_class = ITEM_SIZE_TINY
@@ -265,7 +265,7 @@
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7d5f46"
- center_of_mass = @"{'x':15,'y':15}"
+ center_of_mass = @'{"x":15,"y":15}'
nutriment_amt = 2
nutriment_desc = list("chocolate" = 5)
bitesize = 2
@@ -280,7 +280,7 @@
desc = "Such sweet, fattening food."
icon_state = "chocolateegg"
filling_color = "#7d5f46"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_amt = 3
nutriment_desc = list("chocolate" = 5)
bitesize = 2
@@ -295,7 +295,7 @@
desc = "Goes great with Robust Coffee."
icon_state = "donut1"
filling_color = "#d9c386"
- center_of_mass = @"{'x':19,'y':16}"
+ center_of_mass = @'{"x":19,"y":16}'
nutriment_desc = list("sweetness", "donut")
nutriment_amt = 3
bitesize = 3
@@ -342,7 +342,7 @@
desc = "You jelly?"
icon_state = "jdonut1"
filling_color = "#ed1169"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_amt = 3
bitesize = 5
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -359,7 +359,7 @@
desc = "Now with 20% less lawsuit enabling regolith!"
trash = /obj/item/trash/cakewrap
filling_color = "#ffffff"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("sweet" = 4, "vanilla" = 1)
nutriment_amt = 5
bitesize = 2
@@ -387,7 +387,7 @@
desc = "Contains over 9000% of your daily recommended intake of salt."
trash = /obj/item/trash/tidegobs
filling_color = "#2556b0"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("salt" = 4, "ocean" = 1, "seagull" = 1)
nutriment_amt = 5
bitesize = 2
@@ -398,7 +398,7 @@
desc = "A day ration of salt, styrofoam and possibly sawdust."
trash = /obj/item/trash/saturno
filling_color = "#dca319"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("salt" = 4, "peanut" = 2, "wood?" = 1)
nutriment_amt = 5
bitesize = 2
@@ -409,7 +409,7 @@
desc = "Some kind of gel, maybe?"
trash = /obj/item/trash/jupiter
filling_color = "#dc1919"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("jelly?" = 5)
nutriment_amt = 5
bitesize = 2
@@ -420,7 +420,7 @@
desc = "Baseless tasteless nutrient rods to get you through the day. Now even less rash inducing!"
trash = /obj/item/trash/pluto
filling_color = "#ffffff"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("chalk" = 4, "sadness" = 1)
nutriment_amt = 5
bitesize = 2
@@ -431,7 +431,7 @@
desc = "A steaming self-heated bowl of sweet eggs and taters!"
trash = /obj/item/trash/mars
filling_color = "#d2c63f"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("eggs" = 4, "potato" = 4, "mustard" = 2)
nutriment_amt = 8
bitesize = 2
@@ -442,7 +442,7 @@
desc = "Hot takes on hot cakes, a timeless classic now finally fit for human consumption!"
trash = /obj/item/trash/venus
filling_color = "#d2c63f"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("heat" = 4, "burning" = 1)
nutriment_amt = 5
bitesize = 2
@@ -458,7 +458,7 @@
desc = "Pop rocks. The new formula guarantees fewer shrapnel induced oral injuries."
trash = /obj/item/trash/oort
filling_color = "#3f7dd2"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("fizz" = 3, "sweet?" = 1, "shrapnel" = 1)
nutriment_amt = 5
bitesize = 2
@@ -537,7 +537,7 @@
return
has_been_heated = 1
user.visible_message("[user] crushes \the [src] package.", "You crush \the [src] package and feel a comfortable heat build up.")
- addtimer(CALLBACK(src, .proc/heat, weakref(user)), 20 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(heat), weakref(user)), 20 SECONDS)
/obj/item/chems/food/donkpocket/sinpocket/heat(weakref/message_to)
..()
@@ -551,7 +551,7 @@
desc = "The food of choice for the seasoned traitor."
icon_state = "donkpocket"
filling_color = "#dedeab"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("heartiness" = 1, "dough" = 2)
nutriment_amt = 2
var/warm = 0
@@ -569,7 +569,7 @@
reagents.add_reagent(reagent, heated_reagents[reagent])
bitesize = 6
SetName("warm donk-pocket")
- addtimer(CALLBACK(src, .proc/cool), 7 MINUTES)
+ addtimer(CALLBACK(src, PROC_REF(cool)), 7 MINUTES)
/obj/item/chems/food/donkpocket/proc/cool()
if(!warm)
diff --git a/code/modules/reagents/reagent_containers/food/meat/cubes.dm b/code/modules/reagents/reagent_containers/food/meat/cubes.dm
index dddf72cf7c9..7394c2c4411 100644
--- a/code/modules/reagents/reagent_containers/food/meat/cubes.dm
+++ b/code/modules/reagents/reagent_containers/food/meat/cubes.dm
@@ -3,16 +3,19 @@
/obj/item/chems/food/monkeycube
name = "monkey cube"
desc = "Just add water!"
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER
+ atom_flags = ATOM_FLAG_OPEN_CONTAINER
icon_state = "monkeycube"
bitesize = 12
filling_color = "#adac7f"
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
var/growing = FALSE
var/monkey_type = /mob/living/carbon/human/monkey
var/wrapper_type
+/obj/item/chems/food/monkeycube/get_food_consumption_method(mob/eater)
+ return EATING_METHOD_EAT
+
/obj/item/chems/food/monkeycube/populate_reagents()
. = ..()
reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10)
@@ -26,12 +29,12 @@
if(wrapper_type)
Unwrap(user)
-/obj/item/chems/food/monkeycube/proc/Expand()
+/obj/item/chems/food/monkeycube/proc/Expand(force_loc)
if(!growing)
growing = TRUE
- src.visible_message(SPAN_NOTICE("\The [src] expands!"))
+ visible_message(SPAN_NOTICE("\The [src] expands!"))
var/mob/monkey = new monkey_type
- monkey.dropInto(src.loc)
+ monkey.dropInto(force_loc || loc)
qdel(src)
/obj/item/chems/food/monkeycube/proc/Unwrap(var/mob/user)
@@ -42,16 +45,20 @@
user.put_in_hands(new wrapper_type(get_turf(user)))
wrapper_type = null
-/obj/item/chems/food/monkeycube/On_Consume(var/mob/M)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- H.visible_message("A screeching creature bursts out of [M]'s chest!")
- var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(H, BP_CHEST)
- organ.take_external_damage(50, 0, 0, "Animal escaping the ribcage")
- Expand()
+/obj/item/chems/food/monkeycube/handle_eaten_by_mob(mob/user, mob/target)
+ . = ..()
+ if(. == EATEN_SUCCESS)
+ target = target || user
+ if(target)
+ target.visible_message(SPAN_DANGER("A screeching creature bursts out of \the [target]!"))
+ var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(target, BP_CHEST)
+ if(organ)
+ organ.take_external_damage(50, 0, 0, "Animal escaping the ribcage")
+ Expand(get_turf(target))
/obj/item/chems/food/monkeycube/on_reagent_change()
- if(reagents.has_reagent(/decl/material/liquid/water))
+ ..()
+ if(!QDELETED(src) && reagents?.has_reagent(/decl/material/liquid/water))
Expand()
/obj/item/chems/food/monkeycube/wrapped
diff --git a/code/modules/reagents/reagent_containers/food/meat/fish.dm b/code/modules/reagents/reagent_containers/food/meat/fish.dm
index abec8e0faf1..a2b2cd2c30b 100644
--- a/code/modules/reagents/reagent_containers/food/meat/fish.dm
+++ b/code/modules/reagents/reagent_containers/food/meat/fish.dm
@@ -3,7 +3,7 @@
desc = "A finger of fish."
icon_state = "fishfingers"
filling_color = "#ffdefe"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
bitesize = 3
/obj/item/chems/food/fishfingers/populate_reagents()
@@ -16,7 +16,7 @@
icon_state = "cubancarp"
trash = /obj/item/trash/plate
filling_color = "#e9adff"
- center_of_mass = @"{'x':12,'y':5}"
+ center_of_mass = @'{"x":12,"y":5}'
nutriment_desc = list("toasted bread" = 3)
nutriment_amt = 3
bitesize = 3
@@ -31,7 +31,7 @@
desc = "Best enjoyed wrapped in a newspaper on a cold wet day."
icon_state = "fishandchips"
filling_color = "#e3d796"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
nutriment_desc = list("salt" = 1, "chips" = 2, "fish" = 2)
nutriment_amt = 3
bitesize = 3
diff --git a/code/modules/reagents/reagent_containers/food/meat/meat.dm b/code/modules/reagents/reagent_containers/food/meat/meat.dm
index b5ed4bdf0a6..fe148bed4bb 100644
--- a/code/modules/reagents/reagent_containers/food/meat/meat.dm
+++ b/code/modules/reagents/reagent_containers/food/meat/meat.dm
@@ -5,8 +5,8 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "rawcutlet"
bitesize = 1
- center_of_mass = @"{'x':17,'y':20}"
- material = /decl/material/solid/meat
+ center_of_mass = @'{"x":17,"y":20}'
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/rawcutlet/populate_reagents()
. = ..()
@@ -18,8 +18,8 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "cutlet"
bitesize = 2
- center_of_mass = @"{'x':17,'y':20}"
- material = /decl/material/solid/meat
+ center_of_mass = @'{"x":17,"y":20}'
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/cutlet/populate_reagents()
. = ..()
@@ -31,8 +31,8 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "rawmeatball"
bitesize = 2
- center_of_mass = @"{'x':16,'y':15}"
- material = /decl/material/solid/meat
+ center_of_mass = @'{"x":16,"y":15}'
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/rawmeatball/populate_reagents()
. = ..()
@@ -43,9 +43,9 @@
desc = "A great meal all round."
icon_state = "meatball"
filling_color = "#db0000"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
bitesize = 2
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/meatball/populate_reagents()
. = ..()
@@ -59,9 +59,9 @@
slice_path = /obj/item/chems/food/cutlet
slices_num = 3
filling_color = "#7a3d11"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
bitesize = 3
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/plainsteak/populate_reagents()
. = ..()
@@ -73,9 +73,9 @@
icon_state = "meatstake"
trash = /obj/item/trash/plate
filling_color = "#7a3d11"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
bitesize = 3
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/meatsteak/populate_reagents()
. = ..()
@@ -93,11 +93,11 @@
icon_state = "meatstake"
trash = /obj/item/trash/plate
filling_color = "#7a3d11"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("onion" = 2, "mushroom" = 2)
nutriment_amt = 4
bitesize = 3
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/loadedsteak/populate_reagents()
. = ..()
@@ -109,7 +109,7 @@
desc = "A slice from a huge tomato."
icon_state = "tomatomeat"
filling_color = "#db0000"
- center_of_mass = @"{'x':17,'y':16}"
+ center_of_mass = @'{"x":17,"y":16}'
nutriment_amt = 3
nutriment_desc = list("raw" = 2, "tomato" = 3)
bitesize = 6
@@ -119,9 +119,9 @@
desc = "A very manly slab of meat."
icon_state = "bearmeat"
filling_color = "#db0000"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
bitesize = 3
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/bearmeat/populate_reagents()
. = ..()
@@ -133,9 +133,9 @@
desc = "An economical replacement for crab. In space! Would probably be a lot nicer cooked."
icon_state = "spiderleg"
filling_color = "#d5f5dc"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
bitesize = 3
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/spider/populate_reagents()
. = ..()
@@ -152,9 +152,9 @@
desc = "A slab of green meat. Smells like acid."
icon_state = "xenomeat"
filling_color = "#43de18"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
bitesize = 6
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/xenomeat/populate_reagents()
. = ..()
@@ -167,9 +167,9 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "sausage"
filling_color = "#db0000"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
bitesize = 2
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/sausage/populate_reagents()
. = ..()
@@ -180,9 +180,9 @@
desc = "A piece of mixed, long meat, with some bite to it."
icon_state = "sausage"
filling_color = "#db0000"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
bitesize = 2
- material = /decl/material/solid/meat
+ material = /decl/material/solid/organic/meat
/obj/item/chems/food/fatsausage/populate_reagents()
. = ..()
@@ -194,7 +194,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "appendix"
filling_color = "#e00d34"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
bitesize = 3
/obj/item/chems/food/organ/populate_reagents()
@@ -208,7 +208,7 @@
desc = "Delicious meat, on a stick."
trash = /obj/item/stack/material/rods
filling_color = "#a85340"
- center_of_mass = @"{'x':17,'y':15}"
+ center_of_mass = @'{"x":17,"y":15}'
bitesize = 2
/obj/item/chems/food/meatkabob/populate_reagents()
diff --git a/code/modules/reagents/reagent_containers/food/meat/slabs.dm b/code/modules/reagents/reagent_containers/food/meat/slabs.dm
index 406e919c09d..b17a98e30bd 100644
--- a/code/modules/reagents/reagent_containers/food/meat/slabs.dm
+++ b/code/modules/reagents/reagent_containers/food/meat/slabs.dm
@@ -7,8 +7,8 @@
slices_num = 3
max_health = 180
filling_color = "#ff1c1c"
- center_of_mass = @"{'x':16,'y':14}"
- material = /decl/material/solid/meat
+ center_of_mass = @'{"x":16,"y":14}'
+ material = /decl/material/solid/organic/meat
bitesize = 3
/obj/item/chems/food/meat/populate_reagents()
diff --git a/code/modules/reagents/reagent_containers/food/misc.dm b/code/modules/reagents/reagent_containers/food/misc.dm
index 79781c1c3a9..71a4ef73a5c 100644
--- a/code/modules/reagents/reagent_containers/food/misc.dm
+++ b/code/modules/reagents/reagent_containers/food/misc.dm
@@ -3,7 +3,7 @@
desc = "Someone should be demoted from chef for this."
icon_state = "badrecipe"
filling_color = "#211f02"
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
bitesize = 2
/obj/item/chems/food/badrecipe/populate_reagents()
@@ -16,7 +16,7 @@
desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!"
icon_state = "stuffing"
filling_color = "#c9ac83"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_amt = 3
nutriment_desc = list("dryness" = 2, "bread" = 2)
bitesize = 1
@@ -27,7 +27,7 @@
icon_state = "popcorn"
trash = /obj/item/trash/popcorn
filling_color = "#fffad4"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
nutriment_desc = list("popcorn" = 3)
nutriment_amt = 2
bitesize = 0.1
@@ -37,7 +37,7 @@
desc = "Totally baked."
icon_state = "loadedbakedpotato"
filling_color = "#9c7a68"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("baked potato" = 3)
nutriment_amt = 3
bitesize = 2
@@ -52,7 +52,7 @@
icon_state = "spacylibertyduff"
trash = /obj/item/trash/snack_bowl
filling_color = "#42b873"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
nutriment_desc = list("mushroom" = 5, "rainbow" = 1)
nutriment_amt = 6
bitesize = 3
@@ -67,7 +67,7 @@
icon_state = "amanitajelly"
trash = /obj/item/trash/snack_bowl
filling_color = "#ed0758"
- center_of_mass = @"{'x':16,'y':5}"
+ center_of_mass = @'{"x":16,"y":5}'
nutriment_desc = list("jelly" = 3, "mushroom" = 3)
nutriment_amt = 6
bitesize = 3
@@ -83,7 +83,7 @@
icon_state = "enchiladas"
trash = /obj/item/trash/tray
filling_color = "#a36a1f"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("tortilla" = 3, "corn" = 3)
nutriment_amt = 2
bitesize = 4
@@ -99,7 +99,7 @@
icon_state = "monkeysdelight"
trash = /obj/item/trash/tray
filling_color = "#5c3c11"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
bitesize = 6
/obj/item/chems/food/monkeysdelight/populate_reagents()
@@ -114,7 +114,7 @@
desc = "An apple coated in sugary sweetness."
icon_state = "candiedapple"
filling_color = "#f21873"
- center_of_mass = @"{'x':15,'y':13}"
+ center_of_mass = @'{"x":15,"y":13}'
nutriment_desc = list("apple" = 3, "caramel" = 3, "sweetness" = 2)
nutriment_amt = 3
bitesize = 3
@@ -124,7 +124,7 @@
desc = "A tasty after-dinner mint. It is only wafer thin."
icon_state = "mint"
filling_color = "#f2f2f2"
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
bitesize = 1
/obj/item/chems/food/mint/populate_reagents()
@@ -136,7 +136,7 @@
desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced wheat flour."
icon_state = "phelmbiscuit"
filling_color = "#cfb4c4"
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
nutriment_desc = list("mushroom" = 4)
nutriment_amt = 5
bitesize = 2
@@ -155,7 +155,7 @@
icon_state = "gappletart"
trash = /obj/item/trash/plate
filling_color = "#ffff00"
- center_of_mass = @"{'x':16,'y':18}"
+ center_of_mass = @'{"x":16,"y":18}'
nutriment_desc = list("apple" = 8)
nutriment_amt = 8
bitesize = 3
@@ -169,7 +169,7 @@
desc = "It's a salted cracker."
icon_state = "cracker"
filling_color = "#f5deb8"
- center_of_mass = @"{'x':17,'y':6}"
+ center_of_mass = @'{"x":17,"y":6}'
nutriment_desc = list("salt" = 1, "cracker" = 2)
w_class = ITEM_SIZE_TINY
nutriment_amt = 1
@@ -184,7 +184,7 @@
desc = "Take a bite!"
icon_state = "taco"
bitesize = 3
- center_of_mass = @"{'x':21,'y':12}"
+ center_of_mass = @'{"x":21,"y":12}'
nutriment_desc = list("cheese" = 2,"taco shell" = 2)
nutriment_amt = 4
nutriment_type = /decl/material/liquid/nutriment/bread
@@ -198,7 +198,7 @@
desc = "Raw meat appetizer."
icon_state = "pelmen"
filling_color = "#ffffff"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
bitesize = 2
/obj/item/chems/food/pelmen/populate_reagents()
@@ -210,7 +210,7 @@
desc = "A dish consisting of boiled pieces of meat wrapped in dough. Delicious!"
icon_state = "pelmeni_boiled"
filling_color = "#ffffff"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
bitesize = 2
/obj/item/chems/food/pelmeni_boiled/populate_reagents()
diff --git a/code/modules/reagents/reagent_containers/food/pasta.dm b/code/modules/reagents/reagent_containers/food/pasta.dm
index 97f839d2db3..f1eb02bdb52 100644
--- a/code/modules/reagents/reagent_containers/food/pasta.dm
+++ b/code/modules/reagents/reagent_containers/food/pasta.dm
@@ -7,7 +7,7 @@
desc = "A bundle of raw spaghetti."
icon_state = "spagetti"
filling_color = "#eddd00"
- center_of_mass = @"{'x':16,'y':16}"
+ center_of_mass = @'{"x":16,"y":16}'
nutriment_desc = list("noodles" = 2)
nutriment_amt = 1
bitesize = 1
@@ -18,7 +18,7 @@
icon_state = "spagettiboiled"
trash = /obj/item/trash/plate
filling_color = "#fcee81"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("noodles" = 2)
nutriment_amt = 2
bitesize = 2
@@ -29,7 +29,7 @@
icon_state = "pastatomato"
trash = /obj/item/trash/plate
filling_color = "#de4545"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("tomato" = 3, "noodles" = 3)
nutriment_amt = 6
bitesize = 4
@@ -44,7 +44,7 @@
icon_state = "nanopasta"
trash = /obj/item/trash/plate
filling_color = "#535e66"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_amt = 6
bitesize = 4
@@ -58,7 +58,7 @@
icon_state = "meatballspagetti"
trash = /obj/item/trash/plate
filling_color = "#de4545"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("noodles" = 4)
nutriment_amt = 4
bitesize = 2
@@ -71,7 +71,7 @@
desc = "Do you want some pasta with those meatballs?"
icon_state = "spesslaw"
filling_color = "#de4545"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("noodles" = 4)
nutriment_amt = 4
bitesize = 2
diff --git a/code/modules/reagents/reagent_containers/food/rice.dm b/code/modules/reagents/reagent_containers/food/rice.dm
index f95a46518c2..34db6b3e997 100644
--- a/code/modules/reagents/reagent_containers/food/rice.dm
+++ b/code/modules/reagents/reagent_containers/food/rice.dm
@@ -8,7 +8,7 @@
icon_state = "boiledrice"
trash = /obj/item/trash/snack_bowl
filling_color = "#fffbdb"
- center_of_mass = @"{'x':17,'y':11}"
+ center_of_mass = @'{"x":17,"y":11}'
nutriment_desc = list("rice" = 2)
nutriment_amt = 6
bitesize = 2
@@ -27,7 +27,7 @@
icon_state = "katsu"
trash = /obj/item/trash/snack_bowl
filling_color = "#faa005"
- center_of_mass = @"{'x':17,'y':11}"
+ center_of_mass = @'{"x":17,"y":11}'
nutriment_desc = list("rice" = 2, "apple" = 2, "potato" = 2, "carrot" = 2, "bread" = 2, )
nutriment_amt = 6
bitesize = 2
@@ -38,7 +38,7 @@
icon_state = "rpudding"
trash = /obj/item/trash/snack_bowl
filling_color = "#fffbdb"
- center_of_mass = @"{'x':17,'y':11}"
+ center_of_mass = @'{"x":17,"y":11}'
nutriment_desc = list("rice" = 2)
nutriment_amt = 4
bitesize = 2
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/rotten.dm b/code/modules/reagents/reagent_containers/food/rotten.dm
index 1001a71fea8..64e9299847e 100644
--- a/code/modules/reagents/reagent_containers/food/rotten.dm
+++ b/code/modules/reagents/reagent_containers/food/rotten.dm
@@ -3,11 +3,12 @@
/obj/item/chems/food/old
name = "master old-food"
desc = "they're all inedible and potentially dangerous items"
- center_of_mass = @"{'x':15,'y':12}"
+ center_of_mass = @'{"x":15,"y":12}'
nutriment_desc = list("rot" = 5, "mold" = 5)
nutriment_amt = 10
bitesize = 3
filling_color = "#336b42"
+ abstract_type = /obj/item/chems/food/old
/obj/item/chems/food/old/populate_reagents()
. = ..()
diff --git a/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm b/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm
index f9e9bd01be4..5a3f2890242 100644
--- a/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm
+++ b/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm
@@ -5,7 +5,7 @@
slice_path = /obj/item/chems/food/slice/carrotcake
slices_num = 5
filling_color = "#ffd675"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "carrot" = 15)
nutriment_amt = 25
bitesize = 2
@@ -22,7 +22,7 @@
trash = /obj/item/trash/plate
filling_color = "#ffd675"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/carrotcake
/obj/item/chems/food/slice/carrotcake/filled
@@ -35,7 +35,7 @@
slice_path = /obj/item/chems/food/slice/braincake
slices_num = 5
filling_color = "#e6aedb"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "slime" = 15)
nutriment_amt = 5
bitesize = 2
@@ -53,7 +53,7 @@
trash = /obj/item/trash/plate
filling_color = "#e6aedb"
bitesize = 2
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
whole_path = /obj/item/chems/food/sliceable/braincake
/obj/item/chems/food/slice/braincake/filled
@@ -66,7 +66,7 @@
slice_path = /obj/item/chems/food/slice/cheesecake
slices_num = 5
filling_color = "#faf7af"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "cream" = 10, "cheese" = 15)
nutriment_amt = 10
bitesize = 2
@@ -82,7 +82,7 @@
trash = /obj/item/trash/plate
filling_color = "#faf7af"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/cheesecake
/obj/item/chems/food/slice/cheesecake/filled
@@ -95,7 +95,7 @@
slice_path = /obj/item/chems/food/slice/plaincake
slices_num = 5
filling_color = "#f7edd5"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "vanilla" = 15)
nutriment_amt = 20
nutriment_type = /decl/material/liquid/nutriment/bread/cake
@@ -107,7 +107,7 @@
trash = /obj/item/trash/plate
filling_color = "#f7edd5"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/plaincake
/obj/item/chems/food/slice/plaincake/filled
@@ -120,7 +120,7 @@
slice_path = /obj/item/chems/food/slice/orangecake
slices_num = 5
filling_color = "#fada8e"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "orange" = 15)
nutriment_amt = 20
nutriment_type = /decl/material/liquid/nutriment/bread/cake
@@ -132,7 +132,7 @@
trash = /obj/item/trash/plate
filling_color = "#fada8e"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/orangecake
/obj/item/chems/food/slice/orangecake/filled
@@ -145,7 +145,7 @@
slice_path = /obj/item/chems/food/slice/limecake
slices_num = 5
filling_color = "#cbfa8e"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "lime" = 15)
nutriment_amt = 20
nutriment_type = /decl/material/liquid/nutriment/bread/cake
@@ -157,7 +157,7 @@
trash = /obj/item/trash/plate
filling_color = "#cbfa8e"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/limecake
/obj/item/chems/food/slice/limecake/filled
@@ -170,7 +170,7 @@
slice_path = /obj/item/chems/food/slice/lemoncake
slices_num = 5
filling_color = "#fafa8e"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "lemon" = 15)
nutriment_amt = 20
nutriment_type = /decl/material/liquid/nutriment/bread/cake
@@ -182,7 +182,7 @@
trash = /obj/item/trash/plate
filling_color = "#fafa8e"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/lemoncake
/obj/item/chems/food/slice/lemoncake/filled
@@ -195,7 +195,7 @@
slice_path = /obj/item/chems/food/slice/chocolatecake
slices_num = 5
filling_color = "#805930"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "chocolate" = 15)
nutriment_amt = 20
nutriment_type = /decl/material/liquid/nutriment/bread/cake
@@ -207,7 +207,7 @@
trash = /obj/item/trash/plate
filling_color = "#805930"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/chocolatecake
/obj/item/chems/food/slice/chocolatecake/filled
@@ -220,7 +220,7 @@
slice_path = /obj/item/chems/food/slice/birthdaycake
slices_num = 5
filling_color = "#ffd6d6"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10)
nutriment_amt = 20
bitesize = 3
@@ -237,7 +237,7 @@
trash = /obj/item/trash/plate
filling_color = "#ffd6d6"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/birthdaycake
/obj/item/chems/food/slice/birthdaycake/filled
@@ -250,7 +250,7 @@
slice_path = /obj/item/chems/food/slice/applecake
slices_num = 5
filling_color = "#ebf5b8"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cake" = 10, "sweetness" = 10, "apple" = 15)
nutriment_amt = 15
nutriment_type = /decl/material/liquid/nutriment/bread/cake
@@ -262,7 +262,7 @@
trash = /obj/item/trash/plate
filling_color = "#ebf5b8"
bitesize = 2
- center_of_mass = @"{'x':16,'y':14}"
+ center_of_mass = @'{"x":16,"y":14}'
whole_path = /obj/item/chems/food/sliceable/applecake
/obj/item/chems/food/slice/applecake/filled
@@ -275,7 +275,7 @@
slice_path = /obj/item/chems/food/slice/pumpkinpie
slices_num = 5
filling_color = "#f5b951"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("pie" = 5, "cream" = 5, "pumpkin" = 5)
nutriment_amt = 15
@@ -286,7 +286,7 @@
trash = /obj/item/trash/plate
filling_color = "#f5b951"
bitesize = 2
- center_of_mass = @"{'x':16,'y':12}"
+ center_of_mass = @'{"x":16,"y":12}'
whole_path = /obj/item/chems/food/sliceable/pumpkinpie
/obj/item/chems/food/slice/pumpkinpie/filled
diff --git a/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm b/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm
index fb076444459..c84751c530d 100644
--- a/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm
+++ b/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm
@@ -5,7 +5,7 @@
slice_path = /obj/item/chems/food/cheesewedge
slices_num = 5
filling_color = "#fff700"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("cheese" = 10)
nutriment_amt = 10
bitesize = 2
@@ -20,6 +20,6 @@
icon_state = "cheesewedge"
filling_color = "#fff700"
bitesize = 2
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
// todo: non-cheddar cheeses
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm b/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm
index b5c168fd449..0906466aa22 100644
--- a/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm
+++ b/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm
@@ -5,7 +5,7 @@
slice_path = /obj/item/chems/food/slice/meatbread
slices_num = 5
filling_color = "#ff7575"
- center_of_mass = @"{'x':19,'y':9}"
+ center_of_mass = @'{"x":19,"y":9}'
nutriment_desc = list("bread" = 10)
nutriment_amt = 10
bitesize = 2
@@ -22,7 +22,7 @@
trash = /obj/item/trash/plate
filling_color = "#ff7575"
bitesize = 2
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
whole_path = /obj/item/chems/food/sliceable/meatbread
/obj/item/chems/food/slice/meatbread/filled
@@ -35,7 +35,7 @@
slice_path = /obj/item/chems/food/slice/xenomeatbread
slices_num = 5
filling_color = "#8aff75"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
nutriment_desc = list("bread" = 10)
nutriment_amt = 10
bitesize = 2
@@ -52,7 +52,7 @@
trash = /obj/item/trash/plate
filling_color = "#8aff75"
bitesize = 2
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
whole_path = /obj/item/chems/food/sliceable/xenomeatbread
/obj/item/chems/food/slice/xenomeatbread/filled
@@ -65,7 +65,7 @@
slice_path = /obj/item/chems/food/slice/bananabread
slices_num = 5
filling_color = "#ede5ad"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
nutriment_desc = list("bread" = 10)
nutriment_amt = 10
bitesize = 2
@@ -82,7 +82,7 @@
trash = /obj/item/trash/plate
filling_color = "#ede5ad"
bitesize = 2
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
whole_path = /obj/item/chems/food/sliceable/bananabread
/obj/item/chems/food/slice/bananabread/filled
@@ -95,7 +95,7 @@
slice_path = /obj/item/chems/food/slice/tofubread
slices_num = 5
filling_color = "#f7ffe0"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
nutriment_desc = list("tofu" = 10)
nutriment_amt = 10
bitesize = 2
@@ -108,7 +108,7 @@
trash = /obj/item/trash/plate
filling_color = "#f7ffe0"
bitesize = 2
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
whole_path = /obj/item/chems/food/sliceable/tofubread
/obj/item/chems/food/slice/tofubread/filled
@@ -121,7 +121,7 @@
slice_path = /obj/item/chems/food/slice/bread
slices_num = 5
filling_color = "#ffe396"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
nutriment_desc = list("bread" = 6)
nutriment_amt = 6
bitesize = 2
@@ -134,7 +134,7 @@
trash = /obj/item/trash/plate
filling_color = "#d27332"
bitesize = 2
- center_of_mass = @"{'x':16,'y':4}"
+ center_of_mass = @'{"x":16,"y":4}'
whole_path = /obj/item/chems/food/sliceable/bread
/obj/item/chems/food/slice/bread/filled
@@ -147,7 +147,7 @@
slice_path = /obj/item/chems/food/slice/creamcheesebread
slices_num = 5
filling_color = "#fff896"
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
nutriment_desc = list("bread" = 6, "cream" = 3, "cheese" = 3)
nutriment_amt = 5
bitesize = 2
@@ -164,7 +164,7 @@
trash = /obj/item/trash/plate
filling_color = "#fff896"
bitesize = 2
- center_of_mass = @"{'x':16,'y':13}"
+ center_of_mass = @'{"x":16,"y":13}'
whole_path = /obj/item/chems/food/sliceable/creamcheesebread
/obj/item/chems/food/slice/creamcheesebread/filled
diff --git a/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm b/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm
index 1232094ad3f..cb6dc5b9cc5 100644
--- a/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm
+++ b/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm
@@ -4,4 +4,4 @@
icon_state = "watermelonslice"
filling_color = "#ff3867"
bitesize = 2
- center_of_mass = @"{'x':16,'y':10}"
\ No newline at end of file
+ center_of_mass = @'{"x":16,"y":10}'
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm
index 1798fb1291a..78af7f12cc8 100644
--- a/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm
+++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm
@@ -12,7 +12,7 @@
icon_state = "pizzamargherita"
slice_path = /obj/item/chems/food/slice/margherita
slices_num = 6
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15)
nutriment_amt = 35
bitesize = 2
@@ -29,7 +29,7 @@
icon_state = "pizzamargheritaslice"
filling_color = "#baa14c"
bitesize = 2
- center_of_mass = @"{'x':18,'y':13}"
+ center_of_mass = @'{"x":18,"y":13}'
whole_path = /obj/item/chems/food/sliceable/pizza/margherita
/obj/item/chems/food/slice/margherita/filled
@@ -41,7 +41,7 @@
icon_state = "meatpizza"
slice_path = /obj/item/chems/food/slice/meatpizza
slices_num = 6
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15)
nutriment_amt = 10
bitesize = 2
@@ -58,7 +58,7 @@
icon_state = "meatpizzaslice"
filling_color = "#baa14c"
bitesize = 2
- center_of_mass = @"{'x':18,'y':13}"
+ center_of_mass = @'{"x":18,"y":13}'
whole_path = /obj/item/chems/food/sliceable/pizza/meatpizza
/obj/item/chems/food/slice/meatpizza/filled
@@ -70,7 +70,7 @@
icon_state = "mushroompizza"
slice_path = /obj/item/chems/food/slice/mushroompizza
slices_num = 6
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "mushroom" = 10)
nutriment_amt = 35
bitesize = 2
@@ -86,7 +86,7 @@
icon_state = "mushroompizzaslice"
filling_color = "#baa14c"
bitesize = 2
- center_of_mass = @"{'x':18,'y':13}"
+ center_of_mass = @'{"x":18,"y":13}'
whole_path = /obj/item/chems/food/sliceable/pizza/mushroompizza
/obj/item/chems/food/slice/mushroompizza/filled
@@ -98,7 +98,7 @@
icon_state = "vegetablepizza"
slice_path = /obj/item/chems/food/slice/vegetablepizza
slices_num = 6
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "eggplant" = 5, "carrot" = 5, "corn" = 5)
nutriment_amt = 25
bitesize = 2
@@ -116,7 +116,7 @@
icon_state = "vegetablepizzaslice"
filling_color = "#baa14c"
bitesize = 2
- center_of_mass = @"{'x':18,'y':13}"
+ center_of_mass = @'{"x":18,"y":13}'
whole_path = /obj/item/chems/food/sliceable/pizza/vegetablepizza
/obj/item/chems/food/slice/vegetablepizza/filled
@@ -127,7 +127,7 @@
desc = "A box suited for pizzas."
icon = 'icons/obj/food.dmi'
icon_state = "pizzabox1"
- material = /decl/material/solid/cardboard
+ material = /decl/material/solid/organic/cardboard
var/open = 0 // Is the box open?
var/ismessy = 0 // Fancy mess on the lid
var/obj/item/chems/food/sliceable/pizza/pizza // content pizza
diff --git a/code/modules/reagents/reagent_containers/food/soup.dm b/code/modules/reagents/reagent_containers/food/soup.dm
index c2a8a192450..f0069492db8 100644
--- a/code/modules/reagents/reagent_containers/food/soup.dm
+++ b/code/modules/reagents/reagent_containers/food/soup.dm
@@ -8,7 +8,7 @@
icon_state = "meatballsoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#785210"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
bitesize = 5
eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg')
@@ -22,7 +22,7 @@
desc = "Smells like copper."
icon_state = "tomatosoup"
filling_color = "#ff0000"
- center_of_mass = @"{'x':16,'y':7}"
+ center_of_mass = @'{"x":16,"y":7}'
bitesize = 5
eat_sound = 'sound/items/drink.ogg'
@@ -37,7 +37,7 @@
desc = "Not very funny."
icon_state = "clownstears"
filling_color = "#c4fbff"
- center_of_mass = @"{'x':16,'y':7}"
+ center_of_mass = @'{"x":16,"y":7}'
nutriment_desc = list("salt" = 1, "the worst joke" = 3)
nutriment_amt = 4
bitesize = 5
@@ -54,7 +54,7 @@
icon_state = "vegetablesoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#afc4b5"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
nutriment_desc = list("carrot" = 2, "corn" = 2, "eggplant" = 2, "potato" = 2)
nutriment_amt = 8
bitesize = 5
@@ -70,7 +70,7 @@
icon_state = "nettlesoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#afc4b5"
- center_of_mass = @"{'x':16,'y':7}"
+ center_of_mass = @'{"x":16,"y":7}'
nutriment_desc = list("salad" = 4, "egg" = 2, "potato" = 2)
nutriment_amt = 8
bitesize = 5
@@ -87,7 +87,7 @@
icon_state = "mysterysoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#f082ff"
- center_of_mass = @"{'x':16,'y':6}"
+ center_of_mass = @'{"x":16,"y":6}'
nutriment_desc = list("backwash" = 1)
nutriment_amt = 1
bitesize = 5
@@ -149,7 +149,7 @@
icon_state = "wishsoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#d1f4ff"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
bitesize = 5
eat_sound = 'sound/items/drink.ogg'
@@ -166,7 +166,7 @@
icon_state = "hotchili"
trash = /obj/item/trash/snack_bowl
filling_color = "#ff3c00"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("chilli peppers" = 2, "burning" = 1)
nutriment_amt = 3
bitesize = 5
@@ -182,7 +182,7 @@
desc = "This slush is barely a liquid!"
icon_state = "coldchili"
filling_color = "#2b00ff"
- center_of_mass = @"{'x':15,'y':9}"
+ center_of_mass = @'{"x":15,"y":9}'
nutriment_desc = list("chilly peppers" = 3)
nutriment_amt = 3
trash = /obj/item/trash/snack_bowl
@@ -200,7 +200,7 @@
icon_state = "tomatosoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#d92929"
- center_of_mass = @"{'x':16,'y':7}"
+ center_of_mass = @'{"x":16,"y":7}'
nutriment_desc = list("soup" = 5)
nutriment_amt = 5
bitesize = 3
@@ -215,7 +215,7 @@
desc = "A nice and warm stew. Healthy and strong."
icon_state = "stew"
filling_color = "#9e673a"
- center_of_mass = @"{'x':16,'y':5}"
+ center_of_mass = @'{"x":16,"y":5}'
nutriment_desc = list("tomato" = 2, "potato" = 2, "carrot" = 2, "eggplant" = 2, "mushroom" = 2)
nutriment_amt = 6
bitesize = 10
@@ -232,7 +232,7 @@
desc = "The universes best soup! Yum!!!"
icon_state = "milosoup"
trash = /obj/item/trash/snack_bowl
- center_of_mass = @"{'x':16,'y':7}"
+ center_of_mass = @'{"x":16,"y":7}'
nutriment_desc = list("soy" = 8)
nutriment_amt = 8
bitesize = 4
@@ -248,7 +248,7 @@
icon_state = "mushroomsoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#e386bf"
- center_of_mass = @"{'x':17,'y':10}"
+ center_of_mass = @'{"x":17,"y":10}'
nutriment_desc = list("mushroom" = 8, "milk" = 2)
nutriment_amt = 8
bitesize = 3
@@ -260,7 +260,7 @@
icon_state = "beetsoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#fac9ff"
- center_of_mass = @"{'x':15,'y':8}"
+ center_of_mass = @'{"x":15,"y":8}'
nutriment_desc = list("tomato" = 4, "beet" = 4)
nutriment_amt = 8
bitesize = 2
diff --git a/code/modules/reagents/reagent_containers/food/soy.dm b/code/modules/reagents/reagent_containers/food/soy.dm
index 727043f19be..930a160c0ea 100644
--- a/code/modules/reagents/reagent_containers/food/soy.dm
+++ b/code/modules/reagents/reagent_containers/food/soy.dm
@@ -3,7 +3,7 @@
icon_state = "tofu"
desc = "We all love tofu."
filling_color = "#fffee0"
- center_of_mass = @"{'x':17,'y':10}"
+ center_of_mass = @'{"x":17,"y":10}'
nutriment_amt = 3
nutriment_desc = list("tofu" = 3, "softness" = 3)
bitesize = 3
@@ -18,7 +18,7 @@
icon_state = "soydope"
trash = /obj/item/trash/plate
filling_color = "#c4bf76"
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("slime" = 2, "soy" = 2)
nutriment_amt = 2
bitesize = 2
@@ -29,7 +29,7 @@
desc = "Vegan meat, on a stick."
trash = /obj/item/stack/material/rods
filling_color = "#fffee0"
- center_of_mass = @"{'x':17,'y':15}"
+ center_of_mass = @'{"x":17,"y":15}'
nutriment_desc = list("tofu" = 3, "metal" = 1)
nutriment_amt = 8
bitesize = 2
@@ -39,7 +39,7 @@
desc = "A fake turkey made from tofu."
icon_state = "tofurkey"
filling_color = "#fffee0"
- center_of_mass = @"{'x':16,'y':8}"
+ center_of_mass = @'{"x":16,"y":8}'
nutriment_amt = 12
nutriment_desc = list("turkey" = 3, "tofu" = 5, "softness" = 4)
bitesize = 3
@@ -49,7 +49,7 @@
desc = "Even non-vegetarians will LOVE this!"
icon_state = "stewedsoymeat"
trash = /obj/item/trash/plate
- center_of_mass = @"{'x':16,'y':10}"
+ center_of_mass = @'{"x":16,"y":10}'
nutriment_desc = list("soy" = 4, "tomato" = 4)
nutriment_amt = 8
bitesize = 2
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/veggie.dm b/code/modules/reagents/reagent_containers/food/veggie.dm
index 3f8a53ff5dd..5f29982c1e6 100644
--- a/code/modules/reagents/reagent_containers/food/veggie.dm
+++ b/code/modules/reagents/reagent_containers/food/veggie.dm
@@ -8,7 +8,7 @@
icon_state = "aesirsalad"
trash = /obj/item/trash/snack_bowl
filling_color = "#468c00"
- center_of_mass = @"{'x':17,'y':11}"
+ center_of_mass = @'{"x":17,"y":11}'
nutriment_amt = 8
nutriment_desc = list("apples" = 3,"salad" = 4, "quintessence" = 2)
bitesize = 3
@@ -23,7 +23,7 @@
icon_state = "herbsalad"
trash = /obj/item/trash/snack_bowl
filling_color = "#76b87f"
- center_of_mass = @"{'x':17,'y':11}"
+ center_of_mass = @'{"x":17,"y":11}'
nutriment_desc = list("salad" = 2, "tomato" = 2, "carrot" = 2, "apple" = 2)
nutriment_amt = 8
bitesize = 3
@@ -34,7 +34,7 @@
icon_state = "validsalad"
trash = /obj/item/trash/snack_bowl
filling_color = "#76b87f"
- center_of_mass = @"{'x':17,'y':11}"
+ center_of_mass = @'{"x":17,"y":11}'
nutriment_desc = list("100% real salad")
nutriment_amt = 6
bitesize = 3
@@ -49,7 +49,7 @@
icon_state = "carrotfries"
trash = /obj/item/trash/plate
filling_color = "#faa005"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_desc = list("carrot" = 3, "salt" = 1)
nutriment_amt = 3
bitesize = 2
@@ -63,7 +63,7 @@
desc = "A slice from a huge mushroom."
icon_state = "hugemushroomslice"
filling_color = "#e0d7c5"
- center_of_mass = @"{'x':17,'y':16}"
+ center_of_mass = @'{"x":17,"y":16}'
nutriment_amt = 3
nutriment_desc = list("raw" = 2, "mushroom" = 2)
bitesize = 6
diff --git a/code/modules/reagents/reagent_containers/food_edibility.dm b/code/modules/reagents/reagent_containers/food_edibility.dm
new file mode 100644
index 00000000000..5aa5d600162
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/food_edibility.dm
@@ -0,0 +1,42 @@
+/obj/item/chems/food/show_feed_message_end(var/mob/user, var/mob/target)
+ target = target || user
+ if(user && user == target && isliving(user))
+ var/mob/living/living_user = user
+ switch(living_user.get_food_satiation() / living_user.get_satiated_nutrition())
+ if(-(INFINITY) to 0.2)
+ to_chat(living_user, SPAN_WARNING("You hungrily chew out a piece of [src] and gobble it!"))
+ if(0.2 to 0.4)
+ to_chat(living_user, SPAN_NOTICE("You hungrily begin to eat [src]."))
+ if(0.4 to 0.8)
+ . = ..()
+ else
+ to_chat(living_user, SPAN_NOTICE("You unwillingly chew a bit of [src]."))
+
+/obj/item/chems/food/play_feed_sound(mob/user, consumption_method = EATING_METHOD_EAT)
+ if(eat_sound)
+ playsound(user, pick(eat_sound), rand(10, 50), 1)
+ return
+ return ..()
+
+/obj/item/chems/food/handle_eaten_by_mob(mob/user, mob/target)
+ . = ..()
+ if(. == EATEN_SUCCESS)
+ bitecount++
+
+/obj/item/chems/food/get_food_default_transfer_amount(mob/eater)
+ return eater?.get_eaten_transfer_amount(bitesize)
+
+/obj/item/chems/food/handle_consumed(mob/feeder, mob/eater, consumption_method = EATING_METHOD_EAT)
+
+ if(isliving(eater) && cooked_food)
+ var/mob/living/living_eater = eater
+ living_eater.add_stressor(/datum/stressor/ate_cooked_food, 15 MINUTES)
+
+ var/trash_ref = trash
+ . = ..()
+ if(. && trash_ref)
+ if(ispath(trash_ref, /obj/item))
+ var/obj/item/trash_item = new trash_ref(get_turf(feeder))
+ feeder.put_in_hands(trash_item)
+ else if(istype(trash_ref, /obj/item))
+ feeder.put_in_hands(trash_ref)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 43ad029be2d..6fcbed2723f 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -13,8 +13,8 @@
w_class = ITEM_SIZE_SMALL
atom_flags = ATOM_FLAG_OPEN_CONTAINER
obj_flags = OBJ_FLAG_HOLLOW
- unacidable = 1 //glass doesn't dissolve in acid
-
+ material = /decl/material/solid/glass
+ abstract_type = /obj/item/chems/glass
drop_sound = 'sound/foley/bottledrop1.ogg'
pickup_sound = 'sound/foley/bottlepickup1.ogg'
@@ -37,7 +37,8 @@
/obj/machinery/smartfridge/,
/obj/machinery/biogenerator,
/obj/machinery/constructable_frame,
- /obj/machinery/radiocarbon_spectrometer
+ /obj/machinery/radiocarbon_spectrometer,
+ /obj/machinery/material_processing/extractor
)
/obj/item/chems/glass/examine(mob/user, distance)
@@ -67,20 +68,6 @@
return ..()
return FALSE
-/obj/item/chems/glass/standard_feed_mob(var/mob/user, var/mob/target)
- if(!ATOM_IS_OPEN_CONTAINER(src))
- to_chat(user, "You need to open \the [src] first.")
- return 1
- if(user.a_intent == I_HURT)
- return 1
- return ..()
-
-/obj/item/chems/glass/self_feed_message(var/mob/user)
- to_chat(user, "You swallow a gulp from \the [src].")
- if(user.has_personal_goal(/datum/goal/achievement/specific_object/drink))
- for(var/R in reagents.reagent_volumes)
- user.update_personal_goal(/datum/goal/achievement/specific_object/drink, R)
-
/obj/item/chems/glass/afterattack(var/obj/target, var/mob/user, var/proximity)
if(!ATOM_IS_OPEN_CONTAINER(src) || !proximity) //Is the container open & are they next to whatever they're clicking?
return FALSE //If not, do nothing.
@@ -91,7 +78,7 @@
return TRUE
if(standard_pour_into(user, target)) //Pouring into another beaker?
return TRUE
- if(standard_feed_mob(user, target))
+ if(handle_eaten_by_mob(user, target) != EATEN_INVALID)
return TRUE
if(user.a_intent == I_HURT)
if(standard_splash_mob(user,target))
@@ -111,15 +98,14 @@
desc = "It's a bucket."
icon = 'icons/obj/items/bucket.dmi'
icon_state = ICON_STATE_WORLD
- center_of_mass = @"{'x':16,'y':9}"
+ center_of_mass = @'{"x":16,"y":9}'
w_class = ITEM_SIZE_NORMAL
amount_per_transfer_from_this = 20
possible_transfer_amounts = @"[10,20,30,60,120,150,180]"
volume = 180
atom_flags = ATOM_FLAG_OPEN_CONTAINER
presentation_flags = PRESENTATION_FLAG_NAME
- unacidable = 0
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
material_force_multiplier = 0.2
slot_flags = SLOT_HEAD
drop_sound = 'sound/foley/donk1.ogg'
@@ -129,7 +115,7 @@
desc = "It's a wooden bucket. How rustic."
icon = 'icons/obj/items/wooden_bucket.dmi'
volume = 200
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
/obj/item/chems/glass/bucket/attackby(var/obj/D, mob/user)
if(istype(D, /obj/item/mop))
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index 92eb3821c2a..4442ef8a475 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -8,7 +8,7 @@
icon = 'icons/obj/items/chem/bottle.dmi'
icon_state = ICON_STATE_WORLD
randpixel = 7
- center_of_mass = @"{'x':16,'y':15}"
+ center_of_mass = @'{"x":16,"y":15}'
amount_per_transfer_from_this = 10
possible_transfer_amounts = @"[5,10,15,25,30,60]"
w_class = ITEM_SIZE_SMALL
@@ -121,7 +121,7 @@
autolabel = FALSE
label_color = COLOR_PALE_BTL_GREEN
lid_color = COLOR_PALE_BTL_GREEN
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/item/chems/glass/bottle/eznutrient/populate_reagents()
reagents.add_reagent(/decl/material/liquid/fertilizer, reagents.maximum_volume)
@@ -132,7 +132,7 @@
autolabel = FALSE
label_color = COMMS_COLOR_SCIENCE
lid_color = COMMS_COLOR_SCIENCE
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/item/chems/glass/bottle/left4zed/populate_reagents()
var/mutagen_amount = round(reagents.maximum_volume / 6)
@@ -145,7 +145,7 @@
autolabel = FALSE
label_color = COLOR_ASSEMBLY_GREEN
lid_color = COLOR_ASSEMBLY_GREEN
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/item/chems/glass/bottle/robustharvest/populate_reagents()
var/amonia_amount = round(reagents.maximum_volume / 6)
diff --git a/code/modules/reagents/reagent_containers/glass_edibility.dm b/code/modules/reagents/reagent_containers/glass_edibility.dm
new file mode 100644
index 00000000000..2ffbb91be5b
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/glass_edibility.dm
@@ -0,0 +1,26 @@
+/obj/item/chems/glass/handle_eaten_by_mob(var/mob/user, var/mob/target)
+ if(!ATOM_IS_OPEN_CONTAINER(src))
+ to_chat(user, SPAN_WARNING("You need to open \the [src] first."))
+ return EATEN_UNABLE
+ if(user.a_intent == I_HURT)
+ return EATEN_INVALID
+ . = ..()
+ if(. == EATEN_SUCCESS && target?.has_personal_goal(/datum/goal/achievement/specific_object/drink))
+ for(var/R in reagents.reagent_volumes)
+ target.update_personal_goal(/datum/goal/achievement/specific_object/drink, R)
+
+/obj/item/chems/glass/show_feed_message_start(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You begin trying to drink from \the [target]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] is trying to feed some of the contents of \the [src] to \the [target]!"))
+
+/obj/item/chems/glass/show_feed_message_end(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You swallow a gulp from \the [src]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] feeds some of the contents of \the [src] to \the [target]!"))
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 805c30b3083..06abc3f994e 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -2,20 +2,19 @@
/// HYPOSPRAY
////////////////////////////////////////////////////////////////////////////////
-/obj/item/chems/hypospray //obsolete, use hypospray/vial for the actual hypospray item
+/obj/item/chems/hypospray // abstract shared type, do not use directly
name = "hypospray"
desc = "A sterile, air-needle autoinjector for rapid administration of drugs to patients."
- icon = 'icons/obj/syringe.dmi'
- item_state = "hypo"
- icon_state = "hypo"
- origin_tech = "{'materials':4,'biotech':5}"
+ icon = 'icons/obj/hypospray.dmi'
+ icon_state = ICON_STATE_WORLD
+ abstract_type = /obj/item/chems/hypospray
+ origin_tech = @'{"materials":4,"biotech":5}'
amount_per_transfer_from_this = 5
- unacidable = 1
volume = 30
possible_transfer_amounts = null
atom_flags = ATOM_FLAG_OPEN_CONTAINER
slot_flags = SLOT_LOWER_BODY
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/aluminium = MATTER_AMOUNT_TRACE,
@@ -33,6 +32,10 @@
var/time = (1 SECONDS) / 1.9
var/single_use = TRUE // autoinjectors are not refillable (overriden for hypospray)
+/obj/item/chems/hypospray/on_update_icon()
+ icon_state = get_world_inventory_state()
+ . = ..()
+
/obj/item/chems/hypospray/attack(mob/living/M, mob/user)
if(!reagents.total_volume)
to_chat(user, SPAN_WARNING("[src] is empty."))
@@ -81,7 +84,6 @@
////////////////////////////////////////////////////////////////////////////////
/obj/item/chems/hypospray/vial
name = "hypospray"
- item_state = "autoinjector"
desc = "A sterile, air-needle autoinjector for rapid administration of drugs to patients. Uses a replacable 30u vial."
possible_transfer_amounts = @"[1,2,5,10,15,20,30]"
amount_per_transfer_from_this = 5
@@ -169,11 +171,10 @@
/obj/item/chems/hypospray/autoinjector
name = "autoinjector"
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
- icon_state = "injector"
- item_state = "autoinjector"
+ icon = 'icons/obj/autoinjector.dmi'
amount_per_transfer_from_this = 5
volume = 5
- origin_tech = "{'materials':2,'biotech':2}"
+ origin_tech = @'{"materials":2,"biotech":2}'
slot_flags = SLOT_LOWER_BODY | SLOT_EARS
w_class = ITEM_SIZE_TINY
detail_state = "_band"
@@ -193,7 +194,8 @@
/obj/item/chems/hypospray/autoinjector/on_update_icon()
. = ..()
- icon_state = "[initial(icon_state)][(reagents?.total_volume) > 0]"
+ if(reagents?.total_volume <= 0)
+ icon_state = "[icon_state]_used"
/obj/item/chems/hypospray/autoinjector/examine(mob/user)
. = ..(user)
diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm
index 9c0846bfcab..3c045caba2b 100644
--- a/code/modules/reagents/reagent_containers/inhaler.dm
+++ b/code/modules/reagents/reagent_containers/inhaler.dm
@@ -3,19 +3,17 @@
/obj/item/chems/inhaler
name = "autoinhaler"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel."
- icon = 'icons/obj/syringe.dmi'
- item_state = "autoinjector"
- icon_state = "autoinhaler"
- center_of_mass = @"{'x':16,'y':11}"
- unacidable = TRUE
+ icon = 'icons/obj/inhaler.dmi'
+ icon_state = ICON_STATE_WORLD
+ center_of_mass = @'{"x":16,"y":11}'
amount_per_transfer_from_this = 5
volume = 5
w_class = ITEM_SIZE_SMALL
possible_transfer_amounts = null
atom_flags = ATOM_FLAG_OPEN_CONTAINER
slot_flags = SLOT_LOWER_BODY
- origin_tech = "{'materials':2,'biotech':2}"
- material = /decl/material/solid/plastic
+ origin_tech = @'{"materials":2,"biotech":2}'
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/aluminium = MATTER_AMOUNT_TRACE
@@ -35,10 +33,11 @@
update_icon()
/obj/item/chems/inhaler/on_update_icon()
+ icon_state = get_world_inventory_state()
. = ..()
if(ATOM_IS_OPEN_CONTAINER(src))
add_overlay("[icon_state]_loaded")
- if(reagents.total_volume > 0)
+ if(reagents?.total_volume > 0)
add_overlay("[icon_state]_reagents")
/obj/item/chems/inhaler/attack(var/mob/living/carbon/human/target, var/mob/user, var/proximity)
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 56ec7880d51..29327af664f 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -13,7 +13,7 @@
w_class = ITEM_SIZE_TINY
slot_flags = SLOT_EARS
volume = 30
- material = /decl/material/solid/plantmatter
+ material = /decl/material/solid/organic/plantmatter
var/static/list/colorizable_icon_states = list("pill1", "pill2", "pill3", "pill4", "pill5") // if using an icon state from here, color will be derived from reagents
/obj/item/chems/pill/Initialize()
@@ -36,63 +36,24 @@
/obj/item/chems/pill/dragged_onto(var/mob/user)
attack(user, user)
-/obj/item/chems/pill/attack(mob/M, mob/user, def_zone)
- //TODO: replace with standard_feed_mob() call.
- if(M == user)
- if(!M.can_eat(src))
- return
- M.visible_message(SPAN_NOTICE("[M] swallows a pill."), SPAN_NOTICE("You swallow \the [src]."), null, 2)
- if(reagents?.total_volume)
- reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
- qdel(src)
- return 1
-
- else if(ishuman(M))
- if(!M.can_force_feed(user, src))
- return
-
- user.visible_message(SPAN_WARNING("[user] attempts to force [M] to swallow \the [src]."))
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- if(!do_mob(user, M))
- return
- user.visible_message(SPAN_WARNING("[user] forces [M] to swallow \the [src]."))
- var/contained = REAGENT_LIST(src)
- admin_attack_log(user, M, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed")
- if(reagents.total_volume)
- reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
- qdel(src)
- return 1
-
- return 0
-
/obj/item/chems/pill/afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
-
- if(ATOM_IS_OPEN_CONTAINER(target) && target.reagents)
+ if(proximity && ATOM_IS_OPEN_CONTAINER(target) && target.reagents)
if(!target.reagents.total_volume)
- to_chat(user, "[target] is empty. Can't dissolve \the [src].")
+ to_chat(user, SPAN_WARNING("\The [target] is empty. You can't dissolve \the [src] in it."))
return
- to_chat(user, "You dissolve \the [src] in [target].")
-
+ to_chat(user, SPAN_NOTICE("You dissolve \the [src] in \the [target]."))
+ user.visible_message(SPAN_NOTICE("\The [user] puts something in \the [target]."), range = 2)
admin_attacker_log(user, "spiked \a [target] with a pill. Reagents: [REAGENT_LIST(src)]")
reagents.trans_to(target, reagents.total_volume)
- user.visible_message(SPAN_NOTICE("\The [user] puts something in \the [target]."), range = 2)
qdel(src)
- return
+ return
+ return ..()
////////////////////////////////////////////////////////////////////////////////
/// Pills. END
////////////////////////////////////////////////////////////////////////////////
//We lied - it's pills all the way down
-/obj/item/chems/pill/antitox
- name = "antitoxins (25u)"
- desc = "Neutralizes many common toxins."
- icon_state = "pill1"
-
-/obj/item/chems/pill/antitox/populate_reagents()
- reagents.add_reagent(/decl/material/liquid/antitoxins, 25)
-
/obj/item/chems/pill/bromide
name = "bromide pill"
desc = "Highly toxic."
@@ -168,12 +129,13 @@
reagents.add_reagent(/decl/material/liquid/oxy_meds, 15)
/obj/item/chems/pill/antitoxins
- name = "antitoxins (15u)"
+ name = "antitoxins (25u)"
desc = "A broad-spectrum anti-toxin."
icon_state = "pill1"
/obj/item/chems/pill/antitoxins/populate_reagents()
- reagents.add_reagent(/decl/material/liquid/antitoxins, 15)
+ // Antitox is easy to make and has no OD threshold so we can get away with big pills.
+ reagents.add_reagent(/decl/material/liquid/antitoxins, 25)
/obj/item/chems/pill/brute_meds
name = "styptic (20u)"
@@ -266,14 +228,13 @@
name = "detergent pod"
desc = "Put in water to get space cleaner. Do not eat. Really."
icon_state = "pod21"
- var/smell_clean_time = 10 MINUTES
// Don't overwrite the custom name.
/obj/item/chems/pill/detergent/update_container_name()
return
/obj/item/chems/pill/detergent/populate_reagents()
- reagents.add_reagent(/decl/material/gas/ammonia, 30)
+ reagents.add_reagent(/decl/material/liquid/contaminant_cleaner, 30)
/obj/item/chems/pill/pod
name = "master flavorpod item"
diff --git a/code/modules/reagents/reagent_containers/pill_edibility.dm b/code/modules/reagents/reagent_containers/pill_edibility.dm
new file mode 100644
index 00000000000..9aa114344fc
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/pill_edibility.dm
@@ -0,0 +1,24 @@
+/obj/item/chems/pill/get_food_default_transfer_amount(mob/eater)
+ return reagents?.total_volume // Always eat it in one bite.
+
+/obj/item/chems/pill/show_feed_message_start(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You begin trying to swallow \the [target]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] attempts to force \the [target] to swallow \the [src]!"))
+
+/obj/item/chems/pill/show_feed_message_end(var/mob/user, var/mob/target)
+ target = target || user
+ if(user)
+ if(user == target)
+ to_chat(user, SPAN_NOTICE("You swallow \the [src]."))
+ else
+ user.visible_message(SPAN_NOTICE("\The [user] forces \the [target] to swallow \the [src]!"))
+
+/obj/item/chems/pill/play_feed_sound(mob/user, consumption_method = EATING_METHOD_EAT)
+ return
+
+/obj/item/chems/pill/show_food_consumed_message(mob/user, mob/target)
+ return
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index ffb93d52c44..c533beca5a5 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -12,8 +12,7 @@
throw_range = 10
throwforce = 3
attack_cooldown = DEFAULT_QUICK_COOLDOWN
- unacidable = TRUE //plastic
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
volume = 250
amount_per_transfer_from_this = 10
possible_transfer_amounts = @"[5,10]"
@@ -22,7 +21,9 @@
var/tmp/particle_move_delay = 10 ///lower is faster
var/tmp/sound_spray = 'sound/effects/spray2.ogg' ///Sound played when spraying
var/safety = FALSE ///Whether the safety is on
-
+
+/obj/item/chems/spray/solvent_can_melt(var/solvent_power = MAT_SOLVENT_STRONG)
+ return FALSE // maybe reconsider this
/obj/item/chems/spray/Initialize()
. = ..()
@@ -70,7 +71,7 @@
/obj/item/chems/spray/proc/create_chempuff(var/atom/movable/target, var/particle_amount)
set waitfor = FALSE
-
+
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
D.create_reagents(amount_per_transfer_from_this)
if(QDELETED(src))
@@ -191,7 +192,7 @@
w_class = ITEM_SIZE_LARGE
possible_transfer_amounts = null
volume = 600
- origin_tech = "{'combat':3,'materials':3,'engineering':3}"
+ origin_tech = @'{"combat":3,"materials":3,"engineering":3}'
particle_move_delay = 2 //Was hardcoded to 2 before, and 8 was slower than most mob's move speed
material = /decl/material/solid/metal/steel
matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 16be8b07730..b408d1c88ec 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -10,8 +10,7 @@
base_name = "syringe"
desc = "A syringe."
icon = 'icons/obj/syringe.dmi'
- item_state = "rg0"
- icon_state = "rg"
+ icon_state = ICON_STATE_WORLD
material = /decl/material/solid/glass
amount_per_transfer_from_this = 5
possible_transfer_amounts = @"[1,2,5]"
@@ -19,21 +18,16 @@
w_class = ITEM_SIZE_TINY
slot_flags = SLOT_EARS
sharp = 1
- unacidable = 1 //glass
item_flags = ITEM_FLAG_NO_BLUDGEON
var/mode = SYRINGE_DRAW
- var/image/filling //holds a reference to the current filling overlay
var/visible_name = "a syringe"
var/time = 30
+ var/can_stab = TRUE
/obj/item/chems/syringe/Initialize(var/mapload)
. = ..()
update_icon()
-/obj/item/chems/syringe/on_reagent_change()
- . = ..()
- update_icon()
-
/obj/item/chems/syringe/on_picked_up(mob/user)
. = ..()
update_icon()
@@ -75,7 +69,10 @@
return
if((user.a_intent == I_HURT) && ismob(target))
- syringestab(target, user)
+ if(can_stab)
+ syringestab(target, user)
+ else
+ to_chat(user, SPAN_WARNING("This syringe is too big to stab someone with it."))
return
handleTarget(target, user)
@@ -83,25 +80,20 @@
/obj/item/chems/syringe/on_update_icon()
. = ..()
underlays.Cut()
-
+ icon_state = get_world_inventory_state()
if(mode == SYRINGE_BROKEN)
- icon_state = "broken"
+ icon_state = "[icon_state]_broken"
return
-
- var/rounded_vol = clamp(round((reagents.total_volume / volume * 15),5), 5, 15)
- if (reagents.total_volume == 0)
- rounded_vol = 0
+ var/rounded_vol = 0
+ if (reagents?.total_volume > 0)
+ rounded_vol = clamp(round((reagents.total_volume / volume * 15),5), 5, 15)
if(ismob(loc))
- add_overlay((mode == SYRINGE_DRAW)? "draw" : "inject")
- icon_state = "[initial(icon_state)][rounded_vol]"
- item_state = "syringe_[rounded_vol]"
-
- if(reagents.total_volume)
- filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
-
- filling.icon_state = "syringe[rounded_vol]"
-
+ add_overlay((mode == SYRINGE_DRAW)? "[icon_state]_draw" : "[icon_state]_inject")
+ icon_state = "[icon_state]_[rounded_vol]"
+ if(reagents?.total_volume)
+ var/image/filling = image(icon, "[icon_state]_underlay")
filling.color = reagents.get_color()
+ filling.appearance_flags |= RESET_COLOR
underlays += filling
/obj/item/chems/syringe/proc/handleTarget(var/atom/target, var/mob/user)
@@ -182,7 +174,7 @@
/obj/item/chems/syringe/proc/injectReagents(var/atom/target, var/mob/user)
- if(ismob(target) && !user.skill_check(SKILL_MEDICAL, SKILL_BASIC))
+ if(ismob(target) && !user.skill_check(SKILL_MEDICAL, SKILL_BASIC) && (can_stab == TRUE))
syringestab(target, user)
return
@@ -190,12 +182,14 @@
to_chat(user, SPAN_NOTICE("The syringe is empty."))
mode = SYRINGE_DRAW
return
- if(istype(target, /obj/item/implantcase/chem))
+
+ if(!user.Adjacent(target))
return
- if(!ATOM_IS_OPEN_CONTAINER(target) && !ismob(target) && !istype(target, /obj/item/chems/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/storage/fancy/cigarettes))
+ if(!ismob(target) && (!target.reagents || !target.can_be_injected_by(src)))
to_chat(user, SPAN_NOTICE("You cannot directly fill this object."))
return
+
if(!REAGENTS_FREE_SPACE(target.reagents))
to_chat(user, SPAN_NOTICE("[target] is full."))
return
@@ -315,14 +309,11 @@
visible_name = "a giant syringe"
time = 300
mode = SYRINGE_INJECT
+ can_stab = FALSE
/obj/item/chems/syringe/ld50_syringe/populate_reagents()
reagents.add_reagent(/decl/material/liquid/heartstopper, reagents.maximum_volume)
-/obj/item/chems/syringe/ld50_syringe/syringestab(var/mob/living/carbon/target, var/mob/living/carbon/user)
- to_chat(user, SPAN_NOTICE("This syringe is too big to stab someone with it."))
- return // No instant injecting
-
/obj/item/chems/syringe/ld50_syringe/drawReagents(var/target, var/mob/user)
if(ismob(target)) // No drawing 60 units of blood at once
to_chat(user, SPAN_NOTICE("This needle isn't designed for drawing blood."))
@@ -385,23 +376,23 @@
desc = "An advanced syringe that can hold 60 units of chemicals."
amount_per_transfer_from_this = 20
volume = 60
- icon_state = "bs"
+ icon = 'icons/obj/syringe_advanced.dmi'
material = /decl/material/solid/glass
matter = list(
/decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE,
/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE
)
- origin_tech = "{'biotech':3,'materials':4,'exoticmatter':2}"
+ origin_tech = @'{"biotech":3,"materials":4,"exoticmatter":2}'
/obj/item/chems/syringe/noreact
name = "cryostasis syringe"
desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units."
volume = 20
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT
- icon_state = "cs"
+ atom_flags = ATOM_FLAG_NO_CHEM_CHANGE
+ icon = 'icons/obj/syringe_cryo.dmi'
material = /decl/material/solid/glass
matter = list(
/decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT,
- /decl/material/solid/plastic = MATTER_AMOUNT_TRACE
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE
)
- origin_tech = "{'biotech':4,'materials':4}"
+ origin_tech = @'{"biotech":4,"materials":4}'
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index e725274130a..b7ea1a71c81 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -6,9 +6,9 @@
icon_state = "watertank"
density = TRUE
anchored = FALSE
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY)
- maxhealth = 100
+ max_health = 100
tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT
var/unwrenched = FALSE
var/tmp/volume = 1000
@@ -22,7 +22,8 @@
verbs -= /obj/structure/reagent_dispensers/verb/set_amount_dispensed
/obj/structure/reagent_dispensers/on_reagent_change()
- if(reagents.total_volume > 0)
+ ..()
+ if(reagents?.total_volume > 0)
tool_interaction_flags = 0
else
tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT
@@ -128,7 +129,7 @@
amount_dispensed = 10
possible_transfer_amounts = @"[10,25,50,100]"
volume = 7500
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
movable_flags = MOVABLE_FLAG_WHEELED
/obj/structure/reagent_dispensers/watertank/populate_reagents()
diff --git a/code/modules/reagents/storage/pill_bottle.dm b/code/modules/reagents/storage/pill_bottle.dm
index 989ff2a4180..520683077f3 100644
--- a/code/modules/reagents/storage/pill_bottle.dm
+++ b/code/modules/reagents/storage/pill_bottle.dm
@@ -19,7 +19,7 @@
allow_quick_gather = 1
use_to_pickup = 1
use_sound = 'sound/effects/storage/pillbottle.ogg'
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/pop_sound = 'sound/effects/peelz.ogg'
var/wrapper_color
diff --git a/code/modules/reagents/storage/pill_bottle_subtypes.dm b/code/modules/reagents/storage/pill_bottle_subtypes.dm
index 2f649bddec5..2335449cb94 100644
--- a/code/modules/reagents/storage/pill_bottle_subtypes.dm
+++ b/code/modules/reagents/storage/pill_bottle_subtypes.dm
@@ -1,11 +1,3 @@
-/obj/item/storage/pill_bottle/antitox
- labeled_name = "antitoxins"
- desc = "Contains pills used to counter toxins."
- wrapper_color = COLOR_GREEN
-
-/obj/item/storage/pill_bottle/antitox/WillContain()
- return list(/obj/item/chems/pill/antitox = 21)
-
/obj/item/storage/pill_bottle/brute_meds
labeled_name = "styptic"
desc = "Contains pills used to stabilize the severely injured."
@@ -14,6 +6,14 @@
/obj/item/storage/pill_bottle/brute_meds/WillContain()
return list(/obj/item/chems/pill/brute_meds = 21)
+/obj/item/storage/pill_bottle/sugariron
+ labeled_name = "sugar-iron"
+ desc = "Contains pills used to assist in blood recovery."
+ wrapper_color = COLOR_MAROON
+
+/obj/item/storage/pill_bottle/sugariron/WillContain()
+ return list(/obj/item/chems/pill/sugariron = 21)
+
/obj/item/storage/pill_bottle/oxygen
labeled_name = "oxygen"
desc = "Contains pills used to treat oxygen deprivation."
@@ -24,7 +24,7 @@
/obj/item/storage/pill_bottle/antitoxins
labeled_name = "antitoxins"
- desc = "Contains pills used to treat toxic substances in the blood."
+ desc = "Contains pills used to treat toxic substances."
wrapper_color = COLOR_GREEN
/obj/item/storage/pill_bottle/antitoxins/WillContain()
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 6506a537000..3913386add2 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -235,7 +235,7 @@ var/global/list/all_conveyor_switches = list()
desc = "A conveyor belt assembly. Must be linked to a conveyor control switch assembly before placement."
w_class = ITEM_SIZE_HUGE
material = /decl/material/solid/metal/steel
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT)
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
var/id_tag
/obj/item/conveyor_construct/attackby(obj/item/I, mob/user, params)
diff --git a/code/modules/recycling/destination_tagger.dm b/code/modules/recycling/destination_tagger.dm
index 7a0418a6147..ab74cb34715 100644
--- a/code/modules/recycling/destination_tagger.dm
+++ b/code/modules/recycling/destination_tagger.dm
@@ -7,7 +7,7 @@
icon_state = ICON_STATE_WORLD
w_class = ITEM_SIZE_SMALL
slot_flags = SLOT_LOWER_BODY
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT
)
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index 160e1d50831..0d264554032 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -9,7 +9,7 @@
anchored = FALSE
density = FALSE
material = /decl/material/solid/metal/steel
- level = 2
+ level = LEVEL_ABOVE_PLATING
obj_flags = OBJ_FLAG_ROTATABLE
var/sort_type = ""
var/dpdir = 0 // directions as disposalpipe
@@ -65,7 +65,7 @@
// hide called by levelupdate if turf intact status changes
// change visibility status and force update of icon
/obj/structure/disposalconstruct/hide(var/intact)
- set_invisibility((intact && level==1) ? 101: 0) // hide if floor is intact
+ set_invisibility((intact && level == LEVEL_BELOW_PLATING) ? 101: 0) // hide if floor is intact
update()
/obj/structure/disposalconstruct/proc/flip()
@@ -180,11 +180,11 @@
/obj/structure/disposalconstruct/proc/wrench_down(anchor)
if(anchor)
anchored = TRUE
- level = 1 // We don't want disposal bins to disappear under the floors
+ level = LEVEL_BELOW_PLATING
set_density(0)
else
anchored = FALSE
- level = 2
+ level = LEVEL_ABOVE_PLATING
set_density(1)
/obj/structure/disposalconstruct/machine/check_buildability(obj/structure/disposalpipe/CP, mob/user)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 4aea8101f63..27a50a3634d 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -112,7 +112,7 @@ var/global/list/diversion_junctions = list()
update_icon()
-/obj/machinery/disposal/receive_mouse_drop(atom/dropping, mob/user)
+/obj/machinery/disposal/receive_mouse_drop(atom/dropping, mob/user, params)
. = (user?.a_intent != I_HURT && ..())
@@ -124,7 +124,7 @@ var/global/list/diversion_junctions = list()
var/incapacitation_flags = INCAPACITATION_DEFAULT
if(dropping == user)
incapacitation_flags &= ~INCAPACITATION_RESTRAINED
- if(!dropping.can_mouse_drop(src, user, incapacitation_flags))
+ if(!dropping.can_mouse_drop(src, user, incapacitation_flags, params))
return FALSE
// Todo rewrite all of this.
@@ -538,7 +538,7 @@ var/global/list/diversion_junctions = list()
anchored = TRUE
var/turf/target // this will be where the output objects are 'thrown' to.
var/mode = 0
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE
+ atom_flags = ATOM_FLAG_CLIMBABLE
/obj/structure/disposaloutlet/Initialize()
. = ..()
diff --git a/code/modules/recycling/disposalholder.dm b/code/modules/recycling/disposalholder.dm
index c007a959ce3..120782aaff4 100644
--- a/code/modules/recycling/disposalholder.dm
+++ b/code/modules/recycling/disposalholder.dm
@@ -5,11 +5,11 @@
// this allows the gas flushed to be tracked
/obj/structure/disposalholder
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point
var/active = 0 // true if the holder is moving, otherwise inactive
dir = 0
- var/count = 2048 //*** can travel 2048 steps before going inactive (in case of loops)
+ var/count = 4096 //*** can travel 4096 steps before going inactive (in case of loops)
var/destinationTag = "" // changes if contains a delivery container
var/tomail = 0 //changes if contains wrapped package
var/hasmob = 0 //If it contains a mob
diff --git a/code/modules/recycling/disposalpipe.dm b/code/modules/recycling/disposalpipe.dm
index 935c972c509..1ef619ed011 100644
--- a/code/modules/recycling/disposalpipe.dm
+++ b/code/modules/recycling/disposalpipe.dm
@@ -6,8 +6,8 @@
desc = "An underfloor disposal pipe."
anchored = TRUE
density = FALSE
- maxhealth = 10
- level = 1 // underfloor only
+ max_health = 10
+ level = LEVEL_BELOW_PLATING
dir = 0 // dir will contain dominant direction for junction pipes
alpha = 192 // Plane and alpha modified for mapping, reset to normal on spawn.
layer = ABOVE_TILE_LAYER
@@ -164,7 +164,7 @@
var/obj/structure/disposalpipe/broken/P = new(src.loc)
P.set_dir(D)
- src.set_invisibility(101) // make invisible (since we won't delete the pipe immediately)
+ src.set_invisibility(INVISIBILITY_ABSTRACT) // make invisible (since we won't delete the pipe immediately)
var/obj/structure/disposalholder/H = locate() in src
if(H)
// holder was present
diff --git a/code/modules/recycling/package_wrapper.dm b/code/modules/recycling/package_wrapper.dm
index 40e308f2c95..4333cf48d40 100644
--- a/code/modules/recycling/package_wrapper.dm
+++ b/code/modules/recycling/package_wrapper.dm
@@ -31,15 +31,15 @@
singular_name = "sheet"
w_class = ITEM_SIZE_NORMAL
max_amount = 50
- material = /decl/material/solid/paper
+ material = /decl/material/solid/organic/paper
force = 1
throwforce = 1
throw_range = 5
throw_speed = 3
item_flags = ITEM_FLAG_NO_BLUDGEON
- ///Check to prevent people from wrapping something multiple times at once.
+ /// Check to prevent people from wrapping something multiple times at once.
var/tmp/currently_wrapping = FALSE
- ///The type of wrapped item that will be produced
+ /// The type of wrapped item that will be produced
var/tmp/wrapped_result_type = /obj/item/parcel
/obj/item/stack/package_wrap/twenty_five
@@ -125,15 +125,15 @@
/obj/item/stack/package_wrap/create_matter()
. = ..()
//Cardboard for the tube, isn't in the matter_per_piece list, has to be added after that's been initialized
- LAZYSET(matter, /decl/material/solid/cardboard, MATTER_AMOUNT_PRIMARY * HOLLOW_OBJECT_MATTER_MULTIPLIER)
+ LAZYSET(matter, /decl/material/solid/organic/cardboard, MATTER_AMOUNT_PRIMARY * HOLLOW_OBJECT_MATTER_MULTIPLIER)
/obj/item/stack/package_wrap/update_matter()
//Keep track of the cardboard amount to prevent it creating infinite cardboard matter each times the stack changes
- var/cardboard_amount = LAZYACCESS(matter, /decl/material/solid/cardboard)
+ var/cardboard_amount = LAZYACCESS(matter, /decl/material/solid/organic/cardboard)
matter = list()
for(var/mat in matter_per_piece)
matter[mat] = (matter_per_piece[mat] * amount)
- matter[/decl/material/solid/cardboard] = cardboard_amount
+ matter[/decl/material/solid/organic/cardboard] = cardboard_amount
///Types that the wrapper cannot wrap, ever
/obj/item/stack/package_wrap/proc/get_blacklist()
@@ -190,5 +190,5 @@
throwforce = 1
throw_speed = 4
throw_range = 5
- material = /decl/material/solid/cardboard
+ material = /decl/material/solid/organic/cardboard
obj_flags = OBJ_FLAG_HOLLOW
diff --git a/code/modules/recycling/wrapped_package.dm b/code/modules/recycling/wrapped_package.dm
index ce253f7fa2e..857474bb831 100644
--- a/code/modules/recycling/wrapped_package.dm
+++ b/code/modules/recycling/wrapped_package.dm
@@ -11,7 +11,7 @@
icon = 'icons/obj/items/storage/deliverypackage.dmi'
icon_state = "parcel"
obj_flags = OBJ_FLAG_HOLLOW
- material = /decl/material/solid/paper
+ material = /decl/material/solid/organic/paper
attack_verb = list("delivered a hit", "expedited on", "shipped at", "went postal on")
base_parry_chance = 40 //Boxes tend to be good at parrying
///A text note attached to the parcel that shows on examine
diff --git a/code/modules/research/design_database_analyzer.dm b/code/modules/research/design_database_analyzer.dm
index bce7bff5a42..b0c3c4150bb 100644
--- a/code/modules/research/design_database_analyzer.dm
+++ b/code/modules/research/design_database_analyzer.dm
@@ -114,7 +114,7 @@
loaded_item = O
to_chat(user, SPAN_NOTICE("You add \the [O] to \the [src]."))
flick("d_analyzer_la", src)
- addtimer(CALLBACK(src, .proc/refresh_busy), 1 SECOND)
+ addtimer(CALLBACK(src, PROC_REF(refresh_busy)), 1 SECOND)
return TRUE
/obj/machinery/destructive_analyzer/proc/refresh_busy()
@@ -140,12 +140,12 @@
else
loaded_item = null
flick("d_analyzer_process", src)
- addtimer(CALLBACK(src, .proc/refresh_busy), 2 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(refresh_busy)), 2 SECONDS)
/obj/item/research
name = "research debugging device"
desc = "Instant research tool. For testing purposes only."
icon = 'icons/obj/items/stock_parts/stock_parts.dmi'
icon_state = "smes_coil"
- origin_tech = "{'materials':19,'engineering':19,'exoticmatter':19,'powerstorage':19,'wormholes':19,'biotech':19,'combat':19,'magnets':19,'programming':19,'esoteric':19}"
+ origin_tech = @'{"materials":19,"engineering":19,"exoticmatter":19,"powerstorage":19,"wormholes":19,"biotech":19,"combat":19,"magnets":19,"programming":19,"esoteric":19}'
max_health = ITEM_HEALTH_NO_DAMAGE
diff --git a/code/modules/sealant_gun/sealant_gun.dm b/code/modules/sealant_gun/sealant_gun.dm
index 4a7cf1719c1..57dc500ade3 100644
--- a/code/modules/sealant_gun/sealant_gun.dm
+++ b/code/modules/sealant_gun/sealant_gun.dm
@@ -22,10 +22,12 @@
if(loaded_tank)
add_overlay("[icon_state]-tank")
-/obj/item/gun/launcher/sealant/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+/obj/item/gun/launcher/sealant/apply_gun_mob_overlays(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
if(overlay && loaded_tank)
- overlay.overlays += image(overlay.icon, "[overlay.icon_state]-tank")
- . = ..()
+ var/tank_state = "[overlay.icon_state]-tank"
+ if(check_state_in_icon(tank_state, overlay.icon))
+ overlay.overlays += image(overlay.icon, tank_state)
+ ..()
/obj/item/gun/launcher/sealant/mapped
loaded_tank = /obj/item/sealant_tank/mapped
diff --git a/code/modules/security levels/keycard_authentication.dm b/code/modules/security levels/keycard_authentication.dm
index 036f61b6f6b..6af4ec58fdc 100644
--- a/code/modules/security levels/keycard_authentication.dm
+++ b/code/modules/security levels/keycard_authentication.dm
@@ -9,7 +9,7 @@
active_power_usage = 6
power_channel = ENVIRON
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
- directional_offset = "{'NORTH':{'y':-20}, 'SOUTH':{'y':28}, 'EAST':{'x':-24}, 'WEST':{'x':24}}"
+ directional_offset = @'{"NORTH":{"y":-20}, "SOUTH":{"y":28}, "EAST":{"x":-24}, "WEST":{"x":24}}'
var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made.
var/event = ""
@@ -79,7 +79,7 @@
else
dat += "Engage [security_state.high_security_level.name]"
- if(!config.ert_admin_call_only)
+ if(!get_config_value(/decl/config/toggle/ert_admin_call_only))
dat += "Emergency Response Team"
dat += "Grant Emergency Maintenance Access"
@@ -130,10 +130,10 @@
if(KA == src)
continue
KA.reset()
- addtimer(CALLBACK(src, .proc/receive_request, src, initial_card.resolve()))
+ addtimer(CALLBACK(src, PROC_REF(receive_request), src, initial_card.resolve()))
if(confirm_delay)
- addtimer(CALLBACK(src, .proc/broadcast_check), confirm_delay)
+ addtimer(CALLBACK(src, PROC_REF(broadcast_check)), confirm_delay)
/obj/machinery/keycard_auth/proc/broadcast_check()
if(confirmed)
@@ -192,8 +192,9 @@
SSstatistics.add_field("alert_keycard_auth_nukecode",1)
/obj/machinery/keycard_auth/proc/is_ert_blocked()
- if(config.ert_admin_call_only) return 1
- return SSticker.mode && SSticker.mode.ert_disabled
+ if(get_config_value(/decl/config/toggle/ert_admin_call_only))
+ return TRUE
+ return SSticker.mode?.ert_disabled
/obj/machinery/keycard_auth/update_directional_offset(force = FALSE)
if(!force && (!length(directional_offset) || !is_wall_mounted())) //Check if the thing is actually mapped onto a table or something
diff --git a/code/modules/shield_generators/floor_diffuser.dm b/code/modules/shield_generators/floor_diffuser.dm
index 8b9db779986..1cfeb54a6e3 100644
--- a/code/modules/shield_generators/floor_diffuser.dm
+++ b/code/modules/shield_generators/floor_diffuser.dm
@@ -8,7 +8,7 @@
active_power_usage = 2000
anchored = TRUE
density = FALSE
- level = 1
+ level = LEVEL_BELOW_PLATING
construct_state = /decl/machine_construction/default/panel_closed
uncreated_component_parts = null
stat_immune = 0
diff --git a/code/modules/shield_generators/handheld_diffuser.dm b/code/modules/shield_generators/handheld_diffuser.dm
index 03a2919b3e3..d74998a1b38 100644
--- a/code/modules/shield_generators/handheld_diffuser.dm
+++ b/code/modules/shield_generators/handheld_diffuser.dm
@@ -3,15 +3,13 @@
desc = "A small handheld device designed to disrupt energy barriers."
icon = 'icons/obj/machines/shielding.dmi'
icon_state = "hdiffuser_off"
- origin_tech = "{'magnets':5,'powerstorage':5,'esoteric':2}"
+ origin_tech = @'{"magnets":5,"powerstorage":5,"esoteric":2}'
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
/decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE,
/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE
)
-
- var/obj/item/cell/device/cell
var/enabled = 0
/obj/item/shield_diffuser/on_update_icon()
@@ -22,20 +20,17 @@
icon_state = "hdiffuser_off"
/obj/item/shield_diffuser/Initialize()
+ set_extension(src, /datum/extension/loaded_cell/unremovable, /obj/item/cell/device, /obj/item/cell/device/standard)
. = ..()
- cell = new(src)
/obj/item/shield_diffuser/Destroy()
- QDEL_NULL(cell)
if(enabled)
STOP_PROCESSING(SSobj, src)
. = ..()
-/obj/item/shield_diffuser/get_cell()
- return cell
-
/obj/item/shield_diffuser/Process()
- if(!enabled)
+ var/obj/item/cell/cell = get_cell()
+ if(!enabled || !cell)
return
for(var/direction in global.cardinal)
@@ -56,5 +51,4 @@
/obj/item/shield_diffuser/examine(mob/user)
. = ..()
- to_chat(user, "The charge meter reads [cell ? cell.percent() : 0]%")
to_chat(user, "It is [enabled ? "enabled" : "disabled"].")
diff --git a/code/modules/shield_generators/shield.dm b/code/modules/shield_generators/shield.dm
index c4fac1ab095..af9266beaba 100644
--- a/code/modules/shield_generators/shield.dm
+++ b/code/modules/shield_generators/shield.dm
@@ -7,7 +7,7 @@
anchored = TRUE
layer = ABOVE_HUMAN_LAYER
density = TRUE
- invisibility = 0
+ invisibility = INVISIBILITY_NONE
atmos_canpass = CANPASS_PROC
var/obj/machinery/shield_generator/gen = null
var/disabled_for = 0
@@ -94,7 +94,7 @@
if(!disabled_for && !diffused_for)
set_density(1)
- set_invisibility(0)
+ set_invisibility(INVISIBILITY_NONE)
update_nearby_tiles()
update_icon(TRUE)
update_explosion_resistance()
@@ -201,10 +201,10 @@
// Fire
/obj/effect/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ SHOULD_CALL_PARENT(FALSE)
if(!disabled_for)
take_damage(rand(5,10), SHIELD_DAMTYPE_HEAT)
-
// Projectiles
/obj/effect/shield/bullet_act(var/obj/item/projectile/proj)
if(proj.damage_type == BURN)
@@ -322,7 +322,7 @@
affected_shields |= src
i--
if(i)
- addtimer(CALLBACK(src, .proc/spread_impact_effect, i, affected_shields), 2)
+ addtimer(CALLBACK(src, PROC_REF(spread_impact_effect), i, affected_shields), 2)
/obj/effect/shield/proc/spread_impact_effect(var/i, var/list/affected_shields = list())
for(var/direction in global.cardinal)
diff --git a/code/modules/shield_generators/shield_generator.dm b/code/modules/shield_generators/shield_generator.dm
index d0a84fc3e8f..0b4a9d14a47 100644
--- a/code/modules/shield_generators/shield_generator.dm
+++ b/code/modules/shield_generators/shield_generator.dm
@@ -57,7 +57,7 @@
for(var/st in subtypesof(/datum/shield_mode/))
var/datum/shield_mode/SM = new st()
mode_list.Add(SM)
- events_repository.register(/decl/observ/moved, src, src, .proc/update_overmap_shield_list)
+ events_repository.register(/decl/observ/moved, src, src, PROC_REF(update_overmap_shield_list))
. = INITIALIZE_HINT_LATELOAD
/obj/machinery/shield_generator/LateInitialize()
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index d9d5180c51b..32b40b200be 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -1,21 +1,19 @@
/obj/machinery/shield
- name = "Emergency energy shield"
+ name = "emergency energy shield"
desc = "An energy shield used to contain hull breaches."
icon = 'icons/effects/effects.dmi'
icon_state = "shield-old"
density = TRUE
opacity = FALSE
anchored = TRUE
- unacidable = 1
- var/const/max_health = 200
- var/health = max_health //The shield can only take so much beating (prevents perma-prisons)
+ max_health = 200
var/shield_generate_power = 7500 //how much power we use when regenerating
var/shield_idle_power = 1500 //how much power we use when just being sustained.
/obj/machinery/shield/malfai
name = "emergency forcefield"
desc = "A weak forcefield which seems to be projected by the emergency atmosphere containment field."
- health = max_health/2 // Half health, it's not suposed to resist much.
+ max_health = 100 // Half health, it's not suposed to resist much.
/obj/machinery/shield/malfai/Process()
health -= 0.5 // Slowly lose integrity over time
@@ -111,8 +109,7 @@
opacity = FALSE
anchored = FALSE
initial_access = list(access_engine)
- var/const/max_health = 100
- var/health = max_health
+ max_health = 100
var/active = 0
var/malfunction = 0 //Malfunction causes parts of the shield to slowly dissapate
var/list/deployed_shields = list()
@@ -277,7 +274,7 @@
else if(IS_COIL(W) && malfunction && is_open)
var/obj/item/stack/cable_coil/coil = W
to_chat(user, "You begin to replace the wires.")
- //if(do_after(user, min(60, round( ((maxhealth/health)*10)+(malfunction*10) ))) //Take longer to repair heavier damage
+ //if(do_after(user, min(60, round( ((max_health/health)*10)+(malfunction*10) ))) //Take longer to repair heavier damage
if(do_after(user, 30,src))
if (coil.use(1))
health = max_health
diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm
index 5b551e8832f..63ce6167e33 100644
--- a/code/modules/shieldgen/energy_field.dm
+++ b/code/modules/shieldgen/energy_field.dm
@@ -9,7 +9,7 @@
anchored = TRUE
layer = PROJECTILE_LAYER
density = FALSE
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
var/strength = 0
var/ticks_recovering = 10
@@ -35,12 +35,12 @@
//if we take too much damage, drop out - the generator will bring us back up if we have enough power
ticks_recovering = min(ticks_recovering + 2, 10)
if(strength < 1)
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
set_density(0)
ticks_recovering = 10
strength = 0
else if(strength >= 1)
- set_invisibility(0)
+ set_invisibility(INVISIBILITY_NONE)
set_density(1)
/obj/effect/energy_field/proc/Strengthen(var/severity)
@@ -51,10 +51,10 @@
//if we take too much damage, drop out - the generator will bring us back up if we have enough power
var/old_density = density
if(strength >= 1)
- set_invisibility(0)
+ set_invisibility(INVISIBILITY_NONE)
set_density(1)
else if(strength < 1)
- set_invisibility(101)
+ set_invisibility(INVISIBILITY_ABSTRACT)
set_density(0)
if (density != old_density)
diff --git a/code/modules/shieldgen/shieldwallgen.dm b/code/modules/shieldgen/shieldwallgen.dm
index 142f5796c60..75caf91139e 100644
--- a/code/modules/shieldgen/shieldwallgen.dm
+++ b/code/modules/shieldgen/shieldwallgen.dm
@@ -258,13 +258,12 @@
//////////////Containment Field START
/obj/machinery/shieldwall
- name = "Shield"
+ name = "shield"
desc = "An energy shield."
icon = 'icons/effects/effects.dmi'
icon_state = "shieldwall"
anchored = TRUE
density = TRUE
- unacidable = 1
light_range = 3
var/needs_power = 0
var/obj/machinery/shieldwallgen/gen_primary
diff --git a/code/modules/shuttles/docking_beacon.dm b/code/modules/shuttles/docking_beacon.dm
index a8b99cbc9e1..84721e66431 100644
--- a/code/modules/shuttles/docking_beacon.dm
+++ b/code/modules/shuttles/docking_beacon.dm
@@ -153,7 +153,7 @@
for(var/turf/T in get_turfs())
new /obj/effect/temporary(T, 5 SECONDS,'icons/effects/alphacolors.dmi', "green")
projecting = TRUE
- addtimer(CALLBACK(src, .proc/allow_projection), 10 SECONDS) // No spamming holograms.
+ addtimer(CALLBACK(src, PROC_REF(allow_projection)), 10 SECONDS) // No spamming holograms.
if(href_list["settings"])
D.ui_interact(user)
diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm
index a735fb61aaa..755791d1755 100644
--- a/code/modules/shuttles/landmarks.dm
+++ b/code/modules/shuttles/landmarks.dm
@@ -6,9 +6,8 @@ var/global/list/shuttle_landmarks = list()
icon = 'icons/effects/effects.dmi'
icon_state = "energynet"
anchored = TRUE
- unacidable = 1
- simulated = 0
- invisibility = 101
+ simulated = FALSE
+ invisibility = INVISIBILITY_ABSTRACT
var/landmark_tag
//ID of the controller on the dock side
@@ -176,7 +175,7 @@ var/global/list/shuttle_landmarks = list()
icon = 'icons/obj/items/device/long_range_flare.dmi'
icon_state = "bluflare"
light_color = "#3728ff"
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/active
/obj/item/spaceflare/attack_self(var/mob/user)
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index 3d75695bb52..d350dc21c37 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -16,6 +16,7 @@
var/multiz = 0 //how many multiz levels, starts at 0
var/ceiling_type = /turf/unsimulated/floor/shuttle_ceiling
+ var/force_ceiling_on_init = TRUE // Whether or not to force ceilings turfs to be created above on initialization.
var/sound_takeoff = 'sound/effects/shuttle_takeoff.ogg'
var/sound_landing = 'sound/effects/shuttle_landing.ogg'
@@ -48,7 +49,7 @@
for(var/area_type in shuttle_area)
if(istype(area_type, /area)) // If the shuttle area is already an instance, it does not need to be located.
areas += area_type
- events_repository.register(/decl/observ/destroyed, area_type, src, .proc/remove_shuttle_area)
+ events_repository.register(/decl/observ/destroyed, area_type, src, PROC_REF(remove_shuttle_area))
continue
var/area/A
if(map_hash && islist(SSshuttle.map_hash_to_areas[map_hash]))
@@ -58,7 +59,7 @@
if(!istype(A))
CRASH("Shuttle \"[name]\" couldn't locate area [area_type].")
areas += A
- events_repository.register(/decl/observ/destroyed, A, src, .proc/remove_shuttle_area)
+ events_repository.register(/decl/observ/destroyed, A, src, PROC_REF(remove_shuttle_area))
shuttle_area = areas
if(initial_location)
@@ -80,8 +81,10 @@
CRASH("A supply shuttle is already defined.")
SSsupply.shuttle = src
+ create_ceiling(force_ceiling_on_init)
+
/datum/shuttle/proc/remove_shuttle_area(area/area_to_remove)
- events_repository.unregister(/decl/observ/destroyed, area_to_remove, src, .proc/remove_shuttle_area)
+ events_repository.unregister(/decl/observ/destroyed, area_to_remove, src, PROC_REF(remove_shuttle_area))
SSshuttle.shuttle_areas -= area_to_remove
shuttle_area -= area_to_remove
if(!length(shuttle_area))
@@ -252,14 +255,7 @@
current_location = destination
// if there's a zlevel above our destination, paint in a ceiling on it so we retain our air
- if(HasAbove(current_location.z))
- for(var/area/A in shuttle_area)
- for(var/turf/TD in A.contents)
- var/turf/TA = GetAbove(TD)
- if(istype(TA, get_base_turf_by_area(TA)) || (istype(TA) && TA.is_open()))
- if(get_area(TA) in shuttle_area)
- continue
- TA.ChangeTurf(ceiling_type, TRUE, TRUE, TRUE)
+ create_ceiling()
handle_pipes_and_power_on_move(new_turfs)
@@ -305,6 +301,20 @@
for(var/obj/machinery/atmospherics/pipe as anything in pipes)
pipe.build_network()
+/datum/shuttle/proc/create_ceiling(force)
+ if(!HasAbove(current_location.z))
+ return
+ for(var/area/A in shuttle_area)
+ for(var/turf/TD in A.contents)
+ // Background turfs don't get a ceiling.
+ if(TD.turf_flags & TURF_FLAG_BACKGROUND)
+ continue
+ var/turf/TA = GetAbove(TD)
+ if(force || (istype(TA, get_base_turf_by_area(TA)) || (istype(TA) && TA.is_open())))
+ if(get_area(TA) in shuttle_area)
+ continue
+ TA.ChangeTurf(ceiling_type, TRUE, TRUE, TRUE, TRUE)
+
//returns 1 if the shuttle has a valid arrive time
/datum/shuttle/proc/has_arrive_time()
return (moving_status == SHUTTLE_INTRANSIT)
diff --git a/code/modules/shuttles/shuttle_specops.dm b/code/modules/shuttles/shuttle_specops.dm
index bac28ece8f5..e028cd81130 100644
--- a/code/modules/shuttles/shuttle_specops.dm
+++ b/code/modules/shuttles/shuttle_specops.dm
@@ -155,7 +155,7 @@
for(var/obj/abstract/landmark/L in global.landmarks_list)
if(L.name == "Marauder Exit")
var/obj/effect/portal/P = new(L.loc)
- P.set_invisibility(101)//So it is not seen by anyone.
+ P.set_invisibility(INVISIBILITY_ABSTRACT)//So it is not seen by anyone.
P.failchance = 0//So it has no fail chance when teleporting.
P.target = pick(spawn_marauder)//Where the marauder will arrive.
spawn_marauder.Remove(P.target)
diff --git a/code/modules/species/outsider/random.dm b/code/modules/species/outsider/random.dm
index a68048eedf6..25f6d1e3709 100644
--- a/code/modules/species/outsider/random.dm
+++ b/code/modules/species/outsider/random.dm
@@ -15,6 +15,15 @@
base_color = RANDOM_RGB
MULT_BY_RANDOM_COEF(eye_flash_mod, 0.5, 1.5)
eye_darksight_range = rand(1,8)
+ var/temp_comfort_shift = rand(-50,50)
+ cold_level_1 += temp_comfort_shift
+ cold_level_2 += temp_comfort_shift
+ cold_level_3 += temp_comfort_shift
+ heat_level_1 += temp_comfort_shift
+ heat_level_2 += temp_comfort_shift
+ heat_level_3 += temp_comfort_shift
+ heat_discomfort_level += temp_comfort_shift
+ cold_discomfort_level += temp_comfort_shift
. = ..()
/decl/species/alium
@@ -74,17 +83,6 @@
//Environment
var/temp_comfort_shift = rand(-50,50)
- cold_level_1 += temp_comfort_shift
- cold_level_2 += temp_comfort_shift
- cold_level_3 += temp_comfort_shift
-
- heat_level_1 += temp_comfort_shift
- heat_level_2 += temp_comfort_shift
- heat_level_3 += temp_comfort_shift
-
- heat_discomfort_level += temp_comfort_shift
- cold_discomfort_level += temp_comfort_shift
-
body_temperature += temp_comfort_shift
var/pressure_comfort_shift = rand(-50,50)
@@ -108,44 +106,6 @@
return ..()
return blood_color
-/decl/species/alium/proc/adapt_to_atmosphere(var/datum/gas_mixture/atmosphere)
- var/temp_comfort_shift = atmosphere.temperature - body_temperature
-
- cold_level_1 += temp_comfort_shift
- cold_level_2 += temp_comfort_shift
- cold_level_3 += temp_comfort_shift
-
- heat_level_1 += temp_comfort_shift
- heat_level_2 += temp_comfort_shift
- heat_level_3 += temp_comfort_shift
-
- heat_discomfort_level += temp_comfort_shift
- cold_discomfort_level += temp_comfort_shift
-
- body_temperature += temp_comfort_shift
-
- var/normal_pressure = atmosphere.return_pressure()
- hazard_high_pressure = 5 * normal_pressure
- warning_high_pressure = 0.7 * hazard_high_pressure
-
- hazard_low_pressure = 0.2 * normal_pressure
- warning_low_pressure = 2.5 * hazard_low_pressure
-
- breath_type = pick(atmosphere.gas)
- breath_pressure = 0.8*(atmosphere.gas[breath_type]/atmosphere.total_moles)*normal_pressure
-
- var/list/newgases = decls_repository.get_decl_paths_of_subtype(/decl/material/gas)
- newgases = newgases.Copy()
- newgases ^= atmosphere.gas
- for(var/gas in newgases)
- var/decl/material/mat = GET_DECL(gas)
- if(mat.gas_flags & (XGM_GAS_OXIDIZER|XGM_GAS_FUEL))
- newgases -= gas
- if(newgases.len)
- poison_types = list(pick_n_take(newgases))
- if(newgases.len)
- exhale_type = pick_n_take(newgases)
-
/obj/structure/aliumizer
name = "alien monolith"
desc = "Your true form is calling. Use this to become an alien humanoid."
diff --git a/code/modules/species/outsider/starlight.dm b/code/modules/species/outsider/starlight.dm
index 9d06d562de6..76ba51fd1aa 100644
--- a/code/modules/species/outsider/starlight.dm
+++ b/code/modules/species/outsider/starlight.dm
@@ -37,12 +37,29 @@
icon_state = "ash"
/decl/bodytype/starlight/starborn
- name = "starborn"
- desc = "A blazing mass of light."
- icon_base = 'icons/mob/human_races/species/starborn/body.dmi'
- icon_deformed = 'icons/mob/human_races/species/starborn/body.dmi'
- husk_icon = 'icons/mob/human_races/species/starborn/husk.dmi'
- body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
+ name = "starborn"
+ desc = "A blazing mass of light."
+ icon_base = 'icons/mob/human_races/species/starborn/body.dmi'
+ icon_deformed = 'icons/mob/human_races/species/starborn/body.dmi'
+ husk_icon = 'icons/mob/human_races/species/starborn/husk.dmi'
+ body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
+ cold_level_1 = 260
+ cold_level_2 = 250
+ cold_level_3 = 235
+ heat_level_1 = 20000
+ heat_level_2 = 30000
+ heat_level_3 = 40000
+ cold_discomfort_level = 300
+ cold_discomfort_strings = list(
+ "You feel your fire dying out...",
+ "Your fire begins to shrink away from the cold.",
+ "You feel slow and sluggish from the cold."
+ )
+ heat_discomfort_level = 10000
+ heat_discomfort_strings = list(
+ "Surprisingly, you start burning!",
+ "You're... burning!?!"
+ )
/decl/blood_type/starstuff
name = "starstuff"
@@ -52,7 +69,7 @@
splatter_colour = "#ffff00"
/decl/species/starlight/handle_death(var/mob/living/carbon/human/H)
- addtimer(CALLBACK(H,/mob/proc/dust),0)
+ addtimer(CALLBACK(H, TYPE_PROC_REF(/mob, dust)),0)
/decl/species/starlight/starborn
name = "Starborn"
@@ -67,22 +84,6 @@
unarmed_attacks = list(/decl/natural_attack/punch/starborn)
- cold_discomfort_level = 300
- cold_discomfort_strings = list("You feel your fire dying out...",
- "Your fire begins to shrink away from the cold.",
- "You feel slow and sluggish from the cold."
- )
- cold_level_1 = 260
- cold_level_2 = 250
- cold_level_3 = 235
-
- heat_discomfort_level = 10000
- heat_discomfort_strings = list("Surprisingly, you start burning!",
- "You're... burning!?!")
- heat_level_1 = 20000
- heat_level_2 = 30000
- heat_level_3 = 40000
-
warning_low_pressure = 50
hazard_low_pressure = 0
siemens_coefficient = 0
diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm
index 193beec938f..2130b66b273 100644
--- a/code/modules/species/species.dm
+++ b/code/modules/species/species.dm
@@ -22,6 +22,12 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
var/decl/bodytype/default_bodytype
var/base_prosthetics_model = /decl/bodytype/prosthetic/basic_human
+ // Lists of accessory types for modpack modification of accessory restrictions.
+ // These lists are pretty broad and indiscriminate in application, don't use
+ // them for fine detail restriction/allowing if you can avoid it.
+ var/list/allow_specific_sprite_accessories
+ var/list/disallow_specific_sprite_accessories
+
var/list/blood_types = list(
/decl/blood_type/aplus,
/decl/blood_type/aminus,
@@ -82,9 +88,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
// Death vars.
var/meat_type = /obj/item/chems/food/meat/human
var/meat_amount = 3
- var/skin_material = /decl/material/solid/skin
+ var/skin_material = /decl/material/solid/organic/skin
var/skin_amount = 3
- var/bone_material = /decl/material/solid/bone
+ var/bone_material = /decl/material/solid/organic/bone
var/bone_amount = 3
var/remains_type = /obj/item/remains/xeno
var/gibbed_anim = "gibbed-h"
@@ -111,12 +117,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
var/blood_reagent = /decl/material/liquid/blood
var/max_pressure_diff = 60 // Maximum pressure difference that is safe for lungs
- var/cold_level_1 = 243 // Cold damage level 1 below this point. -30 Celsium degrees
- var/cold_level_2 = 200 // Cold damage level 2 below this point.
- var/cold_level_3 = 120 // Cold damage level 3 below this point.
- var/heat_level_1 = 360 // Heat damage level 1 above this point.
- var/heat_level_2 = 400 // Heat damage level 2 above this point.
- var/heat_level_3 = 1000 // Heat damage level 3 above this point.
+
var/passive_temp_gain = 0 // Species will gain this much temperature every second
var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure.
var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
@@ -124,19 +125,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
var/body_temperature = 310.15 // Species will try to stabilize at this temperature.
// (also affects temperature processing)
- var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm.
- var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly.
- var/list/heat_discomfort_strings = list(
- "You feel sweat drip down your neck.",
- "You feel uncomfortably warm.",
- "Your skin prickles in the heat."
- )
- var/list/cold_discomfort_strings = list(
- "You feel chilly.",
- "You shiver suddenly.",
- "Your chilly flesh stands out in goosebumps."
- )
-
var/water_soothe_amount
// HUD data vars.
@@ -305,6 +293,42 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
available_bodytypes -= bodytype
available_bodytypes += GET_DECL(bodytype)
+ // Update sprite accessory lists for these species.
+ for(var/accessory_type in allow_specific_sprite_accessories)
+ var/decl/sprite_accessory/accessory = GET_DECL(accessory_type)
+ // If this accessory is species restricted, add us to the list.
+ if(accessory.species_allowed)
+ accessory.species_allowed |= name
+ if(!isnull(accessory.body_flags_allowed))
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.body_flags_allowed |= bodytype.body_flags
+ if(!isnull(accessory.body_flags_denied))
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.body_flags_denied &= ~bodytype.body_flags
+ if(accessory.bodytype_categories_allowed)
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.bodytype_categories_allowed |= bodytype.bodytype_category
+ if(accessory.bodytype_categories_denied)
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.bodytype_categories_allowed -= bodytype.bodytype_category
+
+ for(var/accessory_type in disallow_specific_sprite_accessories)
+ var/decl/sprite_accessory/accessory = GET_DECL(accessory_type)
+ if(accessory.species_allowed)
+ accessory.species_allowed -= name
+ if(!isnull(accessory.body_flags_allowed))
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.body_flags_allowed &= ~bodytype.body_flags
+ if(!isnull(accessory.body_flags_denied))
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.body_flags_denied |= bodytype.body_flags
+ if(accessory.bodytype_categories_allowed)
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.bodytype_categories_allowed -= bodytype.bodytype_category
+ if(accessory.bodytype_categories_denied)
+ for(var/decl/bodytype/bodytype in available_bodytypes)
+ accessory.bodytype_categories_allowed |= bodytype.bodytype_category
+
if(ispath(default_bodytype))
default_bodytype = GET_DECL(default_bodytype)
else if(length(available_bodytypes) && !default_bodytype)
@@ -382,31 +406,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
else if(!ispath(age_descriptor, /datum/appearance_descriptor/age))
. += "age descriptor was not a /datum/appearance_descriptor/age subtype"
- if(cold_level_3)
- if(cold_level_2)
- if(cold_level_3 > cold_level_2)
- . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_2 ([cold_level_2])"
- if(cold_level_1)
- if(cold_level_3 > cold_level_1)
- . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_1 ([cold_level_1])"
- if(cold_level_2 && cold_level_1)
- if(cold_level_2 > cold_level_1)
- . += "cold_level_2 ([cold_level_2]) was not lower than cold_level_1 ([cold_level_1])"
-
- if(heat_level_3 != INFINITY)
- if(heat_level_2 != INFINITY)
- if(heat_level_3 < heat_level_2)
- . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_2 ([heat_level_2])"
- if(heat_level_1 != INFINITY)
- if(heat_level_3 < heat_level_1)
- . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_1 ([heat_level_1])"
- if((heat_level_2 != INFINITY) && (heat_level_1 != INFINITY))
- if(heat_level_2 < heat_level_1)
- . += "heat_level_2 ([heat_level_2]) was not higher than heat_level_1 ([heat_level_1])"
-
- if(min(heat_level_1, heat_level_2, heat_level_3) <= max(cold_level_1, cold_level_2, cold_level_3))
- . += "heat and cold damage level thresholds overlap"
-
if(taste_sensitivity < 0)
. += "taste_sensitivity ([taste_sensitivity]) was negative"
@@ -542,7 +541,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
H.set_fullscreen(GET_STATUS(H, STAT_BLIND) && !H.equipment_prescription, "blind", /obj/screen/fullscreen/blind)
H.set_fullscreen(H.stat == UNCONSCIOUS, "blackout", /obj/screen/fullscreen/blackout)
- if(config.welder_vision)
+ if(get_config_value(/decl/config/toggle/on/welder_vision))
H.set_fullscreen(H.equipment_tint_total, "welder", /obj/screen/fullscreen/impaired, H.equipment_tint_total)
var/how_nearsighted = get_how_nearsighted(H)
H.set_fullscreen(how_nearsighted, "nearsighted", /obj/screen/fullscreen/oxy, how_nearsighted)
@@ -827,20 +826,3 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
H.mob_swap_flags = swap_flags
H.mob_push_flags = push_flags
H.pass_flags = pass_flags
-
-/decl/species/proc/get_species_temperature_threshold(var/threshold)
- switch(threshold)
- if(COLD_LEVEL_1)
- return cold_level_1
- if(COLD_LEVEL_2)
- return cold_level_2
- if(COLD_LEVEL_3)
- return cold_level_3
- if(HEAT_LEVEL_1)
- return heat_level_1
- if(HEAT_LEVEL_2)
- return heat_level_2
- if(HEAT_LEVEL_3)
- return heat_level_3
- else
- CRASH("get_species_temperature_threshold() called with invalid threshold value.")
diff --git a/code/modules/species/species_bodytype.dm b/code/modules/species/species_bodytype.dm
index 9b5776aa4d2..ae81a69ab11 100644
--- a/code/modules/species/species_bodytype.dm
+++ b/code/modules/species/species_bodytype.dm
@@ -23,7 +23,7 @@ var/global/list/bodytypes_by_category = list()
var/appearance_flags = 0 // Appearance/display related features.
/// What tech levels should limbs of this type use/need?
- var/limb_tech = "{'biotech':2}"
+ var/limb_tech = @'{"biotech":2}'
var/icon_cache_uid
/// Determines if eyes should render on heads using this bodytype.
var/has_eyes = TRUE
@@ -79,19 +79,15 @@ var/global/list/bodytypes_by_category = list()
'sound/foley/meat2.ogg'
)
- var/list/synthetic_bodyfall_sounds = list(
- 'sound/foley/metal1.ogg'
- )
-
// Used for initializing prefs/preview
var/base_color = COLOR_BLACK
var/base_eye_color = COLOR_BLACK
var/base_hair_color = COLOR_BLACK
/// Used to initialize organ material
- var/material = /decl/material/solid/meat
+ var/material = /decl/material/solid/organic/meat
/// Used to initialize organ matter
- var/matter = null
+ var/list/matter = null
/// The reagent organs are filled with, which currently affects what mobs that eat the organ will receive.
/// TODO: Remove this in a later matter edibility refactor.
var/edible_reagent = /decl/material/liquid/nutriment/protein
@@ -172,6 +168,30 @@ var/global/list/bodytypes_by_category = list()
/// Stun from blindness modifier.
var/eye_flash_mod = 1
+ // Bodytype temperature damage thresholds.
+ var/cold_level_1 = 243 // Cold damage level 1 below this point. -30 Celsium degrees
+ var/cold_level_2 = 200 // Cold damage level 2 below this point.
+ var/cold_level_3 = 120 // Cold damage level 3 below this point.
+ var/heat_level_1 = 360 // Heat damage level 1 above this point.
+ var/heat_level_2 = 400 // Heat damage level 2 above this point.
+ var/heat_level_3 = 1000 // Heat damage level 3 above this point.
+
+ // Temperature comfort levels and strings.
+ var/heat_discomfort_level = 315
+ var/cold_discomfort_level = 285
+ /// Aesthetic messages about feeling warm.
+ var/list/heat_discomfort_strings = list(
+ "You feel sweat drip down your neck.",
+ "You feel uncomfortably warm.",
+ "Your skin prickles in the heat."
+ )
+ /// Aesthetic messages about feeling chilly.
+ var/list/cold_discomfort_strings = list(
+ "You feel chilly.",
+ "You shiver suddenly.",
+ "Your chilly flesh stands out in goosebumps."
+ )
+
/decl/bodytype/Initialize()
. = ..()
icon_deformed ||= icon_base
@@ -184,9 +204,9 @@ var/global/list/bodytypes_by_category = list()
if(!breathing_organ && has_organ[BP_LUNGS])
breathing_organ = BP_LUNGS
- if(config.grant_default_darksight)
- eye_darksight_range = max(eye_darksight_range, config.default_darksight_range)
- eye_low_light_vision_effectiveness = max(eye_low_light_vision_effectiveness, config.default_darksight_effectiveness)
+ if(get_config_value(/decl/config/toggle/grant_default_darksight))
+ eye_darksight_range = max(eye_darksight_range, get_config_value(/decl/config/num/default_darksight_range))
+ eye_low_light_vision_effectiveness = max(eye_low_light_vision_effectiveness, get_config_value(/decl/config/num/default_darksight_effectiveness))
// Modify organ lists if necessary.
if(islist(override_organ_types))
@@ -256,6 +276,57 @@ var/global/list/bodytypes_by_category = list()
if(isnull(default_f_style))
. += "null default_f_style (use a shaved/hairless facial hair style if 'no facial hair' is intended)"
+ var/list/tail_data = has_limbs[BP_TAIL]
+ if(tail_data)
+ var/obj/item/organ/external/tail/tail_organ = LAZYACCESS(tail_data, "path")
+ if(ispath(tail_organ, /obj/item/organ/external/tail))
+ var/use_species = get_user_species_for_validation()
+ if(use_species)
+ var/datum/dna/dummy_dna = new
+ dummy_dna.species = use_species
+ tail_organ = new tail_organ(null, null, dummy_dna, src)
+ var/tail_icon = tail_organ.get_tail_icon()
+ var/tail_state = tail_organ.get_tail()
+ if(tail_icon && tail_state)
+ if(!check_state_in_icon(tail_state, tail_icon))
+ . += "tail state [tail_state] not present in icon [tail_icon], available states are: [json_encode(icon_states(tail_icon))]"
+ else
+ if(!tail_icon)
+ . += "missing tail icon"
+ if(!tail_state)
+ . += "missing tail state"
+ qdel(tail_organ)
+ qdel(dummy_dna)
+ else
+ . += "could not find a species with this bodytype available for tail organ validation"
+ else
+ . += "invalid BP_TAIL type: got [tail_organ], expected /obj/item/organ/external/tail"
+
+ if(cold_level_3)
+ if(cold_level_2)
+ if(cold_level_3 > cold_level_2)
+ . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_2 ([cold_level_2])"
+ if(cold_level_1)
+ if(cold_level_3 > cold_level_1)
+ . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_1 ([cold_level_1])"
+ if(cold_level_2 && cold_level_1)
+ if(cold_level_2 > cold_level_1)
+ . += "cold_level_2 ([cold_level_2]) was not lower than cold_level_1 ([cold_level_1])"
+
+ if(heat_level_3 != INFINITY)
+ if(heat_level_2 != INFINITY)
+ if(heat_level_3 < heat_level_2)
+ . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_2 ([heat_level_2])"
+ if(heat_level_1 != INFINITY)
+ if(heat_level_3 < heat_level_1)
+ . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_1 ([heat_level_1])"
+ if((heat_level_2 != INFINITY) && (heat_level_1 != INFINITY))
+ if(heat_level_2 < heat_level_1)
+ . += "heat_level_2 ([heat_level_2]) was not higher than heat_level_1 ([heat_level_1])"
+
+ if(min(heat_level_1, heat_level_2, heat_level_3) <= max(cold_level_1, cold_level_2, cold_level_3))
+ . += "heat and cold damage level thresholds overlap"
+
/decl/bodytype/proc/max_skin_tone()
if(appearance_flags & HAS_SKIN_TONE_GRAV)
return 100
@@ -281,14 +352,14 @@ var/global/list/bodytypes_by_category = list()
if(H.has_external_organs())
for(var/obj/item/organ/external/E in H.get_external_organs())
if(!is_default_limb(E))
- H.remove_organ(E, FALSE, FALSE, TRUE, TRUE, FALSE) //Remove them first so we don't trigger removal effects by just calling delete on them
+ H.remove_organ(E, FALSE, FALSE, TRUE, TRUE, FALSE, skip_health_update = TRUE) //Remove them first so we don't trigger removal effects by just calling delete on them
qdel(E)
//Clear invalid internal organs
if(H.has_internal_organs())
for(var/obj/item/organ/O in H.get_internal_organs())
if(!is_default_organ(O))
- H.remove_organ(O, FALSE, FALSE, TRUE, TRUE, FALSE) //Remove them first so we don't trigger removal effects by just calling delete on them
+ H.remove_organ(O, FALSE, FALSE, TRUE, TRUE, FALSE, skip_health_update = TRUE) //Remove them first so we don't trigger removal effects by just calling delete on them
qdel(O)
//Create missing limbs
@@ -301,7 +372,7 @@ var/global/list/bodytypes_by_category = list()
if(E.parent_organ)
var/list/parent_organ_data = has_limbs[E.parent_organ]
parent_organ_data["has_children"]++
- H.add_organ(E, GET_EXTERNAL_ORGAN(H, E.parent_organ), FALSE, FALSE)
+ H.add_organ(E, GET_EXTERNAL_ORGAN(H, E.parent_organ), FALSE, FALSE, skip_health_update = TRUE)
//Create missing internal organs
for(var/organ_tag in has_organ)
@@ -312,7 +383,8 @@ var/global/list/bodytypes_by_category = list()
if(organ_tag != O.organ_tag)
warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the species' organ tag \"[organ_tag]\". Updating organ_tag to match.")
O.organ_tag = organ_tag
- H.add_organ(O, GET_EXTERNAL_ORGAN(H, O.parent_organ), FALSE, FALSE)
+ H.add_organ(O, GET_EXTERNAL_ORGAN(H, O.parent_organ), FALSE, FALSE, skip_health_update = TRUE)
+ H.update_health()
//Checks if an existing organ is the bodytype default
/decl/bodytype/proc/is_default_organ(obj/item/organ/internal/O)
@@ -352,11 +424,11 @@ var/global/list/bodytypes_by_category = list()
limb.cavity_max_w_class = max(limb.cavity_max_w_class, get_resized_organ_w_class(initial(I.w_class)))
/decl/bodytype/proc/set_default_hair(mob/living/carbon/human/organism, override_existing = TRUE, defer_update_hair = FALSE)
- if(!organism.h_style || (override_existing && (organism.h_style != default_h_style)))
- organism.h_style = default_h_style
+ if(!organism.get_hairstyle() || (override_existing && (organism.get_hairstyle() != default_h_style)))
+ organism.set_hairstyle(default_h_style)
. = TRUE
- if(!organism.h_style || (override_existing && (organism.f_style != default_f_style)))
- organism.f_style = default_f_style
+ if(!organism.get_hairstyle() || (override_existing && (organism.get_facial_hairstyle() != default_f_style)))
+ organism.set_facial_hairstyle(default_f_style)
. = TRUE
if(. && !defer_update_hair)
organism.update_hair()
@@ -373,9 +445,9 @@ var/global/list/bodytypes_by_category = list()
for(var/obj/item/organ/external/E in mannequin.get_external_organs())
E.skin_colour = base_color
- mannequin.eye_colour = base_eye_color
- mannequin.hair_colour = base_hair_color
- mannequin.facial_hair_colour = base_hair_color
+ mannequin.set_eye_colour(base_eye_color, skip_update = TRUE)
+ mannequin.set_hair_colour(base_hair_color, skip_update = TRUE)
+ mannequin.set_facial_hair_colour(base_hair_color, skip_update = TRUE)
set_default_hair(mannequin)
mannequin.force_update_limbs()
@@ -386,7 +458,89 @@ var/global/list/bodytypes_by_category = list()
mannequin.update_icon()
/decl/species/proc/customize_preview_mannequin(mob/living/carbon/human/dummy/mannequin/mannequin)
- if(mannequin.species.preview_outfit)
+ if(preview_outfit)
var/decl/hierarchy/outfit/outfit = outfit_by_type(preview_outfit)
- outfit.equip(mannequin, equip_adjustments = (OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR|OUTFIT_ADJUSTMENT_SKIP_BACKPACK))
+ outfit.equip_outfit(mannequin, equip_adjustments = (OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR|OUTFIT_ADJUSTMENT_SKIP_BACKPACK))
+ mannequin.update_icon()
mannequin.update_transform()
+
+/decl/bodytype/proc/rebuild_internal_organs(var/obj/item/organ/external/limb, var/override_material)
+
+ if(!limb.owner)
+ return
+
+ // Work out what we want to have in this organ.
+ var/list/replacing_organs = list()
+ for(var/organ_tag in has_organ)
+ var/obj/item/organ/internal/organ_prototype = has_organ[organ_tag]
+ if(initial(organ_prototype.parent_organ) == limb.organ_tag)
+ replacing_organs[organ_tag] = organ_prototype
+
+ // No organs, just delete everything.
+ if(!length(replacing_organs))
+ for(var/obj/item/organ/internal/innard in limb.internal_organs)
+ limb.owner.remove_organ(innard, FALSE, FALSE, TRUE, TRUE, FALSE)
+ qdel(innard)
+ return
+
+ // Check what we already have that matches.
+ for(var/obj/item/organ/internal/innard in limb.internal_organs)
+ var/obj/item/organ/internal/organ_prototype = replacing_organs[innard.organ_tag]
+ if(organ_prototype && istype(innard, organ_prototype))
+ innard.set_bodytype(type, override_material || material)
+ replacing_organs -= innard.organ_tag
+ else
+ limb.owner.remove_organ(innard, FALSE, FALSE, TRUE, TRUE, FALSE)
+ qdel(innard)
+
+ // Install any necessary new organs.
+ for(var/organ_tag in replacing_organs)
+ var/organ_type = replacing_organs[organ_tag]
+ var/obj/item/organ/internal/new_innard = new organ_type(limb.owner, null, limb.owner.dna, src)
+ limb.owner.add_organ(new_innard, GET_EXTERNAL_ORGAN(limb.owner, new_innard.parent_organ), FALSE, FALSE)
+
+/decl/bodytype/proc/get_body_temperature_threshold(var/threshold)
+ switch(threshold)
+ if(COLD_LEVEL_1)
+ return cold_level_1
+ if(COLD_LEVEL_2)
+ return cold_level_2
+ if(COLD_LEVEL_3)
+ return cold_level_3
+ if(HEAT_LEVEL_1)
+ return heat_level_1
+ if(HEAT_LEVEL_2)
+ return heat_level_2
+ if(HEAT_LEVEL_3)
+ return heat_level_3
+ else
+ CRASH("get_species_temperature_threshold() called with invalid threshold value.")
+
+/decl/bodytype/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type)
+
+ if(!prob(5))
+ return
+
+ var/covered = 0 // Basic coverage can help.
+ var/held_items = H.get_held_items()
+ for(var/obj/item/clothing/clothes in H)
+ if(clothes in held_items)
+ continue
+ if((clothes.body_parts_covered & SLOT_UPPER_BODY) && (clothes.body_parts_covered & SLOT_LOWER_BODY))
+ covered = 1
+ break
+
+ switch(msg_type)
+ if("cold")
+ if(!covered && length(cold_discomfort_strings))
+ to_chat(H, SPAN_DANGER(pick(cold_discomfort_strings)))
+ if("heat")
+ if(covered && length(heat_discomfort_strings))
+ to_chat(H, SPAN_DANGER(pick(heat_discomfort_strings)))
+
+/decl/bodytype/proc/get_user_species_for_validation()
+ for(var/species_name in get_all_species())
+ var/decl/species/species = get_species_by_key(species_name)
+ if(src in species.available_bodytypes)
+ return species_name
+
diff --git a/code/modules/species/species_bodytype_helpers.dm b/code/modules/species/species_bodytype_helpers.dm
index 815c6b3938c..591054675dc 100644
--- a/code/modules/species/species_bodytype_helpers.dm
+++ b/code/modules/species/species_bodytype_helpers.dm
@@ -38,4 +38,5 @@
pref.body_markings = base_markings?.Copy()
/decl/bodytype/proc/apply_appearance(var/mob/living/carbon/human/H)
- H.skin_colour = base_color
\ No newline at end of file
+ if(base_color)
+ H.set_skin_colour(base_color)
diff --git a/code/modules/species/species_bodytype_offsets.dm b/code/modules/species/species_bodytype_offsets.dm
index b3871df5d49..2a7505551a7 100644
--- a/code/modules/species/species_bodytype_offsets.dm
+++ b/code/modules/species/species_bodytype_offsets.dm
@@ -21,9 +21,9 @@ The slots that you can use are found in items_clothing.dm and are the inventory
var/list/equip_adjust = list()
var/list/equip_overlays = list()
-/decl/bodytype/proc/get_offset_overlay_image(var/spritesheet, var/mob_icon, var/mob_state, var/color, var/slot)
+/decl/bodytype/proc/get_offset_overlay_image(var/mob_icon, var/mob_state, var/color, var/slot)
// If we don't actually need to offset this, don't bother with any of the generation/caching.
- if(!spritesheet && length(equip_adjust) && equip_adjust[slot] && length(equip_adjust[slot]))
+ if(length(equip_adjust) && equip_adjust[slot] && length(equip_adjust[slot]))
// Check the cache for previously made icons.
var/image_key = "[mob_icon]-[mob_state]-[color]-[slot]"
@@ -38,7 +38,7 @@ The slots that you can use are found in items_clothing.dm and are the inventory
var/use_dir = text2num(shift_facing)
var/icon/equip = new(mob_icon, icon_state = mob_state, dir = use_dir)
var/icon/canvas = new(icon_template)
- canvas.Blend(equip, ICON_OVERLAY, facing_list["x"]+1, facing_list["y"]+1)
+ canvas.Blend(equip, ICON_OVERLAY, facing_list[1]+1, facing_list[2]+1)
final_I.Insert(canvas, dir = use_dir)
equip_overlays[image_key] = overlay_image(final_I, color = color, flags = RESET_COLOR)
var/image/I = new() // We return a copy of the cached image, in case downstream procs mutate it.
diff --git a/code/modules/species/species_bodytype_random.dm b/code/modules/species/species_bodytype_random.dm
index 31f90a9fb86..ee73c83f994 100644
--- a/code/modules/species/species_bodytype_random.dm
+++ b/code/modules/species/species_bodytype_random.dm
@@ -29,7 +29,7 @@ SETUP_RANDOM_COLOR_GETTER(skin_color, skin_colors, HAS_SKIN_COLOR, list(
/decl/color_generator/blue_light,
/decl/color_generator/green,
/decl/color_generator/white))
-SETUP_RANDOM_COLOR_SETTER(skin_color, change_skin_color)
+SETUP_RANDOM_COLOR_SETTER(skin_color, set_skin_colour)
SETUP_RANDOM_COLOR_GETTER(hair_color, hair_colors, HAS_HAIR_COLOR, list(
/decl/color_generator/black,
@@ -40,7 +40,7 @@ SETUP_RANDOM_COLOR_GETTER(hair_color, hair_colors, HAS_HAIR_COLOR, list(
/decl/color_generator/wheat,
/decl/color_generator/old,
/decl/color_generator/punk))
-SETUP_RANDOM_COLOR_SETTER(hair_color, change_hair_color)
+SETUP_RANDOM_COLOR_SETTER(hair_color, set_hair_colour)
SETUP_RANDOM_COLOR_GETTER(eye_color, eye_colors, HAS_EYE_COLOR, list(
/decl/color_generator/black,
@@ -51,12 +51,12 @@ SETUP_RANDOM_COLOR_GETTER(eye_color, eye_colors, HAS_EYE_COLOR, list(
/decl/color_generator/blue_light,
/decl/color_generator/green,
/decl/color_generator/albino_eye))
-SETUP_RANDOM_COLOR_SETTER(eye_color, change_eye_color)
+SETUP_RANDOM_COLOR_SETTER(eye_color, set_eye_colour)
/decl/bodytype/proc/get_random_facial_hair_color()
return get_random_hair_color()
-SETUP_RANDOM_COLOR_SETTER(facial_hair_color, change_facial_hair_color)
+SETUP_RANDOM_COLOR_SETTER(facial_hair_color, set_facial_hair_colour)
/decl/bodytype/proc/get_random_skin_tone()
return random_skin_tone(src)
@@ -71,10 +71,10 @@ SETUP_RANDOM_COLOR_SETTER(facial_hair_color, change_facial_hair_color)
/mob/living/carbon/human/proc/randomize_hair_style()
var/list/L = get_valid_hairstyle_types()
- change_hair(SAFEPICK(L))
+ set_hairstyle(SAFEPICK(L))
/mob/living/carbon/human/proc/randomize_facial_hair_style()
var/list/L = get_valid_facial_hairstyle_types()
- change_facial_hair(SAFEPICK(L))
+ set_facial_hairstyle(SAFEPICK(L))
#undef SETUP_RANDOM_COLOR_GETTER
diff --git a/code/modules/species/species_crystalline_bodytypes.dm b/code/modules/species/species_crystalline_bodytypes.dm
index c281454099d..15c0f6047bb 100644
--- a/code/modules/species/species_crystalline_bodytypes.dm
+++ b/code/modules/species/species_crystalline_bodytypes.dm
@@ -5,10 +5,16 @@
**/
/decl/bodytype/crystalline
abstract_type = /decl/bodytype/crystalline
- limb_tech = "{'materials':4}"
+ limb_tech = @'{"materials":4}'
is_robotic = FALSE
material = /decl/material/solid/gemstone/crystal
body_flags = BODY_FLAG_CRYSTAL_REFORM | BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS
+ cold_level_1 = SYNTH_COLD_LEVEL_1
+ cold_level_2 = SYNTH_COLD_LEVEL_2
+ cold_level_3 = SYNTH_COLD_LEVEL_3
+ heat_level_1 = SYNTH_HEAT_LEVEL_1
+ heat_level_2 = SYNTH_HEAT_LEVEL_2
+ heat_level_3 = SYNTH_HEAT_LEVEL_3
var/is_brittle
/decl/bodytype/crystalline/apply_bodytype_organ_modifications(obj/item/organ/org)
diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm
index 150571a33ed..a54b2fdc015 100644
--- a/code/modules/species/species_getters.dm
+++ b/code/modules/species/species_getters.dm
@@ -22,28 +22,6 @@
/decl/species/proc/get_flesh_colour(var/mob/living/carbon/human/H)
return ((H && H.isSynthetic()) ? SYNTH_FLESH_COLOUR : flesh_color)
-/decl/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type)
-
- if(!prob(5))
- return
-
- var/covered = 0 // Basic coverage can help.
- var/held_items = H.get_held_items()
- for(var/obj/item/clothing/clothes in H)
- if(clothes in held_items)
- continue
- if((clothes.body_parts_covered & SLOT_UPPER_BODY) && (clothes.body_parts_covered & SLOT_LOWER_BODY))
- covered = 1
- break
-
- switch(msg_type)
- if("cold")
- if(!covered)
- to_chat(H, "[pick(cold_discomfort_strings)]")
- if("heat")
- if(covered)
- to_chat(H, "[pick(heat_discomfort_strings)]")
-
/decl/species/proc/get_vision_flags(var/mob/living/carbon/human/H)
return vision_flags
diff --git a/code/modules/species/species_hud.dm b/code/modules/species/species_hud.dm
index d18384bffa0..ab14a1baf6a 100644
--- a/code/modules/species/species_hud.dm
+++ b/code/modules/species/species_hud.dm
@@ -6,7 +6,6 @@
var/has_pressure = 1 // Draw the pressure indicator.
var/has_nutrition = 1 // Draw the nutrition indicator.
var/has_bodytemp = 1 // Draw the bodytemp indicator.
- var/has_hands = 1 // Set to draw hands.
var/has_drop = 1 // Set to draw drop button.
var/has_throw = 1 // Set to draw throw button.
var/has_resist = 1 // Set to draw resist button.
@@ -43,19 +42,14 @@
var/slot_id = inv_slot.slot_id
inventory_slots[slot_id] = inv_slot
equip_slots |= slot_id
-
// Build reference lists for inventory updates
- if(slot_id in global.persistent_inventory_slots)
- persistent_slots |= slot_id
- else if(slot_id in global.hidden_inventory_slots)
+ if(inv_slot.can_be_hidden)
hidden_slots |= slot_id
-
- if(has_hands)
- equip_slots |= slot_handcuffed_str
-
+ else
+ persistent_slots |= slot_id
+ equip_slots |= slot_handcuffed_str
if(slot_back_str in equip_slots)
equip_slots |= slot_in_backpack_str
-
if(slot_w_uniform_str in equip_slots)
equip_slots |= slot_tie_str
diff --git a/code/modules/species/species_shapeshifter.dm b/code/modules/species/species_shapeshifter.dm
index c2ef6d30c67..2e8a3ba1059 100644
--- a/code/modules/species/species_shapeshifter.dm
+++ b/code/modules/species/species_shapeshifter.dm
@@ -33,8 +33,9 @@ var/global/list/wrapped_species_by_ref = list()
/decl/species/shapeshifter/handle_post_spawn(var/mob/living/carbon/human/H)
if(monochromatic)
- H.hair_colour = H.skin_colour
- H.facial_hair_colour = H.skin_colour
+ var/skin_colour = H.get_skin_colour()
+ H.set_hair_colour(skin_colour, skip_update = TRUE)
+ H.set_facial_hair_colour(skin_colour, skip_update = TRUE)
..()
/decl/species/shapeshifter/get_pain_emote(var/mob/living/carbon/human/H, var/pain_power)
@@ -57,12 +58,12 @@ var/global/list/wrapped_species_by_ref = list()
var/list/hairstyles = species.get_hair_styles(root_bodytype)
if(length(hairstyles))
var/decl/sprite_accessory/new_hair = input("Select a hairstyle.", "Shapeshifter Hair") as null|anything in hairstyles
- change_hair(new_hair ? new_hair.type : /decl/sprite_accessory/hair/bald)
+ set_hairstyle(new_hair ? new_hair.type : /decl/sprite_accessory/hair/bald)
var/list/beardstyles = species.get_facial_hair_styles(root_bodytype)
if(length(beardstyles))
var/decl/sprite_accessory/new_hair = input("Select a facial hair style.", "Shapeshifter Hair") as null|anything in beardstyles
- change_facial_hair(new_hair ? new_hair.type : /decl/sprite_accessory/facial_hair/shaved)
+ set_facial_hairstyle(new_hair ? new_hair.type : /decl/sprite_accessory/facial_hair/shaved)
/mob/living/carbon/human/proc/shapeshifter_select_gender()
@@ -97,7 +98,7 @@ var/global/list/wrapped_species_by_ref = list()
wrapped_species_by_ref["\ref[src]"] = new_species
visible_message("\The [src] shifts and contorts, taking the form of \a ["\improper [new_species]"]!")
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
/mob/living/carbon/human/proc/shapeshifter_select_colour()
@@ -115,15 +116,12 @@ var/global/list/wrapped_species_by_ref = list()
shapeshifter_set_colour(new_skin)
/mob/living/carbon/human/proc/shapeshifter_set_colour(var/new_skin)
-
- skin_colour = new_skin
-
+ set_skin_colour(new_skin, skip_update = TRUE)
var/decl/species/shapeshifter/S = species
if(S.monochromatic)
- hair_colour = skin_colour
- facial_hair_colour = skin_colour
-
+ var/skin_colour = get_skin_colour()
+ set_hair_colour(skin_colour, skip_update = TRUE)
+ set_facial_hair_colour(skin_colour, skip_update = TRUE)
for(var/obj/item/organ/external/E in get_external_organs())
E.sync_colour_to_human(src)
-
- refresh_visible_overlays()
+ try_refresh_visible_overlays()
diff --git a/code/modules/species/station/golem.dm b/code/modules/species/station/golem.dm
index 5281b332af9..4ca51b873eb 100644
--- a/code/modules/species/station/golem.dm
+++ b/code/modules/species/station/golem.dm
@@ -30,14 +30,6 @@
flesh_color = "#137e8f"
- cold_level_1 = SYNTH_COLD_LEVEL_1
- cold_level_2 = SYNTH_COLD_LEVEL_2
- cold_level_3 = SYNTH_COLD_LEVEL_3
-
- heat_level_1 = SYNTH_HEAT_LEVEL_1
- heat_level_2 = SYNTH_HEAT_LEVEL_2
- heat_level_3 = SYNTH_HEAT_LEVEL_3
-
death_message = "becomes completely motionless..."
available_pronouns = list(/decl/pronouns/neuter)
diff --git a/code/modules/species/station/human.dm b/code/modules/species/station/human.dm
index d2e602c39b7..11962d6f9b0 100644
--- a/code/modules/species/station/human.dm
+++ b/code/modules/species/station/human.dm
@@ -8,9 +8,11 @@
spawn_flags = SPECIES_CAN_JOIN
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
+ // Add /decl/bodytype/prosthetic/basic_human to this list to allow full-body prosthetics.
available_bodytypes = list(
/decl/bodytype/human,
- /decl/bodytype/human/masculine
+ /decl/bodytype/human/masculine,
+ /decl/bodytype/prosthetic/basic_human
)
exertion_effect_chance = 10
diff --git a/code/modules/species/station/monkey_bodytypes.dm b/code/modules/species/station/monkey_bodytypes.dm
index b5f81859ebf..3d622631b7e 100644
--- a/code/modules/species/station/monkey_bodytypes.dm
+++ b/code/modules/species/station/monkey_bodytypes.dm
@@ -5,21 +5,22 @@
blood_overlays = 'icons/mob/human_races/species/monkey/blood_overlays.dmi'
health_hud_intensity = 1.75
bodytype_flag = BODY_FLAG_MONKEY
+ eye_icon = null
override_limb_types = list(
- BP_HEAD = /obj/item/organ/external/head/no_eyes,
BP_TAIL = /obj/item/organ/external/tail/monkey
)
mob_size = MOB_SIZE_SMALL
/decl/bodytype/monkey/Initialize()
equip_adjust = list(
- BP_L_HAND = list("[NORTH]" = list("x" = 1, "y" = 3), "[EAST]" = list("x" = -3, "y" = 2), "[SOUTH]" = list("x" = -1, "y" = 3), "[WEST]" = list("x" = 3, "y" = 2)),
- BP_R_HAND = list("[NORTH]" = list("x" = -1, "y" = 3), "[EAST]" = list("x" = 3, "y" = 2), "[SOUTH]" = list("x" = 1, "y" = 3), "[WEST]" = list("x" = -3, "y" = 2)),
- slot_shoes_str = list("[NORTH]" = list("x" = 0, "y" = 7), "[EAST]" = list("x" = -1, "y" = 7), "[SOUTH]" = list("x" = 0, "y" = 7), "[WEST]" = list("x" = 1, "y" = 7)),
- slot_head_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = -2, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = 2, "y" = 0)),
- slot_wear_mask_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = -1, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = 1, "y" = 0))
+ BP_L_HAND = list("[NORTH]" = list( 1, 3), "[EAST]" = list(-3, 2), "[SOUTH]" = list(-1, 3), "[WEST]" = list( 3, 2)),
+ BP_R_HAND = list("[NORTH]" = list(-1, 3), "[EAST]" = list( 3, 2), "[SOUTH]" = list( 1, 3), "[WEST]" = list(-3, 2)),
+ slot_shoes_str = list("[NORTH]" = list( 0, 7), "[EAST]" = list(-1, 7), "[SOUTH]" = list( 0, 7), "[WEST]" = list( 1, 7)),
+ slot_head_str = list("[NORTH]" = list( 0, 0), "[EAST]" = list(-2, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list( 2, 0)),
+ slot_wear_mask_str = list("[NORTH]" = list( 0, 0), "[EAST]" = list(-1, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list( 1, 0))
)
. = ..()
/obj/item/organ/external/tail/monkey
- tail = "chimptail"
+ tail = "chimptail"
+ tail_icon = 'icons/mob/human_races/species/monkey/monkey_tail.dmi'
diff --git a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm b/code/modules/spells/aoe_turf/conjure/druidic_spells.dm
index 70a37798f3f..d4b5db4bb88 100644
--- a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm
+++ b/code/modules/spells/aoe_turf/conjure/druidic_spells.dm
@@ -39,7 +39,7 @@
if(!..())
return 0
- newVars = list("maxHealth" = 20 + spell_levels[Sp_POWER]*5, "health" = 20 + spell_levels[Sp_POWER]*5, "melee_damage_lower" = 10 + spell_levels[Sp_POWER], "melee_damage_upper" = 10 + spell_levels[Sp_POWER]*2)
+ newVars = list("mob_default_max_health" = 20 + spell_levels[Sp_POWER]*5, "health" = 20 + spell_levels[Sp_POWER]*5, "melee_damage_lower" = 10 + spell_levels[Sp_POWER], "melee_damage_upper" = 10 + spell_levels[Sp_POWER]*2)
return "Your bats are now stronger."
@@ -59,7 +59,7 @@
summon_amt = 1
summon_type = list(/mob/living/simple_animal/hostile/commanded/bear)
- newVars = list("maxHealth" = 15,
+ newVars = list("mob_default_max_health" = 15,
"health" = 15,
"melee_damage_lower" = 10,
"melee_damage_upper" = 10,
@@ -76,14 +76,14 @@
return 0
switch(spell_levels[Sp_POWER])
if(1)
- newVars = list("maxHealth" = 30,
+ newVars = list("mob_default_max_health" = 30,
"health" = 30,
"melee_damage_lower" = 15,
"melee_damage_upper" = 15
)
return "Your bear has been upgraded from a cub to a whelp."
if(2)
- newVars = list("maxHealth" = 45,
+ newVars = list("mob_default_max_health" = 45,
"health" = 45,
"melee_damage_lower" = 20,
"melee_damage_upper" = 20,
@@ -91,7 +91,7 @@
)
return "Your bear has been upgraded from a whelp to an adult."
if(3)
- newVars = list("maxHealth" = 60,
+ newVars = list("mob_default_max_health" = 60,
"health" = 60,
"melee_damage_lower" = 25,
"melee_damage_upper" = 25,
@@ -99,7 +99,7 @@
)
return "Your bear has been upgraded from an adult to an alpha."
if(4)
- newVars = list("maxHealth" = 75,
+ newVars = list("mob_default_max_health" = 75,
"health" = 75,
"melee_damage_lower" = 35,
"melee_damage_upper" = 35,
diff --git a/code/modules/spells/aoe_turf/conjure/forcewall.dm b/code/modules/spells/aoe_turf/conjure/forcewall.dm
index 9f1bac20fca..89ceb6d64cd 100644
--- a/code/modules/spells/aoe_turf/conjure/forcewall.dm
+++ b/code/modules/spells/aoe_turf/conjure/forcewall.dm
@@ -34,7 +34,6 @@
anchored = TRUE
opacity = FALSE
density = TRUE
- unacidable = 1
/obj/effect/forcefield/bullet_act(var/obj/item/projectile/Proj, var/def_zone)
var/turf/T = get_turf(src.loc)
diff --git a/code/modules/spells/aoe_turf/drain_blood.dm b/code/modules/spells/aoe_turf/drain_blood.dm
index 8fa0be93c73..da5d1be45cd 100644
--- a/code/modules/spells/aoe_turf/drain_blood.dm
+++ b/code/modules/spells/aoe_turf/drain_blood.dm
@@ -40,8 +40,8 @@
if(amount > 0)
H.adjust_blood(amount)
continue
- L.adjustBruteLoss(-5)
- L.adjustFireLoss(-2.5)
+ L.adjustBruteLoss(-5, do_update_health = FALSE)
+ L.adjustFireLoss(-2.5, do_update_health = FALSE)
L.adjustToxLoss(-2.5)
/obj/item/projectile/beam/blood_effect
diff --git a/code/modules/spells/contracts.dm b/code/modules/spells/contracts.dm
index 891a4b6ad2d..60c6bba8bf9 100644
--- a/code/modules/spells/contracts.dm
+++ b/code/modules/spells/contracts.dm
@@ -3,7 +3,7 @@
desc = "written in the blood of some unfortunate fellow."
icon = 'icons/mob/screen_spells.dmi'
icon_state = "master_open"
- material = /decl/material/solid/cardboard //#TODO: replace with paper
+ material = /decl/material/solid/organic/paper
var/contract_master = null
var/list/contract_spells = list(/spell/contract/reward,/spell/contract/punish,/spell/contract/return_master)
diff --git a/code/modules/spells/general/mark_recall.dm b/code/modules/spells/general/mark_recall.dm
index 846888ae184..2895e63fbcf 100644
--- a/code/modules/spells/general/mark_recall.dm
+++ b/code/modules/spells/general/mark_recall.dm
@@ -52,12 +52,9 @@
desc = "A strange rune said to be made by wizards. Or its just some shmuck playing with crayons again."
icon = 'icons/obj/rune.dmi'
icon_state = "wizard_mark"
-
anchored = TRUE
- unacidable = 1
layer = TURF_LAYER
is_spawnable_type = FALSE // invalid without spell passed
-
var/spell/mark_recall/spell
/obj/effect/cleanable/wizard_mark/Initialize(mapload,var/mrspell)
diff --git a/code/modules/spells/general/veil_of_shadows.dm b/code/modules/spells/general/veil_of_shadows.dm
index 0b189f8efbc..4d328e65db0 100644
--- a/code/modules/spells/general/veil_of_shadows.dm
+++ b/code/modules/spells/general/veil_of_shadows.dm
@@ -22,8 +22,8 @@
H.AddMovementHandler(/datum/movement_handler/mob/incorporeal)
if(H.add_cloaking_source(src))
H.visible_message("\The [H] shrinks from view!")
- events_repository.register(/decl/observ/moved, H,src,.proc/check_light)
- timer_id = addtimer(CALLBACK(src,.proc/cancel_veil),duration, TIMER_STOPPABLE)
+ events_repository.register(/decl/observ/moved, H,src,PROC_REF(check_light))
+ timer_id = addtimer(CALLBACK(src,PROC_REF(cancel_veil)),duration, TIMER_STOPPABLE)
/spell/veil_of_shadows/proc/cancel_veil()
var/mob/living/carbon/human/H = holder
@@ -35,7 +35,7 @@
drop_cloak()
else
events_repository.unregister(/decl/observ/moved, H,src)
- events_repository.register(/decl/observ/moved, H,src,.proc/drop_cloak)
+ events_repository.register(/decl/observ/moved, H,src,PROC_REF(drop_cloak))
/spell/veil_of_shadows/proc/drop_cloak()
var/mob/living/carbon/human/H = holder
diff --git a/code/modules/spells/hand/hand.dm b/code/modules/spells/hand/hand.dm
index f17f55c1707..a533cc3dbb3 100644
--- a/code/modules/spells/hand/hand.dm
+++ b/code/modules/spells/hand/hand.dm
@@ -75,7 +75,7 @@
/spell/hand/duration/cast(var/list/targets, var/mob/user)
. = ..()
if(.)
- hand_timer = addtimer(CALLBACK(src, .proc/cancel_hand), hand_duration, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE)
+ hand_timer = addtimer(CALLBACK(src, PROC_REF(cancel_hand)), hand_duration, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE)
/spell/hand/duration/cancel_hand()
deltimer(hand_timer)
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index e5aa4532d91..cb5af2f7598 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -29,8 +29,8 @@ var/global/list/artefact_feedback = list(
throw_speed = 1
throw_range = 5
w_class = ITEM_SIZE_NORMAL
- material = /decl/material/solid/cardboard //#TODO: Replace with paper
- matter = list(/decl/material/solid/leather = MATTER_AMOUNT_REINFORCEMENT)
+ material = /decl/material/solid/organic/paper
+ matter = list(/decl/material/solid/organic/leather = MATTER_AMOUNT_REINFORCEMENT)
var/uses = 1
var/temp = null
var/datum/spellbook/spellbook
diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm
index d2dc6a0201e..ad550747a7f 100644
--- a/code/modules/spells/spells.dm
+++ b/code/modules/spells/spells.dm
@@ -31,7 +31,7 @@
/mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready")
if(!ability_master)
- ability_master = new()
+ ability_master = new(null, src)
spell_to_add.holder = src
if(mind)
if(!mind.learned_spells)
diff --git a/code/modules/spells/targeted/blood_boil.dm b/code/modules/spells/targeted/blood_boil.dm
index 1c16d337cdb..0f9ef34b98a 100644
--- a/code/modules/spells/targeted/blood_boil.dm
+++ b/code/modules/spells/targeted/blood_boil.dm
@@ -20,6 +20,6 @@
H.bodytemperature += 40
if(prob(10))
to_chat(H,"\The [user] seems to radiate an uncomfortable amount of heat your direction.")
- if(H.bodytemperature > H.get_temperature_threshold(HEAT_LEVEL_3)) //Burst into flames
+ if(H.bodytemperature > H.get_mob_temperature_threshold(HEAT_LEVEL_3)) //Burst into flames
H.fire_stacks += 50
H.IgniteMob()
\ No newline at end of file
diff --git a/code/modules/spells/targeted/cleric_spells.dm b/code/modules/spells/targeted/cleric_spells.dm
index e3ea0071e9f..59545660c56 100644
--- a/code/modules/spells/targeted/cleric_spells.dm
+++ b/code/modules/spells/targeted/cleric_spells.dm
@@ -181,7 +181,7 @@
var/time = (L.getBruteLoss() + L.getFireLoss()) * 20
L.status_flags &= GODMODE
to_chat(L,"You will be in stasis for [time/10] second\s.")
- addtimer(CALLBACK(src,.proc/cancel_rift),time)
+ addtimer(CALLBACK(src,PROC_REF(cancel_rift)),time)
/spell/targeted/heal_target/trance/Destroy()
cancel_rift()
@@ -220,7 +220,7 @@
should_wait = 0
break //Don't need to check anymore.
if(should_wait)
- addtimer(CALLBACK(src,.proc/check_for_revoke,targets), 30 SECONDS)
+ addtimer(CALLBACK(src,PROC_REF(check_for_revoke),targets), 30 SECONDS)
else
revoke_spells()
diff --git a/code/modules/spells/targeted/ethereal_jaunt.dm b/code/modules/spells/targeted/ethereal_jaunt.dm
index 9f3885664c9..fd741613209 100644
--- a/code/modules/spells/targeted/ethereal_jaunt.dm
+++ b/code/modules/spells/targeted/ethereal_jaunt.dm
@@ -107,7 +107,7 @@
else
to_chat(user, "Some strange aura is blocking the way!")
canmove = 0
- addtimer(CALLBACK(src, .proc/allow_move), 2)
+ addtimer(CALLBACK(src, PROC_REF(allow_move)), 2)
/obj/effect/dummy/spell_jaunt/proc/allow_move()
canmove = TRUE
diff --git a/code/modules/spells/targeted/glimpse_of_eternity.dm b/code/modules/spells/targeted/glimpse_of_eternity.dm
index 8a9c5b9e912..a34920af8f1 100644
--- a/code/modules/spells/targeted/glimpse_of_eternity.dm
+++ b/code/modules/spells/targeted/glimpse_of_eternity.dm
@@ -21,6 +21,6 @@
new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "electricity_constant")
else
SET_STATUS_MAX(L, STAT_BLIND, 2)
- L.adjustBruteLoss(-10)
+ L.adjustBruteLoss(-10, do_update_health = FALSE)
L.adjustFireLoss(-10)
new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "green_sparkles")
\ No newline at end of file
diff --git a/code/modules/spells/targeted/shapeshift.dm b/code/modules/spells/targeted/shapeshift.dm
index a4504ed778c..b45e03c42eb 100644
--- a/code/modules/spells/targeted/shapeshift.dm
+++ b/code/modules/spells/targeted/shapeshift.dm
@@ -55,9 +55,9 @@
M.forceMove(trans) //move inside the new dude to hide him.
M.status_flags |= GODMODE //dont want him to die or breathe or do ANYTHING
transformed_dudes[trans] = M
- events_repository.register(/decl/observ/death, trans,src,/spell/targeted/shapeshift/proc/stop_transformation)
- events_repository.register(/decl/observ/destroyed, trans,src,/spell/targeted/shapeshift/proc/stop_transformation)
- events_repository.register(/decl/observ/destroyed, M, src, /spell/targeted/shapeshift/proc/destroyed_transformer)
+ events_repository.register(/decl/observ/death, trans,src, TYPE_PROC_REF(/spell/targeted/shapeshift, stop_transformation))
+ events_repository.register(/decl/observ/destroyed, trans,src, TYPE_PROC_REF(/spell/targeted/shapeshift, stop_transformation))
+ events_repository.register(/decl/observ/destroyed, M, src, TYPE_PROC_REF(/spell/targeted/shapeshift, destroyed_transformer))
if(duration)
spawn(duration)
stop_transformation(trans)
@@ -73,8 +73,8 @@
return FALSE
transformer.status_flags &= ~GODMODE
if(share_damage)
- var/ratio = target.health/target.maxHealth
- var/damage = transformer.maxHealth - round(transformer.maxHealth*(ratio))
+ var/transformer_max_health = transformer.get_max_health()
+ var/damage = transformer.set_max_health(transformer_max_health-round(transformer_max_health*(transformer.get_health_ratio())))
for(var/i in 1 to CEILING(damage/10))
transformer.adjustBruteLoss(10)
if(target.mind)
@@ -116,7 +116,7 @@
level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2)
- newVars = list("health" = 50, "maxHealth" = 50)
+ newVars = list("health" = 50, "default_mob_max_health" = 50)
hud_state = "wiz_poly"
@@ -183,7 +183,7 @@
"melee_damage_upper" = 25,
"resistance" = 6,
"health" = 125,
- "maxHealth" = 125)
+ "mob_default_max_health" = 125)
duration = 0
return "You revel in the corruption. There is no turning back."
diff --git a/code/modules/spells/targeted/targeted.dm b/code/modules/spells/targeted/targeted.dm
index 2bb9cca2eb7..04a69e3b7da 100644
--- a/code/modules/spells/targeted/targeted.dm
+++ b/code/modules/spells/targeted/targeted.dm
@@ -140,9 +140,9 @@ Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are exp
apply_spell_damage(target)
/spell/targeted/proc/apply_spell_damage(mob/living/target)
- target.adjustBruteLoss(amt_dam_brute)
- target.adjustFireLoss(amt_dam_fire)
- target.adjustToxLoss(amt_dam_tox)
+ target.adjustBruteLoss(amt_dam_brute, do_update_health = FALSE)
+ target.adjustFireLoss(amt_dam_fire, do_update_health = FALSE)
+ target.adjustToxLoss(amt_dam_tox, do_update_health = FALSE)
target.adjustOxyLoss(amt_dam_oxy)
if(ishuman(target))
var/mob/living/carbon/human/H = target
diff --git a/code/modules/sprite_accessories/_accessory.dm b/code/modules/sprite_accessories/_accessory.dm
index a78cab57bf4..78ade6f2489 100644
--- a/code/modules/sprite_accessories/_accessory.dm
+++ b/code/modules/sprite_accessories/_accessory.dm
@@ -10,33 +10,63 @@
have to define any UI values for sprite accessories manually for hair and facial
hair. Just add in new hair types and the game will naturally adapt.
- !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles,
- to the point where you may completely corrupt a server's savefiles. Please refrain
- from doing this unless you absolutely know what you are doing, and have defined a
- conversion in savefile.dm
+ Changing icon states, icon files and names should not represent any risks to
+ existing savefiles, but please do not change decl uids unless you are very sure
+ you know what you're doing and don't mind potentially causing people's savefiles
+ to load the default values for the marking category in question.
*/
/decl/sprite_accessory
abstract_type = /decl/sprite_accessory
decl_flags = DECL_FLAG_MANDATORY_UID
- var/name // The preview name of the accessory
- var/icon // the icon file the accessory is located in
- var/icon_state // the icon_state of the accessory
- var/required_gender = null // Restricted to specific genders. null matches any
- var/list/species_allowed = list(SPECIES_HUMAN) // Restrict some styles to specific root species names
- var/list/subspecies_allowed // Restrict some styles to specific species names, irrespective of root species name
- var/body_flags_allowed = null // Restrict some styles to specific bodytype flags
- var/body_flags_denied = null // Restrict some styles to specific bodytype flags
- var/list/bodytype_categories_allowed = null // Restricts some styles to specific bodytype categories
- var/list/bodytype_categories_denied = null // Restricts some styles to specific bodytype categories
-
- var/do_colouration = 1 // Whether or not the accessory can be affected by colouration
- var/blend = ICON_ADD
+ /// The preview name of the accessory
+ var/name
+ /// the icon file the accessory is located in
+ var/icon
+ /// the icon_state of the accessory
+ var/icon_state
+ /// Restricted to specific bodytypes. null matches any
+ var/list/decl/bodytype/bodytypes_allowed
+ /// Restricted from specific bodytypes. null matches none
+ var/list/decl/bodytype/bodytypes_denied
+ /// Restrict some styles to specific root species names
+ var/list/species_allowed = list(SPECIES_HUMAN)
+ /// Restrict some styles to specific species names, irrespective of root species name
+ var/list/subspecies_allowed
+ /// Restrict some styles to specific bodytype flags.
+ var/body_flags_allowed
+ /// Restrict some styles to specific bodytype flags.
+ var/body_flags_denied
+ /// Restricts some styles to specific bodytype categories
+ var/list/bodytype_categories_allowed
+ /// Restricts some styles to specific bodytype categories
+ var/list/bodytype_categories_denied
+ /// Slot to check equipment for when hiding this accessory.
+ var/hidden_by_gear_slot
+ /// Flag to check equipment for when hiding this accessory.
+ var/hidden_by_gear_flag
+ /// Whether or not the accessory can be affected by colouration
+ var/do_colouration = TRUE
+ /// Various flags controlling some checks and behavior.
var/flags = 0
+ /// Flags to check when applying this accessory to the mob.
+ var/requires_appearance_flags = 0
+ /// Icon cache for various icon generation steps.
+ var/list/cached_icons = list()
+ /// Whether or not this overlay should be trimmed to fit the base bodypart icon.
+ var/mask_to_bodypart = FALSE
+ /// What blend mode to use when colourizing this accessory.
+ var/color_blend = ICON_ADD
+ /// What blend mode to use when applying this accessory to the compiled organ.
+ var/layer_blend = ICON_OVERLAY
+ /// What bodypart tags does this marking apply to?
+ var/list/body_parts
+ /// Set to a layer integer to apply this as an overlay over the top of hair and such.
+ var/sprite_overlay_layer
+ /// A list of sprite accessory types that are disallowed by this one being included.
+ var/list/disallows_accessories
/decl/sprite_accessory/proc/accessory_is_available(var/mob/owner, var/decl/species/species, var/decl/bodytype/bodytype)
- if(!isnull(required_gender) && bodytype.associated_gender != required_gender)
- return FALSE
if(species)
var/species_is_permitted = TRUE
if(species_allowed)
@@ -46,6 +76,10 @@
if(!species_is_permitted)
return FALSE
if(bodytype)
+ if(LAZYLEN(bodytypes_allowed) && !(bodytype.type in bodytypes_allowed))
+ return FALSE
+ if(LAZYISIN(bodytypes_denied, bodytype.type))
+ return FALSE
if(!isnull(bodytype_categories_allowed) && !(bodytype.bodytype_category in bodytype_categories_allowed))
return FALSE
if(!isnull(bodytype_categories_denied) && (bodytype.bodytype_category in bodytype_categories_denied))
@@ -54,18 +88,51 @@
return FALSE
if(!isnull(body_flags_denied) && (body_flags_denied & bodytype.bodytype_flag))
return FALSE
+ if(requires_appearance_flags && !(bodytype.appearance_flags & requires_appearance_flags))
+ return FALSE
return TRUE
-/decl/sprite_accessory/proc/get_validatable_icon_state()
- return icon_state
-
/decl/sprite_accessory/validate()
. = ..()
if(!icon)
. += "missing icon"
else
- var/actual_icon_state = get_validatable_icon_state()
- if(!actual_icon_state)
+ if(!icon_state)
. += "missing icon_state"
- else if(!check_state_in_icon(actual_icon_state, icon))
- . += "missing icon state \"[actual_icon_state]\" in [icon]"
+ else if(!check_state_in_icon(icon_state, icon))
+ . += "missing icon state \"[icon_state]\" in [icon]"
+
+/decl/sprite_accessory/proc/get_hidden_substitute()
+ return
+
+/decl/sprite_accessory/proc/is_hidden(var/obj/item/organ/external/organ)
+ if(!organ?.owner)
+ return FALSE
+ if(hidden_by_gear_slot)
+ var/obj/item/hiding = organ.owner.get_equipped_item(hidden_by_gear_slot)
+ if(!hiding)
+ return FALSE
+ return (hiding.flags_inv & hidden_by_gear_flag)
+ return FALSE
+
+/decl/sprite_accessory/proc/get_accessory_icon(var/obj/item/organ/external/organ)
+ return icon
+
+/decl/sprite_accessory/proc/get_cached_accessory_icon(var/obj/item/organ/external/organ, var/color = COLOR_WHITE)
+ ASSERT(istext(color) && (length(color) == 7 || length(color) == 9))
+ if(!icon_state)
+ return null
+ LAZYINITLIST(cached_icons[organ.bodytype])
+ LAZYINITLIST(cached_icons[organ.bodytype][organ.organ_tag])
+ var/icon/accessory_icon = cached_icons[organ.bodytype][organ.organ_tag][color]
+ if(!accessory_icon)
+ accessory_icon = icon(get_accessory_icon(organ), icon_state) // make a new one to avoid mutating the base
+ if(!accessory_icon)
+ cached_icons[organ.bodytype][organ.organ_tag][color] = null
+ return null
+ if(mask_to_bodypart)
+ accessory_icon.Blend(get_limb_mask_for(organ.bodytype, organ.organ_tag), ICON_MULTIPLY)
+ if(do_colouration && color)
+ accessory_icon.Blend(color, color_blend)
+ cached_icons[organ.bodytype][organ.organ_tag][color] = accessory_icon
+ return accessory_icon
diff --git a/code/modules/sprite_accessories/_accessory_facial.dm b/code/modules/sprite_accessories/_accessory_facial.dm
index ea5338b8db0..37a00b5254b 100644
--- a/code/modules/sprite_accessories/_accessory_facial.dm
+++ b/code/modules/sprite_accessories/_accessory_facial.dm
@@ -9,14 +9,18 @@
/decl/sprite_accessory/facial_hair
abstract_type = /decl/sprite_accessory/facial_hair
icon = 'icons/mob/human_races/species/human/facial.dmi'
+ hidden_by_gear_slot = slot_head_str
+ hidden_by_gear_flag = BLOCK_HEAD_HAIR
+ body_parts = list(BP_HEAD)
-/decl/sprite_accessory/facial_hair/get_validatable_icon_state()
- return "[icon_state]_s"
+/decl/sprite_accessory/facial_hair/get_hidden_substitute()
+ return GET_DECL(/decl/sprite_accessory/facial_hair/shaved)
/decl/sprite_accessory/facial_hair/shaved
name = "Shaved"
icon_state = "bald"
- required_gender = null
+ bodytypes_allowed = null
+ bodytypes_denied = null
species_allowed = null
subspecies_allowed = null
bodytype_categories_allowed = null
diff --git a/code/modules/sprite_accessories/_accessory_hair.dm b/code/modules/sprite_accessories/_accessory_hair.dm
index 0732fc0eb3c..613a52e7259 100644
--- a/code/modules/sprite_accessories/_accessory_hair.dm
+++ b/code/modules/sprite_accessories/_accessory_hair.dm
@@ -9,15 +9,21 @@
/decl/sprite_accessory/hair
abstract_type = /decl/sprite_accessory/hair
icon = 'icons/mob/human_races/species/human/hair.dmi'
+ hidden_by_gear_slot = slot_head_str
+ hidden_by_gear_flag = BLOCK_HEAD_HAIR
+ body_parts = list(BP_HEAD)
-/decl/sprite_accessory/hair/get_validatable_icon_state()
- return "[icon_state]_s"
+/decl/sprite_accessory/hair/get_hidden_substitute()
+ if(flags & VERY_SHORT)
+ return src
+ return GET_DECL(/decl/sprite_accessory/hair/short)
/decl/sprite_accessory/hair/bald
name = "Bald"
icon_state = "bald"
flags = VERY_SHORT | HAIR_BALD
- required_gender = null
+ bodytypes_allowed = null
+ bodytypes_denied = null
species_allowed = null
subspecies_allowed = null
bodytype_categories_allowed = null
diff --git a/code/modules/sprite_accessories/_accessory_markings.dm b/code/modules/sprite_accessories/_accessory_markings.dm
index 99d73ccab36..6abf3c86e31 100644
--- a/code/modules/sprite_accessories/_accessory_markings.dm
+++ b/code/modules/sprite_accessories/_accessory_markings.dm
@@ -3,31 +3,7 @@
icon = 'icons/mob/human_races/species/default_markings.dmi'
do_colouration = 1 //Almost all of them have it, COLOR_ADD
abstract_type = /decl/sprite_accessory/marking
- //Empty list is unrestricted. Should only restrict the ones that make NO SENSE on other species,
- //like IPC optics overlay stuff.
- var/layer_blend = ICON_OVERLAY
- var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines
- //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN,BP_HEAD
- var/draw_target = MARKING_TARGET_SKIN
- var/list/disallows = list() //A list of other marking types to ban from adding when this marking is already added
- var/list/icons = list()
- var/mask_to_bodypart = TRUE
-
-/decl/sprite_accessory/marking/proc/get_cached_marking_icon(var/decl/bodytype/bodytype, var/bodypart, var/color = COLOR_WHITE)
- LAZYINITLIST(icons[bodytype])
- LAZYINITLIST(icons[bodytype][bodypart])
- if(!icons[bodytype][bodypart][color])
- var/icon/marking_icon = icon(icon, icon_state) // make a new one to avoid mutating the base
- if(mask_to_bodypart)
- marking_icon.Blend(get_limb_mask_for(bodytype, bodypart), ICON_MULTIPLY)
- marking_icon.Blend(color, blend)
- icons[bodytype][bodypart][color] = marking_icon
- return icons[bodytype][bodypart][color]
-
-/decl/sprite_accessory/marking/validate()
- . = ..()
- if(!check_state_in_icon(icon_state, icon))
- . += "missing icon state \"[icon_state]\" in [icon]"
+ mask_to_bodypart = TRUE
/decl/sprite_accessory/marking/tat_hive
name = "Tattoo (Hive, Back)"
diff --git a/code/modules/status_conditions/_status_markers.dm b/code/modules/status_conditions/_status_markers.dm
index e3a935bd4c6..830aa5581b2 100644
--- a/code/modules/status_conditions/_status_markers.dm
+++ b/code/modules/status_conditions/_status_markers.dm
@@ -43,7 +43,7 @@
mob_image = new /image
mob_image.loc = owner
- mob_image.appearance_flags |= (RESET_COLOR|RESET_TRANSFORM|KEEP_TOGETHER)
+ mob_image.appearance_flags |= (RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM|KEEP_APART)
mob_image.plane = DEFAULT_PLANE
mob_image.layer = POINTER_LAYER
@@ -53,7 +53,7 @@
mob_image_personal = new /image
mob_image_personal.loc = owner
- mob_image_personal.appearance_flags |= (RESET_COLOR|RESET_TRANSFORM|KEEP_TOGETHER)
+ mob_image_personal.appearance_flags |= (RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM|KEEP_APART)
mob_image_personal.plane = DEFAULT_PLANE
mob_image_personal.layer = POINTER_LAYER
diff --git a/code/modules/status_conditions/status_sleeping.dm b/code/modules/status_conditions/status_sleeping.dm
index d70e8c3b8b5..7c64e3b2083 100644
--- a/code/modules/status_conditions/status_sleeping.dm
+++ b/code/modules/status_conditions/status_sleeping.dm
@@ -9,14 +9,10 @@
. = ..()
victim.facing_dir = null
victim.UpdateLyingBuckledAndVerbStatus()
- if(ishuman(victim))
- var/mob/living/carbon/human/H = victim
- H.handle_dreams()
- H.species.handle_sleeping(H)
+ victim.handle_dreams()
+ victim.get_species()?.handle_sleeping(victim)
/decl/status_condition/sleeping/handle_status(mob/living/victim, var/amount)
. = ..()
- if(ishuman(victim))
- var/mob/living/carbon/human/H = victim
- H.handle_dreams()
- H.species.handle_sleeping(H)
+ victim.handle_dreams()
+ victim.get_species()?.handle_sleeping(victim)
diff --git a/code/modules/submaps/submap_join.dm b/code/modules/submaps/submap_join.dm
index 06b605a0e62..997f6f89de2 100644
--- a/code/modules/submaps/submap_join.dm
+++ b/code/modules/submaps/submap_join.dm
@@ -54,7 +54,7 @@
if(!check_general_join_blockers(joining, job))
return
- log_debug("Player: [joining] is now offsite rank: [job.title] ([name]), JCP:[job.current_positions], JPL:[job.total_positions]")
+ log_debug("Player: [joining] is now offsite job: [job.title] ([name]), JCP:[job.current_positions], JPL:[job.total_positions]")
joining.faction = name
job.current_positions++
@@ -74,7 +74,7 @@
// We need to make sure to use the abstract instance here; it's not the same as the one we were passed.
character.skillset.obtain_from_client(SSjobs.get_by_path(job.type), character.client)
- job.equip(character, "")
+ job.equip_job(character)
job.apply_fingerprints(character)
var/list/spawn_in_storage = SSjobs.equip_custom_loadout(character, job)
if(spawn_in_storage)
@@ -113,7 +113,7 @@
log_and_message_admins("has joined the round as offsite role [character.mind.assigned_role].", character)
callHook("submap_join", list(job, character))
if(character.cannot_stand()) equip_wheelchair(character)
- job.post_equip_rank(character, job.title)
+ job.post_equip_job_title(character, job.title)
qdel(joining)
return character
diff --git a/code/modules/submaps/submap_landmark.dm b/code/modules/submaps/submap_landmark.dm
index 65cf96aa48e..7bf42c3fec0 100644
--- a/code/modules/submaps/submap_landmark.dm
+++ b/code/modules/submaps/submap_landmark.dm
@@ -1,10 +1,12 @@
/obj/abstract/submap_landmark
- icon = 'icons/misc/mark.dmi'
- invisibility = INVISIBILITY_MAXIMUM
- anchored = TRUE
- simulated = FALSE
- density = FALSE
- opacity = FALSE
+ icon = 'icons/misc/mark.dmi'
+ invisibility = INVISIBILITY_MAXIMUM
+ anchored = TRUE
+ simulated = FALSE
+ density = FALSE
+ opacity = FALSE
+ abstract_type = /obj/abstract/submap_landmark
+ is_spawnable_type = FALSE
/obj/abstract/submap_landmark/joinable_submap
icon_state = "x4"
diff --git a/code/modules/supermatter/setup_supermatter.dm b/code/modules/supermatter/setup_supermatter.dm
index f0f845d580b..e7dc912abb4 100644
--- a/code/modules/supermatter/setup_supermatter.dm
+++ b/code/modules/supermatter/setup_supermatter.dm
@@ -102,7 +102,7 @@ var/global/list/engine_setup_markers = list()
/obj/effect/engine_setup
name = "Engine Setup Marker"
desc = "You shouldn't see this."
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
anchored = TRUE
density = FALSE
icon = 'icons/mob/screen1.dmi'
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index dfa03826dc4..dce747435be 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -562,7 +562,7 @@ var/global/list/supermatter_delam_accent_sounds = list(
animate_filter("rays",list(time = 2 SECONDS, size = 80, loop=-1, flags = ANIMATION_PARALLEL))
animate(time = 2 SECONDS, size = 10, loop=-1, flags = ANIMATION_PARALLEL)
- addtimer(CALLBACK(src, .proc/finish_damage_animation), 12 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(finish_damage_animation)), 12 SECONDS)
/obj/machinery/power/supermatter/proc/finish_damage_animation()
damage_animation = FALSE
diff --git a/code/modules/surgery/_surgery.dm b/code/modules/surgery/_surgery.dm
index 163b4a87dce..65c8eee72d6 100644
--- a/code/modules/surgery/_surgery.dm
+++ b/code/modules/surgery/_surgery.dm
@@ -17,22 +17,44 @@ var/global/list/surgery_tool_exception_cache = list()
/* SURGERY STEPS */
/decl/surgery_step
abstract_type = /decl/surgery_step
+ /// An identifying name string.
var/name
+ /// An informative description string.
var/description
- var/list/allowed_tools // type path referencing tools that can be used for this step, and how well are they suited for it
- var/list/allowed_species // type paths referencing races that this step applies to.
- var/list/disallowed_species // type paths referencing races that this step applies to.
- var/min_duration = 0 // duration of the step
- var/max_duration = 0 // duration of the step
- var/can_infect = 0 // evil infection stuff that will make everyone hate me
- var/blood_level = 0 // How much blood this step can get on surgeon. 1 - hands, 2 - full body.
- var/shock_level = 0 // what shock level will this step put patient on
- var/delicate = 0 // if this step NEEDS stable optable or can be done on any valid surface with no penalty
- var/surgery_candidate_flags = 0 // Various bitflags for requirements of the surgery.
- var/strict_access_requirement = TRUE // Whether or not this surgery will be fuzzy on size requirements.
- var/hidden_from_codex // Is this surgery a secret?
+ /// type path referencing tools that can be used for this step, and how well are they suited for it
+ var/list/allowed_tools
+ /// type paths referencing races that this step applies to.
+ var/list/allowed_species
+ /// type paths referencing races that this step applies to.
+ var/list/disallowed_species
+ /// duration of the step
+ var/min_duration = 0
+ /// duration of the step
+ var/max_duration = 0
+ /// evil infection stuff that will make everyone hate me
+ var/can_infect = 0
+ /// How much blood this step can get on surgeon. 1 - hands, 2 - full body.
+ var/blood_level = 0
+ /// what shock level will this step put patient on
+ var/shock_level = 0
+ /// if this step NEEDS stable optable or can be done on any valid surface with no penalty
+ var/delicate = 0
+ /// Various bitflags for requirements of the surgery.
+ var/surgery_candidate_flags = 0
+ /// Whether or not this surgery will be fuzzy on size requirements.
+ var/strict_access_requirement = TRUE
+ /// Is this surgery a secret?
+ var/hidden_from_codex
+ /// Any additional information to add to the codex entry for this step.
var/list/additional_codex_lines
+ /// What mob type does this surgery apply to.
var/expected_mob_type = /mob/living/carbon/human
+ /// Sound (or list of sounds) to play on end step.
+ var/end_step_sound = "rustle"
+ /// Sound (or list of sounds) to play on fail step.
+ var/fail_step_sound
+ /// Sound (or list of sounds) to play on begin step.
+ var/begin_step_sound = "rustle"
/decl/surgery_step/proc/is_self_surgery_permitted(var/mob/target, var/bodypart)
return TRUE
@@ -86,8 +108,7 @@ var/global/list/surgery_tool_exception_cache = list()
/decl/surgery_step/proc/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool, target_zone)
if(delicate)
return SURGERY_SKILLS_DELICATE
- else
- return SURGERY_SKILLS_GENERIC
+ return SURGERY_SKILLS_GENERIC
// checks whether this step can be applied with the given user and target
/decl/surgery_step/proc/can_use(mob/living/user, mob/living/target, target_zone, obj/item/tool)
@@ -134,6 +155,9 @@ var/global/list/surgery_tool_exception_cache = list()
// does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too
/decl/surgery_step/proc/begin_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
+ SHOULD_CALL_PARENT(TRUE)
+ if(begin_step_sound)
+ playsound(target, pick(begin_step_sound), 15, 1)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
if (can_infect && affected)
spread_germs_to_organ(affected, user)
@@ -149,10 +173,15 @@ var/global/list/surgery_tool_exception_cache = list()
// does stuff to end the step, which is normally print a message + do whatever this step changes
/decl/surgery_step/proc/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- return
+ SHOULD_CALL_PARENT(TRUE)
+ if(end_step_sound)
+ playsound(target, pick(end_step_sound), 15, 1)
// stuff that happens when the step fails
/decl/surgery_step/proc/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
+ SHOULD_CALL_PARENT(TRUE)
+ if(fail_step_sound)
+ playsound(target, pick(fail_step_sound), 15, 1)
return null
/decl/surgery_step/proc/success_chance(mob/living/user, mob/living/target, obj/item/tool, target_zone)
diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm
index 1d438b2c6c9..82f52e1d33d 100644
--- a/code/modules/surgery/bones.dm
+++ b/code/modules/surgery/bones.dm
@@ -19,6 +19,7 @@
/decl/surgery_step/bone/glue
name = "Begin bone repair"
description = "This procedure is used to begin setting a bone in place by treating the damage with bone gel."
+ end_step_sound = 'sound/effects/ointment.ogg'
allowed_tools = list(
TOOL_BONE_GEL = 100,
TOOL_SCREWDRIVER = 75
@@ -46,12 +47,13 @@
if(affected.stage == 0)
affected.stage = 1
affected.status &= ~ORGAN_BRITTLE
+ ..()
/decl/surgery_step/bone/glue/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \
"Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!")
-
+ ..()
//////////////////////////////////////////////////////////////////
// bone setting surgery step
@@ -69,6 +71,7 @@
delicate = 1
surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NEEDS_ENCASEMENT
required_stage = 1
+ end_step_sound = "fracture"
/decl/surgery_step/bone/set_bone/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
@@ -93,6 +96,7 @@
user.visible_message("\The [user] sets [bone] in place with \the [tool].", \
"You set [bone] in place with \the [tool].")
affected.stage = 2
+ ..() // The pseudo-fail condition below plays a fracture sound anyway.
else
user.visible_message("\The [user] sets [bone] in the WRONG place with \the [tool].", \
"You set [bone] in the WRONG place with \the [tool].")
@@ -104,6 +108,7 @@
"Your hand slips, damaging the [affected.encased ? affected.encased : "bones"] in \the [target]'s [affected.name] with \the [tool]!")
affected.fracture()
affected.take_external_damage(5, used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// post setting bone-gelling surgery step
@@ -111,6 +116,7 @@
/decl/surgery_step/bone/finish
name = "Finish bone repair"
description = "This procedure seals a damaged bone with bone gel after setting the bone in place."
+ end_step_sound = 'sound/effects/ointment.ogg'
allowed_tools = list(
TOOL_BONE_GEL = 100,
TOOL_SCREWDRIVER = 75
@@ -137,8 +143,10 @@
affected.status &= ~ORGAN_BROKEN
affected.stage = 0
affected.update_wounds()
+ ..()
/decl/surgery_step/bone/finish/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \
- "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!")
\ No newline at end of file
+ "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!")
+ ..()
diff --git a/code/modules/surgery/crystal.dm b/code/modules/surgery/crystal.dm
index d9899a24ff6..490d1fcc12c 100644
--- a/code/modules/surgery/crystal.dm
+++ b/code/modules/surgery/crystal.dm
@@ -1,7 +1,7 @@
/decl/surgery_step/generic/cut_open/crystal
name = "Drill keyhole incision"
description = "This procedure drills a keyhold incision into crystalline limbs to allow for delicate internal work."
- allowed_tools = list(TOOL_DRILL = 100)
+ allowed_tools = list(TOOL_SURGICAL_DRILL = 100)
fail_string = "cracking"
access_string = "a neat hole"
surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_FLESH
@@ -37,7 +37,7 @@
/decl/surgery_step/internal/detach_organ/crystal
name = "Detach crystalline internal organ"
description = "This procedure severs a crystalline internal organ, allowing it to be removed."
- allowed_tools = list(TOOL_DRILL = 100)
+ allowed_tools = list(TOOL_SURGICAL_DRILL = 100)
surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NEEDS_ENCASEMENT | SURGERY_NO_FLESH
/decl/surgery_step/internal/attach_organ/crystal
diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm
index fe2d40b1626..36a969d13fd 100644
--- a/code/modules/surgery/encased.dm
+++ b/code/modules/surgery/encased.dm
@@ -39,6 +39,7 @@
user.visible_message("[user] has cut [target]'s [affected.encased] open with \the [tool].", \
"You have cut [target]'s [affected.encased] open with \the [tool].")
affected.fracture()
+ ..()
/decl/surgery_step/open_encased/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
@@ -46,3 +47,4 @@
"Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" )
affected.take_external_damage(15, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
affected.fracture()
+ ..()
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index 9d9b79df1ca..a2baf2e1200 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -28,11 +28,13 @@
user.visible_message("[user] repairs \the [target]'s face with \the [tool].", \
"You repair \the [target]'s face with \the [tool].")
var/obj/item/organ/external/h = GET_EXTERNAL_ORGAN(target, target_zone)
- if(h)
+ if(h)
h.status &= ~ORGAN_DISFIGURED
+ ..()
/decl/surgery_step/fix_face/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \
"Your hand slips, tearing skin on [target]'s face with \the [tool]!")
affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
+ ..()
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index 3ae3cbebe64..4f6c83bee51 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -23,6 +23,7 @@
/decl/surgery_step/generic/cut_open
name = "Make incision"
description = "This procedure cuts a small wound that allows access to deeper tissue."
+ end_step_sound = 'sound/items/Wirecutter.ogg'
allowed_tools = list(TOOL_SCALPEL = 100)
min_duration = 90
max_duration = 110
@@ -50,15 +51,18 @@
user.visible_message("[user] has made [access_string] on [target]'s [affected.name] with \the [tool].", \
"You have made [access_string] on [target]'s [affected.name] with \the [tool].",)
affected.createwound(CUT, CEILING(affected.min_broken_damage/2), TRUE)
- playsound(target.loc, 'sound/weapons/bladeslice.ogg', 15, 1)
if(tool.damtype == BURN)
affected.clamp_organ()
+ playsound(target, 'sound/items/Welder.ogg', 15, 1)
+ else
+ ..()
/decl/surgery_step/generic/cut_open/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!", \
"Your hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!")
affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
+ ..()
/decl/surgery_step/generic/cut_open/success_chance(mob/living/user, mob/living/target, obj/item/tool)
. = ..()
@@ -73,6 +77,7 @@
/decl/surgery_step/generic/clamp_bleeders
name = "Clamp bleeders"
description = "This procedure clamps off veins within an incision, preventing it from bleeding excessively."
+ end_step_sound = 'sound/items/Wirecutter.ogg'
allowed_tools = list(
TOOL_HEMOSTAT = 100,
TOOL_CABLECOIL = 75
@@ -100,13 +105,14 @@
"You clamp bleeders in [target]'s [affected.name] with \the [tool].")
affected.clamp_organ()
spread_germs_to_organ(affected, user)
- playsound(target.loc, 'sound/items/Welder.ogg', 15, 1)
+ ..()
/decl/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",)
affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// retractor surgery step
@@ -145,12 +151,14 @@
user.visible_message("[user] keeps the incision open on [target]'s [affected.name] with \the [tool].", \
"You keep the incision open on [target]'s [affected.name] with \the [tool].")
affected.open_incision()
+ ..()
/decl/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!")
affected.take_external_damage(12, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// skin cauterization surgery step
@@ -158,6 +166,7 @@
/decl/surgery_step/generic/cauterize
name = "Cauterize incision"
description = "This procedure cauterizes and closes an incision."
+ end_step_sound = 'sound/items/Welder.ogg'
allowed_tools = list(
TOOL_CAUTERY = 100,
TOOL_WELDER = 25
@@ -198,12 +207,14 @@
affected.update_wounds()
if(affected.clamped())
affected.remove_clamps()
+ ..()
/decl/surgery_step/generic/cauterize/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, damaging [target]'s [affected.name] with \the [tool]!")
affected.take_external_damage(0, 3, used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// limb amputation surgery step
@@ -211,6 +222,7 @@
/decl/surgery_step/generic/amputate
name = "Amputate limb"
description = "This procedure removes a limb, or the stump of a limb, from the body entirely."
+ end_step_sound = 'sound/weapons/bladeslice.ogg'
allowed_tools = list(
TOOL_SAW = 100,
TOOL_HATCHET = 75
@@ -265,6 +277,7 @@
SPAN_DANGER("\The [user] hacks off \the [target]'s [affected.name] at the [affected.amputation_point] with \the [tool]!"), \
SPAN_DANGER("You hack off \the [target]'s [affected.name] with \the [tool]!"))
affected.dismember(clean_cut, DISMEMBER_METHOD_EDGE)
+ ..()
/decl/surgery_step/generic/amputate/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
@@ -279,3 +292,4 @@
SPAN_WARNING("You slip, mangling \the [target]'s [affected.name] with \the [tool]."))
affected.take_external_damage(30, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
affected.fracture()
+ ..()
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index d1923ee3cdc..1b8ef1751a0 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -12,12 +12,14 @@
delicate = 1
surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NEEDS_ENCASEMENT
abstract_type = /decl/surgery_step/cavity
+ end_step_sound = 'sound/effects/squelch1.ogg'
/decl/surgery_step/cavity/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!")
affected.take_external_damage(20, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// create implant space surgery step
@@ -25,7 +27,7 @@
/decl/surgery_step/cavity/make_space
name = "Hollow out cavity"
description = "This procedure is used to prepare a patient to have something large implanted in their body."
- allowed_tools = list(TOOL_DRILL = 100)
+ allowed_tools = list(TOOL_SURGICAL_DRILL = 100)
min_duration = 60
max_duration = 80
@@ -46,6 +48,7 @@
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user] makes some space inside [target]'s [affected.cavity_name] cavity with \the [tool].", \
"You make some space inside [target]'s [affected.cavity_name] cavity with \the [tool]." )
+ ..()
//////////////////////////////////////////////////////////////////
// implant cavity sealing surgery step
@@ -77,6 +80,7 @@
user.visible_message("[user] mends [target]'s [affected.cavity_name] cavity walls with \the [tool].", \
"You mend [target]'s [affected.cavity_name] cavity walls with \the [tool]." )
affected.cavity = FALSE
+ ..()
//////////////////////////////////////////////////////////////////
// implanting surgery step
@@ -88,6 +92,7 @@
min_duration = 80
max_duration = 100
hidden_from_codex = TRUE
+ begin_step_sound = 'sound/effects/squelch1.ogg'
/decl/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/target, target_zone, obj/item/tool)
if(isrobot(user))
@@ -123,7 +128,6 @@
user.visible_message("[user] starts putting \the [tool] inside [target]'s [affected.cavity_name] cavity.", \
"You start putting \the [tool] inside [target]'s [affected.cavity_name] cavity." )
target.custom_pain("The pain in your chest is living hell!",1,affecting = affected)
- playsound(target.loc, 'sound/effects/squelch1.ogg', 25, 1)
..()
/decl/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
@@ -137,6 +141,7 @@
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1,affecting = affected)
LAZYDISTINCTADD(affected.implants, tool)
affected.cavity = 0
+ ..()
//////////////////////////////////////////////////////////////////
// implant removal surgery step
@@ -150,6 +155,7 @@
)
min_duration = 80
max_duration = 100
+ end_step_sound = 'sound/effects/squelch1.ogg'
/decl/surgery_step/cavity/implant_removal/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = ..()
@@ -202,13 +208,16 @@
"You take \the [obj] out of incision on \the [target]'s [affected.name] with \the [tool]." )
target.remove_implant(obj, TRUE, affected)
BITSET(target.hud_updateflag, IMPLOYAL_HUD)
- playsound(target.loc, 'sound/effects/squelch1.ogg', 15, 1)
+ ..()
else
user.visible_message("[user] removes \the [tool] from [target]'s [affected.name].", \
"There's something inside [target]'s [affected.name], but you just missed it this time." )
+ playsound(target.loc, "rustle", 15, 1)
else
user.visible_message("[user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \
"You could not find anything inside [target]'s [affected.name]." )
+ playsound(target.loc, "rustle", 15, 1)
+
/decl/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
..()
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index 421421c42a1..d51f538ac2a 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -13,11 +13,35 @@
delicate = 1
abstract_type = /decl/surgery_step/limb
+/decl/surgery_step/limb/get_skill_reqs(mob/living/user, mob/living/target, obj/item/organ/external/tool)
+ // Not supplied a limb.
+ if(!istype(tool))
+ return ..()
+ // No parent (how did we get here?)
+ var/tool_is_prosthetic = BP_IS_PROSTHETIC(tool)
+ if(!tool.parent_organ)
+ if(tool_is_prosthetic)
+ return SURGERY_SKILLS_ROBOTIC
+ return ..()
+ // Parent is invalid.
+ var/obj/item/organ/external/parent = target && GET_EXTERNAL_ORGAN(target, tool.parent_organ)
+ if(!istype(parent))
+ return ..()
+ // If either is meat and the other is not, return mixed skills.
+ var/parent_is_prosthetic = BP_IS_PROSTHETIC(parent)
+ if(parent_is_prosthetic != tool_is_prosthetic)
+ return SURGERY_SKILLS_ROBOTIC_ON_MEAT
+ // If they are robotic, return robot skills.
+ if(parent_is_prosthetic)
+ return SURGERY_SKILLS_ROBOTIC
+ // Otherwise return base skills.
+ return ..()
+
/decl/surgery_step/limb/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
if(affected)
return affected
- var/list/organ_data = target.get_bodytype()?.has_limbs?["[target_zone]"]
+ var/list/organ_data = target.should_have_limb(target_zone)
return !isnull(organ_data)
//////////////////////////////////////////////////////////////////
@@ -63,14 +87,6 @@
. = TRUE
-/decl/surgery_step/limb/attach/get_skill_reqs(mob/living/user, mob/living/target, obj/item/organ/external/tool)
- if(istype(tool) && BP_IS_PROSTHETIC(tool))
- if(target.isSynthetic())
- return SURGERY_SKILLS_ROBOTIC
- else
- return SURGERY_SKILLS_ROBOTIC_ON_MEAT
- return ..()
-
/decl/surgery_step/limb/attach/can_use(mob/living/user, mob/living/target, target_zone, obj/item/tool)
if(..())
var/obj/item/organ/external/E = tool
@@ -81,6 +97,7 @@
var/obj/item/organ/external/E = tool
user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \
"You start attaching [E.name] to [target]'s [E.amputation_point].")
+ ..()
/decl/surgery_step/limb/attach/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
if(!user.try_unequip(tool))
@@ -95,12 +112,14 @@
if(BP_IS_PROSTHETIC(E) && prob(user.skill_fail_chance(SKILL_DEVICES, 50, SKILL_ADEPT)))
E.add_random_ailment()
+ ..()
/decl/surgery_step/limb/attach/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = tool
user.visible_message(" [user]'s hand slips, damaging [target]'s [E.amputation_point]!", \
" Your hand slips, damaging [target]'s [E.amputation_point]!")
target.apply_damage(10, BRUTE, null, damage_flags=DAM_SHARP)
+ ..()
//////////////////////////////////////////////////////////////////
// limb connecting surgery step
@@ -109,7 +128,7 @@
name = "Connect limb"
description = "This procedure is used to reconnect a replaced severed limb."
allowed_tools = list(
- TOOL_HEMOSTAT = 100,
+ TOOL_SUTURES = 100,
TOOL_CABLECOIL = 75
)
can_infect = 1
@@ -117,13 +136,7 @@
max_duration = 120
/decl/surgery_step/limb/connect/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool, target_zone)
- var/obj/item/organ/external/E = target && GET_EXTERNAL_ORGAN(target, target_zone)
- if(istype(E) && BP_IS_PROSTHETIC(E))
- if(target.isSynthetic())
- return SURGERY_SKILLS_ROBOTIC
- else
- return SURGERY_SKILLS_ROBOTIC_ON_MEAT
- return ..()
+ return ..(tool = (target && GET_EXTERNAL_ORGAN(target, target_zone)))
/decl/surgery_step/limb/connect/can_use(mob/living/user, mob/living/target, target_zone, obj/item/tool)
if(..())
@@ -132,20 +145,23 @@
/decl/surgery_step/limb/connect/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
- "You start connecting tendons and muscle in [target]'s [E.amputation_point].")
+ user.visible_message("[user] starts reattaching tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
+ "You start reattaching tendons and muscle in [target]'s [E.amputation_point].")
+ ..()
/decl/surgery_step/limb/connect/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(target, target_zone)
var/obj/item/organ/external/P = GET_EXTERNAL_ORGAN(target, E.parent_organ)
- user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
- "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].")
+ user.visible_message("[user] has reattached tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
+ "You have reattached tendons and muscles in [target]'s [E.amputation_point] with [tool].")
//This time we call add_organ but we want it to install in a non detached state
target.add_organ(E, P, FALSE, TRUE, FALSE)
+ ..()
/decl/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message(" [user]'s hand slips, damaging [target]'s [E.amputation_point]!", \
" Your hand slips, damaging [target]'s [E.amputation_point]!")
target.apply_damage(10, BRUTE, null, damage_flags=DAM_SHARP)
+ ..()
diff --git a/code/modules/surgery/necrotic.dm b/code/modules/surgery/necrotic.dm
index 446e2467c71..cae3b0fc8eb 100644
--- a/code/modules/surgery/necrotic.dm
+++ b/code/modules/surgery/necrotic.dm
@@ -16,6 +16,7 @@
allowed_tools = list(TOOL_SCALPEL = 90)
min_duration = 150
max_duration = 170
+ end_step_sound = 'sound/weapons/bladeslice.ogg'
/decl/surgery_step/necrotic/tissue/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool)
. = ..()
@@ -70,7 +71,6 @@
user.visible_message(
SPAN_NOTICE("\The [user] has excised the necrotic tissue from \the [target]'s [target_organ] with \the [tool]."), \
SPAN_NOTICE("You have excised the necrotic tissue from \the [target]'s [target_organ] with \the [tool]."))
- playsound(target.loc, 'sound/weapons/bladeslice.ogg', 15, 1)
var/obj/item/organ/O = target.get_organ(LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone))
if(O)
@@ -78,6 +78,7 @@
if(istype(O,/obj/item/organ/external))
var/obj/item/organ/external/E = O
E.disinfect()
+ ..()
/decl/surgery_step/necrotic/tissue/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
@@ -86,6 +87,7 @@
SPAN_DANGER("\The [user]'s hand slips, slicing into a healthy portion of \the [target]'s [affected.name] with \the [tool]!"),
SPAN_DANGER("Your hand slips, slicing into a healthy portion of [target]'s [affected.name] with \the [tool]!"))
affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// Dead organ regeneration treatment
@@ -183,6 +185,7 @@
to_chat(user,SPAN_WARNING("You transferred too little for the organ to regenerate!"))
qdel(temp_reagents)
qdel(temp_holder)
+ ..()
/decl/surgery_step/necrotic/regeneration/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
if(!istype(tool) || !tool.reagents)
@@ -194,3 +197,4 @@
user.visible_message(
SPAN_DANGER("\The [user]'s hand slips, spilling \the [tool]'s contents over the [target]'s [affected.name]!"),
SPAN_DANGER("Your hand slips, spilling \the [tool]'s contents over the [target]'s [affected.name]!"))
+ ..()
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 7bdfc3e64f8..d873e0406eb 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -9,6 +9,7 @@
delicate = 1
surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NEEDS_ENCASEMENT
abstract_type = /decl/surgery_step/internal
+ end_step_sound = 'sound/effects/squelch1.ogg'
//////////////////////////////////////////////////////////////////
// Organ mending surgery step
@@ -69,6 +70,7 @@
I.surgical_fix(user)
user.visible_message("\The [user] finishes treating damage within \the [target]'s [affected.name] with [tool_name].", \
"You finish treating damage within \the [target]'s [affected.name] with [tool_name]." )
+ ..()
/decl/surgery_step/internal/fix_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
@@ -84,6 +86,7 @@
for(var/obj/item/organ/internal/I in affected.internal_organs)
if(I && I.damage > 0 && !BP_IS_PROSTHETIC(I) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED)))
I.take_internal_damage(dam_amt)
+ ..()
//////////////////////////////////////////////////////////////////
// Organ detachment surgery step
@@ -125,6 +128,7 @@
if(I && istype(I) && istype(affected))
//First only detach the organ, without fully removing it
target.remove_organ(I, FALSE, TRUE)
+ ..()
/decl/surgery_step/internal/detach_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
@@ -132,6 +136,7 @@
user.visible_message("[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!")
affected.take_external_damage(rand(30,50), 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// Organ removal surgery step
@@ -185,25 +190,20 @@
/decl/surgery_step/internal/remove_organ/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
user.visible_message("\The [user] has removed \the [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].", \
"You have removed \the [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].")
-
// Extract the organ!
var/obj/item/organ/O = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
if(istype(O) && istype(affected))
//Now call remove again with detach = FALSE so we fully remove it
target.remove_organ(O, TRUE, FALSE)
-
- // Just in case somehow the organ we're extracting from an organic is an MMI
- if(istype(O, /obj/item/organ/internal/mmi_holder))
- var/obj/item/organ/internal/mmi_holder/brain = O
- brain.transfer_and_delete()
- log_warning("Organ removal surgery on '[target]' returned a mmi_holder '[O]' instead of a mmi!!")
+ ..()
/decl/surgery_step/internal/remove_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, damaging [target]'s [affected.name] with \the [tool]!")
affected.take_external_damage(20, used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// Organ inserting surgery step
@@ -244,10 +244,7 @@
CRASH("Target ([target]) of surgery [type] has no bodytype!")
else
var/decl/pronouns/G = O.get_pronouns()
- var/decl/bodytype/root_bodytype = target.get_bodytype()
- if(O.organ_tag == BP_POSIBRAIN && !root_bodytype.has_organ[BP_POSIBRAIN])
- to_chat(user, SPAN_WARNING("There's no place in [target] to fit \the [O.organ_tag]."))
- else if(O.damage > (O.max_damage * 0.75))
+ if(O.damage > (O.max_damage * 0.75))
to_chat(user, SPAN_WARNING("\The [O.name] [G.is] in no state to be transplanted."))
else if(O.w_class > affected.cavity_max_w_class)
to_chat(user, SPAN_WARNING("\The [O.name] [G.is] too big for [affected.cavity_name] cavity!"))
@@ -273,12 +270,10 @@
if(istype(O) && user.try_unequip(O, target))
//Place the organ but don't attach it yet
target.add_organ(O, affected, detached = TRUE)
-
- if(!BP_IS_PROSTHETIC(affected))
- playsound(target.loc, 'sound/effects/squelch1.ogg', 15, 1)
- else
+ if(BP_IS_PROSTHETIC(affected))
playsound(target.loc, 'sound/items/Ratchet.ogg', 50, 1)
-
+ else
+ ..()
if(BP_IS_PROSTHETIC(O) && prob(user.skill_fail_chance(SKILL_DEVICES, 50, SKILL_ADEPT)))
O.add_random_ailment()
@@ -288,6 +283,7 @@
var/obj/item/organ/internal/I = tool
if(istype(I))
I.take_internal_damage(rand(3,5))
+ ..()
//////////////////////////////////////////////////////////////////
// Organ attachment surgery step
@@ -320,8 +316,8 @@
var/list/attachable_organs
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- for(var/obj/item/organ/I in affected.implants)
- if(I && (I.status & ORGAN_CUT_AWAY))
+ for(var/obj/item/organ/I in (affected.implants|affected.internal_organs))
+ if(I.status & ORGAN_CUT_AWAY)
var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state)
radial_button.name = "Attach \the [I.name]"
LAZYSET(attachable_organs, I, radial_button)
@@ -372,9 +368,11 @@
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
if(istype(I) && I.parent_organ == target_zone && affected && (I in affected.implants))
target.add_organ(I, affected, detached = FALSE)
+ ..()
/decl/surgery_step/internal/attach_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!")
affected.take_external_damage(20, used_weapon = tool)
+ ..()
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index 9cefd595c71..ab9fe7b5d5b 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -39,12 +39,14 @@
"You have reattached the [affected.tendon_name] in [target]'s [affected.name] with \the [tool].")
affected.status &= ~ORGAN_TENDON_CUT
affected.update_damages()
+ ..()
/decl/surgery_step/fix_tendon/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \
"Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!")
affected.take_external_damage(5, used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
// IB fix surgery step
@@ -83,12 +85,14 @@
"You have patched the [affected.artery_name] in [target]'s [affected.name] with \the [tool].")
affected.status &= ~ORGAN_ARTERY_CUT
affected.update_damages()
+ ..()
/decl/surgery_step/fix_vein/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \
"Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!")
affected.take_external_damage(5, used_weapon = tool)
+ ..()
//////////////////////////////////////////////////////////////////
@@ -137,10 +141,12 @@
rig.reset()
user.visible_message("[user] has cut through the support systems of [target]'s [rig] with \the [tool].", \
"You have cut through the support systems of [target]'s [rig] with \the [tool].")
+ ..()
/decl/surgery_step/hardsuit/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \
"Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.")
+ ..()
//////////////////////////////////////////////////////////////////
@@ -185,17 +191,11 @@
/decl/surgery_step/sterilize/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
-
- if (!istype(tool, /obj/item/chems))
- return
-
var/obj/item/chems/container = tool
-
var/amount = container.amount_per_transfer_from_this
var/temp_holder = new/obj()
var/datum/reagents/temp_reagents = new(amount, temp_holder)
container.reagents.trans_to_holder(temp_reagents, amount)
-
var/trans = temp_reagents.trans_to_mob(target, temp_reagents.total_volume, CHEM_INJECT) //technically it's contact, but the reagents are being applied to internal tissue
if (trans > 0)
user.visible_message("[user] rubs [target]'s [affected.name] down with \the [tool]'s contents.", \
@@ -203,20 +203,16 @@
affected.disinfect()
qdel(temp_reagents)
qdel(temp_holder)
+ ..()
/decl/surgery_step/sterilize/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
-
- if (!istype(tool, /obj/item/chems))
- return
-
var/obj/item/chems/container = tool
-
container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_INJECT)
-
user.visible_message("[user]'s hand slips, spilling \the [tool]'s contents over the [target]'s [affected.name]!" , \
"Your hand slips, spilling \the [tool]'s contents over the [target]'s [affected.name]!")
affected.disinfect()
+ ..()
/decl/surgery_step/sterilize/proc/check_chemicals(var/obj/item/chems/container)
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index e07d21f4e22..e4c55f59a1d 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -1,4 +1,4 @@
-//Procedures in this file: Robotic surgery steps, organ removal, replacement. MMI insertion, synthetic organ repair.
+//Procedures in this file: Robotic surgery steps, organ removal, replacement, synthetic organ repair.
//////////////////////////////////////////////////////////////////
// ROBOTIC SURGERY //
//////////////////////////////////////////////////////////////////
@@ -10,6 +10,7 @@
can_infect = 0
surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH
abstract_type = /decl/surgery_step/robotics
+ end_step_sound = 'sound/items/Screwdriver.ogg'
/decl/surgery_step/robotics/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool)
return SURGERY_SKILLS_ROBOTIC
@@ -56,11 +57,13 @@
user.visible_message("[user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
"You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",)
affected.hatch_state = HATCH_UNSCREWED
+ ..()
/decl/surgery_step/robotics/unscrew_hatch/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("\The [user]'s [tool.name] slips, failing to unscrew \the [target]'s [affected.name].", \
"Your [tool.name] slips, failing to unscrew [target]'s [affected.name].")
+ ..()
//////////////////////////////////////////////////////////////////
// screw robotic limb hatch surgery step
@@ -88,11 +91,13 @@
user.visible_message("[user] has screwed down the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
"You have screwed down the maintenance hatch on [target]'s [affected.name] with \the [tool].",)
affected.hatch_state = HATCH_CLOSED
+ ..()
/decl/surgery_step/robotics/screw_hatch/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s [tool.name] slips, failing to screw down [target]'s [affected.name].", \
"Your [tool] slips, failing to screw down [target]'s [affected.name].")
+ ..()
//////////////////////////////////////////////////////////////////
// open robotic limb surgery step
@@ -123,11 +128,13 @@
user.visible_message("[user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
"You open the maintenance hatch on [target]'s [affected.name] with \the [tool].")
affected.hatch_state = HATCH_OPENED
+ ..()
/decl/surgery_step/robotics/open_hatch/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].",
"Your [tool] slips, failing to open the hatch on [target]'s [affected.name].")
+ ..()
//////////////////////////////////////////////////////////////////
// close robotic limb surgery step
@@ -160,11 +167,13 @@
"You close the hatch on [target]'s [affected.name] with \the [tool].")
affected.hatch_state = HATCH_UNSCREWED
affected.germ_level = 0
+ ..()
/decl/surgery_step/robotics/close_hatch/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].",
"Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].")
+ ..()
//////////////////////////////////////////////////////////////////
// robotic limb brute damage repair surgery step
@@ -219,12 +228,14 @@
"You finish patching damage to [target]'s [affected.name] with \the [tool].")
affected.heal_damage(rand(30,50),0,1,1)
affected.status &= ~ORGAN_DISFIGURED
+ ..()
/decl/surgery_step/robotics/repair_brute/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].",
"Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].")
target.apply_damage(rand(5,10), BURN, affected)
+ ..()
//////////////////////////////////////////////////////////////////
// robotic limb brittleness repair surgery step
@@ -257,12 +268,14 @@
user.visible_message("[user] finishes repairing the brittle interior of \the [target]'s [affected.name].", \
"You finish repairing the brittle interior of \the [target]'s [affected.name].")
affected.status &= ~ORGAN_BRITTLE
+ ..()
/decl/surgery_step/robotics/repair_brittle/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user] causes some of \the [target]'s [affected.name] to crumble!",
"You cause some of \the [target]'s [affected.name] to crumble!")
target.apply_damage(rand(5,10), BRUTE, affected)
+ ..()
//////////////////////////////////////////////////////////////////
// robotic limb burn damage repair surgery step
@@ -314,12 +327,14 @@
"You finishes splicing new cable into [target]'s [affected.name].")
affected.heal_damage(0,rand(30,50),1,1)
affected.status &= ~ORGAN_DISFIGURED
+ ..()
/decl/surgery_step/robotics/repair_burn/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message("[user] causes a short circuit in [target]'s [affected.name]!",
"You cause a short circuit in [target]'s [affected.name]!")
target.apply_damage(rand(5,10), BURN, affected)
+ ..()
//////////////////////////////////////////////////////////////////
// artificial organ repair surgery step
@@ -369,6 +384,7 @@
user.visible_message("[user] repairs [target]'s [I.name] with [tool].", \
"You repair [target]'s [I.name] with [tool]." )
I.damage = 0
+ ..()
/decl/surgery_step/robotics/fix_organ_robotic/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
@@ -380,6 +396,7 @@
var/obj/item/organ/internal/I = internal
if(I)
I.take_internal_damage(rand(3,5))
+ ..()
//////////////////////////////////////////////////////////////////
// robotic organ detachment surgery step
@@ -418,10 +435,12 @@
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
if(I && istype(I) && istype(affected))
target.remove_organ(I, detach = TRUE)
+ ..()
/decl/surgery_step/robotics/detach_organ_robotic/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, unseating \the [tool].", \
"Your hand slips, unseating \the [tool].")
+ ..()
//////////////////////////////////////////////////////////////////
// robotic organ transplant finalization surgery step
@@ -468,76 +487,13 @@
if (I.organ_tag == current_organ)
target.add_organ(I, affected, detached = FALSE)
break
+ ..()
/decl/surgery_step/robotics/attach_organ_robotic/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, unseating \the [tool].", \
"Your hand slips, unseating \the [tool].")
-
-//////////////////////////////////////////////////////////////////
-// mmi installation surgery step
-//////////////////////////////////////////////////////////////////
-/decl/surgery_step/robotics/install_mmi
- name = "Install MMI"
- description = "This procedure installs an MMI within a prosthetic organ."
- allowed_tools = list(
- /obj/item/mmi = 100
- )
- min_duration = 60
- max_duration = 80
- surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NEEDS_ENCASEMENT
-
-/decl/surgery_step/robotics/install_mmi/pre_surgery_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- var/obj/item/mmi/M = tool
- var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- if(affected && istype(M))
- if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD)
- to_chat(user, SPAN_WARNING("That brain is not usable."))
- else if(BP_IS_CRYSTAL(affected))
- to_chat(user, SPAN_WARNING("The crystalline interior of \the [affected] is incompatible with \the [M]."))
- else if(!target.isSynthetic())
- to_chat(user, SPAN_WARNING("You cannot install a computer brain into a meat body."))
- else if(!target.should_have_organ(BP_BRAIN))
- var/decl/species/species = target.get_species()
- to_chat(user, SPAN_WARNING("You're pretty sure [species ? "[species.name_plural] don't" : "\the [target] doesn't"] normally have a brain."))
- else if(target.has_brain())
- to_chat(user, SPAN_WARNING("Your subject already has a brain."))
- else
- return TRUE
- return FALSE
-
-/decl/surgery_step/robotics/install_mmi/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = ..()
- if(affected && target_zone == BP_HEAD)
- return affected
-
-/decl/surgery_step/robotics/install_mmi/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \
- "You start installing \the [tool] into [target]'s [affected.name].")
..()
-/decl/surgery_step/robotics/install_mmi/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- if(!user.try_unequip(tool) || !ishuman(target))
- return
- var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message("[user] has installed \the [tool] into [target]'s [affected.name].", \
- "You have installed \the [tool] into [target]'s [affected.name].")
-
- var/obj/item/mmi/M = tool
- var/obj/item/organ/internal/mmi_holder/holder = new(target, 1)
- var/mob/living/carbon/human/H = target
- H.add_organ(holder, affected, TRUE)
- tool.forceMove(holder)
- holder.stored_mmi = tool
- holder.update_from_mmi()
-
- if(M.brainmob && M.brainmob.mind)
- M.brainmob.mind.transfer_to(target)
-
-/decl/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- user.visible_message("[user]'s hand slips.", \
- "Your hand slips.")
-
/decl/surgery_step/internal/remove_organ/robotic
name = "Remove robotic component"
description = "This procedure removes a robotic component."
@@ -550,52 +506,3 @@
can_infect = 0
robotic_surgery = TRUE
surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NEEDS_ENCASEMENT
-
-/decl/surgery_step/remove_mmi
- name = "Remove MMI"
- description = "This procedure removes an MMI from a prosthetic organ."
- min_duration = 60
- max_duration = 80
- allowed_tools = list(
- TOOL_HEMOSTAT = 100,
- TOOL_WIRECUTTERS = 75,
- )
- can_infect = 0
- surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NEEDS_ENCASEMENT
-
-/decl/surgery_step/remove_mmi/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool)
- return SURGERY_SKILLS_ROBOTIC
-
-/decl/surgery_step/remove_mmi/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = ..()
- if(affected && (locate(/obj/item/mmi) in affected.implants))
- return affected
-
-/decl/surgery_step/remove_mmi/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message( \
- "\The [user] starts poking around inside [target]'s [affected.name] with \the [tool].", \
- "You start poking around inside [target]'s [affected.name] with \the [tool]." )
- target.custom_pain("The pain in your [affected.name] is living hell!",1,affecting = affected)
- ..()
-
-/decl/surgery_step/remove_mmi/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- if(affected)
- var/obj/item/mmi/mmi = locate() in affected.implants
- if(affected && mmi)
- user.visible_message( \
- SPAN_NOTICE("\The [user] removes \the [mmi] from \the [target]'s [affected.name] with \the [tool]."), \
- SPAN_NOTICE("You remove \the [mmi] from \the [target]'s [affected.name] with \the [tool]."))
- target.remove_implant(mmi, TRUE, affected)
- else
- user.visible_message( \
- SPAN_NOTICE("\The [user] could not find anything inside [target]'s [affected.name]."), \
- SPAN_NOTICE("You could not find anything inside [target]'s [affected.name]."))
-
-/decl/surgery_step/remove_mmi/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
- user.visible_message( \
- SPAN_WARNING("\The [user]'s hand slips, damaging \the [target]'s [affected.name] with \the [tool]!"), \
- SPAN_WARNING("Your hand slips, damaging \the [target]'s [affected.name] with \the [tool]!"))
- affected.take_external_damage(3, 0, used_weapon = tool)
diff --git a/code/modules/surgery/suture_wounds.dm b/code/modules/surgery/suture_wounds.dm
index f1b34698add..98710756830 100644
--- a/code/modules/surgery/suture_wounds.dm
+++ b/code/modules/surgery/suture_wounds.dm
@@ -44,9 +44,11 @@
W.clamped = 1
break
affected.update_damages()
+ ..()
/decl/surgery_step/suture_wounds/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone)
user.visible_message(SPAN_DANGER("[user]'s hand slips, tearing [target]'s [affected.name] with \the [tool]!"), \
SPAN_DANGER("Your hand slips, tearing [target]'s [affected.name] with \the [tool]!"))
- target.apply_damage(3, BRUTE, affected)
\ No newline at end of file
+ target.apply_damage(3, BRUTE, affected)
+ ..()
diff --git a/code/modules/synthesized_instruments/event_manager.dm b/code/modules/synthesized_instruments/event_manager.dm
index 8ca067e6716..182ab68b3b0 100644
--- a/code/modules/synthesized_instruments/event_manager.dm
+++ b/code/modules/synthesized_instruments/event_manager.dm
@@ -68,7 +68,7 @@
if (active) return 0
src.active = 1
- addtimer(CALLBACK(src, .proc/handle_events), 0)
+ addtimer(CALLBACK(src, PROC_REF(handle_events)), 0)
/datum/musical_event_manager/proc/deactivate()
if (src.kill_loop) return 0
diff --git a/code/modules/synthesized_instruments/real_instruments.dm b/code/modules/synthesized_instruments/real_instruments.dm
index 21d9c061214..9324dc19c50 100644
--- a/code/modules/synthesized_instruments/real_instruments.dm
+++ b/code/modules/synthesized_instruments/real_instruments.dm
@@ -254,7 +254,7 @@
/obj/item/synthesized_instrument
var/datum/real_instrument/real_instrument
icon = 'icons/obj/musician.dmi'
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
var/list/instruments = list()
var/path = /datum/instrument
var/sound_player = /datum/sound_player
diff --git a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm b/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm
index 262b10abe7f..e8332774a9e 100644
--- a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm
+++ b/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm
@@ -5,7 +5,7 @@
icon_state = ICON_STATE_WORLD
sound_player = /datum/sound_player/synthesizer
path = /datum/instrument/guitar/clean_crisis
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE)
slot_flags = SLOT_BACK
@@ -16,7 +16,7 @@
icon_state = "eguitar"
sound_player = /datum/sound_player/synthesizer
path = /datum/instrument/guitar
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
matter = list(
/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE,
/decl/material/solid/metal/copper = MATTER_AMOUNT_TRACE,
diff --git a/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm b/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm
index 9282175f64c..43e2e59720c 100644
--- a/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm
+++ b/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm
@@ -1,6 +1,6 @@
/obj/structure/synthesized_instrument/synthesizer/piano
name = "space piano"
- desc = "A surprisingly high-tech piano with a digital display for modifying sound output"
+ desc = "A surprisingly high-tech piano with a digital display for modifying sound output."
icon_state = "piano"
path = /datum/instrument/piano
diff --git a/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm b/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm
index 7b045438466..ef2caaa8bb4 100644
--- a/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm
+++ b/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm
@@ -4,4 +4,4 @@
icon_state = "trumpet"
sound_player = /datum/sound_player/synthesizer
path = /datum/instrument/brass
- material = /decl/material/solid/metal/brass
\ No newline at end of file
+ material = /decl/material/solid/metal/brass
diff --git a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm b/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm
index 15d8f8d9eef..d73ee46400a 100644
--- a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm
+++ b/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm
@@ -8,7 +8,7 @@
icon_state = "violin"
sound_player = /datum/sound_player/violin
path = /datum/instrument/obsolete/violin
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE)
/obj/structure/synthesized_instrument/synthesizer/shouldStopPlaying(mob/user)
diff --git a/code/modules/synthesized_instruments/song.dm b/code/modules/synthesized_instruments/song.dm
index f24bdf289f1..090324ac2af 100644
--- a/code/modules/synthesized_instruments/song.dm
+++ b/code/modules/synthesized_instruments/song.dm
@@ -191,7 +191,7 @@
var/list/allowed_suff = list("b", "n", "#", "s")
var/list/note_off_delta = list("a"=91, "b"=91, "c"=98, "d"=98, "e"=98, "f"=98, "g"=98)
var/list/lines_copy = src.lines.Copy()
- addtimer(CALLBACK(src, .proc/play_lines, user, allowed_suff, note_off_delta, lines_copy), 0)
+ addtimer(CALLBACK(src, PROC_REF(play_lines), user, allowed_suff, note_off_delta, lines_copy), 0)
#undef CP
#undef IS_DIGIT
diff --git a/code/modules/synthesized_instruments/sound_player.dm b/code/modules/synthesized_instruments/sound_player.dm
index 2224721e424..20df81d5456 100644
--- a/code/modules/synthesized_instruments/sound_player.dm
+++ b/code/modules/synthesized_instruments/sound_player.dm
@@ -26,7 +26,7 @@
src.actual_instrument = where
src.echo = global.musical_config.echo_default.Copy()
src.env = global.musical_config.env_default.Copy()
- src.proxy_listener = new(src.actual_instrument, /datum/sound_player/proc/on_turf_entered_relay, /datum/sound_player/proc/on_turfs_changed_relay, range, proc_owner = src)
+ src.proxy_listener = new(src.actual_instrument, TYPE_PROC_REF(/datum/sound_player, on_turf_entered_relay), TYPE_PROC_REF(/datum/sound_player, on_turfs_changed_relay), range, proc_owner = src)
proxy_listener.register_turfs()
/datum/sound_player/Destroy()
diff --git a/code/modules/synthesized_instruments/sound_token.dm b/code/modules/synthesized_instruments/sound_token.dm
index 3de8c409edf..a495fe3dd3c 100644
--- a/code/modules/synthesized_instruments/sound_token.dm
+++ b/code/modules/synthesized_instruments/sound_token.dm
@@ -32,7 +32,7 @@
listeners = list()
listener_status = list()
- events_repository.register(/decl/observ/destroyed, source, src, /datum/proc/qdel_self)
+ events_repository.register(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum, qdel_self))
player.subscribe(src)
diff --git a/code/modules/tools/tool_archetype_definition_pen.dm b/code/modules/tools/tool_archetype_definition_pen.dm
index 87c7aae992c..59c4e08d875 100644
--- a/code/modules/tools/tool_archetype_definition_pen.dm
+++ b/code/modules/tools/tool_archetype_definition_pen.dm
@@ -21,14 +21,16 @@
else
. = "Anonymous"
-/decl/tool_archetype/pen/proc/decrement_uses(var/mob/user, var/obj/item/tool, var/decrement = 1)
+/decl/tool_archetype/pen/proc/decrement_uses(var/mob/user, var/obj/item/tool, var/decrement = 1, var/destroy_on_zero = TRUE)
. = tool.get_tool_property(TOOL_PEN, TOOL_PROP_USES)
if(. < 0)
return TRUE
. -= decrement
tool.set_tool_property(TOOL_PEN, TOOL_PROP_USES, max(0, .)) //Prevent negatives and turning the pen into an infinite uses pen
if(. <= 0 && (tool.get_tool_property(TOOL_PEN, TOOL_PROP_PEN_FLAG) & PEN_FLAG_DEL_EMPTY))
- qdel(tool)
+ . = 0
+ if(destroy_on_zero)
+ qdel(tool)
/**Toggles the active/inactive state of some pens */
/decl/tool_archetype/pen/proc/toggle_active(var/mob/user, var/obj/item/pen/tool)
diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm
index 6ff51f087a4..edd50670dce 100644
--- a/code/modules/tooltip/tooltip.dm
+++ b/code/modules/tooltip/tooltip.dm
@@ -88,7 +88,7 @@ Notes:
queueHide = !!showing
if (queueHide)
- addtimer(CALLBACK(src, .proc/do_hide), 1)
+ addtimer(CALLBACK(src, PROC_REF(do_hide)), 1)
else
do_hide()
diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm
index 7005f2f332c..96c8276a2af 100644
--- a/code/modules/turbolift/turbolift.dm
+++ b/code/modules/turbolift/turbolift.dm
@@ -40,11 +40,11 @@
/datum/turbolift/proc/open_doors(var/datum/turbolift_floor/use_floor = current_floor)
for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors))
- INVOKE_ASYNC(door, /obj/machinery/door/proc/open)
+ INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/machinery/door, open))
/datum/turbolift/proc/close_doors(var/datum/turbolift_floor/use_floor = current_floor)
for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors))
- INVOKE_ASYNC(door, /obj/machinery/door/proc/close)
+ INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/machinery/door, close))
#define LIFT_MOVING 1
#define LIFT_WAITING_A 2
diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm
index dfa7c14bb52..e570d0421ea 100644
--- a/code/modules/turbolift/turbolift_console.dm
+++ b/code/modules/turbolift/turbolift_console.dm
@@ -6,7 +6,7 @@
density = FALSE
layer = ABOVE_OBJ_LAYER
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
- directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}"
+ directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}'
var/datum/turbolift/lift
/obj/structure/lift/proc/pressed(var/mob/user)
diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm
index 9c4398a49ea..0f17bacd3e6 100644
--- a/code/modules/vehicles/bike.dm
+++ b/code/modules/vehicles/bike.dm
@@ -8,7 +8,7 @@
load_item_visible = 1
buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 5)
health = 100
- maxhealth = 100
+ max_health = 100
locked = 0
fire_dam_coeff = 0.6
@@ -124,7 +124,7 @@
return 1
return ..()
-/obj/vehicle/bike/receive_mouse_drop(var/atom/dropping, mob/user)
+/obj/vehicle/bike/receive_mouse_drop(atom/dropping, mob/user, params)
. = ..()
if(!. && istype(dropping, /atom/movable))
if(!load(dropping))
diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm
index a1143b5a075..e995266e03f 100644
--- a/code/modules/vehicles/cargo_train.dm
+++ b/code/modules/vehicles/cargo_train.dm
@@ -6,19 +6,20 @@
on = 0
powered = 1
locked = 0
-
load_item_visible = 1
load_offset_x = 0
buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 7)
-
- var/car_limit = 3 //how many cars an engine can pull before performance degrades
charge_use = 1 KILOWATTS
active_engines = 1
+ var/car_limit = 3 //how many cars an engine can pull before performance degrades
var/obj/item/key/cargo_train/key
/obj/item/key/cargo_train
- name = "key"
- desc = "A keyring with a small steel key, and a yellow fob reading \"Choo Choo!\"."
+ desc = "A small key on a yellow fob reading \"Choo Choo!\"."
+ material = /decl/material/solid/metal/steel
+ matter = list(
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT
+ )
icon = 'icons/obj/vehicles.dmi'
icon_state = "train_keys"
w_class = ITEM_SIZE_TINY
@@ -149,29 +150,27 @@
else
verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine
-/obj/vehicle/train/cargo/RunOver(var/mob/living/carbon/human/H)
- var/list/parts = list(BP_HEAD, BP_CHEST, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM)
-
- H.apply_effects(5, 5)
- for(var/i = 0, i < rand(1,5), i++)
- var/def_zone = pick(parts)
- H.apply_damage(rand(5,10), BRUTE, def_zone)
+/obj/vehicle/train/cargo/crossed_mob(var/mob/living/victim)
+ victim.apply_effects(5, 5)
+ for(var/i = 1 to rand(1,5))
+ var/obj/item/organ/external/E = pick(victim.get_external_organs())
+ if(E)
+ victim.apply_damage(rand(5,10), BRUTE, E.organ_tag)
-/obj/vehicle/train/cargo/trolley/RunOver(var/mob/living/carbon/human/H)
+/obj/vehicle/train/cargo/trolley/crossed_mob(var/mob/living/victim)
..()
- attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])")
+ attack_log += text("\[[time_stamp()]\] ran over [victim.name] ([victim.ckey])")
-/obj/vehicle/train/cargo/engine/RunOver(var/mob/living/carbon/human/H)
+/obj/vehicle/train/cargo/engine/crossed_mob(var/mob/living/victim)
..()
-
if(is_train_head() && ishuman(load))
var/mob/living/carbon/human/D = load
- to_chat(D, "You ran over [H]!")
- visible_message("\The [src] ran over [H]!")
- attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])")
- msg_admin_attack("[D.name] ([D.ckey]) ran over [H.name] ([H.ckey]). (JMP)")
+ to_chat(D, "You ran over \the [victim]!")
+ visible_message("\The [src] ran over \the [victim]!")
+ attack_log += text("\[[time_stamp()]\] ran over [victim.name] ([victim.ckey]), driven by [D.name] ([D.ckey])")
+ msg_admin_attack("[D.name] ([D.ckey]) ran over [victim.name] ([victim.ckey]). (JMP)")
else
- attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])")
+ attack_log += text("\[[time_stamp()]\] ran over [victim.name] ([victim.ckey])")
//-------------------------------------------
@@ -362,10 +361,10 @@
if(!is_train_head() || !on)
move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind
else
- move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains
- move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines)
- move_delay += config.run_delay //base reference speed
- move_delay *= 1.1 //makes cargo trains 10% slower than running when not overweight
+ move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) // limits base overweight so you cant overspeed trains
+ move_delay *= (1 / max(1, active_engines)) * 2 // overweight penalty (scaled by the number of engines)
+ move_delay += get_config_value(/decl/config/num/movement_run) // base reference speed
+ move_delay *= 1.1 // makes cargo trains 10% slower than running when not overweight
/obj/vehicle/train/cargo/trolley/update_car(var/train_length, var/active_engines)
src.train_length = train_length
diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm
index 61e579a188e..804dea26ff9 100644
--- a/code/modules/vehicles/train.dm
+++ b/code/modules/vehicles/train.dm
@@ -5,7 +5,7 @@
move_delay = 1
health = 100
- maxhealth = 100
+ max_health = 100
fire_dam_coeff = 0.7
brute_dam_coeff = 0.5
@@ -103,14 +103,14 @@
to_chat(user, "You climb down from [src].")
return 1
-/obj/vehicle/train/handle_mouse_drop(atom/over, mob/user)
+/obj/vehicle/train/handle_mouse_drop(atom/over, mob/user, params)
if(istype(over, /obj/vehicle/train))
var/obj/vehicle/train/beep = over
beep.latch(src, user)
return TRUE
. = ..()
-/obj/vehicle/train/receive_mouse_drop(var/atom/dropping, mob/user)
+/obj/vehicle/train/receive_mouse_drop(atom/dropping, mob/user, params)
. = ..()
if(!. && istype(dropping, /atom/movable))
if(!load(dropping))
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index af200c686d8..2386d664bbb 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -19,8 +19,6 @@
var/attack_log = null
var/on = 0
- var/health = 0 //do not forget to set health for your vehicle!
- var/maxhealth = 0
var/fire_dam_coeff = 1.0
var/brute_dam_coeff = 1.0
var/open = 0 //Maint panel
@@ -86,9 +84,9 @@
else if(IS_WELDER(W))
var/obj/item/weldingtool/T = W
if(T.welding)
- if(health < maxhealth)
+ if(health < max_health)
if(open)
- health = min(maxhealth, health+10)
+ health = min(max_health, health+10)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.visible_message("\The [user] repairs \the [src]!","You repair \the [src]!")
else
@@ -242,9 +240,6 @@
cell = null
powercheck()
-/obj/vehicle/proc/RunOver(var/mob/living/carbon/human/H)
- return //write specifics for different vehicles
-
//-------------------------------------------
// Loading/unloading procs
//
diff --git a/code/modules/weather/_weather.dm b/code/modules/weather/_weather.dm
index 7f653fc0950..7f27ab62ca1 100644
--- a/code/modules/weather/_weather.dm
+++ b/code/modules/weather/_weather.dm
@@ -1,21 +1,21 @@
/*
* Notes on weather:
*
- * - Weather is a single object that sits in the vis_contents of all outside turfs on
- * its associated z-levels and is removed or added by /turf/proc/update_weather(),
+ * - Weather is a single object that sits in the vis_contents of all outside turfs on
+ * its associated z-levels and is removed or added by /turf/proc/update_weather(),
* which is usually called from /turf/proc/set_outside().
*
* - Weather generally assumes any atom that cares about it will ask it directly and
* mobs do this in /mob/living/proc/handle_environment().
*
- * - For this system to be scalable, it should minimize the amount of list-based
- * processing it does and be primarily passive, allowing mobs to ignore it or
+ * - For this system to be scalable, it should minimize the amount of list-based
+ * processing it does and be primarily passive, allowing mobs to ignore it or
* poll it on their own time.
*
* - The weather object is queued on SSweather and is polled every fifteen seconds at time
* of writing. This is handled in /obj/abstract/weather_system/proc/tick().
*
- * - When evaluating, weather will generally get more intense or more severe rather than
+ * - When evaluating, weather will generally get more intense or more severe rather than
* jumping around randomly. Each state will set a minimum duration based on min/max time.
*
* - If polled between weather updates there is a chance of modifying wind speed and direction
@@ -23,12 +23,13 @@
*/
/obj/abstract/weather_system
- plane = DEFAULT_PLANE
- layer = ABOVE_PROJECTILE_LAYER
- icon = 'icons/effects/weather.dmi'
- icon_state = "blank"
- invisibility = 0
- appearance_flags = (RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM)
+ plane = DEFAULT_PLANE
+ layer = ABOVE_PROJECTILE_LAYER
+ icon = 'icons/effects/weather.dmi'
+ icon_state = "blank"
+ invisibility = INVISIBILITY_NONE
+ appearance_flags = (RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM)
+ is_spawnable_type = FALSE
var/water_material = /decl/material/liquid/water // Material to use for the properties of rain.
var/ice_material = /decl/material/solid/ice // Material to use for the properties of snow and hail.
@@ -91,12 +92,10 @@
// Dummy object for lightning flash animation.
/obj/abstract/lightning_overlay
- plane = EMISSIVE_PLANE
- layer = ABOVE_LIGHTING_LAYER
- icon = 'icons/effects/weather.dmi'
- icon_state = "full"
- alpha = 0
-
-/obj/abstract/lightning_overlay/Initialize()
- . = ..()
- invisibility = 0 // This is set to maximum in parent regardless of what we set, because we can't have nice things.
\ No newline at end of file
+ plane = EMISSIVE_PLANE
+ layer = ABOVE_LIGHTING_LAYER
+ icon = 'icons/effects/weather.dmi'
+ icon_state = "full"
+ alpha = 0
+ invisibility = INVISIBILITY_NONE
+ is_spawnable_type = FALSE
diff --git a/code/modules/weather/weather_debug.dm b/code/modules/weather/weather_debug.dm
index 0fbf244f098..e182179bc15 100644
--- a/code/modules/weather/weather_debug.dm
+++ b/code/modules/weather/weather_debug.dm
@@ -11,7 +11,7 @@
to_chat(usr, SPAN_WARNING("You need to have a turf to use this verb."))
return
- var/obj/abstract/weather_system/weather = T.weather || SSweather.get_weather_for_level(T.z)
+ var/obj/abstract/weather_system/weather = T.weather || SSweather.weather_by_z[T.z]
if(!weather)
to_chat(usr, SPAN_WARNING("This z-level does not have weather."))
return
@@ -28,15 +28,17 @@
return
var/turf/T = get_turf(usr)
+ while(T && HasAbove(T.z))
+ T = GetAbove(T)
if(!istype(T))
to_chat(usr, SPAN_WARNING("You need to have a turf to use this verb."))
return
- var/obj/abstract/weather_system/weather = T.weather || SSweather.get_weather_for_level(T.z)
+ var/obj/abstract/weather_system/weather = T.weather || SSweather.weather_by_z[T.z]
if(weather)
to_chat(usr, SPAN_WARNING("This z-level already has weather."))
return
- new /obj/abstract/weather_system(null, T.z)
+ SSweather.setup_weather_system(SSmapping.levels_by_z[T.z])
to_chat(usr, SPAN_NOTICE("Weather created for z[T.z]."))
/datum/admins/proc/force_weather_state()
@@ -52,13 +54,13 @@
to_chat(usr, SPAN_WARNING("You need to have a turf to use this verb."))
return
- var/obj/abstract/weather_system/weather = T.weather || SSweather.get_weather_for_level(T.z)
+ var/obj/abstract/weather_system/weather = T.weather || SSweather.weather_by_z[T.z]
if(!weather)
to_chat(usr, SPAN_WARNING("This z-level has no weather. Use Initialize Weather For Level if you want to create it."))
return
var/use_state = input(usr, "Which state do you wish to use?", "Target State") as null|anything in decls_repository.get_decl_paths_of_subtype(/decl/state/weather)
- if(!use_state || weather != (T.weather || SSweather.get_weather_for_level(T.z)))
+ if(!use_state || weather != (T.weather || SSweather.weather_by_z[T.z]))
return
weather.weather_system.set_state(use_state)
var/decl/state/weather/weather_state = GET_DECL(use_state)
diff --git a/code/modules/weather/weather_init.dm b/code/modules/weather/weather_init.dm
index 2a933ac9cb5..d5fdc4e5632 100644
--- a/code/modules/weather/weather_init.dm
+++ b/code/modules/weather/weather_init.dm
@@ -4,7 +4,7 @@ INITIALIZE_IMMEDIATE(/obj/abstract/weather_system)
. = ..()
- invisibility = 0
+ set_invisibility(INVISIBILITY_NONE)
// Bookkeeping/rightclick guards.
verbs.Cut()
@@ -21,17 +21,18 @@ INITIALIZE_IMMEDIATE(/obj/abstract/weather_system)
// If we're post-init, init immediately.
if(SSweather.initialized)
- addtimer(CALLBACK(src, .proc/init_weather), 0)
+ addtimer(CALLBACK(src, PROC_REF(init_weather)), 0)
// Start the weather effects from the highest point; they will propagate downwards during update.
/obj/abstract/weather_system/proc/init_weather()
// Track all z-levels.
- var/highest_z = affecting_zs[1]
- for(var/tz in affecting_zs)
- if(tz > highest_z)
- highest_z = tz
-
- // Update turf weather.
- for(var/turf/T as anything in block(locate(1, 1, highest_z), locate(world.maxx, world.maxy, highest_z)))
- T.update_weather(src)
- CHECK_TICK
+ for(var/highest_z in affecting_zs)
+ var/turfcount = 0
+ if(HasAbove(highest_z))
+ continue
+ // Update turf weather.
+ for(var/turf/T as anything in block(locate(1, 1, highest_z), locate(world.maxx, world.maxy, highest_z)))
+ T.update_weather(src)
+ turfcount++
+ CHECK_TICK
+ log_debug("Initialized weather for [turfcount] turf\s from z[highest_z].")
diff --git a/code/modules/weather/weather_mob_tracking.dm b/code/modules/weather/weather_mob_tracking.dm
index 0a1a318700b..4355918aa8f 100644
--- a/code/modules/weather/weather_mob_tracking.dm
+++ b/code/modules/weather/weather_mob_tracking.dm
@@ -2,8 +2,8 @@
var/global/list/current_mob_ambience = list()
/obj/abstract/weather_system
- // Weakref lists used to track mobs within our weather
- // system; alternative to keeping big lists of actual mobs or
+ // Weakref lists used to track mobs within our weather
+ // system; alternative to keeping big lists of actual mobs or
// having mobs constantly poked by weather systems.
var/tmp/list/mobs_on_cooldown = list() // Has this mob recently been messed with by the weather?
@@ -15,7 +15,7 @@ var/global/list/current_mob_ambience = list()
var/mobref = weakref(M)
if(!(mobref in mobs_on_cooldown))
mobs_on_cooldown[mobref] = TRUE
- addtimer(CALLBACK(src, .proc/clear_cooldown, mobref), delay)
+ addtimer(CALLBACK(src, PROC_REF(clear_cooldown), mobref), delay)
return TRUE
return FALSE
diff --git a/code/modules/webhooks/_webhook.dm b/code/modules/webhooks/_webhook.dm
index e7cfb646cd7..ed5087c06bd 100644
--- a/code/modules/webhooks/_webhook.dm
+++ b/code/modules/webhooks/_webhook.dm
@@ -10,7 +10,7 @@
if (!target_url)
return -1
- var/result = call(HTTP_POST_DLL_LOCATION, "send_post_request")(target_url, payload, json_encode(list("Content-Type" = "application/json")))
+ var/result = LIBCALL(HTTP_POST_DLL_LOCATION, "send_post_request")(target_url, payload, json_encode(list("Content-Type" = "application/json")))
result = cached_json_decode(result)
if (result["error_code"])
@@ -27,7 +27,7 @@
if(!length(message))
return FALSE
- if(config.disable_webhook_embeds)
+ if(get_config_value(/decl/config/toggle/disable_webhook_embeds))
var/list/embed_content
for(var/list/embed in message["embeds"])
if(embed["title"])
diff --git a/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm b/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm
index 65d4f5775d6..08df28860c2 100644
--- a/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm
+++ b/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm
@@ -50,7 +50,7 @@
/obj/effect/energy_field/artifact
strength = 1
density = TRUE
- invisibility = 0
+ invisibility = INVISIBILITY_NONE
is_spawnable_type = FALSE
var/datum/artifact_effect/forcefield/owner
diff --git a/code/modules/xenoarcheaology/finds/find_types/guns.dm b/code/modules/xenoarcheaology/finds/find_types/guns.dm
index bad46a6a963..fa6de524561 100644
--- a/code/modules/xenoarcheaology/finds/find_types/guns.dm
+++ b/code/modules/xenoarcheaology/finds/find_types/guns.dm
@@ -64,13 +64,16 @@
//10% chance to have an unchargeable cell
//15% chance to gain a random amount of starting energy, otherwise start with an empty cell
- if(prob(10))
- new_gun.power_supply.maxcharge = 0
- if(prob(15))
- new_gun.power_supply.charge = rand(0, new_gun.power_supply.maxcharge)
- else
- new_gun.power_supply.charge = 0
-
+ var/obj/item/cell/power_supply = new_gun.get_cell()
+ if(power_supply)
+ if(prob(10))
+ power_supply.maxcharge = 0
+ if(prob(15))
+ power_supply.charge = rand(0, power_supply.maxcharge)
+ else
+ power_supply.charge = 0
+ power_supply.update_icon()
+ new_gun.update_icon()
return new_gun
/decl/archaeological_find/laser/new_icon()
diff --git a/code/modules/xenoarcheaology/finds/find_types/statuette.dm b/code/modules/xenoarcheaology/finds/find_types/statuette.dm
index c2f480dd53f..beb93d05fa3 100644
--- a/code/modules/xenoarcheaology/finds/find_types/statuette.dm
+++ b/code/modules/xenoarcheaology/finds/find_types/statuette.dm
@@ -41,7 +41,7 @@
//see if we've identified anyone nearby
if(world.time - last_bloodcall > bloodcall_interval && nearby_mobs.len)
var/mob/living/carbon/human/M = pop(nearby_mobs)
- if(M in view(7,src) && M.health > 20)
+ if(M in view(7,src) && M.current_health > 20)
if(prob(50))
bloodcall(M)
nearby_mobs.Add(M)
diff --git a/code/modules/xenoarcheaology/finds/strange_rock.dm b/code/modules/xenoarcheaology/finds/strange_rock.dm
index e30753a5abb..73a4009878f 100644
--- a/code/modules/xenoarcheaology/finds/strange_rock.dm
+++ b/code/modules/xenoarcheaology/finds/strange_rock.dm
@@ -4,7 +4,7 @@
desc = "Seems to have some unusal strata evident throughout it."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "strange"
- origin_tech = "{'materials':5}"
+ origin_tech = @'{"materials":5}'
material = /decl/material/solid/stone/sandstone
var/obj/item/inside
diff --git a/code/modules/xenoarcheaology/machinery/artifact_analyser.dm b/code/modules/xenoarcheaology/machinery/artifact_analyser.dm
index 5cf1f67dc33..af753c97347 100644
--- a/code/modules/xenoarcheaology/machinery/artifact_analyser.dm
+++ b/code/modules/xenoarcheaology/machinery/artifact_analyser.dm
@@ -29,7 +29,7 @@
if(!owned_scanner)
owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src)
if(owned_scanner)
- events_repository.register(/decl/observ/destroyed, owned_scanner, src, /obj/machinery/artifact_analyser/proc/clear_scanner)
+ events_repository.register(/decl/observ/destroyed, owned_scanner, src, TYPE_PROC_REF(/obj/machinery/artifact_analyser, clear_scanner))
/obj/machinery/artifact_analyser/proc/clear_scanner()
if(owned_scanner)
@@ -39,7 +39,7 @@
/obj/machinery/artifact_analyser/proc/set_object(var/obj/O)
if(O != scanned_object && O)
clear_object()
- events_repository.register(/decl/observ/destroyed, O, src, /obj/machinery/artifact_analyser/proc/clear_object)
+ events_repository.register(/decl/observ/destroyed, O, src, TYPE_PROC_REF(/obj/machinery/artifact_analyser, clear_object))
scanned_object = O
/obj/machinery/artifact_analyser/proc/clear_object()
diff --git a/code/modules/xenoarcheaology/machinery/artifact_harvester.dm b/code/modules/xenoarcheaology/machinery/artifact_harvester.dm
index e04ff905dac..3b7f727b735 100644
--- a/code/modules/xenoarcheaology/machinery/artifact_harvester.dm
+++ b/code/modules/xenoarcheaology/machinery/artifact_harvester.dm
@@ -31,7 +31,7 @@
if(!owned_scanner)
owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src)
if(owned_scanner)
- events_repository.register(/decl/observ/destroyed, owned_scanner, src, /obj/machinery/artifact_analyser/proc/clear_scanner)
+ events_repository.register(/decl/observ/destroyed, owned_scanner, src, TYPE_PROC_REF(/obj/machinery/artifact_analyser, clear_scanner))
/obj/machinery/artifact_harvester/Destroy()
clear_scanner()
@@ -53,7 +53,7 @@
if(cur_artifact == new_artifact || !new_artifact)
return
clear_artifact()
- events_repository.register(/decl/observ/destroyed, new_artifact, src, /obj/machinery/artifact_harvester/proc/clear_artifact)
+ events_repository.register(/decl/observ/destroyed, new_artifact, src, TYPE_PROC_REF(/obj/machinery/artifact_harvester, clear_artifact))
cur_artifact = new_artifact
/obj/machinery/artifact_harvester/attackby(var/obj/I, var/mob/user)
diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm
index 5e597f56249..03510f0db9e 100644
--- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm
+++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm
@@ -3,7 +3,7 @@
desc = "Curious device that can replicate the effects of anomalies without needing to understand their inner workings."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "anobattery0"
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/metal/chromium = MATTER_AMOUNT_SECONDARY,
/decl/material/solid/metal/zinc = MATTER_AMOUNT_REINFORCEMENT,
@@ -40,7 +40,7 @@
desc = "APU allows users to safely (relatively) harness powers beyond their understanding, as long as they've been stored in anomaly power cells."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "anodev_empty"
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
matter = list(
/decl/material/solid/metal/chromium = MATTER_AMOUNT_SECONDARY,
/decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT,
@@ -134,7 +134,7 @@
activated = 1
current_tick = 0
START_PROCESSING(SSobj, src)
- events_repository.register(/decl/observ/moved, src, src, /obj/item/anodevice/proc/on_move)
+ events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/item/anodevice, on_move))
if(inserted_battery?.battery_effect?.activated == 0)
inserted_battery.battery_effect.ToggleActivate(1)
diff --git a/code/modules/xenoarcheaology/tools/anomaly_container.dm b/code/modules/xenoarcheaology/tools/anomaly_container.dm
index 3ad102b8aeb..19f0e781d94 100644
--- a/code/modules/xenoarcheaology/tools/anomaly_container.dm
+++ b/code/modules/xenoarcheaology/tools/anomaly_container.dm
@@ -37,7 +37,7 @@
underlays.Cut()
desc = initial(desc)
-/obj/structure/artifact/handle_mouse_drop(atom/over, mob/user)
+/obj/structure/artifact/handle_mouse_drop(atom/over, mob/user, params)
if(istype(over, /obj/structure/anomaly_container))
Bumped(user)
var/obj/structure/anomaly_container/box = over
diff --git a/code/modules/xenoarcheaology/tools/anomaly_scanner.dm b/code/modules/xenoarcheaology/tools/anomaly_scanner.dm
index f94730f625f..94555b7c17c 100644
--- a/code/modules/xenoarcheaology/tools/anomaly_scanner.dm
+++ b/code/modules/xenoarcheaology/tools/anomaly_scanner.dm
@@ -3,8 +3,8 @@
desc = "A device which aids in triangulation of exotic particles."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "flashgun"
- item_state = "lampgreen"
- origin_tech = "{'wormholes':3,'magnets':3}"
+ item_state = "flashgun"
+ origin_tech = @'{"wormholes":3,"magnets":3}'
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/metal/aluminium = MATTER_AMOUNT_REINFORCEMENT,
diff --git a/code/modules/xenoarcheaology/tools/core_sampler.dm b/code/modules/xenoarcheaology/tools/core_sampler.dm
index d8190632573..d022291f335 100644
--- a/code/modules/xenoarcheaology/tools/core_sampler.dm
+++ b/code/modules/xenoarcheaology/tools/core_sampler.dm
@@ -6,7 +6,7 @@
item_state = "screwdriver_brown"
w_class = ITEM_SIZE_TINY
material = /decl/material/solid/metal/steel
- matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT)
+ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT)
var/obj/item/sample
/obj/item/core_sampler/examine(mob/user, distance)
@@ -43,7 +43,7 @@
. = ..()
if(proximity_flag)
sample_item(target, user)
-
+
/obj/item/rocksliver
name = "rock sliver"
desc = "It looks extremely delicate."
@@ -54,7 +54,7 @@
sharp = 1
material = /decl/material/solid/stone/sandstone
material_health_multiplier = 0.25
-
+
/obj/item/rocksliver/Initialize(ml, material_key, geodata)
. = ..()
icon_state = "sliver[rand(1, 3)]"
diff --git a/code/modules/xenoarcheaology/tools/depth_scanner.dm b/code/modules/xenoarcheaology/tools/depth_scanner.dm
index b086667c265..c09dedbda44 100644
--- a/code/modules/xenoarcheaology/tools/depth_scanner.dm
+++ b/code/modules/xenoarcheaology/tools/depth_scanner.dm
@@ -2,9 +2,8 @@
name = "depth analysis scanner"
desc = "A device used to check spatial depth and density of rock outcroppings."
icon = 'icons/obj/items/device/depth_scanner.dmi'
- icon_state = "crap"
- item_state = "analyzer"
- origin_tech = "{'magnets':2,'engineering':2,'wormholes':2}"
+ icon_state = ICON_STATE_WORLD
+ origin_tech = @'{"magnets":2,"engineering":2,"wormholes":2}'
material = /decl/material/solid/metal/steel
matter = list(
/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT,
diff --git a/code/modules/xenoarcheaology/tools/equipment.dm b/code/modules/xenoarcheaology/tools/equipment.dm
index 8e5e4c38dd6..c238e300741 100644
--- a/code/modules/xenoarcheaology/tools/equipment.dm
+++ b/code/modules/xenoarcheaology/tools/equipment.dm
@@ -36,7 +36,6 @@
ARMOR_RAD = ARMOR_RAD_SHIELDED
)
anomaly_shielding = 0.2
- light_overlay = "hardhat_light"
/obj/item/clothing/suit/space/void/excavation/prepared
helmet = /obj/item/clothing/head/helmet/space/void/excavation
@@ -71,4 +70,4 @@
/obj/item/ano_scanner,
/obj/item/stack/tape_roll/barricade_tape/research,
/obj/item/pickaxe/xeno/hand)
- material = /decl/material/solid/leather/synth
+ material = /decl/material/solid/organic/leather/synth
diff --git a/code/modules/xenoarcheaology/tools/misc.dm b/code/modules/xenoarcheaology/tools/misc.dm
index 868128238e7..d16e0d69e92 100644
--- a/code/modules/xenoarcheaology/tools/misc.dm
+++ b/code/modules/xenoarcheaology/tools/misc.dm
@@ -5,10 +5,10 @@
return list(
/obj/item/book/manual/excavation,
/obj/item/book/manual/mass_spectrometry,
- /obj/item/book/manual/materials_chemistry_analysis,
- /obj/item/book/manual/anomaly_testing,
- /obj/item/book/manual/anomaly_spectroscopy,
- /obj/item/book/manual/stasis,
+ /obj/item/book/fluff/materials_chemistry_analysis,
+ /obj/item/book/fluff/anomaly_testing,
+ /obj/item/book/fluff/anomaly_spectroscopy,
+ /obj/item/book/fluff/stasis,
)
/obj/structure/closet/secure_closet/xenoarchaeologist
@@ -66,9 +66,10 @@
//
//Structures
-/decl/material/solid/metal/chromium/generate_recipes(reinforce_material)
+/decl/material/solid/metal/chromium/generate_recipes(stack_type, reinforce_material)
. = ..()
- . += /datum/stack_recipe/structure/anomaly_container
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += /datum/stack_recipe/structure/anomaly_container
/datum/stack_recipe/structure/anomaly_container
title = "anomaly container"
diff --git a/code/modules/xenoarcheaology/tools/picks.dm b/code/modules/xenoarcheaology/tools/picks.dm
index cf126c9cc4b..1d9eea8282e 100644
--- a/code/modules/xenoarcheaology/tools/picks.dm
+++ b/code/modules/xenoarcheaology/tools/picks.dm
@@ -29,7 +29,7 @@
drill_sound = 'sound/weapons/thudswoosh.ogg'
drill_verb = "brushing"
sharp = 0
- material = /decl/material/solid/wood
+ material = /decl/material/solid/organic/wood
matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT)
/obj/item/pickaxe/xeno/one_pick
@@ -99,7 +99,7 @@
max_storage_space = 18
max_w_class = ITEM_SIZE_NORMAL
use_to_pickup = 1
- material = /decl/material/solid/leather/synth
+ material = /decl/material/solid/organic/leather/synth
/obj/item/storage/excavation/WillContain()
return list(
diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm
index 23d6ca0a389..d2daf82b18d 100644
--- a/code/modules/xenoarcheaology/tools/tools.dm
+++ b/code/modules/xenoarcheaology/tools/tools.dm
@@ -3,7 +3,7 @@
desc = "A coiled metallic tape used to check dimensions and lengths."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "measuring"
- origin_tech = "{'materials':1}"
+ origin_tech = @'{"materials":1}'
material = /decl/material/solid/metal/steel
w_class = ITEM_SIZE_SMALL
@@ -18,4 +18,4 @@
max_storage_space = 200
max_w_class = ITEM_SIZE_NORMAL
can_hold = list(/obj/item/fossil)
- material = /decl/material/solid/leather/synth
\ No newline at end of file
+ material = /decl/material/solid/organic/leather/synth
\ No newline at end of file
diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm
index b2eb73feaae..ae9f0a4d90f 100644
--- a/code/modules/xgm/xgm_gas_mixture.dm
+++ b/code/modules/xgm/xgm_gas_mixture.dm
@@ -322,9 +322,9 @@
//Copies gas and temperature from another gas_mixture.
/datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample)
gas = sample.gas.Copy()
- graphic = sample.graphic.Copy()
temperature = sample.temperature
update_values()
+ check_tile_graphic()
return 1
/datum/gas_mixture/GetCloneArgs()
diff --git a/code/procs/AStar.dm b/code/procs/AStar.dm
index e3cf62730d7..01e4213f805 100644
--- a/code/procs/AStar.dm
+++ b/code/procs/AStar.dm
@@ -12,7 +12,7 @@ And for the distance one i wrote:
/turf/proc/Distance
So an example use might be:
-src.path_list = AStar(src.loc, target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance)
+src.path_list = AStar(src.loc, target.loc, TYPE_PROC_REF(/turf, AdjacentTurfs), TYPE_PROC_REF(/turf, Distance))
Note: The path is returned starting at the END node, so i wrote reverselist to reverse it for ease of use.
diff --git a/code/procs/hud.dm b/code/procs/hud.dm
index c42577190d2..760d1b2fb37 100644
--- a/code/procs/hud.dm
+++ b/code/procs/hud.dm
@@ -28,9 +28,9 @@ the HUD updates properly! */
P.Client.images += patient.hud_list[STATUS_HUD]
else
var/sensor_level = getsensorlevel(patient)
- if(sensor_level >= SUIT_SENSOR_VITAL)
+ if(sensor_level >= VITALS_SENSOR_VITAL)
P.Client.images += patient.hud_list[HEALTH_HUD]
- if(sensor_level >= SUIT_SENSOR_BINARY)
+ if(sensor_level >= VITALS_SENSOR_BINARY)
P.Client.images += patient.hud_list[LIFE_HUD]
//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features.
diff --git a/code/unit_tests/chemistry_tests.dm b/code/unit_tests/chemistry_tests.dm
index 3f7c27a9c31..6b16b290696 100644
--- a/code/unit_tests/chemistry_tests.dm
+++ b/code/unit_tests/chemistry_tests.dm
@@ -173,4 +173,60 @@
else
pass("No reactions had conflicts.")
+ return 1
+
+/datum/unit_test/chemistry_premade_bottles_shall_not_melt
+ name = "CHEMISTRY: Reagent containers shall not be destroyed by their contents"
+ // List of master types that can be reasonably expected to spawn with chems inside them.
+ var/static/list/master_types = list(
+ /obj/item/chems,
+ /obj/structure/reagent_dispensers
+ )
+ // Types to be skipped for reasons other than abstraction/spawnability.
+ var/static/list/excepted_types = list()
+
+/datum/unit_test/chemistry_premade_bottles_shall_not_melt/start_test()
+
+ // Main test.
+ var/list/chem_refs = list()
+ var/turf/spawn_spot = get_safe_turf()
+ var/list/failures = list()
+ for(var/master_type in master_types)
+ for(var/chem_type in subtypesof(master_type))
+ if(chem_type in excepted_types)
+ continue
+ var/atom/chem = chem_type
+ if(TYPE_IS_ABSTRACT(chem))
+ continue
+ chem = new chem(spawn_spot)
+ if(QDELETED(chem))
+ failures += "- [type] qdeleted after Initialize()"
+ continue
+ chem_refs[chem.type] = weakref(chem)
+
+ // Let SSmaterials process chemical reactions and solvents.
+ sleep(SSmaterials.wait * 2)
+
+ // Followup status checking.
+ for(var/chem_type in chem_refs)
+ var/weakref/chem_ref = chem_refs[chem_type]
+ var/atom/chem_instance = istype(chem_ref) && chem_ref.resolve()
+ if(QDELETED(chem_instance) || !istype(chem_instance, chem_type) || chem_instance.loc != spawn_spot)
+ failures += "- [chem_type] qdeleted after reacting"
+ else
+ // Cleanup pt. 1
+ qdel(chem_instance)
+
+ // Cleanup pt. 2
+ chem_refs.Cut()
+ var/obj/effect/fluid/fluid = locate() in spawn_spot
+ if(fluid)
+ qdel(fluid)
+ failures += "- spawn turf had fluids post-test"
+
+ // Report status.
+ if(length(failures))
+ fail("At least one subtype was qdeleted:\n[jointext(failures, "\n")]")
+ else
+ pass("No subtypes melted.")
return 1
\ No newline at end of file
diff --git a/code/unit_tests/closets.dm b/code/unit_tests/closets.dm
index 4c268a2c6f5..9bc236f8ff9 100644
--- a/code/unit_tests/closets.dm
+++ b/code/unit_tests/closets.dm
@@ -55,21 +55,21 @@
)
var/fail_msg = "Insane closet appearances found: "
if(LAZYLEN(bad_decl))
- fail_msg += "\nDecl did not add itself to appropriate global list:\n[jointext("\t[bad_icon]", "\n")]."
+ fail_msg += "\nDecl did not add itself to appropriate global list:\n[jointext(bad_icon, "\n\t")]."
if(LAZYLEN(bad_icon))
- fail_msg += "\nNull final icon values:\n[jointext("\t[bad_icon]", "\n")]."
+ fail_msg += "\nNull final icon values:\n\t[jointext(bad_icon, "\n\t")]."
if(LAZYLEN(bad_colour))
- fail_msg += "\nNull color values:\n[jointext("\t[bad_colour]", "\n")]."
+ fail_msg += "\nNull color values:\n\t[jointext(bad_colour, "\n\t")]."
if(LAZYLEN(bad_base_icon))
- fail_msg += "\nNull base icon value:\n[jointext("\t[bad_base_icon]", "\n")]."
+ fail_msg += "\nNull base icon value:\n\t[jointext(bad_base_icon, "\n\t")]."
if(LAZYLEN(bad_base_state))
- fail_msg += "\nMissing state from base icon:\n[jointext("\t[bad_base_state]", "\n")]."
+ fail_msg += "\nMissing state from base icon:\n\t[jointext(bad_base_state, "\n\t")]."
if(LAZYLEN(bad_decal_icon))
- fail_msg += "\nDecal icon not set but decal lists populated:\n[jointext("\t[bad_decal_icon]", "\n")]."
+ fail_msg += "\nDecal icon not set but decal lists populated:\n\t[jointext(bad_decal_icon, "\n\t")]."
if(LAZYLEN(bad_decal_colour))
- fail_msg += "\nNull color in final decal entry:\n[jointext("\t[bad_decal_colour]", "\n")]."
+ fail_msg += "\nNull color in final decal entry:\n\t[jointext(bad_decal_colour, "\n\t")]."
if(LAZYLEN(bad_decal_state))
- fail_msg += "\nNon-existent decal icon state:\n[jointext("\t[bad_decal_state]", "\n")]."
+ fail_msg += "\nNon-existent decal icon state:\n\t[jointext(bad_decal_state, "\n\t")]."
fail(fail_msg)
else
diff --git a/code/unit_tests/culture.dm b/code/unit_tests/culture.dm
index 122252e03eb..0f1d6717dd0 100644
--- a/code/unit_tests/culture.dm
+++ b/code/unit_tests/culture.dm
@@ -22,7 +22,7 @@
fails++
log_bad("Default cultural value '[val]' for [species_name] tag '[token]' is text, must be a type.")
else
- var/decl/cultural_info/culture = ispath(val, /decl/cultural_info) && GET_DECL(val)
+ var/decl/cultural_info/culture = GET_DECL(val)
if(!istype(culture))
fails++
log_bad("Default cultural value '[val]' for [species_name] tag '[token]' is not a valid culture label.")
@@ -50,7 +50,7 @@
fails++
log_bad("Forced cultural value for [species_name] tag '[token]' is text, must be a type.")
else
- var/decl/cultural_info/culture = ispath(val, /decl/cultural_info) && GET_DECL(val)
+ var/decl/cultural_info/culture = GET_DECL(val)
if(!istype(culture))
fails++
log_bad("Forced cultural value '[val]' for [species_name] tag '[token]' is not a valid culture label.")
@@ -77,7 +77,7 @@
if(istext(val))
log_bad("Available cultural value '[val]' for [species_name] tag '[token]' is text, must be a type.")
else
- var/decl/cultural_info/culture = ispath(val, /decl/cultural_info) && GET_DECL(val)
+ var/decl/cultural_info/culture = GET_DECL(val)
if(!istype(culture))
fails++
log_bad("Available cultural value '[val]' for [species_name] tag '[token]' is not a valid culture label.")
diff --git a/code/unit_tests/decls.dm b/code/unit_tests/decls.dm
index 76d0ae50c03..554ca506ea6 100644
--- a/code/unit_tests/decls.dm
+++ b/code/unit_tests/decls.dm
@@ -5,11 +5,9 @@
var/list/failures = list()
// Check decl validation.
- for(var/decl_type in typesof(/decl))
- var/decl/decl = decl_type
- if(TYPE_IS_ABSTRACT(decl))
- continue
- decl = GET_DECL(decl_type)
+ var/list/decls_to_validate = decls_repository.get_decls_of_type(/decl)
+ for(var/decl_type in decls_to_validate)
+ var/decl/decl = decls_to_validate[decl_type]
var/list/validation_results = decl.validate()
if(length(validation_results))
failures[decl_type] = validation_results
diff --git a/code/unit_tests/del_the_world.dm b/code/unit_tests/del_the_world.dm
index 5b59f304391..ae7b7758f5f 100644
--- a/code/unit_tests/del_the_world.dm
+++ b/code/unit_tests/del_the_world.dm
@@ -6,6 +6,16 @@
/datum/unit_test/del_the_world/start_test()
var/turf/spawn_loc = get_safe_turf()
var/list/cached_contents = spawn_loc.contents.Copy()
+
+ /// Types to except from GC checking tests.
+ var/list/gc_exceptions = list(
+ // I hate doing this, but until the graph tests are fixed by someone who actually understands them,
+ // this is the best I can do without breaking other stuff.
+ /datum/node/physical,
+ // Randomly fails to GC during CI, cause unclear. Remove this if the root cause is identified.
+ /obj/item/organ/external/chest
+ )
+
var/list/ignore = typesof(
// will error if the area already has one
/obj/machinery/power/apc,
@@ -26,10 +36,12 @@
// Fluid system related; causes issues with atoms spawned on the turf.
/obj/abstract/fluid_mapped,
/obj/effect/fluid,
- /obj/abstract/flood,
+ /obj/effect/flood,
// Not valid when spawned manually.
/obj/effect/overmap,
/obj/effect/shuttle_landmark,
+ // Generally not expected to be spawned outside of a mob HUD context.
+ /obj/screen
) + list(
// Exclude only this type, since it's not meant to be spawned but its subtypes are.
// TODO: Consider whether this warrants abstract_type?
@@ -118,9 +130,7 @@
//Alright, time to see if anything messed up
var/list/cache_for_sonic_speed = SSgarbage.items
for(var/path in cache_for_sonic_speed)
- if(ispath(path, /datum/node/physical))
- // I hate doing this, but until the graph tests are fixed by someone who actually understands them,
- // this is the best I can do without breaking other stuff.
+ if(path in gc_exceptions)
continue
var/datum/qdel_item/item = cache_for_sonic_speed[path]
if(item.failures)
diff --git a/code/unit_tests/equipment_tests.dm b/code/unit_tests/equipment_tests.dm
index 632ff5592df..e15fa9dbad6 100644
--- a/code/unit_tests/equipment_tests.dm
+++ b/code/unit_tests/equipment_tests.dm
@@ -116,7 +116,7 @@
"[slot_gloves_str]" = /obj/item/clothing/gloves/rainbow,
"[slot_l_ear_str]" = /obj/item/clothing/head/hairflower,
"[slot_r_ear_str]" = /obj/item/clothing/head/hairflower,
- "[slot_belt_str]" = /obj/item/storage/belt/utility,
+ "[slot_belt_str]" = /obj/item/storage/ore, // note: this should be an item without ITEM_FLAG_IS_BELT
"[slot_wear_suit_str]" = /obj/item/clothing/suit/chickensuit
)
diff --git a/code/unit_tests/icon_tests.dm b/code/unit_tests/icon_tests.dm
index 199d599665d..3bebd89e95d 100644
--- a/code/unit_tests/icon_tests.dm
+++ b/code/unit_tests/icon_tests.dm
@@ -2,23 +2,41 @@
name = "ICON STATE template"
template = /datum/unit_test/icon_test
-/datum/unit_test/icon_test/posters_shall_have_icon_states
- name = "ICON STATE - Posters Shall Have Icon States"
-
-/datum/unit_test/icon_test/posters_shall_have_icon_states/start_test()
- var/contraband_icons = icon_states('icons/obj/contraband.dmi')
- var/list/invalid_posters = list()
-
- var/list/all_posters = decls_repository.get_decls_of_subtype(/decl/poster_design)
- for(var/poster_design in all_posters)
- var/decl/poster_design/P = all_posters[poster_design]
- if(!(P.icon_state in contraband_icons))
- invalid_posters += poster_design
+/datum/unit_test/icon_test/turfs_shall_have_icon_states
+ name = "ICON STATE - Turf Subtypes Shall Have Icon States"
+ var/list/except_types = list(
+ /turf/unsimulated/mimic_edge,
+ /turf/exterior/mimic_edge,
+ /turf/simulated/mimic_edge,
+ /turf/exterior/open,
+ /turf/simulated/open
+ )
- if(invalid_posters.len)
- fail("/decl/poster_design with missing icon states: [english_list(invalid_posters)]")
+/datum/unit_test/icon_test/turfs_shall_have_icon_states/start_test()
+ var/list/failures = list()
+ for(var/turf_type in subtypesof(/turf))
+ var/turf/turf_prototype = turf_type
+ if(TYPE_IS_ABSTRACT(turf_prototype))
+ continue
+ var/excepted = FALSE
+ for(var/exception_path in except_types)
+ if(ispath(turf_type, exception_path))
+ excepted = TRUE
+ break
+ if(excepted)
+ continue
+ var/test_icon_state = initial(turf_prototype.icon_state)
+ var/test_icon = initial(turf_prototype.icon)
+ if(isnull(test_icon_state))
+ failures += "[turf_prototype] - null icon state"
+ if(!test_icon)
+ failures += "[turf_prototype] - null icon"
+ if(!isnull(test_icon_state) && test_icon && !check_state_in_icon(test_icon_state, test_icon))
+ failures += "[turf_prototype] - state [test_icon_state] not in icon [test_icon]"
+ if(length(failures))
+ fail("Turf subtypes had missing icons or icon states:\n[jointext(failures, "\n")].")
else
- pass("All /decl/poster_design subtypes have valid icon states.")
+ pass("All turf subtypes had valid icon states.")
return 1
/datum/unit_test/icon_test/item_modifiers_shall_have_icon_states
@@ -51,13 +69,27 @@
/datum/unit_test/icon_test/signs_shall_have_existing_icon_states
name = "ICON STATE - Signs shall have existing icon states"
+ var/list/skip_types = list(
+ // Posters use a decl to set their icon and handle their own validation.
+ /obj/structure/sign/poster
+ )
/datum/unit_test/icon_test/signs_shall_have_existing_icon_states/start_test()
var/list/failures = list()
for(var/sign_type in typesof(/obj/structure/sign))
+
var/obj/structure/sign/sign = sign_type
if(TYPE_IS_ABSTRACT(sign))
continue
+
+ var/skip = FALSE
+ for(var/skip_type in skip_types)
+ if(ispath(sign_type, skip_type))
+ skip = TRUE
+ break
+ if(skip)
+ continue
+
var/check_state = initial(sign.icon_state)
if(!check_state)
failures += "[sign] - null icon_state"
@@ -66,14 +98,37 @@
if(!check_icon)
failures += "[sign] - null icon_state"
continue
- if(!check_state_in_icon(check_state, check_icon, TRUE))
+ if(!check_state_in_icon(check_state, check_icon))
failures += "[sign] - missing icon_state '[check_state]' in icon '[check_icon]"
if(failures.len)
- fail("Signs with missing icon states: [english_list(failures)]")
+ fail("Signs with missing icon states:\n\t-[jointext(failures, "\n\t-")]")
else
pass("All signs have valid icon states.")
return 1
+/datum/unit_test/icon_test/random_spawners_shall_have_existing_icon_states
+ name = "ICON STATE - Random spawners shall have existing icon states"
+
+/datum/unit_test/icon_test/random_spawners_shall_have_existing_icon_states/start_test()
+ var/list/failures = list()
+ for(var/test_type in subtypesof(/obj/random))
+ var/obj/random/prototype = test_type
+ if(TYPE_IS_ABSTRACT(prototype))
+ continue
+ var/test_icon = initial(prototype.icon)
+ if(!test_icon)
+ failures += "[test_type] - no icon"
+ var/test_icon_state = initial(prototype.icon_state)
+ if(!test_icon_state)
+ failures += "[test_type] - no icon_state"
+ if(test_icon_state && test_icon && !check_state_in_icon(test_icon_state, test_icon))
+ failures += "[test_type] - icon_state [test_icon_state] not present in [test_icon]"
+ if(length(failures))
+ fail("Some random spawners have an invalid icon state:\n[jointext(failures, "\n")]")
+ else
+ pass("All random spawners had a valid icon state.")
+ return 1
+
/datum/unit_test/icon_test/floor_decals_shall_have_existing_icon_states
name = "ICON STATE - Floor decals shall have existing icon states"
var/static/list/excepted_types = list(
@@ -94,10 +149,10 @@
if(!check_icon)
failures += "[decal] - null icon_state"
continue
- if(!check_state_in_icon(check_state, check_icon, TRUE))
+ if(!check_state_in_icon(check_state, check_icon))
failures += "[decal] - missing icon_state '[check_state]' in icon '[check_icon]"
if(failures.len)
- fail("Decals with missing icon states: [english_list(failures)]")
+ fail("Decals with missing icon states:\n\t-[jointext(failures, "\n\t-")]")
else
pass("All decals have valid icon states.")
return 1
diff --git a/code/unit_tests/json.dm b/code/unit_tests/json.dm
index 84002b7ad5c..a5be63f35bb 100644
--- a/code/unit_tests/json.dm
+++ b/code/unit_tests/json.dm
@@ -37,6 +37,11 @@
var/list/failures
var/list/json_to_check
+ for(var/subtype in typesof(/obj))
+ var/obj/test = subtype
+ var/check_json = initial(test.directional_offset)
+ if(!isnull(check_json))
+ LAZYSET(json_to_check, "[subtype].directional_offset", check_json)
for(var/subtype in typesof(/obj/item))
var/obj/item/test = subtype
var/check_json = initial(test.center_of_mass)
@@ -62,11 +67,17 @@
var/check_json = initial(test.possible_transfer_amounts)
if(!isnull(check_json))
LAZYSET(json_to_check, "[subtype].possible_transfer_amounts", check_json)
+ var/list/prefabs = decls_repository.get_decls_of_subtype(/decl/prefab/ic_assembly)
+ for(var/assembly_path in prefabs)
+ var/decl/prefab/ic_assembly/assembly = prefabs[assembly_path]
+ var/check_json = assembly.data
+ if(!isnull(check_json))
+ LAZYSET(json_to_check, "[assembly_path].data", check_json)
// Validate JSON.
for(var/check_key in json_to_check)
try
var/list/output = cached_json_decode(json_to_check[check_key])
- if(!islist(output) || !length(output))
+ if(findtext(json_to_check[check_key], "{'") || !islist(output) || !length(output))
LAZYADD(failures, check_key)
catch()
LAZYADD(failures, check_key)
diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm
index 5d47ff00659..54e56f315d0 100644
--- a/code/unit_tests/map_tests.dm
+++ b/code/unit_tests/map_tests.dm
@@ -78,10 +78,14 @@
continue
if(!isPlayerLevel(A.z))
continue
- var/obj/machinery/alarm/alarm = locate() in A // Only test areas with functional alarms
- if(!alarm)
- continue
- if(alarm.stat & (NOPOWER | BROKEN))
+ // Only test areas with functional alarms
+ var/obj/machinery/alarm/found_alarm
+ for (var/obj/machinery/alarm/alarm in A)
+ if(alarm.inoperable()) // must have at least one functional alarm
+ continue
+ found_alarm = alarm
+
+ if(!found_alarm)
continue
//Make a list of devices that are being controlled by their air alarms
@@ -97,17 +101,37 @@
for(var/tag in vents_in_area) // The point of this test is that while the names list is registered at init, the info is transmitted by radio.
if(!A.air_vent_info[tag])
var/obj/machinery/atmospherics/unary/vent_pump/V = vents_in_area[tag]
- var/logtext = "Vent [A.air_vent_names[tag]] ([V.x], [V.y], [V.z]) with id_tag [tag] did not update the air alarm in area [A]."
- if(!V.operable())
+ var/logtext = "Vent [A.air_vent_names[tag]] ([V.x], [V.y], [V.z]) with id_tag [tag] did not update [log_info_line(found_alarm)] in area [A]."
+ if(V.inoperable())
logtext = "[logtext] The vent was not functional."
+ var/alarm_dist = get_dist(found_alarm, V)
+ if(alarm_dist > 60)
+ logtext += " The vent may be out of transmission range (max 60, was [alarm_dist])."
+ var/V_freq
+ for(var/obj/item/stock_parts/radio/radio_component in V.component_parts)
+ V_freq ||= radio_component.frequency
+ if(isnull(V_freq))
+ logtext += " The vent had no frequency set."
+ else if(V_freq != found_alarm.frequency)
+ logtext += " Frequencies did not match (alarm: [found_alarm.frequency], vent: [V_freq])."
log_bad(logtext)
failed = TRUE
for(var/tag in scrubbers_in_area)
if(!A.air_scrub_info[tag])
var/obj/machinery/atmospherics/unary/vent_scrubber/V = scrubbers_in_area[tag]
- var/logtext = "Scrubber [A.air_scrub_names[tag]] ([V.x], [V.y], [V.z]) with id_tag [tag] did not update the air alarm in area [A]."
- if(!V.operable())
+ var/logtext = "Scrubber [A.air_scrub_names[tag]] ([V.x], [V.y], [V.z]) with id_tag [tag] did not update [log_info_line(found_alarm)] in area [A]."
+ if(V.inoperable())
logtext = "[logtext] The scrubber was not functional."
+ var/alarm_dist = get_dist(found_alarm, V)
+ if(alarm_dist > 60)
+ logtext += " The scrubber may be out of transmission range (max 60, was [alarm_dist])."
+ var/V_freq
+ for(var/obj/item/stock_parts/radio/radio_component in V.component_parts)
+ V_freq ||= radio_component.frequency
+ if(isnull(V_freq))
+ logtext += " The scrubber had no frequency set."
+ else if(V_freq != found_alarm.frequency)
+ logtext += " Frequencies did not match (alarm: [found_alarm.frequency], scrubber: [V_freq])."
log_bad(logtext)
failed = TRUE
@@ -275,19 +299,70 @@
//=======================================================================================
/datum/unit_test/correct_allowed_spawn_test
- name = "MAP: All allowed_spawns entries should have spawnpoints on map."
+ name = "MAP: All allowed_latejoin_spawns entries should have spawnpoints on map."
/datum/unit_test/correct_allowed_spawn_test/start_test()
+
var/list/failed = list()
- for(var/decl/spawnpoint/spawnpoint as anything in global.using_map.allowed_spawns)
- if(!length(spawnpoint.turfs))
+ var/list/check_spawn_flags = list(
+ "SPAWN_FLAG_PRISONERS_CAN_SPAWN" = SPAWN_FLAG_PRISONERS_CAN_SPAWN,
+ "SPAWN_FLAG_JOBS_CAN_SPAWN" = SPAWN_FLAG_JOBS_CAN_SPAWN,
+ "SPAWN_FLAG_PERSISTENCE_CAN_SPAWN" = SPAWN_FLAG_PERSISTENCE_CAN_SPAWN
+ )
+
+ // Check that all flags are represented in compiled spawnpoints.
+ // The actual validation will happen at the end of the proc.
+ var/list/all_spawnpoints = decls_repository.get_decls_of_subtype(/decl/spawnpoint)
+ for(var/spawn_type in all_spawnpoints)
+ var/decl/spawnpoint/spawnpoint = all_spawnpoints[spawn_type]
+ // No turfs probably means it isn't mapped; if it's in the allowed list this will be picked up below.
+ if(!length(spawnpoint.get_spawn_turfs()))
+ continue
+ if(spawnpoint.spawn_flags)
+ for(var/spawn_flag in check_spawn_flags)
+ if(spawnpoint.spawn_flags & check_spawn_flags[spawn_flag])
+ check_spawn_flags -= spawn_flag
+ if(!length(check_spawn_flags))
+ break
+
+ // Check if spawn points have any turfs at all associated.
+ for(var/decl/spawnpoint/spawnpoint as anything in global.using_map.allowed_latejoin_spawns)
+ if(!length(spawnpoint.get_spawn_turfs()))
log_unit_test("Map allows spawning in [spawnpoint.name], but [spawnpoint.name] has no associated spawn turfs.")
failed += spawnpoint.type
- if(length(failed))
- fail("Some allowed spawnpoints have no spawnpoint turfs:\n[jointext(failed, "\n")]")
- else
+ // Validate our forced job spawnpoints since they may not be included in allowed_latejoin_spawns.
+ for(var/job_title in SSjobs.titles_to_datums)
+ var/datum/job/job = SSjobs.titles_to_datums[job_title]
+ if(!job.forced_spawnpoint)
+ continue
+ var/decl/spawnpoint/spawnpoint = GET_DECL(job.forced_spawnpoint)
+ if(!spawnpoint.check_job_spawning(job))
+ log_unit_test("Forced spawnpoint for [job_title], [spawnpoint.name], does not permit the job to spawn there.")
+ failed += spawnpoint.type
+ if(!length(spawnpoint.get_spawn_turfs()))
+ log_unit_test("Job [job_title] forces spawning in [spawnpoint.name], but [spawnpoint.name] has no associated spawn turfs.")
+ failed += spawnpoint.type
+
+ // Observer spawn is special and isn't in the using_map list.
+ var/decl/spawnpoint/observer_spawn = GET_DECL(/decl/spawnpoint/observer)
+ if(!length(observer_spawn.get_spawn_turfs()))
+ log_unit_test("Map has no [observer_spawn.name] spawn turfs.")
+ failed += observer_spawn.type
+ if(!(observer_spawn.spawn_flags & SPAWN_FLAG_GHOSTS_CAN_SPAWN))
+ log_unit_test("[observer_spawn.name] is missing SPAWN_FLAG_GHOSTS_CAN_SPAWN.")
+ failed |= observer_spawn.type
+
+ // Report test outcome.
+ if(!length(failed) && !length(check_spawn_flags))
pass("All allowed spawnpoints have spawnpoint turfs.")
+ else
+ var/list/failstring = list()
+ if(length(failed))
+ failstring += "Some allowed spawnpoints have no spawnpoint turfs:\n[jointext(failed, "\n")]"
+ if(length(check_spawn_flags))
+ failstring += "Some required spawn flags are not set on available spawnpoints:\n[jointext(check_spawn_flags, "\n")]"
+ fail(jointext(failstring, "\n"))
return 1
//=======================================================================================
@@ -395,7 +470,7 @@
pass = FALSE
if(pass)
- pass("Have cameras have the c_tag set.")
+ pass("All cameras have the c_tag set.")
else
fail("One or more cameras do not have the c_tag set.")
@@ -688,6 +763,8 @@
continue
if(is_type_in_list(sort, exempt_junctions))
continue
+ if(sort.sort_type in global.using_map.disconnected_disposals_tags)
+ continue
var/obj/machinery/disposal/bin = get_bin_from_junction(sort)
if(!bin)
log_bad("Junction with tag [sort.sort_type] at ([sort.x], [sort.y], [sort.z]) could not find disposal.")
@@ -719,6 +796,9 @@
var/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/test
speed = 100
+/obj/structure/disposalholder/unit_test/merge()
+ return FALSE
+
/obj/structure/disposalholder/unit_test/Destroy()
test.package_delivered(src)
. = ..()
diff --git a/code/unit_tests/materials.dm b/code/unit_tests/materials.dm
index 98bc05bc8bf..dcfbd4ed483 100644
--- a/code/unit_tests/materials.dm
+++ b/code/unit_tests/materials.dm
@@ -8,16 +8,23 @@
var/list/passed_designs = list()
var/failed_count = 0
+ var/list/stack_types = list(
+ null,
+ /obj/item/stack/material/strut,
+ /obj/item/stack/material/ore
+ )
+
for(var/decl/material/mat_datum as anything in SSmaterials.materials)
var/list/recipes = list()
- for(var/thing in mat_datum.get_recipes())
- if(istype(thing, /datum/stack_recipe))
- recipes += thing
- else if(istype(thing, /datum/stack_recipe_list))
- var/datum/stack_recipe_list/recipe_stack = thing
- if(length(recipe_stack.recipes))
- recipes |= recipe_stack.recipes
+ for(var/stack_type in stack_types)
+ for(var/thing in mat_datum.get_recipes(stack_type))
+ if(istype(thing, /datum/stack_recipe))
+ recipes += thing
+ else if(istype(thing, /datum/stack_recipe_list))
+ var/datum/stack_recipe_list/recipe_stack = thing
+ if(length(recipe_stack.recipes))
+ recipes |= recipe_stack.recipes
for(var/datum/stack_recipe/recipe as anything in recipes)
var/obj/product = recipe.spawn_result()
diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm
index 9179e912557..4c34523b3ec 100644
--- a/code/unit_tests/mob_tests.dm
+++ b/code/unit_tests/mob_tests.dm
@@ -110,7 +110,7 @@ var/global/default_mobloc = null
if(!loss && ishuman(M))
var/mob/living/carbon/human/H = M // Synthetics have robot limbs which don't report damage to getXXXLoss()
if(H.isSynthetic()) // So we have to hard code this check or create a different one for them.
- return H.species.total_health - H.health
+ return H.species.total_health - H.current_health
return loss
// ==============================================================================================================
@@ -164,7 +164,7 @@ var/global/default_mobloc = null
// Damage the mob
- var/initial_health = H.health
+ var/initial_health = H.current_health
if(damagetype == OXY && H.need_breathe())
var/obj/item/organ/internal/lungs/L = H.get_organ(H.get_bodytype().breathing_organ, /obj/item/organ/internal/lungs)
@@ -175,7 +175,7 @@ var/global/default_mobloc = null
var/ending_damage = damage_check(H, damagetype)
- var/ending_health = H.health
+ var/ending_health = H.current_health
qdel(H)
// Now test this stuff.
diff --git a/code/unit_tests/movement_tests.dm b/code/unit_tests/movement_tests.dm
index e5e7a74aa19..d86ee6585a7 100644
--- a/code/unit_tests/movement_tests.dm
+++ b/code/unit_tests/movement_tests.dm
@@ -50,15 +50,11 @@
/obj/test/crossed_obj
var/list/crossers
-/obj/test/crossed_obj/Crossed(var/crosser)
- if(!crossers)
- crossers = list()
- crossers += crosser
+/obj/test/crossed_obj/Crossed(var/atom/movable/AM)
+ LAZYADD(crossers, AM)
/obj/test/entered_obj
var/list/enterers
/obj/test/entered_obj/Entered(var/enterer)
- if(!enterers)
- enterers = list()
- enterers += enterer
+ LAZYADD(enterers, enterer)
diff --git a/code/unit_tests/observation_tests.dm b/code/unit_tests/observation_tests.dm
index 1ea0867030c..ae519cba6a7 100644
--- a/code/unit_tests/observation_tests.dm
+++ b/code/unit_tests/observation_tests.dm
@@ -97,7 +97,7 @@
old_name = O.name
new_name = O.name + " (New)"
- events_repository.register_global(/decl/observ/name_set, src, /datum/unit_test/observation/proc/receive_name_change)
+ events_repository.register_global(/decl/observ/name_set, src, TYPE_PROC_REF(/datum/unit_test/observation, receive_name_change))
O.SetName(new_name)
if(received_name_set_events.len != 1)
@@ -240,7 +240,7 @@
exosuit.occupant = holding_mob
- events_repository.register(/decl/observ/moved, held_item, src, /datum/unit_test/observation/proc/receive_move)
+ events_repository.register(/decl/observ/moved, held_item, src, TYPE_PROC_REF(/datum/unit_test/observation, receive_move))
holding_mob.drop_from_inventory(held_item)
if(received_moves.len != 1)
@@ -320,7 +320,7 @@
var/turf/T = get_safe_turf()
var/obj/O = get_named_instance(/obj, T)
- events_repository.register_global(/decl/observ/name_set, O, /atom/movable/proc/move_to_turf)
+ events_repository.register_global(/decl/observ/name_set, O, TYPE_PROC_REF(/atom/movable, move_to_turf))
qdel(O)
var/decl/observ/name_set/name_set_event = GET_DECL(/decl/observ/name_set)
@@ -347,7 +347,7 @@
var/mob/event_source = get_named_instance(/mob, T, "Event Source")
var/mob/listener = get_named_instance(/mob, T, "Event Listener")
- events_repository.register(/decl/observ/moved, event_source, listener, /atom/movable/proc/recursive_move)
+ events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move))
qdel(event_source)
var/decl/observ/moved/moved_event = GET_DECL(/decl/observ/moved)
@@ -375,7 +375,7 @@
var/mob/event_source = get_named_instance(/mob, T, "Event Source")
var/mob/listener = get_named_instance(/mob, T, "Event Listener")
- events_repository.register(/decl/observ/moved, event_source, listener, /atom/movable/proc/recursive_move)
+ events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move))
qdel(listener)
var/decl/observ/moved/moved_event = GET_DECL(/decl/observ/moved)
diff --git a/code/unit_tests/offset_tests.dm b/code/unit_tests/offset_tests.dm
new file mode 100644
index 00000000000..246a5fa3754
--- /dev/null
+++ b/code/unit_tests/offset_tests.dm
@@ -0,0 +1,92 @@
+/datum/unit_test/wall_objs_shall_face_proper_dir
+ name = "MAP: Wall mounted objects must face proper direction"
+ var/static/list/exception_types = list(
+ /obj/structure/sign/directions, // TODO: remove once directional/rotated subtypes have been created
+ /obj/structure/emergency_dispenser // these are just kind of fucked, i'll leave it to someone else to make the presets match the directional offsets
+ )
+
+/datum/unit_test/wall_objs_shall_face_proper_dir/start_test()
+ var/bad_objs = 0
+ for(var/obj/structure in world) // includes machinery, structures, and anchored items
+ if(QDELETED(structure))
+ continue
+ if(!isStationLevel(structure.z))
+ continue
+ if(is_type_in_list(structure, exception_types))
+ continue
+ if(!structure.anchored)
+ continue
+ if(!isturf(structure.loc))
+ continue
+ if(!length(structure.directional_offset)) // does not need to be offset
+ continue
+ var/list/diroff = cached_json_decode(structure.directional_offset)
+ var/list/curoff = diroff["[uppertext(dir2text(structure.dir))]"]
+ if(!curoff) // uh oh!
+ continue
+ // If the offset is unset or 0, it's allowed to be whatever.
+ // If it's nonzero, it must match the sign.
+ if(
+ (curoff["x"] && (SIGN(curoff["x"]) != SIGN(structure.pixel_x))) || \
+ (curoff["y"] && (SIGN(curoff["y"]) != SIGN(structure.pixel_y)))
+ )
+ bad_objs++
+ log_bad("Incorrect offset direction: [log_info_line(structure)]")
+ continue
+
+ if(bad_objs)
+ fail("Found [bad_objs] wall-mounted object\s with incorrect directions")
+ else
+ pass("All wall-mounted objects have correct directions")
+ return TRUE
+
+/datum/unit_test/wall_objs_shall_offset_onto_wall
+ name = "MAP: Wall mounted objects must offset over walls"
+ var/static/list/exception_types = list(
+ /obj/machinery/light,
+ /obj/machinery/camera,
+ /obj/structure/lift/button/standalone
+ )
+
+/datum/unit_test/wall_objs_shall_offset_onto_wall/start_test()
+ var/bad_objs = 0
+ for(var/obj/structure in world) // includes machinery, structures, and anchored items
+ if(QDELETED(structure))
+ continue
+ if(!isStationLevel(structure.z))
+ continue
+ if(is_type_in_list(structure, exception_types))
+ continue
+ if(!structure.anchored)
+ continue
+ if(!isturf(structure.loc))
+ continue
+ if(!length(structure.directional_offset)) // does not need to be offset
+ continue
+ var/list/diroff = cached_json_decode(structure.directional_offset)
+ var/list/curoff = diroff["[uppertext(dir2text(structure.dir))]"]
+ if(!curoff) // structure is not offset in this dir at all
+ continue
+ if(structure.loc.density)
+ bad_objs++
+ log_bad("Wall-mounted object on dense turf: [log_info_line(structure)]")
+ continue
+ var/adj_x = structure.x + (abs(structure.pixel_x) > 12 ? SIGN(structure.pixel_x) : 0)
+ var/adj_y = structure.y + (abs(structure.pixel_y) > 12 ? SIGN(structure.pixel_y) : 0)
+ var/turf/adjusted_loc = locate(adj_x, adj_y, structure.z)
+ if(!adjusted_loc.density)
+ var/found_support = FALSE
+ for(var/obj/structure/S in adjusted_loc)
+ if(!S.density) // this will be way too forgiving with windows since it doesn't take into account directionality
+ continue
+ found_support = TRUE
+ if(found_support)
+ continue
+ bad_objs++
+ log_bad("Offset turf did not have a wall or window: [log_info_line(structure)]")
+
+ if(bad_objs)
+ fail("Found [bad_objs] wall-mounted object\s without a wall or window")
+ else
+ pass("All wall-mounted objects are on appropriate walls/windows")
+ return TRUE
\ No newline at end of file
diff --git a/code/unit_tests/proximity_tests.dm b/code/unit_tests/proximity_tests.dm
index ef196a9b7a8..e9d9729c182 100644
--- a/code/unit_tests/proximity_tests.dm
+++ b/code/unit_tests/proximity_tests.dm
@@ -133,7 +133,7 @@
/obj/proximity_listener/proc/SetTrigger(trigger_type, listener_flags)
QDEL_NULL(trigger)
- trigger = new trigger_type(src, /obj/proximity_listener/proc/OnTurfEntered, /obj/proximity_listener/proc/OnTurfsChanged, 7, listener_flags, null, 90, 270)
+ trigger = new trigger_type(src, TYPE_PROC_REF(/obj/proximity_listener, OnTurfEntered), TYPE_PROC_REF(/obj/proximity_listener, OnTurfsChanged), 7, listener_flags, null, 90, 270)
trigger.register_turfs()
/obj/proximity_listener/Destroy()
diff --git a/code/unit_tests/traders.dm b/code/unit_tests/traders.dm
new file mode 100644
index 00000000000..e0555988530
--- /dev/null
+++ b/code/unit_tests/traders.dm
@@ -0,0 +1,118 @@
+/datum/unit_test/trader_subtypes_shall_have_all_needed_speech_values
+ name = "TRADERS: Trader Subtypes Shall Have All Needed Speech Values"
+ // Every trader must have these tokens defined.
+ var/list/all_trader_speech_tokens = list(
+ TRADER_HAIL_GENERIC,
+ TRADER_HAIL_DENY,
+ TRADER_NOT_ENOUGH,
+ TRADER_TRADE_COMPLETE,
+ TRADER_HOW_MUCH,
+ TRADER_COMPLIMENT_DENY,
+ TRADER_COMPLIMENT_ACCEPT,
+ TRADER_INSULT_GOOD,
+ TRADER_INSULT_BAD,
+ TRADER_BRIBE_REFUSAL
+ )
+ // These tokens are situational and cannot be present if a given flag is on the datum.
+ var/list/tokens_invalid_with_flag = list(
+ TRADER_NO_MONEY = TRADER_MONEY,
+ TRADER_NO_GOODS = TRADER_GOODS
+ )
+ // As above but only present with a flag.
+ var/list/tokens_invalid_without_flag = list(
+ TRADER_FOUND_UNWANTED = (TRADER_WANTED_ONLY|TRADER_WANTED_ALL),
+ TRADER_BRIBE_ACCEPT = TRADER_BRIBABLE
+ )
+ // We don't care if these tokens are in the list after the above tokens are weeded out.
+ var/list/acceptable_additional_tokens = list(
+ // This will default to generic if unset, doesn't matter.
+ TRADER_HAIL_SILICON,
+ // This token can be used to respond 'I don't want anything' which is valid.
+ TRADER_WHAT_WANT,
+ // This token has bespoke validity checking and can't go into any of the above lists.
+ TRADER_NO_BLACKLISTED
+ )
+
+/datum/unit_test/trader_subtypes_shall_have_all_needed_speech_values/start_test()
+
+ // Flagged tokens are handled outside of the general extraneous token list.
+ for(var/token in tokens_invalid_with_flag)
+ acceptable_additional_tokens |= token
+ for(var/token in tokens_invalid_without_flag)
+ acceptable_additional_tokens |= token
+
+ // Custom species hails are fine and have no strict tokens associated.
+ var/list/all_species = decls_repository.get_decls_of_subtype(/decl/species)
+ for(var/species_type in all_species)
+ var/decl/species/species = all_species[species_type]
+ acceptable_additional_tokens |= "[TRADER_HAIL_START][species.name]"
+
+ var/list/failures = list()
+ for(var/trader_type in subtypesof(/datum/trader))
+ var/datum/trader/trader = trader_type
+ if(TYPE_IS_ABSTRACT(trader))
+ continue
+ trader = new trader
+
+ if(trader.name_language && !ispath(trader.name_language, /decl/language))
+ LAZYDISTINCTADD(failures[trader_type], "- non-/decl/language-subtype non-null name_language value")
+
+ var/list/check_tokens = list()
+
+ // Bespoke blacklist check because life is pain.
+ var/has_token = (TRADER_NO_BLACKLISTED in trader.speech)
+ var/has_blacklist = length(trader.blacklisted_trade_items)
+ if(has_token && !has_blacklist)
+ LAZYDISTINCTADD(failures[trader_type], "- '[TRADER_NO_BLACKLISTED]' response is set but blacklisted_trade_items is empty")
+ else if(!has_token && has_blacklist)
+ LAZYDISTINCTADD(failures[trader_type], "- '[TRADER_NO_BLACKLISTED]' response is unset but blacklisted_trade_items is populated")
+
+ for(var/token in trader.speech)
+
+ // Simple validity checks.
+ if(token in check_tokens)
+ LAZYDISTINCTADD(failures[trader_type], "- duplicate speech token '[token]'")
+ if(!istext(trader.speech[token]))
+ LAZYDISTINCTADD(failures[trader_type], "- non-text speech value for token '[token]'")
+
+ // Keep track of non-additional tokens seen so we can validate them against the general token list later.
+ if(!(token in acceptable_additional_tokens))
+ check_tokens |= token
+
+ // Check for tokens that are contraindicated by trade flags.
+ for(var/token in tokens_invalid_with_flag)
+ var/has_flag = (trader.trade_flags & tokens_invalid_with_flag[token])
+ has_token = (token in trader.speech)
+ if(has_token && has_flag)
+ LAZYDISTINCTADD(failures[trader_type], "- cannot have flagged token '[token]' with current trade flags")
+ else if(!has_token && !has_flag)
+ LAZYDISTINCTADD(failures[trader_type], "- missing flagged token '[token]'")
+
+ // Check for tokens that are required by trade flags.
+ for(var/token in tokens_invalid_without_flag)
+ var/has_flag = (trader.trade_flags & tokens_invalid_without_flag[token])
+ has_token = (token in trader.speech)
+ if(has_token && !has_flag)
+ LAZYDISTINCTADD(failures[trader_type], "- cannot have flagged token '[token]' with current trade flags")
+ else if(!has_token && has_flag)
+ LAZYDISTINCTADD(failures[trader_type], "- missing flagged token '[token]'")
+
+ // Check for missing generic tokens.
+ for(var/token in all_trader_speech_tokens)
+ if(!(token in trader.speech))
+ LAZYDISTINCTADD(failures[trader_type], "- missing speech value for token '[token]'")
+ check_tokens -= token
+
+ // Check for extraneous (probably malformed) tokens not caught by the above checks.
+ if(length(check_tokens))
+ LAZYDISTINCTADD(failures[trader_type], "- extraneous or incorrect tokens: [english_list(check_tokens)]")
+
+ if(length(failures))
+ var/list/fail_strings = list()
+ for(var/failed_type in failures)
+ fail_strings += "[failed_type]:\n[jointext(failures[failed_type], "\n")]"
+ fail("[length(failures)] trader datum subtypes have issues:\n[jointext(fail_strings, "\n")]")
+ else
+ pass("All trader datum subtypes had valid speech tokens and values.")
+
+ return 1
\ No newline at end of file
diff --git a/code/unit_tests/unique_tests.dm b/code/unit_tests/unique_tests.dm
index 89a85254d1e..12d8fb5217f 100644
--- a/code/unit_tests/unique_tests.dm
+++ b/code/unit_tests/unique_tests.dm
@@ -209,7 +209,7 @@
return TRUE
/datum/unit_test/aspects_shall_have_unique_names
- name = "ASPECTS: All Aspects Shall Have Unique Names"
+ name = "UNIQUENESS: All Aspects Shall Have Unique Names"
/datum/unit_test/aspects_shall_have_unique_names/start_test()
var/list/aspects_by_name = list()
@@ -229,7 +229,7 @@
return 1
/datum/unit_test/submaps_shall_have_a_unique_descriptor
- name = "SUBMAPS: Archetypes shall have a valid, unique descriptor."
+ name = "UNIQUENESS: Archetypes shall have a valid, unique descriptor."
/datum/unit_test/submaps_shall_have_a_unique_descriptor/start_test()
var/list/submaps_by_name = list()
@@ -271,3 +271,29 @@
for(var/entry in entries)
pretty_print += log_info_line(entry)
priv_print(ut, type, key, jointext(pretty_print, "\n"))
+
+/datum/unit_test/holopad_id_uniqueness
+ name = "UNIQUENESS: Holopads Shall Have Unique Valid IDs"
+
+/datum/unit_test/holopad_id_uniqueness/start_test()
+
+ var/list/failures = list()
+
+ var/list/seen_holopad_ids = list()
+ for(var/obj/machinery/hologram/holopad/holopad in global.holopads)
+ var/area/area = get_area(holopad)
+ var/holopad_loc = "x[holopad.x],y[holopad.y],z[holopad.z] - [area?.proper_name || "Unknown"]"
+ if(istext(holopad.holopad_id))
+ LAZYDISTINCTADD(seen_holopad_ids[holopad.holopad_id], holopad_loc)
+ else
+ failures += "[holopad_loc] - null or non-text holopad_id ([isnull(holopad.holopad_id) ? "NULL" : holopad.holopad_id])"
+
+ for(var/holopad_id in seen_holopad_ids)
+ if(length(seen_holopad_ids[holopad_id]) > 1)
+ failures += "overlapping holopad_id ([holopad_id]) - [jointext(seen_holopad_ids[holopad_id], ", ")]"
+
+ if(length(failures))
+ fail("Some holopads had overlapping or invalid ID values:\n[jointext(failures,"\n")]")
+ else
+ pass("All holopads had unique valid ID values.")
+ return 1
diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm
index f23f690b8b9..ac232116fb8 100644
--- a/code/unit_tests/unit_test.dm
+++ b/code/unit_tests/unit_test.dm
@@ -151,14 +151,6 @@ var/global/ascii_reset = "[ascii_esc]\[0m"
/datum/unit_test/proc/subsystems_to_await()
return list()
-/proc/load_unit_test_changes()
-/*
- //This takes about 60 seconds to run during unit testing and is only used for the ZAS vacume check on The Asteroid.
- if(config.roundstart_level_generation != 1)
- log_unit_test("Overiding Configuration option for Asteroid Generation to ENABLED")
- config.roundstart_level_generation = 1 // The default map requires it, the example config doesn't have this enabled.
- */
-
/proc/get_test_datums()
. = list()
for(var/test in subtypesof(/datum/unit_test))
diff --git a/config/example/config.txt b/config/example/config.txt
deleted file mode 100644
index f7edfa0499e..00000000000
--- a/config/example/config.txt
+++ /dev/null
@@ -1,464 +0,0 @@
-## Server name: This appears at the top of the screen in-game. In this case it will read "tgstation: station_name" where station_name is the randomly generated name of the station for the round. Remove the # infront of SERVERNAME and replace 'tgstation' with the name of your choice
-# SERVERNAME spacestation13
-
-## Hub visibility: If you want to be visible on the hub, uncomment the below line and be sure that Dream Daemon is set to "Visible." This can be changed in-round as well with toggle-hub-visibility if Dream Daemon is set correctly.
-# HUB
-
-## Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system.
-ADMIN_LEGACY_SYSTEM
-
-## Add a # infront of this if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system.
-BAN_LEGACY_SYSTEM
-
-## Add a # here if you wish to use the setup where jobs have more access. This is intended for servers with low populations - where there are not enough players to fill all roles, so players need to do more than just one job. Also for servers where they don't want people to hide in their own departments.
-JOBS_HAVE_MINIMAL_ACCESS
-
-## Uncomment this and set it to a file path relative to the executing binary to prefix all custom item icon locations with this location ie. '[CUSTOM_ITEM_ICON_LOCATION]/[custom item icon path value]'
-# CUSTOM_ITEM_ICON_LOCATION config/custom_items/icons
-
-## Uncomment this and set it to a file path relative to the executing binary to prefix all custom icon locations with this location ie. '[CUSTOM_ICON_ICON_LOCATION]/[custom icon path value]'
-# CUSTOM_ICON_ICON_LOCATION config/custom_icons/icons
-
-## Unhash this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing
-## the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job.
-## REQUIRES the database set up to work. Keep it hashed if you don't have a database set up.
-## NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means
-## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days.
-#USE_AGE_RESTRICTION_FOR_JOBS
-
-## Unhash this entry to have certain antag roles require your account to be at least a certain number of days old for round start and auto-spawn selection.
-## Non-automatic antagonist recruitment, such as being converted to cultism is not affected. Has the same database requirements and notes as USE_AGE_RESTRICTION_FOR_JOBS.
-#USE_AGE_RESTRICTION_FOR_ANTAGS
-
-## Unhash this to use iterative explosions, keep it hashed to use circle explosions.
-#USE_ITERATIVE_EXPLOSIONS
-
-# The power of explosion required for it to cross Z-levels.
-#EXPLOSION_Z_THRESHOLD 10
-
-# What to multiply power by when crossing Z-levels.
-#EXPLOSION_Z_MULT 0.75
-
-## Radiation weakens with distance from the source; stop calculating when the strength falls below this value. Lower values mean radiation reaches smaller (with increasingly trivial damage) at the cost of more CPU usage. Max range = DISTANCE^2 * POWER / RADIATION_LOWER_LIMIT
-# RADIATION_LOWER_LIMIT 0.35
-
-## log OOC channel
-LOG_OOC
-
-## log client Say
-LOG_SAY
-
-## log admin actions
-LOG_ADMIN
-
-## log client access (logon/logoff)
-LOG_ACCESS
-
-## log game actions (start of round, results, etc.)
-LOG_GAME
-
-## log player votes
-LOG_VOTE
-
-## log client Whisper
-LOG_WHISPER
-
-## log emotes
-LOG_EMOTE
-
-## log attack messages
-LOG_ATTACK
-
-## log pda messages
-LOG_PDA
-
-## log world.log messages
-# LOG_WORLD_OUTPUT
-
-## log all Topic() calls (for use by coders in tracking down Topic issues)
-# LOG_HREFS
-
-## log world.log and runtime errors to a file
-# LOG_RUNTIME
-
-## log admin warning messages
-##LOG_ADMINWARN ## Also duplicates a bunch of other messages.
-
-## disconnect players who did nothing during the set amount of minutes
-# KICK_INACTIVE 10
-
-## Chooses whether mods have the ability to tempban or not
-MODS_CAN_TEMPBAN
-
-## Chooses whether mods have the ability to issue tempbans for jobs or not
-MODS_CAN_JOB_TEMPBAN
-
-## Maximum mod tempban duration (in minutes)
-MOD_TEMPBAN_MAX 1440
-
-## Maximum mod job tempban duration (in minutes)
-MOD_JOB_TEMPBAN_MAX 1440
-
-
-## probablities for game modes chosen in "secret" and "random" modes
-##
-## default probablity is 1, increase to make that mode more likely to be picked
-## set to 0 to disable that mode
-PROBABILITY EXTENDED 1
-PROBABILITY MALFUNCTION 1
-PROBABILITY MERCENARY 1
-PROBABILITY WIZARD 1
-PROBABILITY CHANGELING 1
-PROBABILITY CULT 1
-PROBABILITY EXTEND-A-TRAITORMONGOUS 6
-
-## if possible round types will be hidden from players for secret rounds
-#SECRET_HIDE_POSSIBILITIES
-
-## Hash out to disable random events during the round.
-ALLOW_RANDOM_EVENTS
-
-## if amount of traitors scales or not
-TRAITOR_SCALING
-
-## if objectives are disabled
-#OBJECTIVES_DISABLED
-
-## make ERT's be only called by admins
-#ERT_ADMIN_ONLY
-
-## If uncommented, votes can be called to add extra antags to the round.
-#ALLOW_EXTRA_ANTAGS
-
-## If security is prohibited from being most antagonists
-#PROTECT_ROLES_FROM_ANTAGONIST
-
-## Comment this out to stop admins being able to choose their personal ooccolor
-ALLOW_ADMIN_OOCCOLOR
-
-## allow players to initiate a restart vote
-ALLOW_VOTE_RESTART
-
-## allow players to initate a mode-change start
-ALLOW_VOTE_MODE
-
-## min delay (deciseconds) between voting sessions (default 10 minutes)
-VOTE_DELAY 6000
-
-## time period (deciseconds) which voting session will last (default 1 minute)
-VOTE_PERIOD 600
-
-## autovote initial delay (deciseconds) before first automatic transfer vote call (default 180 minutes)
-VOTE_AUTOTRANSFER_INITIAL 108000
-
-##autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes)
-VOTE_AUTOTRANSFER_INTERVAL 18000
-
-## Time left (seconds) before round start when automatic gamemote vote is called (default 160).
-VOTE_AUTOGAMEMODE_TIMELEFT 160
-
-## prevents dead players from voting or starting votes
-#NO_DEAD_VOTE
-
-## Prevents players not in-round from voting on crew transfer votes.
-#NO_DEAD_VOTE_CREW_TRANSFER
-
-## players' votes default to "No vote" (otherwise, default to "No change")
-DEFAULT_NO_VOTE
-
-## Allow ghosts to see antagonist through AntagHUD
-ALLOW_ANTAG_HUD
-
-## If ghosts use antagHUD they are no longer allowed to join the round.
-ANTAG_HUD_RESTRICTED
-
-## allow AI job
-ALLOW_AI
-
-## disable abandon mob
-# NORESPAWN
-
-## disables calling del(src) on newmobs if they logout before spawnin in
-# DONT_DEL_NEWMOB
-
-## set a hosted by name for unix platforms
-HOSTEDBY yournamehere
-
-## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
-## Set to 1 to jobban them from those positions, set to 0 to allow them.
-GUEST_JOBBAN
-
-## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting)
-GUEST_BAN
-## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
-## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans)
-# USEWHITELIST
-
-## set a server location for world reboot. Don't include the byond://, just give the address and port.
-#SERVER server.net:port
-
-## set a server URL for the IRC bot to use; like SERVER, don't include the byond://
-## Unlike SERVER, this one shouldn't break auto-reconnect
-#SERVERURL server.net:port
-
-## forum address
-# FORUMURL http://example.com
-
-## discord server permanent invite address
-# DISCORDURL https://discord.gg/example
-
-## Wiki address
-# WIKIURL http://example.com
-
-## GitHub address
-# GITHUBURL https://github.com/example-user/example-repository
-
-## GitHub new issue address
-# ISSUEREPORTURL https://github.com/example-user/example-repository/issues/new
-
-## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
-# BANAPPEALS http://example.com
-
-## In-game features
-## spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
-# FEATURE_OBJECT_SPELL_SYSTEM
-
-##Toggle for having jobs load up from the .txt
-# LOAD_JOBS_FROM_TXT
-
-##Remove the # mark infront of this to forbid admins from posssessing the singularity.
-#FORBID_SINGULO_POSSESSION
-
-## Remove the # to show a popup 'reply to' window to every non-admin that recieves an adminPM.
-## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off)
-#POPUP_ADMIN_PM
-
-## Remove the # to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR
-ALLOW_HOLIDAYS
-
-##Defines the ticklag for the world. 0.9 is the normal one, 0.5 is smoother.
-TICKLAG 0.7
-
-##Defines world FPS. Defaults to 20.
-# FPS 20
-
-## Whether the server will talk to other processes through socket_talk
-SOCKET_TALK 0
-
-## Comment this out to disable automuting
-#AUTOMUTE_ON
-
-## How long the delay is before the Away Mission gate opens. Default is half an hour.
-GATEWAY_DELAY 18000
-
-## Remove the # to give assistants maint access.
-#ASSISTANT_MAINT
-
-## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked.
-## Malf and Rev will let the shuttle be called when the antags/protags are dead.
-#CONTINUOUS_ROUNDS
-
-## Uncomment to restrict non-admins from using humanoid alien races
-USEALIENWHITELIST
-## Uncomment to use the alien whitelist system with SQL instead. (requires the above uncommented aswell)
-#USEALIENWHITELIST_SQL
-
-## Comment this to unrestrict the number of alien players allowed in the round. The number represents the number of alien players for every human player.
-#ALIEN_PLAYER_RATIO 0.2
-##Remove the # to let ghosts spin chairs
-#GHOST_INTERACTION
-
-## Password used for authorizing ircbot and other external tools.
-#COMMS_PASSWORD
-
-## Password used for authorizing external tools that can apply bans
-#BAN_COMMS_PASSWORD
-
-## BYOND builds that will result the client using them to be banned.
-#FORBIDDEN_VERSIONS 512.0001;512.0002
-
-## Export address where external tools that monitor logins are located
-#LOGIN_EXPORT_ADDR
-
-## Uncomment to enable sending data to the IRC bot.
-#USE_IRC_BOT
-
-## Host where the IRC bot is hosted. Port 45678 needs to be open.
-#IRC_BOT_HOST localhost
-
-## IRC channel to send information to. Leave blank to disable.
-#MAIN_IRC #main
-
-## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc.
-#ADMIN_IRC #admin
-
-## Uncommen to allow ghosts to write in blood during Cult rounds.
-ALLOW_CULT_GHOSTWRITER
-
-## Sets the minimum number of cultists needed for ghosts to write in blood.
-REQ_CULT_GHOSTWRITER 6
-
-## Sets the number of available character slots
-CHARACTER_SLOTS 10
-
-## Sets the number of loadout slots per character
-LOADOUT_SLOTS 3
-
-## Expected round length in minutes
-EXPECTED_ROUND_LENGTH 180
-
-## The lower delay between events in minutes.
-## Affect mundane, moderate, and major events respectively
-EVENT_DELAY_LOWER 10;30;50
-
-## The upper delay between events in minutes.
-## Affect mundane, moderate, and major events respectively
-EVENT_DELAY_UPPER 15;45;70
-
-## The delay until the first time an event of the given severity runs in minutes.
-## Unset setting use the EVENT_DELAY_LOWER and EVENT_DELAY_UPPER values instead.
-# EVENT_CUSTOM_START_MINOR 10;15
-# EVENT_CUSTOM_START_MODERATE 30;45
-EVENT_CUSTOM_START_MAJOR 80;100
-
-## Uncomment to make proccall require R_ADMIN instead of R_DEBUG
-## designed for environments where you have testers but don't want them
-## able to use the more powerful debug options.
-#DEBUG_PARANOID
-
-## Uncomment to allow aliens to spawn.
-#ALIENS_ALLOWED
-
-## Uncomment to allow alien xenomorph queens to lay eggs.
-#ALIEN_EGGS_ALLOWED
-
-## Uncomment to allow xenos to spawn.
-#NINJAS_ALLOWED
-
-## Uncomment to disable the restrictive weldervision overlay.
-#DISABLE_WELDER_VISION
-
-## Uncomment to prevent anyone from joining the round by default.
-#DISABLE_ENTRY
-
-## Uncomment to disable the OOC channel by default.
-#DISABLE_OOC
-
-## Uncomment to disable the LOOC channel by default.
-#DISABLE_LOOC
-
-## Uncomment to disable the dead OOC channel by default.
-#DISABLE_DEAD_OOC
-
-## Uncomment to disable the AOOC channel by default.
-#DISABLE_AOOC
-
-## Uncomment to disable ghost chat by default.
-#DISABLE_DSAY
-
-## Uncomment to disable respawning by default.
-#DISABLE_RESPAWN
-
-## Respawn delay in minutes before one may respawn as a crew member.
-#RESPAWN_DELAY 30
-
-## Percentile strength of exterior ambient light (such as starlight). 0.5 is 50% lit.
-EXTERIOR_AMBIENT_LIGHT 0
-
-
-## Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode.
-# LAW_ZERO ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010
-
-
-## Enable/Disable random level generation. Will behave strangely if turned off with a map that expects it on.
-#ROUNDSTART_LEVEL_GENERATION 1
-
-## Uncomment to enable organ decay outside of a body or storage item.
-#ORGANS_CAN_DECAY
-
-## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog
-#AGGRESSIVE_CHANGELOG
-
-## Uncomment to make Discord webhooks send in plaintext rather than as embeds.
-# DISABLE_WEBHOOK_EMBEDS
-
-## Uncomment to override default brain health.
-#DEFAULT_BRAIN_HEALTH 400
-
-## Uncomment this line to announce shuttle dock announcements to the main IRC channel, if MAIN_IRC has also been setup.
-# ANNOUNCE_SHUTTLE_DOCK_TO_IRC
-
-## Uncomment to enable map voting; you'll need to use the script at tools/server.sh or an equivalent for it to take effect
-## You'll also likely need to enable WAIT_FOR_SIGUSR1 below
-# MAP_SWITCHING
-
-## Uncomment to enable an automatic map vote and switch at end of round. MAP_SWITCHING must also be enabled.
-# AUTO_MAP_VOTE
-
-## Uncomment to make Dream Daemon refuse to reboot for any reason other than SIGUSR1
-# WAIT_FOR_SIGUSR1
-
-## Uncomment to enable auto-stealthing staff who are AFK for more than specified minutes
-# AUTOSTEALTH 30
-
-## Set to 0/1 to disable/enable automatic admin rights for users connecting from the host the server is running on.
-AUTO_LOCAL_ADMIN 0
-
-## How many loadout points are available. Use 0 to disable loadout, and any negative number to indicate infinite points.
-MAX_GEAR_COST 10
-
-## How much radiation levels self-reduce by each tick.
-RADIATION_DECAY_RATE 1
-
-## The amount of radiation resistance on a turf is multiplied by this value
-RADIATION_RESISTANCE_MULTIPLIER 1.25
-
-## General material radiation resistance is divided by this value
-RADIATION_MATERIAL_RESISTANCE_DIVISOR 2
-
-## Below this point, radiation is ignored
-RADIATION_LOWER_LIMIT 0.15
-
-## Uncomment this to prevent players from printing copy/pasted circuits
-#DISABLE_CIRCUIT_PRINTING
-
-## Uncomment this to allow admins to narrate using HTML tags
-#ALLOW_UNSAFE_NARRATES
-
-## Uncomment this to DISABLE action spam kicking. Not recommended; this helps protect from spam attacks.
-#DO_NOT_PREVENT_SPAM
-
-## Uncomment this to modify the length of the spam kicking interval in seconds.
-#ACT_INTERVAL 0.1
-
-## Uncomment this to modify the number of actions permitted per interval before being kicked for spam.
-#MAX_ACTS_PER_INTERVAL 140
-
-## Is the panic bunker currently on by default.
-#PANIC_BUNKER
-
-## A message when user did not pass the panic bunker.
-#PANIC_BUNKER_MESSAGE Sorry! The panic bunker is enabled. Please head to our Discord or forum to get yourself added to the panic bunker bypass.
-
-##Clients will be unable to connect unless their version is equal to or higher than this (a number, e.g. 511)
-#MINIMUM_BYOND_VERSION
-
-## Clients will be unable to connect unless their build is equal to or higher than this (a number, e.g. 1000)
-#MINIMUM_BYOND_BUILD
-
-## Direct clients to preload the server resource file from a URL pointing to a .rsc file. NOTE: At this time (byond 512),
-## the client/resource_rsc var does not function as one would expect. See client_defines.dm, the "preload_rsc" var's
-## comments on how to use it properly. If you use a resource URL, you must set preload_rsc to 0 at compile time or
-## clients will still download from the server *too*. This will randomly select one URL if more than one is provided.
-## Spaces are prohibited in each URL by spec, you must use encoded spaces.
-#RESOURCE_URLS URL URL2 URL3
-
-## Whether or not to make localhost immune to throttling.
-## Localhost will still be throttled internally; it just won't be affected by it.
-#NO_THROTTLE_LOCALHOST
-
-## Uncomment this to enable expanded alt interactions with objects.
-#EXPANDED_ALT_INTERACTIONS
-
-## Uncomment this to show a typing indicator for people writing whispers.
-#SHOW_TYPING_INDICATOR_FOR_WHISPERS
diff --git a/config/example/configuration.txt b/config/example/configuration.txt
new file mode 100644
index 00000000000..da635a98386
--- /dev/null
+++ b/config/example/configuration.txt
@@ -0,0 +1,624 @@
+##
+# ADMIN
+# Configuration options relating to administration.
+##
+
+## Allows admin jumping.
+#ALLOW_ADMIN_JUMP 1
+
+## Comment this out to stop admins being able to choose their personal OOC color. Uncomment to enable.
+#ALLOW_ADMIN_OOCCOLOR
+
+## Allows admin revives.
+#ALLOW_ADMIN_REV 1
+
+## Allows admin item spawning.
+#ALLOW_ADMIN_SPAWNING 1
+
+## Uncomment this to allow admins to narrate using HTML tags. Uncomment to enable.
+#ALLOW_UNSAFE_NARRATES
+
+## Uncomment to enable auto-stealthing staff who are AFK for more than specified minutes.
+#AUTOSTEALTH 0
+
+## Set to 0/1 to disable/enable automatic admin rights for users connecting from the host the server is running on.
+#AUTO_LOCAL_ADMIN 1
+
+## Set to jobban 'Guest-' accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
+## Set to 1 to jobban them from those positions, set to 0 to allow them.
+#GUEST_JOBBAN 1
+
+## Chooses whether mods have the ability to issue tempbans for jobs or not. Uncomment to enable.
+#MODS_CAN_JOB_TEMPBAN
+
+## Chooses whether mods have the ability to tempban or not. Uncomment to enable.
+#MODS_CAN_TEMPBAN
+
+## Maximum mod job tempban duration (in minutes).
+#MOD_JOB_TEMPBAN_MAX 1440
+
+## Maximum mod tempban duration (in minutes).
+#MOD_TEMPBAN_MAX 1440
+
+##
+# DEBUG
+# Configuration options relating to error reporting.
+##
+
+## Uncomment to make proccall require R_ADMIN instead of R_DEBUG
+## designed for environments where you have testers but don't want them
+## able to use the more powerful debug options.
+## Uncomment to enable.
+#DEBUG_PARANOID
+
+## The "cooldown" time for each occurrence of a unique error.
+#ERROR_COOLDOWN 600
+
+## How many occurrences before the next will silence them.
+#ERROR_LIMIT 50
+
+## How long to wait between messaging admins about occurrences of a unique error.
+#ERROR_MSG_DELAY 50
+
+## How long a unique error will be silenced for.
+#ERROR_SILENCE_TIME 6000
+
+##
+# EVENTS
+# Configuration options relating to event timers and probabilities.
+##
+
+## Hash out to disable random events during the round. Uncomment to enable.
+#ALLOW_RANDOM_EVENTS
+
+## The lower delay between events in minutes.
+## Affect mundane, moderate, and major events respectively.
+#EVENT_DELAY_LOWER [10,30,50]
+
+## The upper delay between events in minutes.
+## Affect mundane, moderate, and major events respectively.
+#EVENT_DELAY_UPPER [15,45,70]
+
+## If the first delay has a custom start time. Defined in minutes.
+#EVENT_FIRST_RUN [null,null,{"lower":80,"upper":100}]
+
+## Determines if objectives are disabled.
+#OBJECTIVES_DISABLED 2
+
+##
+# GAME OPTIONS
+# Configuration options relating to gameplay, such as movement, health and stamina.
+##
+
+## Uncomment this to modify the length of the spam kicking interval in seconds.
+#ACT_INTERVAL 0.1
+
+## Remove the # to let aliens spawn. Uncomment to enable.
+#ALIENS_ALLOWED
+
+## Allow multiple input keys to be pressed for diagonal movement. Uncomment to enable.
+#ALLOW_DIAGONAL_MOVEMENT
+
+## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
+#ANIMAL_DELAY 0
+
+## Remove the # to give assistants maint access. Uncomment to enable.
+#ASSISTANT_MAINT
+
+## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
+#CREEP_DELAY 6
+
+## The effectiveness of default darksight if above is uncommented.
+#DEFAULT_DARKSIGHT_EFFECTIVENESS 0.05
+
+## The range of default darksight if above is uncommented.
+#DEFAULT_DARKSIGHT_RANGE 2
+
+## Threshold of where brain damage begins to affect dexterity (70 brainloss above this means zero dexterity). Default is 30.
+#DEX_MALUS_BRAINLOSS_THRESHOLD 30
+
+## Restricted ERT to be only called by admins. Uncomment to enable.
+#ERT_ADMIN_CALL_ONLY
+
+## Uncomment this to enable expanded alt interactions with objects. Uncomment to enable.
+#EXPANDED_ALT_INTERACTIONS
+
+## Expected round length in hours.
+#EXPECTED_ROUND_LENGTH 3
+
+## Uncomment to allow ghosts to possess any animal. Uncomment to enable.
+#GHOSTS_CAN_POSSESS_ANIMALS
+
+## Remove the # to let ghosts spin chairs. Uncomment to enable.
+#GHOST_INTERACTION
+
+## Set this to 0 for perfectly smooth movement gliding, or 1 or more for delayed chess move style movements.
+#GLIDE_SIZE_DELAY 1
+
+## Whether or not all human mobs have very basic darksight by default. Uncomment to enable.
+#GRANT_DEFAULT_DARKSIGHT
+
+## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
+#HUMAN_DELAY 0
+
+## Maximum stamina recovered per tick when resting.
+#MAXIMUM_STAMINA_RECOVERY 3
+
+## Uncomment this to modify the number of actions permitted per interval before being kicked for spam.
+#MAX_ACTS_PER_INTERVAL 140
+
+## How many loadout points are available. Use 0 to disable loadout, and any negative number to indicate infinite points.
+#MAX_GEAR_COST 10
+
+## Value used for expending stamina during sprinting.
+#MINIMUM_SPRINT_COST 0.8
+
+## Minimum stamina recovered per tick when resting.
+#MINIMUM_STAMINA_RECOVERY 1
+
+## Remove the # to let ninjas spawn. Uncomment to enable.
+#NINJAS_ALLOWED
+
+## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
+#ROBOT_DELAY 0
+
+## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
+#RUN_DELAY 2
+
+## Determines the severity of athletics skill when applied to stamina cost.
+#SKILL_SPRINT_COST_RANGE 0.8
+
+## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
+#WALK_DELAY 4
+
+##
+# GAME WORLD
+# Configuration options relating to the game world and simulation.
+##
+
+## Remove the # to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR Uncomment to enable.
+#ALLOW_HOLIDAYS
+
+## Uncomment this to prevent players from printing copy/pasted circuits.
+#ALLOW_IC_PRINTING 1
+
+## Uncomment to allow ghosts to write in blood during Cult rounds.
+#CULT_GHOSTWRITER 1
+
+## The maximum duration of an exoplanet day, in minutes.
+#EXOPLANET_MAX_DAY_DURATION 40
+
+## The minimum duration of an exoplanet day, in minutes.
+#EXOPLANET_MIN_DAY_DURATION 10
+
+## Percentile strength of exterior ambient light (such as starlight). 0.5 is 50% lit.
+#EXTERIOR_AMBIENT_LIGHT 0
+
+## How long the delay is before the Away Mission gate opens. Default is half an hour.
+#GATEWAY_DELAY 18000
+
+## Humans are forced to have surnames if this is uncommented. Uncomment to enable.
+#HUMANS_NEED_SURNAMES
+
+## What to multiply power by when crossing Z-levels.
+#ITERATIVE_EXPLOSIVES_Z_MULTIPLIER 0.75
+
+## The power of explosion required for it to cross Z-levels.
+#ITERATIVE_EXPLOSIVES_Z_THRESHOLD 10
+
+## Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode.
+#LAW_ZERO ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010
+
+## After this amount alive, walking mushrooms spawned from botany will not reproduce.
+#MAXIMUM_MUSHROOMS 15
+
+## How much radiation levels self-reduce by each tick.
+#RADIATION_DECAY_RATE 1
+
+## Below this point, radiation is ignored.
+## Radiation weakens with distance from the source; stop calculating when the strength falls below this value. Lower values mean radiation reaches smaller (with increasingly trivial damage) at the cost of more CPU usage.
+## Max range = DISTANCE^2 * POWER / RADIATION_LOWER_LIMIT
+#RADIATION_LOWER_LIMIT 0.15
+
+## General material radiation resistance is divided by this value.
+#RADIATION_MATERIAL_RESISTANCE_DIVISOR 2
+
+## The amount of radiation resistance on a turf is multiplied by this value.
+#RADIATION_RESISTANCE_MULTIPLIER 1.25
+
+## Enable/Disable random level generation. Will behave strangely if turned off with a map that expects it on. Uncomment to enable.
+#ROUNDSTART_LEVEL_GENERATION
+
+## Unhash this to use iterative explosions, keep it hashed to use circle explosions. Uncomment to enable.
+#USE_ITERATIVE_EXPLOSIONS
+
+## Uncomment to disable the restrictive weldervision overlay.
+#WELDER_VISION 1
+
+##
+# HEALTH
+# Configuration options relating to the health simulation.
+##
+
+## Determines whether bones can be broken through excessive damage to the organ.
+## 0 means bones can't break, 1 means they can.
+#BONES_CAN_BREAK 1
+
+## Level of health at which a mob becomes dead.
+#HEALTH_THRESHOLD_DEAD -100
+
+## Determines whether limbs can be amputated through excessive damage to the organ.
+## 0 means limbs can't be amputated, 1 means they can.
+#LIMBS_CAN_BREAK 1
+
+## Percentage multiplier that influences how damage spreads around organs. 100 means normal, 50 means half.
+#ORGAN_DAMAGE_SPILLOVER_MULTIPLIER 0.5
+
+## Percentage multiplier which enables organs to take more damage before bones breaking or limbs being destroyed.
+#ORGAN_HEALTH_MULTIPLIER 0.9
+
+## Percentage multiplier which influences how fast organs regenerate naturally.
+#ORGAN_REGENERATION_MULTIPLIER 0.25
+
+## Amount of time (in hundredths of seconds) for which a brain retains the 'spark of life' after the person's death (set to -1 for infinite).
+#REVIVAL_BRAIN_LIFE -1
+
+## A multiplier for the impact stress has on blood regeneration, as above.
+#STRESS_BLOOD_RECOVERY_CONSTANT 0.3
+
+## A multiplier for the impact stress has on wound passive healing, as above.
+#STRESS_HEALING_RECOVERY_CONSTANT 0.3
+
+## A multiplier for the impact stress has on shock recovery - 0.3 means maximum stress imposes a 30% penalty on shock recovery.
+#STRESS_SHOCK_RECOVERY_CONSTANT 0.5
+
+##
+# LOGGING
+# Configuration options relating to logging.
+##
+
+## log client access (logon/logoff) Uncomment to enable.
+#LOG_ACCESS
+
+## log admin actions Uncomment to enable.
+#LOG_ADMIN
+
+## log admin chat Uncomment to enable.
+#LOG_ADMINCHAT
+
+## Log admin warning messages. Also duplicates a bunch of other messages. Uncomment to enable.
+#LOG_ADMINWARN
+
+## log attack messages Uncomment to enable.
+#LOG_ATTACK
+
+## log debug output Uncomment to enable.
+#LOG_DEBUG
+
+## log emotes Uncomment to enable.
+#LOG_EMOTE
+
+## log game actions (start of round, results, etc.) Uncomment to enable.
+#LOG_GAME
+
+## Log all Topic() calls (for use by coders in tracking down Topic issues). Uncomment to enable.
+#LOG_HREFS
+
+## log OOC channel Uncomment to enable.
+#LOG_OOC
+
+## Log PDA messages. Uncomment to enable.
+#LOG_PDA
+
+## Log world.log and runtime errors to a file. Uncomment to enable.
+#LOG_RUNTIME
+
+## log client Say Uncomment to enable.
+#LOG_SAY
+
+## log player votes Uncomment to enable.
+#LOG_VOTE
+
+## log client Whisper Uncomment to enable.
+#LOG_WHISPER
+
+## Log world.log messages. Uncomment to enable.
+#LOG_WORLD_OUTPUT
+
+##
+# MODES
+# Configuration options relating to game modes.
+##
+
+## If uncommented, votes can be called to add extra antags to the round. Uncomment to enable.
+#ALLOW_EXTRA_ANTAGS
+
+## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked.
+## Malf and Rev will let the shuttle be called when the antags/protags are dead.
+## Uncomment to enable.
+#CONTINUOUS_ROUNDS
+
+## Spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard. Uncomment to enable.
+#FEATURE_OBJECT_SPELL_SYSTEM
+
+## Allowed modes.
+#MODES []
+
+## Mode names.
+#MODE_NAMES []
+
+## Relative probability of each mode.
+#PROBABILITIES {"calamity":0,"cult":1,"extended":1,"god":0,"heist":0,"meteor":0,"crossfire":0,"siege":0,"spyvspy":0,"uprising":0,"ninja":0,"mercenary":1,"revolution":0,"traitor":0,"wizard":1}
+
+## If security is prohibited from being most antagonists. Uncomment to enable.
+#PROTECT_ROLES_FROM_ANTAGONIST
+
+## If amount of traitors scales or not. Uncomment to enable.
+#TRAITOR_SCALING
+
+## A list of modes that should be votable.
+#VOTABLE_MODES ["crossfire","cult","extended","god","heist","mercenary","meteor","ninja","revolution","secret","siege","spyvspy","traitor","uprising","wizard"]
+
+##
+# PROTECTED
+# Configuration options protected from manipulation on-server.
+##
+
+## Password used for authorizing external tools that can apply bans.
+#BAN_COMMS_PASSWORD
+
+## Password used for authorizing ircbot and other external tools.
+#COMMS_PASSWORD
+
+## Export address where external tools that monitor logins are located.
+#LOGIN_EXPORT_ADDR
+
+##
+# RESOURCES
+# Configuration options relating to server resources.
+##
+
+## Uncomment this and set it to a file path relative to the executing binary to prefix all custom icon locations with this location ie. '[CUSTOM_ICON_ICON_LOCATION]/[custom icon path value]'
+#CUSTOM_ICON_ICON_LOCATION config/custom_icons/icons
+
+## Set this to a file path relative to the executing binary to prefix all custom item icon locations with this location ie. '[CUSTOM_ITEM_ICON_LOCATION]/[custom item icon path value]'
+#CUSTOM_ITEM_ICON_LOCATION config/custom_items/icons
+
+## Direct clients to preload the server resource file from a URL pointing to a .rsc file. NOTE: At this time (byond 512),
+## the client/resource_rsc var does not function as one would expect. See client_defines.dm, the 'preload_rsc' var's
+## comments on how to use it properly. If you use a resource URL, you must set preload_rsc to 0 at compile time or
+## clients will still download from the server *too*. This will randomly select one URL if more than one is provided.
+## Spaces are prohibited in each URL by spec, you must use encoded spaces.
+## ex. RESOURCE_URLS URL URL2 URL3
+#RESOURCE_URLS []
+
+##
+# SERVER
+# Configuration options relating to the server itself.
+##
+
+## Comment to disable respawning by default.
+#ABANDON_ALLOWED 1
+
+## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc.
+#ADMIN_IRC
+
+## Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system.
+#ADMIN_LEGACY_SYSTEM 1
+
+## Allow AI job.
+#ALLOW_AI 1
+
+## Allow ghosts to join as maintenance drones.
+#ALLOW_DRONE_SPAWN 1
+
+## Uncomment this line to announce shuttle dock announcements to the main IRC channel, if MAIN_IRC has also been setup. Uncomment to enable.
+#ANNOUNCE_SHUTTLE_DOCK_TO_IRC
+
+## Comment to disable the AOOC channel by default.
+#AOOC_ALLOWED 1
+
+## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
+#BANAPPEALS
+
+## Add a # infront of this if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system.
+#BAN_LEGACY_SYSTEM 1
+
+## Sets the number of available character slots.
+#CHARACTER_SLOTS 10
+
+## Sets the minimum number of cultists needed for ghosts to write in blood.
+#CULT_GHOSTWRITER_REQ_CULTISTS 10
+
+## Uncomment this to remove the server from the hub. Uncomment to enable.
+#DELIST_WHEN_NO_ADMINS
+
+## Uncomment to enable.
+#DISABLE_PLAYER_MICE
+
+## Uncomment to make Discord webhooks send in plaintext rather than as embeds. Uncomment to enable.
+#DISABLE_WEBHOOK_EMBEDS
+
+## Discord server permanent invite address.
+#DISCORDURL
+
+## Comment to disable the dead OOC channel by default.
+#DOOC_ALLOWED 1
+
+## Uncomment this to DISABLE action spam kicking. Not recommended; this helps protect from spam attacks. Uncomment to enable.
+#DO_NOT_PREVENT_SPAM
+
+## A drone will become available every X ticks since last drone spawn. Default is 2 minutes.
+#DRONE_BUILD_TIME 1200
+
+## Comment to disable ghost chat by default.
+#DSAY_ALLOWED 1
+
+## Comment to prevent anyone from joining the round by default.
+#ENTER_ALLOWED 1
+
+## Remove the # mark infront of this to forbid admins from posssessing the singularity. Uncomment to enable.
+#FORBID_SINGULO_POSSESSION
+
+## Discussion forum address.
+#FORUMURL
+
+## Defines world FPS. Defaults to 20.
+## Can also accept ticklag values (0.9, 0.5, etc) which will automatically be converted to FPS.
+#FPS 20
+
+## GitHub address.
+#GITHUBURL
+
+## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting). Uncomment to enable.
+#GUESTS_ALLOWED
+
+## Set a hosted by name for UNIX platforms.
+#HOSTEDBY
+
+## Hub visibility: If you want to be visible on the hub, uncomment the below line and be sure that Dream Daemon is set to visible. This can be changed in-round as well with toggle-hub-visibility if Dream Daemon is set correctly. Uncomment to enable.
+#HUB_VISIBILITY
+
+## Host where the IRC bot is hosted. Port 45678 needs to be open.
+#IRC_BOT_HOST localhost
+
+## GitHub new issue address.
+#ISSUEREPORTURL
+
+## Add a # here if you wish to use the setup where jobs have more access. This is intended for servers with low populations - where there are not enough players to fill all roles, so players need to do more than just one job. Also for servers where they don't want people to hide in their own departments.
+#JOBS_HAVE_MINIMAL_ACCESS 1
+
+## Disconnect players who did nothing during the set amount of minutes.
+#KICK_INACTIVE 0
+
+## Sets the number of loadout slots per character.
+#LOADOUT_SLOTS 3
+
+## Toggle for having jobs load up from the .txt Uncomment to enable.
+#LOAD_JOBS_FROM_TXT
+
+## Comment to disable the LOOC channel by default.
+#LOOC_ALLOWED 1
+
+## IRC channel to send information to. Leave blank to disable.
+#MAIN_IRC #main
+
+## Remove the # to define a different cap for aspect points in chargen.
+#MAX_CHARACTER_ASPECTS 5
+
+## This many drones can be active at the same time.
+#MAX_MAINT_DRONES 5
+
+## Clients will be unable to connect unless their build is equal to or higher than this (a number, e.g. 1000).
+#MINIMUM_BYOND_BUILD 0
+
+## Clients will be unable to connect unless their version is equal to or higher than this (a number, e.g. 511).
+#MINIMUM_BYOND_VERSION 0
+
+## Uncomment to enable.
+#NO_CLICK_COOLDOWN
+
+## Whether or not to make localhost immune to throttling.
+## Localhost will still be throttled internally; it just won't be affected by it.
+## Uncomment to enable.
+#NO_THROTTLE_LOCALHOST
+
+## Comment to disable the OOC channel by default.
+#OOC_ALLOWED 1
+
+## Is the panic bunker currently on by default? Uncomment to enable.
+#PANIC_BUNKER
+
+## A message when user did not pass the panic bunker.
+#PANIC_BUNKER_MESSAGE Sorry! The panic bunker is enabled. Please head to our Discord or forum to get yourself added to the panic bunker bypass.
+
+## The maximum number of non-admin players online.
+#PLAYER_LIMIT 0
+
+## Respawn delay in minutes before one may respawn as a crew member.
+#RESPAWN_DELAY 30
+
+## Set a server location for world reboot. Don't include the byond://, just give the address and port.
+#SERVER
+
+## Set a server URL for the IRC bot to use; like SERVER, don't include the byond://
+## Unlike SERVER, this one shouldn't break auto-reconnect.
+#SERVERURL
+
+## Server name: This appears at the top of the screen in-game.
+#SERVER_NAME Nebula 13
+
+## Uncomment this to show a typing indicator for people writing whispers. Uncomment to enable.
+#SHOW_TYPING_INDICATOR_FOR_WHISPERS
+
+## SSinitialization throttling.
+#TICK_LIMIT_MC_INIT 98
+
+## Set to 1 to prevent newly-spawned mice from understanding human speech. Uncomment to enable.
+#UNEDUCATED_MICE
+
+## Uncomment to restrict non-admins from using humanoid alien races. Uncomment to enable.
+#USEALIENWHITELIST
+
+## Uncomment to use the alien whitelist system with SQL instead. (requires the above uncommented as well). Uncomment to enable.
+#USEALIENWHITELIST_SQL
+
+## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
+## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans).
+## Uncomment to enable.
+#USEWHITELIST
+
+## Uncomment to enable sending data to the IRC bot. Uncomment to enable.
+#USE_IRC_BOT
+
+## Remove the # in front of this config option to have loyalty implants spawn by default on your server. Uncomment to enable.
+#USE_LOYALTY_IMPLANTS
+
+## Uncomment to make Dream Daemon refuse to reboot for any reason other than SIGUSR1. Uncomment to enable.
+#WAIT_FOR_SIGUSR1_REBOOT
+
+## Wiki address.
+#WIKIURL
+
+##
+# VOTING
+# Configuration options relating to votes at runtime.
+##
+
+## Uncomment to enable map voting; you'll need to use the script at tools/server.sh or an equivalent for it to take effect.
+## You'll also likely need to enable WAIT_FOR_SIGUSR1 below.
+## Uncomment to enable.
+#ALLOW_MAP_SWITCHING
+
+## Allow players to initate a mode-change start. Uncomment to enable.
+#ALLOW_VOTE_MODE
+
+## Allow players to initiate a restart vote. Uncomment to enable.
+#ALLOW_VOTE_RESTART
+
+## Uncomment to enable an automatic map vote and switch at end of round. MAP_SWITCHING must also be enabled. Uncomment to enable.
+#AUTO_MAP_VOTE
+
+## Time left (seconds) before round start when automatic gamemote vote is called (default 160).
+#VOTE_AUTOGAMEMODE_TIMELEFT 100
+
+## Autovote initial delay (deciseconds) before first automatic transfer vote call (default 180 minutes).
+#VOTE_AUTOTRANSFER_INITIAL 108000
+
+## Autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes).
+#VOTE_AUTOTRANSFER_INTERVAL 18000
+
+## Min delay (deciseconds) between voting sessions (default 10 minutes).
+#VOTE_DELAY 6000
+
+## Prevents dead players from voting or starting votes.
+#VOTE_NO_DEAD 0
+
+## Prevents players not in-round from voting on crew transfer votes.
+#VOTE_NO_DEAD_CREW_TRANSFER 0
+
+## Players' votes default to 'No vote' (otherwise, default to 'No change').
+#VOTE_NO_DEFAULT 0
+
+## Time period (deciseconds) which voting session will last (default 1 minute).
+#VOTE_PERIOD 600
diff --git a/config/example/game_options.txt b/config/example/game_options.txt
deleted file mode 100644
index cce0a2ad04d..00000000000
--- a/config/example/game_options.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-### HEALTH ###
-
-## level of health at which a mob goes into continual shock (soft crit)
-HEALTH_THRESHOLD_SOFTCRIT 0
-
-## level of health at which a mob becomes unconscious (crit)
-HEALTH_THRESHOLD_CRIT -50
-
-## level of health at which a mob becomes dead
-HEALTH_THRESHOLD_DEAD -100
-
-## Uncomment this line to enable humans showing a visible message upon death ('X seizes up then falls limp, eyes dead and lifeless').
-# SHOW_HUMAN_DEATH_MESSAGE
-
-## Determines whether bones can be broken through excessive damage to the organ
-## 0 means bones can't break, 1 means they can
-BONES_CAN_BREAK 1
-## Determines whether limbs can be amputated through excessive damage to the organ
-## 0 means limbs can't be amputated, 1 means they can
-LIMBS_CAN_BREAK 1
-
-## multiplier which enables organs to take more damage before bones breaking or limbs being destroyed
-## 100 means normal, 50 means half
-ORGAN_HEALTH_MULTIPLIER 90
-
-## multiplier which influences how fast organs regenerate naturally
-## 100 means normal, 50 means half
-ORGAN_REGENERATION_MULTIPLIER 25
-
-### REVIVAL ###
-
-## whether pod plants work or not
-REVIVAL_POD_PLANTS 1
-
-## whether cloning tubes work or not
-REVIVAL_CLONING 1
-
-## amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite)
-REVIVAL_BRAIN_LIFE -1
-
-
-
-### MOB MOVEMENT ###
-
-## We suggest editing these variabled in-game to find a good speed for your server. To do this you must be a high level admin. Open the 'debug' tab ingame. Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name.
-
-## These values get directly added to values and totals in-game. To speed things up make the number negative, to slow things down, make the number positive.
-
-
-## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
-RUN_DELAY 2
-WALK_DELAY 4
-CREEP_DELAY 6
-
-## Set this to 0 for perfectly smooth movement gliding, or 1 or more for delayed chess move style movements.
-#GLIDE_SIZE_DELAY 0
-
-MINIMUM_SPRINT_COST 0.8
-SKILL_SPRINT_COST_RANGE 0.8
-MINIMUM_STAMINA_RECOVERY 5
-MAXIMUM_STAMINA_RECOVERY 5
-
-## The variables below affect the movement of specific mob types.
-HUMAN_DELAY 0
-ROBOT_DELAY 0
-MONKEY_DELAY 0
-ALIEN_DELAY 0
-ANIMAL_DELAY 0
-
-
-### Miscellaneous ###
-
-## Config options which, of course, don't fit into previous categories.
-
-## Remove the # in front of this config option to have loyalty implants spawn by default on your server.
-#USE_LOYALTY_IMPLANTS
-
-## Uncomment to lock the automatic client view scaling on the X or Y boundary.
-#LOCK_CLIENT_VIEW_X 15
-#LOCK_CLIENT_VIEW_Y 15
-
-## Change to set a maximum size for the client view scaling.
-MAX_CLIENT_VIEW_X 30
-MAX_CLIENT_VIEW_Y 30
-
-## Remove the # to define a different cap for aspect points in chargen.
-#MAX_CHARACTER_ASPECTS 5
-
-## Allow multiple input keys to be pressed for diagonal movement.
-#ALLOW_DIAGONAL_MOVEMENT
-
-## Threshold of where brain damage begins to affect dexterity (70 brainloss above this means zero dexterity). Default is 30.
-#DEXTERITY_MALUS_BRAINLOSS_THRESHOLD 30
-
-## Whether or not all human mobs have very basic darksight by default.
-#GRANT_DEFAULT_DARKSIGHT
-
-## The range and effectiveness of default darksight if above is uncommented.
-#DEFAULT_DARKSIGHT_EFFECTIVENESS 0.05
-#DEFAULT_DARKSIGHT_RANGE 2
-
-## Uncomment to allow stressors to impact shock, healing and blood recovery.
-#ADJUST_HEALING_FROM_STRESS
-## A multiplier for the impact stress has on shock recovery - 0.3 means maximum stress imposes a 30% penalty on shock recovery.
-#STRESS_SHOCK_RECOVERY_CONSTANT 0.5
-## A multiplier for the impact stress has on wound passive healing, as above.
-#STRESS_HEALING_RECOVERY_CONSTANT 0.3
-## A multiplier for the impact stress has on blood regeneration, as above.
-#STRESS_BLOOD_RECOVERY_CONSTANT 0.3
diff --git a/html/changelog.html b/html/changelog.html
index 6c90c3e8251..79e860ded45 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -52,32 +52,98 @@
-->
-
11 September 2023
-
LenSkozzy updated:
+
24 January 2024
+
MistakeNot4892 updated:
+
+ - All living mobs can now hallucinate.
+
+
+
23 January 2024
+
MistakeNot4892 updated:
- - Fixed ID object initialization
+ - All living mobs can now dream.
+
+
16 January 2024
+
MistakeNot4892 updated:
+
+ - Configuration has been rewritten to a new format. Servers with configuration changes from defaults will need to run the server to generate the new config file, then mirror their configuration changes in the new config system. Check the PR body for details.
+
+
+
15 January 2024
+
MistakeNot4892 updated:
+
+ - You can now use arrow buttons to adjust markings and hair in character setup.
+
+
+
14 January 2024
+
MistakeNot4892 updated:
+
+ - Manuals have been rewritten to pull information from the codex instead of the wiki.
+
+
+
12 January 2024
NataKilar updated:
- - Fixed water tanks being unable to be refilled
+ - Eases contamination protection requirements slightly
+
+
+
09 January 2024
+
MistakeNot4892 updated:
+
+ - Simple mobs will now show a windup before hitting you in melee, allowing you to dodge.
+
+
+
08 January 2024
+
Greenjoe12345 updated:
+
+ - Pew sprites from Aurorastation
-
04 September 2023
-
LenSkozzy updated:
+
28 December 2023
+
MistakeNot4892 updated:
- - fixed folding@home
+ - Some mech equipment origin tech has changed. Please report any missing or odd values.
-
02 September 2023
-
AliceDTRH updated:
+
27 December 2023
+
MistakeNot4892 updated:
+
+ - Heating atoms like beakers with fire or a welding torch should be more consistent now.
+
+
+
19 December 2023
+
CheeseDogg0 updated:
+
+ - Changed some of the more ridiculous numbers to bring them more in line with real life
+
+
+
18 December 2023
+
MistakeNot4892 updated:
+
+ - Updated ministation from ScavStation. Lots of changes, see PR.
+ - Jump is now handled by selecting jump from the prepare button on the bottom right of the UI, then clicking the target.
+
+
+
14 December 2023
+
MistakeNot4892 updated:
+
+ - Neo-avian icons have been reindexed so may look slightly different.
+ - Drills now function as shovels.
+ - Clay can now be dug up from stationary drills.
+ - Duct tape can be used to repair prosthetic faults.
+
+
+
09 December 2023
+
MistakeNot4892 updated:
- - Fixed the job whitelist not reading keys properly
+ - Examining batons and energy guns should now show you the cell they have loaded, or require loading.
-
28 July 2023
+
07 December 2023
MistakeNot4892 updated:
- - Paramount Coercion is now 'Beguile', and does not have a channel or a risk of backblast. It also prompts the target to join willingly, knocking them unconscious and dealing brain damage so you can escape if they refuse.
+ - Suit sensors are now an accessory on your uniform that can be removed.
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 3843bdd5100..4e226106114 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -14528,3 +14528,87 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- bugfix: Fixed ID object initialization
NataKilar:
- bugfix: Fixed water tanks being unable to be refilled
+2023-10-01:
+ John:
+ - tweak: Lifepods avoid location they are escaping from.
+2023-10-05:
+ MistakeNot4892:
+ - tweak: Surgery now has more/different sounds.
+2023-10-15:
+ MistakeNot4892:
+ - tweak: You will now be able to tell if you can equip an item by mousing over the
+ equipment slot with the item in your active hand.
+2023-10-18:
+ MistakeNot4892:
+ - tweak: Falling a longer distance will now cause more damage.
+2023-10-20:
+ MistakeNot4892:
+ - tweak: Acid resistance has been tweaked; report things melting or not melting
+ unexpectedly on the bug tracker.
+ - tweak: Flashlights, flares and lamps have new overlays and some new states.
+2023-10-24:
+ MistakeNot4892:
+ - tweak: Exterior turfs and lighting blend across z-level transitions now.
+2023-11-09:
+ MistakeNot4892:
+ - tweak: Taj can now cycle voidsuits and have custom icons for them.
+2023-12-07:
+ MistakeNot4892:
+ - tweak: Suit sensors are now an accessory on your uniform that can be removed.
+2023-12-09:
+ MistakeNot4892:
+ - tweak: Examining batons and energy guns should now show you the cell they have
+ loaded, or require loading.
+2023-12-14:
+ MistakeNot4892:
+ - tweak: Neo-avian icons have been reindexed so may look slightly different.
+ - tweak: Drills now function as shovels.
+ - tweak: Clay can now be dug up from stationary drills.
+ - tweak: Duct tape can be used to repair prosthetic faults.
+2023-12-18:
+ MistakeNot4892:
+ - tweak: Updated ministation from ScavStation. Lots of changes, see PR.
+ - tweak: Jump is now handled by selecting jump from the prepare button on the bottom
+ right of the UI, then clicking the target.
+2023-12-19:
+ CheeseDogg0:
+ - tweak: Changed some of the more ridiculous numbers to bring them more in line
+ with real life
+2023-12-27:
+ MistakeNot4892:
+ - tweak: Heating atoms like beakers with fire or a welding torch should be more
+ consistent now.
+2023-12-28:
+ MistakeNot4892:
+ - tweak: Some mech equipment origin tech has changed. Please report any missing
+ or odd values.
+2024-01-08:
+ Greenjoe12345:
+ - imageadd: Pew sprites from Aurorastation
+2024-01-09:
+ MistakeNot4892:
+ - tweak: Simple mobs will now show a windup before hitting you in melee, allowing
+ you to dodge.
+2024-01-12:
+ NataKilar:
+ - tweak: Eases contamination protection requirements slightly
+2024-01-14:
+ MistakeNot4892:
+ - tweak: Manuals have been rewritten to pull information from the codex instead
+ of the wiki.
+2024-01-15:
+ MistakeNot4892:
+ - tweak: You can now use arrow buttons to adjust markings and hair in character
+ setup.
+2024-01-16:
+ MistakeNot4892:
+ - tweak: Configuration has been rewritten to a new format. Servers with configuration
+ changes from defaults will need to run the server to generate the new config
+ file, then mirror their configuration changes in the new config system. Check
+ the PR body for details.
+2024-01-23:
+ MistakeNot4892:
+ - tweak: All living mobs can now dream.
+2024-01-24:
+ MistakeNot4892:
+ - tweak: All living mobs can now hallucinate.
diff --git a/icons/clothing/accessories/vitals_sensor.dmi b/icons/clothing/accessories/vitals_sensor.dmi
new file mode 100644
index 00000000000..173a293306a
Binary files /dev/null and b/icons/clothing/accessories/vitals_sensor.dmi differ
diff --git a/icons/clothing/head/hardhat/medic.dmi b/icons/clothing/head/hardhat/medic.dmi
index 92c875a6d31..d6a350b74c0 100644
Binary files a/icons/clothing/head/hardhat/medic.dmi and b/icons/clothing/head/hardhat/medic.dmi differ
diff --git a/icons/clothing/head/pumpkin.dmi b/icons/clothing/head/pumpkin.dmi
index c38d51b6d7f..de6ac8af04e 100644
Binary files a/icons/clothing/head/pumpkin.dmi and b/icons/clothing/head/pumpkin.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet.dmi b/icons/clothing/rigs/helmets/helmet.dmi
index e1c45ca7a4c..14285e33acf 100644
Binary files a/icons/clothing/rigs/helmets/helmet.dmi and b/icons/clothing/rigs/helmets/helmet.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_engineering.dmi b/icons/clothing/rigs/helmets/helmet_engineering.dmi
index 1e8b629140d..7e29a7f6a6d 100644
Binary files a/icons/clothing/rigs/helmets/helmet_engineering.dmi and b/icons/clothing/rigs/helmets/helmet_engineering.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_eva.dmi b/icons/clothing/rigs/helmets/helmet_eva.dmi
index 1f857d75eba..f121efa0475 100644
Binary files a/icons/clothing/rigs/helmets/helmet_eva.dmi and b/icons/clothing/rigs/helmets/helmet_eva.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_hacker.dmi b/icons/clothing/rigs/helmets/helmet_hacker.dmi
index 2c9bd94cc48..7a281642597 100644
Binary files a/icons/clothing/rigs/helmets/helmet_hacker.dmi and b/icons/clothing/rigs/helmets/helmet_hacker.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_hazard.dmi b/icons/clothing/rigs/helmets/helmet_hazard.dmi
index 9cad81f4e81..1d43df8e1ed 100644
Binary files a/icons/clothing/rigs/helmets/helmet_hazard.dmi and b/icons/clothing/rigs/helmets/helmet_hazard.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_light.dmi b/icons/clothing/rigs/helmets/helmet_light.dmi
index f5a47e560fb..bf6d09979b8 100644
Binary files a/icons/clothing/rigs/helmets/helmet_light.dmi and b/icons/clothing/rigs/helmets/helmet_light.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_medical.dmi b/icons/clothing/rigs/helmets/helmet_medical.dmi
index e67ac770e0f..be2e63201bd 100644
Binary files a/icons/clothing/rigs/helmets/helmet_medical.dmi and b/icons/clothing/rigs/helmets/helmet_medical.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_merc.dmi b/icons/clothing/rigs/helmets/helmet_merc.dmi
index 9983084a717..ca3c374bfbe 100644
Binary files a/icons/clothing/rigs/helmets/helmet_merc.dmi and b/icons/clothing/rigs/helmets/helmet_merc.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi b/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi
index 4709c046408..ce785a1ffeb 100644
Binary files a/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi and b/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_military.dmi b/icons/clothing/rigs/helmets/helmet_military.dmi
index 0d5a6fde18c..47087a31ca3 100644
Binary files a/icons/clothing/rigs/helmets/helmet_military.dmi and b/icons/clothing/rigs/helmets/helmet_military.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_ninja.dmi b/icons/clothing/rigs/helmets/helmet_ninja.dmi
index 2a8bd061c63..7ca2eb42227 100644
Binary files a/icons/clothing/rigs/helmets/helmet_ninja.dmi and b/icons/clothing/rigs/helmets/helmet_ninja.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_null.dmi b/icons/clothing/rigs/helmets/helmet_null.dmi
index 8911b076d16..ceb0366983c 100644
Binary files a/icons/clothing/rigs/helmets/helmet_null.dmi and b/icons/clothing/rigs/helmets/helmet_null.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_science.dmi b/icons/clothing/rigs/helmets/helmet_science.dmi
index b3d88ce7053..269036f0438 100644
Binary files a/icons/clothing/rigs/helmets/helmet_science.dmi and b/icons/clothing/rigs/helmets/helmet_science.dmi differ
diff --git a/icons/clothing/rigs/helmets/helmet_security.dmi b/icons/clothing/rigs/helmets/helmet_security.dmi
index cf8b399e9d3..d121e4748fa 100644
Binary files a/icons/clothing/rigs/helmets/helmet_security.dmi and b/icons/clothing/rigs/helmets/helmet_security.dmi differ
diff --git a/icons/effects/landmarks.dmi b/icons/effects/landmarks.dmi
index ee024440fb3..c69935c2a6d 100644
Binary files a/icons/effects/landmarks.dmi and b/icons/effects/landmarks.dmi differ
diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi
index 99588092d08..c732f54cafd 100644
Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ
diff --git a/icons/mecha/mecha_preview.dmi b/icons/mecha/mecha_preview.dmi
new file mode 100644
index 00000000000..98f4a9985de
Binary files /dev/null and b/icons/mecha/mecha_preview.dmi differ
diff --git a/icons/misc/beach.dmi b/icons/misc/beach.dmi
index 09bee586d7b..847054aa8ce 100644
Binary files a/icons/misc/beach.dmi and b/icons/misc/beach.dmi differ
diff --git a/icons/mob/human_races/species/human/facial.dmi b/icons/mob/human_races/species/human/facial.dmi
index 25fde2d870d..d3e78a757bf 100644
Binary files a/icons/mob/human_races/species/human/facial.dmi and b/icons/mob/human_races/species/human/facial.dmi differ
diff --git a/icons/mob/human_races/species/human/hair.dmi b/icons/mob/human_races/species/human/hair.dmi
index 459e4531714..b7b020740f3 100644
Binary files a/icons/mob/human_races/species/human/hair.dmi and b/icons/mob/human_races/species/human/hair.dmi differ
diff --git a/icons/mob/human_races/species/monkey/monkey_tail.dmi b/icons/mob/human_races/species/monkey/monkey_tail.dmi
new file mode 100644
index 00000000000..e958e219866
Binary files /dev/null and b/icons/mob/human_races/species/monkey/monkey_tail.dmi differ
diff --git a/icons/mob/light_overlays.dmi b/icons/mob/light_overlays.dmi
deleted file mode 100644
index 904cefc9679..00000000000
Binary files a/icons/mob/light_overlays.dmi and /dev/null differ
diff --git a/icons/mob/onmob/items/lefthand.dmi b/icons/mob/onmob/items/lefthand.dmi
index 5c2bb5e820b..e7d4591ed17 100644
Binary files a/icons/mob/onmob/items/lefthand.dmi and b/icons/mob/onmob/items/lefthand.dmi differ
diff --git a/icons/mob/onmob/items/righthand.dmi b/icons/mob/onmob/items/righthand.dmi
index 7981f010723..15b3a9482c0 100644
Binary files a/icons/mob/onmob/items/righthand.dmi and b/icons/mob/onmob/items/righthand.dmi differ
diff --git a/icons/mob/screen/midnight.dmi b/icons/mob/screen/midnight.dmi
index 01dbd6c6479..e1dab709439 100644
Binary files a/icons/mob/screen/midnight.dmi and b/icons/mob/screen/midnight.dmi differ
diff --git a/icons/mob/screen/minimalist.dmi b/icons/mob/screen/minimalist.dmi
index e87aebf1312..27659edeaa8 100644
Binary files a/icons/mob/screen/minimalist.dmi and b/icons/mob/screen/minimalist.dmi differ
diff --git a/icons/mob/screen/old-noborder.dmi b/icons/mob/screen/old-noborder.dmi
index 18e49fc9c88..7b480232459 100644
Binary files a/icons/mob/screen/old-noborder.dmi and b/icons/mob/screen/old-noborder.dmi differ
diff --git a/icons/mob/screen/old.dmi b/icons/mob/screen/old.dmi
index cc52abc3909..c2dec58411a 100644
Binary files a/icons/mob/screen/old.dmi and b/icons/mob/screen/old.dmi differ
diff --git a/icons/mob/screen/orange.dmi b/icons/mob/screen/orange.dmi
index cb94ada06c8..e04a5729f4d 100644
Binary files a/icons/mob/screen/orange.dmi and b/icons/mob/screen/orange.dmi differ
diff --git a/icons/mob/screen/white.dmi b/icons/mob/screen/white.dmi
index 10d35d02cff..709ff0cab01 100644
Binary files a/icons/mob/screen/white.dmi and b/icons/mob/screen/white.dmi differ
diff --git a/icons/mob/simple_animal/crow.dmi b/icons/mob/simple_animal/crow.dmi
index 965a19a2f3d..3841efb01ba 100644
Binary files a/icons/mob/simple_animal/crow.dmi and b/icons/mob/simple_animal/crow.dmi differ
diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi
index 93f5bb50f6f..26ee3a4c8d6 100644
Binary files a/icons/obj/assemblies.dmi and b/icons/obj/assemblies.dmi differ
diff --git a/icons/obj/assemblies/circuit_analyzer.dmi b/icons/obj/assemblies/circuit_analyzer.dmi
new file mode 100644
index 00000000000..67d7e19c830
Binary files /dev/null and b/icons/obj/assemblies/circuit_analyzer.dmi differ
diff --git a/icons/obj/assemblies/electronic_tools.dmi b/icons/obj/assemblies/electronic_tools.dmi
index 0998abef918..971683f0743 100644
Binary files a/icons/obj/assemblies/electronic_tools.dmi and b/icons/obj/assemblies/electronic_tools.dmi differ
diff --git a/icons/obj/autoinjector.dmi b/icons/obj/autoinjector.dmi
new file mode 100644
index 00000000000..95efaa7d773
Binary files /dev/null and b/icons/obj/autoinjector.dmi differ
diff --git a/icons/obj/basketball.dmi b/icons/obj/basketball.dmi
index e938d8d7201..35e72d142ab 100644
Binary files a/icons/obj/basketball.dmi and b/icons/obj/basketball.dmi differ
diff --git a/icons/obj/beachball.dmi b/icons/obj/beachball.dmi
new file mode 100644
index 00000000000..f011f7cbfac
Binary files /dev/null and b/icons/obj/beachball.dmi differ
diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi
index 981749b6e7a..66424d09ad8 100644
Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ
diff --git a/icons/obj/doors/Doorglass.dmi b/icons/obj/doors/Doorglass.dmi
index f4afd02c99d..5582b2739b6 100644
Binary files a/icons/obj/doors/Doorglass.dmi and b/icons/obj/doors/Doorglass.dmi differ
diff --git a/icons/obj/doors/blast_doors/door.dmi b/icons/obj/doors/blast_doors/door.dmi
index 2d5f56b079e..f339de89e21 100644
Binary files a/icons/obj/doors/blast_doors/door.dmi and b/icons/obj/doors/blast_doors/door.dmi differ
diff --git a/icons/obj/doors/centcomm/door.dmi b/icons/obj/doors/centcomm/door.dmi
index 49f386ff380..58c8af1f6e2 100644
Binary files a/icons/obj/doors/centcomm/door.dmi and b/icons/obj/doors/centcomm/door.dmi differ
diff --git a/icons/obj/doors/elevator/door.dmi b/icons/obj/doors/elevator/door.dmi
index 3cfbc002d33..53e6937830e 100644
Binary files a/icons/obj/doors/elevator/door.dmi and b/icons/obj/doors/elevator/door.dmi differ
diff --git a/icons/obj/doors/shutters/door.dmi b/icons/obj/doors/shutters/door.dmi
index a87a4c14d22..84639f15fcc 100644
Binary files a/icons/obj/doors/shutters/door.dmi and b/icons/obj/doors/shutters/door.dmi differ
diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi
index 5b98322c935..fa465cbfe4c 100644
Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ
diff --git a/icons/obj/guns/bolt_action.dmi b/icons/obj/guns/bolt_action.dmi
index 75979dec624..54b224bd7ca 100644
Binary files a/icons/obj/guns/bolt_action.dmi and b/icons/obj/guns/bolt_action.dmi differ
diff --git a/icons/obj/guns/capacitor_rifle.dmi b/icons/obj/guns/capacitor_rifle.dmi
index 02e0ccc712b..442f54df852 100644
Binary files a/icons/obj/guns/capacitor_rifle.dmi and b/icons/obj/guns/capacitor_rifle.dmi differ
diff --git a/icons/obj/guns/pistol.dmi b/icons/obj/guns/pistol.dmi
index cc84d7e40ef..e6e1deb6149 100644
Binary files a/icons/obj/guns/pistol.dmi and b/icons/obj/guns/pistol.dmi differ
diff --git a/icons/obj/hypospray.dmi b/icons/obj/hypospray.dmi
new file mode 100644
index 00000000000..7f737ccff7c
Binary files /dev/null and b/icons/obj/hypospray.dmi differ
diff --git a/icons/obj/hypospray_borg.dmi b/icons/obj/hypospray_borg.dmi
new file mode 100644
index 00000000000..1774157a002
Binary files /dev/null and b/icons/obj/hypospray_borg.dmi differ
diff --git a/icons/obj/id/id.dmi b/icons/obj/id/id.dmi
index 91eece20501..235cf5f1c60 100644
Binary files a/icons/obj/id/id.dmi and b/icons/obj/id/id.dmi differ
diff --git a/icons/obj/inhaler.dmi b/icons/obj/inhaler.dmi
new file mode 100644
index 00000000000..33ef5595759
Binary files /dev/null and b/icons/obj/inhaler.dmi differ
diff --git a/icons/obj/items/air_horn.dmi b/icons/obj/items/air_horn.dmi
new file mode 100644
index 00000000000..1b00e02134a
Binary files /dev/null and b/icons/obj/items/air_horn.dmi differ
diff --git a/icons/obj/items/brain_interface_organic.dmi b/icons/obj/items/brain_interface_organic.dmi
new file mode 100644
index 00000000000..940f246aecd
Binary files /dev/null and b/icons/obj/items/brain_interface_organic.dmi differ
diff --git a/icons/obj/items/brain_interface_robotic.dmi b/icons/obj/items/brain_interface_robotic.dmi
new file mode 100644
index 00000000000..065f7a2cf2f
Binary files /dev/null and b/icons/obj/items/brain_interface_robotic.dmi differ
diff --git a/icons/obj/items/credstick.dmi b/icons/obj/items/credstick.dmi
index cb16bdbbff2..82edc07683e 100644
Binary files a/icons/obj/items/credstick.dmi and b/icons/obj/items/credstick.dmi differ
diff --git a/icons/obj/items/device/boombox.dmi b/icons/obj/items/device/boombox.dmi
index e49b198a7b0..41efdeca09a 100644
Binary files a/icons/obj/items/device/boombox.dmi and b/icons/obj/items/device/boombox.dmi differ
diff --git a/icons/obj/items/device/depth_scanner.dmi b/icons/obj/items/device/depth_scanner.dmi
index 92d1cd080f7..b859bb8d164 100644
Binary files a/icons/obj/items/device/depth_scanner.dmi and b/icons/obj/items/device/depth_scanner.dmi differ
diff --git a/icons/obj/items/device/parts_replacer.dmi b/icons/obj/items/device/parts_replacer.dmi
index c3cb8d13a65..43672a4ca23 100644
Binary files a/icons/obj/items/device/parts_replacer.dmi and b/icons/obj/items/device/parts_replacer.dmi differ
diff --git a/icons/obj/items/device/parts_replacer_advanced.dmi b/icons/obj/items/device/parts_replacer_advanced.dmi
new file mode 100644
index 00000000000..a09ec9706fe
Binary files /dev/null and b/icons/obj/items/device/parts_replacer_advanced.dmi differ
diff --git a/icons/obj/items/device/radio/key.dmi b/icons/obj/items/device/radio/key.dmi
index 458a6376067..565d78b8e0f 100644
Binary files a/icons/obj/items/device/radio/key.dmi and b/icons/obj/items/device/radio/key.dmi differ
diff --git a/icons/obj/items/device/radio/spybug.dmi b/icons/obj/items/device/radio/spybug.dmi
new file mode 100644
index 00000000000..549907f2a59
Binary files /dev/null and b/icons/obj/items/device/radio/spybug.dmi differ
diff --git a/icons/obj/items/device/robot_analyzer.dmi b/icons/obj/items/device/robot_analyzer.dmi
index f194a04505f..b424ea8e012 100644
Binary files a/icons/obj/items/device/robot_analyzer.dmi and b/icons/obj/items/device/robot_analyzer.dmi differ
diff --git a/icons/obj/items/device/scanner/advanced_spectrometer.dmi b/icons/obj/items/device/scanner/advanced_spectrometer.dmi
new file mode 100644
index 00000000000..4028fa27810
Binary files /dev/null and b/icons/obj/items/device/scanner/advanced_spectrometer.dmi differ
diff --git a/icons/obj/items/device/scanner/atmos_scanner.dmi b/icons/obj/items/device/scanner/atmos_scanner.dmi
index cd5eb16d359..7d0e56c54bc 100644
Binary files a/icons/obj/items/device/scanner/atmos_scanner.dmi and b/icons/obj/items/device/scanner/atmos_scanner.dmi differ
diff --git a/icons/obj/items/device/scanner/breath_scanner.dmi b/icons/obj/items/device/scanner/breath_scanner.dmi
index 648bf78f29f..bb4b2df70dc 100644
Binary files a/icons/obj/items/device/scanner/breath_scanner.dmi and b/icons/obj/items/device/scanner/breath_scanner.dmi differ
diff --git a/icons/obj/items/device/scanner/health_scanner.dmi b/icons/obj/items/device/scanner/health_scanner.dmi
index a1038003dfc..3005c19577d 100644
Binary files a/icons/obj/items/device/scanner/health_scanner.dmi and b/icons/obj/items/device/scanner/health_scanner.dmi differ
diff --git a/icons/obj/items/device/scanner/network_scanner.dmi b/icons/obj/items/device/scanner/network_scanner.dmi
index 72d932c35f6..cfc537ef585 100644
Binary files a/icons/obj/items/device/scanner/network_scanner.dmi and b/icons/obj/items/device/scanner/network_scanner.dmi differ
diff --git a/icons/obj/items/device/scanner/ore_scanner.dmi b/icons/obj/items/device/scanner/ore_scanner.dmi
index 85aec06a907..04095564900 100644
Binary files a/icons/obj/items/device/scanner/ore_scanner.dmi and b/icons/obj/items/device/scanner/ore_scanner.dmi differ
diff --git a/icons/obj/items/device/scanner/plant_scanner.dmi b/icons/obj/items/device/scanner/plant_scanner.dmi
index 90f5e598521..88f1577fa36 100644
Binary files a/icons/obj/items/device/scanner/plant_scanner.dmi and b/icons/obj/items/device/scanner/plant_scanner.dmi differ
diff --git a/icons/obj/items/device/scanner/price_scanner.dmi b/icons/obj/items/device/scanner/price_scanner.dmi
index bacb7862305..cfd7c670fe5 100644
Binary files a/icons/obj/items/device/scanner/price_scanner.dmi and b/icons/obj/items/device/scanner/price_scanner.dmi differ
diff --git a/icons/obj/items/device/scanner/spectrometer.dmi b/icons/obj/items/device/scanner/spectrometer.dmi
index f453dcd4d22..4923cc18a5f 100644
Binary files a/icons/obj/items/device/scanner/spectrometer.dmi and b/icons/obj/items/device/scanner/spectrometer.dmi differ
diff --git a/icons/obj/items/device/scanner/xenobio_scanner.dmi b/icons/obj/items/device/scanner/xenobio_scanner.dmi
index 28fdf5cbf85..dab11129286 100644
Binary files a/icons/obj/items/device/scanner/xenobio_scanner.dmi and b/icons/obj/items/device/scanner/xenobio_scanner.dmi differ
diff --git a/icons/obj/items/device/tape_casette.dmi b/icons/obj/items/device/tape_casette.dmi
deleted file mode 100644
index e42c3a2bf8a..00000000000
Binary files a/icons/obj/items/device/tape_casette.dmi and /dev/null differ
diff --git a/icons/obj/items/device/tape_recorder.dmi b/icons/obj/items/device/tape_recorder.dmi
deleted file mode 100644
index 0e00542aeef..00000000000
Binary files a/icons/obj/items/device/tape_recorder.dmi and /dev/null differ
diff --git a/icons/obj/items/device/tape_recorder/tape_casette_blue.dmi b/icons/obj/items/device/tape_recorder/tape_casette_blue.dmi
new file mode 100644
index 00000000000..62a06955566
Binary files /dev/null and b/icons/obj/items/device/tape_recorder/tape_casette_blue.dmi differ
diff --git a/icons/obj/items/device/tape_recorder/tape_casette_loose.dmi b/icons/obj/items/device/tape_recorder/tape_casette_loose.dmi
new file mode 100644
index 00000000000..0c8b4b50258
Binary files /dev/null and b/icons/obj/items/device/tape_recorder/tape_casette_loose.dmi differ
diff --git a/icons/obj/items/device/tape_recorder/tape_casette_purple.dmi b/icons/obj/items/device/tape_recorder/tape_casette_purple.dmi
new file mode 100644
index 00000000000..8db366b35ed
Binary files /dev/null and b/icons/obj/items/device/tape_recorder/tape_casette_purple.dmi differ
diff --git a/icons/obj/items/device/tape_recorder/tape_casette_red.dmi b/icons/obj/items/device/tape_recorder/tape_casette_red.dmi
new file mode 100644
index 00000000000..20a14a5706f
Binary files /dev/null and b/icons/obj/items/device/tape_recorder/tape_casette_red.dmi differ
diff --git a/icons/obj/items/device/tape_recorder/tape_casette_white.dmi b/icons/obj/items/device/tape_recorder/tape_casette_white.dmi
new file mode 100644
index 00000000000..9efb2b0e1e4
Binary files /dev/null and b/icons/obj/items/device/tape_recorder/tape_casette_white.dmi differ
diff --git a/icons/obj/items/device/tape_recorder/tape_casette_yellow.dmi b/icons/obj/items/device/tape_recorder/tape_casette_yellow.dmi
new file mode 100644
index 00000000000..2c1419a26da
Binary files /dev/null and b/icons/obj/items/device/tape_recorder/tape_casette_yellow.dmi differ
diff --git a/icons/obj/items/device/tape_recorder/tape_recorder.dmi b/icons/obj/items/device/tape_recorder/tape_recorder.dmi
new file mode 100644
index 00000000000..90efe6e8b59
Binary files /dev/null and b/icons/obj/items/device/tape_recorder/tape_recorder.dmi differ
diff --git a/icons/obj/items/horn.dmi b/icons/obj/items/horn.dmi
index 06ecc94f199..f521160d4dd 100644
Binary files a/icons/obj/items/horn.dmi and b/icons/obj/items/horn.dmi differ
diff --git a/icons/obj/items/messenger_bag.dmi b/icons/obj/items/messenger_bag.dmi
deleted file mode 100644
index d558e52a5f1..00000000000
Binary files a/icons/obj/items/messenger_bag.dmi and /dev/null differ
diff --git a/icons/obj/contraband.dmi b/icons/obj/items/posters.dmi
similarity index 100%
rename from icons/obj/contraband.dmi
rename to icons/obj/items/posters.dmi
diff --git a/icons/obj/items/stock_parts/stock_parts.dmi b/icons/obj/items/stock_parts/stock_parts.dmi
index c5232faf88d..24e82a36cea 100644
Binary files a/icons/obj/items/stock_parts/stock_parts.dmi and b/icons/obj/items/stock_parts/stock_parts.dmi differ
diff --git a/icons/obj/items/storage/backpack/corvid.dmi b/icons/obj/items/storage/backpack/corvid.dmi
new file mode 100644
index 00000000000..9435ec56523
Binary files /dev/null and b/icons/obj/items/storage/backpack/corvid.dmi differ
diff --git a/icons/obj/items/storage/lunchbox.dmi b/icons/obj/items/storage/lunchbox.dmi
deleted file mode 100644
index 8d283cc8369..00000000000
Binary files a/icons/obj/items/storage/lunchbox.dmi and /dev/null differ
diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_cat.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_cat.dmi
new file mode 100644
index 00000000000..c1f76eb3d6f
Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_cat.dmi differ
diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_cti.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_cti.dmi
new file mode 100644
index 00000000000..012aa094669
Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_cti.dmi differ
diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_evil.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_evil.dmi
new file mode 100644
index 00000000000..0c8fea6284c
Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_evil.dmi differ
diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_heart.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_heart.dmi
new file mode 100644
index 00000000000..4410d4f354a
Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_heart.dmi differ
diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_mars.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_mars.dmi
new file mode 100644
index 00000000000..d5842898985
Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_mars.dmi differ
diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_rainbow.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_rainbow.dmi
new file mode 100644
index 00000000000..de5a0587e2d
Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_rainbow.dmi differ
diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_tcc.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_tcc.dmi
new file mode 100644
index 00000000000..4d008c3237d
Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_tcc.dmi differ
diff --git a/icons/obj/items/storage/toolbox.dmi b/icons/obj/items/storage/toolbox.dmi
deleted file mode 100644
index f3b61cd4763..00000000000
Binary files a/icons/obj/items/storage/toolbox.dmi and /dev/null differ
diff --git a/icons/obj/items/storage/toolboxes/toolbox_black_red.dmi b/icons/obj/items/storage/toolboxes/toolbox_black_red.dmi
new file mode 100644
index 00000000000..b04e3356d9f
Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_black_red.dmi differ
diff --git a/icons/obj/items/storage/toolboxes/toolbox_blue.dmi b/icons/obj/items/storage/toolboxes/toolbox_blue.dmi
new file mode 100644
index 00000000000..94dc99ec379
Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_blue.dmi differ
diff --git a/icons/obj/items/storage/toolboxes/toolbox_green.dmi b/icons/obj/items/storage/toolboxes/toolbox_green.dmi
new file mode 100644
index 00000000000..37c24f0e718
Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_green.dmi differ
diff --git a/icons/obj/items/storage/toolboxes/toolbox_red.dmi b/icons/obj/items/storage/toolboxes/toolbox_red.dmi
new file mode 100644
index 00000000000..f26ba27fab1
Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_red.dmi differ
diff --git a/icons/obj/items/storage/toolboxes/toolbox_yellow.dmi b/icons/obj/items/storage/toolboxes/toolbox_yellow.dmi
new file mode 100644
index 00000000000..6a68ee9fd47
Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_yellow.dmi differ
diff --git a/icons/obj/items/storage/toolboxes/toolbox_yellow_striped.dmi b/icons/obj/items/storage/toolboxes/toolbox_yellow_striped.dmi
new file mode 100644
index 00000000000..559fcabba2a
Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_yellow_striped.dmi differ
diff --git a/icons/obj/items/tanks/tank_emergency_double.dmi b/icons/obj/items/tanks/tank_emergency_double.dmi
index c8c9a03f69a..de7aeee9ac7 100644
Binary files a/icons/obj/items/tanks/tank_emergency_double.dmi and b/icons/obj/items/tanks/tank_emergency_double.dmi differ
diff --git a/icons/obj/items/tanks/tank_emergency_engineer.dmi b/icons/obj/items/tanks/tank_emergency_engineer.dmi
index 3d8309f917c..05d8ed2fba0 100644
Binary files a/icons/obj/items/tanks/tank_emergency_engineer.dmi and b/icons/obj/items/tanks/tank_emergency_engineer.dmi differ
diff --git a/icons/obj/light_overlays.dmi b/icons/obj/light_overlays.dmi
deleted file mode 100644
index 4440f265523..00000000000
Binary files a/icons/obj/light_overlays.dmi and /dev/null differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index 8a35e9974fa..bc8876bdf83 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/icons/obj/lighting/biglight.dmi b/icons/obj/lighting/biglight.dmi
new file mode 100644
index 00000000000..a648e65cc5d
Binary files /dev/null and b/icons/obj/lighting/biglight.dmi differ
diff --git a/icons/obj/lighting/flare.dmi b/icons/obj/lighting/flare.dmi
new file mode 100644
index 00000000000..4b22743fcd4
Binary files /dev/null and b/icons/obj/lighting/flare.dmi differ
diff --git a/icons/obj/lighting/flashdark.dmi b/icons/obj/lighting/flashdark.dmi
new file mode 100644
index 00000000000..e170d7557c7
Binary files /dev/null and b/icons/obj/lighting/flashdark.dmi differ
diff --git a/icons/obj/lighting/flashlight.dmi b/icons/obj/lighting/flashlight.dmi
new file mode 100644
index 00000000000..125baa0191b
Binary files /dev/null and b/icons/obj/lighting/flashlight.dmi differ
diff --git a/icons/obj/lighting/floodlamp.dmi b/icons/obj/lighting/floodlamp.dmi
new file mode 100644
index 00000000000..f83030c1a33
Binary files /dev/null and b/icons/obj/lighting/floodlamp.dmi differ
diff --git a/icons/obj/lighting/glowstick.dmi b/icons/obj/lighting/glowstick.dmi
new file mode 100644
index 00000000000..104783f5822
Binary files /dev/null and b/icons/obj/lighting/glowstick.dmi differ
diff --git a/icons/obj/lighting/greenfloodlamp.dmi b/icons/obj/lighting/greenfloodlamp.dmi
new file mode 100644
index 00000000000..2ff64bb8be1
Binary files /dev/null and b/icons/obj/lighting/greenfloodlamp.dmi differ
diff --git a/icons/obj/lighting/greenlamp.dmi b/icons/obj/lighting/greenlamp.dmi
new file mode 100644
index 00000000000..f752728b1eb
Binary files /dev/null and b/icons/obj/lighting/greenlamp.dmi differ
diff --git a/icons/obj/lighting/lamp.dmi b/icons/obj/lighting/lamp.dmi
new file mode 100644
index 00000000000..eb34046610b
Binary files /dev/null and b/icons/obj/lighting/lamp.dmi differ
diff --git a/icons/obj/lighting/lantern.dmi b/icons/obj/lighting/lantern.dmi
new file mode 100644
index 00000000000..6a41f129f1a
Binary files /dev/null and b/icons/obj/lighting/lantern.dmi differ
diff --git a/icons/obj/lighting/lavalamp.dmi b/icons/obj/lighting/lavalamp.dmi
new file mode 100644
index 00000000000..062aabeba29
Binary files /dev/null and b/icons/obj/lighting/lavalamp.dmi differ
diff --git a/icons/obj/lighting/maglight.dmi b/icons/obj/lighting/maglight.dmi
new file mode 100644
index 00000000000..fcdd3fdb7d6
Binary files /dev/null and b/icons/obj/lighting/maglight.dmi differ
diff --git a/icons/obj/lighting/partylight.dmi b/icons/obj/lighting/partylight.dmi
new file mode 100644
index 00000000000..8d17a66f5b8
Binary files /dev/null and b/icons/obj/lighting/partylight.dmi differ
diff --git a/icons/obj/lighting/penlight.dmi b/icons/obj/lighting/penlight.dmi
new file mode 100644
index 00000000000..a7652eb693e
Binary files /dev/null and b/icons/obj/lighting/penlight.dmi differ
diff --git a/icons/obj/lighting/slime.dmi b/icons/obj/lighting/slime.dmi
new file mode 100644
index 00000000000..202cf12ad41
Binary files /dev/null and b/icons/obj/lighting/slime.dmi differ
diff --git a/icons/obj/machines/floodlight.dmi b/icons/obj/machines/floodlight.dmi
index 3a5fb7a901d..8dca92897cd 100644
Binary files a/icons/obj/machines/floodlight.dmi and b/icons/obj/machines/floodlight.dmi differ
diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi
index 2a92c2ee889..7406a94168a 100644
Binary files a/icons/obj/machines/mining_machines.dmi and b/icons/obj/machines/mining_machines.dmi differ
diff --git a/icons/obj/materials.dmi b/icons/obj/materials.dmi
index de1dd479c04..665ee9d0a44 100644
Binary files a/icons/obj/materials.dmi and b/icons/obj/materials.dmi differ
diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi
index 91732f2782a..4a50ad97576 100644
Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ
diff --git a/icons/obj/rubber_duck.dmi b/icons/obj/rubber_duck.dmi
new file mode 100644
index 00000000000..3fdc0b9e2e1
Binary files /dev/null and b/icons/obj/rubber_duck.dmi differ
diff --git a/icons/obj/structures/basketball.dmi b/icons/obj/structures/basketball.dmi
new file mode 100644
index 00000000000..625efebe12d
Binary files /dev/null and b/icons/obj/structures/basketball.dmi differ
diff --git a/icons/obj/structures/pit.dmi b/icons/obj/structures/pit.dmi
index 76ac50d185a..dcd845908e0 100644
Binary files a/icons/obj/structures/pit.dmi and b/icons/obj/structures/pit.dmi differ
diff --git a/icons/obj/structures/volleyball.dmi b/icons/obj/structures/volleyball.dmi
new file mode 100644
index 00000000000..269f60a1926
Binary files /dev/null and b/icons/obj/structures/volleyball.dmi differ
diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi
index 41e04593521..18428a668c8 100644
Binary files a/icons/obj/syringe.dmi and b/icons/obj/syringe.dmi differ
diff --git a/icons/obj/syringe_advanced.dmi b/icons/obj/syringe_advanced.dmi
new file mode 100644
index 00000000000..e0d9a221e90
Binary files /dev/null and b/icons/obj/syringe_advanced.dmi differ
diff --git a/icons/obj/syringe_cryo.dmi b/icons/obj/syringe_cryo.dmi
new file mode 100644
index 00000000000..10d3697cca8
Binary files /dev/null and b/icons/obj/syringe_cryo.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
new file mode 100644
index 00000000000..b8b8d5b867c
Binary files /dev/null and b/icons/obj/toy.dmi differ
diff --git a/icons/obj/turbolift_preview_5x5.dmi b/icons/obj/turbolift_preview_5x5.dmi
new file mode 100644
index 00000000000..e054a6b9aac
Binary files /dev/null and b/icons/obj/turbolift_preview_5x5.dmi differ
diff --git a/icons/obj/volleyball.dmi b/icons/obj/volleyball.dmi
new file mode 100644
index 00000000000..33edf34da7e
Binary files /dev/null and b/icons/obj/volleyball.dmi differ
diff --git a/icons/obj/water_balloon.dmi b/icons/obj/water_balloon.dmi
new file mode 100644
index 00000000000..6fa5a8d1407
Binary files /dev/null and b/icons/obj/water_balloon.dmi differ
diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi
index 54547dd45c3..f7fcf2dd7e3 100644
Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ
diff --git a/icons/screen/maneuver.dmi b/icons/screen/maneuver.dmi
new file mode 100644
index 00000000000..0a4676979c2
Binary files /dev/null and b/icons/screen/maneuver.dmi differ
diff --git a/icons/turf/exterior/rock.dmi b/icons/turf/exterior/rock.dmi
new file mode 100644
index 00000000000..8a715fd501a
Binary files /dev/null and b/icons/turf/exterior/rock.dmi differ
diff --git a/icons/turf/flooring/crystal.dmi b/icons/turf/flooring/crystal.dmi
index 00c7a13cb7e..7ff20fb8744 100644
Binary files a/icons/turf/flooring/crystal.dmi and b/icons/turf/flooring/crystal.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index ab24d9266ab..a6edc47a759 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/shuttle.dmi b/icons/turf/shuttle.dmi
index 12b1b6d038b..2d201155326 100644
Binary files a/icons/turf/shuttle.dmi and b/icons/turf/shuttle.dmi differ
diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi
index 9c821ae2d4a..e615c30d407 100644
Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ
diff --git a/icons/turf/walls/_previews.dmi b/icons/turf/walls/_previews.dmi
index 9089954cdd2..0ce6dd767e2 100644
Binary files a/icons/turf/walls/_previews.dmi and b/icons/turf/walls/_previews.dmi differ
diff --git a/icons/turf/walls/cult.dmi b/icons/turf/walls/cult.dmi
index 1a790b768c1..5b2dd836c3b 100644
Binary files a/icons/turf/walls/cult.dmi and b/icons/turf/walls/cult.dmi differ
diff --git a/icons/turf/walls/debug.dmi b/icons/turf/walls/debug.dmi
index 2de94776c40..76e8845f752 100644
Binary files a/icons/turf/walls/debug.dmi and b/icons/turf/walls/debug.dmi differ
diff --git a/icons/turf/walls/metal.dmi b/icons/turf/walls/metal.dmi
index a8ab0f10d86..8199a29f39d 100644
Binary files a/icons/turf/walls/metal.dmi and b/icons/turf/walls/metal.dmi differ
diff --git a/icons/turf/walls/natural.dmi b/icons/turf/walls/natural.dmi
index 40cf525581f..d8509d2f1ba 100644
Binary files a/icons/turf/walls/natural.dmi and b/icons/turf/walls/natural.dmi differ
diff --git a/icons/turf/walls/plastic.dmi b/icons/turf/walls/plastic.dmi
index 899f2a30a72..034c494a357 100644
Binary files a/icons/turf/walls/plastic.dmi and b/icons/turf/walls/plastic.dmi differ
diff --git a/icons/turf/walls/reinforced.dmi b/icons/turf/walls/reinforced.dmi
index b889f3c8327..ec9936fe157 100644
Binary files a/icons/turf/walls/reinforced.dmi and b/icons/turf/walls/reinforced.dmi differ
diff --git a/icons/turf/walls/solid.dmi b/icons/turf/walls/solid.dmi
index d961715cf64..ea504b65330 100644
Binary files a/icons/turf/walls/solid.dmi and b/icons/turf/walls/solid.dmi differ
diff --git a/icons/turf/walls/stone.dmi b/icons/turf/walls/stone.dmi
index 313bca3b564..285201a5e8b 100644
Binary files a/icons/turf/walls/stone.dmi and b/icons/turf/walls/stone.dmi differ
diff --git a/icons/turf/walls/wood.dmi b/icons/turf/walls/wood.dmi
index c1ee1f9eec1..9b2304dcec8 100644
Binary files a/icons/turf/walls/wood.dmi and b/icons/turf/walls/wood.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index d3bc6dcb54d..9f1e923dc44 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -3,10 +3,10 @@
set name = "Wiki"
set desc = "Visit the wiki."
set hidden = 1
- if(config.wikiurl)
+ if(get_config_value(/decl/config/text/wikiurl))
if(alert("This will open the wiki in your browser. Are you sure?",,"Yes","No")=="No")
return
- send_link(src, config.wikiurl)
+ send_link(src, get_config_value(/decl/config/text/wikiurl))
else
to_chat(src, SPAN_WARNING("The wiki URL is not set in the server configuration."))
return
@@ -15,10 +15,10 @@
set name = "GitHub"
set desc = "Visit the GitHub repository."
set hidden = 1
- if(config.githuburl)
+ if(get_config_value(/decl/config/text/githuburl))
if(alert("This will open GitHub in your browser. Are you sure?",,"Yes","No")=="No")
return
- send_link(src, config.githuburl)
+ send_link(src, get_config_value(/decl/config/text/githuburl))
else
to_chat(src, SPAN_WARNING("The github URL is not set in the server configuration."))
return
@@ -27,10 +27,10 @@
set name = "Bug Report"
set desc = "Visit the GitHub repository to report an issue or bug."
set hidden = 1
- if(config.issuereporturl)
+ if(get_config_value(/decl/config/text/issuereporturl))
if(alert("This will open GitHub in your browser. Are you sure?",,"Yes","No")=="No")
return
- send_link(src, config.issuereporturl)
+ send_link(src, get_config_value(/decl/config/text/issuereporturl))
else
to_chat(src, SPAN_WARNING("The issue report URL is not set in the server configuration."))
return
@@ -39,10 +39,10 @@
set name = "Forum"
set desc = "Visit the forum."
set hidden = 1
- if(config.forumurl)
+ if(get_config_value(/decl/config/text/forumurl))
if(alert("This will open the forum in your browser. Are you sure?",,"Yes","No")=="No")
return
- send_link(src, config.forumurl)
+ send_link(src, get_config_value(/decl/config/text/forumurl))
else
to_chat(src, SPAN_WARNING("The forum URL is not set in the server configuration."))
return
@@ -51,10 +51,10 @@
set name = "Discord"
set desc = "Visit the Discord server."
set hidden = 1
- if(config.discordurl)
+ if(get_config_value(/decl/config/text/discordurl))
if(alert("This will open the Discord invition link in your browser. Are you sure?",,"Yes","No")=="No")
return
- send_link(src, config.discordurl)
+ send_link(src, get_config_value(/decl/config/text/discordurl))
else
to_chat(src, SPAN_WARNING("The Discord server URL is not set in the server configuration."))
return
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 1201b778688..3778ffcd7c1 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -148,6 +148,7 @@ window "mainwindow"
anchor1 = 0,0
anchor2 = 100,100
saved-params = "splitter"
+ left = "mapwindow"
right = "rpane"
is-vert = true
elem "asset_cache_browser"
@@ -192,8 +193,6 @@ window "mapwindow"
font-size = 7
is-default = true
saved-params = "icon-size;zoom-mode"
- on-show = ".winset\"mainwindow.split.left=mapwindow\""
- on-hide = ".winset\"mainwindow.split.left=\""
elem "lobbybrowser"
type = BROWSER
pos = 0,0
@@ -276,11 +275,12 @@ window "rpane"
is-pane = true
elem "rpanewindow"
type = CHILD
- pos = 0,0
- size = 640x474
+ pos = 0,30
+ size = 0x0
anchor1 = 0,0
anchor2 = 100,100
saved-params = "splitter"
+ left = "infowindow"
right = "outputwindow"
is-vert = false
elem "github"
@@ -357,7 +357,6 @@ window "rpane"
size = 60x15
anchor1 = none
anchor2 = none
- is-visible = false
saved-params = "is-checked"
text = "Text"
command = ".winset \"rpanewindow.left=;\""
@@ -370,7 +369,6 @@ window "rpane"
size = 60x15
anchor1 = none
anchor2 = none
- is-visible = false
saved-params = "is-checked"
text = "Info"
command = ".winset \"rpanewindow.left=infowindow\""
@@ -432,6 +430,6 @@ window "infowindow"
is-default = true
saved-params = ""
highlight-color = #00aa00
- on-show = ".winset\"rpane.infob.is-visible=true;rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\""
- on-hide = ".winset\"rpane.infob.is-visible=false;rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\""
+ on-show = ".winset\"rpane.infob.is-checked=true\""
+ on-hide = ".winset\"rpane.infob.is-checked=false\""
diff --git a/maps/antag_spawn/ert/ert_base.dmm b/maps/antag_spawn/ert/ert_base.dmm
index fa63eb870b3..0fc7ced3293 100644
--- a/maps/antag_spawn/ert/ert_base.dmm
+++ b/maps/antag_spawn/ert/ert_base.dmm
@@ -1272,14 +1272,14 @@
/area/map_template/rescue_base/base)
"cG" = (
/obj/structure/table/reinforced,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/obj/item/bodybag/cryobag,
/obj/item/bodybag/cryobag,
/obj/item/bodybag/cryobag,
@@ -2449,24 +2449,18 @@
/turf/simulated/wall/titanium,
/area/map_template/rescue_base/start)
"eV" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "rescuebridge";
name = "Cockpit Blast Shutters";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
/turf/simulated/floor/plating,
/area/map_template/rescue_base/start)
"eW" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "rescuedock";
name = "Blast Shutters";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
@@ -2483,7 +2477,6 @@
"eY" = (
/obj/structure/table/steel_reinforced,
/obj/machinery/button/blast_door{
- icon_state = "doorctrl0";
id_tag = "rescuebridge";
name = "Window Shutters Control";
pixel_y = -4
@@ -2580,7 +2573,6 @@
/area/map_template/rescue_base/start)
"fl" = (
/obj/machinery/button/blast_door{
- icon_state = "doorctrl0";
id_tag = "rescuedock";
name = "Window Shutters Control";
pixel_x = 24;
@@ -2697,13 +2689,10 @@
},
/area/map_template/rescue_base/base)
"fC" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "rescuebridge";
name = "Cockpit Blast Shutters";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
@@ -2759,13 +2748,10 @@
/turf/simulated/floor/tiled/dark,
/area/map_template/rescue_base/start)
"fJ" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "rescueeva";
name = "Blast Shutters";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/blue,
@@ -2878,7 +2864,6 @@
/obj/item/tank/jetpack/carbondioxide,
/obj/item/tank/jetpack/carbondioxide,
/obj/machinery/button/blast_door{
- icon_state = "doorctrl0";
id_tag = "rescueeva";
name = "Window Shutters Control";
pixel_x = 24;
@@ -3040,8 +3025,8 @@
/obj/item/chems/syringe,
/obj/item/chems/syringe/antibiotic,
/obj/item/chems/syringe/antibiotic,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/turf/simulated/floor/tiled/white,
/area/map_template/rescue_base/start)
"gD" = (
@@ -3150,7 +3135,6 @@
},
/obj/structure/iv_drip,
/obj/machinery/button/blast_door{
- icon_state = "doorctrl0";
id_tag = "rescueinfirm";
name = "Window Shutters Control";
pixel_x = 24;
@@ -3166,13 +3150,10 @@
/area/map_template/rescue_base/base)
"gU" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "rescuebridge";
name = "Blast Shutters";
- opacity = FALSE
},
/obj/effect/paint/blue,
/turf/simulated/floor/plating,
@@ -3219,13 +3200,10 @@
/area/map_template/rescue_base/start)
"hb" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "rescueinfirm";
name = "Blast Shutters";
- opacity = FALSE
},
/obj/effect/paint/blue,
/turf/simulated/floor/plating,
diff --git a/maps/antag_spawn/heist/heist_antag.dm b/maps/antag_spawn/heist/heist_antag.dm
index cceadf3044b..13d4d0f48ef 100644
--- a/maps/antag_spawn/heist/heist_antag.dm
+++ b/maps/antag_spawn/heist/heist_antag.dm
@@ -64,6 +64,6 @@
return 0
return 1
-/decl/special_role/raider/equip(var/mob/living/carbon/human/player)
+/decl/special_role/raider/equip_role(var/mob/living/carbon/human/player)
default_outfit = LAZYACCESS(outfits_per_species, player.species.name) || initial(default_outfit)
. = ..()
diff --git a/maps/antag_spawn/heist/heist_base.dmm b/maps/antag_spawn/heist/heist_base.dmm
index a23708880ab..520ef47eb46 100644
--- a/maps/antag_spawn/heist/heist_base.dmm
+++ b/maps/antag_spawn/heist/heist_base.dmm
@@ -1002,7 +1002,6 @@
/area/map_template/skipjack_station/start)
"cx" = (
/obj/machinery/door/airlock/external{
- icon_state = "door_closed";
id_tag = "raider_northwest_lock"
},
/obj/machinery/shield_diffuser,
@@ -1017,12 +1016,9 @@
/turf/simulated/wall/raidershuttle,
/area/map_template/skipjack_station/start)
"cz" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "SkipjackShuttersNorth";
name = "Blast Doors";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/brown,
@@ -1179,7 +1175,6 @@
/area/map_template/skipjack_station/start)
"cS" = (
/obj/machinery/door/airlock/external{
- icon_state = "door_closed";
id_tag = "raider_southwest_lock"
},
/obj/machinery/atmospherics/pipe/simple/visible,
@@ -1383,13 +1378,10 @@
/turf/simulated/floor/plating,
/area/map_template/skipjack_station/start)
"dt" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "SkipjackShuttersWest";
name = "Skipjack Shutters";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/brown,
@@ -1412,13 +1404,10 @@
/turf/simulated/floor/plating,
/area/map_template/skipjack_station/start)
"dy" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 8;
- icon_state = "shutter0";
id_tag = "SkipjackShuttersEast";
name = "Skipjack Shutters";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/brown,
@@ -1486,13 +1475,10 @@
/turf/simulated/floor/plating,
/area/map_template/skipjack_station/start)
"dI" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "SkipjackShuttersWest";
name = "Skipjack Shutters";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced/titanium,
/turf/simulated/floor/plating,
diff --git a/maps/antag_spawn/heist/heist_outfit.dm b/maps/antag_spawn/heist/heist_outfit.dm
index 5f78a675d5d..feadc94aa71 100644
--- a/maps/antag_spawn/heist/heist_outfit.dm
+++ b/maps/antag_spawn/heist/heist_outfit.dm
@@ -69,7 +69,7 @@
randomize_clothing()
. = ..()
-/decl/hierarchy/outfit/raider/equip(mob/living/carbon/human/H, rank, assignment, equip_adjustments)
+/decl/hierarchy/outfit/raider/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
randomize_clothing()
. = ..()
if(. && H)
diff --git a/maps/antag_spawn/mercenary/mercenary_base.dmm b/maps/antag_spawn/mercenary/mercenary_base.dmm
index b16f6bf63f4..d04ede53ceb 100644
--- a/maps/antag_spawn/mercenary/mercenary_base.dmm
+++ b/maps/antag_spawn/mercenary/mercenary_base.dmm
@@ -44,8 +44,6 @@
},
/obj/effect/paint/red,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/turf/simulated/floor/plating,
@@ -60,8 +58,6 @@
},
/obj/effect/paint/red,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/turf/simulated/floor/plating,
@@ -83,9 +79,7 @@
icon_state = "0-2"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -136,9 +130,7 @@
icon_state = "1-4"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -194,9 +186,7 @@
icon_state = "0-8"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -211,9 +201,7 @@
icon_state = "0-2"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/black,
@@ -228,9 +216,7 @@
"av" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_bsa_shutters"
},
/obj/effect/paint/black,
@@ -267,9 +253,7 @@
icon_state = "0-4"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/black,
@@ -337,8 +321,6 @@
dir = 8
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
- icon_state = "pdoor0";
id_tag = "merc_bsa"
},
/turf/simulated/floor/reinforced,
@@ -460,9 +442,7 @@
icon_state = "0-8"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -486,13 +466,13 @@
/obj/item/clothing/gloves/latex,
/obj/item/clothing/mask/surgical,
/obj/item/bodybag/cryobag,
-/obj/item/chems/ivbag/nanoblood,
+/obj/item/chems/ivbag/blood/nanoblood,
/obj/item/storage/firstaid/adv,
/turf/simulated/floor/tiled/white,
/area/map_template/merc_shuttle)
"aT" = (
/obj/structure/iv_drip,
-/obj/item/chems/ivbag/nanoblood,
+/obj/item/chems/ivbag/blood/nanoblood,
/obj/structure/window/reinforced/crescent{
dir = 4
},
@@ -549,9 +529,7 @@
"aY" = (
/obj/effect/wallframe_spawn/reinforced_borosilicate,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 8;
- icon_state = "pdoor0";
id_tag = "merc_fuel"
},
/obj/effect/paint/black,
@@ -612,9 +590,7 @@
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/effect/paint/red,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_airlock"
},
/obj/machinery/atmospherics/pipe/simple/hidden{
@@ -637,9 +613,7 @@
"bi" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -835,9 +809,7 @@
"bz" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_airlock"
},
/obj/effect/paint/red,
@@ -1001,8 +973,6 @@
/obj/effect/wallframe_spawn/reinforced_borosilicate,
/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
- icon_state = "pdoor0";
id_tag = "merc_fuel"
},
/obj/effect/paint/black,
@@ -1015,8 +985,6 @@
dir = 4
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
- icon_state = "pdoor0";
id_tag = "merc_fuel"
},
/obj/effect/paint/black,
@@ -1118,9 +1086,7 @@
icon_state = "0-2"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -1288,9 +1254,7 @@
icon_state = "1-8"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -1432,9 +1396,7 @@
icon_state = "0-4"
},
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/structure/cable{
@@ -2408,9 +2370,7 @@
"HZ" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "merc_external"
},
/obj/effect/paint/red,
@@ -2559,7 +2519,7 @@
/turf/simulated/floor/tiled/techfloor,
/area/map_template/merc_spawn)
"NX" = (
-/obj/item/chems/ivbag/nanoblood,
+/obj/item/chems/ivbag/blood/nanoblood,
/turf/space,
/area/space)
"NZ" = (
diff --git a/maps/antag_spawn/ninja/ninja_base.dmm b/maps/antag_spawn/ninja/ninja_base.dmm
index d28ec0ce3a6..25dc5a784af 100644
--- a/maps/antag_spawn/ninja/ninja_base.dmm
+++ b/maps/antag_spawn/ninja/ninja_base.dmm
@@ -78,8 +78,8 @@
/area/map_template/ninja_dojo/dojo)
"an" = (
/obj/structure/table/glass,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/obj/structure/window/reinforced/crescent{
dir = 4
},
@@ -1232,12 +1232,9 @@
id_tag = "ninja_shuttle_outer";
name = "Ship External Access"
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "ninjadoor";
name = "Blast Door";
- opacity = FALSE
},
/turf/unsimulated/floor{
icon_state = "dark"
diff --git a/maps/away/bearcat/bearcat-1.dmm b/maps/away/bearcat/bearcat-1.dmm
index 2a4d997800d..de8053cb18f 100644
--- a/maps/away/bearcat/bearcat-1.dmm
+++ b/maps/away/bearcat/bearcat-1.dmm
@@ -8,13 +8,10 @@
/area/space)
"ac" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/usedup,
/area/space)
@@ -58,11 +55,8 @@
/turf/simulated/wall,
/area/ship/scrap/escape_port)
"ai" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "engwindow";
- opacity = FALSE
},
/turf/simulated/floor/airless,
/area/ship/scrap/escape_port)
@@ -93,13 +87,10 @@
/turf/simulated/wall/r_wall,
/area/ship/scrap/cargo/lower)
"am" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -109,11 +100,8 @@
/turf/simulated/wall,
/area/ship/scrap/cargo/lower)
"ap" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "engwindow";
- opacity = FALSE
},
/turf/simulated/floor/airless,
/area/ship/scrap/escape_star)
@@ -130,13 +118,10 @@
/area/ship/scrap/escape_port)
"at" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/usedup,
/area/ship/scrap/cargo/lower)
@@ -146,13 +131,10 @@
pixel_x = 25
},
/obj/machinery/atmospherics/pipe/simple/hidden,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/usedup,
/area/ship/scrap/cargo/lower)
@@ -532,12 +514,9 @@
/turf/simulated/floor/tiled/dark/airless,
/area/ship/scrap/crew/dorms1)
"bi" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -702,12 +681,9 @@
/turf/simulated/floor/tiled/dark/airless,
/area/ship/scrap/crew/dorms1)
"bA" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -782,7 +758,7 @@
},
/obj/structure/closet/coffin,
/obj/random/drinkbottle,
-/obj/item/contraband/poster,
+/obj/item/poster,
/turf/simulated/floor/tiled/usedup,
/area/ship/scrap/cargo/lower)
"bJ" = (
@@ -1057,12 +1033,9 @@
/turf/simulated/wall/r_wall,
/area/ship/scrap/crew/dorms2)
"cm" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -1208,12 +1181,9 @@
/turf/simulated/floor/tiled/dark/airless,
/area/ship/scrap/crew/dorms2)
"cC" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -1513,12 +1483,9 @@
/turf/simulated/floor/tiled/dark/airless,
/area/ship/scrap/crew/dorms3)
"dk" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -1628,12 +1595,9 @@
/turf/simulated/floor/tiled/dark/airless,
/area/ship/scrap/crew/dorms3)
"dw" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -2193,13 +2157,10 @@
pixel_x = -12;
pixel_y = 20
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/usedup,
/area/ship/scrap/maintenance/eva)
@@ -2454,13 +2415,10 @@
/turf/simulated/floor/tiled/usedup,
/area/ship/scrap/maintenance/eva)
"eY" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
diff --git a/maps/away/bearcat/bearcat-2.dmm b/maps/away/bearcat/bearcat-2.dmm
index 8ebf33ec165..e8b24a4f380 100644
--- a/maps/away/bearcat/bearcat-2.dmm
+++ b/maps/away/bearcat/bearcat-2.dmm
@@ -4,25 +4,19 @@
/area/space)
"ab" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
/area/ship/scrap/command/bridge)
"ac" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -30,13 +24,10 @@
"ad" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/usedup,
/area/ship/scrap/command/bridge)
@@ -207,13 +198,10 @@
/area/ship/scrap/command/captain)
"aD" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -324,12 +312,9 @@
/area/ship/scrap/command/captain)
"aN" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -418,12 +403,9 @@
/area/ship/scrap/command/captain)
"aW" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -503,13 +485,10 @@
/area/ship/scrap/command/captain)
"bd" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -532,13 +511,10 @@
/area/space)
"bh" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -586,12 +562,9 @@
/area/ship/scrap/dock)
"bm" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/usedup,
/area/space)
@@ -731,12 +704,9 @@
/turf/simulated/floor/tiled/usedup,
/area/ship/scrap/dock)
"bx" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/button/access/interior{
id_tag = "bearcat_dock_port";
@@ -834,12 +804,9 @@
/turf/simulated/floor/tiled/usedup,
/area/ship/scrap/dock)
"bF" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/button/access/interior{
id_tag = "bearcat_starboard_dock";
@@ -908,12 +875,9 @@
/area/ship/scrap/dock)
"bK" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -925,12 +889,9 @@
/obj/machinery/atmospherics/portables_connector{
dir = 4
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/portable_atmospherics/canister/empty/air,
/obj/structure/window/reinforced{
@@ -991,12 +952,9 @@
/obj/machinery/atmospherics/portables_connector{
dir = 8
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/portable_atmospherics/canister/empty/air,
/obj/structure/window/reinforced{
@@ -1007,12 +965,9 @@
"bS" = (
/obj/structure/lattice,
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/usedup,
/area/space)
@@ -1028,12 +983,9 @@
/area/ship/scrap/dock)
"bV" = (
/obj/structure/lattice,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/usedup,
@@ -1051,12 +1003,9 @@
/turf/space,
/area/space)
"bZ" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/usedup,
@@ -1065,23 +1014,17 @@
/turf/simulated/floor/tiled/usedup,
/area/ship/scrap/crew/hallway/port)
"cc" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/usedup,
/area/ship/scrap/dock)
"ce" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/usedup,
@@ -1165,13 +1108,10 @@
/area/ship/scrap/crew/toilets)
"cs" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -1239,13 +1179,10 @@
/area/ship/scrap/crew/cryo)
"cC" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled/usedup,
@@ -1377,12 +1314,9 @@
/area/ship/scrap/crew/cryo)
"cQ" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -1393,7 +1327,7 @@
dir = 4;
icon_state = "right";
name = "Reception Window";
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/light/small{
dir = 8;
@@ -1409,7 +1343,7 @@
dir = 4;
icon_state = "right";
name = "Reception Window";
- opacity = TRUE
+ opacity = 1
},
/obj/effect/floor_decal/corner/white/diagonal,
/turf/simulated/floor/tiled/usedup,
@@ -1572,12 +1506,9 @@
/area/ship/scrap/crew/cryo)
"dh" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -1928,12 +1859,9 @@
/area/ship/scrap/maintenance/engine/port)
"dS" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -2069,24 +1997,17 @@
/area/ship/scrap/crew/medbay)
"eg" = (
/obj/structure/iv_drip,
-/obj/structure/closet/medical_wall{
- name = "pill cabinet";
+/obj/structure/closet/secure_closet/medical_wall/pills{
+ req_access = null;
pixel_x = 26
},
-/obj/item/storage/pill_bottle/antibiotics,
-/obj/item/storage/pill_bottle/painkillers,
-/obj/item/storage/pill_bottle/antitox,
-/obj/item/storage/pill_bottle/burn_meds,
/turf/simulated/floor/tiled/white,
/area/ship/scrap/crew/medbay)
"ei" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/structure/cable{
@@ -2331,12 +2252,9 @@
/area/ship/scrap/crew/medbay)
"ez" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/structure/cable{
@@ -2409,8 +2327,8 @@
dir = 1
},
/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/turf/simulated/floor/tiled/usedup,
/area/ship/scrap/crew/kitchen)
"eG" = (
@@ -2930,12 +2848,9 @@
/turf/simulated/wall,
/area/ship/scrap/maintenance/engine/starboard)
"fE" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/airless,
/area/ship/scrap/maintenance/engine/port)
@@ -2948,12 +2863,9 @@
/area/space)
"fH" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
@@ -3072,12 +2984,9 @@
/area/ship/scrap/unused)
"fT" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
@@ -3338,12 +3247,9 @@
/area/space)
"gy" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment{
@@ -4300,12 +4206,9 @@
/area/ship/scrap/maintenance/power)
"ic" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/usedup,
@@ -4366,11 +4269,8 @@
/turf/simulated/wall/r_wall,
/area/ship/scrap/maintenance/engine/aft)
"ik" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "engwindow";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -4594,9 +4494,7 @@
/obj/machinery/door/window/northleft,
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "radaway";
- opacity = FALSE
},
/obj/structure/sign/warning/radioactive{
pixel_x = -32
@@ -4749,9 +4647,7 @@
},
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "radaway";
- opacity = FALSE
},
/obj/machinery/meter/turf,
/turf/simulated/floor/usedup,
@@ -5078,12 +4974,9 @@
/turf/space,
/area/ship/scrap/maintenance/engine/aft)
"jY" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/structure/sign/warning/hot_exhaust{
pixel_y = 32
@@ -5091,12 +4984,9 @@
/turf/simulated/floor/airless,
/area/ship/scrap/maintenance/engine/aft)
"jZ" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/airless,
/area/ship/scrap/maintenance/engine/aft)
@@ -5164,12 +5054,9 @@
/turf/simulated/wall/r_wall,
/area/ship/scrap/crew/hallway/port)
"oR" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/airless,
/area/ship/scrap/maintenance/engine/starboard)
diff --git a/maps/away/bearcat/bearcat.dm b/maps/away/bearcat/bearcat.dm
index 99d6f616ca3..ddfb275ee08 100644
--- a/maps/away/bearcat/bearcat.dm
+++ b/maps/away/bearcat/bearcat.dm
@@ -116,9 +116,11 @@
corpse.real_name = "Captain"
corpse.name = "Captain"
var/decl/hierarchy/outfit/outfit = outfit_by_type(/decl/hierarchy/outfit/deadcap)
- outfit.equip(corpse)
- corpse.adjustOxyLoss(corpse.maxHealth)
- corpse.setBrainLoss(corpse.maxHealth)
+ outfit.equip_outfit(corpse)
+ var/corpse_health = corpse.get_max_health()
+ corpse.adjustOxyLoss(corpse_health)
+ corpse.setBrainLoss(corpse_health)
+ corpse.death(FALSE, deathmessage = "no message", show_dead_message = FALSE)
var/obj/structure/bed/chair/C = locate() in T
if(C)
C.buckle_mob(corpse)
diff --git a/maps/away/bearcat/bearcat_areas.dm b/maps/away/bearcat/bearcat_areas.dm
index 1ab4dbada43..afb062f609b 100644
--- a/maps/away/bearcat/bearcat_areas.dm
+++ b/maps/away/bearcat/bearcat_areas.dm
@@ -151,7 +151,7 @@
req_access = list(access_bearcat)
/area/ship/scrap/command/bridge
- name = "Bridge"
+ name = "Hauler Bridge"
icon_state = "bridge"
req_access = list(access_bearcat)
diff --git a/maps/away/casino/casino.dmm b/maps/away/casino/casino.dmm
index 2cc2841c9cd..1e37205ff36 100644
--- a/maps/away/casino/casino.dmm
+++ b/maps/away/casino/casino.dmm
@@ -106,13 +106,10 @@
"an" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "casino_bridge";
name = "Casino Bridge Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/plating,
/area/casino/casino_bridge)
@@ -138,13 +135,10 @@
"at" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "casino_bridge";
name = "Casino Bridge Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/plating,
/area/casino/casino_bridge)
@@ -192,7 +186,6 @@
/area/casino/casino_maintenance)
"aD" = (
/obj/machinery/door/airlock/external{
- icon_state = "door_closed";
id_tag = "casino_dock_outer";
name = "Docking Port Airlock"
},
@@ -284,7 +277,6 @@
"aU" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/machinery/door/airlock/external{
- icon_state = "door_closed";
id_tag = "casino_dock_inner";
name = "Docking Port Airlock"
},
@@ -926,7 +918,6 @@
"cD" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "casino_shuttle_control"
},
/obj/machinery/door/firedoor,
@@ -1813,13 +1804,10 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "casino_checkpoint";
name = "Casino Checkpoint Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/tiled,
/area/casino/casino_security)
@@ -1907,12 +1895,9 @@
icon_state = "4-8"
},
/obj/machinery/door/blast/regular{
- density = FALSE;
dir = 4;
- icon_state = "pdoor0";
id_tag = "casino_checkpoint";
name = "Casino Checkpoint Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/tiled,
/area/casino/casino_security)
@@ -1949,9 +1934,7 @@
"fA" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
- density = FALSE;
dir = 8;
- icon_state = "pdoor0";
id_tag = "casino_main"
},
/obj/machinery/door/firedoor,
@@ -2153,13 +2136,10 @@
/obj/machinery/door/airlock{
name = "Casino"
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "casino_checkpoint";
name = "Casino Checkpoint Blast Doors";
- opacity = FALSE
},
/turf/simulated/floor/plating,
/area/casino/casino_security)
@@ -4574,7 +4554,6 @@
"mZ" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "Starboard wide window BD"
},
/turf/simulated/floor/plating,
diff --git a/maps/away/derelict/derelict-station.dmm b/maps/away/derelict/derelict-station.dmm
index c6a72c97365..a2da531d305 100644
--- a/maps/away/derelict/derelict-station.dmm
+++ b/maps/away/derelict/derelict-station.dmm
@@ -1829,7 +1829,6 @@
/area/constructionsite/maintenance)
"gf" = (
/obj/machinery/door/airlock/highsecurity{
- icon_state = "door_closed";
name = "AI Upload Access"
},
/turf/simulated/floor/bluegrid/airless,
@@ -1861,7 +1860,6 @@
/area/constructionsite/ai)
"gn" = (
/obj/machinery/door/airlock/highsecurity{
- icon_state = "door_closed";
name = "AI Upload"
},
/turf/simulated/floor/bluegrid/airless,
@@ -2043,7 +2041,6 @@
/area/constructionsite/hallway/aft)
"gZ" = (
/obj/machinery/door/airlock/highsecurity{
- icon_state = "door_closed";
name = "AI Upload Access"
},
/turf/simulated/floor/bluegrid/airless,
@@ -2169,7 +2166,7 @@
"hz" = (
/obj/item/chems/ivbag,
/obj/item/chems/ivbag,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
/obj/structure/closet/medical_wall{
name = "Blood Closet"
},
@@ -3382,7 +3379,7 @@
/area/AIsattele)
"lZ" = (
/obj/machinery/emitter{
- anchored = TRUE;
+ anchored = 1;
dir = 4;
state = 2
},
@@ -3394,7 +3391,7 @@
/area/constructionsite/engineering)
"mb" = (
/obj/machinery/emitter{
- anchored = TRUE;
+ anchored = 1;
dir = 8;
state = 2
},
diff --git a/maps/away/errant_pisces/errant_pisces.dm b/maps/away/errant_pisces/errant_pisces.dm
index b969cde4ae1..9371428eada 100644
--- a/maps/away/errant_pisces/errant_pisces.dm
+++ b/maps/away/errant_pisces/errant_pisces.dm
@@ -24,8 +24,7 @@
turns_per_move = 5
meat_type = /obj/item/chems/food/sharkmeat
speed = 2
- maxHealth = 100
- health = 100
+ mob_default_max_health = 100
natural_weapon = /obj/item/natural_weapon/bite/strong
break_stuff_probability = 35
faction = "shark"
@@ -64,7 +63,7 @@
desc = "A fillet of cosmoshark meat."
icon_state = "fishfillet"
filling_color = "#cecece"
- center_of_mass = @"{'x':17,'y':13}"
+ center_of_mass = @'{"x":17,"y":13}'
bitesize = 8
/obj/item/chems/food/sharkmeat/populate_reagents()
@@ -80,7 +79,7 @@
icon_state = "net_f"
anchored = TRUE
layer = CATWALK_LAYER//probably? Should cover cables, pipes and the rest of objects that are secured on the floor
- maxhealth = 100
+ max_health = 100
/obj/structure/net/Initialize(var/mapload)
. = ..()
@@ -93,16 +92,17 @@
continue
N.update_connections()
-/obj/structure/net/get_examined_damage_string(health_ratio)
- if(maxhealth == -1)
+/obj/structure/net/get_examined_damage_string()
+ if(!can_take_damage())
return
- if(health_ratio >= 1)
+ var/health_percent = get_percent_health()
+ if(health_percent >= 100)
return SPAN_NOTICE("It looks fully intact.")
- else if (health_ratio < 0.2)
+ else if (health_percent < 20)
return SPAN_DANGER("\The [src] is barely hanging on by the last few threads.")
- else if (health_ratio < 0.5)
+ else if (health_percent < 50)
return SPAN_WARNING("Large swathes of \the [src] have been cut.")
- else if (health_ratio < 0.9)
+ else
return SPAN_NOTICE("A few strands of \the [src] have been severed.")
/obj/structure/net/attackby(obj/item/W, mob/user)
@@ -176,7 +176,7 @@
throwforce = 5
throw_speed = 5
throw_range = 10
- material = /decl/material/solid/cloth
+ material = /decl/material/solid/organic/cloth
matter = list(/decl/material/solid/metal/plasteel = MATTER_AMOUNT_REINFORCEMENT)
max_amount = 30
center_of_mass = null
diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm
index e1ecd33f77a..9e437c95ab5 100644
--- a/maps/away/errant_pisces/errant_pisces.dmm
+++ b/maps/away/errant_pisces/errant_pisces.dmm
@@ -1289,7 +1289,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/turf/simulated/floor/plating,
@@ -1411,7 +1410,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/turf/simulated/floor/plating,
@@ -1503,7 +1501,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/obj/machinery/button/access/exterior{
@@ -1717,7 +1714,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/obj/machinery/button/access/exterior{
@@ -2046,7 +2042,6 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/turf/simulated/floor/plating,
@@ -2232,7 +2227,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/turf/simulated/floor/plating,
@@ -3956,8 +3950,8 @@
dir = 1
},
/obj/structure/bookcase,
-/obj/item/book/manual/anomaly_testing,
-/obj/item/book/manual/anomaly_spectroscopy,
+/obj/item/book/fluff/anomaly_testing,
+/obj/item/book/fluff/anomaly_spectroscopy,
/turf/simulated/floor/tiled,
/area/errant_pisces/science_wing)
"kB" = (
@@ -3968,7 +3962,7 @@
/area/errant_pisces/science_wing)
"kC" = (
/obj/structure/bookcase,
-/obj/item/book/manual/materials_chemistry_analysis,
+/obj/item/book/fluff/materials_chemistry_analysis,
/turf/simulated/floor/tiled,
/area/errant_pisces/science_wing)
"kD" = (
@@ -4884,7 +4878,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/obj/machinery/door/firedoor,
@@ -5443,7 +5436,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/obj/machinery/door/firedoor,
@@ -5789,7 +5781,6 @@
"pp" = (
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/turf/simulated/floor/reinforced/airless,
@@ -6335,7 +6326,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Harpoon_perimeter_blast"
},
/obj/machinery/door/firedoor,
diff --git a/maps/away/errant_pisces/errant_pisces_areas.dm b/maps/away/errant_pisces/errant_pisces_areas.dm
index f40a349869b..dedee8fc025 100644
--- a/maps/away/errant_pisces/errant_pisces_areas.dm
+++ b/maps/away/errant_pisces/errant_pisces_areas.dm
@@ -86,7 +86,7 @@
icon_state = "fishing_wing"
/area/errant_pisces/bridge
- name = "Bridge"
+ name = "Trawler Bridge"
icon_state = "bridge"
/area/errant_pisces/prod_storage
diff --git a/maps/away/liberia/liberia.dmm b/maps/away/liberia/liberia.dmm
index dd5d4ad95e5..505f535ae28 100644
--- a/maps/away/liberia/liberia.dmm
+++ b/maps/away/liberia/liberia.dmm
@@ -177,9 +177,7 @@
"ay" = (
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "merch_radaway";
- opacity = FALSE
},
/obj/machinery/door/window/northleft{
dir = 8;
@@ -207,9 +205,7 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "merch_radaway";
- opacity = FALSE
},
/turf/simulated/floor,
/area/liberia/engineeringreactor)
@@ -324,7 +320,7 @@
dir = 9
},
/obj/structure/closet/emcloset{
- anchored = TRUE;
+ anchored = 1;
name = "anchored emergency closet"
},
/turf/simulated/floor/tiled/techfloor/grid,
@@ -643,13 +639,10 @@
/area/liberia/hallway)
"bo" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "merchantshuttle";
name = "Merchant Window Shutters";
- opacity = FALSE
},
/obj/effect/paint/silver,
/obj/effect/paint_stripe/yellow,
@@ -738,12 +731,12 @@
req_access = newlist()
},
/obj/item/storage/secure/briefcase,
-/obj/item/contraband/poster,
-/obj/item/contraband/poster,
-/obj/item/contraband/poster,
-/obj/item/contraband/poster,
-/obj/item/contraband/poster,
-/obj/item/contraband/poster,
+/obj/item/poster,
+/obj/item/poster,
+/obj/item/poster,
+/obj/item/poster,
+/obj/item/poster,
+/obj/item/poster,
/obj/item/knife/folding/combat/balisong,
/obj/item/knife/folding/combat/balisong,
/turf/simulated/floor/tiled/steel_grid,
@@ -835,13 +828,10 @@
/area/liberia/mule)
"bC" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "merchantshuttle";
name = "Merchant Window Shutters";
- opacity = FALSE
},
/obj/effect/paint/silver,
/obj/effect/paint_stripe/yellow,
@@ -1270,13 +1260,10 @@
/area/liberia/mule)
"cp" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "merchantdesk";
name = "Merchant Desk Shutters";
- opacity = FALSE
},
/obj/effect/paint/silver,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -1578,13 +1565,10 @@
},
/obj/structure/table/steel,
/obj/effect/paint/silver,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "merchantdesk";
name = "Merchant Desk Shutters";
- opacity = FALSE
},
/obj/structure/cable/blue{
icon_state = "4-8"
@@ -2454,7 +2438,7 @@
},
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/closet/emcloset{
- anchored = TRUE;
+ anchored = 1;
name = "anchored emergency closet"
},
/turf/simulated/floor/tiled/monotile,
@@ -3078,10 +3062,10 @@
pixel_x = 24;
pixel_y = 4
},
-/obj/item/chems/ivbag/blood/OPlus,
-/obj/item/chems/ivbag/blood/OPlus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/oplus,
+/obj/item/chems/ivbag/blood/oplus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/obj/item/chems/food/candy/donor,
/obj/item/chems/food/candy/donor,
/obj/item/chems/food/candy/donor,
@@ -5017,7 +5001,7 @@
/area/liberia/bridge)
"jD" = (
/obj/structure/table/glass,
-/obj/machinery/faxmachine{
+/obj/machinery/faxmachine/mapped{
req_access = list("ACCESS_MERCHANT");
},
/obj/effect/floor_decal/corner/blue/mono,
@@ -7984,7 +7968,7 @@
dir = 6
},
/obj/structure/closet/emcloset{
- anchored = TRUE;
+ anchored = 1;
name = "anchored emergency closet"
},
/turf/simulated/floor/tiled/techfloor,
@@ -8094,13 +8078,10 @@
/area/liberia/dockinghall)
"QE" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "merchantshuttle";
name = "Merchant Window Shutters";
- opacity = FALSE
},
/obj/effect/paint/silver,
/obj/effect/paint_stripe/yellow,
diff --git a/maps/away/liberia/liberia_jobs.dm b/maps/away/liberia/liberia_jobs.dm
index 296b2fb57a3..7fc94480626 100644
--- a/maps/away/liberia/liberia_jobs.dm
+++ b/maps/away/liberia/liberia_jobs.dm
@@ -25,7 +25,7 @@
SKILL_PILOT = SKILL_BASIC
)
-/datum/job/submap/merchant/equip(var/mob/living/carbon/human/H)
+/datum/job/submap/merchant/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
to_chat(H, "Your connections helped you learn about the words that will help you identify a locals... Particularly interested buyers:")
to_chat(H, "Code phases: [syndicate_code_phrase]")
to_chat(H, "Responses to phrases: [syndicate_code_response]")
diff --git a/maps/away/magshield/magshield.dm b/maps/away/magshield/magshield.dm
index 5a32a7b5dfe..35415658d07 100644
--- a/maps/away/magshield/magshield.dm
+++ b/maps/away/magshield/magshield.dm
@@ -141,40 +141,24 @@
icon_state = "nav_light_red"
-/obj/item/book/manual/magshield_manual
+/obj/item/book/fluff/magshield_manual
name = "SOP for Planetary Shield Orbital Station"
icon = 'magshield_sprites.dmi'
icon_state = "mg_guide"
author = "Terraforms Industrial"
title = "Standard operating procedures for Planetary Shield Orbital Station"
-
- dat = {"
-
-
-
-
-
- Introduction
- Terraforms Industrial is happy to see you as our customer! Please read this guide before using and operating with your custom PSOS - Planetary Shield Orbital Statiion.
- Best uses for PSOS
- PSOS is intended for protecting exoplanets from high energy space radiation rays and particles. Best used for planets lacking active geomagnetic field so PSOS would compensate its absence.
- Applied technologies
- Terraforms Industrial is delivering you your new PSOS with set of four (4) high-strength magnetic field generators. Those devices use rotating supeconducter hands to create magnetic field with strength up to 5 Tesla effectively deflecting up to 99% of space radiation spectrum.
-
- Special modified vacuum radiation sensors will help you evaluate radiation level and adjust power input of PSOS magnetic generators for best efficiency and power saving.
-
- rest of the book pages are gone
-
-
- "}
+ fluff_text = {"
+ Introduction
+ Terraforms Industrial is happy to see you as our customer! Please read this guide before using and operating with your custom PSOS - Planetary Shield Orbital Statiion.
+ Best uses for PSOS
+ PSOS is intended for protecting exoplanets from high energy space radiation rays and particles. Best used for planets lacking active geomagnetic field so PSOS would compensate its absence.
+ Applied technologies
+ Terraforms Industrial is delivering you your new PSOS with set of four (4) high-strength magnetic field generators. Those devices use rotating supeconducter hands to create magnetic field with strength up to 5 Tesla effectively deflecting up to 99% of space radiation spectrum.
+
+ Special modified vacuum radiation sensors will help you evaluate radiation level and adjust power input of PSOS magnetic generators for best efficiency and power saving.
+
+ The rest of the pages have been torn out...
+ "}
/obj/item/paper/magshield/tornpage
name = "torn book page"
diff --git a/maps/away/magshield/magshield.dmm b/maps/away/magshield/magshield.dmm
index 213b07ec325..ad2e9e971bd 100644
--- a/maps/away/magshield/magshield.dmm
+++ b/maps/away/magshield/magshield.dmm
@@ -214,7 +214,6 @@
/obj/effect/wingrille_spawn/reinforced_borosilicate/full,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/turf/simulated/floor/airless,
@@ -341,7 +340,6 @@
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/turf/simulated/floor/airless,
@@ -355,7 +353,6 @@
/area/magshield/engine)
"bb" = (
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/turf/simulated/floor/airless,
@@ -466,7 +463,6 @@
"bu" = (
/obj/effect/wingrille_spawn/reinforced_borosilicate/full,
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/obj/machinery/atmospherics/pipe/simple/visible/cyan,
@@ -475,7 +471,6 @@
"bv" = (
/obj/effect/wingrille_spawn/reinforced_borosilicate/full,
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/turf/simulated/floor/airless,
@@ -674,20 +669,17 @@
/turf/simulated/floor/airless,
/area/magshield/engine)
"cc" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "EngineBlast";
name = "Engine Monitoring Room Blast Doors";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
/area/magshield/engine)
"cd" = (
/obj/machinery/atmospherics/binary/circulator{
- anchored = TRUE;
+ anchored = 1;
dir = 4
},
/turf/simulated/floor/plating,
@@ -736,13 +728,10 @@
/turf/simulated/floor/airless,
/area/magshield/engine)
"ck" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "EngineBlast";
name = "Engine Monitoring Room Blast Doors";
- opacity = FALSE
},
/obj/effect/wallframe_spawn/reinforced,
/obj/structure/cable/yellow{
@@ -775,7 +764,7 @@
icon_state = "0-8"
},
/obj/machinery/generator{
- anchored = TRUE
+ anchored = 1
},
/turf/simulated/floor/plating,
/area/magshield/engine)
@@ -856,7 +845,7 @@
/area/magshield/engine)
"cx" = (
/obj/machinery/atmospherics/binary/circulator{
- anchored = TRUE;
+ anchored = 1;
dir = 8
},
/turf/simulated/floor/plating,
@@ -2570,7 +2559,7 @@
/turf/simulated/floor/tiled,
/area/magshield/west)
"hD" = (
-/obj/item/book/manual/magshield_manual,
+/obj/item/book/fluff/magshield_manual,
/turf/simulated/floor/tiled/white,
/area/magshield/west)
"hE" = (
diff --git a/maps/away/mining/mining-signal.dmm b/maps/away/mining/mining-signal.dmm
index 82df10e9087..4b91f7e6864 100644
--- a/maps/away/mining/mining-signal.dmm
+++ b/maps/away/mining/mining-signal.dmm
@@ -965,17 +965,13 @@
/turf/simulated/floor/tiled/dark,
/area/outpost/abandoned)
"ds" = (
-/obj/machinery/door/airlock/medical{
- density = FALSE;
- icon_state = "door_open";
- opacity = FALSE
- },
+/obj/machinery/door/airlock/medical/open,
/obj/machinery/holosign/surgery,
/turf/simulated/floor/tiled/airless,
/area/outpost/abandoned)
"dt" = (
/obj/structure/door_assembly{
- anchored = TRUE
+ anchored = 1
},
/turf/simulated/floor,
/area/outpost/abandoned)
@@ -1243,7 +1239,7 @@
/area/mine/explored)
"el" = (
/obj/structure/firedoor_assembly{
- anchored = TRUE
+ anchored = 1
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -1845,7 +1841,7 @@
/area/mine/explored)
"gd" = (
/obj/structure/windoor_assembly{
- anchored = TRUE;
+ anchored = 1;
dir = 8
},
/turf/simulated/floor/tiled/dark,
@@ -1987,11 +1983,7 @@
/turf/simulated/floor/tiled/airless,
/area/outpost/abandoned)
"gz" = (
-/obj/machinery/door/airlock/external{
- density = FALSE;
- icon_state = "door_open";
- opacity = FALSE
- },
+/obj/machinery/door/airlock/external/open,
/obj/machinery/door/blast/regular/open,
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -2080,7 +2072,7 @@
/obj/effect/decal/cleanable/blood/tracks/footprints,
/obj/effect/decal/cleanable/dirt,
/obj/structure/firedoor_assembly{
- anchored = TRUE
+ anchored = 1
},
/turf/simulated/floor/plating{
icon_state = "dmg2"
diff --git a/maps/away/mining/mining.dm b/maps/away/mining/mining.dm
index 7aba5faa245..06238419a8d 100644
--- a/maps/away/mining/mining.dm
+++ b/maps/away/mining/mining.dm
@@ -208,7 +208,7 @@
icon_state = "totem"
density = TRUE
anchored = TRUE
- unacidable = 1
+ material = /decl/material/solid/metal/aliumium
var/number
/obj/structure/totem/Initialize()
diff --git a/maps/away/slavers/slavers_base.dm b/maps/away/slavers/slavers_base.dm
index b7b2cf50157..e83c80e7cd7 100644
--- a/maps/away/slavers/slavers_base.dm
+++ b/maps/away/slavers/slavers_base.dm
@@ -134,17 +134,16 @@
turns_per_move = 5
speed = 4
stop_automated_movement_when_pulled = 0
- maxHealth = 100
- health = 100
+ mob_default_max_health = 100
natural_weapon = /obj/item/natural_weapon/punch
can_escape = TRUE
unsuitable_atmos_damage = 15
- var/corpse = /obj/abstract/landmark/corpse/abolitionist
- var/weapon = /obj/item/gun/energy/laser
projectilesound = 'sound/weapons/laser.ogg'
ranged = 1
projectiletype = /obj/item/projectile/beam
faction = "extremist abolitionists"
+ var/corpse = /obj/abstract/landmark/corpse/abolitionist
+ var/weapon = /obj/item/gun/energy/laser
/mob/living/simple_animal/hostile/abolition_extremist/death(gibbed, deathmessage, show_dead_message)
. = ..(gibbed, deathmessage, show_dead_message)
diff --git a/maps/away/slavers/slavers_base.dmm b/maps/away/slavers/slavers_base.dmm
index 432c70fa5cb..c7ffa9cc4c3 100644
--- a/maps/away/slavers/slavers_base.dmm
+++ b/maps/away/slavers/slavers_base.dmm
@@ -2323,7 +2323,7 @@
icon_state = "1-2"
},
/obj/item/stock_parts/circuitboard/broken,
-/obj/item/contraband/poster,
+/obj/item/poster,
/obj/item/radio/shortwave,
/obj/machinery/light/small{
dir = 4
@@ -2830,7 +2830,6 @@
/obj/structure/table/reinforced,
/obj/random/coin,
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "SC BD"
},
/turf/simulated/floor/tiled/airless,
diff --git a/maps/away/smugglers/smugglers.dmm b/maps/away/smugglers/smugglers.dmm
index 45fbf96aa14..43b2fc8a2f5 100644
--- a/maps/away/smugglers/smugglers.dmm
+++ b/maps/away/smugglers/smugglers.dmm
@@ -20,9 +20,7 @@
/turf/simulated/wall/r_wall,
/area/smugglers/base)
"ag" = (
-/obj/machinery/door/airlock/external{
- icon_state = "door_closed"
- },
+/obj/machinery/door/airlock/external,
/turf/simulated/floor,
/area/smugglers/base)
"ah" = (
@@ -59,7 +57,7 @@
},
/obj/effect/floor_decal/industrial/warning/full,
/obj/item/beartrap{
- anchored = TRUE;
+ anchored = 1;
deployed = 1;
icon_state = "beartrap1"
},
@@ -80,7 +78,6 @@
/area/space)
"aq" = (
/obj/machinery/door/airlock/external{
- icon_state = "door_closed";
name = "Internal Airlock"
},
/obj/machinery/atmospherics/pipe/simple/visible/black,
@@ -252,7 +249,7 @@
/area/smugglers/base)
"aJ" = (
/obj/item/beartrap{
- anchored = TRUE;
+ anchored = 1;
deployed = 1;
icon_state = "beartrap1"
},
diff --git a/maps/away/unishi/unishi-2.dmm b/maps/away/unishi/unishi-2.dmm
index 8083742473d..118cb9e8dbe 100644
--- a/maps/away/unishi/unishi-2.dmm
+++ b/maps/away/unishi/unishi-2.dmm
@@ -897,7 +897,6 @@
/obj/effect/wingrille_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/obj/structure/cable/yellow{
@@ -992,7 +991,6 @@
/obj/effect/wingrille_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/turf/simulated/floor,
@@ -1121,7 +1119,6 @@
"dk" = (
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/obj/machinery/door/airlock/glass/research{
@@ -1183,7 +1180,6 @@
"ds" = (
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/obj/effect/wingrille_spawn/reinforced,
@@ -2070,12 +2066,9 @@
/turf/simulated/wall/r_wall,
/area/unishi/smresearch)
"fM" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Biohazard";
name = "Biohazard Shutter";
- opacity = FALSE
},
/obj/machinery/door/airlock/hatch,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -2218,13 +2211,10 @@
/turf/simulated/floor,
/area/unishi/smresearch)
"gf" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
name = "Biohazard Shutter";
- opacity = FALSE
},
/turf/simulated/floor,
/area/unishi/smresearch)
@@ -2349,13 +2339,10 @@
/turf/space,
/area/space)
"gx" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
name = "Biohazard Shutter";
- opacity = FALSE
},
/obj/item/remains,
/turf/simulated/floor,
@@ -2743,13 +2730,10 @@
/turf/simulated/floor/reinforced/nitrogen/engine,
/area/unishi/smresearch)
"hp" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
name = "Biohazard Shutter";
- opacity = FALSE
},
/obj/item/remains,
/obj/random/shoes,
diff --git a/maps/away/unishi/unishi-3.dmm b/maps/away/unishi/unishi-3.dmm
index a971dbbc36e..4504826b200 100644
--- a/maps/away/unishi/unishi-3.dmm
+++ b/maps/away/unishi/unishi-3.dmm
@@ -930,7 +930,7 @@
/obj/structure/table/woodentable,
/obj/item/board,
/obj/item/book/manual/mass_spectrometry,
-/obj/item/book/manual/stasis,
+/obj/item/book/fluff/stasis,
/turf/simulated/floor/tiled,
/area/unishi/living)
"cM" = (
@@ -1441,7 +1441,7 @@
/area/unishi/living)
"eb" = (
/obj/structure/table/woodentable,
-/obj/item/contraband/poster,
+/obj/item/poster,
/obj/item/haircomb/random,
/obj/random/advdevice,
/turf/simulated/floor/tiled,
diff --git a/maps/away_sites_testing/away_sites_testing_define.dm b/maps/away_sites_testing/away_sites_testing_define.dm
index a75e88dd2e7..6f3a96274ee 100644
--- a/maps/away_sites_testing/away_sites_testing_define.dm
+++ b/maps/away_sites_testing/away_sites_testing_define.dm
@@ -5,9 +5,13 @@
path = "away_sites_testing"
overmap_ids = list(OVERMAP_ID_SPACE)
- allowed_spawns = list()
+ allowed_latejoin_spawns = list()
default_spawn = null
+// Set the observer spawn to include every flag so that CI flag checks pass.
+/decl/spawnpoint/observer
+ spawn_flags = (SPAWN_FLAG_GHOSTS_CAN_SPAWN | SPAWN_FLAG_JOBS_CAN_SPAWN | SPAWN_FLAG_PRISONERS_CAN_SPAWN | SPAWN_FLAG_PERSISTENCE_CAN_SPAWN)
+
/datum/map/away_sites_testing/build_away_sites()
var/list/unsorted_sites = list_values(SSmapping.get_templates_by_category(MAP_TEMPLATE_CATEGORY_AWAYSITE))
var/list/sorted_sites = sortTim(unsorted_sites, /proc/cmp_sort_templates_tallest_to_shortest)
diff --git a/maps/away_sites_testing/blank.dmm b/maps/away_sites_testing/blank.dmm
index 6d50a5c258f..ad94ea9ecd0 100644
--- a/maps/away_sites_testing/blank.dmm
+++ b/maps/away_sites_testing/blank.dmm
@@ -8,6 +8,10 @@
"c" = (
/turf/simulated/floor/tiled,
/area/space)
+"d" = (
+/obj/abstract/landmark/latejoin/observer,
+/turf/space,
+/area/space)
"e" = (
/obj/abstract/landmark/latejoin,
/turf/simulated/floor/tiled,
@@ -60,7 +64,7 @@ a
a
a
a
-a
+d
a
a
a
diff --git a/maps/example/example-1.dmm b/maps/example/example-1.dmm
index cbf45a8633f..396f16903f0 100644
--- a/maps/example/example-1.dmm
+++ b/maps/example/example-1.dmm
@@ -91,6 +91,10 @@
/obj/item/stack/material/sheet/mapped/steel/fifty,
/turf/simulated/floor/tiled/steel_grid,
/area/example/first)
+"dK" = (
+/obj/abstract/landmark/latejoin/observer,
+/turf/simulated/wall/r_wall/prepainted,
+/area/example/first)
"eh" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -191,7 +195,7 @@
/turf/simulated/floor/tiled/dark/monotile,
/area/example/first)
"kw" = (
-/obj/abstract/landmark/start,
+/obj/abstract/landmark/latejoin,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
@@ -201,10 +205,6 @@
/obj/machinery/door/airlock/external/bolted{
id_tag = "lower_level_dock_hatch_internal"
},
-/obj/machinery/button/access/interior{
- id_tag = "lower_level_dock";
- pixel_x = -21
- },
/turf/simulated/floor,
/area/example/first)
"lJ" = (
@@ -398,7 +398,8 @@
},
/obj/machinery/airlock_sensor{
id_tag = "lower_level_dock_sensor_chamber";
- pixel_x = -24
+ pixel_x = -22;
+ dir = 4
},
/obj/machinery/embedded_controller/radio/airlock/docking_port{
id_tag = "lower_level_dock";
@@ -501,8 +502,8 @@
/area/example/first)
"xq" = (
/obj/abstract/level_data_spawner/main_level{
- name = "Example First Deck";
-},
+ name = "Example First Deck"
+ },
/turf/space,
/area/space)
"xR" = (
@@ -541,6 +542,14 @@
},
/turf/simulated/floor,
/area/example/first)
+"Ae" = (
+/obj/machinery/button/access/interior{
+ id_tag = "lower_level_dock";
+ pixel_x = -24;
+ pixel_y = 24
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/example/first)
"AF" = (
/obj/effect/floor_decal/corner/orange{
dir = 10
@@ -689,7 +698,10 @@
},
/obj/machinery/button/access/exterior{
id_tag = "lower_level_dock";
- pixel_y = -21
+ pixel_y = -24;
+ dir = 8;
+ pixel_x = -12;
+ directional_offset = null
},
/turf/simulated/floor,
/area/example/first)
@@ -2453,7 +2465,7 @@ XZ
Wr
Wr
Wr
-XZ
+dK
XZ
XZ
XZ
@@ -2497,7 +2509,7 @@ XZ
tq
ZV
la
-CU
+Ae
CU
XZ
mu
diff --git a/maps/example/example-2.dmm b/maps/example/example-2.dmm
index 67795ddce76..ee19110309e 100644
--- a/maps/example/example-2.dmm
+++ b/maps/example/example-2.dmm
@@ -143,7 +143,10 @@
},
/obj/machinery/button/access/exterior{
id_tag = "upper_level_dock";
- pixel_y = -21
+ pixel_y = -24;
+ dir = 4;
+ pixel_x = 12;
+ directional_offset = null
},
/turf/simulated/floor,
/area/example/second)
@@ -231,7 +234,8 @@
},
/obj/machinery/airlock_sensor{
id_tag = "upper_level_dock_sensor_chamber";
- pixel_x = 24
+ pixel_x = 22;
+ dir = 8
},
/obj/machinery/embedded_controller/radio/airlock/docking_port{
id_tag = "upper_level_dock";
@@ -310,8 +314,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/machinery/button/access/interior{
id_tag = "upper_level_dock";
- pixel_x = 22;
- pixel_y = 28
+ pixel_x = 24;
+ pixel_y = 24
},
/turf/simulated/floor/tiled/steel_grid,
/area/example/second)
@@ -329,8 +333,8 @@
/area/example/second)
"ug" = (
/obj/abstract/level_data_spawner/main_level{
- name = "Example Second Deck";
-},
+ name = "Example Second Deck"
+ },
/turf/space,
/area/space)
"uk" = (
@@ -655,9 +659,9 @@
/area/turbolift/example/second)
"Xm" = (
/obj/structure/iv_drip,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/obj/effect/floor_decal/corner/blue/mono,
/turf/simulated/floor/tiled/white/monotile,
/area/example/second)
diff --git a/maps/example/example.dm b/maps/example/example.dm
index 72a8676b951..955f65f1cf4 100644
--- a/maps/example/example.dm
+++ b/maps/example/example.dm
@@ -1,5 +1,9 @@
#if !defined(USING_MAP_DATUM)
+ #ifdef UNIT_TEST
+ #include "../../code/unit_tests/offset_tests.dm"
+ #endif
+
#include "example_areas.dm"
#include "example_shuttles.dm"
#include "example_departments.dm"
diff --git a/maps/example/example_define.dm b/maps/example/example_define.dm
index 389d11249d0..9c48d50899f 100644
--- a/maps/example/example_define.dm
+++ b/maps/example/example_define.dm
@@ -11,7 +11,7 @@
/decl/music_track/absconditus
)
- allowed_spawns = list(
+ allowed_latejoin_spawns = list(
/decl/spawnpoint/arrivals
)
diff --git a/maps/exodus/exodus-1.dmm b/maps/exodus/exodus-1.dmm
index 33909743bb5..ed410b73cee 100644
--- a/maps/exodus/exodus-1.dmm
+++ b/maps/exodus/exodus-1.dmm
@@ -21,7 +21,7 @@
/obj/machinery/portable_atmospherics/canister/air/airlock,
/obj/machinery/atmospherics/portables_connector,
/obj/structure/sign/warning/vacuum{
- dir = 4;
+ dir = 8;
pixel_x = 32
},
/turf/simulated/floor/plating,
@@ -50,8 +50,9 @@
/obj/machinery/button/access/interior{
id_tag = "sub_sec_airlock";
name = "interior access button";
- pixel_x = 25;
- pixel_y = -25
+ pixel_x = 20;
+ pixel_y = -25;
+ dir = 8
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/fore)
@@ -71,16 +72,19 @@
},
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
id_tag = "sub_sec_airlock";
- pixel_y = -25;
+ pixel_y = -22;
tag_airpump = "sub_sec_pump";
tag_chamber_sensor = "sub_sec_sensor";
tag_exterior_door = "sub_sec_outer";
- tag_interior_door = "sub_sec_inner"
+ tag_interior_door = "sub_sec_inner";
+ dir = 1;
+ pixel_x = -6
},
/obj/machinery/airlock_sensor{
id_tag = "sub_sec_sensor";
- pixel_x = 12;
- pixel_y = -25
+ pixel_x = 6;
+ pixel_y = -18;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/fore)
@@ -97,8 +101,9 @@
/obj/machinery/button/access/exterior{
id_tag = "sub_sec_airlock";
name = "exterior access button";
- pixel_x = -25;
- pixel_y = 25
+ pixel_x = -20;
+ pixel_y = 25;
+ dir = 4
},
/turf/simulated/floor/airless,
/area/exodus/maintenance/sub/fore)
@@ -171,16 +176,22 @@
/turf/space,
/area/exodus/maintenance/sub/fore)
"aC" = (
-/obj/structure/sign/directions/security{
- dir = 1
+/obj/structure/sign/warning/lethal_turrets{
+ dir = 4;
+ pixel_x = -34;
+ pixel_y = 32
},
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/maintenance/sub/fore)
+/turf/space,
+/area/space)
"aD" = (
/obj/machinery/light{
dir = 8;
icon_state = "tube1"
},
+/obj/structure/sign/directions/security{
+ dir = 1;
+ pixel_x = -32
+ },
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/fore)
"aE" = (
@@ -927,9 +938,11 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/central)
"dd" = (
-/obj/structure/sign/warning/lethal_turrets,
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/maintenance/exterior)
+/obj/structure/sign/warning/lethal_turrets{
+ pixel_y = 32
+ },
+/turf/space,
+/area/space)
"de" = (
/obj/machinery/alarm{
dir = 4;
@@ -1100,7 +1113,8 @@
id_tag = "sub_cargo_airlock";
name = "exterior access button";
pixel_x = 25;
- pixel_y = 25
+ pixel_y = 25;
+ dir = 8
},
/turf/simulated/floor/airless,
/area/exodus/maintenance/sub/port)
@@ -1117,16 +1131,19 @@
},
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
id_tag = "sub_cargo_airlock";
- pixel_y = -25;
+ pixel_y = -22;
tag_airpump = "sub_cargo_pump";
tag_chamber_sensor = "sub_cargo_sensor";
tag_exterior_door = "sub_cargo_outer";
- tag_interior_door = "sub_cargo_inner"
+ tag_interior_door = "sub_cargo_inner";
+ dir = 1;
+ pixel_x = -6
},
/obj/machinery/airlock_sensor{
id_tag = "sub_cargo_sensor";
- pixel_x = 12;
- pixel_y = -25
+ pixel_x = 6;
+ pixel_y = -18;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/port)
@@ -1150,7 +1167,8 @@
id_tag = "sub_cargo_airlock";
name = "interior access button";
pixel_x = -25;
- pixel_y = 25
+ pixel_y = 25;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/port)
@@ -1228,7 +1246,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/sign/warning/vacuum{
- dir = 8;
+ dir = 4;
pixel_x = -32
},
/turf/simulated/floor/plating,
@@ -1537,7 +1555,7 @@
/area/exodus/maintenance/sub/command)
"eL" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/bluegrid,
/area/exodus/maintenance/sub/command)
@@ -1625,8 +1643,8 @@
/obj/machinery/portable_atmospherics/canister/air/airlock,
/obj/machinery/atmospherics/portables_connector,
/obj/structure/sign/warning/vacuum{
- dir = 8;
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/starboard)
@@ -1677,8 +1695,8 @@
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/structure/ladder,
/obj/machinery/light_switch{
- pixel_x = -22;
- pixel_y = -22
+ pixel_y = -20;
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
@@ -1714,10 +1732,11 @@
icon_state = "0-2"
},
/obj/structure/sign/warning/vacuum{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/structure/sign/warning/high_voltage{
- dir = 4;
+ dir = 8;
pixel_x = 32
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -1744,8 +1763,9 @@
/obj/machinery/button/access/exterior{
id_tag = "sub_research_airlock";
name = "exterior access button";
- pixel_x = 25;
- pixel_y = 25
+ pixel_x = 20;
+ pixel_y = 24;
+ dir = 8
},
/turf/simulated/floor/airless,
/area/exodus/maintenance/sub/starboard)
@@ -1762,16 +1782,19 @@
},
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
id_tag = "sub_research_airlock";
- pixel_y = -25;
+ pixel_y = -22;
tag_airpump = "sub_research_pump";
tag_chamber_sensor = "sub_research_sensor";
tag_exterior_door = "sub_research_outer";
- tag_interior_door = "sub_research_inner"
+ tag_interior_door = "sub_research_inner";
+ dir = 1;
+ pixel_x = -6
},
/obj/machinery/airlock_sensor{
id_tag = "sub_research_sensor";
- pixel_x = 12;
- pixel_y = -25
+ pixel_x = 6;
+ pixel_y = -18;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/starboard)
@@ -1789,8 +1812,9 @@
/obj/machinery/button/access/interior{
id_tag = "sub_research_airlock";
name = "interior access button";
- pixel_x = -25;
- pixel_y = -25
+ pixel_x = -20;
+ pixel_y = -24;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/starboard)
@@ -1805,11 +1829,12 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/starboard)
"fo" = (
-/obj/structure/sign/directions/science{
- dir = 1
+/obj/structure/sign/warning/lethal_turrets{
+ dir = 1;
+ pixel_y = -32
},
-/turf/simulated/wall/prepainted,
-/area/exodus/maintenance/sub/starboard)
+/turf/space,
+/area/space)
"fp" = (
/turf/space,
/area/exodus/maintenance/sub/starboard)
@@ -2123,7 +2148,6 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/central)
"gd" = (
-/obj/structure/sign/warning/lethal_turrets,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -3520,7 +3544,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/engineering/atmos)
@@ -4164,12 +4188,6 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/aft)
"lb" = (
-/obj/machinery/button/access/interior{
- id_tag = "sub_engineering_airlock";
- name = "interior access button";
- pixel_x = 25;
- pixel_y = 25
- },
/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 1
},
@@ -4182,6 +4200,11 @@
/obj/machinery/door/airlock/external/bolted{
id_tag = "sub_engineering_inner"
},
+/obj/machinery/button/access/interior{
+ id_tag = "sub_engineering_airlock";
+ name = "interior access button";
+ pixel_y = 24
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/maintenance/sub/aft)
"ld" = (
@@ -4191,16 +4214,18 @@
},
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
id_tag = "sub_engineering_airlock";
- pixel_y = -25;
+ pixel_y = -22;
tag_airpump = "sub_engineering_pump";
tag_chamber_sensor = "sub_engineering_sensor";
tag_exterior_door = "sub_engineering_outer";
- tag_interior_door = "sub_engineering_inner"
+ tag_interior_door = "sub_engineering_inner";
+ dir = 1
},
/obj/machinery/airlock_sensor{
id_tag = "sub_engineering_sensor";
pixel_x = 12;
- pixel_y = -25
+ pixel_y = -18;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/sub/aft)
@@ -4208,15 +4233,14 @@
/obj/machinery/door/airlock/external/bolted{
id_tag = "sub_engineering_outer"
},
-/turf/simulated/floor/tiled/techfloor/grid,
-/area/exodus/maintenance/sub/aft)
-"lf" = (
/obj/machinery/button/access/exterior{
id_tag = "sub_engineering_airlock";
name = "exterior access button";
- pixel_x = -25;
- pixel_y = 25
+ pixel_y = 24
},
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/exodus/maintenance/sub/aft)
+"lf" = (
/turf/simulated/floor/airless,
/area/exodus/maintenance/sub/aft)
"lg" = (
@@ -4340,7 +4364,7 @@
/area/exodus/maintenance/sub/aft)
"lw" = (
/obj/structure/sign/warning/vacuum{
- dir = 4;
+ dir = 8;
pixel_x = 32
},
/obj/machinery/atmospherics/portables_connector{
@@ -5398,7 +5422,7 @@
"oE" = (
/obj/item/radio/intercom{
dir = 8;
- pixel_x = 21
+ pixel_x = 22
},
/turf/simulated/floor/tiled/dark,
/area/exodus/maintenance/telecomms)
@@ -5410,10 +5434,18 @@
dir = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_y = -32
+ pixel_y = -29;
+ dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/exodus/maintenance/telecomms)
+"pI" = (
+/obj/structure/sign/warning/lethal_turrets{
+ pixel_y = 32;
+ pixel_x = 34
+ },
+/turf/space,
+/area/space)
"qe" = (
/obj/machinery/light{
dir = 8
@@ -5440,6 +5472,18 @@
},
/turf/simulated/floor/bluegrid,
/area/exodus/maintenance/telecomms)
+"rK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/sign/warning/lethal_turrets{
+ dir = 1;
+ pixel_y = -32
+ },
+/turf/simulated/floor/airless,
+/area/space)
"rL" = (
/obj/item/stock_parts/subspace/analyzer,
/obj/item/stock_parts/subspace/analyzer,
@@ -5567,6 +5611,13 @@
/obj/structure/closet/toolcloset,
/turf/simulated/floor/tiled/dark/monotile,
/area/exodus/maintenance/telecomms)
+"zy" = (
+/obj/structure/sign/warning/lethal_turrets{
+ dir = 4;
+ pixel_x = -34
+ },
+/turf/space,
+/area/space)
"zH" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -5622,8 +5673,8 @@
/area/exodus/maintenance/telecomms)
"AE" = (
/obj/abstract/level_data_spawner/main_level{
- name = "Exodus Underlevel";
-},
+ name = "Exodus Underlevel"
+ },
/turf/space,
/area/space)
"AG" = (
@@ -5694,7 +5745,7 @@
/obj/structure/rack,
/obj/item/radio/intercom{
dir = 4;
- pixel_x = -21
+ pixel_x = -22
},
/turf/simulated/floor/tiled/monotile,
/area/exodus/maintenance/telecomms)
@@ -5724,6 +5775,13 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/maintenance/sub/aft)
+"CW" = (
+/obj/structure/sign/warning/lethal_turrets{
+ dir = 8;
+ pixel_x = 34
+ },
+/turf/space,
+/area/space)
"Dm" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -5842,7 +5900,7 @@
"LF" = (
/obj/item/radio/intercom{
dir = 4;
- pixel_x = -21
+ pixel_x = -22
},
/turf/simulated/floor/tiled/dark,
/area/exodus/maintenance/telecomms)
@@ -6016,11 +6074,12 @@
/area/exodus/maintenance/telecomms)
"Se" = (
/obj/machinery/newscaster{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/item/radio/intercom{
dir = 4;
- pixel_x = -21
+ pixel_x = -22
},
/turf/simulated/floor/lino,
/area/exodus/maintenance/telecomms)
@@ -6097,6 +6156,13 @@
},
/turf/simulated/floor/tiled/dark,
/area/exodus/maintenance/telecomms)
+"Wa" = (
+/obj/structure/sign/directions/science{
+ dir = 1;
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/exodus/maintenance/sub/starboard)
"Xu" = (
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/maintenance/sub/fore)
@@ -31445,25 +31511,25 @@ aa
aa
aa
aa
-dd
ab
ab
ab
ab
ab
-dd
ab
ab
ab
ab
ab
-dd
ab
ab
ab
ab
ab
-dd
+ab
+ab
+ab
+ab
aa
cv
eG
@@ -31703,18 +31769,18 @@ aa
aa
aa
ab
-aa
+aC
aa
ac
aa
ac
-aa
+zy
aa
aa
ac
aa
aa
-aa
+zy
aa
aa
aa
@@ -32167,7 +32233,7 @@ ad
ad
Xu
Xu
-aC
+ad
ad
aw
am
@@ -32212,7 +32278,7 @@ cv
cv
cv
ac
-dd
+ab
ab
ab
ab
@@ -32470,7 +32536,7 @@ aa
aa
aa
ab
-aa
+aC
aa
ac
aa
@@ -33261,8 +33327,8 @@ aa
aa
aa
aa
-aa
-dd
+fo
+ab
ac
cv
gm
@@ -33494,7 +33560,7 @@ cv
eG
cv
ac
-dd
+ab
ab
ab
ac
@@ -33752,7 +33818,7 @@ cS
cv
aa
ab
-aa
+aC
aa
ac
aa
@@ -35036,8 +35102,8 @@ cL
eG
cv
ac
+ab
dd
-aa
di
di
dn
@@ -35060,7 +35126,7 @@ fI
fV
fV
fV
-fV
+rK
gd
fV
gk
@@ -36322,7 +36388,7 @@ eG
cv
aa
ab
-aa
+pI
aa
ac
aa
@@ -36578,7 +36644,7 @@ cv
eG
cv
ac
-dd
+ab
ab
ab
ac
@@ -36859,8 +36925,8 @@ aa
aa
aa
aa
-aa
-dd
+fo
+ab
ac
cv
eG
@@ -37610,7 +37676,7 @@ aa
aa
aa
ab
-aa
+pI
aa
ac
aa
@@ -37866,7 +37932,7 @@ cv
cv
cv
aa
-dd
+ab
ab
ab
ab
@@ -38385,18 +38451,18 @@ cv
cv
aa
ab
-aa
+pI
aa
ac
aa
ac
-aa
+CW
aa
aa
ac
aa
aa
-aa
+CW
aa
aa
aa
@@ -38641,25 +38707,25 @@ cw
do
cv
aa
-dd
ab
ab
ab
ab
ab
-dd
ab
ab
ab
ab
ab
-dd
ab
ab
ab
ab
ab
-dd
+ab
+ab
+ab
+ab
aa
cv
eG
@@ -55612,8 +55678,8 @@ aa
aa
ez
ct
-fo
-NK
+ch
+Wa
NK
ch
ct
diff --git a/maps/exodus/exodus-2.dmm b/maps/exodus/exodus-2.dmm
index 3ec3c597cd4..a2fe2a02a5c 100644
--- a/maps/exodus/exodus-2.dmm
+++ b/maps/exodus/exodus-2.dmm
@@ -240,7 +240,8 @@
/area/space)
"aaK" = (
/obj/structure/sign/warning/airlock{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/obj/machinery/atmospherics/portables_connector,
/obj/machinery/portable_atmospherics/canister/air/airlock,
@@ -456,7 +457,8 @@
/area/exodus/security/range)
"abl" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -676,12 +678,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Prison Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/machinery/door/airlock/maintenance{
name = "Security Maintenance"
@@ -722,11 +721,11 @@
/area/exodus/security/range)
"abL" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/range)
@@ -953,7 +952,8 @@
/obj/machinery/airlock_sensor{
id_tag = "brig_solar_sensor";
pixel_x = 12;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -988,7 +988,8 @@
id_tag = "brig_solar_airlock";
name = "interior access button";
pixel_x = -25;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -1037,7 +1038,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/light/small/emergency{
dir = 1
@@ -1267,7 +1268,8 @@
dir = 8
},
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/main)
@@ -1277,7 +1279,7 @@
},
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/structure/table,
/obj/item/megaphone,
@@ -1354,7 +1356,7 @@
dir = 1
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/meeting)
@@ -1953,7 +1955,9 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/main)
"aen" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Security South"
+ },
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/main)
"aeo" = (
@@ -2794,12 +2798,9 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Prison Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/machinery/door/airlock/maintenance{
name = "Security Maintenance"
@@ -3108,7 +3109,7 @@
/area/exodus/security/main)
"agN" = (
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/navbeacon/SecurityD,
/obj/machinery/door/firedoor,
@@ -3184,7 +3185,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/plating,
/area/exodus/maintenance/security_starboard)
@@ -3233,13 +3235,10 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
/obj/structure/cable/green,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/turf/simulated/floor/plating,
/area/exodus/security/brig)
@@ -3275,12 +3274,9 @@
/turf/simulated/floor/tiled/dark,
/area/exodus/crew_quarters/heads/hos)
"ahg" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Prison Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/maintenance{
@@ -3310,13 +3306,10 @@
/area/exodus/security/brig/processing)
"ahk" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "lawyer_blast";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/security/brig)
@@ -3387,7 +3380,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/alarm{
pixel_y = 22
@@ -3399,7 +3392,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/brig/processing)
@@ -3433,7 +3426,7 @@
/turf/simulated/floor/tiled/dark,
/area/exodus/security/warden)
"ahv" = (
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/obj/structure/table/steel_reinforced,
/turf/simulated/floor/tiled/dark,
/area/exodus/security/warden)
@@ -3599,7 +3592,7 @@
/obj/machinery/keycard_auth{
dir = 8
},
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/turf/simulated/floor/tiled/dark,
/area/exodus/crew_quarters/heads/hos)
"ahP" = (
@@ -3639,12 +3632,10 @@
dir = 1
},
/obj/structure/window/reinforced/tinted{
- dir = 4;
- icon_state = "twindow"
+ dir = 4
},
/obj/structure/window/reinforced/tinted{
- dir = 8;
- icon_state = "twindow"
+ dir = 8
},
/obj/structure/grille,
/obj/structure/cable/green{
@@ -3669,7 +3660,7 @@
c_tag = "Security - Interrogation"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/dark,
/area/exodus/security/brig/interrogation)
@@ -3902,12 +3893,10 @@
/area/exodus/security/brig/interrogation)
"aiF" = (
/obj/structure/window/reinforced/tinted{
- dir = 4;
- icon_state = "twindow"
+ dir = 4
},
/obj/structure/window/reinforced/tinted{
- dir = 8;
- icon_state = "twindow"
+ dir = 8
},
/obj/structure/grille,
/obj/structure/cable/green{
@@ -4087,7 +4076,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/brig/interrogation)
@@ -4100,12 +4089,10 @@
"aja" = (
/obj/structure/window/reinforced/tinted,
/obj/structure/window/reinforced/tinted{
- dir = 4;
- icon_state = "twindow"
+ dir = 4
},
/obj/structure/window/reinforced/tinted{
- dir = 8;
- icon_state = "twindow"
+ dir = 8
},
/obj/structure/grille,
/obj/structure/cable/green,
@@ -4123,13 +4110,10 @@
/area/exodus/security/brig/interrogation)
"ajc" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "lawyer_blast";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/lawoffice)
@@ -4200,13 +4184,10 @@
"ajh" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -4301,13 +4282,10 @@
"ajp" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/structure/cable/green{
icon_state = "0-8"
@@ -4316,13 +4294,10 @@
/area/exodus/security/prison)
"ajq" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "brigobs";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -4339,13 +4314,10 @@
/area/exodus/security/brig/processing)
"ajs" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "brigobs";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "brigobs"
},
/obj/structure/cable/green{
icon_state = "0-8"
@@ -4368,12 +4340,9 @@
/area/exodus/security/main)
"aju" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "brigobs";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/structure/cable/green,
/obj/structure/cable/green{
@@ -4473,13 +4442,10 @@
/area/exodus/maintenance/evahallway)
"ajG" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/structure/cable/green{
icon_state = "0-2"
@@ -4534,7 +4500,8 @@
dir = 4
},
/obj/machinery/newscaster{
- pixel_x = -30
+ pixel_x = -30;
+ dir = 8
},
/obj/machinery/camera/network/security{
c_tag = "Security - HoS' Office";
@@ -4585,7 +4552,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/machinery/light,
/turf/simulated/floor/tiled/dark,
@@ -4670,7 +4637,7 @@
dir = 5
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/brig)
@@ -4769,7 +4736,7 @@
"akg" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/machinery/light,
/obj/machinery/light_switch{
@@ -4916,7 +4883,7 @@
dir = 5
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/brig)
@@ -5089,7 +5056,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/brig)
@@ -5465,7 +5432,8 @@
dir = 8
},
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -5481,13 +5449,10 @@
/area/exodus/security/detectives_office)
"alx" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/structure/cable/green,
/obj/structure/cable/green{
@@ -5675,7 +5640,8 @@
/area/exodus/security/brig/processing)
"alT" = (
/obj/machinery/light_switch{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/turf/simulated/floor/lino,
/area/exodus/security/detectives_office)
@@ -5891,7 +5857,8 @@
/obj/machinery/button/blast_door{
id_tag = "lawyer_blast";
name = "Privacy Shutters";
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/item/clipboard,
/obj/item/hand_labeler,
@@ -5929,13 +5896,10 @@
/area/exodus/security/lobby)
"amw" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -5959,12 +5923,9 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/substation/security)
"amy" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Prison Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/machinery/door/airlock/atmos{
name = "Atmospherics Maintenance"
@@ -6105,13 +6066,10 @@
/area/exodus/security/brig)
"amO" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/structure/cable/green,
/obj/structure/disposalpipe/segment{
@@ -6221,7 +6179,8 @@
/obj/machinery/button/flasher{
id_tag = "permflash";
name = "Brig flashes";
- pixel_y = -27
+ pixel_y = -27;
+ dir = 1
},
/obj/structure/cable/green{
icon_state = "1-4"
@@ -6272,12 +6231,9 @@
"anc" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/structure/cable/green,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/turf/simulated/floor/plating,
/area/exodus/security/prison)
@@ -6314,13 +6270,10 @@
/area/exodus/security/brig)
"ang" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "lawyer_blast";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -6340,12 +6293,9 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/dormitory)
"ani" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -6429,7 +6379,7 @@
/area/exodus/security/detectives_office)
"anr" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/prison)
@@ -6451,13 +6401,10 @@
"ant" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/structure/cable/green,
/turf/simulated/floor/plating,
@@ -6514,12 +6461,9 @@
/area/exodus/security/prison)
"any" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Prison Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating,
@@ -6843,7 +6787,8 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/exodus/lawoffice)
@@ -7058,8 +7003,8 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/auxsolarstarboard)
"aoK" = (
-/obj/machinery/faxmachine{
- anchored = FALSE;
+/obj/machinery/faxmachine/mapped{
+ anchored = 0
},
/obj/structure/table/reinforced,
/obj/machinery/newscaster{
@@ -7314,6 +7259,10 @@
},
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/effect/engine_setup/empty_canister,
+/obj/structure/sign/warning/radioactive{
+ dir = 4;
+ pixel_x = -32
+ },
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_room)
"apn" = (
@@ -7454,7 +7403,8 @@
dir = 1
},
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{
dir = 4;
@@ -8010,13 +7960,10 @@
/turf/simulated/floor/tiled/dark,
/area/exodus/lawoffice)
"aqH" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "lawyer_blast";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
@@ -8061,7 +8008,8 @@
/obj/machinery/airlock_sensor{
id_tag = "dorm_sensor";
pixel_x = 25;
- pixel_y = -8
+ pixel_y = -8;
+ dir = 8
},
/obj/effect/floor_decal/industrial/warning{
dir = 5
@@ -8180,7 +8128,8 @@
/obj/machinery/button/alternate/door{
id_tag = "visitdoor";
name = "Visitation Access";
- pixel_y = -28
+ pixel_y = -28;
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -8329,7 +8278,7 @@
"arl" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/machinery/forensic/dnascanner,
/obj/structure/disposalpipe/segment{
@@ -8369,7 +8318,8 @@
pixel_y = -25
},
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/structure/filing_cabinet,
/turf/simulated/floor/tiled/dark,
@@ -8379,7 +8329,8 @@
/obj/machinery/button/blast_door{
id_tag = "lawyer_blast";
name = "Privacy Shutters";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/item/pen/blue{
pixel_x = -5;
@@ -8571,13 +8522,10 @@
/area/exodus/maintenance/library)
"arL" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/structure/cable/green{
icon_state = "0-8"
@@ -8603,12 +8551,9 @@
/turf/simulated/floor/wood,
/area/exodus/maintenance/dormitory)
"arO" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Prison Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/glass/security{
@@ -8621,12 +8566,9 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/hallway/primary/fore)
"arP" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Prison Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/glass/security{
@@ -8653,7 +8595,8 @@
/area/exodus/maintenance/evahallway)
"arS" = (
/obj/machinery/light_switch{
- pixel_x = -24
+ pixel_x = -24;
+ dir = 4
},
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
@@ -8742,13 +8685,10 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/evahallway)
"asc" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -8952,7 +8892,8 @@
dir = 1
},
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{
dir = 4;
@@ -8988,7 +8929,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled/steel_grid,
@@ -9224,13 +9165,10 @@
"asY" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/structure/cable/green,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "visit_blast";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/security/prison/dorm)
@@ -9277,20 +9215,14 @@
/area/exodus/maintenance/evahallway)
"ate" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Security Blast Door"
},
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "visit_blast";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/obj/structure/cable/green,
/obj/structure/cable/green{
@@ -9299,11 +9231,12 @@
/turf/simulated/floor/plating,
/area/exodus/security/prison/dorm)
"atf" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/sign/warning/airlock,
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/plating,
-/area/exodus/hallway/secondary/entry/fore)
+/obj/structure/lattice,
+/obj/structure/sign/warning/biohazard{
+ pixel_y = 32
+ },
+/turf/space,
+/area/space)
"atg" = (
/turf/simulated/wall/r_wall/prepainted,
/area/exodus/security/prison/dorm)
@@ -9545,9 +9478,7 @@
/turf/simulated/floor/plating,
/area/exodus/hallway/secondary/entry/pods)
"atR" = (
-/obj/machinery/computer/cryopod{
- dir = 2
- },
+/obj/machinery/computer/cryopod,
/obj/machinery/camera/network/civilian_east{
c_tag = "Dormitory Cryo Storage"
},
@@ -9692,13 +9623,10 @@
/turf/simulated/floor/plating,
/area/exodus/chapel/main)
"aun" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -9774,7 +9702,8 @@
/area/exodus/hallway/primary/fore)
"auw" = (
/obj/machinery/atm{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -9989,9 +9918,7 @@
/area/exodus/hallway/primary/port)
"auU" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/machinery/computer/cryopod{
- dir = 2
- },
+/obj/machinery/computer/cryopod,
/obj/machinery/light_switch{
pixel_x = -25;
pixel_y = 24
@@ -10123,13 +10050,10 @@
/area/exodus/maintenance/auxsolarport)
"avj" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/machinery/door/firedoor,
/obj/structure/cable/green{
@@ -10271,7 +10195,7 @@
/obj/machinery/cryopod,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/white/monotile,
/area/exodus/crew_quarters/sleep/cryo)
@@ -10579,7 +10503,7 @@
c_tag = "Arrivals Escape Pods"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
@@ -10636,13 +10560,10 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/prison/dorm)
"awl" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Secure Gate";
- name = "Security Blast Door";
- opacity = FALSE
+ name = "Secure Gate"
},
/obj/machinery/door/firedoor,
/obj/machinery/door/window/brigdoor/eastleft{
@@ -10690,9 +10611,14 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/prison)
"awq" = (
-/obj/structure/sign/warning/airlock,
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/hallway/secondary/entry/fore)
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/structure/sign/warning/radioactive{
+ pixel_y = -32;
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/exodus/engineering/engine_room)
"awr" = (
/obj/machinery/seed_storage/garden{
dir = 1
@@ -10713,12 +10639,14 @@
"awu" = (
/obj/machinery/button/flasher{
id_tag = "IAflash";
- pixel_y = -30
+ pixel_y = -30;
+ dir = 1
},
/obj/machinery/button/blast_door{
id_tag = "visit_blast";
name = "Privacy Shutters";
- pixel_x = 25
+ pixel_x = 25;
+ dir = 8
},
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
@@ -10760,7 +10688,8 @@
/area/exodus/hallway/primary/fore)
"awA" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/effect/floor_decal/corner/red{
dir = 6
@@ -10949,7 +10878,8 @@
id_tag = "solar_tool_airlock";
name = "exterior access button";
pixel_x = -25;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -11055,7 +10985,7 @@
/area/exodus/hallway/primary/fore)
"axg" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/camera/network/civilian_east{
c_tag = "Dormitories Central"
@@ -11538,7 +11468,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/dark,
/area/exodus/crew_quarters/sleep)
@@ -11579,8 +11509,7 @@
/area/exodus/hallway/secondary/entry/pods)
"ays" = (
/obj/structure/bed/chair/comfy/beige{
- dir = 1;
- icon_state = "comfychair_preview"
+ dir = 1
},
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/steel_grid,
@@ -11983,7 +11912,8 @@
"ayZ" = (
/obj/effect/floor_decal/industrial/warning,
/obj/structure/sign/warning/airlock{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/entry/fore)
@@ -12165,7 +12095,8 @@
/area/exodus/hallway/secondary/entry/fore)
"azr" = (
/obj/machinery/status_display{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/steel_grid,
@@ -12434,7 +12365,7 @@
/obj/effect/floor_decal/corner/grey/three_quarters,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/crew_quarters/fitness)
@@ -12541,8 +12472,9 @@
},
/obj/machinery/airlock_sensor{
id_tag = "admin_shuttle_dock_sensor";
- pixel_x = -30;
- pixel_y = 8
+ pixel_x = -20;
+ pixel_y = 8;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/exodus/hallway/secondary/entry/fore)
@@ -12647,7 +12579,8 @@
/obj/machinery/airlock_sensor{
id_tag = "solar_tool_sensor";
pixel_x = 25;
- pixel_y = 12
+ pixel_y = 12;
+ dir = 8
},
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
dir = 8;
@@ -12715,7 +12648,8 @@
/area/exodus/gateway)
"aAH" = (
/obj/structure/sign/warning/airlock{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/machinery/portable_atmospherics/canister/air/airlock,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -12861,7 +12795,8 @@
/area/exodus/crew_quarters/sleep)
"aAU" = (
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/undies_wardrobe,
/obj/effect/floor_decal/corner/grey{
@@ -12988,7 +12923,8 @@
/area/exodus/crew_quarters/fitness)
"aBi" = (
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/closet/athletic_mixed,
/obj/effect/floor_decal/corner/grey{
@@ -13370,7 +13306,7 @@
/obj/random/tech_supply,
/obj/random/tech_supply,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/monotile,
/area/exodus/storage/primary)
@@ -14446,13 +14382,10 @@
/area/exodus/hallway/secondary/entry/port)
"aEA" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "heads_meeting";
- name = "Meeting Room Window Shutters";
- opacity = FALSE
+ name = "Meeting Room Window Shutters"
},
/obj/structure/cable/green{
icon_state = "0-2"
@@ -14519,13 +14452,10 @@
/area/exodus/library)
"aEG" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "heads_meeting";
- name = "Meeting Room Window Shutters";
- opacity = FALSE
+ name = "Meeting Room Window Shutters"
},
/obj/structure/cable/green{
icon_state = "0-2"
@@ -14560,13 +14490,10 @@
/area/shuttle/arrival/station)
"aEK" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "heads_meeting";
- name = "Meeting Room Window Shutters";
- opacity = FALSE
+ name = "Meeting Room Window Shutters"
},
/obj/structure/cable/green,
/obj/machinery/door/firedoor,
@@ -14736,13 +14663,10 @@
/area/exodus/maintenance/disposal)
"aFb" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/machinery/door/airlock/research{
name = "Mech Bay"
@@ -14974,13 +14898,10 @@
/area/exodus/security/nuke_storage)
"aFz" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/machinery/door/blast/shutters{
dir = 2;
@@ -14997,7 +14918,8 @@
/area/exodus/gateway)
"aFB" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -15020,6 +14942,9 @@
name = "Docking Port Airlock"
},
/obj/machinery/shield_diffuser,
+/obj/structure/sign/warning/airlock{
+ pixel_y = 32
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/hallway/secondary/entry/fore)
"aFE" = (
@@ -15061,7 +14986,8 @@
pixel_y = 30
},
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/obj/machinery/light{
dir = 1
@@ -15291,13 +15217,10 @@
/area/shuttle/arrival/station)
"aGc" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/turf/simulated/floor/plating,
/area/exodus/research/robotics)
@@ -15330,13 +15253,10 @@
name = "Robotics Desk"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/turf/simulated/floor/plating,
/area/exodus/research/robotics)
@@ -15358,13 +15278,10 @@
"aGg" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/turf/simulated/floor/plating,
/area/exodus/research/lab)
@@ -15389,13 +15306,10 @@
name = "plastic table frame"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/turf/simulated/floor/plating,
/area/exodus/research/lab)
@@ -15510,9 +15424,7 @@
/obj/effect/floor_decal/corner/white{
dir = 5
},
-/obj/machinery/computer/cryopod{
- dir = 2
- },
+/obj/machinery/computer/cryopod,
/turf/simulated/floor/tiled/dark/monotile,
/area/shuttle/arrival/station)
"aGy" = (
@@ -15638,7 +15550,7 @@
/obj/item/dice/d20,
/obj/item/dice,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/wood/walnut,
/area/exodus/library)
@@ -15648,13 +15560,10 @@
/area/exodus/gateway)
"aGO" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 8;
- icon_state = "shutter0";
id_tag = "chemwindow";
- name = "Chemistry Window Shutters";
- opacity = FALSE
+ name = "Chemistry Window Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/hallway/primary/central_two)
@@ -15741,9 +15650,11 @@
/turf/simulated/floor/tiled/dark,
/area/exodus/ai_monitored/storage/eva)
"aGX" = (
-/obj/structure/sign/warning/secure_area,
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/hallway/primary/starboard)
+/obj/structure/sign/warning/docking_area{
+ pixel_y = 32
+ },
+/turf/space,
+/area/space)
"aGY" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -15797,7 +15708,8 @@
id_tag = "escape_dock_south_airlock";
name = "interior access button";
pixel_x = 26;
- pixel_y = -26
+ pixel_y = -26;
+ dir = 1
},
/obj/effect/floor_decal/corner/white{
dir = 4
@@ -15868,7 +15780,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/dark,
/area/exodus/security/checkpoint2)
@@ -15899,7 +15811,8 @@
/area/exodus/crew_quarters/toilet)
"aHm" = (
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/turf/simulated/floor/tiled/freezer,
/area/exodus/crew_quarters/toilet)
@@ -15969,7 +15882,7 @@
"aHv" = (
/obj/structure/closet/wardrobe/chaplain_black,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/lino,
/area/exodus/chapel/office)
@@ -15998,13 +15911,10 @@
/obj/structure/window/reinforced{
dir = 8
},
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "chapel";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/turf/simulated/floor/tiled/dark,
/area/exodus/chapel/office)
@@ -16401,7 +16311,7 @@
},
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/entry/starboard)
@@ -16473,7 +16383,8 @@
/area/shuttle/arrival/station)
"aIl" = (
/obj/structure/sign/warning/secure_area{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/structure/closet/emcloset,
/turf/simulated/floor/plating,
@@ -16545,7 +16456,8 @@
/obj/machinery/button/access/exterior{
id_tag = "xeno_airlock_control";
name = "Xenobiology Access Button";
- pixel_x = -24
+ pixel_x = -24;
+ dir = 4
},
/obj/machinery/door/airlock/research{
autoclose = 0;
@@ -16802,7 +16714,7 @@
"aJb" = (
/obj/machinery/navbeacon/Bar,
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/loading{
@@ -16822,7 +16734,7 @@
/area/exodus/gateway)
"aJd" = (
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/navbeacon/Kitchen,
/obj/machinery/door/firedoor,
@@ -17526,7 +17438,8 @@
/area/exodus/hallway/primary/central_two)
"aKI" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/machinery/light{
dir = 4
@@ -17604,7 +17517,7 @@
c_tag = "Bar North"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/light{
dir = 1
@@ -17666,7 +17579,7 @@
"aKW" = (
/obj/machinery/navbeacon/Hydroponics,
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/loading,
@@ -17675,7 +17588,8 @@
"aKX" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/button/crematorium{
- pixel_x = 25
+ pixel_x = 25;
+ dir = 8
},
/obj/machinery/light/small{
dir = 4
@@ -17753,12 +17667,9 @@
"aLg" = (
/obj/structure/closet/coffin,
/obj/machinery/door/blast/shutters{
- density = FALSE;
dir = 2;
- icon_state = "shutter0";
id_tag = "chapel";
- name = "Privacy Shutters";
- opacity = FALSE
+ name = "Privacy Shutters"
},
/obj/machinery/door/window/westleft{
name = "Coffin Storage"
@@ -17806,7 +17717,8 @@
/area/exodus/chapel/main)
"aLo" = (
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 30;
+ dir = 4
},
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
@@ -17819,7 +17731,7 @@
},
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/dark,
/area/exodus/hydroponics)
@@ -18113,9 +18025,13 @@
id_tag = "escape_dock_north_airlock";
name = "exterior access button";
pixel_x = 4;
- pixel_y = -26
+ pixel_y = -26;
+ dir = 1
},
/obj/machinery/shield_diffuser,
+/obj/structure/sign/warning/docking_area{
+ pixel_y = 32
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/hallway/secondary/exit)
"aLX" = (
@@ -18226,7 +18142,7 @@
icon_state = "4-8"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/effect/floor_decal/corner/blue{
dir = 5
@@ -18964,6 +18880,10 @@
pixel_y = 26
},
/obj/machinery/shield_diffuser,
+/obj/structure/sign/warning/docking_area{
+ dir = 1;
+ pixel_y = -32
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/hallway/secondary/exit)
"aNN" = (
@@ -18972,7 +18892,8 @@
dir = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 27
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/ai_monitored/storage/eva)
@@ -18997,7 +18918,7 @@
icon_state = "4-8"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/effect/floor_decal/corner/lime{
dir = 5
@@ -19163,7 +19084,6 @@
/obj/structure/table/woodentable,
/obj/item/chems/food/chips,
/obj/random/single{
- icon_state = "cola";
name = "randomly spawned cola";
spawn_object = /obj/item/chems/drinks/cans/cola
},
@@ -19441,7 +19361,8 @@
/area/exodus/chapel/office)
"aOH" = (
/obj/machinery/newscaster{
- pixel_y = -28
+ pixel_y = -28;
+ dir = 1
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -19987,13 +19908,10 @@
/turf/simulated/floor/lino,
/area/exodus/crew_quarters/bar)
"aPL" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -20079,7 +19997,8 @@
/area/exodus/hydroponics)
"aPX" = (
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/obj/effect/floor_decal/corner/lime{
dir = 6
@@ -20178,7 +20097,6 @@
pixel_y = 2
},
/obj/random/single{
- icon_state = "lighter-g";
name = "randomly spawned lighter";
spawn_object = /obj/item/flame/lighter
},
@@ -20213,19 +20131,17 @@
/area/exodus/security/prison/dorm)
"aQo" = (
/obj/structure/sign/warning/airlock{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/exit)
"aQp" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 8;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -20240,7 +20156,7 @@
/obj/structure/closet/emcloset,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/monotile,
/area/exodus/hallway/primary/port)
@@ -20460,11 +20376,13 @@
/turf/simulated/floor/wood/walnut,
/area/exodus/library)
"aQU" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/sign/warning/docking_area,
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/plating,
-/area/exodus/hallway/secondary/exit)
+/obj/effect/floor_decal/corner/purple/full,
+/obj/structure/sign/warning/secure_area{
+ dir = 1;
+ pixel_y = -32
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/exodus/hallway/primary/starboard)
"aQV" = (
/obj/item/chems/glass/bucket,
/obj/effect/floor_decal/corner/lime{
@@ -20597,7 +20515,8 @@
dir = 8
},
/obj/machinery/button/windowtint{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/machinery/button/alternate/door{
desc = "A remote control-switch for the research doors.";
@@ -20676,13 +20595,10 @@
"aRt" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "acute1";
- name = "EMT Storage Privacy Shutters";
- opacity = FALSE
+ name = "EMT Storage Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/sleeper)
@@ -20738,12 +20654,10 @@
},
/obj/structure/window/reinforced/tinted,
/obj/structure/window/reinforced/tinted{
- dir = 4;
- icon_state = "twindow"
+ dir = 4
},
/obj/structure/window/reinforced/tinted{
- dir = 8;
- icon_state = "twindow"
+ dir = 8
},
/turf/simulated/floor/plating,
/area/exodus/chapel/main)
@@ -20775,7 +20689,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
@@ -20814,8 +20728,7 @@
/area/exodus/hallway/secondary/entry/port)
"aRJ" = (
/obj/structure/bed/chair/comfy/beige{
- dir = 1;
- icon_state = "comfychair_preview"
+ dir = 1
},
/turf/simulated/floor/lino,
/area/exodus/hallway/secondary/entry/starboard)
@@ -20937,13 +20850,10 @@
/area/exodus/hallway/secondary/exit)
"aSa" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "cmooffice";
- name = "CMO Office Privacy Shutters";
- opacity = FALSE
+ name = "CMO Office Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay3)
@@ -20955,25 +20865,19 @@
/area/exodus/hallway/primary/central_two)
"aSc" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "cmooffice";
- name = "CMO Office Privacy Shutters";
- opacity = FALSE
+ name = "CMO Office Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay)
"aSd" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "cmooffice";
- name = "CMO Office Privacy Shutters";
- opacity = FALSE
+ name = "CMO Office Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay2)
@@ -21049,13 +20953,10 @@
/area/exodus/library)
"aSk" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 8;
- icon_state = "shutter0";
id_tag = "cmooffice";
- name = "CMO Office Privacy Shutters";
- opacity = FALSE
+ name = "CMO Office Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay)
@@ -21101,25 +21002,19 @@
/area/exodus/chapel/main)
"aSp" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "cmooffice";
- name = "CMO Office Privacy Shutters";
- opacity = FALSE
+ name = "CMO Office Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay2)
"aSq" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 0;
- icon_state = "shutter0";
id_tag = "staffroom";
- name = "Staff Room Privacy Shutters";
- opacity = FALSE
+ name = "Staff Room Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/cryo)
@@ -21201,13 +21096,10 @@
/area/exodus/hallway/primary/port)
"aSA" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 8;
- icon_state = "shutter0";
id_tag = "staffroom";
- name = "Staff Room Privacy Shutters";
- opacity = FALSE
+ name = "Staff Room Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay2)
@@ -21259,7 +21151,8 @@
/area/exodus/maintenance/auxsolarport)
"aSF" = (
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -21295,7 +21188,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/entry/port)
@@ -21464,13 +21357,10 @@
icon_state = "left";
name = "Research Division Delivery"
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/structure/window/reinforced{
@@ -21483,13 +21373,10 @@
/turf/simulated/wall/prepainted,
/area/exodus/hydroponics/garden)
"aTf" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -21692,7 +21579,8 @@
/area/exodus/storage/tech)
"aTy" = (
/obj/machinery/atm{
- pixel_x = 24
+ pixel_x = 24;
+ dir = 8
},
/obj/effect/floor_decal/corner/lime{
dir = 6
@@ -21746,26 +21634,20 @@
/area/exodus/research/mixing)
"aTH" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "cmooffice";
- name = "CMO Office Privacy Shutters";
- opacity = FALSE
+ name = "CMO Office Privacy Shutters"
},
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating,
/area/exodus/medical/medbay4)
"aTI" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "cmooffice";
- name = "CMO Office Privacy Shutters";
- opacity = FALSE
+ name = "CMO Office Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay4)
@@ -21882,26 +21764,20 @@
/turf/simulated/floor/wood/walnut,
/area/exodus/crew_quarters/bar)
"aTY" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "misclab";
- name = "Test Chamber Blast Doors";
- opacity = FALSE
+ name = "misclab"
},
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/atmospherics/pipe/simple/visible,
/turf/simulated/floor/plating,
/area/exodus/research/misc_lab)
"aTZ" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "misclab";
- name = "Test Chamber Blast Doors";
- opacity = FALSE
+ name = "misclab"
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -21948,13 +21824,10 @@
/area/exodus/crew_quarters/bar)
"aUg" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "scanhideside";
- name = "Diagnostics Room Privacy Shutters";
- opacity = FALSE
+ name = "Diagnostics Room Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/medbay4)
@@ -22047,7 +21920,7 @@
c_tag = "Kitchen"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/light{
dir = 1
@@ -22264,7 +22137,8 @@
/area/exodus/chapel/main)
"aUT" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled/steel_grid,
@@ -22274,7 +22148,8 @@
dir = 8
},
/obj/machinery/vending/wallmed1{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/turf/simulated/floor/wood/walnut,
/area/exodus/crew_quarters/bar)
@@ -22301,7 +22176,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/random/tech_supply,
/obj/random/tech_supply,
@@ -22589,7 +22464,8 @@
pixel_y = 28
},
/obj/structure/closet/hydrant{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/exodus/storage/emergency2)
@@ -23105,26 +22981,20 @@
/area/exodus/crew_quarters/heads/chief)
"aWW" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/research)
"aWX" = (
/obj/machinery/light,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/research)
@@ -23158,13 +23028,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/research)
@@ -23185,7 +23052,8 @@
/area/exodus/turret_protected/ai_upload)
"aXd" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/storage/tools)
@@ -23302,7 +23170,8 @@
/area/exodus/storage/emergency2)
"aXs" = (
/obj/machinery/status_display{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 8
},
/obj/machinery/disposal,
/obj/structure/disposalpipe/trunk{
@@ -23350,13 +23219,10 @@
/turf/simulated/floor/plating,
/area/exodus/medical/patient_c)
"aXx" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -23366,13 +23232,10 @@
/area/exodus/research)
"aXy" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/machinery/door/airlock/research{
name = "Toxins Launch Room Access"
@@ -23464,13 +23327,10 @@
/area/exodus/maintenance/substation/medical)
"aXL" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/machinery/door/airlock/research{
name = "Toxins Launch Room"
@@ -23513,7 +23373,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/bridge)
@@ -23544,7 +23404,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/bridge)
@@ -23632,13 +23492,10 @@
/area/exodus/turret_protected/ai_upload)
"aYe" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "chemcounter";
- name = "Pharmacy Counter Shutters";
- opacity = FALSE
+ name = "Pharmacy Counter Shutters"
},
/obj/structure/table/reinforced,
/obj/machinery/door/window/westright{
@@ -23674,7 +23531,8 @@
},
/obj/machinery/airlock_sensor{
id_tag = "nuke_shuttle_dock_sensor";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/effect/floor_decal/industrial/warning{
dir = 6
@@ -23802,7 +23660,8 @@
/area/exodus/security/vacantoffice)
"aYy" = (
/obj/machinery/atm{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/machinery/camera/network/civilian_east{
c_tag = "Bar West";
@@ -23915,13 +23774,10 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology/xenoflora_storage)
@@ -24007,7 +23863,8 @@
dir = 4
},
/obj/machinery/newscaster{
- pixel_y = -28
+ pixel_y = -28;
+ dir = 1
},
/obj/effect/floor_decal/corner/blue{
dir = 10
@@ -24199,7 +24056,8 @@
/area/exodus/hallway/primary/central_one)
"aZi" = (
/obj/structure/sign/warning/secure_area{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/machinery/door/blast/regular/open{
dir = 4;
@@ -24275,13 +24133,10 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology/xenoflora)
@@ -24495,13 +24350,10 @@
/area/exodus/construction)
"aZS" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "surgeryobs";
- name = "Operating Theatre Privacy Shutters";
- opacity = FALSE
+ name = "Operating Theatre Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/surgeryobs)
@@ -25068,7 +24920,7 @@
"bbc" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -25315,12 +25167,13 @@
/area/exodus/library)
"bbF" = (
/obj/structure/table,
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/obj/machinery/light{
dir = 4
},
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/exodus/security/vacantoffice)
@@ -25474,7 +25327,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/dark,
/area/exodus/security/vacantoffice)
@@ -25555,13 +25408,10 @@
/area/exodus/bridge)
"bce" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/research/xenobiology)
@@ -25617,13 +25467,10 @@
/area/exodus/bridge)
"bck" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "surgeryobs";
- name = "Operating Theatre Privacy Shutters";
- opacity = FALSE
+ name = "Operating Theatre Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/surgery)
@@ -25734,13 +25581,10 @@
/area/exodus/hallway/primary/starboard)
"bcx" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 8;
- icon_state = "shutter0";
id_tag = "surgeryobs2";
- name = "Operating Theatre Privacy Shutters";
- opacity = FALSE
+ name = "Operating Theatre Privacy Shutters"
},
/turf/simulated/floor/plating,
/area/exodus/medical/surgery2)
@@ -26242,6 +26086,10 @@
id_tag = "admin_shuttle_dock_inner";
name = "Docking Port Airlock"
},
+/obj/structure/sign/warning/airlock{
+ dir = 4;
+ pixel_x = -32
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/hallway/secondary/entry/fore)
"bdz" = (
@@ -26599,7 +26447,8 @@
/area/exodus/security/vacantoffice)
"bet" = (
/obj/machinery/newscaster{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/structure/table{
name = "plastic table frame"
@@ -26639,7 +26488,9 @@
/turf/simulated/floor/carpet,
/area/exodus/bridge/meeting_room)
"bey" = (
-/obj/machinery/vending/coffee,
+/obj/machinery/vending/coffee{
+ dir = 1
+ },
/turf/simulated/floor/wood/walnut,
/area/exodus/library)
"bez" = (
@@ -26648,7 +26499,7 @@
/obj/item/storage/box,
/obj/item/storage/box,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/effect/floor_decal/corner/white{
dir = 4
@@ -26827,7 +26678,8 @@
/area/exodus/hallway/primary/central_two)
"beU" = (
/obj/machinery/atm{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/glass{
@@ -26875,7 +26727,8 @@
/area/exodus/hydroponics/garden)
"beZ" = (
/obj/structure/extinguisher_cabinet{
- pixel_y = -30
+ pixel_y = -29;
+ dir = 1
},
/obj/structure/flora/pottedplant{
icon_state = "plant-22"
@@ -26916,7 +26769,8 @@
"bfc" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -7;
- pixel_y = -32
+ pixel_y = -29;
+ dir = 1
},
/obj/effect/floor_decal/corner/white{
dir = 8
@@ -26924,7 +26778,8 @@
/obj/effect/floor_decal/corner/red,
/obj/machinery/vending/wallmed1{
pixel_x = 7;
- pixel_y = -32
+ pixel_y = -24;
+ dir = 1
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/exit)
@@ -27209,7 +27064,7 @@
/area/exodus/crew_quarters/captain)
"bfK" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/effect/floor_decal/corner/lime{
dir = 5
@@ -27270,7 +27125,8 @@
/area/exodus/hallway/primary/starboard)
"bfR" = (
/obj/machinery/status_display{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 8
},
/obj/machinery/light{
dir = 8
@@ -27362,7 +27218,8 @@
/obj/machinery/button/mass_driver{
id_tag = "enginecore";
name = "Emergency Core Eject";
- pixel_x = -20
+ pixel_x = -20;
+ dir = 4
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/structure/window/basic{
@@ -27375,13 +27232,10 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio3";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "Containment Blast Doors"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -27458,7 +27312,8 @@
"bgn" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/status_display{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 8
},
/obj/machinery/light{
dir = 8
@@ -27745,7 +27600,7 @@
},
/obj/structure/sign/directions/medical{
dir = 8;
- pixel_y = 32
+ pixel_y = 40
},
/obj/effect/floor_decal/corner/lime{
dir = 5
@@ -27771,7 +27626,8 @@
/area/exodus/turret_protected/ai)
"bgY" = (
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
@@ -27874,11 +27730,11 @@
icon_state = "0-4"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/item/radio/intercom{
dir = 4;
@@ -27897,7 +27753,8 @@
/area/exodus/hallway/primary/starboard)
"bhn" = (
/obj/structure/sign/warning/airlock{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/effect/floor_decal/corner/white{
dir = 8
@@ -27929,7 +27786,8 @@
"bhq" = (
/obj/machinery/airlock_sensor{
id_tag = "escape_dock_north_sensor";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/hallway/secondary/exit)
@@ -27944,7 +27802,8 @@
},
/obj/machinery/airlock_sensor{
id_tag = "centcom_shuttle_dock_sensor";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 4;
@@ -28480,7 +28339,7 @@
/area/exodus/bridge/meeting_room)
"biv" = (
/obj/structure/table/woodentable,
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/turf/simulated/floor/wood/walnut,
/area/exodus/bridge/meeting_room)
"biw" = (
@@ -28776,9 +28635,6 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/primary/central_one)
"bjc" = (
-/obj/abstract/landmark/start{
- name = "AI"
- },
/obj/machinery/newscaster{
pixel_x = 32;
pixel_y = 32
@@ -28807,9 +28663,9 @@
pixel_y = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
-/obj/structure/aicore/deactivated,
+/obj/abstract/landmark/start/ai,
/turf/simulated/floor/bluegrid,
/area/exodus/turret_protected/ai)
"bjd" = (
@@ -28841,10 +28697,10 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/item/radio/intercom{
dir = 8;
@@ -28871,7 +28727,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/lime{
dir = 10
@@ -28998,7 +28854,8 @@
/area/exodus/security/prison/dorm)
"bjs" = (
/obj/structure/extinguisher_cabinet{
- pixel_y = -30
+ pixel_y = -29;
+ dir = 1
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -29033,7 +28890,7 @@
"bjv" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/lime{
dir = 10
@@ -29125,7 +28982,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/carpet,
/area/exodus/bridge/meeting_room)
@@ -29203,7 +29060,8 @@
/area/exodus/bridge/meeting_room)
"bjN" = (
/obj/structure/extinguisher_cabinet{
- pixel_y = -30
+ pixel_y = -29;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -29312,7 +29170,8 @@
/area/exodus/turret_protected/ai)
"bjZ" = (
/obj/structure/extinguisher_cabinet{
- pixel_y = -30
+ pixel_y = -29;
+ dir = 1
},
/obj/effect/floor_decal/corner/lime{
dir = 10
@@ -29395,7 +29254,8 @@
/area/exodus/hallway/secondary/exit)
"bkh" = (
/obj/machinery/newscaster{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/effect/floor_decal/corner/white{
dir = 8
@@ -29619,7 +29479,9 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/office)
"bkC" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Supply Foyer"
+ },
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/office)
"bkD" = (
@@ -29700,7 +29562,8 @@
dir = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/wood/walnut,
/area/exodus/bridge/meeting_room)
@@ -29761,7 +29624,8 @@
dir = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_y = -30
+ pixel_y = -29;
+ dir = 1
},
/obj/effect/floor_decal/corner/lime{
dir = 10
@@ -29815,13 +29679,10 @@
/area/exodus/research/docking)
"bkV" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "medbayquar";
- name = "Medbay Emergency Quarantine Shutters";
- opacity = FALSE
+ name = "Medbay Emergency Quarantine Shutters"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled/techfloor/grid,
@@ -29844,13 +29705,10 @@
"bkX" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "medbayquar";
- name = "Medbay Emergency Quarantine Shutters";
- opacity = FALSE
+ name = "Medbay Emergency Quarantine Shutters"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled/techfloor/grid,
@@ -29931,7 +29789,8 @@
/area/exodus/quartermaster/storage)
"blg" = (
/obj/structure/sign/warning/secure_area{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/effect/floor_decal/corner/lime/full,
/obj/effect/floor_decal/industrial/loading{
@@ -30013,7 +29872,7 @@
/area/exodus/bridge/meeting_room)
"blt" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/carpet,
/area/exodus/crew_quarters/captain)
@@ -30226,7 +30085,8 @@
},
/obj/machinery/airlock_sensor{
id_tag = "specops_dock_sensor";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 4;
@@ -30259,7 +30119,7 @@
/area/exodus/medical/chemistry)
"blX" = (
/obj/structure/extinguisher_cabinet{
- pixel_y = 30
+ pixel_y = 29
},
/obj/machinery/camera/network/medbay{
c_tag = "Medbay - Chemistry"
@@ -30450,13 +30310,10 @@
/area/exodus/medical/genetics)
"bmq" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio3";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "Containment Blast Doors"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -30852,7 +30709,8 @@
pixel_y = 25
},
/obj/machinery/light_switch{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/structure/table{
name = "plastic table frame"
@@ -30895,7 +30753,7 @@
},
/obj/item/chems/glass/beaker/sulphuric,
/obj/structure/reagent_dispensers/acid{
- density = FALSE;
+ density = 0;
pixel_y = 32
},
/turf/simulated/floor/tiled/white/monotile,
@@ -30912,13 +30770,10 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio2";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "Containment Blast Doors"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -30931,13 +30786,14 @@
dir = 8
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/reception)
"bnm" = (
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 30;
+ dir = 4
},
/obj/structure/flora/pottedplant{
icon_state = "plant-10"
@@ -30946,7 +30802,7 @@
dir = 1
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/reception)
@@ -31111,7 +30967,8 @@
/area/exodus/quartermaster/office)
"bnB" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/effect/floor_decal/corner/blue{
dir = 6
@@ -31161,7 +31018,7 @@
"bnF" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/machinery/light/small,
/turf/simulated/floor/plating,
@@ -31536,7 +31393,7 @@
/turf/simulated/floor/tiled/dark,
/area/exodus/research/chargebay)
"boF" = (
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/obj/structure/table/woodentable,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -31616,7 +31473,8 @@
"boN" = (
/obj/structure/filing_cabinet/chestdrawer,
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/effect/floor_decal/corner/purple{
dir = 5
@@ -31649,7 +31507,8 @@
},
/obj/effect/floor_decal/industrial/warning,
/obj/structure/extinguisher_cabinet{
- pixel_x = -25
+ pixel_x = -29;
+ dir = 4
},
/obj/machinery/cell_charger,
/turf/simulated/floor/tiled/white,
@@ -31757,7 +31616,8 @@
/area/exodus/hallway/secondary/entry/aft)
"bpa" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/effect/floor_decal/corner/lime{
dir = 6
@@ -32036,7 +31896,8 @@
/area/exodus/maintenance/substation/command)
"bpE" = (
/obj/structure/closet/hydrant{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/obj/structure/cable{
icon_state = "1-2"
@@ -32146,7 +32007,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/wood/walnut,
/area/exodus/crew_quarters/captain)
@@ -32176,7 +32038,8 @@
/area/exodus/medical/chemistry)
"bpR" = (
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/cable/green{
icon_state = "1-4"
@@ -32252,13 +32115,10 @@
/area/exodus/medical/patient_wing/washroom)
"bpX" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio2";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "Containment Blast Doors"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -32299,7 +32159,7 @@
dir = 6
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/office)
@@ -32514,7 +32374,8 @@
/obj/item/clothing/suit/armor/captain,
/obj/item/clothing/head/helmet/space/capspace,
/obj/machinery/newscaster{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 8
},
/obj/random_multi/single_item/captains_spare_id,
/turf/simulated/floor/wood/walnut,
@@ -32585,7 +32446,8 @@
/area/exodus/maintenance/locker)
"bqH" = (
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -32793,10 +32655,10 @@
/obj/machinery/portable_atmospherics/powered/scrubber/huge,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/window/borosilicate_reinforced{
- dir = 4;
+ dir = 4
},
/obj/structure/window/borosilicate_reinforced{
- dir = 1;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/research/mixing)
@@ -32828,7 +32690,8 @@
dir = 4
},
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/machinery/porta_turret{
dir = 8
@@ -32918,13 +32781,10 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio1";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "Containment Blast Doors"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -32978,7 +32838,7 @@
id_tag = "packageExternal"
},
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/structure/cable{
icon_state = "4-8"
@@ -33230,13 +33090,10 @@
/area/exodus/medical/reception)
"brW" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio1";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio1"
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -33244,13 +33101,11 @@
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology)
"brX" = (
-/obj/structure/closet/secure_closet/medical_wall{
- name = "Pill Cabinet";
- pixel_y = -32
+/obj/structure/closet/secure_closet/medical_wall/pills{
+ pixel_y = -32;
+ dir = 1
},
/obj/item/chems/syringe/antibiotic,
-/obj/item/storage/pill_bottle/antitox,
-/obj/item/storage/pill_bottle/painkillers,
/obj/structure/table{
name = "plastic table frame"
},
@@ -33541,7 +33396,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
@@ -33587,10 +33442,10 @@
/obj/machinery/portable_atmospherics/powered/scrubber/huge,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/window/borosilicate_reinforced{
- dir = 8;
+ dir = 8
},
/obj/structure/window/borosilicate_reinforced{
- dir = 1;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/research/mixing)
@@ -33908,7 +33763,8 @@
dir = 8
},
/obj/machinery/vending/wallmed1{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/turf/simulated/floor/tiled/white,
/area/exodus/research)
@@ -33958,7 +33814,7 @@
"btA" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/structure/table/woodentable,
/obj/item/deck/cards{
@@ -34035,7 +33891,8 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
/obj/structure/sign/warning/airlock{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/research/docking)
@@ -34174,7 +34031,7 @@
"btW" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -34184,7 +34041,8 @@
"btX" = (
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
@@ -34234,7 +34092,8 @@
},
/obj/machinery/recharge_station,
/obj/structure/extinguisher_cabinet{
- pixel_y = -29
+ pixel_y = -29;
+ dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/exodus/research/chargebay)
@@ -34305,9 +34164,12 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/primary/starboard)
"bun" = (
-/obj/structure/sign/warning/secure_area,
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/research)
+/obj/structure/sign/warning/docking_area{
+ dir = 8;
+ pixel_x = 32
+ },
+/turf/space,
+/area/space)
"buo" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
@@ -34849,7 +34711,7 @@
"bvi" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/dark,
/area/exodus/turret_protected/ai_upload)
@@ -34877,13 +34739,10 @@
/turf/simulated/floor/tiled/white,
/area/exodus/medical/chemistry)
"bvl" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "medbayrecquar";
- name = "Medbay Emergency Quarantine Shutters";
- opacity = FALSE
+ name = "Medbay Emergency Quarantine Shutters"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
@@ -34894,13 +34753,10 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/medical/reception)
"bvm" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "medbayrecquar";
- name = "Medbay Emergency Quarantine Shutters";
- opacity = FALSE
+ name = "Medbay Emergency Quarantine Shutters"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled/techfloor/grid,
@@ -34937,7 +34793,8 @@
},
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -34964,13 +34821,10 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/incinerator)
"bvt" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "medbayrecquar";
- name = "Medbay Emergency Quarantine Shutters";
- opacity = FALSE
+ name = "Medbay Emergency Quarantine Shutters"
},
/obj/structure/cable/green{
icon_state = "2-8"
@@ -34979,13 +34833,10 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/medical/reception)
"bvu" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "medbayrecquar";
- name = "Medbay Emergency Quarantine Shutters";
- opacity = FALSE
+ name = "Medbay Emergency Quarantine Shutters"
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -35004,7 +34855,8 @@
pixel_y = 5
},
/obj/machinery/light_switch{
- pixel_x = -23
+ pixel_x = -23;
+ dir = 4
},
/obj/random/firstaid{
pixel_y = 1
@@ -35046,9 +34898,9 @@
"bvA" = (
/obj/effect/floor_decal/corner/paleblue,
/obj/structure/table,
-/obj/item/mmi,
-/obj/item/mmi,
-/obj/item/mmi,
+/obj/item/organ/internal/brain_interface/empty,
+/obj/item/organ/internal/brain_interface/empty,
+/obj/item/organ/internal/brain_interface/empty,
/turf/simulated/floor/tiled/dark,
/area/exodus/research/robotics)
"bvB" = (
@@ -35094,13 +34946,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techfloor/grid,
@@ -35220,25 +35069,19 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/structure/disposalpipe/segment,
/obj/structure/cable/green,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio4";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio4"
},
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology)
"bvX" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio4";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio4"
},
/obj/structure/cable/green,
/turf/simulated/floor/plating,
@@ -35260,13 +35103,10 @@
/area/exodus/hallway/secondary/entry/fore)
"bvZ" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio5";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio5"
},
/obj/structure/disposalpipe/segment,
/obj/structure/cable/green,
@@ -35274,13 +35114,10 @@
/area/exodus/research/xenobiology)
"bwa" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio5";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio5"
},
/obj/structure/cable/green,
/turf/simulated/floor/plating,
@@ -35364,13 +35201,10 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/structure/disposalpipe/segment,
/obj/structure/cable/green,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio6";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio6"
},
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology)
@@ -35398,13 +35232,10 @@
"bwq" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/structure/cable/green,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio6";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio6"
},
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology)
@@ -35469,13 +35300,13 @@
pixel_x = 24
},
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
+ },
+/obj/structure/sign/warning/secure_area{
+ pixel_y = 32
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/research)
@@ -35647,7 +35478,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/carpet,
/area/exodus/crew_quarters/captain)
@@ -35669,7 +35500,7 @@
c_tag = "Medbay Fore Starboard Corridor"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/medbay2)
@@ -36184,7 +36015,8 @@
"bxY" = (
/obj/machinery/fabricator,
/obj/machinery/light_switch{
- pixel_x = -27
+ pixel_x = -27;
+ dir = 4
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/office)
@@ -36718,7 +36550,7 @@
/obj/machinery/portable_atmospherics/powered/scrubber/huge,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/window/borosilicate_reinforced{
- dir = 1;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/research/mixing)
@@ -36730,7 +36562,7 @@
/obj/item/flash/synthetic,
/obj/item/flash/synthetic,
/obj/item/flash/synthetic,
-/obj/item/organ/internal/posibrain,
+/obj/item/organ/internal/brain/robotic,
/obj/item/robotanalyzer,
/obj/effect/floor_decal/corner/paleblue{
dir = 10
@@ -36912,7 +36744,7 @@
/obj/structure/table,
/obj/item/storage/firstaid/surgery,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/dark,
/area/exodus/research/robotics)
@@ -36946,7 +36778,7 @@
dir = 4
},
/obj/structure/window/borosilicate_reinforced{
- dir = 4;
+ dir = 4
},
/turf/simulated/floor/tiled/white,
/area/exodus/research/mixing)
@@ -36954,7 +36786,7 @@
/obj/machinery/portable_atmospherics/canister,
/obj/effect/floor_decal/corner/purple/three_quarters,
/obj/structure/window/borosilicate_reinforced{
- dir = 8;
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/exodus/research/mixing)
@@ -36987,7 +36819,7 @@
/obj/effect/floor_decal/corner/grey/diagonal{
dir = 4
},
-/obj/structure/closet/secure_closet/RD,
+/obj/structure/closet/secure_closet/research_director,
/obj/item/paper/monitorkey,
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/heads/hor)
@@ -37067,7 +36899,7 @@
/area/exodus/turret_protected/ai_upload_foyer)
"bzQ" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/teleport/hub,
/turf/simulated/floor/tiled/dark/monotile,
@@ -37145,7 +36977,8 @@
/area/exodus/teleporter)
"bAa" = (
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -37308,7 +37141,9 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/medical/medbay)
"bAp" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Medbay Storage"
+ },
/obj/structure/cable/green{
icon_state = "4-8"
},
@@ -37609,7 +37444,8 @@
/obj/item/clothing/glasses/welding,
/obj/item/clothing/glasses/welding,
/obj/machinery/light_switch{
- pixel_x = 25
+ pixel_x = 25;
+ dir = 8
},
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -37617,13 +37453,10 @@
/turf/simulated/floor/tiled/white,
/area/exodus/research/robotics)
"bAP" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "EngineBlast";
- name = "Engine Monitoring Room Blast Doors";
- opacity = FALSE
+ name = "EngineBlast"
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -37759,12 +37592,9 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/security/prison/dorm)
"bBb" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "EngineBlast";
- name = "Engine Monitoring Room Blast Doors";
- opacity = FALSE
+ name = "Engine Monitoring Room Blast Doors"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -37982,7 +37812,8 @@
},
/obj/effect/floor_decal/corner/grey/diagonal,
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/medbreak)
@@ -38158,9 +37989,7 @@
/turf/simulated/floor/tiled/white,
/area/exodus/medical/chemistry)
"bBV" = (
-/obj/machinery/computer/modular/telescreen/preset/generic{
- dir = 2
- },
+/obj/machinery/computer/modular/telescreen/preset/generic,
/obj/effect/floor_decal/corner/lime{
dir = 5
},
@@ -38231,7 +38060,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/office)
@@ -38255,7 +38084,8 @@
dir = 9
},
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/medbay2)
@@ -38311,13 +38141,10 @@
/turf/simulated/floor/tiled/white,
/area/exodus/research)
"bCl" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "researchlockdown";
- name = "Research Division Blast Doors";
- opacity = FALSE
+ name = "researchlockdown"
},
/obj/structure/extinguisher_cabinet{
pixel_x = -5;
@@ -38380,7 +38207,7 @@
/area/ship/exodus_pod_research)
"bCs" = (
/obj/structure/table,
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/obj/effect/floor_decal/corner/purple/diagonal{
dir = 4
},
@@ -38389,7 +38216,8 @@
"bCt" = (
/obj/machinery/light_switch{
pixel_x = -23;
- pixel_y = -23
+ pixel_y = -23;
+ dir = 4
},
/obj/structure/cable/green{
icon_state = "2-8"
@@ -38553,7 +38381,7 @@
"bCL" = (
/obj/machinery/navbeacon/Research,
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/loading{
@@ -38716,7 +38544,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/item/wrench,
/obj/machinery/camera/network/medbay{
@@ -38912,7 +38740,8 @@
/obj/item/clothing/accessory/stethoscope,
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/machinery/camera/network/medbay{
c_tag = "Medbay Equipment Storage";
@@ -38944,11 +38773,7 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/storage/primary)
"bDv" = (
-/obj/structure/closet/secure_closet/medical_wall{
- name = "Pill Cabinet"
- },
-/obj/item/storage/pill_bottle/antitox,
-/obj/item/storage/pill_bottle/painkillers,
+/obj/structure/closet/secure_closet/medical_wall/pills,
/obj/item/chems/syringe/antibiotic,
/obj/item/chems/syringe/antibiotic,
/obj/item/chems/syringe/stabilizer,
@@ -38995,7 +38820,7 @@
/obj/machinery/disposal,
/obj/structure/disposalpipe/trunk,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/plating,
/area/exodus/medical/genetics/cloning)
@@ -39085,7 +38910,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/storage)
@@ -39329,7 +39154,8 @@
id_tag = "QMLoad"
},
/obj/machinery/status_display/supply_display{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/storage)
@@ -39376,18 +39202,6 @@
"bEn" = (
/turf/simulated/wall/prepainted,
/area/exodus/maintenance/research_shuttle)
-"bEo" = (
-/obj/machinery/button/access/exterior{
- id_tag = "toxin_test_airlock";
- name = "exterior access button";
- pixel_x = -20;
- pixel_y = -20
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/airless,
-/area/exodus/research/test_area)
"bEp" = (
/obj/machinery/light,
/obj/structure/disposalpipe/segment{
@@ -39445,7 +39259,8 @@
/area/exodus/quartermaster/office)
"bEu" = (
/obj/machinery/atm{
- pixel_x = -28
+ pixel_x = -28;
+ dir = 4
},
/obj/effect/floor_decal/corner/brown{
dir = 9
@@ -39494,18 +39309,19 @@
dir = 5
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/medbay3)
"bEA" = (
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/obj/structure/table/glass,
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/crew_quarters/heads/hop)
"bEB" = (
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/obj/machinery/light{
dir = 4
@@ -39578,13 +39394,10 @@
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/teleporter)
"bEJ" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 8;
- icon_state = "shutter0";
id_tag = "medbayquar";
- name = "Medbay Emergency Quarantine Shutters";
- opacity = FALSE
+ name = "Medbay Emergency Quarantine Shutters"
},
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/loading{
@@ -39987,7 +39800,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/structure/cable{
icon_state = "4-8"
@@ -40022,7 +39835,7 @@
"bFF" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/janitor)
@@ -40278,7 +40091,8 @@
tag_airpump = "tox_airlock_pump";
tag_chamber_sensor = "tox_airlock_sensor";
tag_exterior_door = "tox_airlock_exterior";
- tag_interior_door = "tox_airlock_interior"
+ tag_interior_door = "tox_airlock_interior";
+ dir = 4
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -40554,7 +40368,7 @@
},
/obj/machinery/door/firedoor,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/effect/floor_decal/corner/paleblue{
dir = 5
@@ -40958,13 +40772,10 @@
"bHr" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology/xenoflora)
@@ -41009,7 +40820,8 @@
"bHx" = (
/obj/machinery/airlock_sensor{
id_tag = "research_dock_sensor";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 1;
@@ -41121,7 +40933,7 @@
preset_channels = list("Research","Miscellaneous Reseach")
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/reinforced,
/area/exodus/research/misc_lab)
@@ -41320,7 +41132,8 @@
"bHY" = (
/obj/machinery/disposal,
/obj/structure/sign/warning/airlock{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/obj/structure/disposalpipe/trunk,
/obj/effect/floor_decal/industrial/warning/corner,
@@ -41347,13 +41160,10 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/techfloor/grid,
@@ -41413,13 +41223,10 @@
/area/exodus/hallway/primary/central_two)
"bIh" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "acute1";
- name = "EMT Storage Privacy Shutters";
- opacity = FALSE
+ name = "EMT Storage Privacy Shutters"
},
/obj/effect/floor_decal/corner/paleblue{
dir = 10
@@ -41428,16 +41235,14 @@
/area/exodus/medical/sleeper)
"bIi" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "acute1";
- name = "EMT Storage Privacy Shutters";
- opacity = FALSE
+ name = "EMT Storage Privacy Shutters"
},
/obj/machinery/light_switch{
- pixel_x = 22
+ pixel_x = 22;
+ dir = 8
},
/obj/effect/floor_decal/corner/paleblue{
dir = 10
@@ -41630,7 +41435,8 @@
/area/exodus/research/docking)
"bIC" = (
/obj/machinery/light_switch{
- pixel_x = -22
+ pixel_x = -22;
+ dir = 4
},
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/sleeper{
@@ -42384,7 +42190,8 @@
"bJX" = (
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/machinery/constructable_frame/machine_frame,
/obj/item/shard,
@@ -42427,7 +42234,7 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/window/westleft{
name = "Server Room";
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/door/window/eastleft{
name = "Server Room"
@@ -42623,7 +42430,8 @@
},
/obj/effect/floor_decal/industrial/warning,
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/machinery/network/relay,
/turf/simulated/floor/tiled/steel_grid,
@@ -42732,7 +42540,7 @@
"bKL" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/lime{
dir = 10
@@ -42772,7 +42580,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/lime{
dir = 10
@@ -42828,7 +42636,7 @@
"bKW" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/lime{
dir = 10
@@ -43168,7 +42976,8 @@
/area/exodus/research/storage)
"bLL" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/research/storage)
@@ -43235,7 +43044,8 @@
/area/exodus/maintenance/atmos_control)
"bLQ" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/effect/floor_decal/corner/purple{
dir = 8
@@ -43249,7 +43059,7 @@
/obj/item/stool/padded,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/sleeper)
@@ -43272,9 +43082,7 @@
/obj/effect/floor_decal/corner/purple/diagonal{
dir = 4
},
-/obj/machinery/keycard_auth{
- dir = 2
- },
+/obj/machinery/keycard_auth,
/obj/machinery/computer/modular/preset/civilian,
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/heads/hor)
@@ -43336,7 +43144,8 @@
pixel_y = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/heads/hor)
@@ -43577,7 +43386,7 @@
/obj/random/medical,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/item/stack/tape_roll/barricade_tape/medical,
/turf/simulated/floor/tiled/white,
@@ -43602,7 +43411,8 @@
/obj/machinery/button/blast_door{
id_tag = "acutesep";
name = "Acute Separation Shutters";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/abstract/landmark/start{
name = "Paramedic"
@@ -43646,7 +43456,7 @@
dir = 8;
pixel_x = -24
},
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/obj/structure/table/glass,
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/heads/cmo)
@@ -43670,7 +43480,7 @@
/obj/structure/cable/green{
icon_state = "0-2"
},
-/obj/structure/closet/secure_closet/CMO,
+/obj/structure/closet/secure_closet/cmo,
/obj/item/clothing/mask/gas,
/obj/item/clothing/accessory/stethoscope,
/obj/item/storage/belt/medical,
@@ -43690,7 +43500,8 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_x = 22
+ pixel_x = 22;
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/medbay2)
@@ -43716,7 +43527,8 @@
/obj/machinery/button/blast_door{
id_tag = "staffroom";
name = "Staff Room Shutters Control";
- pixel_x = -26
+ pixel_x = -26;
+ dir = 4
},
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/white,
@@ -43780,7 +43592,7 @@
dir = 1
},
/obj/structure/bookcase/manuals/medical,
-/obj/item/book/manual/stasis,
+/obj/item/book/fluff/stasis,
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/medbreak)
@@ -44136,7 +43948,7 @@
/area/exodus/hallway/primary/aft)
"bNG" = (
/obj/structure/table,
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/qm)
"bNH" = (
@@ -44282,19 +44094,16 @@
"bNY" = (
/obj/machinery/navbeacon/Janitor,
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/exodus/janitor)
"bNZ" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "acutesep";
- name = "Acute Separation Shutters";
- opacity = FALSE
+ name = "Acute Separation Shutters"
},
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/corner/paleblue{
@@ -44519,7 +44328,7 @@
dir = 1
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/white,
/area/exodus/research/mixing)
@@ -45190,7 +44999,8 @@
"bPK" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 30;
+ dir = 4
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -45199,7 +45009,8 @@
/area/exodus/medical/medbay2)
"bPL" = (
/obj/machinery/light_switch{
- pixel_x = -22
+ pixel_x = -22;
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -45426,7 +45237,7 @@
},
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/research/mixing)
@@ -45557,7 +45368,8 @@
},
/obj/item/multitool,
/obj/machinery/status_display{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 8
},
/obj/structure/table/steel,
/obj/item/scanner/plant,
@@ -45782,12 +45594,13 @@
pixel_x = -22;
pixel_y = -32
},
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/obj/structure/closet/secure_closet/medical_wall{
name = "O- Blood Locker";
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/obj/effect/floor_decal/corner/pink{
dir = 9
@@ -45795,7 +45608,9 @@
/turf/simulated/floor/tiled/white,
/area/exodus/medical/sleeper)
"bQZ" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Emergency Recovery"
+ },
/turf/simulated/floor/tiled/white,
/area/exodus/medical/sleeper)
"bRa" = (
@@ -45806,13 +45621,10 @@
/obj/machinery/door/firedoor{
dir = 4
},
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "acute2";
- name = "Acute Privacy Shutters";
- opacity = FALSE
+ name = "Acute Privacy Shutters"
},
/obj/effect/floor_decal/corner/pink{
dir = 9
@@ -46463,7 +46275,7 @@
/obj/machinery/papershredder,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/heads/cmo)
@@ -46536,7 +46348,7 @@
/obj/effect/floor_decal/corner/grey/diagonal,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/medbreak)
@@ -46579,7 +46391,7 @@
/obj/effect/floor_decal/corner/grey/diagonal,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/white,
/area/exodus/crew_quarters/medbreak)
@@ -46707,14 +46519,13 @@
/area/exodus/research/storage)
"bSJ" = (
/obj/structure/bed/chair/comfy/teal{
- dir = 8;
- icon_state = "comfychair_preview"
+ dir = 8
},
/obj/effect/floor_decal/corner/paleblue{
dir = 5
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/medbay4)
@@ -46805,7 +46616,8 @@
dir = 1
},
/obj/structure/sign/warning/secure_area{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/research/mixing)
@@ -46961,7 +46773,8 @@
dir = 8
},
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/effect/floor_decal/corner/yellow{
dir = 9
@@ -46984,13 +46797,10 @@
/turf/simulated/wall/r_wall/prepainted,
/area/exodus/storage/tech)
"bTs" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "scanhide";
- name = "Diagnostics Room Separation Shutters";
- opacity = FALSE
+ name = "Diagnostics Room Separation Shutters"
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/medical/sleeper)
@@ -47002,31 +46812,26 @@
/turf/simulated/floor/tiled/white,
/area/exodus/research)
"bTu" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "scanhide";
- name = "Diagnostics Room Separation Shutters";
- opacity = FALSE
+ name = "Diagnostics Room Separation Shutters"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/medical/sleeper)
"bTw" = (
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/turf/simulated/floor/plating,
/area/exodus/storage/tech)
"bTx" = (
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 2;
- icon_state = "shutter0";
id_tag = "scanhide";
- name = "Diagnostics Room Separation Shutters";
- opacity = FALSE
+ name = "Diagnostics Room Separation Shutters"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/techfloor/grid,
@@ -47206,7 +47011,7 @@
/area/exodus/maintenance/medbay)
"bTP" = (
/obj/machinery/shieldwallgen{
- anchored = TRUE
+ anchored = 1
},
/obj/structure/cable/green{
icon_state = "0-2"
@@ -47249,13 +47054,10 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/medbay)
"bTS" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "misclab";
- name = "Test Chamber Blast Doors";
- opacity = FALSE
+ name = "misclab"
},
/obj/machinery/door/window/southright{
name = "Test Chamber"
@@ -47284,13 +47086,10 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/medbay)
"bTU" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "misclab";
- name = "Test Chamber Blast Doors";
- opacity = FALSE
+ name = "misclab"
},
/obj/machinery/door/window/southleft{
name = "Test Chamber"
@@ -47339,7 +47138,8 @@
/area/exodus/research/storage)
"bTY" = (
/obj/machinery/light_switch{
- pixel_y = -23
+ pixel_y = -23;
+ dir = 1
},
/obj/machinery/power/apc{
dir = 8;
@@ -47453,7 +47253,7 @@
/area/exodus/engineering)
"bUm" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -47674,8 +47474,7 @@
dir = 1
},
/obj/structure/bed/chair/comfy/teal{
- dir = 4;
- icon_state = "comfychair_preview"
+ dir = 4
},
/obj/effect/floor_decal/corner/paleblue{
dir = 5
@@ -47693,7 +47492,7 @@
/area/exodus/gateway)
"bUP" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/structure/hygiene/sink{
dir = 8;
@@ -48036,7 +47835,8 @@
dir = 1
},
/obj/machinery/airlock_sensor{
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/turf/simulated/floor/airless,
/area/exodus/research/mixing)
@@ -48148,7 +47948,7 @@
dir = 8
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/light/small/emergency,
/obj/effect/shuttle_landmark/escape_pod/start/pod4,
@@ -48244,7 +48044,8 @@
/area/exodus/engineering/engineering_monitoring)
"bVZ" = (
/obj/structure/sign/warning/airlock{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 8;
@@ -48266,7 +48067,7 @@
"bWa" = (
/obj/machinery/navbeacon/Medbay,
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/turf/simulated/floor/plating,
/area/exodus/medical/sleeper)
@@ -48292,7 +48093,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Emergency Scanning"
+ },
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/medical/sleeper)
"bWe" = (
@@ -48303,13 +48106,10 @@
/obj/machinery/door/firedoor{
dir = 4
},
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "scanhideside";
- name = "Diagnostics Room Privacy Shutters";
- opacity = FALSE
+ name = "Diagnostics Room Privacy Shutters"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -48659,7 +48459,8 @@
/area/exodus/research/mixing)
"bWR" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/wood/walnut,
/area/exodus/engineering/break_room)
@@ -48712,7 +48513,8 @@
dir = 8
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/engineering/engine_airlock)
@@ -48721,11 +48523,13 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_x = -27
+ pixel_x = -27;
+ dir = 4
},
/obj/machinery/airlock_sensor{
id_tag = "engine_room_airlock";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/machinery/atmospherics/portables_connector,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -48747,7 +48551,7 @@
"bXb" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/structure/closet/bombcloset,
/turf/simulated/floor/tiled/white,
@@ -48830,7 +48634,8 @@
/obj/machinery/airlock_sensor{
id_tag = "robotics_solar_sensor";
pixel_x = 12;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -48902,13 +48707,10 @@
/obj/machinery/door/firedoor{
dir = 4
},
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "scanhideside";
- name = "Diagnostics Room Privacy Shutters";
- opacity = FALSE
+ name = "Diagnostics Room Privacy Shutters"
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -48968,7 +48770,8 @@
/area/exodus/medical/medbay4)
"bXA" = (
/obj/machinery/newscaster{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/structure/disposalpipe/sortjunction{
dir = 8;
@@ -49043,7 +48846,8 @@
},
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -49134,7 +48938,8 @@
"bXO" = (
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -49346,7 +49151,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/item/radio/intercom{
dir = 8;
@@ -49544,7 +49349,8 @@
"bYA" = (
/obj/machinery/light,
/obj/structure/extinguisher_cabinet{
- pixel_y = -29
+ pixel_y = -29;
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/visible{
dir = 4
@@ -49582,7 +49388,8 @@
/obj/machinery/button/access/exterior{
id_tag = "virology_airlock_control";
name = "Virology Access Button";
- pixel_x = -24
+ pixel_x = -24;
+ dir = 4
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -49862,13 +49669,10 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "scanhideside";
- name = "Diagnostics Room Privacy Shutters";
- opacity = FALSE
+ name = "Diagnostics Room Privacy Shutters"
},
/obj/effect/floor_decal/corner/pink{
dir = 9
@@ -50004,7 +49808,8 @@
"bZC" = (
/obj/machinery/light_switch{
pixel_x = 22;
- pixel_y = -10
+ pixel_y = -10;
+ dir = 8
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -50071,7 +49876,8 @@
"bZJ" = (
/obj/machinery/atmospherics/pipe/simple/visible,
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/turf/simulated/floor/tiled/white,
/area/exodus/research/misc_lab)
@@ -50123,7 +49929,7 @@
"bZO" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/structure/bed/roller,
/obj/machinery/camera/network/medbay{
@@ -50353,7 +50159,8 @@
/area/exodus/engineering/break_room)
"cal" = (
/obj/machinery/newscaster{
- pixel_x = 28
+ pixel_x = 28;
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -50436,7 +50243,8 @@
},
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/medical/sleeper)
@@ -50475,8 +50283,7 @@
pixel_x = -22
},
/obj/structure/bed/chair/comfy/teal{
- dir = 4;
- icon_state = "comfychair_preview"
+ dir = 4
},
/obj/effect/floor_decal/corner/pink/three_quarters{
dir = 8
@@ -50607,7 +50414,8 @@
"caM" = (
/obj/structure/iv_drip,
/obj/machinery/light_switch{
- pixel_x = 22
+ pixel_x = 22;
+ dir = 8
},
/obj/machinery/power/apc{
dir = 1;
@@ -50633,7 +50441,8 @@
dir = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 27
+ pixel_x = 29;
+ dir = 8
},
/obj/structure/bed/roller,
/turf/simulated/floor/tiled/white,
@@ -50773,7 +50582,8 @@
/obj/machinery/button/blast_door{
id_tag = "disvent";
name = "Incinerator Vent Control";
- pixel_y = -24
+ pixel_y = -24;
+ dir = 1
},
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/steel_grid,
@@ -50982,7 +50792,7 @@
/area/exodus/crew_quarters/heads/chief)
"cbC" = (
/obj/structure/table/reinforced,
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/crew_quarters/heads/chief)
"cbD" = (
@@ -51086,7 +50896,8 @@
icon_state = "1-2"
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/medbay4)
@@ -51144,7 +50955,6 @@
/area/exodus/medical/patient_wing)
"cbW" = (
/obj/structure/closet/crate{
- icon_state = "crateopen";
name = "Grenade Crate";
opened = 1
},
@@ -51250,7 +51060,8 @@
dir = 4
},
/obj/machinery/newscaster{
- pixel_x = 28
+ pixel_x = 28;
+ dir = 4
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
@@ -51298,7 +51109,8 @@
/obj/machinery/button/access/exterior{
id_tag = "virologyq_airlock_control";
name = "Virology Quarantine Access Button";
- pixel_x = -24
+ pixel_x = -24;
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -51330,13 +51142,10 @@
"ccn" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/turf/simulated/floor/plating,
/area/exodus/research/xenobiology)
@@ -51351,13 +51160,10 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
-/obj/machinery/door/blast/shutters{
- density = FALSE;
+/obj/machinery/door/blast/shutters/open{
dir = 4;
- icon_state = "shutter0";
id_tag = "hop_office_desk";
- name = "HoP Office Privacy Shutters";
- opacity = FALSE
+ name = "HoP Office Privacy Shutters"
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -51418,6 +51224,12 @@
/obj/random/maintenance,
/obj/random/maintenance,
/obj/random/maintenance,
+/obj/machinery/button/access/interior{
+ id_tag = "toxin_test_airlock";
+ name = "interior access button";
+ pixel_x = 20;
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/exodus/maintenance/research_starboard)
"ccw" = (
@@ -51466,7 +51278,8 @@
"ccC" = (
/obj/structure/disposalpipe/segment,
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor,
/area/exodus/maintenance/atmos_control)
@@ -51499,7 +51312,8 @@
dir = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 27
+ pixel_x = 29;
+ dir = 8
},
/obj/machinery/alarm{
dir = 1;
@@ -51555,7 +51369,7 @@
dir = 5
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/medical/surgeryobs)
@@ -51777,7 +51591,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/freezer,
/area/exodus/crew_quarters/sleep/engi_wash)
@@ -51918,7 +51732,8 @@
dir = 4
},
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 30;
+ dir = 4
},
/obj/machinery/computer/modular/preset/medical{
dir = 8
@@ -52012,14 +51827,16 @@
/obj/item/pen,
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -36
+ pixel_y = -36;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
/obj/machinery/button/windowtint{
id_tag = "isoC_window_tint";
- pixel_y = -26
+ pixel_y = -26;
+ dir = 1
},
/obj/effect/floor_decal/corner/pink/three_quarters{
dir = 4
@@ -52029,7 +51846,8 @@
"cdB" = (
/obj/machinery/light,
/obj/machinery/newscaster{
- pixel_y = -28
+ pixel_y = -28;
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
@@ -52359,7 +52177,8 @@
pixel_x = 24
},
/obj/machinery/button/windowtint{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/machinery/light_switch{
pixel_x = -25;
@@ -52493,7 +52312,8 @@
/obj/effect/floor_decal/industrial/warning/full,
/obj/machinery/airlock_sensor{
id_tag = "merchant_shuttle_station_sensor";
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/hallway/secondary/entry/fore)
@@ -52624,7 +52444,8 @@
dir = 9
},
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/medical/surgeryobs)
@@ -52739,7 +52560,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/white/diagonal,
/turf/simulated/floor/tiled/steel_grid,
@@ -52793,7 +52614,7 @@
/area/exodus/engineering/workshop)
"cfj" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/item/stack/cable_coil,
/obj/item/stack/cable_coil{
@@ -52825,7 +52646,8 @@
/area/exodus/medical/biostorage)
"cfl" = (
/obj/structure/sign/warning/airlock{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/machinery/atmospherics/portables_connector{
dir = 8
@@ -53078,7 +52900,7 @@
"cfT" = (
/obj/machinery/computer/modular/preset/cardslot/command,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/crew_quarters/heads/chief)
@@ -53181,7 +53003,8 @@
dir = 1
},
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/obj/machinery/smartfridge/drying_rack,
/obj/effect/floor_decal/corner/purple/three_quarters{
@@ -53209,7 +53032,8 @@
"cgh" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/light_switch{
- pixel_x = 22
+ pixel_x = 22;
+ dir = 8
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -54052,7 +53876,8 @@
pixel_y = -20
},
/obj/structure/sign/warning/airlock{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/effect/floor_decal/industrial/warning,
/obj/machinery/atmospherics/pipe/manifold/visible{
@@ -54110,13 +53935,10 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/research/xenobiology)
"chT" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -54230,7 +54052,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/freezer,
/area/exodus/research/xenobiology/xenoflora_storage)
@@ -54260,7 +54082,8 @@
"cih" = (
/obj/machinery/light_switch{
pixel_x = 26;
- pixel_y = -6
+ pixel_y = -6;
+ dir = 8
},
/obj/structure/table/glass,
/turf/simulated/floor/tiled/white,
@@ -54397,7 +54220,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/machinery/portable_atmospherics/hydroponics,
/turf/simulated/floor/tiled/freezer,
@@ -54422,7 +54245,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/engineering/foyer)
@@ -54536,7 +54359,8 @@
/area/exodus/engineering/locker_room)
"ciR" = (
/obj/machinery/light_switch{
- pixel_x = -22
+ pixel_x = -22;
+ dir = 4
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/surgery)
@@ -54626,7 +54450,8 @@
/area/exodus/medical/surgery2)
"cje" = (
/obj/machinery/light_switch{
- pixel_x = 22
+ pixel_x = 22;
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/surgery2)
@@ -54771,7 +54596,7 @@
/obj/structure/closet/secure_closet/atmos_personal,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/item/tank/emergency/oxygen/engi,
/turf/simulated/floor/tiled/steel_grid,
@@ -55396,7 +55221,8 @@
id_tag = "solar_xeno_airlock";
name = "interior access button";
pixel_x = -25;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/machinery/atmospherics/pipe/manifold/visible{
dir = 8
@@ -55560,7 +55386,7 @@
"clg" = (
/obj/machinery/navbeacon/Engineering,
/obj/structure/plasticflaps{
- opacity = TRUE
+ opacity = 1
},
/obj/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/loading{
@@ -55671,7 +55497,7 @@
/area/exodus/research/xenobiology/xenoflora)
"clt" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/white,
/area/exodus/medical/virology)
@@ -55707,7 +55533,7 @@
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/engineering)
@@ -55935,9 +55761,11 @@
/turf/simulated/floor/tiled/white,
/area/exodus/medical/virology/access)
"clS" = (
-/obj/structure/sign/warning/docking_area,
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/maintenance/engi_shuttle)
+/obj/structure/sign/warning/radioactive{
+ pixel_y = 32
+ },
+/turf/space,
+/area/space)
"clT" = (
/obj/structure/sign/warning/fire{
pixel_y = 32
@@ -55964,15 +55792,21 @@
/turf/simulated/floor/tiled/freezer,
/area/exodus/research/xenobiology/xenoflora_storage)
"clW" = (
-/obj/structure/sign/warning/docking_area,
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/maintenance/engineering)
+/obj/machinery/button/access/exterior{
+ id_tag = "toxin_test_airlock";
+ name = "exterior access button";
+ pixel_x = -20;
+ dir = 4
+ },
+/turf/space,
+/area/space)
"clX" = (
/obj/structure/cable/green{
icon_state = "1-2"
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/plating,
/area/exodus/engineering/sublevel_access)
@@ -55980,7 +55814,8 @@
/obj/machinery/light,
/obj/machinery/light_switch{
name = "light switch ";
- pixel_y = -22
+ pixel_y = -22;
+ dir = 1
},
/obj/machinery/atmospherics/portables_connector{
dir = 4
@@ -56026,15 +55861,17 @@
/obj/item/radio/off,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/structure/table/steel,
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/engineering/workshop)
"cmc" = (
-/obj/structure/sign/warning/radioactive,
-/turf/simulated/wall/r_wall/prepainted,
-/area/exodus/engineering/engine_room)
+/obj/structure/sign/warning/biohazard{
+ pixel_y = 32
+ },
+/turf/space,
+/area/space)
"cmd" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -56347,7 +56184,7 @@
/area/exodus/engineering/locker_room)
"cmM" = (
/obj/machinery/door/blast/regular/open{
- density = FALSE;
+ density = 0;
dir = 4;
id_tag = "SupermatterPort";
name = "Reactor Blast Door"
@@ -56472,7 +56309,8 @@
dir = 1
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/effect/floor_decal/corner/blue{
dir = 6
@@ -56525,7 +56363,8 @@
id_tag = "robotics_solar_airlock";
name = "interior access button";
pixel_x = -25;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -56600,7 +56439,8 @@
/obj/machinery/airlock_sensor{
id_tag = "solar_xeno_sensor";
pixel_x = 25;
- pixel_y = 12
+ pixel_y = 12;
+ dir = 8
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 1;
@@ -56718,7 +56558,8 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/structure/sign/warning/compressed_gas{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_room)
@@ -56844,9 +56685,9 @@
/area/exodus/medical/virology)
"cnW" = (
/obj/structure/table,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OMinus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/ominus,
/obj/machinery/alarm{
dir = 8;
pixel_x = 24
@@ -56988,7 +56829,8 @@
/area/exodus/research/xenobiology)
"col" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled/white,
@@ -57048,11 +56890,12 @@
"cor" = (
/obj/machinery/airlock_sensor{
id_tag = "eng_al_c_snsr";
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/industrial/warning{
dir = 10
@@ -57169,7 +57012,7 @@
"coE" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/structure/table/reinforced,
/turf/simulated/floor/tiled/steel_grid,
@@ -57178,7 +57021,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
@@ -57322,13 +57165,10 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/medical/surgery2)
"coW" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "virologyquar";
- name = "Virology Emergency Quarantine Blast Doors";
- opacity = FALSE
+ name = "virologyquar"
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -57339,13 +57179,10 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/medical/virology/access)
"coX" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "virologyquar";
- name = "Virology Emergency Quarantine Blast Doors";
- opacity = FALSE
+ name = "virologyquar"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled/techfloor/grid,
@@ -57369,13 +57206,10 @@
/turf/simulated/floor/tiled/white,
/area/exodus/research/xenobiology)
"cpb" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
@@ -57389,13 +57223,10 @@
/turf/simulated/wall/prepainted,
/area/exodus/medical/surgery)
"cpd" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio3";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio3"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/door/window/westright{
@@ -57539,7 +57370,8 @@
/area/exodus/engineering/engineering_monitoring)
"cpy" = (
/obj/machinery/vending/wallmed1{
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/machinery/light{
dir = 8
@@ -57600,7 +57432,8 @@
dir = 8
},
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -57680,13 +57513,10 @@
"cpV" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Biohazard";
- name = "Biohazard Blast Doors";
- opacity = FALSE
+ name = "Biohazard"
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -57770,7 +57600,8 @@
/area/exodus/engineering)
"cqg" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -57804,11 +57635,11 @@
/area/exodus/medical/surgeryprep)
"cqm" = (
/obj/structure/table,
-/obj/item/chems/ivbag/blood/AMinus,
-/obj/item/chems/ivbag/blood/APlus,
-/obj/item/chems/ivbag/blood/BMinus,
-/obj/item/chems/ivbag/blood/BPlus,
-/obj/item/chems/ivbag/blood/OPlus,
+/obj/item/chems/ivbag/blood/aminus,
+/obj/item/chems/ivbag/blood/aplus,
+/obj/item/chems/ivbag/blood/bminus,
+/obj/item/chems/ivbag/blood/bplus,
+/obj/item/chems/ivbag/blood/oplus,
/obj/effect/floor_decal/corner/blue{
dir = 6
},
@@ -57860,7 +57691,8 @@
desc = "A remote control-switch for shutters.";
id_tag = "virologyquar";
name = "Virology Emergency Lockdown Control";
- pixel_y = -28
+ pixel_y = -28;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
@@ -57878,7 +57710,8 @@
id_tag = "engineering_dock_airlock";
name = "interior access button";
pixel_x = -30;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
@@ -57988,21 +57821,27 @@
desc = "A remote control-switch for the engine control room blast doors.";
id_tag = "EngineBlast";
name = "Engine Monitoring Room Blast Doors";
- pixel_y = -3
+ pixel_y = -3;
+ dir = 1;
+ directional_offset = null
},
/obj/machinery/button/blast_door{
desc = "A remote control-switch for the engine charging port.";
id_tag = "SupermatterPort";
name = "Reactor Blast Doors";
pixel_x = -6;
- pixel_y = 7
+ pixel_y = 7;
+ dir = 1;
+ directional_offset = null
},
/obj/machinery/button/toggle{
desc = "A remote control-switch for the engine emitter.";
id_tag = "EngineEmitter";
name = "Engine Emitter";
pixel_x = 6;
- pixel_y = 7
+ pixel_y = 7;
+ dir = 1;
+ directional_offset = null
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -58010,13 +57849,10 @@
/area/exodus/engineering/engine_monitoring)
"cqO" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "EngineRadiatorViewport";
- name = "Engine Radiator Viewport Shutter";
- opacity = FALSE
+ name = "EngineRadiatorViewport"
},
/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 4
@@ -58107,7 +57943,8 @@
},
/obj/structure/disposalpipe/segment,
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/obj/effect/floor_decal/corner/yellow{
dir = 6
@@ -58179,7 +58016,8 @@
/obj/machinery/airlock_sensor{
id_tag = "engineering_dock_sensor";
pixel_x = -25;
- pixel_y = 8
+ pixel_y = 8;
+ dir = 4
},
/obj/effect/floor_decal/industrial/warning{
dir = 10
@@ -58336,6 +58174,11 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/machinery/button/access/exterior{
+ id_tag = "engineering_dock_airlock";
+ name = "exterior access button";
+ pixel_x = 25
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/exodus/maintenance/engi_shuttle)
"crI" = (
@@ -58604,6 +58447,9 @@
/obj/machinery/camera/network/engine{
c_tag = "Engine Radiator"
},
+/obj/structure/sign/warning/docking_area{
+ pixel_y = 32
+ },
/turf/space,
/area/space)
"csB" = (
@@ -58611,7 +58457,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/computer/robotics,
/turf/simulated/floor/tiled/white,
@@ -58671,13 +58517,10 @@
/area/exodus/medical/surgery2)
"csI" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "EngineRadiatorViewport";
- name = "Engine Radiator Viewport Shutter";
- opacity = FALSE
+ name = "EngineRadiatorViewport"
},
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_room)
@@ -59008,25 +58851,19 @@
/area/exodus/medical/virology)
"ctK" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "EngineRadiatorViewport";
- name = "Engine Radiator Viewport Shutter";
- opacity = FALSE
+ name = "EngineRadiatorViewport"
},
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_room)
"ctM" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "EngineRadiatorViewport";
- name = "Engine Radiator Viewport Shutter";
- opacity = FALSE
+ name = "EngineRadiatorViewport"
},
/obj/machinery/atmospherics/pipe/simple/visible/black,
/turf/simulated/floor/plating,
@@ -59066,13 +58903,10 @@
/turf/simulated/floor/tiled/white,
/area/exodus/medical/virology)
"ctS" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio2";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio2"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/door/window/westright{
@@ -59437,7 +59271,7 @@
icon_state = "0-2"
},
/obj/machinery/generator{
- anchored = TRUE;
+ anchored = 1;
dir = 4
},
/obj/structure/cable/yellow,
@@ -59449,7 +59283,8 @@
id_tag = "dorm_airlock";
name = "exterior access button";
pixel_x = -25;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/turf/space,
/area/space)
@@ -60290,13 +60125,10 @@
/turf/simulated/floor/tiled/white,
/area/exodus/medical/virology)
"cxV" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "xenobio1";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio1"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/door/window/westright{
@@ -60404,7 +60236,8 @@
/area/exodus/maintenance/incinerator)
"cyG" = (
/obj/structure/extinguisher_cabinet{
- pixel_x = -24
+ pixel_x = -29;
+ dir = 4
},
/obj/machinery/camera/network/exodus{
c_tag = "Arrivals Southeast";
@@ -60745,7 +60578,8 @@
},
/obj/machinery/airlock_sensor{
id_tag = "exodus_rescue_shuttle_dock_sensor";
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/exodus/hallway/secondary/entry/aft)
@@ -60939,13 +60773,10 @@
name = "Containment Pen";
req_access = list("ACCESS_XENOBIO")
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio4";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio4"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/reinforced,
@@ -61101,7 +60932,9 @@
/turf/simulated/floor/tiled/white,
/area/exodus/medical/virology)
"cCW" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Virology Cafeteria"
+ },
/turf/simulated/floor/tiled/white,
/area/exodus/medical/virology)
"cCX" = (
@@ -61131,7 +60964,8 @@
dir = 1
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 25
+ pixel_x = 29;
+ dir = 8
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/secondary/entry/pods)
@@ -61141,13 +60975,10 @@
name = "Containment Pen";
req_access = list("ACCESS_XENOBIO")
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio5";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio5"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/reinforced,
@@ -61168,9 +60999,7 @@
/turf/simulated/floor/plating,
/area/exodus/engineering/drone_fabrication)
"cDi" = (
-/obj/machinery/computer/cryopod/robot{
- dir = 2
- },
+/obj/machinery/computer/cryopod/robot,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
@@ -61272,12 +61101,6 @@
/turf/simulated/floor/plating,
/area/exodus/maintenance/engineering)
"cDE" = (
-/obj/machinery/button/access/interior{
- id_tag = "toxin_test_airlock";
- name = "interior access button";
- pixel_x = 20;
- pixel_y = 20
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -61774,7 +61597,8 @@
"cGo" = (
/obj/structure/table/reinforced,
/obj/machinery/light_switch{
- pixel_x = 27
+ pixel_x = 27;
+ dir = 8
},
/obj/effect/floor_decal/corner/yellow{
dir = 6
@@ -61790,13 +61614,10 @@
name = "Containment Pen";
req_access = list("ACCESS_XENOBIO")
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "xenobio6";
- name = "Containment Blast Doors";
- opacity = FALSE
+ name = "xenobio6"
},
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/reinforced,
@@ -61986,7 +61807,8 @@
id_tag = "engine_electrical_maintenance";
name = "Door Bolt Control";
pixel_x = 5;
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "0-4"
@@ -62128,6 +61950,10 @@
dir = 9
},
/obj/effect/floor_decal/industrial/warning,
+/obj/structure/sign/warning/radioactive{
+ dir = 8;
+ pixel_x = 32
+ },
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_waste)
"cHY" = (
@@ -62142,7 +61968,7 @@
/area/exodus/engineering/engine_room)
"cIa" = (
/obj/machinery/emitter{
- anchored = TRUE;
+ anchored = 1;
id_tag = "EngineEmitter";
state = 2
},
@@ -62308,7 +62134,7 @@
/area/exodus/engineering/engine_room)
"cIF" = (
/obj/machinery/atmospherics/binary/circulator{
- anchored = TRUE;
+ anchored = 1;
dir = 1
},
/turf/simulated/floor/plating,
@@ -62324,7 +62150,7 @@
/area/exodus/engineering/engine_room)
"cIH" = (
/obj/machinery/atmospherics/binary/circulator{
- anchored = TRUE
+ anchored = 1
},
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_room)
@@ -62555,6 +62381,10 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
+/obj/structure/sign/warning/radioactive{
+ dir = 8;
+ pixel_x = 32
+ },
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_waste)
"cJF" = (
@@ -62677,7 +62507,7 @@
/area/exodus/maintenance/engi_engine)
"cJZ" = (
/obj/machinery/generator{
- anchored = TRUE;
+ anchored = 1;
dir = 4
},
/obj/structure/cable/yellow,
@@ -62723,7 +62553,8 @@
desc = "A remote control-switch for the engine radiator viewport shutters.";
id_tag = "EngineRadiatorViewport";
name = "Engine Radiator Viewport Shutters";
- pixel_x = 25
+ pixel_x = 25;
+ dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/visible/black{
dir = 4
@@ -62813,14 +62644,12 @@
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_room)
"cKH" = (
-/obj/machinery/button/access/exterior{
- id_tag = "engineering_dock_airlock";
- name = "exterior access button";
- pixel_x = -25;
- pixel_y = -8
+/obj/structure/sign/warning/radioactive{
+ dir = 4;
+ pixel_x = -32
},
-/turf/space,
-/area/space)
+/turf/simulated/floor/plating,
+/area/exodus/engineering/engine_room)
"cKI" = (
/mob/living/simple_animal/mouse,
/turf/simulated/floor/plating,
@@ -63091,6 +62920,10 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
+/obj/structure/sign/warning/radioactive{
+ pixel_y = -32;
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/exodus/engineering/engine_room)
"cLB" = (
@@ -63138,7 +62971,8 @@
/obj/machinery/button/blast_door{
id_tag = "EngineVent";
name = "Reactor Ventillatory Control";
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/structure/window/reinforced,
/turf/simulated/floor/plating,
@@ -63356,8 +63190,8 @@
/area/ship/exodus_pod_mining)
"doN" = (
/obj/abstract/level_data_spawner/main_level{
- name = "Exodus Operations Deck";
-},
+ name = "Exodus Operations Deck"
+ },
/turf/space,
/area/space)
"drB" = (
@@ -63469,6 +63303,12 @@
},
/turf/simulated/floor/plating,
/area/ship/exodus_pod_research)
+"elq" = (
+/obj/machinery/hologram/holopad{
+ holopad_id = "Security North"
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/exodus/security/main)
"esY" = (
/obj/effect/paint_stripe/blue,
/turf/simulated/wall/titanium,
@@ -63836,9 +63676,7 @@
/area/ship/exodus_pod_mining)
"igB" = (
/obj/machinery/hologram/holopad,
-/obj/abstract/landmark{
- name = "Observer-Start"
- },
+/obj/abstract/landmark/latejoin/observer,
/turf/simulated/floor/tiled/dark/monotile,
/area/shuttle/arrival/station)
"ihN" = (
@@ -64554,7 +64392,6 @@
backwards = 8;
dir = 9;
forwards = 2;
- icon_state = "conveyor1";
id_tag = "cargo_mining_conveyor";
movedir = 6
},
@@ -64608,7 +64445,8 @@
/area/exodus/crew_quarters/kitchen)
"sGZ" = (
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/effect/floor_decal/industrial/warning{
dir = 6
@@ -64909,6 +64747,12 @@
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/hallway/primary/port)
+"woj" = (
+/obj/machinery/hologram/holopad{
+ holopad_id = "Library Rec Area"
+ },
+/turf/simulated/floor/wood/walnut,
+/area/exodus/library)
"wqh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/corner/lime{
@@ -64919,7 +64763,7 @@
"wsi" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/white{
dir = 10
@@ -64950,9 +64794,6 @@
/obj/structure/table,
/turf/simulated/floor/tiled/white,
/area/exodus/research/robotics)
-"wTf" = (
-/turf/simulated/floor/airless,
-/area/exodus/turret_protected/ai)
"wTp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
@@ -64980,7 +64821,8 @@
/obj/item/stack/material/ingot/mapped/osmium/ten,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/status_display{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled/steel_grid,
/area/exodus/quartermaster/miningdock)
@@ -65027,6 +64869,12 @@
/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled/white,
/area/exodus/research)
+"xTe" = (
+/obj/machinery/hologram/holopad{
+ holopad_id = "Sorting Office"
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/exodus/quartermaster/office)
"xVx" = (
/obj/structure/bed/chair/shuttle/black{
dir = 8
@@ -72634,7 +72482,7 @@ crP
cLU
cLU
cLU
-atf
+cec
aFD
cec
cLU
@@ -73147,7 +72995,7 @@ cLU
cec
cec
cec
-awq
+atS
cec
ceI
cec
@@ -88594,7 +88442,7 @@ bfm
bez
bga
bga
-bkC
+xTe
bga
bga
bga
@@ -91994,11 +91842,11 @@ bZQ
cDW
cDW
cGt
-cmc
+cGt
cmo
uGq
cmr
-cmc
+cGt
cGt
cGt
cGt
@@ -92255,7 +92103,7 @@ apm
cIC
cIZ
cJs
-cHb
+cKH
cIQ
cLI
bIM
@@ -92516,9 +92364,9 @@ cHb
cHb
cJo
bIM
-bIM
-cmc
-cLU
+awq
+cGt
+clS
cLU
aaI
cLU
@@ -93985,7 +93833,7 @@ auR
avS
avU
fPF
-wTf
+eEn
beb
bgW
aoi
@@ -94962,7 +94810,7 @@ acO
adm
adm
adP
-aen
+elq
aev
aeX
afp
@@ -95601,8 +95449,8 @@ cuI
cuH
cJZ
cLA
-cmc
-cLU
+cGt
+clS
cLU
aaI
cLU
@@ -96359,7 +96207,7 @@ cdW
czA
aaf
cLU
-cLU
+bun
ccp
cHB
cHB
@@ -96616,7 +96464,7 @@ cCz
byA
byA
byA
-clS
+byA
rQB
cKX
gwY
@@ -97644,7 +97492,7 @@ cFC
byF
aaf
cLU
-cKH
+cLU
rQB
cpF
cLj
@@ -98160,11 +98008,11 @@ cea
cea
cea
cea
-clW
+cea
aQh
aQh
aQh
-aIo
+apc
csA
csX
csX
@@ -98932,7 +98780,7 @@ bNU
bzX
bzX
bNU
-cLU
+aGX
cGQ
cHy
cHP
@@ -103298,8 +103146,8 @@ cqv
cqv
cqv
cqv
-cfQ
-cLU
+cqv
+cmc
aaf
cLU
cLU
@@ -107405,8 +107253,8 @@ cqv
cqv
cqv
cqv
-cfQ
-aaf
+cqv
+atf
cCJ
aap
cLU
@@ -108111,7 +107959,7 @@ aJD
aJJ
aJW
aMg
-qlX
+woj
hLX
aRK
hLX
@@ -108688,8 +108536,8 @@ cdO
cdO
cdO
cdO
-bXx
-cLU
+cdO
+cmc
cLU
cLU
cqD
@@ -109722,8 +109570,8 @@ cdO
cdO
cdO
cdO
-bXx
-aaf
+cdO
+atf
cCJ
cLU
cLU
@@ -111468,11 +111316,11 @@ bhl
biK
rkN
brU
-brU
-aGX
+aQU
+blO
bqN
bst
-bun
+bww
bwy
aMd
bCh
@@ -112806,8 +112654,8 @@ cdO
cdO
cdO
cdO
-bXx
-aaf
+cdO
+atf
cCJ
cLU
aaf
@@ -115569,7 +115417,7 @@ cLU
cLU
cLU
cLU
-aQU
+azP
aLW
azP
aaf
@@ -115577,7 +115425,7 @@ cLU
aaf
azP
aNM
-aQU
+azP
aaf
cLU
cLU
@@ -117150,8 +116998,8 @@ aaf
cLU
aaf
cLU
-bEo
-cLU
+ceq
+clW
aaf
cLU
cLU
diff --git a/maps/exodus/exodus-admin.dmm b/maps/exodus/exodus-admin.dmm
index 7e2f4ebc98b..50d1a80ed0b 100644
--- a/maps/exodus/exodus-admin.dmm
+++ b/maps/exodus/exodus-admin.dmm
@@ -218,7 +218,7 @@
/area/centcom)
"ala" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/structure/decoy{
name = "A.L.I.C.E."
@@ -340,7 +340,7 @@
},
/obj/structure/showcase{
desc = "A self-contained autopilot that controls supply drones.";
- icon_state = "comm_server";
+ icon_state = "showcase_5";
name = "Supply Drone Virtual Intelligence"
},
/turf/simulated/floor/plating,
@@ -782,7 +782,9 @@
/turf/simulated/floor/tiled/dark,
/area/shuttle/escape_shuttle)
"aHt" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Emergency Shuttle Bridge"
+ },
/obj/effect/floor_decal/corner/blue{
dir = 10
},
@@ -792,7 +794,7 @@
/obj/machinery/light,
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -22
+ pixel_y = -30
},
/obj/effect/floor_decal/corner/blue{
dir = 10
@@ -1169,7 +1171,9 @@
/turf/simulated/floor/tiled/dark/monotile,
/area/shuttle/escape_shuttle)
"aLd" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Emergency Shuttle Brig"
+ },
/turf/simulated/floor/tiled/dark/monotile,
/area/shuttle/escape_shuttle)
"aLe" = (
@@ -1241,7 +1245,8 @@
/area/centcom/holding)
"aLs" = (
/obj/structure/closet/hydrant{
- pixel_x = 30
+ pixel_x = 30;
+ dir = 8
},
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -1311,12 +1316,9 @@
/turf/space,
/area/shuttle/escape_shuttle)
"aLF" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "CentComPort";
- name = "Security Doors";
- opacity = FALSE
+ name = "Security Doors"
},
/turf/unsimulated/floor{
icon_state = "steel"
@@ -1468,7 +1470,8 @@
"aMg" = (
/obj/machinery/airlock_sensor{
id_tag = "centcom_escape_dock_north_sensor";
- pixel_y = -25
+ pixel_y = -25;
+ dir = 1
},
/turf/simulated/floor/plating,
/area/centcom/holding)
@@ -1545,7 +1548,8 @@
/area/centcom/holding)
"aMt" = (
/obj/machinery/status_display{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -1951,7 +1955,8 @@
/area/centcom/holding)
"aOZ" = (
/obj/machinery/status_display{
- pixel_y = -30
+ pixel_y = -30;
+ dir = 1
},
/obj/machinery/light,
/obj/effect/floor_decal/industrial/warning{
@@ -1977,7 +1982,9 @@
},
/area/centcom/holding)
"aPJ" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Holding Facility Bar"
+ },
/turf/unsimulated/floor{
icon_state = "lino"
},
@@ -2091,7 +2098,9 @@
},
/area/centcom/holding)
"bkb" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Holding Facility Foyer"
+ },
/turf/unsimulated/floor{
icon_state = "steel"
},
@@ -2122,7 +2131,8 @@
/area/shuttle/escape_shuttle)
"bpb" = (
/obj/structure/closet/hydrant{
- pixel_x = -30
+ pixel_x = -30;
+ dir = 4
},
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -2378,7 +2388,9 @@
},
/area/tdome)
"fpV" = (
-/obj/machinery/hologram/holopad,
+/obj/machinery/hologram/holopad{
+ holopad_id = "Emergency Shuttle Medbay"
+ },
/turf/simulated/floor/tiled/white,
/area/shuttle/escape_shuttle)
"fsh" = (
@@ -3012,8 +3024,7 @@
name = "tdome2"
},
/obj/machinery/camera/network/television{
- c_tag = "Thunderdome - Red Team";
- invisibility = 101
+ c_tag = "Thunderdome - Red Team"
},
/turf/unsimulated/floor{
dir = 5;
@@ -3050,8 +3061,7 @@
name = "tdome1"
},
/obj/machinery/camera/network/television{
- c_tag = "Green Team";
- invisibility = 101
+ c_tag = "Green Team"
},
/turf/unsimulated/floor{
dir = 5;
@@ -3066,8 +3076,7 @@
/area/tdome)
"pQZ" = (
/obj/machinery/camera/network/television{
- c_tag = "Thunderdome Arena";
- invisibility = 101
+ c_tag = "Thunderdome Arena"
},
/turf/unsimulated/floor{
icon_state = "bcircuit"
@@ -3149,8 +3158,8 @@
/area/tdome/tdomeadmin)
"sKA" = (
/obj/abstract/level_data_spawner/admin_level{
- name = "Centcomm";
-},
+ name = "Centcomm"
+ },
/turf/space,
/area/space)
"sMD" = (
@@ -3278,7 +3287,6 @@
"wOU" = (
/obj/machinery/button/blast_door{
dir = 1;
- icon_state = "computer";
id_tag = "thunderdomeaxe";
name = "Thunderdome Axe Supply"
},
diff --git a/maps/exodus/exodus-transit.dmm b/maps/exodus/exodus-transit.dmm
index 991bdb2df5c..3561cf64477 100644
--- a/maps/exodus/exodus-transit.dmm
+++ b/maps/exodus/exodus-transit.dmm
@@ -22,7 +22,7 @@
/obj/effect/step_trigger/teleporter/random{
affect_ghosts = 1;
name = "escapeshuttle_leave";
- opacity = FALSE;
+ opacity = 0;
teleport_x = 25;
teleport_x_offset = 245;
teleport_y = 25;
@@ -43,8 +43,8 @@
/area/space)
"QP" = (
/obj/abstract/level_data_spawner/admin_level{
- name = "Exodus Transit Level";
-},
+ name = "Exodus Transit Level"
+ },
/turf/space,
/area/space)
diff --git a/maps/exodus/exodus_cameras.dm b/maps/exodus/exodus_cameras.dm
index 8164f3995c9..1f5d4b51ee3 100644
--- a/maps/exodus/exodus_cameras.dm
+++ b/maps/exodus/exodus_cameras.dm
@@ -8,37 +8,37 @@ var/global/const/CAMERA_CHANNEL_ENGINEERING_OUTPOST = "Engineering Outpost"
// Networks
/obj/machinery/camera/network/command
preset_channels = list(CAMERA_CHANNEL_COMMAND)
- initial_access = list(access_heads)
+ req_access = list(access_heads)
/obj/machinery/camera/network/crescent
preset_channels = list(CAMERA_CHANNEL_CRESCENT)
/obj/machinery/camera/network/engine
preset_channels = list(CAMERA_CHANNEL_ENGINE)
- initial_access = list(access_engine)
+ req_access = list(access_engine)
/obj/machinery/camera/network/engineering_outpost
preset_channels = list(CAMERA_CHANNEL_ENGINEERING_OUTPOST)
- initial_access = list(access_engine)
+ req_access = list(access_engine)
// Motion
/obj/machinery/camera/motion/engineering_outpost
preset_channels = list(CAMERA_CHANNEL_ENGINEERING_OUTPOST)
- initial_access = list(access_engine)
+ req_access = list(access_engine)
// All Upgrades
/obj/machinery/camera/all/command
preset_channels = list(CAMERA_CHANNEL_COMMAND)
- initial_access = list(access_heads)
+ req_access = list(access_heads)
// Compile stubs.
/obj/machinery/camera/motion/command
preset_channels = list(CAMERA_CHANNEL_COMMAND)
- initial_access = list(access_heads)
+ req_access = list(access_heads)
/obj/machinery/camera/network/maintenance
preset_channels = list(CAMERA_CAMERA_CHANNEL_ENGINEERING)
- initial_access = list(access_engine)
+ req_access = list(access_engine)
/obj/machinery/camera/xray/security
preset_channels = list(CAMERA_CHANNEL_SECURITY)
diff --git a/maps/exodus/exodus_jobs.dm b/maps/exodus/exodus_jobs.dm
index 7c460652cea..df6c7b54782 100644
--- a/maps/exodus/exodus_jobs.dm
+++ b/maps/exodus/exodus_jobs.dm
@@ -1,3 +1,11 @@
+/decl/spawnpoint/gateway
+ name = "Gateway"
+ spawn_announcement = "has completed translation from offsite gateway"
+ uid = "spawn_exodus_gateway"
+
+/obj/abstract/landmark/latejoin/gateway
+ spawn_decl = /decl/spawnpoint/gateway
+
/datum/map/exodus
default_job_type = /datum/job/assistant
default_department_type = /decl/department/civilian
diff --git a/maps/exodus/jobs/_goals.dm b/maps/exodus/jobs/_goals.dm
index 180d00bfd37..72c324b5c1d 100644
--- a/maps/exodus/jobs/_goals.dm
+++ b/maps/exodus/jobs/_goals.dm
@@ -37,10 +37,10 @@ var/global/list/exodus_paperwork_end_areas = list()
/datum/job/hos
)
-/datum/goal/department/paperwork/exodus/get_spawn_turfs()
+/datum/goal/department/paperwork/exodus/get_paper_spawn_turfs()
return global.exodus_paperwork_spawn_turfs
-/datum/goal/department/paperwork/exodus/get_end_areas()
+/datum/goal/department/paperwork/exodus/get_paper_end_areas()
return global.exodus_paperwork_end_areas
/obj/item/paperwork/exodus
diff --git a/maps/exodus/jobs/captain.dm b/maps/exodus/jobs/captain.dm
index 0a4c570379f..fd73838809b 100644
--- a/maps/exodus/jobs/captain.dm
+++ b/maps/exodus/jobs/captain.dm
@@ -33,7 +33,7 @@
/datum/computer_file/program/reports
)
-/datum/job/captain/equip(var/mob/living/carbon/human/H)
+/datum/job/captain/equip_job(var/mob/living/carbon/human/H)
. = ..()
if(.)
H.implant_loyalty(src)
diff --git a/maps/exodus/jobs/civilian.dm b/maps/exodus/jobs/civilian.dm
index 112096f8b67..6919061c901 100644
--- a/maps/exodus/jobs/civilian.dm
+++ b/maps/exodus/jobs/civilian.dm
@@ -11,10 +11,9 @@
department_types = list(/decl/department/civilian)
/datum/job/assistant/get_access()
- if(config.assistant_maint)
+ if(get_config_value(/decl/config/toggle/assistant_maint))
return list(access_maint_tunnels)
- else
- return list()
+ return list()
/datum/job/chaplain
title = "Chaplain"
@@ -304,7 +303,7 @@
skill_points = 20
software_on_spawn = list(/datum/computer_file/program/reports)
-/datum/job/lawyer/equip(var/mob/living/carbon/human/H)
+/datum/job/lawyer/equip_job(var/mob/living/carbon/human/H)
. = ..()
if(.)
H.implant_loyalty(H)
diff --git a/maps/exodus/jobs/medical.dm b/maps/exodus/jobs/medical.dm
index 9e66a9ccf27..fac05edfb07 100644
--- a/maps/exodus/jobs/medical.dm
+++ b/maps/exodus/jobs/medical.dm
@@ -200,7 +200,7 @@
)
give_psionic_implant_on_join = FALSE
-/datum/job/counselor/equip(var/mob/living/carbon/human/H)
+/datum/job/counselor/equip_job(var/mob/living/carbon/human/H)
if(H.mind.role_alt_title == "Counselor")
psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT)
if(H.mind.role_alt_title == "Mentalist")
diff --git a/maps/exodus/jobs/security.dm b/maps/exodus/jobs/security.dm
index 8fef6d849d2..b021a08e601 100644
--- a/maps/exodus/jobs/security.dm
+++ b/maps/exodus/jobs/security.dm
@@ -85,7 +85,7 @@
)
event_categories = list(ASSIGNMENT_SECURITY)
-/datum/job/hos/equip(var/mob/living/carbon/human/H)
+/datum/job/hos/equip_job(var/mob/living/carbon/human/H)
. = ..()
if(.)
H.implant_loyalty(H)
diff --git a/maps/exodus/jobs/synthetics.dm b/maps/exodus/jobs/synthetics.dm
index b93f9704d59..1cac23c65ae 100644
--- a/maps/exodus/jobs/synthetics.dm
+++ b/maps/exodus/jobs/synthetics.dm
@@ -19,9 +19,8 @@
skip_loadout_preview = TRUE
department_types = list(/decl/department/miscellaneous)
-/datum/job/computer/equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- return 1
+/datum/job/computer/equip_job(var/mob/living/carbon/human/H)
+ return !!H
/datum/job/computer/is_position_available()
return (empty_playable_ai_cores.len != 0)
@@ -71,10 +70,10 @@
if(H)
return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title))
-/datum/job/robot/equip(var/mob/living/carbon/human/H)
+/datum/job/robot/equip_job(var/mob/living/carbon/human/H)
return !!H
/datum/job/robot/New()
..()
alt_titles = SSrobots.robot_alt_titles.Copy()
- alt_titles -= title // So the unit test doesn't flip out if a mob or mmi type is declared for our main title.
+ alt_titles -= title // So the unit test doesn't flip out if a mob or brain type is declared for our main title.
diff --git a/maps/exodus/outfits/cargo.dm b/maps/exodus/outfits/cargo.dm
index 8bfc82c1b2b..ecc6b53da97 100644
--- a/maps/exodus/outfits/cargo.dm
+++ b/maps/exodus/outfits/cargo.dm
@@ -28,7 +28,7 @@
id_type = /obj/item/card/id/cargo
pda_type = /obj/item/modular_computer/pda/science
backpack_contents = list(/obj/item/crowbar = 1, /obj/item/storage/ore = 1)
- flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
+ outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR
/decl/hierarchy/outfit/job/cargo/mining/Initialize()
. = ..()
diff --git a/maps/exodus/outfits/engineering.dm b/maps/exodus/outfits/engineering.dm
index 2aee3512b41..02aefa0b167 100644
--- a/maps/exodus/outfits/engineering.dm
+++ b/maps/exodus/outfits/engineering.dm
@@ -4,7 +4,7 @@
l_ear = /obj/item/radio/headset/headset_eng
shoes = /obj/item/clothing/shoes/workboots
pda_slot = slot_l_store_str
- flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
+ outfit_flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR
/decl/hierarchy/outfit/job/engineering/Initialize()
. = ..()
diff --git a/maps/ministation/hud.dmi b/maps/ministation/hud.dmi
index f5b80db1956..f6925d9b0d0 100644
Binary files a/maps/ministation/hud.dmi and b/maps/ministation/hud.dmi differ
diff --git a/maps/ministation/icons/headset_cargo.dmi b/maps/ministation/icons/headset_cargo.dmi
deleted file mode 100644
index fd3fceb7cfd..00000000000
Binary files a/maps/ministation/icons/headset_cargo.dmi and /dev/null differ
diff --git a/maps/ministation/icons/headset_security.dmi b/maps/ministation/icons/headset_security.dmi
deleted file mode 100644
index f03f1372501..00000000000
Binary files a/maps/ministation/icons/headset_security.dmi and /dev/null differ
diff --git a/maps/ministation/jobs/civilian.dm b/maps/ministation/jobs/civilian.dm
index 34acd1033fa..b35ccd1b202 100644
--- a/maps/ministation/jobs/civilian.dm
+++ b/maps/ministation/jobs/civilian.dm
@@ -6,16 +6,16 @@
economic_power = 1
access = list()
minimal_access = list()
- alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor")
+ hud_icon = "hudassistant"
+ alt_titles = list("Technical Recruit","Medical Recruit","Research Recruit","Visitor")
outfit_type = /decl/hierarchy/outfit/job/ministation_assistant
department_types = list(/decl/department/civilian)
event_categories = list(ASSIGNMENT_GARDENER)
/datum/job/ministation/assistant/get_access()
- if(config.assistant_maint)
+ if(get_config_value(/decl/config/toggle/assistant_maint))
return list(access_maint_tunnels)
- else
- return list()
+ return list()
/decl/hierarchy/outfit/job/ministation_assistant
name = "Job - Ministation Assistant"
@@ -24,7 +24,7 @@
title = "Bartender"
alt_titles = list("Cook","Barista")
supervisors = "the Lieutenant and the Captain"
- total_positions = 1
+ total_positions = 2
spawn_positions = 1
outfit_type = /decl/hierarchy/outfit/job/ministation/bartender
department_types = list(/decl/department/service)
@@ -49,13 +49,13 @@
SKILL_COOKING = SKILL_MAX,
SKILL_BOTANY = SKILL_MAX
)
- skill_points = 20
+ skill_points = 30
/datum/job/ministation/cargo
title = "Cargo Technician"
alt_titles = list("Shaft Miner","Drill Technician","Prospector")
supervisors = "the Lieutenant and the Captain"
- total_positions = 2
+ total_positions = 3
spawn_positions = 1
outfit_type = /decl/hierarchy/outfit/job/ministation/cargo
department_types = list(/decl/department/service)
@@ -68,7 +68,8 @@
access_mailsorting,
access_mining,
access_mining_station,
- access_external_airlocks
+ access_external_airlocks,
+ access_eva
)
minimal_access = list(
access_cargo,
@@ -92,7 +93,7 @@
SKILL_EVA = SKILL_MAX,
SKILL_FINANCE = SKILL_MAX
)
- skill_points = 20
+ skill_points = 30
software_on_spawn = list(
/datum/computer_file/program/supply,
/datum/computer_file/program/deck_management,
@@ -103,7 +104,7 @@
title = "Janitor"
event_categories = list(ASSIGNMENT_JANITOR)
department_types = list(/decl/department/service)
- total_positions = 1
+ total_positions = 2
spawn_positions = 1
supervisors = "the Lieutenant and the Captain"
economic_power = 3
@@ -132,7 +133,7 @@
min_skill = list(
SKILL_HAULING = SKILL_BASIC
)
- skill_points = 18
+ skill_points = 28
/datum/job/ministation/librarian
title = "Librarian"
diff --git a/maps/ministation/jobs/command.dm b/maps/ministation/jobs/command.dm
index 809fbfa26f9..d5404a9bb46 100644
--- a/maps/ministation/jobs/command.dm
+++ b/maps/ministation/jobs/command.dm
@@ -1,6 +1,6 @@
/datum/job/ministation/captain
title = "Captain"
- supervisors = "your profit margin, your conscience, and the Trademaster"
+ supervisors = "your profit margin, your conscience, and the watchful eye of the Company Rep"
outfit_type = /decl/hierarchy/outfit/job/ministation/captain
min_skill = list(
SKILL_LITERACY = SKILL_ADEPT,
@@ -12,12 +12,13 @@
SKILL_PILOT = SKILL_MAX,
SKILL_WEAPONS = SKILL_MAX
)
- skill_points = 30
+ skill_points = 40
head_position = 1
department_types = list(/decl/department/command)
total_positions = 1
spawn_positions = 1
selection_color = "#1d1d4f"
+ hud_icon = "hudcaptain"
req_admin_notify = 1
access = list()
minimal_access = list()
@@ -28,16 +29,16 @@
must_fill = 1
not_random_selectable = 1
-/datum/job/ministation/captain/equip(var/mob/living/carbon/human/H)
+/datum/job/ministation/captain/equip_job(var/mob/living/carbon/human/H)
. = ..()
- if(H)
+ if(H)
H.verbs |= /mob/proc/freetradeunion_rename_company
/datum/job/ministation/captain/get_access()
return get_all_station_access()
/mob/proc/freetradeunion_rename_company()
- set name = "Rename Free Trade Union"
+ set name = "Defect from Corporate Control"
set category = "Captain's Powers"
var/company = sanitize(input(src, "What should your enterprise be called?", "Company name", global.using_map.company_name), MAX_NAME_LEN)
if(!company)
@@ -63,6 +64,7 @@
total_positions = 1
spawn_positions = 1
selection_color = "#2f2f7f"
+ hud_icon = "hudlieutenant"
req_admin_notify = 1
minimal_player_age = 14
economic_power = 10
@@ -74,9 +76,11 @@
access_sec_doors,
access_brig,
access_forensics_lockers,
+ access_armory,
access_heads,
access_medical,
access_engine,
+ access_atmospherics,
access_change_ids,
access_ai_upload,
access_eva,
@@ -89,6 +93,10 @@
access_morgue,
access_crematorium,
access_kitchen,
+ access_mining,
+ access_xenobiology,
+ access_robotics,
+ access_engine_equip,
access_cargo,
access_cargo_bot,
access_mailsorting,
@@ -111,9 +119,11 @@
access_sec_doors,
access_brig,
access_forensics_lockers,
+ access_armory,
access_heads,
access_medical,
access_engine,
+ access_atmospherics,
access_change_ids,
access_ai_upload,
access_eva,
@@ -123,6 +133,10 @@
access_bar,
access_janitor,
access_construction,
+ access_mining,
+ access_xenobiology,
+ access_robotics,
+ access_engine_equip,
access_morgue,
access_crematorium,
access_kitchen,
@@ -154,5 +168,4 @@
SKILL_PILOT = SKILL_MAX,
SKILL_FINANCE = SKILL_MAX
)
- skill_points = 30
- alt_titles = list()
+ skill_points = 40
diff --git a/maps/ministation/jobs/corporate.dm b/maps/ministation/jobs/corporate.dm
new file mode 100644
index 00000000000..885feaeb542
--- /dev/null
+++ b/maps/ministation/jobs/corporate.dm
@@ -0,0 +1,96 @@
+/datum/job/ministation/corporate/rep
+ title = "Company Representative"
+ alt_titles = list("Narc")
+ hud_icon = "hudnarc"
+ spawn_positions = 1
+ total_positions = 2
+ req_admin_notify = 1
+ guestbanned = 1
+ supervisors = "the Board of Directors"
+ outfit_type = /decl/hierarchy/outfit/job/ministation/corporate
+ min_skill = list(
+ SKILL_WEAPONS = SKILL_BASIC,
+ SKILL_FINANCE = SKILL_EXPERT,
+ SKILL_LITERACY = SKILL_ADEPT,
+ SKILL_PILOT = SKILL_ADEPT,
+ SKILL_MEDICAL = SKILL_ADEPT
+ )
+ max_skill = list(
+ SKILL_PILOT = SKILL_MAX,
+ SKILL_FINANCE = SKILL_MAX,
+ SKILL_MEDICAL = SKILL_MAX,
+ SKILL_ANATOMY = SKILL_EXPERT
+ )
+ skill_points = 35
+ department_types = list(/decl/department/corporate)
+ selection_color = "#a89004"
+ access = list(
+ access_lawyer,
+ access_security,
+ access_sec_doors,
+ access_brig,
+ access_heads,
+ access_medical,
+ access_engine,
+ access_atmospherics,
+ access_ai_upload,
+ access_eva,
+ access_bridge,
+ access_all_personal_lockers,
+ access_maint_tunnels,
+ access_bar,
+ access_janitor,
+ access_construction,
+ access_morgue,
+ access_crematorium,
+ access_kitchen,
+ access_cargo,
+ access_cargo_bot,
+ access_qm,
+ access_hydroponics,
+ access_lawyer,
+ access_chapel_office,
+ access_library,
+ access_research,
+ access_mining,
+ access_heads_vault,
+ access_mining_station,
+ access_hop,
+ access_RC_announce,
+ access_keycard_auth,
+ access_gateway
+ )
+
+ minimal_access = list(
+ access_lawyer,
+ access_security,
+ access_sec_doors,
+ access_brig,
+ access_medical,
+ access_heads,
+ access_engine,
+ access_atmospherics,
+ access_ai_upload,
+ access_eva,
+ access_bridge,
+ access_maint_tunnels,
+ access_bar,
+ access_janitor,
+ access_construction,
+ access_morgue,
+ access_crematorium,
+ access_kitchen,
+ access_cargo,
+ access_cargo_bot,
+ access_hydroponics,
+ access_chapel_office,
+ access_library,
+ access_research,
+ access_mining,
+ access_heads_vault,
+ access_mining_station,
+ access_hop,
+ access_RC_announce,
+ access_keycard_auth,
+ access_gateway
+ )
\ No newline at end of file
diff --git a/maps/ministation/jobs/engineering.dm b/maps/ministation/jobs/engineering.dm
index 6f99b0e04e1..eb0bf13f265 100644
--- a/maps/ministation/jobs/engineering.dm
+++ b/maps/ministation/jobs/engineering.dm
@@ -1,6 +1,6 @@
/datum/job/ministation/engineer
title = "Station Engineer"
- supervisors = "the Lieutenant and the Captain"
+ supervisors = "the Head Engineer"
total_positions = 2
spawn_positions = 2
outfit_type = /decl/hierarchy/outfit/job/ministation/engineer
@@ -45,6 +45,91 @@
SKILL_ATMOS = SKILL_MAX,
SKILL_ENGINES = SKILL_MAX
)
- skill_points = 20
- alt_titles = list("Atmospheric Technician")
+ skill_points = 30
+ alt_titles = list("Atmospheric Technician", "Electrician", "Maintenance Technician")
+ event_categories = list(ASSIGNMENT_ENGINEER)
+
+/datum/job/ministation/engineer/head
+ title = "Head Engineer"
+ head_position = 1
+ department_types = list(
+ /decl/department/engineering,
+ /decl/department/command
+ )
+ total_positions = 1
+ spawn_positions = 1
+ selection_color = "#7f6e2c"
+ req_admin_notify = 1
+ economic_power = 10
+ ideal_character_age = 50
+ guestbanned = 1
+ must_fill = 1
+ not_random_selectable = 1
+ hud_icon = "hudchiefengineer"
+ access = list(
+ access_engine,
+ access_engine_equip,
+ access_tech_storage,
+ access_maint_tunnels,
+ access_heads,
+ access_teleporter,
+ access_external_airlocks,
+ access_atmospherics,
+ access_emergency_storage,
+ access_eva,
+ access_bridge,
+ access_construction, access_sec_doors,
+ access_ce,
+ access_RC_announce,
+ access_keycard_auth,
+ access_tcomsat,
+ access_mining,
+ access_kitchen,
+ access_robotics,
+ access_hydroponics,
+ access_ai_upload
+ )
+ minimal_access = list(
+ access_engine,
+ access_engine_equip,
+ access_tech_storage,
+ access_maint_tunnels,
+ access_heads,
+ access_teleporter,
+ access_external_airlocks,
+ access_atmospherics,
+ access_emergency_storage,
+ access_eva,
+ access_bridge,
+ access_construction,
+ access_sec_doors,
+ access_ce, access_RC_announce,
+ access_keycard_auth,
+ access_tcomsat,
+ access_mining,
+ access_kitchen,
+ access_robotics,
+ access_hydroponics,
+ access_ai_upload
+ )
+ minimal_player_age = 14
+ supervisors = "the Captain"
+ outfit_type = /decl/hierarchy/outfit/job/ministation/engineer/head
+ min_skill = list(
+ SKILL_LITERACY = SKILL_ADEPT,
+ SKILL_COMPUTER = SKILL_ADEPT,
+ SKILL_EVA = SKILL_ADEPT,
+ SKILL_CONSTRUCTION = SKILL_ADEPT,
+ SKILL_ELECTRICAL = SKILL_ADEPT,
+ SKILL_ATMOS = SKILL_ADEPT,
+ SKILL_ENGINES = SKILL_EXPERT
+ )
+ max_skill = list(
+ SKILL_CONSTRUCTION = SKILL_MAX,
+ SKILL_ELECTRICAL = SKILL_MAX,
+ SKILL_ATMOS = SKILL_MAX,
+ SKILL_ENGINES = SKILL_MAX
+ )
+ skill_points = 40
+ alt_titles = list("Chief of Engineering")
event_categories = list(ASSIGNMENT_ENGINEER)
\ No newline at end of file
diff --git a/maps/ministation/jobs/medical.dm b/maps/ministation/jobs/medical.dm
index d1f1d31fcb5..49d615c041f 100644
--- a/maps/ministation/jobs/medical.dm
+++ b/maps/ministation/jobs/medical.dm
@@ -2,11 +2,11 @@
title = "Medical Doctor"
department_types = list(/decl/department/medical)
head_position = 0
- supervisors = "the Lieutenant and the Captain"
+ supervisors = "the Head Doctor"
total_positions = 2
spawn_positions = 2
- alt_titles = list("Surgeon","Chemist","Nurse")
- skill_points = 24
+ alt_titles = list("Chemist", "Nurse", "Surgeon")
+ skill_points = 34
min_skill = list(
SKILL_LITERACY = SKILL_ADEPT,
SKILL_MEDICAL = SKILL_EXPERT,
@@ -38,3 +38,77 @@
outfit_type = /decl/hierarchy/outfit/job/ministation/doctor
minimal_player_age = 3
event_categories = list(ASSIGNMENT_MEDICAL)
+
+/datum/job/ministation/doctor/head
+ title = "Head Doctor"
+ head_position = 1
+ department_types = list(
+ /decl/department/medical,
+ /decl/department/command
+ )
+ supervisors = "the Captain and your own ethics"
+ outfit_type = /decl/hierarchy/outfit/job/ministation/doctor/head
+ alt_titles = list("Chief Medical Officer", "Head Surgeon")
+ total_positions = 1
+ spawn_positions = 1
+ skill_points = 38
+ guestbanned = 1
+ must_fill = 1
+ not_random_selectable = 1
+ selection_color = "#026865"
+ req_admin_notify = 1
+ economic_power = 10
+ hud_icon = "hudheaddoctor"
+ access = list(
+ access_medical,
+ access_medical_equip,
+ access_morgue,
+ access_bridge,
+ access_heads,
+ access_engine_equip,
+ access_eva,
+ access_chemistry,
+ access_virology,
+ access_cmo,
+ access_surgery,
+ access_RC_announce,
+ access_keycard_auth,
+ access_sec_doors,
+ access_psychiatrist,
+ access_eva,
+ access_mining,
+ access_kitchen,
+ access_xenobiology,
+ access_robotics,
+ access_hydroponics,
+ access_maint_tunnels,
+ access_external_airlocks
+ )
+ minimal_access = list(
+ access_medical,
+ access_medical_equip,
+ access_morgue,
+ access_bridge,
+ access_heads,
+ access_engine_equip,
+ access_eva,
+ access_chemistry,
+ access_virology,
+ access_cmo,
+ access_surgery,
+ access_RC_announce,
+ access_keycard_auth,
+ access_sec_doors,
+ access_psychiatrist,
+ access_eva,
+ access_mining,
+ access_kitchen,
+ access_xenobiology,
+ access_robotics,
+ access_hydroponics,
+ access_maint_tunnels,
+ access_external_airlocks
+ )
+ minimal_player_age = 14
+ ideal_character_age = 50
+ event_categories = list(ASSIGNMENT_MEDICAL)
\ No newline at end of file
diff --git a/maps/ministation/jobs/science.dm b/maps/ministation/jobs/science.dm
index e0c020a2309..cce6f36589e 100644
--- a/maps/ministation/jobs/science.dm
+++ b/maps/ministation/jobs/science.dm
@@ -1,11 +1,12 @@
/datum/job/ministation/scientist
- title = "Scientist"
- alt_titles = list("Researcher","Xenobiologist","Roboticist","Xenobotanist")
- supervisors = "the Lieutenant and the Captain"
+ title = "Researcher"
+ alt_titles = list("Scientist","Xenobiologist","Roboticist","Xenobotanist")
+ supervisors = "the Head Researcher"
spawn_positions = 1
total_positions = 2
department_types = list(/decl/department/science)
outfit_type = /decl/hierarchy/outfit/job/ministation/scientist
+ hud_icon = "hudscientist"
min_skill = list(
SKILL_LITERACY = SKILL_ADEPT,
SKILL_COMPUTER = SKILL_BASIC,
@@ -17,7 +18,7 @@
SKILL_DEVICES = SKILL_MAX,
SKILL_SCIENCE = SKILL_MAX
)
- skill_points = 24
+ skill_points = 34
access = list(
access_robotics,
access_tox,
@@ -37,3 +38,94 @@
selection_color = "#633d63"
economic_power = 7
event_categories = list(ASSIGNMENT_SCIENTIST)
+
+/datum/job/ministation/scientist/head
+ title = "Research Director"
+ supervisors = "the Captain"
+ spawn_positions = 1
+ total_positions = 1
+ alt_titles = list("Head Researcher", "Chief Researcher")
+ outfit_type = /decl/hierarchy/outfit/job/ministation/scientist/head
+ min_skill = list(
+ SKILL_LITERACY = SKILL_ADEPT,
+ SKILL_COMPUTER = SKILL_BASIC,
+ SKILL_FINANCE = SKILL_ADEPT,
+ SKILL_BOTANY = SKILL_BASIC,
+ SKILL_ANATOMY = SKILL_BASIC,
+ SKILL_DEVICES = SKILL_BASIC,
+ SKILL_SCIENCE = SKILL_ADEPT
+ )
+ max_skill = list(
+ SKILL_ANATOMY = SKILL_MAX,
+ SKILL_DEVICES = SKILL_MAX,
+ SKILL_SCIENCE = SKILL_MAX
+ )
+ skill_points = 40
+ head_position = 1
+ department_types = list(
+ /decl/department/science,
+ /decl/department/command
+ )
+ selection_color = "#ad6bad"
+ req_admin_notify = 1
+ economic_power = 15
+ hud_icon = "hudheadscientist"
+ access = list(
+ access_rd,
+ access_bridge,
+ access_tox,
+ access_morgue,
+ access_tox_storage,
+ access_teleporter,
+ access_sec_doors,
+ access_heads,
+ access_eva,
+ access_research,
+ access_robotics,
+ access_xenobiology,
+ access_ai_upload,
+ access_tech_storage,
+ access_RC_announce,
+ access_keycard_auth,
+ access_tcomsat,
+ access_gateway,
+ access_xenoarch,
+ access_engine_equip,
+ access_mining,
+ access_kitchen,
+ access_hydroponics,
+ access_network
+ )
+ minimal_access = list(
+ access_rd,
+ access_bridge,
+ access_tox,
+ access_morgue,
+ access_tox_storage,
+ access_teleporter,
+ access_sec_doors,
+ access_heads,
+ access_eva,
+ access_research,
+ access_robotics,
+ access_xenobiology,
+ access_ai_upload,
+ access_tech_storage,
+ access_RC_announce,
+ access_keycard_auth,
+ access_tcomsat,
+ access_gateway,
+ access_xenoarch,
+ access_engine_equip,
+ access_mining,
+ access_kitchen,
+ access_hydroponics,
+ access_network
+ )
+ minimal_player_age = 14
+ ideal_character_age = 50
+ guestbanned = 1
+ must_fill = 1
+ not_random_selectable = 1
+ event_categories = list(ASSIGNMENT_SCIENTIST)
+
diff --git a/maps/ministation/jobs/security.dm b/maps/ministation/jobs/security.dm
index ad6e2324b57..b1e691ccb99 100644
--- a/maps/ministation/jobs/security.dm
+++ b/maps/ministation/jobs/security.dm
@@ -1,21 +1,25 @@
/datum/job/ministation/security
title = "Security Officer"
alt_titles = list("Warden")
- supervisors = "the Lieutenant and the Captain"
+ supervisors = "the Head of Security"
spawn_positions = 1
total_positions = 2
outfit_type = /decl/hierarchy/outfit/job/ministation/security
department_types = list(/decl/department/security)
- selection_color = "#990000"
+ selection_color = COLOR_BLOOD_RED
economic_power = 7
minimal_player_age = 7
access = list(
access_security,
- access_brig
+ access_brig,
+ access_lawyer,
+ access_maint_tunnels
)
minimal_access = list(
access_security,
access_forensics_lockers,
+ access_maint_tunnels,
+ access_lawyer,
access_brig
)
min_skill = list(
@@ -28,13 +32,13 @@
SKILL_COMBAT = SKILL_MAX,
SKILL_WEAPONS = SKILL_MAX
)
- skill_points = 20
+ skill_points = 30
event_categories = list(ASSIGNMENT_SECURITY)
/datum/job/ministation/detective
title = "Detective"
alt_titles = list("Inspector")
- supervisors = "Justice... and the Trademaster"
+ supervisors = "Justice... and the Captain"
spawn_positions = 1
total_positions = 1
outfit_type = /decl/hierarchy/outfit/job/ministation/detective
@@ -43,11 +47,18 @@
economic_power = 7
minimal_player_age = 3
access = list(
- access_forensics_lockers
+ access_forensics_lockers,
+ access_brig,
+ access_security,
+ access_lawyer,
+ access_maint_tunnels
)
minimal_access = list(
access_security,
- access_forensics_lockers
+ access_brig,
+ access_lawyer,
+ access_forensics_lockers,
+ access_maint_tunnels
)
min_skill = list(
SKILL_LITERACY = SKILL_BASIC,
@@ -61,4 +72,70 @@
SKILL_WEAPONS = SKILL_MAX,
SKILL_FORENSICS = SKILL_MAX
)
- skill_points = 24
\ No newline at end of file
+ skill_points = 34
+
+/datum/job/ministation/security/head
+ title = "Head of Security"
+ supervisors = "the Captain"
+ outfit_type = /decl/hierarchy/outfit/job/ministation/security/head
+ head_position = 1
+ department_types = list(
+ /decl/department/security,
+ /decl/department/command
+ )
+ total_positions = 1
+ spawn_positions = 1
+ selection_color = "#9d2300"
+ req_admin_notify = 1
+ minimal_player_age = 14
+ economic_power = 10
+ ideal_character_age = 50
+ guestbanned = 1
+ not_random_selectable = 1
+ hud_icon = "hudhos"
+ access = list(
+ access_security,
+ access_sec_doors,
+ access_brig,
+ access_eva,
+ access_forensics_lockers,
+ access_heads,
+ access_lawyer,
+ access_maint_tunnels,
+ access_armory,
+ access_engine_equip,
+ access_mining,
+ access_kitchen,
+ access_robotics,
+ access_hydroponics,
+ access_hos
+ )
+ minimal_access = list(
+ access_security,
+ access_sec_doors,
+ access_brig,
+ access_lawyer,
+ access_eva,
+ access_forensics_lockers,
+ access_heads,
+ access_maint_tunnels,
+ access_armory,
+ access_engine_equip,
+ access_mining,
+ access_kitchen,
+ access_robotics,
+ access_hydroponics,
+ access_hos
+ )
+ min_skill = list(
+ SKILL_LITERACY = SKILL_BASIC,
+ SKILL_COMPUTER = SKILL_BASIC,
+ SKILL_COMBAT = SKILL_ADEPT,
+ SKILL_WEAPONS = SKILL_ADEPT
+ )
+ max_skill = list(
+ SKILL_COMBAT = SKILL_MAX,
+ SKILL_WEAPONS = SKILL_MAX
+ )
+ skill_points = 40
+ alt_titles = list("Security Commander")
diff --git a/maps/ministation/jobs/synthetics.dm b/maps/ministation/jobs/synthetics.dm
index 61f5ae877b8..b0f2345b1af 100644
--- a/maps/ministation/jobs/synthetics.dm
+++ b/maps/ministation/jobs/synthetics.dm
@@ -13,7 +13,7 @@
hud_icon = "hudblank"
skill_points = 0
no_skill_buffs = TRUE
- guestbanned = 1
+ guestbanned = 1
not_random_selectable = 1
skip_loadout_preview = TRUE
department_types = list(/decl/department/miscellaneous)
@@ -22,10 +22,58 @@
if(H)
return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title))
-/datum/job/ministation/robot/equip(var/mob/living/carbon/human/H)
+/datum/job/ministation/robot/equip_job(var/mob/living/carbon/human/H)
return !!H
/datum/job/ministation/robot/New()
..()
alt_titles = SSrobots.robot_alt_titles.Copy()
alt_titles -= title
+
+/datum/job/ministation/computer
+ title = "Computer"
+ event_categories = list(ASSIGNMENT_COMPUTER)
+ total_positions = 0
+ spawn_positions = 1
+ selection_color = "#3f823f"
+ supervisors = "your laws"
+ req_admin_notify = 1
+ minimal_player_age = 14
+ account_allowed = 0
+ economic_power = 0
+ outfit_type = /decl/hierarchy/outfit/job/silicon/ai
+ loadout_allowed = FALSE
+ hud_icon = "hudblank"
+ skill_points = 0
+ no_skill_buffs = TRUE
+ guestbanned = 1
+ not_random_selectable = 1
+ skip_loadout_preview = TRUE
+ department_types = list(/decl/department/miscellaneous)
+
+/datum/job/ministation/computer/equip_job(var/mob/living/carbon/human/H)
+ return !!H
+
+/datum/job/ministation/computer/is_position_available()
+ return (empty_playable_ai_cores.len != 0)
+
+/datum/job/ministation/computer/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title)
+ return H
+
+/datum/job/ministation/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin)
+ character = character.AIize(move=0) // AIize the character, but don't move them yet
+
+ // is_available for AI checks that there is an empty core available in this list
+ var/obj/structure/aicore/deactivated/C = empty_playable_ai_cores[1]
+ empty_playable_ai_cores -= C
+
+ character.forceMove(C.loc)
+ var/mob/living/silicon/ai/A = character
+ A.on_mob_init()
+
+ if(latejoin)
+ new_player_mob.AnnounceCyborg(character, title, "has been downloaded to the empty core in \the [get_area_name(src)]")
+ SSticker.mode.handle_latejoin(character)
+
+ qdel(C)
+ return TRUE
diff --git a/maps/ministation/ministation.dmm b/maps/ministation/ministation-0.dmm
similarity index 65%
rename from maps/ministation/ministation.dmm
rename to maps/ministation/ministation-0.dmm
index fdcd879ca6a..2819387365e 100644
--- a/maps/ministation/ministation.dmm
+++ b/maps/ministation/ministation-0.dmm
@@ -16,436 +16,170 @@
/turf/space,
/area/space)
"ae" = (
-/turf/simulated/wall,
-/area/ministation/science)
-"af" = (
-/turf/exterior/wall/random/ministation,
-/area/space)
-"ag" = (
-/obj/structure/mirror{
- pixel_y = 30
- },
-/turf/simulated/floor/tiled/freezer,
-/area/ministation/hall/e)
-"ah" = (
-/turf/simulated/wall,
-/area/ministation/bridge)
-"ai" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "bridgeblast";
- name = "bridge blast door"
- },
-/turf/simulated/floor/plating,
-/area/ministation/bridge)
-"aj" = (
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
},
-/obj/structure/cable{
- icon_state = "0-4"
+/obj/machinery/camera/network/engineering{
+ name = "SM Airlock"
},
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "bridgeblast";
- name = "bridge blast door"
+/obj/machinery/light{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/bridge)
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"af" = (
+/turf/exterior/wall/random/ministation,
+/area/space)
"ak" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "bridgeblast";
- name = "bridge blast door"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/ministation/bridge)
-"al" = (
/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "bridgeblast";
- name = "bridge blast door"
+ icon_state = "1-8"
},
/turf/simulated/floor/plating,
-/area/ministation/bridge)
+/area/ministation/maint/eastatmos)
"am" = (
-/obj/structure/table/reinforced,
-/obj/item/wrench,
-/obj/item/assembly/timer,
-/obj/item/assembly/signaler,
-/obj/item/assembly/signaler,
-/obj/item/multitool,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"an" = (
-/obj/structure/closet/secure_closet/medical3,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"ao" = (
-/obj/structure/table/reinforced,
-/obj/machinery/faxmachine,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"ap" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"aq" = (
+/obj/effect/wallframe_spawn/reinforced,
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"ar" = (
+/area/ministation/engine)
+"aq" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/brigdoor/westleft,
/obj/structure/disposalpipe/trunk{
- dir = 4
+ dir = 2
+ },
+/obj/machinery/door/blast/shutters{
+ id_tag = "cargoshut";
+ name = "cargo shutters"
},
-/obj/structure/disposaloutlet,
-/turf/simulated/floor,
-/area/ministation/science)
-"as" = (
-/obj/machinery/computer/modular/preset/security,
-/obj/effect/floor_decal/corner/red/full,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"at" = (
-/obj/machinery/computer/station_alert/all,
-/obj/effect/floor_decal/corner/yellow/full,
+/area/ministation/cargo)
+"as" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/flora/pottedplant/smalltree,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
+/area/ministation/hall/n)
"au" = (
/turf/simulated/wall,
/area/ministation/cargo)
"av" = (
/turf/simulated/wall/r_wall,
/area/ministation/engine)
-"aw" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor,
-/area/ministation/science)
"ax" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/computer/modular/preset/cardslot/command,
-/obj/effect/floor_decal/corner/blue/full,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"ay" = (
-/obj/effect/floor_decal/corner/white/full,
-/obj/machinery/computer/modular/preset/medical,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"az" = (
-/obj/effect/floor_decal/corner/yellow/full,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aA" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-2"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
},
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast2";
- name = "enclosure 2 blast door"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/turf/simulated/floor,
-/area/ministation/science)
-"aB" = (
-/obj/structure/table/reinforced,
-/obj/item/folder/envelope/nuke_instructions,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aC" = (
-/obj/structure/table/reinforced,
-/obj/item/radio,
-/obj/item/radio/beacon,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aD" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/bridge)
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
"aE" = (
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
-/obj/machinery/door/blast/regular/open{
- id_tag = "bridgeblast";
- name = "bridge blast door"
- },
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/airless,
-/area/ministation/bridge)
-"aF" = (
-/obj/structure/glass_tank/aquarium,
-/mob/living/simple_animal/aquatic/fish,
-/mob/living/simple_animal/aquatic/fish,
-/mob/living/simple_animal/aquatic/fish,
-/mob/living/simple_animal/aquatic/fish,
-/mob/living/simple_animal/aquatic/fish,
-/mob/living/simple_animal/aquatic/fish/grump,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aG" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
+/obj/machinery/alarm{
+ pixel_y = 23
},
-/area/ministation/telecomms)
-"aH" = (
-/obj/machinery/door/airlock/hatch/maintenance,
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"aI" = (
-/obj/structure/table/reinforced,
-/obj/machinery/recharger,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aJ" = (
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aK" = (
-/obj/effect/floor_decal/corner/red{
- dir = 5
+/area/ministation/maint/westatmos)
+"aG" = (
+/obj/structure/table,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
},
+/obj/item/blueprints,
+/obj/item/cell,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
+/area/ministation/eva)
"aL" = (
-/obj/structure/bed/chair/comfy/blue,
-/obj/effect/floor_decal/corner/yellow{
- dir = 5
+/obj/machinery/power/apc{
+ name = "_South APC";
+ pixel_y = -24
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aM" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/blue{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aN" = (
-/obj/structure/bed/chair/comfy/blue,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 5
- },
-/obj/effect/floor_decal/corner/white{
- dir = 5
+ icon_state = "0-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aO" = (
-/obj/effect/floor_decal/corner/yellow{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aP" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/firstaid/regular,
-/obj/item/storage/toolbox/emergency,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aQ" = (
-/obj/structure/displaycase,
-/obj/item/sword/replica/officersword,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"aR" = (
-/obj/structure/bed,
-/obj/item/bedsheet/captain,
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
},
-/obj/structure/curtain/open/bed,
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
+/turf/simulated/floor/plating,
+/area/ministation/dorms)
"aS" = (
/turf/simulated/wall,
/area/ministation/ai_sat)
-"aT" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
-"aU" = (
-/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/window/reinforced,
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/machinery/button/blast_door{
- id_tag = "slimeblast3";
- name = "Enclosure 3 Blastdoors Button"
- },
-/obj/machinery/camera/network/research,
-/turf/simulated/floor/tiled,
-/area/ministation/science)
"aV" = (
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
+/area/ministation/hall/s1)
"aW" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/button/alternate/door/bolts{
- id_tag = "vaultbolt";
- name = "Vault Deadbolt Button";
- pixel_y = 27
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
+/obj/machinery/firealarm{
+ pixel_y = 24
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/obj/machinery/light{
+ dir = 1
},
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
-"aX" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/obj/machinery/door/airlock/command{
- autoset_access = 0;
+/obj/structure/closet/secure_closet{
+ closet_appearance = /decl/closet_appearance/secure_closet/command;
+ name = "captain's locker";
req_access = list("ACCESS_CAPTAIN")
},
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/carpet,
-/area/ministation/bridge)
-"aY" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"ba" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/camera/network/command{
+ initial_access = null
},
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
+/area/ministation/eva)
+"aZ" = (
+/obj/structure/fitness/punchingbag,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
"bb" = (
-/obj/structure/table/reinforced,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
- },
-/obj/item/pen,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
+/obj/machinery/fabricator/pipe/disposal,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
"bc" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/portable_atmospherics/powered/scrubber,
+/obj/machinery/atmospherics/portables_connector{
+ dir = 1
},
-/obj/item/radio/intercom,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
"bd" = (
/obj/machinery/light{
dir = 1
},
/obj/item/inflatable_dispenser,
/obj/structure/table,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/steel_grid,
/area/ministation/engine)
-"be" = (
-/obj/structure/table/reinforced,
-/obj/item/folder/yellow,
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bf" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bg" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/bridge/vault)
-"bh" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
"bi" = (
-/obj/structure/filing_cabinet,
-/obj/machinery/light_switch{
- pixel_y = 28
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 10
},
-/obj/effect/floor_decal/industrial/warning{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge/vault)
+/obj/abstract/landmark/start{
+ name = "Assistant"
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
"bj" = (
-/turf/simulated/wall,
-/area/ministation/cafe)
+/obj/structure/table/reinforced,
+/obj/item/rcd,
+/obj/item/rcd_ammo/large,
+/turf/simulated/floor/carpet/orange,
+/area/ministation/engine)
"bk" = (
/obj/effect/floor_decal/corner/yellow{
dir = 5
@@ -453,397 +187,181 @@
/turf/simulated/floor/tiled,
/area/ministation/engine)
"bl" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/telecomms)
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "westatmos_vent"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
"bm" = (
/obj/structure/closet/radiation,
+/obj/machinery/camera/network/engineering,
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"bn" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "Vault APC";
- pixel_y = 25
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/simulated/floor/bluegrid,
-/area/ministation/bridge/vault)
-"bo" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
"bp" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/floor/bluegrid,
-/area/ministation/bridge/vault)
-"bq" = (
-/turf/simulated/floor/bluegrid,
-/area/ministation/bridge/vault)
-"br" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
-"bs" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
+/obj/effect/floor_decal/corner/red{
+ dir = 6
},
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
+/obj/machinery/atmospherics/pipe/simple/visible/red,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
"bt" = (
-/obj/item/flashlight/lamp/green,
-/obj/structure/table/woodentable/mahogany,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
-"bv" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
- },
+/obj/structure/grille,
+/obj/structure/wall_frame,
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"bB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bw" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bx" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/secure/briefcase,
-/obj/item/flash,
-/obj/item/flash,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"by" = (
-/obj/structure/closet,
-/obj/item/stack/material/ingot/mapped/gold,
-/obj/item/stack/material/ingot/mapped/gold,
-/obj/item/stack/material/ingot/mapped/gold,
-/obj/item/storage/belt/champion,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge/vault)
-"bz" = (
-/obj/abstract/landmark/start{
- name = "Captain"
- },
+/area/ministation/engine)
+"bC" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "2-8"
},
+/obj/machinery/door/airlock/glass/command,
+/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/structure/bed/chair/comfy/captain,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bA" = (
-/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/button/blast_door{
- id_tag = "bridgeblast"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "4-8"
- },
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bC" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/floor_decal/industrial/warning{
+/area/ministation/eva)
+"bE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bD" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/airlock/vault/bolted{
- autoset_access = 0;
- id_tag = "vaultbolt";
- req_access = list("ACCESS_VAULT")
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"bN" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge/vault)
-"bE" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/unary/outlet_injector{
+ dir = 8;
+ icon_state = "map_injector";
+ id_tag = "n2_in";
+ use_power = 1
},
-/obj/effect/floor_decal/industrial/warning{
+/turf/simulated/floor/reinforced/oxygen,
+/area/ministation/atmospherics)
+"bO" = (
+/obj/structure/window/reinforced{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge/vault)
-"bF" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 4;
+ external_pressure_bound = 0;
+ external_pressure_bound_default = 0;
+ icon_state = "map_vent_in";
+ id_tag = "air_out";
+ internal_pressure_bound = 2000;
+ internal_pressure_bound_default = 2000;
+ pressure_checks = 2;
+ pressure_checks_default = 2;
+ pump_direction = 0;
+ use_power = 1
+ },
+/turf/simulated/floor/reinforced/oxygen,
+/area/ministation/atmospherics)
+"bP" = (
/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/bluegrid,
-/area/ministation/bridge/vault)
-"bG" = (
-/obj/structure/closet/secure_closet/captains,
-/obj/item/clothing/suit/storage/leather_jacket/nanotrasen,
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
-"bH" = (
-/obj/machinery/camera{
- c_tag = "Captain's Quarters";
- dir = 1
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
+ icon_state = "0-8"
},
-/obj/structure/bed/chair/comfy/captain{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
-"bI" = (
-/obj/structure/table/woodentable/mahogany,
-/obj/item/modular_computer/tablet/lease/preset/command,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/carpet/blue,
-/area/ministation/bridge)
-"bK" = (
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -23
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"bV" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
},
-/obj/machinery/keycard_auth{
- pixel_y = -24
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/item/chems/spray/extinguisher,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
},
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bM" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
+/area/ministation/eva)
+"bW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bN" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/eva)
+"cb" = (
+/obj/item/stack/material/ore/iron{
+ pixel_x = -1;
+ pixel_y = -4
},
-/obj/abstract/landmark{
- name = "bluespace_a"
+/obj/item/stack/material/ore/iron{
+ pixel_x = 2;
+ pixel_y = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/item/stack/material/ore/iron,
+/turf/simulated/floor/airless,
+/area/space)
+"cc" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bO" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/material_processing/unloader{
+ input_turf = 4;
+ output_turf = 1
},
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/area/ministation/cargo)
+"cd" = (
+/obj/item/stack/material/rods/fifty,
+/turf/simulated/floor/airless,
+/area/space)
+"ce" = (
+/obj/item/storage/ore,
+/turf/simulated/floor/airless,
+/area/space)
+"cf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bQ" = (
-/obj/machinery/keycard_auth{
- pixel_y = -24
+/area/ministation/cargo)
+"cg" = (
+/obj/structure/bed/chair/comfy,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/hall/s1)
+"cj" = (
+/obj/machinery/generator{
+ anchored = 1
},
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bR" = (
-/obj/machinery/nuclearbomb/station{
- pixel_y = 2
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"ck" = (
+/obj/machinery/light/small{
+ dir = 8
},
-/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/tiled/dark/monotile,
-/area/ministation/bridge/vault)
-"bS" = (
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge/vault)
-"bT" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge/vault)
-"bU" = (
-/obj/structure/fireaxecabinet{
- pixel_y = -32
- },
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bV" = (
-/obj/machinery/camera/autoname{
- dir = 1
- },
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/effect/floor_decal/corner/blue{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bW" = (
-/obj/effect/floor_decal/corner/blue{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/sign/department/bridge{
- dir = 4;
- pixel_x = -32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"bX" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/blue{
- dir = 10
- },
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bY" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/blue{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"bZ" = (
-/obj/machinery/network/requests_console{
- announcementConsole = 1;
- department = "Bridge";
- name = "Bridge RC";
- pixel_y = -30
- },
-/obj/effect/floor_decal/corner/blue{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"ca" = (
-/obj/machinery/newscaster{
- pixel_y = -28
- },
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"cb" = (
-/obj/item/stack/material/ore/iron{
- pixel_x = -1;
- pixel_y = -4
- },
-/obj/item/stack/material/ore/iron{
- pixel_x = 2;
- pixel_y = 4
- },
-/obj/item/stack/material/ore/iron,
-/turf/simulated/floor/airless,
-/area/space)
-"cc" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/material_processing/unloader{
- input_turf = 4;
- output_turf = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"cd" = (
-/obj/item/stack/material/rods/fifty,
-/turf/simulated/floor/airless,
-/area/space)
-"ce" = (
-/obj/item/storage/ore,
-/turf/simulated/floor/airless,
-/area/space)
-"cf" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"cg" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"ch" = (
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
-/obj/machinery/door/firedoor,
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"ci" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/airlock/glass/command,
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"ck" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/simulated/floor/airless,
-/area/space)
-"cl" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/floor_decal/industrial/loading{
- dir = 8
+/turf/simulated/floor/airless,
+/area/space)
+"cl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/loading{
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
@@ -854,9 +372,6 @@
"cn" = (
/turf/simulated/floor/airless,
/area/space)
-"co" = (
-/turf/simulated/wall,
-/area/ministation/maint/nw)
"cp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -868,57 +383,42 @@
/turf/simulated/floor/tiled,
/area/ministation/engine)
"cr" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+/turf/simulated/wall/r_wall,
+/area/ministation/eva)
+"cu" = (
+/obj/machinery/computer/air_control/supermatter_core,
+/obj/machinery/light{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"cs" = (
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"cv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"cw" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
+ icon_state = "2-8"
},
-/obj/effect/floor_decal/corner/blue{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"ct" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/blue{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"cu" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
+/obj/machinery/light/small{
+ dir = 1
},
-/obj/structure/cable{
- icon_state = "0-2"
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
},
/turf/simulated/floor/plating,
-/area/ministation/bridge)
-"cv" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"cw" = (
-/turf/simulated/wall,
-/area/ministation/maint/ne)
+/area/ministation/maint/l1central)
"cx" = (
/obj/machinery/conveyor{
id_tag = "mining_internal"
},
-/obj/structure/plasticflaps/airtight,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"cy" = (
@@ -926,10 +426,13 @@
/turf/simulated/floor/plating,
/area/ministation/cargo)
"cz" = (
+/obj/effect/floor_decal/industrial/loading{
+ dir = 4
+ },
/obj/machinery/status_display{
- pixel_y = 2
+ pixel_y = 32
},
-/turf/simulated/wall,
+/turf/simulated/floor/tiled,
/area/ministation/cargo)
"cA" = (
/obj/machinery/door/airlock/external/glass{
@@ -940,81 +443,60 @@
id_tag = "mining_airlock_interior"
},
/obj/machinery/button/access/interior{
- id_tag = "cargo_airlock";
+ id_tag = "mining_airlock";
name = "interior access button";
pixel_x = 20;
- pixel_y = -10
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/plating,
/area/ministation/cargo)
-"cB" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/random/trash,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"cC" = (
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
"cD" = (
-/obj/machinery/light/small{
+/turf/simulated/floor,
+/area/ministation/hall/s1)
+"cG" = (
+/obj/structure/window/reinforced{
dir = 4
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/window/reinforced{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"cE" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 4;
+ external_pressure_bound = 0;
+ external_pressure_bound_default = 0;
+ icon_state = "map_vent_in";
+ id_tag = "air_out";
+ internal_pressure_bound = 2000;
+ internal_pressure_bound_default = 2000;
+ pressure_checks = 2;
+ pressure_checks_default = 2;
+ pump_direction = 0;
+ use_power = 1
+ },
+/turf/simulated/floor/reinforced/nitrogen,
+/area/ministation/atmospherics)
+"cH" = (
+/obj/structure/ladder,
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/effect/floor_decal/corner/blue{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"cF" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/floor_decal/corner/blue{
- dir = 10
+ icon_state = "16-0"
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"cG" = (
-/obj/machinery/door/airlock/hatch/maintenance,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "0-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"cH" = (
-/obj/machinery/light/small,
-/obj/random/trash,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"cJ" = (
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
"cK" = (
/obj/machinery/atmospherics/portables_connector,
/obj/machinery/portable_atmospherics/canister/air/airlock,
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
"cL" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/science)
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
"cM" = (
/obj/machinery/conveyor{
dir = 4;
@@ -1040,6 +522,7 @@
dir = 4;
id_tag = "mining_internal"
},
+/obj/machinery/camera/network/mining,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"cQ" = (
@@ -1062,215 +545,97 @@
},
/turf/simulated/floor/plating,
/area/ministation/cargo)
-"cU" = (
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/sign/warning/high_voltage,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"cV" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"cW" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
"cX" = (
-/obj/structure/rack,
-/obj/random/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"cY" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/security)
-"cZ" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"da" = (
-/turf/simulated/wall,
-/area/ministation/security)
-"db" = (
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"dc" = (
-/obj/structure/cable{
- icon_state = "0-2"
+/obj/machinery/meter,
+/obj/effect/floor_decal/corner/red{
+ dir = 9
},
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
+ dir = 4
},
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast3";
- name = "enclosure 3 blast door"
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"dc" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green{
+ dir = 9
},
-/turf/simulated/floor,
-/area/ministation/science)
-"dd" = (
-/turf/simulated/floor,
-/area/ministation/science)
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
"de" = (
/obj/machinery/conveyor{
dir = 1;
id_tag = "mining_internal"
},
-/obj/structure/plasticflaps/airtight,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"dg" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"dh" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+"df" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
+/area/ministation/supermatter)
"di" = (
/turf/simulated/wall,
/area/ministation/hall/n)
-"dj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"dk" = (
-/obj/item/trash/cigbutt,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"dm" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
+"dl" = (
+/obj/machinery/power/solar,
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "0-4"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/sec)
-"dn" = (
-/obj/structure/table/woodentable_reinforced/walnut,
-/obj/item/paper_bin,
-/obj/item/pen/retractable,
-/turf/simulated/floor/carpet/red,
-/area/ministation/court)
+/area/space)
"do" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"dp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/conveyor{
+ dir = 4;
+ id_tag = "trash_sort"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/sign/warning/deathsposal{
+ pixel_x = -34;
dir = 4
},
-/obj/machinery/door/airlock/glass,
/turf/simulated/floor/plating,
-/area/ministation/hall/s)
+/area/ministation/trash)
"dq" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/obj/effect/floor_decal/corner/beige{
+ dir = 5
},
/turf/simulated/floor/tiled,
-/area/ministation/court)
-"dr" = (
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"dt" = (
-/obj/machinery/light/small{
- dir = 8
+/area/ministation/cargo)
+"ds" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 5
},
-/turf/simulated/floor,
-/area/ministation/science)
+/turf/space,
+/area/space)
"du" = (
-/mob/living/slime,
-/turf/simulated/floor,
-/area/ministation/science)
-"dv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/window/westleft,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast2";
- name = "enclosure 2 blast door"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
-/turf/simulated/floor,
-/area/ministation/science)
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
"dw" = (
-/obj/machinery/door/window/eastleft,
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"dx" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"dy" = (
-/obj/machinery/door/window/westleft,
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ icon_state = "1-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"dz" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
},
-/obj/machinery/door/window/eastleft,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast3";
- name = "enclosure 3 blast door"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
-/turf/simulated/floor,
-/area/ministation/science)
-"dA" = (
-/obj/machinery/light/small{
- dir = 4
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
},
-/turf/simulated/floor,
-/area/ministation/science)
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"dx" = (
+/obj/item/ball,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
"dB" = (
/obj/machinery/conveyor{
dir = 1;
@@ -1295,11 +660,12 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"dD" = (
-/obj/effect/floor_decal/corner/beige{
- dir = 5
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
},
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
"dE" = (
/obj/effect/floor_decal/corner/beige{
dir = 5
@@ -1308,12 +674,23 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"dF" = (
-/obj/effect/floor_decal/corner/beige{
- dir = 5
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/camera/network/mining,
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
"dG" = (
/obj/machinery/conveyor{
id_tag = "mining_internal"
@@ -1327,26 +704,12 @@
/obj/machinery/light{
dir = 1
},
+/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"dI" = (
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"dJ" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"dK" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
"dL" = (
/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
dir = 0;
@@ -1355,7 +718,8 @@
tag_airpump = "sat1_vent";
tag_chamber_sensor = "sat1_sensor";
tag_exterior_door = "sat1_airlock_exterior";
- tag_interior_door = "sat1_airlock_interior"
+ tag_interior_door = "sat1_airlock_interior";
+ pixel_x = -8
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 4;
@@ -1363,313 +727,159 @@
},
/obj/machinery/airlock_sensor{
id_tag = "sat1_sensor";
- pixel_y = 20
+ pixel_y = 20;
+ pixel_x = 8
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
+"dM" = (
+/obj/structure/stairs/long/west,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
"dN" = (
+/obj/structure/closet,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"dR" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"dU" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"dO" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/structure/disposalpipe/junction/yjunction{
dir = 1
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"dP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/area/ministation/maint/l1central)
+"dV" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
dir = 4
},
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"eh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"dQ" = (
+/area/ministation/janitor)
+"ej" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "4-8"
- },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"dR" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/cargo)
+"ek" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 1
},
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"el" = (
/obj/machinery/door/airlock/hatch/maintenance,
/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"dS" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/cargo)
+"en" = (
+/obj/machinery/camera/network/engineering{
+ name = "Tube Entrance";
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "1-8"
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"eo" = (
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
},
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"dT" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"es" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/random/trash,
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"dU" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "_East APC";
- pixel_x = 27;
- pixel_y = 2
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/structure/cable,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sec)
-"dW" = (
-/obj/machinery/atmospherics/portables_connector,
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"dX" = (
-/obj/machinery/papershredder,
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"dY" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
-/area/ministation/court)
-"dZ" = (
+/area/ministation/dorms)
+"et" = (
+/obj/structure/closet/secure_closet/miner,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"ea" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 2
+/area/ministation/cargo)
+"eu" = (
+/turf/simulated/wall,
+/area/ministation/maint/l1ne)
+"ev" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"eb" = (
-/obj/structure/cable,
+/turf/simulated/wall,
+/area/ministation/dorms)
+"ex" = (
/obj/structure/cable{
- icon_state = "0-4"
+ icon_state = "4-8"
},
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast2";
- name = "enclosure 2 blast door"
- },
-/turf/simulated/floor,
-/area/ministation/science)
-"ec" = (
-/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/obj/machinery/button/blast_door{
- id_tag = "slimeblast2";
- name = "Enclosure 2 Blastdoors Button"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"ee" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ef" = (
-/obj/machinery/disposal,
-/obj/structure/disposalpipe/trunk{
- dir = 4
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"eg" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast3";
- name = "enclosure 3 blast door"
- },
-/turf/simulated/floor,
-/area/ministation/science)
-"eh" = (
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/obj/structure/disposaloutlet{
- dir = 1
- },
-/turf/simulated/floor,
-/area/ministation/science)
-"ej" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"ek" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/effect/decal/cleanable/blood/oil,
/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 1
},
/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"el" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/cargo)
-"em" = (
-/obj/machinery/light/small,
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"en" = (
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
- },
-/turf/simulated/floor/plating,
-/area/ministation/cargo)
-"eo" = (
-/obj/machinery/power/apc{
- name = "_South APC";
- pixel_y = -24
- },
-/obj/structure/cable,
-/turf/simulated/floor/plating,
-/area/ministation/cargo)
-"ep" = (
-/obj/structure/window/basic/full,
-/turf/simulated/floor/plating,
-/area/ministation/hall/s)
-"eq" = (
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"er" = (
-/obj/machinery/door/blast/shutters/open{
- id_tag = "cargoshut";
- name = "cargo shutters"
- },
-/obj/effect/wallframe_spawn,
-/obj/machinery/status_display/supply_display{
- pixel_y = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"es" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"et" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/area/ministation/engine)
+"ez" = (
+/obj/effect/floor_decal/industrial/custodial/corner{
dir = 4
},
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
- },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"eu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-4"
+/area/ministation/trash)
+"eB" = (
+/obj/machinery/conveyor{
+ dir = 9;
+ id_tag = "recycler"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"ew" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/wall/r_wall,
-/area/ministation/security)
-"ex" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"ez" = (
-/obj/structure/bed,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"eB" = (
-/obj/structure/table,
-/obj/machinery/faxmachine,
-/turf/simulated/floor/tiled,
-/area/ministation/court)
+/turf/simulated/floor/plating,
+/area/ministation/trash)
"eC" = (
-/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/recharge_station,
/turf/simulated/floor/plating,
-/area/ministation/court)
-"eD" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/area/ministation/ai_sat)
"eE" = (
-/obj/effect/floor_decal/corner/beige{
- dir = 9
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/obj/machinery/alarm{
+/obj/machinery/embedded_controller/radio/airlock/docking_port{
dir = 4;
- pixel_x = -22
+ id_tag = "cargo_bay";
+ tag_airpump = "cargo_vent";
+ tag_chamber_sensor = "cargo_sensor";
+ tag_exterior_door = "cargo_airlock_exterior";
+ tag_interior_door = "cargo_airlock_interior";
+ pixel_x = -20
},
-/obj/vehicle/train/cargo/engine,
+/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"eF" = (
@@ -1685,37 +895,19 @@
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"eJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
+"eI" = (
+/obj/machinery/atmospherics/portables_connector,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
"eK" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 1;
- id_tag = "stern_engineering_vent"
- },
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"eL" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/loading{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/area/ministation/supermatter)
"eM" = (
-/obj/machinery/camera/autoname,
-/obj/machinery/newscaster{
+/obj/machinery/atm{
pixel_y = 32
},
+/obj/machinery/camera/network/hallway,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"eO" = (
@@ -1725,182 +917,103 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"eP" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"eQ" = (
-/obj/machinery/door/airlock/hatch/maintenance,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/junction,
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sec)
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
"eR" = (
-/obj/machinery/alarm{
- pixel_y = 23
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/simulated/floor/plating,
-/area/ministation/court)
-"eS" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/machinery/light/small{
+/obj/effect/floor_decal/corner/white/diagonal{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/court)
-"eT" = (
-/obj/structure/rack,
-/obj/item/shield/riot,
-/obj/item/shield/riot,
-/obj/item/storage/box/ammo/shotgunshells,
-/obj/item/clothing/suit/armor/reactive,
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"eU" = (
-/obj/structure/rack,
-/obj/item/target,
-/obj/item/target/alien,
-/obj/item/target/syndicate,
-/obj/machinery/light/small{
+/obj/effect/floor_decal/corner/white/diagonal,
+/obj/machinery/meter/turf,
+/turf/simulated/floor/reinforced/airmix,
+/area/ministation/atmospherics)
+"eS" = (
+/obj/machinery/atmospherics/portables_connector{
dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"eV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/obj/effect/floor_decal/corner/red{
+ dir = 9
},
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"eU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"eW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/light_switch{
- pixel_y = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"eX" = (
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"eW" = (
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
+/obj/effect/wallframe_spawn/no_grille,
/turf/simulated/floor/tiled,
-/area/ministation/court)
-"eY" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
+/area/ministation/eva)
+"eX" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"eZ" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"fa" = (
-/obj/machinery/door/airlock,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/disused_office)
-"fb" = (
-/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "4-8"
},
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast1";
- name = "enclosure 1 blast door"
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
},
-/turf/simulated/floor,
-/area/ministation/science)
-"fc" = (
-/obj/machinery/disposal,
-/obj/structure/disposalpipe/trunk{
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"eY" = (
+/obj/structure/rack{
dir = 8
},
-/obj/structure/window/reinforced,
-/obj/effect/floor_decal/industrial/warning{
+/obj/item/stack/material/ingot/mapped/osmium/forty,
+/obj/item/stack/material/ingot/mapped/iron/fifty,
+/obj/item/stack/material/ingot/mapped/copper/fifty,
+/obj/item/stack/material/ingot/mapped/chromium/fifty,
+/obj/item/stack/material/ingot/mapped/brass/fifty,
+/obj/item/stack/material/ingot/mapped/blackbronze/fifty,
+/obj/item/stack/material/ingot/mapped/gold/fifty,
+/obj/item/stack/material/ingot/mapped/platinum/twenty,
+/obj/item/stack/material/ingot/mapped/silver/fifty,
+/obj/item/stack/material/ingot/mapped/stainlesssteel/forty,
+/obj/item/stack/material/ingot/mapped/tin/fifty,
+/obj/item/stack/material/ingot/mapped/zinc/fifty,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"eZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/science)
-"fd" = (
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/machinery/optable,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/area/ministation/hall/s1)
"fe" = (
-/obj/machinery/computer/operating,
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ff" = (
-/obj/structure/table,
-/obj/item/scalpel{
- pixel_y = 15
- },
-/obj/item/circular_saw,
-/obj/machinery/camera/network/research,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/wall/r_wall,
+/area/ministation/hall/s1)
"fg" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder,
-/obj/machinery/alarm{
- pixel_y = 23
+/obj/machinery/atmospherics/pipe/simple/visible/green{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"fh" = (
-/obj/structure/closet/crate/bin/ministation,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/obj/machinery/atmospherics/pipe/simple/visible/red,
+/obj/effect/floor_decal/corner/blue{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
"fi" = (
/obj/effect/floor_decal/corner/beige{
dir = 9
@@ -1924,12 +1037,17 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
+/obj/item/stool/padded,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fm" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/table,
+/obj/item/stack/package_wrap,
+/obj/item/storage/box,
+/obj/item/megaphone,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fn" = (
@@ -1938,6 +1056,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/item/stool/padded,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fo" = (
@@ -1947,10 +1066,13 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fp" = (
-/obj/structure/closet/secure_closet/miner,
/obj/effect/floor_decal/corner/beige{
dir = 6
},
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fq" = (
@@ -1958,7 +1080,8 @@
dir = 8
},
/obj/machinery/status_display/supply_display{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/machinery/atmospherics/portables_connector{
pixel_x = -3;
@@ -1968,69 +1091,43 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fr" = (
-/obj/structure/table,
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/item/stack/material/cardstock/mapped/cardboard/fifty,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fs" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/regular{
- pixel_x = 6;
- pixel_y = -5
- },
-/obj/item/multitool,
-/obj/machinery/network/requests_console{
- department = "Cargo Bay";
- pixel_y = 30
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
+/obj/structure/tank_rack/oxygen,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
"ft" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/hologram/holopad,
+/obj/item/radio/intercom/locked{
+ dir = 4;
+ pixel_x = -22
},
-/obj/item/eftpos,
-/obj/machinery/camera/network/mining,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fu" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
- },
-/obj/item/stamp/denied{
- pixel_x = 4;
- pixel_y = -2
- },
-/obj/item/pen/red,
-/obj/effect/floor_decal/corner/beige{
- dir = 6
+/obj/machinery/door/airlock/glass/mining,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/button/blast_door{
- id_tag = "cargoshut";
- name = "Cargo Shutters Button";
- pixel_y = 23
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/item/stamp/cargo,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fv" = (
-/obj/machinery/door/blast/shutters/open{
+/obj/effect/wallframe_spawn,
+/obj/machinery/door/blast/shutters{
id_tag = "cargoshut";
name = "cargo shutters"
},
-/obj/effect/wallframe_spawn,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fw" = (
@@ -2048,6 +1145,8 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
+/obj/item/chems/drinks/juicebox/random,
+/obj/item/chems/drinks/juicebox/sensible_random,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"fz" = (
@@ -2061,9 +1160,6 @@
/obj/abstract/landmark{
name = "lightsout"
},
-/obj/structure/cable{
- icon_state = "2-4"
- },
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"fB" = (
@@ -2075,29 +1171,12 @@
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"fC" = (
-/obj/machinery/power/apc{
- areastring = null;
- name = "_South APC";
- pixel_y = -24
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/simulated/floor/plating,
-/area/ministation/detective)
-"fD" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
+"fE" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/maint/sec)
+/area/ministation/supermatter)
"fF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -2108,51 +1187,24 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fG" = (
-/obj/machinery/door/airlock/glass/command{
- autoset_access = 0;
- name = "Telecommunications glass airlock";
- req_access = list("ACCESS_TELECOMS")
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"fH" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 9
- },
-/obj/machinery/camera/network/security{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"fI" = (
-/obj/machinery/door/firedoor{
- dir = 8
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular/open{
+ id_tag = "scraplock";
+ dir = 4;
+ name = "External Blast Doors"
},
-/obj/machinery/door/airlock/glass/security{
- name = "Brig Access Airlock";
- req_access = list(list("ACCESS_SECURITY","ACCESS_LAWYER"));
- autoset_access = 0
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/visible/red{
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/court)
+/turf/simulated/floor/plating,
+/area/ministation/atmospherics)
"fJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/universal{
dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"fK" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/window/westleft,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast1";
- name = "enclosure 1 blast door"
- },
-/turf/simulated/floor,
-/area/ministation/science)
"fL" = (
/obj/structure/rack,
/obj/item/pickaxe,
@@ -2168,6 +1220,9 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
+/obj/machinery/camera/network/mining{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fM" = (
@@ -2192,163 +1247,146 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fQ" = (
-/obj/structure/closet/secure_closet/cargotech,
/obj/effect/floor_decal/corner/beige{
dir = 6
},
-/obj/item/key/cargo_train,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fR" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
+/obj/machinery/camera/network/mining{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
},
-/obj/structure/filing_cabinet,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fS" = (
-/obj/machinery/computer/modular/preset/supply_public,
/obj/effect/floor_decal/corner/beige{
dir = 6
},
+/obj/machinery/computer/modular/preset/merchant/ministation{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"fU" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/door/firedoor{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/obj/structure/window/basic/full,
+/turf/simulated/floor/plating,
+/area/ministation/dorms)
"fV" = (
-/obj/machinery/power/apc{
- name = "_South APC";
- pixel_y = -24
+/obj/item/radio/intercom{
+ broadcasting = 1;
+ frequency = 1447;
+ listening = 0;
+ name = "Station Intercom (AI Private)";
+ pixel_y = -30;
+ dir = 1
},
-/obj/structure/cable,
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"fX" = (
-/obj/item/gun/energy/taser,
-/obj/structure/closet/secure_closet/guncabinet,
-/obj/item/gun/energy/taser,
-/obj/item/gun/projectile/shotgun/pump,
-/obj/item/gun/projectile/shotgun/pump,
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"fY" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ dir = 4
},
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"fW" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden,
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"fZ" = (
-/obj/effect/floor_decal/corner/red{
- dir = 6
- },
+/area/ministation/engine)
+"fX" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/obj/structure/cable{
icon_state = "2-4"
},
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"ga" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/area/ministation/hall/s1)
+"fZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/effect/floor_decal/corner/yellow{
+ dir = 10
},
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"gb" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
+/area/ministation/hall/s1)
+"ga" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
+/obj/effect/decal/cleanable/blood/oil,
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"gb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/flora/pottedplant/minitree,
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"gc" = (
-/obj/structure/closet/secure_closet/brig,
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"gd" = (
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular/open{
- id_tag = "slimeblast1";
- name = "enclosure 1 blast door"
- },
-/turf/simulated/floor,
-/area/ministation/science)
+/area/ministation/hall/s1)
"ge" = (
-/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
},
-/obj/structure/window/reinforced{
- dir = 1
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"gg" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id_tag = "trash_sort"
},
-/obj/machinery/button/blast_door{
- id_tag = "slimeblast1";
- name = "Enclosure 1 Blastdoors Button"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/effect/floor_decal/industrial/warning{
+/obj/structure/window/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"gi" = (
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
dir = 4
},
-/obj/machinery/camera/network/research{
- dir = 1
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "bulb1"
},
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"gf" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"gg" = (
-/obj/abstract/landmark/start{
- name = "Scientist"
+/obj/machinery/atmospherics/pipe/simple/visible/supply,
+/obj/item/radio/intercom{
+ dir = 8;
+ pixel_x = 22
},
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"gh" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"gi" = (
-/obj/machinery/smartfridge/secure/extract,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
"gj" = (
/obj/machinery/light{
dir = 8;
icon_state = "tube1"
},
-/obj/item/radio/intercom{
- dir = 4;
- pixel_x = -25
- },
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/vehicle/train/cargo/trolley,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/machinery/mining/brace,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gk" = (
@@ -2367,6 +1405,21 @@
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
+"gm" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"gn" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/space,
+/area/space)
"go" = (
/obj/machinery/light{
dir = 4;
@@ -2377,14 +1430,13 @@
dir = 6
},
/obj/item/toy/prize/powerloader,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gq" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
- },
-/obj/machinery/fabricator,
+/obj/effect/wallframe_spawn,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gr" = (
@@ -2397,23 +1449,16 @@
/obj/abstract/landmark/start{
name = "Cargo Technician"
},
-/obj/structure/bed/chair,
/obj/effect/floor_decal/corner/beige{
dir = 6
},
+/obj/structure/bed/chair/office,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gt" = (
-/obj/structure/table/reinforced,
-/obj/item/folder/yellow,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/window/brigdoor/westleft,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "cargoshut";
- name = "cargo shutters"
- },
+/obj/machinery/door/airlock/glass/mining,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gu" = (
@@ -2427,13 +1472,13 @@
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"gw" = (
-/obj/structure/closet/crate/bin/ministation,
/obj/effect/floor_decal/corner/beige{
dir = 9
},
-/obj/item/chems/drinks/juicebox/random,
-/obj/item/chems/drinks/juicebox/random,
-/obj/item/chems/drinks/juicebox/sensible_random,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/obj/machinery/disposal,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"gx" = (
@@ -2443,6 +1488,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"gy" = (
@@ -2451,117 +1497,49 @@
},
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"gA" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"gB" = (
-/obj/machinery/door/airlock/glass/command{
- autoset_access = 0;
- name = "Armory airlock";
- req_access = list("ACCESS_ARMORY")
- },
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"gC" = (
-/obj/effect/floor_decal/corner/red{
- dir = 6
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
"gD" = (
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/window/brigdoor/eastright{
- id_tag = "Cell 2"
- },
-/obj/effect/floor_decal/corner/red{
- dir = 9
+/obj/machinery/port_gen/pacman/super,
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
+/turf/simulated/floor/plating,
+/area/ministation/engine)
"gE" = (
-/obj/structure/table/reinforced,
-/obj/item/toy/eightball,
-/obj/machinery/light/small{
+/obj/structure/window/reinforced{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"gF" = (
-/obj/effect/floor_decal/corner/purple,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"gG" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/purple{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"gH" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/effect/floor_decal/corner/purple{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 4;
+ external_pressure_bound = 0;
+ external_pressure_bound_default = 0;
+ icon_state = "map_vent_in";
+ id_tag = "air_out";
+ internal_pressure_bound = 2000;
+ internal_pressure_bound_default = 2000;
+ pressure_checks = 2;
+ pressure_checks_default = 2;
+ pump_direction = 0;
+ use_power = 1
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/floor/reinforced/airmix,
+/area/ministation/atmospherics)
"gI" = (
-/obj/structure/table,
-/obj/item/chems/spray/extinguisher{
- pixel_x = 4;
- pixel_y = 3
+/obj/machinery/light/small{
+ dir = 8
},
-/obj/item/chems/spray/extinguisher,
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "l1ne_vent"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
"gJ" = (
-/obj/structure/table,
-/obj/machinery/light,
-/obj/item/storage/box/monkeycubes,
-/obj/item/stack/material/puck/mapped/uranium/ten,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"gK" = (
-/obj/structure/table,
-/obj/item/storage/box/syringes,
-/obj/item/chems/glass/beaker/large,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/hall/n)
"gL" = (
-/obj/vehicle/train/cargo/trolley,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/machinery/mining/drill,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gM" = (
@@ -2570,22 +1548,15 @@
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"gN" = (
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
"gO" = (
/obj/machinery/door/firedoor{
dir = 8
},
+/obj/effect/floor_decal/industrial/warning/fulltile,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gP" = (
-/obj/machinery/photocopier,
-/obj/effect/floor_decal/corner/beige{
- dir = 6
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/effect/floor_decal/industrial/warning/fulltile,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"gQ" = (
@@ -2604,6 +1575,7 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"gT" = (
@@ -2611,140 +1583,101 @@
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"gU" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "pqm_airlock_interior"
+/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{
+ dir = 4
},
-/obj/machinery/button/access/interior{
- id_tag = "pqm_airlock";
- name = "interior access button";
- pixel_x = 10;
- pixel_y = 20
+/obj/effect/floor_decal/corner/blue{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "0-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
+ },
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
"gV" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/machinery/light{
+ dir = 1
},
-/obj/structure/bookcase/skill_books/random,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"gX" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+/obj/effect/floor_decal/industrial/loading{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"ha" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
+/area/space)
+"gW" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 1;
+ id_tag = "stern_engineering_vent"
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hb" = (
-/obj/effect/floor_decal/corner/red{
- dir = 6
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "stern_engineering_airlock";
+ pixel_y = -6;
+ tag_airpump = "stern_engineering_vent";
+ tag_chamber_sensor = "stern_engineering_sensor";
+ tag_exterior_door = "stern_engineering_airlock_exterior";
+ tag_interior_door = "stern_engineering_airlock_interior";
+ dir = 4;
+ pixel_x = -20;
+ name = "2. Airlock Controller"
},
-/obj/machinery/door_timer/cell_2{
- pixel_x = 31;
- pixel_y = -1
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"gX" = (
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"gY" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green{
+ dir = 9
},
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"gZ" = (
+/obj/machinery/computer/modular/preset/engineering{
+ dir = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/smcontrol)
"hc" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/wall/r_wall,
-/area/ministation/security)
-"hd" = (
-/obj/structure/bed,
-/obj/item/bedsheet/mime,
-/obj/item/radio/intercom{
- dir = 1;
- pixel_y = -27
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -24
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"he" = (
-/obj/machinery/door/airlock/glass,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/disused)
-"hf" = (
-/obj/structure/table,
-/obj/item/wrench,
-/obj/item/crowbar/red,
-/obj/machinery/light{
+/obj/machinery/computer/modular/preset/civilian{
dir = 1
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hg" = (
-/obj/structure/table,
-/obj/item/clothing/mask/gas/budget,
-/obj/item/clothing/glasses/science,
-/obj/machinery/camera/network/research,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hh" = (
-/obj/structure/closet/l3closet/scientist,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hi" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 10
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"hf" = (
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"hk" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"hj" = (
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/glass/science,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hm" = (
-/obj/machinery/atmospherics/unary/vent_pump/siphon/on,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/science)
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
"hn" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/design_database,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/science)
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
"ho" = (
/obj/machinery/atmospherics/portables_connector{
pixel_x = -3
@@ -2753,20 +1686,10 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"hp" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
+/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"hq" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 5;
- pixel_y = -32
- },
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -2776,27 +1699,20 @@
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"hr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/effect/floor_decal/corner/paleblue/full,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
"hs" = (
-/obj/machinery/light_switch{
- dir = 1;
- pixel_y = -23
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning/fulltile,
+/obj/machinery/light{
+ icon_state = "tube1"
+ },
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"ht" = (
@@ -2805,101 +1721,50 @@
pixel_y = -22
},
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning/fulltile,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"hu" = (
/obj/machinery/door/firedoor{
dir = 8
},
-/obj/machinery/door/airlock/mining,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"hv" = (
-/obj/structure/closet/secure_closet/security,
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hw" = (
-/obj/structure/table,
-/obj/item/clothing/glasses/sunglasses,
-/obj/item/clothing/glasses/sunglasses,
-/obj/item/clothing/head/earmuffs,
-/obj/item/clothing/head/earmuffs,
-/obj/machinery/network/requests_console{
- department = "Security";
- pixel_y = 30
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hx" = (
-/obj/structure/table,
-/obj/item/storage/box/handcuffs{
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/item/storage/box/flashbangs,
-/obj/machinery/recharger/wallcharger{
- pixel_y = 25
- },
-/obj/machinery/light_switch{
- dir = 8;
- pixel_x = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hz" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hA" = (
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+ icon_state = "4-8"
},
-/obj/machinery/computer/modular/preset/security{
- dir = 4
+/obj/effect/floor_decal/industrial/warning/fulltile,
+/obj/machinery/door/airlock/double/mining{
+ dir = 8
},
-/turf/simulated/floor/wood,
-/area/ministation/detective)
-"hB" = (
-/turf/simulated/floor/carpet/red,
-/area/ministation/detective)
-"hC" = (
-/obj/structure/table/woodentable,
-/obj/item/camera,
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/item/taperecorder,
-/obj/item/folder/yellow,
-/obj/item/storage/secure/safe{
- pixel_x = 4;
- pixel_y = 26
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"hv" = (
+/obj/machinery/atmospherics/pipe/simple/visible/red{
+ dir = 6
},
-/obj/structure/filing_cabinet/wall{
- pixel_x = 32
+/obj/effect/floor_decal/corner/blue,
+/obj/structure/fireaxecabinet{
+ pixel_y = 32
},
-/turf/simulated/floor/carpet/red,
-/area/ministation/detective)
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
"hE" = (
/obj/machinery/atmospherics/binary/pump/on{
target_pressure = 200;
@@ -2907,113 +1772,9 @@
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"hF" = (
-/obj/machinery/button/blast_door{
- id_tag = "scishut";
- name = "Science Shutter Button";
- pixel_x = -25;
- pixel_y = -6
- },
-/obj/item/radio/intercom{
- dir = 4;
- pixel_x = -25
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hG" = (
-/obj/effect/floor_decal/corner/purple{
- dir = 4
- },
-/obj/structure/sign/department/xenobio_3{
- pixel_y = 32
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hH" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/purple{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hI" = (
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/structure/table,
-/obj/item/disk/tech_disk,
-/obj/item/disk/tech_disk,
-/obj/item/disk/design_disk,
-/obj/item/disk/design_disk,
-/obj/effect/floor_decal/corner/purple{
- dir = 1
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hJ" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hK" = (
-/obj/structure/table,
-/obj/item/stock_parts/micro_laser,
-/obj/item/stock_parts/micro_laser,
-/obj/item/stock_parts/manipulator,
-/obj/item/stock_parts/capacitor,
-/obj/item/stock_parts/capacitor,
-/obj/item/stock_parts/manipulator,
-/obj/machinery/alarm{
- pixel_y = 23
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hL" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/scanning_module,
-/obj/item/stock_parts/scanning_module{
- pixel_x = 2;
- pixel_y = 3
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"hM" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/science)
-"hN" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 5
- },
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/science)
-"hO" = (
-/obj/machinery/atmospherics/pipe/manifold/visible{
- dir = 1
- },
-/turf/simulated/floor/tiled/dark,
-/area/ministation/science)
"hP" = (
/obj/structure/sign/warning/docking_area{
- pixel_y = 30
+ pixel_y = 32
},
/obj/machinery/door/airlock/external/bolted{
id_tag = "cargo_airlock_interior";
@@ -3029,9 +1790,6 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"hR" = (
@@ -3044,9 +1802,6 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"hS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/closet/crate,
-/obj/item/stack/material/ore/slag,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
@@ -3054,29 +1809,27 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"hT" = (
-/obj/structure/closet/crate,
-/obj/item/stack/material/ore/glass,
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/camera/network/mining{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"hU" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/light/small{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
},
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
+/area/ministation/maint/eastatmos)
"hV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/light{
@@ -3085,73 +1838,19 @@
},
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"hW" = (
-/obj/machinery/newscaster{
- pixel_x = -32
+"hY" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/flora/pottedplant/largebush,
-/obj/machinery/camera/network/security{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
},
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hY" = (
-/obj/structure/table,
-/obj/item/assembly/timer,
-/obj/item/flash,
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"hZ" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"ia" = (
-/obj/effect/floor_decal/corner/red{
- dir = 6
- },
-/obj/machinery/door_timer/cell_1{
- pixel_x = 31
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"ib" = (
-/obj/machinery/network/requests_console{
- department = "Detective's office";
- pixel_x = -30
- },
-/obj/machinery/forensic,
-/turf/simulated/floor/wood,
-/area/ministation/detective)
-"ic" = (
-/obj/abstract/landmark/start{
- name = "Detective"
- },
-/obj/structure/bed/chair/office/comfy/brown{
- dir = 4
- },
-/turf/simulated/floor/carpet/red,
-/area/ministation/detective)
-"id" = (
-/obj/structure/table/woodentable,
-/obj/item/folder/red,
-/obj/item/hand_labeler,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/simulated/floor/carpet/red,
-/area/ministation/detective)
+/area/ministation/hall/n)
"ie" = (
/obj/machinery/door/airlock/external/bolted{
id_tag = "cargo_airlock_exterior";
@@ -3161,97 +1860,41 @@
/turf/simulated/floor/plating,
/area/ministation/cargo)
"if" = (
-/obj/machinery/door/window/eastright,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "scishut";
- name = "science shutters"
+/obj/machinery/fabricator/pipe,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 4
},
-/obj/structure/table/reinforced,
-/obj/machinery/door/firedoor{
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/science)
-"ig" = (
-/obj/effect/floor_decal/industrial/warning/corner,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ih" = (
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ii" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
"ij" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ik" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"in" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
- },
-/obj/machinery/recharger,
-/obj/structure/table,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"io" = (
-/obj/machinery/door/firedoor,
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/science)
-"ip" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 9
- },
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/science)
-"iq" = (
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"ir" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"is" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"it" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/meter{
- name = "Distribution Loop"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"il" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/supermatter)
+"iq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
"iu" = (
/obj/machinery/vending/cola{
dir = 4;
@@ -3259,187 +1902,46 @@
},
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"iv" = (
-/obj/machinery/vending/snack{
- dir = 8;
- pixel_x = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"iw" = (
-/obj/item/radio/intercom{
- dir = 4;
- pixel_x = -25
- },
-/obj/machinery/computer/modular/preset/security{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"ix" = (
-/obj/abstract/landmark/start{
- name = "Security Officer"
- },
-/obj/structure/bed/chair,
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"iy" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
"iz" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"iA" = (
-/obj/effect/floor_decal/corner/red{
- dir = 6
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
"iB" = (
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/window/brigdoor/eastright{
- id_tag = "Cell 1"
- },
-/obj/effect/floor_decal/corner/red{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"iC" = (
-/obj/effect/decal/cleanable/blood,
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"iD" = (
-/obj/structure/table/reinforced,
-/obj/item/synthesized_instrument/violin,
-/obj/machinery/light/small{
- dir = 4
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
"iE" = (
-/obj/structure/closet/secure_closet/detective,
-/turf/simulated/floor/wood,
-/area/ministation/detective)
-"iG" = (
-/obj/structure/table/woodentable,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/pen,
-/obj/item/storage/fancy/cigarettes,
-/obj/item/handcuffs,
-/obj/machinery/newscaster{
- pixel_x = 32
- },
-/turf/simulated/floor/carpet/red,
-/area/ministation/detective)
-"iH" = (
-/obj/machinery/cryopod{
- dir = 1
- },
-/obj/abstract/landmark/latejoin/cryo,
-/obj/machinery/camera/network/medbay{
- dir = 1
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8;
+ level = 2
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"iI" = (
-/obj/structure/table,
-/obj/item/hand_labeler,
-/obj/item/pen,
-/obj/machinery/network/requests_console{
- department = "Science";
- name = "Science Requests Console";
- pixel_x = -30
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"iJ" = (
-/obj/effect/floor_decal/industrial/warning{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"iK" = (
-/obj/machinery/fabricator/imprinter,
-/turf/simulated/floor/tiled/techfloor,
-/area/ministation/science)
-"iL" = (
-/turf/simulated/floor/tiled/techfloor,
-/area/ministation/science)
-"iM" = (
-/obj/machinery/destructive_analyzer,
-/turf/simulated/floor/tiled/techfloor,
-/area/ministation/science)
-"iN" = (
/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ dir = 1;
+ icon_state = "warning"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"iO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"iM" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"iP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"iQ" = (
-/obj/abstract/landmark/start{
- name = "Scientist"
- },
-/obj/structure/bed/chair/office/light,
-/obj/item/radio/intercom{
- dir = 8;
- pixel_x = 20
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"iR" = (
-/obj/machinery/portable_atmospherics/canister/air,
-/obj/machinery/atmospherics/portables_connector{
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"iN" = (
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"iS" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/glass/science,
-/obj/machinery/atmospherics/pipe/simple/visible,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/science)
-"iT" = (
-/obj/machinery/atmospherics/pipe/manifold/visible,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
"iU" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/binary/pump/on{
@@ -3449,339 +1951,96 @@
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"iV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/closet/crate,
-/obj/item/stack/material/ore/glass,
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "cargo_vent"
},
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/plating,
/area/ministation/cargo)
"iW" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/structure/closet/crate,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"iX" = (
-/turf/simulated/wall,
-/area/ministation/commons)
-"iY" = (
-/obj/machinery/door/airlock/double/glass/civilian,
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"iZ" = (
-/obj/machinery/vending/coffee{
- dir = 4;
- pixel_x = -5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"ja" = (
-/obj/machinery/vending/cigarette{
- dir = 8;
- pixel_x = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"jb" = (
-/obj/machinery/computer/prisoner{
- dir = 4
- },
-/obj/machinery/button/blast_door{
- id_tag = "secshut";
- name = "security shutter button";
- pixel_y = -32
- },
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"jc" = (
-/obj/effect/shuttle_landmark/escape_shuttle/station,
-/turf/space,
-/area/space)
"jd" = (
-/obj/machinery/computer/station_alert/security{
- dir = 8
+/obj/machinery/door/airlock/hatch/maintenance{
+ autoset_access = 0
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
+/turf/simulated/floor/plating,
+/area/ministation/trash)
"je" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/structure/closet/crate/bin/ministation,
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"jg" = (
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/machinery/button/alternate/door{
- dir = 1;
- id_tag = "secdoor";
- name = "security airlock access button";
- pixel_x = -25;
- pixel_y = -25
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"jh" = (
-/obj/effect/floor_decal/corner/red{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"jf" = (
+/obj/machinery/atmospherics/binary/circulator{
+ anchored = 1;
dir = 4
},
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"ji" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/obj/machinery/light_switch{
- dir = 4;
- pixel_x = -23
- },
-/turf/simulated/floor/wood,
-/area/ministation/detective)
-"jj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/wood,
-/area/ministation/detective)
-"jk" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/obj/machinery/camera/network/security{
- dir = 1
- },
-/turf/simulated/floor/wood,
-/area/ministation/detective)
-"jl" = (
-/obj/structure/rack,
-/obj/random/maintenance,
-/obj/item/clothing/suit/storage/toggle/bomber,
/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"jm" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
- },
-/obj/item/pen,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"jn" = (
-/obj/machinery/fabricator/protolathe,
-/turf/simulated/floor/tiled/techfloor,
-/area/ministation/science)
-"jo" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/simulated/floor/tiled/techfloor,
-/area/ministation/science)
-"jp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/computer/design_console{
- dir = 8
+/area/ministation/supermatter)
+"jh" = (
+/turf/simulated/wall,
+/area/ministation/maint/l1central)
+"jj" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -24
},
-/turf/simulated/floor/tiled/techfloor,
-/area/ministation/science)
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
"jq" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/effect/floor_decal/corner/purple,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"jr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/floor_decal/corner/purple{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"js" = (
-/obj/structure/table,
-/obj/item/chems/glass/beaker/large,
-/obj/item/chems/glass/beaker/sulphuric,
-/obj/item/chems/dropper,
-/obj/effect/floor_decal/corner/purple{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"jt" = (
-/obj/structure/table,
-/obj/item/stock_parts/console_screen,
-/obj/item/stock_parts/console_screen,
-/obj/item/stock_parts/console_screen,
-/obj/item/stock_parts/matter_bin,
-/obj/item/stock_parts/matter_bin,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ju" = (
-/obj/structure/table,
-/obj/item/clothing/glasses/welding,
-/obj/item/stack/material/pane/mapped/glass/fifty,
-/obj/item/stack/material/reinforced/mapped/fiberglass/fifty,
-/obj/item/stack/material/sheet/mapped/steel/fifty,
-/obj/item/stack/material/shiny/mapped/aluminium/fifty,
-/obj/item/stack/material/ingot/mapped/copper/fifty,
-/obj/machinery/camera/network/research{
- dir = 1
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"jv" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
-/obj/item/storage/toolbox/mechanical{
- pixel_x = 2;
- pixel_y = 3
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"jw" = (
-/obj/abstract/landmark{
- name = "blobstart"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"jx" = (
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 4
- },
-/obj/item/radio/intercom{
- dir = 8;
- pixel_x = 20
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
"jy" = (
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
+/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
-/area/ministation/cargo)
+/area/ministation/dorms)
"jz" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"jB" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/obj/structure/closet/secure_closet{
+ closet_appearance = /decl/closet_appearance/secure_closet/security;
+ req_access = list("ACCESS_BRIG");
+ name = "Security locker"
},
-/obj/structure/table,
-/obj/random/plushie,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"jA" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 9
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
"jC" = (
-/obj/machinery/alarm{
- pixel_y = 23
- },
-/obj/structure/closet/wardrobe/pjs,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
-"jD" = (
-/obj/machinery/photocopier,
-/obj/machinery/status_display{
- pixel_y = 32
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/blast/regular/open{
+ id_tag = "scraplock";
+ dir = 4;
+ name = "External Blast Doors"
},
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"jE" = (
-/obj/structure/table/woodentable,
-/obj/machinery/fabricator/book,
-/obj/machinery/light{
- dir = 1
+/obj/machinery/atmospherics/pipe/manifold/visible/red{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
+/turf/simulated/floor/plating,
+/area/ministation/atmospherics)
"jF" = (
-/obj/machinery/camera/autoname,
-/obj/structure/bookcase/skill_books/random,
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"jG" = (
-/obj/machinery/washing_machine,
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
"jH" = (
/obj/machinery/alarm{
pixel_y = 23
@@ -3789,38 +2048,34 @@
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
"jI" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
+/obj/structure/closet/secure_closet/cargotech,
+/obj/item/key/cargo_train,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/area/ministation/cargo)
"jL" = (
-/obj/machinery/door/airlock/glass/security{
- autoset_access = 0;
- name = "Detective's Office";
- req_access = list("ACCESS_FORENSICS")
+/obj/item/pen,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"jM" = (
+/obj/structure/window/reinforced{
+ dir = 1
},
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/wood,
-/area/ministation/detective)
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airmix,
+/area/ministation/atmospherics)
"jO" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"jP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/glass/science,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/obj/structure/table/gamblingtable,
+/obj/item/paicard,
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
"jQ" = (
/obj/machinery/light/small{
dir = 1
@@ -3830,36 +2085,16 @@
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"jR" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/item/integrated_circuit_printer,
-/obj/structure/table,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"jS" = (
-/obj/structure/table,
-/obj/item/book/skill/service/cooking,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
"jT" = (
-/obj/structure/table,
-/obj/item/hand_labeler,
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
- },
-/obj/item/storage/pill_bottle,
-/obj/machinery/light{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/item/eftpos,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
"jU" = (
/obj/structure/sign/warning/docking_area{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/obj/machinery/door/airlock/external/bolted{
id_tag = "cargo_airlock_interior";
@@ -3873,11 +2108,15 @@
/area/ministation/cargo)
"jV" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/light,
/obj/machinery/atmospherics/binary/pump/on{
target_pressure = 200;
dir = 8
},
+/obj/machinery/camera/network/mining{
+ dir = 1
+ },
+/obj/structure/closet/crate,
+/obj/item/stack/material/ore/slag,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"jW" = (
@@ -3886,6 +2125,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
+/obj/item/stack/material/ore/sand,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"jX" = (
@@ -3895,517 +2135,220 @@
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
+/obj/machinery/light,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
"jY" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"ka" = (
-/obj/structure/bed,
-/obj/item/bedsheet,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
-"kb" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
-"kc" = (
-/obj/machinery/door/airlock/civilian,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
-"kd" = (
-/obj/abstract/landmark/start{
- name = "Assistant"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
"ke" = (
-/obj/machinery/alarm{
- pixel_y = 23
- },
-/obj/machinery/vending/games,
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/commons)
+/area/ministation/hall/n)
"kf" = (
-/obj/effect/wallframe_spawn/no_grille,
-/turf/simulated/floor/plating,
-/area/ministation/commons)
-"kg" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/sign/directions/security{
- dir = 1;
- pixel_x = 32;
- pixel_y = 32
+/turf/simulated/wall,
+/area/ministation/hall/n)
+"kg" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/closet/secure_closet{
+ closet_appearance = /decl/closet_appearance/secure_closet/command/hop;
+ req_access = list("ACCESS_HEAD_OF_PERSONNEL");
+ name = "Lieutenant's locker"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/area/ministation/eva)
"kh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"ki" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"kj" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"kk" = (
-/obj/item/stool/padded,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"kl" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
"km" = (
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor,
-/area/ministation/atmospherics)
-"kn" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 9
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ko" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kp" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 5
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kr" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"ks" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/warning{
+/area/ministation/maint/eastatmos)
+"kq" = (
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/effect/floor_decal/corner/purple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kt" = (
+/turf/simulated/floor/reinforced/airmix,
+/area/ministation/atmospherics)
+"kv" = (
+/obj/machinery/light,
+/obj/machinery/suit_cycler/engineering/ministation,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"kw" = (
+/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/floor_decal/corner/purple{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"kx" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/visible/red{
dir = 5
},
-/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ku" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/newscaster{
- pixel_y = 32
+/obj/machinery/door/blast/regular/open{
+ id_tag = "scraplock";
+ dir = 4;
+ name = "External Blast Doors"
},
-/obj/effect/floor_decal/corner/purple{
- dir = 1
+/turf/simulated/floor/plating,
+/area/ministation/atmospherics)
+"ky" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kv" = (
/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/closet/crate/bin/ministation,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kx" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ky" = (
-/obj/machinery/camera/network/research,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kz" = (
-/mob/living/simple_animal/cat/fluff/ran,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kA" = (
-/obj/machinery/atmospherics/pipe/simple/visible/universal{
- dir = 4
+ dir = 8;
+ pixel_x = -24
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"kB" = (
-/obj/structure/dogbed,
-/obj/item/clothing/shoes/color/brown{
- desc = "Old, but sensible brown shoes. These belong to Ian."
+/area/ministation/cargo)
+"kA" = (
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"kC" = (
-/obj/machinery/atmospherics/pipe/simple/visible/universal{
+/obj/structure/bed/chair/janicart{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"kD" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/pen,
-/obj/item/eftpos,
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"kE" = (
-/obj/machinery/camera/autoname{
- dir = 1
- },
-/obj/machinery/lapvend{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"kF" = (
-/obj/structure/table/woodentable,
-/obj/item/stack/cable_coil/random,
-/obj/item/stack/cable_coil/random,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/storage/toolbox/electrical,
-/obj/item/clothing/gloves/insulated/cheap,
-/obj/item/clothing/gloves/insulated/cheap,
-/obj/machinery/light,
/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"kG" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
+/area/ministation/janitor)
+"kC" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green,
+/obj/machinery/atmospherics/binary/pump{
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/disused)
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
"kH" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor,
-/area/ministation/atmospherics)
+/area/ministation/maint/eastatmos)
"kI" = (
-/obj/abstract/landmark/start{
- name = "Assistant"
- },
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"kJ" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
- },
-/obj/structure/table/gamblingtable,
-/obj/item/deck/cag/black,
-/obj/item/deck/cag/white{
- pixel_z = -6
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+ dir = 5
},
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"kK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -29;
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/light/small{
+ dir = 8
},
/turf/simulated/floor/tiled,
-/area/ministation/commons)
+/area/ministation/eva)
"kL" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"kM" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/structure/hygiene/toilet,
+/obj/structure/window/reinforced/tinted{
dir = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"kN" = (
-/obj/abstract/landmark{
- name = "lightsout"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"kO" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"kP" = (
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/airlock/glass/science,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/structure/window/reinforced/tinted{
+ dir = 4;
+ icon_state = "twindow"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/window/reinforced/tinted{
+ dir = 8;
+ icon_state = "twindow"
},
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"kQ" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+/obj/effect/decal/cleanable/dirt,
+/obj/abstract/landmark/start{
+ name = "Deck Hand"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"kM" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kR" = (
-/obj/effect/floor_decal/industrial/warning{
+/turf/simulated/floor/plating,
+/area/ministation/hall/n)
+"kN" = (
+/obj/structure/window/reinforced{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/atmospherics/unary/outlet_injector{
+ dir = 4;
+ icon_state = "map_injector";
+ id_tag = "n2_in";
+ use_power = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/effect/floor_decal/corner/white/diagonal,
+/obj/effect/floor_decal/corner/white/diagonal{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kS" = (
-/obj/structure/fireaxecabinet{
- pixel_z = 23
- },
-/turf/simulated/floor,
+/turf/simulated/floor/reinforced/airmix,
/area/ministation/atmospherics)
-"kT" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"kU" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kV" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kW" = (
-/obj/abstract/landmark/start{
- name = "Scientist"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"kX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/abstract/landmark{
- name = "Observer-Start"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"kY" = (
-/obj/structure/closet,
-/obj/item/clothing/mask/gas/clown_hat,
-/obj/item/clothing/shoes/clown_shoes,
-/obj/item/clothing/under/clown,
-/obj/item/stamp/clown,
-/obj/item/storage/backpack/clown,
-/obj/item/bikehorn,
-/obj/item/storage/fancy/crayons,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
"kZ" = (
/turf/simulated/wall,
-/area/ministation/hall/w)
-"la" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/hall/w)
+/area/ministation/janitor)
"lb" = (
-/obj/machinery/atmospherics/portables_connector{
- pixel_x = -3
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"lc" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"ld" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/disposalpipe/trunk,
+/obj/machinery/disposal,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"le" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green{
dir = 4
},
-/obj/random/trash,
-/obj/random/trash,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"le" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/obj/effect/floor_decal/corner/red{
+ dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/visible/red,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"lf" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 9
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
+/turf/space,
+/area/space)
"lg" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
- },
-/obj/structure/bed,
-/obj/item/bedsheet,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
-"lh" = (
-/obj/machinery/alarm{
- pixel_y = 23
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/structure/lattice,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
+/turf/space,
+/area/space)
"li" = (
/obj/machinery/atmospherics/pipe/simple/visible{
dir = 4
@@ -4428,28 +2371,11 @@
},
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"lm" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
"ln" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"lo" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
"lp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -4457,171 +2383,98 @@
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"lq" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/camera/autoname{
- dir = 1
+/obj/machinery/camera/network/mining{
+ dir = 8
},
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/closet/crate,
+/obj/item/stack/material/brick/mapped/sandstone/forty,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/area/ministation/cargo)
"lr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"ls" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/area/ministation/engine)
"lt" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/structure/window/reinforced{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"lv" = (
-/obj/structure/closet/emcloset,
-/obj/effect/floor_decal/industrial/warning{
- dir = 10
+/obj/effect/floor_decal/corner/red/diagonal{
+ dir = 4
},
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+/obj/effect/floor_decal/corner/red/diagonal,
+/obj/structure/window/reinforced{
+ health = 1e+007
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lw" = (
-/obj/structure/closet/firecloset,
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lx" = (
-/obj/structure/closet/firecloset,
-/obj/effect/floor_decal/industrial/warning{
- dir = 6
+/turf/simulated/floor/reinforced/nitrogen,
+/area/ministation/atmospherics)
+"ly" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastinterior"
},
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lz" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/light/small{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/science)
-"lA" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
},
-/obj/effect/floor_decal/corner/purple,
+/turf/simulated/floor/plating,
+/area/ministation/smcontrol)
+"lA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+ dir = 9
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
"lB" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/purple{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/disposaloutlet{
dir = 4
},
-/obj/effect/floor_decal/corner/purple{
+/obj/structure/disposalpipe/trunk{
dir = 8
},
-/obj/structure/sign/department/xenoflora{
- pixel_y = -32
+/obj/machinery/conveyor{
+ dir = 4;
+ id_tag = "trash_sort"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"lC" = (
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/machinery/light_switch{
- dir = 1;
- pixel_y = -23
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lE" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lF" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lG" = (
-/obj/machinery/light,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lH" = (
-/obj/machinery/recharge_station,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"lI" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/structure/bed/chair,
-/obj/machinery/status_display{
- pixel_x = -32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"lJ" = (
-/obj/structure/bed/chair,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"lK" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/closet/crate/bin/ministation,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+ dir = 9
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"lL" = (
-/obj/machinery/vending/snack,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
+/area/ministation/eva)
"lM" = (
-/obj/machinery/vending/cola,
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "westatmos_airlock_exterior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "westatmos_airlock";
+ name = "exterior access button";
+ pixel_x = -20;
+ command = "cycle_exterior";
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"lN" = (
-/obj/machinery/space_heater,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
+/turf/simulated/floor/airless,
+/area/ministation/maint/westatmos)
"lO" = (
/obj/machinery/door/airlock/external/glass{
autoset_access = 0;
@@ -4633,2128 +2486,1399 @@
/obj/machinery/button/access/interior{
id_tag = "sat1_airlock";
name = "exterior access button";
- pixel_x = -10;
- pixel_y = 20;
+ pixel_y = 24;
command = "cycle_exterior"
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"lP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"lQ" = (
-/obj/structure/rack{
- dir = 1
- },
-/obj/item/borg/sight/meson,
-/obj/item/clothing/mask/gas/budget,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
"lR" = (
-/obj/structure/rack{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/item/chems/spray/extinguisher,
-/obj/item/clothing/head/hardhat/red,
-/obj/random/gloves,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
+/area/ministation/ai_sat)
"lS" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"lT" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/obj/structure/table,
-/obj/item/storage/pill_bottle/dice,
+"lW" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
-"lU" = (
-/obj/structure/closet/wardrobe/pjs,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/commons)
-"lV" = (
-/obj/structure/closet/medical_wall/ministation{
- pixel_y = -32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"lW" = (
-/obj/machinery/computer/modular/preset/civilian{
- dir = 1
- },
-/obj/machinery/light,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled,
-/area/ministation/commons)
+/area/ministation/hall/s1)
"lX" = (
-/obj/structure/table/woodentable,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/item/pen,
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"lY" = (
-/obj/structure/closet/wardrobe/mixed,
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"lZ" = (
-/obj/structure/closet,
-/obj/item/clothing/under/owl,
-/obj/item/clothing/mask/gas/owl_mask,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
+/turf/simulated/wall,
+/area/ministation/ai_sat)
"ma" = (
-/obj/structure/table/woodentable,
-/obj/item/paicard,
-/obj/random/coin,
-/obj/machinery/recharger,
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
+/obj/machinery/atmospherics/omni/filter{
+ tag_east = 1;
+ tag_north = 3;
+ tag_south = 4;
+ tag_west = 2
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
"mb" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastexterior"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"mc" = (
-/obj/machinery/vending/coffee{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/area/ministation/supermatter)
"md" = (
-/obj/machinery/vending/cigarette{
- dir = 1
+/obj/machinery/meter,
+/obj/effect/floor_decal/corner/blue{
+ dir = 9
},
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
"me" = (
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"mf" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/table,
+/obj/item/storage/firstaid/regular{
+ pixel_x = 6;
+ pixel_y = -5
},
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/glass/science,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/obj/item/multitool,
+/obj/machinery/status_display{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
"mg" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/item/radio/intercom{
name = "Common Channel";
- pixel_y = 25
+ pixel_y = 20
},
/obj/structure/displaycase,
/obj/item/toy/shipmodel,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/steel_grid,
/area/ministation/engine)
-"mh" = (
+"ml" = (
/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"mi" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"mj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 6
},
+/obj/structure/tank_rack/oxygen,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"mk" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/area/ministation/eva)
+"mn" = (
+/obj/machinery/atmospherics/binary/pump{
+ name = "waste pump"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"mo" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"mp" = (
-/obj/machinery/light/small{
- dir = 4
+/area/ministation/supermatter)
+"mq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/portables_connector{
- dir = 8
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
},
-/obj/machinery/portable_atmospherics/powered/pump,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"mq" = (
-/turf/simulated/wall,
-/area/ministation/maint/w)
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
"mr" = (
/obj/machinery/light{
dir = 8;
icon_state = "tube1"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"ms" = (
/turf/simulated/wall,
-/area/ministation/hall/s)
-"mv" = (
+/area/ministation/hall/s1)
+"mu" = (
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
+/area/space)
+"mv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_sat)
"mw" = (
-/obj/machinery/vending/assist/ministation,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"mx" = (
-/obj/machinery/vending/tool,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"my" = (
-/obj/machinery/alarm{
- pixel_y = 23
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/science)
+/area/ministation/ai_sat)
"mz" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plating,
-/area/ministation/science)
-"mA" = (
-/obj/machinery/seed_extractor,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"mB" = (
-/obj/machinery/botany/editor,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/area/ministation/trash)
"mC" = (
-/obj/machinery/botany/extractor,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"mD" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/biogenerator,
-/obj/effect/floor_decal/corner/purple{
- dir = 4
- },
-/obj/item/radio/intercom{
- pixel_y = 25
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 5
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"mE" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"mH" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/purple{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"mF" = (
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/machinery/vending/hydronutrients,
-/obj/effect/floor_decal/corner/purple{
- dir = 1
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"mN" = (
+/obj/machinery/camera/network/ministation/sat{
+ dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"mG" = (
-/obj/structure/table,
-/obj/item/scanner/gas,
-/obj/item/wrench,
-/obj/item/minihoe,
-/obj/item/hatchet,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/universal{
dir = 4
},
-/obj/machinery/camera/network/research,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"mH" = (
-/obj/machinery/atmospherics/portables_connector,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"mI" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 2
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"mJ" = (
-/turf/simulated/floor/reinforced,
-/area/ministation/science)
-"mK" = (
-/obj/machinery/portable_atmospherics/hydroponics/soil,
-/turf/simulated/floor/grass,
-/area/ministation/science)
-"mL" = (
-/obj/structure/table/woodentable,
-/obj/item/eftpos,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"mM" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/machinery/suit_cycler/ministation,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"mO" = (
-/obj/abstract/landmark/latejoin,
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
+/area/ministation/ai_sat)
"mP" = (
-/obj/machinery/door/airlock/external{
- name = "Arrival Airlock";
- autoset_access = 0
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "l1ne_airlock_interior"
},
-/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"mQ" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"mR" = (
-/obj/effect/floor_decal/industrial/loading{
+/obj/machinery/button/access/interior{
+ id_tag = "l1ne_airlock";
+ name = "interior access button";
+ pixel_x = 20;
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
"mS" = (
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
+/area/ministation/janitor)
+"mT" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 4
+ },
+/turf/space,
+/area/space)
"mV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/obj/machinery/atmospherics/pipe/simple/hidden/black{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/ministation/engine)
"mW" = (
-/obj/effect/floor_decal/corner/beige{
- dir = 5
- },
/obj/machinery/atmospherics/portables_connector,
/obj/machinery/portable_atmospherics/canister/air/airlock,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"mY" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 8
- },
-/obj/machinery/portable_atmospherics/powered/pump,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"mZ" = (
-/obj/machinery/network/relay,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
"na" = (
-/obj/effect/floor_decal/industrial/custodial{
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
"nb" = (
-/obj/machinery/conveyor{
- dir = 4;
- id_tag = "recycler"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nc" = (
-/obj/machinery/material_processing/compressor,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nd" = (
-/obj/machinery/conveyor{
- dir = 9;
- id_tag = "recycler"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
"ne" = (
-/obj/machinery/material_processing/stacker,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nf" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-4"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/commons)
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
"ng" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/structure/hygiene/toilet{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nh" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/window/reinforced/tinted,
+/obj/structure/window/reinforced/tinted{
+ dir = 4;
+ icon_state = "twindow"
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
+/obj/structure/window/reinforced/tinted{
+ dir = 8;
+ icon_state = "twindow"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/random_multi/single_item/captains_spare_id,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
"ni" = (
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/cable{
- icon_state = "1-4"
- },
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
"nj" = (
-/obj/machinery/camera/autoname{
- dir = 1
- },
-/turf/simulated/floor/bluegrid,
-/area/ministation/bridge/vault)
-"nk" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"nl" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/eva)
-"nm" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"nn" = (
-/obj/machinery/power/apc{
- dir = 8;
- name = "_West APC";
- pixel_x = -25
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"no" = (
-/obj/machinery/power/apc{
+/obj/structure/disposalpipe/segment{
dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "pipe-c"
},
-/turf/simulated/floor/plating,
-/area/ministation/hall/n)
-"np" = (
/obj/machinery/alarm{
- pixel_y = 23
+ dir = 1;
+ pixel_y = -21
},
-/turf/simulated/floor/plating,
-/area/ministation/hall/n)
-"nq" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"nk" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
},
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"nr" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
+/area/ministation/maint/l1central)
+"nn" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
},
-/obj/structure/table,
-/obj/item/storage/box/syringes,
-/obj/item/storage/box/botanydisk,
-/obj/item/chems/glass/beaker/large,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ns" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
+/obj/structure/sign/warning/vent_port{
dir = 1;
- level = 2
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"nt" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+ pixel_y = -34
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
+/obj/machinery/atmospherics/pipe/manifold/visible/black,
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
"nu" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 5
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"nv" = (
-/obj/machinery/door/window/westleft,
-/obj/machinery/door/window/eastleft,
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
+/obj/structure/closet,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
},
-/turf/simulated/floor/reinforced,
-/area/ministation/science)
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
"nw" = (
-/obj/machinery/atmospherics/unary/vent_pump{
+/obj/structure/window/reinforced{
dir = 8
},
-/turf/simulated/floor/reinforced,
-/area/ministation/science)
-"nx" = (
-/obj/machinery/camera/autoname,
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
+/obj/structure/window/reinforced{
dir = 1
},
-/obj/machinery/suit_cycler/ministation,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"ny" = (
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/obj/machinery/atmospherics/unary/outlet_injector{
+ dir = 8;
+ icon_state = "map_injector";
+ id_tag = "n2_in";
+ use_power = 1
},
-/obj/machinery/suit_cycler/ministation,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
+/turf/simulated/floor/reinforced/nitrogen,
+/area/ministation/atmospherics)
+"nx" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
"nz" = (
/obj/machinery/suit_cycler/engineering/ministation,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/steel_grid,
/area/ministation/engine)
"nA" = (
/obj/machinery/light/small{
dir = 1
},
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"nB" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"nC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"nD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"nE" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/item/clothing/glasses/meson,
-/obj/item/flashlight,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/structure/reagent_dispensers/watertank,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nI" = (
-/obj/effect/floor_decal/industrial/custodial/corner{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 8
+/area/ministation/maint/westatmos)
+"nD" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nJ" = (
+/turf/space,
+/area/space)
+"nE" = (
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"nG" = (
/obj/effect/floor_decal/industrial/custodial{
dir = 1
},
/obj/structure/railing/mapped{
dir = 1
},
-/obj/random/trash,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nK" = (
-/obj/structure/grille,
-/obj/structure/wall_frame,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nL" = (
-/obj/machinery/conveyor{
- id_tag = "recycler"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nM" = (
/obj/machinery/conveyor_switch/oneway{
id_tag = "recycler";
name = "recycler conveyor"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nN" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/light/small{
+/area/ministation/trash)
+"nH" = (
+/obj/structure/railing/mapped,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"nO" = (
-/obj/structure/table,
-/obj/effect/floor_decal/industrial/warning{
- dir = 9
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"nR" = (
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 8
},
-/obj/item/blueprints,
-/obj/item/cell,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"nP" = (
-/obj/machinery/alarm{
- pixel_y = 23
+/obj/machinery/space_heater,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"nS" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/structure/closet/crate,
-/obj/item/stack/material/shiny/mapped/aluminium/fifty,
-/obj/item/stack/material/sheet/mapped/steel/fifty,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/reinforced/mapped/plasteel/fifty,
-/obj/item/stack/material/ingot/mapped/copper/fifty,
-/obj/item/stack/material/pane/mapped/glass/fifty,
-/obj/item/stack/material/reinforced/mapped/fiberglass/fifty,
-/obj/item/stack/material/pane/mapped/rglass/fifty,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"nQ" = (
-/obj/machinery/door/airlock/hatch/maintenance,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"nY" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "westatmos_sensor";
+ pixel_y = 4;
+ pixel_x = -20;
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"nR" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "westatmos_airlock";
+ pixel_y = -4;
+ tag_airpump = "westatmos_vent";
+ tag_chamber_sensor = "westatmos_sensor";
+ tag_exterior_door = "westatmos_airlock_exterior";
+ tag_interior_door = "westatmos_airlock_interior";
+ dir = 4;
+ pixel_x = -20
},
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"nS" = (
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"nT" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/area/ministation/maint/westatmos)
+"ob" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
},
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"nU" = (
-/obj/structure/tank_rack/oxygen,
-/obj/effect/floor_decal/industrial/warning{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"nV" = (
-/obj/machinery/light/small{
+/obj/structure/undies_wardrobe,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"oc" = (
+/obj/structure/table/woodentable,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"od" = (
+/obj/structure/bed/chair/comfy/black,
+/obj/machinery/light,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"oi" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"nW" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"nX" = (
-/obj/abstract/landmark{
- name = "blobstart"
+/turf/simulated/floor,
+/area/ministation/maint/westatmos)
+"ow" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"nZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"oa" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"oy" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/smcontrol)
+"oC" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 8
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/science)
-"ob" = (
+/turf/space,
+/area/space)
+"oE" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"oc" = (
/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"od" = (
-/obj/machinery/computer/air_control{
- dir = 8;
- id_tag = "xenobot";
- name = "Xenoflora Gas Monitor"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"oe" = (
-/obj/machinery/air_sensor{
- id_tag = "xenobot";
- name = "Xenoflora Gas Sensor"
- },
-/turf/simulated/floor/reinforced,
-/area/ministation/science)
-"of" = (
-/obj/machinery/camera/autoname{
- dir = 4
- },
-/obj/machinery/commsrelay,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"og" = (
-/obj/machinery/door/airlock/glass/command{
- autoset_access = 0;
- name = "Telecommunications glass airlock";
- req_access = list("ACCESS_TELECOMS")
- },
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"oh" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/machinery/embedded_controller/radio/airlock/docking_port{
- dir = 4;
- id_tag = "station1";
- tag_airpump = "escape1_vent";
- tag_chamber_sensor = "escape1_sensor";
- tag_exterior_door = "escape1_airlock_exterior";
- tag_interior_door = "escape1_airlock_interior";
- pixel_x = -20
+ icon_state = "2-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"oi" = (
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "2-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/glass/command,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"oj" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/eva)
+"oF" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor,
+/area/ministation/engine)
+"oI" = (
+/obj/abstract/landmark/start{
+ name = "Janitor"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/item/stool,
+/turf/simulated/floor/tiled,
+/area/ministation/janitor)
+"oK" = (
+/obj/structure/cable,
+/obj/machinery/power/apc{
+ name = "SM APC";
+ pixel_x = -27;
+ pixel_y = null;
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/hidden/green,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ok" = (
+/area/ministation/supermatter)
+"oM" = (
/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ icon_state = "0-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
+/obj/machinery/power/smes/buildable/max_cap_in_out,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"oO" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastinterior"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ol" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-8"
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/door/firedoor{
- dir = 8
+/turf/simulated/floor/plating,
+/area/ministation/smcontrol)
+"oS" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 5
},
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"oV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"om" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"oX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"pa" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"on" = (
-/obj/effect/floor_decal/industrial/custodial{
- dir = 1
+/area/ministation/maint/l1ne)
+"pe" = (
+/obj/effect/decal/cleanable/blood/oil,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"pf" = (
+/obj/machinery/shieldgen,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"ph" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"oo" = (
-/obj/effect/floor_decal/industrial/custodial/corner{
+/area/ministation/engine)
+"pi" = (
+/obj/structure/window/reinforced{
dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"op" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/structure/window/reinforced{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"oq" = (
-/obj/machinery/door/airlock/glass,
+/turf/simulated/floor/reinforced/airmix,
+/area/ministation/atmospherics)
+"po" = (
/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/no_grille,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"or" = (
+"pr" = (
+/obj/machinery/door/airlock/glass,
/obj/machinery/door/firedoor,
-/obj/effect/wallframe_spawn/no_grille,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"os" = (
-/obj/structure/table,
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/item/clothing/head/welding,
-/obj/machinery/recharger,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"ot" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"ou" = (
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"ov" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"ow" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"ox" = (
+"ps" = (
+/obj/structure/ladder,
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"px" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-4"
},
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"oy" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"pz" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"oz" = (
-/turf/simulated/wall,
-/area/ministation/medical)
-"oA" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/obj/structure/reagent_dispensers/watertank,
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"oB" = (
-/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/floor_decal/corner/green/full,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"oC" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/chems/glass/bucket,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"oD" = (
+/area/ministation/cargo)
+"pB" = (
/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor,
-/area/ministation/science)
-"oE" = (
-/obj/machinery/light,
-/turf/simulated/floor/reinforced,
-/area/ministation/science)
-"oF" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastinterior"
},
-/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
-/area/ministation/telecomms)
-"oG" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
+/area/ministation/smcontrol)
+"pJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/structure/closet/crate,
-/obj/item/stock_parts/circuitboard/telecomms_hub,
-/obj/item/cell,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"oH" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"pQ" = (
+/obj/machinery/atmospherics/pipe/simple/visible/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{
+ dir = 5
+ },
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"oI" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"pS" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/vehicle/train/cargo/trolley,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"oJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
+/area/ministation/cargo)
+"pV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"pZ" = (
+/obj/effect/floor_decal/industrial/custodial/corner{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"oK" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -22
- },
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
- dir = 8
+ pixel_x = -24
},
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"oL" = (
+/area/ministation/trash)
+"qa" = (
+/obj/machinery/door/airlock/hatch/maintenance,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"oM" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/plating,
-/area/ministation/janitor)
-"oN" = (
-/turf/simulated/wall,
-/area/ministation/janitor)
-"oQ" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/structure/table/woodentable,
-/obj/item/stack/material/panel/mapped/plastic/ten,
-/obj/item/stack/material/plank/mapped/wood/ten,
-/obj/item/stack/material/plank/mapped/wood/ten,
-/obj/item/stack/material/panel/mapped/plastic/ten,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"oR" = (
-/obj/machinery/light/small,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"oS" = (
-/mob/living/simple_animal/mouse,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"oT" = (
+/area/ministation/cargo)
+"qb" = (
/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"oU" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/multitool,
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/item/clothing/gloves/insulated,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"oV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"oW" = (
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"oX" = (
-/obj/item/pen,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"oY" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"oZ" = (
-/obj/structure/reagent_dispensers/fueltank,
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
+ pixel_y = 24
},
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"pa" = (
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"qd" = (
+/obj/machinery/door/airlock/hatch/maintenance,
/obj/structure/cable{
icon_state = "1-2"
},
-/mob/living/simple_animal/mouse,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"qe" = (
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"qf" = (
+/obj/machinery/atmospherics/pipe/simple/visible/yellow,
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"pb" = (
+/area/ministation/supermatter)
+"qr" = (
/obj/structure/closet,
/obj/random/maintenance,
+/obj/item/clothing/accessory/toggleable/hawaii,
+/obj/random/gloves,
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"pc" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "_East APC";
- pixel_x = 27;
- pixel_y = 2
+/area/ministation/maint/l1ne)
+"qt" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/structure/table/woodentable,
+/obj/item/paper_bin{
+ pixel_x = 1;
+ pixel_y = 9
},
-/turf/simulated/floor/plating,
-/area/ministation/medical)
-"pd" = (
-/obj/structure/flora/pottedplant/flower,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pe" = (
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pf" = (
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/obj/item/pen,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pg" = (
-/obj/structure/closet/secure_closet/freezer/fridge,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
- },
-/area/ministation/cafe)
-"ph" = (
+/obj/item/poster,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"qu" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/camera/autoname{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
},
/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"pi" = (
-/obj/machinery/power/apc{
dir = 8;
- name = "_West APC";
- pixel_x = -25
+ icon_state = "tube1"
},
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"qA" = (
/obj/structure/cable{
- icon_state = "0-4"
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
},
-/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"pj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"qD" = (
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "4-8"
+ },
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"qG" = (
+/obj/effect/floor_decal/industrial/custodial/corner{
+ dir = 1
},
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"qI" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "1-2"
},
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/portables_connector{
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"qL" = (
+/obj/machinery/camera/network/engineering{
+ name = "SM West";
dir = 8
},
-/obj/machinery/portable_atmospherics/canister/air/airlock,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"pk" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "_East APC";
- pixel_x = 27;
- pixel_y = 2
+/area/ministation/supermatter)
+"qM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/janitor)
-"pl" = (
-/obj/machinery/light{
+/area/ministation/maint/l1ne)
+"qN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"qO" = (
+/obj/machinery/alarm{
dir = 8;
- icon_state = "tube1"
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
+ pixel_x = 24
},
-/obj/structure/closet/jcloset,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"pm" = (
+/area/ministation/hall/n)
+"qP" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
- },
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"pn" = (
-/obj/structure/table,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/machinery/camera/autoname,
-/obj/item/chems/spray/cleaner,
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"po" = (
-/obj/structure/table,
-/obj/machinery/newscaster{
- pixel_x = 32
- },
-/obj/item/grenade/chem_grenade/cleaner,
-/obj/item/storage/box/lights/mixed,
-/obj/item/grenade/chem_grenade/cleaner,
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"pp" = (
-/obj/effect/decal/cleanable/blood/oil,
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/machinery/door/airlock/hatch/maintenance,
/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"pq" = (
-/obj/machinery/atmospherics/portables_connector{
+/area/ministation/maint/westatmos)
+"qQ" = (
+/obj/structure/railing/mapped{
dir = 1
},
-/obj/machinery/portable_atmospherics/powered/scrubber,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"pr" = (
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
- },
-/obj/machinery/camera/autoname{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"ps" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"qY" = (
+/obj/structure/lattice,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 9
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"pt" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "_East APC";
- pixel_x = 27;
- pixel_y = 2
+/turf/space,
+/area/space)
+"rb" = (
+/obj/machinery/light{
+ dir = 8
},
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"rc" = (
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/hall/s)
-"pu" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
-/obj/item/chems/spray/extinguisher,
-/obj/effect/floor_decal/industrial/warning{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"pv" = (
-/obj/effect/floor_decal/industrial/warning,
-/obj/item/storage/firstaid/regular{
- pixel_x = 6;
- pixel_y = -5
- },
-/obj/structure/table,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+ dir = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"pw" = (
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"rd" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"px" = (
-/obj/effect/floor_decal/industrial/warning/corner,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/alarm{
+ pixel_y = 23
},
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"py" = (
-/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/blood/oil,
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"re" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"rf" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"pz" = (
-/obj/structure/rack{
- dir = 8
+ dir = 4
},
-/obj/item/tank/jetpack/carbondioxide,
-/obj/item/tank/jetpack/carbondioxide,
/obj/effect/floor_decal/industrial/warning{
- dir = 6
- },
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"pA" = (
-/obj/machinery/power/apc{
- name = "_South APC";
- pixel_y = -24
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/plating,
-/area/ministation/hall/e)
-"pB" = (
-/obj/machinery/alarm{
dir = 1;
- pixel_y = -22
+ icon_state = "warning"
},
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"rn" = (
+/obj/machinery/light/small,
/obj/structure/cable{
icon_state = "1-8"
},
/turf/simulated/floor/plating,
-/area/ministation/hall/e)
-"pC" = (
-/obj/machinery/space_heater,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"pD" = (
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pE" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"pF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/area/ministation/maint/l1central)
+"rp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"pG" = (
-/obj/item/sign/diploma/fake/medical{
- pixel_y = 31
- },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"rq" = (
+/obj/machinery/door/airlock/glass/engineering,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"pH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/item/stool/padded,
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"pI" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"ru" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 6
},
-/obj/item/stool/padded,
-/obj/machinery/light{
+/obj/machinery/atmospherics/pipe/manifold/visible/red{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/meter,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"rz" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id_tag = "trash_sort"
},
-/turf/simulated/wall,
-/area/ministation/medical)
-"pK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/body_scan_display{
- pixel_y = 20
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"rA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/bodyscanner{
- dir = 8
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"rD" = (
+/obj/structure/table,
+/obj/item/radio/intercom/locked{
+ pixel_y = 20
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pL" = (
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"rH" = (
+/obj/machinery/door/airlock,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/body_scanconsole{
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"rI" = (
+/obj/structure/bed/chair/comfy/black{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pM" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
},
-/obj/machinery/light{
- dir = 1
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"rQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/table,
-/obj/item/storage/box/masks,
-/obj/item/storage/box/gloves,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pN" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"rT" = (
+/obj/machinery/conveyor{
+ id_tag = "recycler"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"rU" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/structure/closet/secure_closet/engineering_chief,
+/turf/simulated/floor/carpet/orange,
+/area/ministation/engine)
+"sb" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/vending/medical{
- pixel_x = -2
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"sc" = (
+/obj/abstract/turbolift_spawner/ministation{
+ dir = 1;
+ icon_state = ""
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/turf/simulated/floor,
+/area/ministation/hall/s1)
+"sf" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/camera/network/medbay,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pP" = (
-/obj/structure/table,
-/obj/item/surgicaldrill,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pQ" = (
-/obj/structure/table,
-/obj/item/hemostat,
-/obj/item/retractor,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pR" = (
-/obj/structure/table,
-/obj/item/scalpel{
- pixel_y = 12
+/obj/machinery/door/airlock/external/glass{
+ locked = 1;
+ id_tag = "stern_engineering_airlock_exterior";
+ autoset_access = 0
},
-/obj/item/circular_saw,
-/obj/machinery/light{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/visible/black,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"sh" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pS" = (
-/obj/structure/table,
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/item/bonesetter,
-/obj/item/bonegel,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pT" = (
-/obj/structure/table,
-/obj/item/cautery{
- pixel_x = 4
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/obj/item/sutures,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"pU" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/medical)
-"pV" = (
-/obj/abstract/landmark/start{
- name = "Clown"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/vomit,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"pW" = (
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
- },
-/obj/effect/decal/cleanable/blood,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
+/area/ministation/hall/n)
+"sl" = (
+/obj/machinery/atmospherics/omni/filter{
+ tag_east = 1;
+ tag_north = 4;
+ tag_west = 2;
+ use_power = 0
},
-/area/ministation/cafe)
-"pX" = (
-/obj/machinery/firealarm{
- pixel_y = 24
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/obj/machinery/camera/autoname,
-/obj/structure/closet/secure_closet/freezer/meat,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"sq" = (
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"sx" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/space,
+/area/space)
+"sy" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/area/ministation/cafe)
-"pY" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"pZ" = (
-/obj/structure/closet/l3closet/janitor,
-/obj/item/grenade/chem_grenade/cleaner,
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"qa" = (
+/obj/structure/closet/jcloset,
/turf/simulated/floor/tiled,
/area/ministation/janitor)
-"qb" = (
-/obj/abstract/landmark/start{
- name = "Janitor"
+"sz" = (
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/item/stool,
+/obj/machinery/camera/autoname,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
/turf/simulated/floor/tiled,
/area/ministation/janitor)
-"qc" = (
+"sA" = (
/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/pen,
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
},
+/obj/item/grenade/chem_grenade/cleaner,
+/obj/item/storage/box/lights/mixed,
+/obj/item/grenade/chem_grenade/cleaner,
/turf/simulated/floor/tiled,
/area/ministation/janitor)
-"qd" = (
-/obj/machinery/power/apc{
- dir = 8;
- name = "_West APC";
- pixel_x = -25
- },
+"sC" = (
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"sG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"qe" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/area/ministation/maint/eastatmos)
+"sJ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"qg" = (
+/area/ministation/ai_sat)
+"sK" = (
/obj/structure/cable{
- icon_state = "0-4"
+ icon_state = "4-8"
+ },
+/obj/structure/table,
+/obj/item/stack/cable_coil,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"sO" = (
+/obj/machinery/alarm{
+ pixel_y = 23
},
/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ dir = 1
},
-/obj/effect/wallframe_spawn/no_grille,
+/obj/structure/closet/crate,
+/obj/item/stack/material/shiny/mapped/aluminium/fifty,
+/obj/item/stack/material/sheet/mapped/steel/fifty,
+/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/reinforced/mapped/plasteel/fifty,
+/obj/item/stack/material/ingot/mapped/copper/fifty,
+/obj/item/stack/material/pane/mapped/glass/fifty,
+/obj/item/stack/material/reinforced/mapped/fiberglass/fifty,
+/obj/item/stack/material/pane/mapped/rglass/fifty,
/turf/simulated/floor/tiled,
/area/ministation/eva)
-"qh" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/door/airlock/glass/command,
-/obj/machinery/door/firedoor,
+"sR" = (
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"qi" = (
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/machinery/status_display{
+ pixel_y = -32;
+ dir = 1
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"sT" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 8
},
-/obj/effect/wallframe_spawn/no_grille,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"qj" = (
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
+/turf/simulated/floor/plating,
+/area/space)
+"sV" = (
+/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"qk" = (
-/turf/simulated/wall,
-/area/ministation/hall/e)
-"ql" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/medical)
-"qm" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/area/ministation/maint/l1central)
+"sX" = (
+/obj/effect/floor_decal/corner/red{
dir = 4
},
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"qn" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/visible/red,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"ta" = (
+/obj/machinery/shieldwallgen,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"tc" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/wall,
+/area/ministation/dorms)
+"tg" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/structure/table,
-/obj/item/book/skill/medical,
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"qo" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/disposalpipe/segment{
dir = 4
},
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"th" = (
/obj/structure/table,
-/obj/item/newspaper,
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"qp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"qq" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"qr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 6
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qs" = (
-/obj/machinery/door/firedoor{
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/effect/floor_decal/corner/paleblue/full,
-/obj/machinery/door/airlock/double/medical{
- name = "medbay airlock";
- autoset_access = 0;
- id_tag = "medleave"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/item/clothing/head/welding,
+/obj/machinery/recharger,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"tj" = (
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qv" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/turf/simulated/floor/plating,
+/area/space)
+"tk" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 10
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qx" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qy" = (
-/obj/structure/table,
-/obj/item/storage/box/gloves,
-/obj/item/storage/box/masks,
-/obj/item/clothing/suit/surgicalapron,
-/obj/item/clothing/suit/surgicalapron,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qz" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/space,
+/area/space)
+"tl" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 6
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qA" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qB" = (
-/obj/structure/table,
-/obj/item/chems/glass/rag,
-/obj/item/trash/stick,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qC" = (
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
- },
-/area/ministation/cafe)
-"qD" = (
-/obj/effect/floor_decal/snow,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
- },
-/area/ministation/cafe)
-"qE" = (
-/obj/machinery/firealarm{
- pixel_y = 32
- },
-/obj/structure/bed/chair/comfy/beige,
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"qF" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/structure/bed/chair/comfy/beige,
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"qG" = (
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"qH" = (
-/obj/structure/table/woodentable,
-/obj/item/flashlight/lamp/green{
- pixel_x = 1;
- pixel_y = 5
- },
-/obj/machinery/status_display{
- pixel_y = 32
- },
-/obj/structure/sign/warning/smoking{
- pixel_x = 32
- },
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"qI" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
+/turf/space,
+/area/space)
+"tm" = (
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"qJ" = (
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"tq" = (
/obj/item/chems/glass/bucket,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/janitor)
-"qK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+"tr" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/janitor)
-"qL" = (
-/obj/effect/floor_decal/industrial/loading{
+"ts" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/janitor)
-"qM" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/door/firedoor{
- dir = 8
+"tt" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/janitor)
-"qN" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"qO" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"qP" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"qQ" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/structure/skele_stand,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"qR" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
-/turf/simulated/floor/plating,
-/area/ministation/eva)
-"qS" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
+/area/ministation/hall/s1)
+"tu" = (
+/obj/structure/ore_box,
/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"qT" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/cargo)
+"tv" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
},
+/turf/simulated/floor,
+/area/ministation/hall/s1)
+"tw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"qU" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
- },
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"qV" = (
-/obj/machinery/light/small{
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_upload)
+"tz" = (
+/obj/structure/railing/mapped{
dir = 8
},
-/obj/structure/hygiene/toilet{
- pixel_y = 10
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"tB" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
},
-/obj/effect/decal/cleanable/vomit,
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/tiled/freezer,
-/area/ministation/hall/e)
-"qW" = (
-/obj/structure/hygiene/sink{
+/obj/machinery/power/apc/high{
dir = 1;
- pixel_y = 25
+ pixel_y = 20
},
-/turf/simulated/floor/tiled/freezer,
-/area/ministation/hall/e)
-"qX" = (
-/obj/structure/reagent_dispensers/water_cooler{
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"tD" = (
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"qY" = (
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"qZ" = (
-/obj/machinery/light,
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"ra" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/carpet/blue2,
-/area/ministation/medical)
-"rb" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 6
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rc" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+/obj/machinery/portable_atmospherics/canister/helium{
+ start_pressure = 2559.63
},
-/obj/machinery/status_display{
- pixel_x = -32
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"tH" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rd" = (
/obj/abstract/landmark/start{
- name = "Medical Doctor"
- },
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
- },
-/obj/machinery/button/alternate/door{
- dir = 4;
- id_tag = "medleave";
- name = "Interior medbay doors button";
- pixel_x = -32;
- pixel_y = -32
+ name = "Assistant"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"re" = (
-/obj/abstract/landmark/start{
- name = "Medical Doctor"
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"tO" = (
+/obj/effect/floor_decal/carpet/blue2{
+ dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rf" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rg" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/obj/structure/closet/crate/bin/ministation,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"tU" = (
+/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/hygiene/sink{
- dir = 4;
- pixel_x = 11
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"ri" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rk" = (
-/obj/machinery/optable,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rl" = (
-/obj/effect/decal/cleanable/blood,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rm" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/structure/table/gamblingtable,
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rn" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/item/flashlight/lamp/green,
+/obj/item/poster,
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
+"tW" = (
+/obj/machinery/door/airlock/mining,
+/turf/simulated/floor/plating,
+/area/ministation/cargo)
+"ua" = (
+/obj/machinery/power/solar,
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ro" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/plating,
+/area/space)
+"ue" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/camera/network/hallway{
+ dir = 8
},
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"ug" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-8"
},
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"uh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rq" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/area/ministation/hall/s1)
+"ui" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"uj" = (
+/obj/structure/bed/chair{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 2
+/obj/effect/floor_decal/corner/beige{
+ dir = 9
},
+/obj/item/chems/drinks/juicebox/random,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rr" = (
-/obj/structure/table/woodentable,
-/obj/item/storage/fancy/cigarettes{
- pixel_y = 2
+/area/ministation/hall/n)
+"ul" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
},
-/obj/item/flame/lighter/random,
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"rs" = (
-/obj/structure/table/woodentable,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/rack{
+ dir = 8
},
-/obj/item/pen,
-/obj/item/camera,
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"rt" = (
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"ru" = (
-/obj/structure/bed/chair/comfy/beige{
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"um" = (
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/machinery/light{
+/obj/effect/floor_decal/corner/red/diagonal{
dir = 4
},
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"rv" = (
+/obj/effect/floor_decal/corner/red/diagonal,
+/obj/machinery/meter/turf,
+/obj/structure/window/reinforced{
+ health = 1e+007
+ },
+/turf/simulated/floor/reinforced/nitrogen,
+/area/ministation/atmospherics)
+"un" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/red,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"ur" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"us" = (
/obj/machinery/firealarm{
dir = 8;
pixel_x = -24
@@ -6764,11464 +3888,8589 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled,
/area/ministation/janitor)
-"rw" = (
-/obj/machinery/network/requests_console{
- department = "Janitorial";
- pixel_y = -29
+"ut" = (
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"rx" = (
-/obj/structure/closet/crate/bin/ministation,
-/obj/machinery/light_switch{
- dir = 1;
- pixel_y = -23
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
+/obj/effect/wallframe_spawn/no_grille,
/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"ry" = (
-/obj/machinery/vending/tool{
- dir = 1
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"rz" = (
-/obj/machinery/vending/assist/ministation{
- dir = 1
+/area/ministation/eva)
+"uy" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 6
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"rA" = (
-/obj/machinery/camera/autoname{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/machinery/light{
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
+"uB" = (
+/obj/structure/tank_rack/oxygen,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"uE" = (
+/obj/effect/floor_decal/industrial/loading{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"rC" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"rD" = (
-/obj/effect/floor_decal/industrial/warning{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+ dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"rE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
+/area/ministation/janitor)
+"uG" = (
+/obj/machinery/door/airlock/atmos,
+/turf/simulated/floor/tiled,
+/area/ministation/smcontrol)
+"uH" = (
+/obj/structure/bed/chair/comfy/black,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"uK" = (
+/turf/simulated/wall,
+/area/ministation/maint/westatmos)
+"uL" = (
+/obj/machinery/door/airlock/glass/engineering{
+ autoset_access = 0;
+ req_access = list("ACCESS_CHIEF_ENGINEER")
},
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rF" = (
-/obj/item/soap{
- icon_state = "soap-oval"
- },
-/turf/simulated/floor/tiled/freezer,
-/area/ministation/hall/e)
-"rG" = (
-/turf/simulated/floor/tiled/freezer,
-/area/ministation/hall/e)
-"rH" = (
-/obj/structure/hygiene/shower{
+/area/ministation/engine)
+"uM" = (
+/obj/machinery/light/small{
dir = 8
},
-/obj/item/bikehorn/rubberducky,
-/turf/simulated/floor/tiled/freezer,
-/area/ministation/hall/e)
-"rI" = (
-/obj/item/stool/padded,
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
+/obj/machinery/conveyor{
+ id_tag = "trash_sort"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 10
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"uS" = (
+/obj/effect/floor_decal/corner/yellow/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
},
-/obj/machinery/light{
- dir = 4
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"uT" = (
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rL" = (
-/obj/structure/bed,
-/obj/item/bedsheet/medical,
-/obj/structure/curtain/medical,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rM" = (
-/obj/machinery/network/requests_console{
- department = "Medbay";
- name = "Medbay RC";
- pixel_y = -30
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
},
-/obj/structure/closet/crate/bin/ministation,
-/obj/random/trash,
-/obj/item/chems/syringe,
-/obj/item/trash/stick,
-/obj/item/organ/internal/appendix,
-/obj/effect/decal/cleanable/vomit,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rN" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"uX" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rO" = (
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"uY" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"va" = (
+/obj/item/stack/material/rods/fifty,
+/obj/item/stack/material/pane/mapped/glass/fifty,
+/obj/item/stock_parts/circuitboard/airlock_electronics,
+/obj/item/stock_parts/circuitboard/airlock_electronics,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -5;
+ pixel_y = 30
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/closet/crate,
+/obj/item/cell,
+/obj/item/cell,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"vf" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/conveyor{
+ dir = 8;
+ id_tag = "trash_sort"
+ },
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"vg" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/s1)
+"vk" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
dir = 4
},
+/obj/machinery/portable_atmospherics/powered/pump/filled,
/obj/machinery/light{
- dir = 4
+ dir = 4;
+ icon_state = "bulb1"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rQ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"vl" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/wall,
-/area/ministation/medical)
-"rR" = (
-/obj/machinery/vitals_monitor,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rS" = (
-/obj/structure/hygiene/sink{
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/structure/sign/warning/radioactive{
+ pixel_y = -10;
dir = 4;
- pixel_x = 11
+ pixel_x = -34
},
-/obj/machinery/camera/network/medbay{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
+ dir = 6
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"rT" = (
-/obj/structure/kitchenspike,
-/obj/effect/floor_decal/snow,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"vp" = (
+/turf/simulated/wall,
+/area/ministation/supermatter)
+"vq" = (
+/obj/machinery/atmospherics/pipe/simple/visible/universal,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"vv" = (
+/obj/machinery/light/small{
+ dir = 1
},
-/area/ministation/cafe)
-"rU" = (
-/obj/machinery/light/small,
-/obj/effect/floor_decal/snow,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
- },
-/area/ministation/cafe)
-"rV" = (
-/obj/machinery/gibber,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
- },
-/area/ministation/cafe)
-"rW" = (
-/obj/machinery/light,
-/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rX" = (
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"vx" = (
+/obj/machinery/light/small{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"rY" = (
-/obj/structure/closet/crate/bin/ministation,
-/obj/random/trash,
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/carpet,
-/area/ministation/hall/w)
-"rZ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/door/airlock/civilian,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"sa" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"vz" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/fabricator,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"vA" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 21
+ },
+/obj/machinery/camera/network/engineering{
+ dir = 8;
+ name = "Tank Storage"
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"sb" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/area/ministation/engine)
+"vC" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = 5;
+ pixel_y = 5
},
-/obj/effect/floor_decal/industrial/warning{
+/obj/item/stamp/denied{
+ pixel_x = 4;
+ pixel_y = -2
+ },
+/obj/item/pen/red,
+/obj/effect/floor_decal/corner/beige{
+ dir = 6
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "cargoshut";
+ name = "Cargo Shutters Button";
+ pixel_y = 8;
+ pixel_x = -6
+ },
+/obj/item/stamp/cargo,
+/obj/item/folder/yellow,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/obj/machinery/door/firedoor,
-/obj/effect/wallframe_spawn/no_grille,
/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"sc" = (
+/area/ministation/cargo)
+"vI" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "2-8"
},
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "4-8"
},
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/computer/atmos_alert{
+ dir = 8
},
-/obj/machinery/door/airlock/glass/command,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"vK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"sd" = (
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/bed/chair/wood{
+ dir = 8
},
-/obj/effect/floor_decal/industrial/warning{
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"vL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"vP" = (
+/obj/effect/floor_decal/industrial/warning/corner,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/door/firedoor,
-/obj/effect/wallframe_spawn/no_grille,
+/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/simulated/floor/tiled,
/area/ministation/eva)
-"se" = (
-/obj/machinery/door/airlock/civilian,
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/tiled/freezer,
-/area/ministation/hall/e)
-"sf" = (
-/obj/structure/closet/crate/bin/ministation,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sg" = (
-/obj/structure/bed/chair,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sh" = (
-/obj/machinery/vending/snack,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"si" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+"vV" = (
+/obj/machinery/door/airlock/glass,
/obj/machinery/door/firedoor,
-/obj/effect/floor_decal/corner/paleblue/full,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
- },
-/obj/machinery/door/airlock/double/medical{
- name = "Medbay Lobby airlock";
- autoset_access = 0
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sj" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/door/firedoor,
-/obj/effect/floor_decal/corner/paleblue/full,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sk" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sm" = (
-/obj/effect/floor_decal/corner/paleblue{
- dir = 6
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sn" = (
-/obj/machinery/door/firedoor{
- dir = 8
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"vY" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/structure/bed/chair{
+ dir = 4
},
-/obj/machinery/door/airlock/medical,
-/obj/effect/floor_decal/corner/paleblue/full,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"so" = (
-/obj/effect/decal/cleanable/blood,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"wb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/machinery/light/small,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sq" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"wd" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sr" = (
-/turf/simulated/floor/tiled/dark/monotile{
- name = "telecomms dark floor";
- temperature = 263
+/obj/structure/sign/warning/radioactive{
+ pixel_y = -34;
+ dir = 1;
+ pixel_x = -8
},
-/area/ministation/telecomms)
-"ss" = (
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"we" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera/network/hallway{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"st" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
+/area/ministation/hall/s1)
+"wg" = (
+/turf/simulated/wall/r_wall,
+/area/space)
+"wm" = (
+/obj/structure/closet/secure_closet/quartermaster{
+ req_access = list("ACCESS_MINING")
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"su" = (
+/area/ministation/cargo)
+"wp" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"ws" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/camera/autoname,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"sv" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"wt" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"wu" = (
+/obj/machinery/vending/fitness,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"wx" = (
/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"sw" = (
-/obj/structure/closet/crate/trashcart,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"sy" = (
-/obj/machinery/newscaster{
- pixel_y = 32
+/obj/machinery/camera/network/hallway{
+ dir = 1
},
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"sz" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/area/ministation/hall/n)
+"wA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"wB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"sA" = (
-/obj/machinery/alarm{
- pixel_y = 23
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning/fulltile,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"sB" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/glass,
-/obj/machinery/door/firedoor{
+/area/ministation/cargo)
+"wC" = (
+/obj/structure/closet,
+/obj/item/gun/launcher/foam/crossbow,
+/obj/item/storage/box/foam_darts,
+/obj/item/storage/box/foam_darts,
+/obj/item/gun/launcher/foam/revolver,
+/obj/item/gun/launcher/foam/revolver,
+/obj/item/gun/launcher/foam,
+/obj/item/gun/launcher/foam,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"wD" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"wJ" = (
+/obj/machinery/camera/autoname{
dir = 8
},
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"wK" = (
+/obj/structure/bed/padded,
+/turf/simulated/floor/carpet/orange,
+/area/ministation/engine)
+"wM" = (
+/obj/structure/closet/emcloset,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"sC" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"sD" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/glass,
-/obj/machinery/door/firedoor{
+/area/ministation/hall/s1)
+"wN" = (
+/obj/structure/rack{
dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sF" = (
+/obj/item/storage/belt,
+/obj/item/storage/belt,
+/obj/item/storage/belt,
+/obj/item/storage/belt,
+/obj/item/storage/belt,
/obj/machinery/light{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
+ dir = 1;
+ icon_state = "tube1"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sG" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/cargo)
+"wP" = (
+/obj/machinery/light{
+ dir = 8
},
-/obj/machinery/firealarm{
- pixel_y = 32
+/obj/structure/table/steel,
+/obj/item/stack/material/puck/mapped/uranium/ten,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"wS" = (
+/obj/machinery/status_display{
+ pixel_y = -32;
+ dir = 1
},
+/obj/item/plunger,
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sH" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/sign/department/eva{
- pixel_y = 32
+/area/ministation/janitor)
+"wT" = (
+/obj/structure/closet/lasertag/blue,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"wZ" = (
+/obj/item/mollusc/barnacle{
+ pixel_x = 20
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sI" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/airless,
+/area/space)
+"xg" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"xj" = (
+/obj/machinery/power/sensor{
+ id_tag = "Engine Power";
+ name = "Powernet Sensor - Engine Power"
},
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sJ" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/structure/cable/cyan{
+ icon_state = "0-8"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"xk" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Engineering Hard Storage"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sL" = (
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"xm" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/floor_decal/corner/lightgrey/bordercorner{
- dir = 4
- },
-/obj/effect/floor_decal/corner/lightgrey{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/sign/warning/high_voltage{
- pixel_y = 29
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sM" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/floor_decal/corner/white/border{
- dir = 1
- },
-/obj/effect/floor_decal/corner/lightgrey/border{
- dir = 1
- },
-/obj/effect/floor_decal/corner/lightgrey/half{
- dir = 1
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"xo" = (
+/obj/machinery/emitter,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"xq" = (
+/obj/structure/ladder,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"xr" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/department/eva{
+ pixel_y = 30
},
-/obj/effect/floor_decal/corner/lightgrey{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sN" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/area/ministation/hall/n)
+"xt" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 4
},
-/obj/effect/floor_decal/corner/lightgrey{
- dir = 1
- },
-/obj/structure/sign/department/watercloset{
- pixel_y = 32
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"xw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/recharge_station,
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"xE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8;
+ icon_state = "warningcorner"
},
/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sQ" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
+ dir = 4;
+ icon_state = "tube1"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"sR" = (
+/area/ministation/hall/s1)
+"xJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/firstaid{
- dir = 8
+ dir = 5
},
-/obj/effect/decal/cleanable/blood,
-/obj/structure/sign/department/redcross{
- pixel_y = 32
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"sS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"xN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 5
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"xQ" = (
+/obj/machinery/light/small,
+/obj/machinery/conveyor{
+ dir = 4;
+ id_tag = "trash_sort"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"xX" = (
+/obj/machinery/material_processing/compressor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"sT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+ dir = 6
},
-/obj/effect/floor_decal/corner/paleblue{
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"xZ" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 5
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"sU" = (
-/obj/structure/table/reinforced,
-/obj/machinery/camera/autoname,
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/turf/space,
+/area/space)
+"yc" = (
+/obj/machinery/alarm{
+ pixel_y = 23
},
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"yh" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"yi" = (
+/obj/machinery/light/small,
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/obj/machinery/atmospherics/portables_connector{
dir = 8
},
-/obj/item/storage/medical_lolli_jar{
- pixel_y = 7
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"yj" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
+ dir = 4
},
-/obj/effect/floor_decal/corner/paleblue/full,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"yk" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/yellow{
+ dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sV" = (
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
+/obj/machinery/camera/network/engineering{
+ name = "SM East";
+ dir = 4
},
-/obj/structure/table/reinforced,
-/obj/machinery/button/blast_door{
- id_tag = "quarantine";
- name = "Infirmary Quarantine Button"
- },
-/obj/machinery/button/alternate/door{
- id_tag = "medleave";
- name = "Interior medbay doors button";
- pixel_y = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sW" = (
-/obj/machinery/computer/modular/preset/medical,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sX" = (
-/obj/machinery/sleeper/standard,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sY" = (
-/obj/structure/table,
-/obj/item/chems/dropper,
-/obj/item/chems/glass/beaker,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"sZ" = (
-/obj/structure/table,
-/obj/item/storage/box/syringes,
-/obj/machinery/light,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"ta" = (
-/obj/structure/iv_drip,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"tb" = (
-/obj/item/chems/ivbag/blood/AMinus,
-/obj/item/chems/ivbag/blood/APlus,
-/obj/item/chems/ivbag/blood/BMinus,
-/obj/item/chems/ivbag/blood/BPlus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OPlus,
-/obj/structure/closet/crate/freezer,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"tc" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"ym" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Engineering Hard Storage"
},
-/turf/simulated/floor/tiled/dark/monotile{
- name = "telecomms dark floor";
- temperature = 263
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/area/ministation/telecomms)
-"td" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"yo" = (
+/obj/machinery/atmospherics/portables_connector,
+/obj/effect/floor_decal/industrial/outline/blue,
+/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"yp" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/tiled/dark/monotile{
- name = "telecomms dark floor";
- temperature = 263
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"yu" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
-/area/ministation/telecomms)
-"te" = (
-/obj/machinery/light{
+/obj/structure/sign/warning/airlock{
dir = 8;
- icon_state = "tube1"
+ pixel_x = 43
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tf" = (
+/area/ministation/eva)
+"yv" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"yx" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/floor_decal/ss13/l1,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tg" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"yz" = (
+/obj/machinery/vending/engineering{
dir = 8
},
-/obj/effect/floor_decal/ss13/l3,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"th" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/floor_decal/ss13/l5,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ti" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/floor_decal/ss13/l7,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"yC" = (
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/effect/floor_decal/ss13/l9,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tk" = (
-/obj/effect/floor_decal/ss13/l11,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
+/area/ministation/ai_sat)
+"yD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tl" = (
-/obj/effect/floor_decal/ss13/l13,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tm" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/floor_decal/ss13/l15,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tn" = (
-/obj/abstract/landmark{
- name = "lightsout"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tp" = (
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tq" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tr" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"yE" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ts" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"yH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tt" = (
-/obj/machinery/door/firedoor{
+/obj/abstract/landmark/start{
+ name = "Assistant"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"yL" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
-/obj/effect/wallframe_spawn/no_grille,
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"tu" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
+/area/ministation/trash)
+"yO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/obj/machinery/mining/brace,
+/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"tv" = (
+/area/ministation/cargo)
+"yP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5;
+ pixel_x = 2;
+ pixel_y = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"yS" = (
/obj/abstract/landmark{
name = "bluespace_a"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"tw" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"tx" = (
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/effect/wallframe_spawn/no_grille,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"ty" = (
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tz" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/turf/space,
+/area/space)
+"yT" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tA" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"za" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/janitor)
+"ze" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green{
+ dir = 5
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tC" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/light,
+/obj/structure/emergency_dispenser/west,
+/obj/machinery/meter,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"zg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
},
-/obj/structure/hygiene/drain,
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tD" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/area/ministation/engine)
+"zk" = (
+/obj/structure/transit_tube,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tE" = (
-/obj/abstract/landmark{
- name = "lightsout"
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tG" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
+/turf/space,
+/area/ministation/engine)
+"zl" = (
+/obj/machinery/light{
+ dir = 1
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"zm" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"tH" = (
-/obj/effect/floor_decal/industrial/firstaid{
- dir = 8
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"zr" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"zw" = (
+/obj/structure/table/woodentable,
+/obj/machinery/light{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"zy" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"tI" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"zz" = (
+/obj/item/radio/intercom{
+ dir = 8;
+ pixel_x = 22
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"tJ" = (
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"tK" = (
-/obj/structure/table/reinforced,
-/obj/item/folder,
-/obj/machinery/door/firedoor{
- dir = 8
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/closet/crate,
+/obj/item/stack/material/brick/mapped/sandstone/five,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"zB" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/black,
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
},
-/obj/effect/floor_decal/corner/paleblue/full,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"zH" = (
+/obj/machinery/atmospherics/omni/mixer{
+ active_power_usage = 7500;
+ tag_east_con = 0;
+ tag_north = 1;
+ tag_north_con = 0.21;
+ tag_south = 1;
+ tag_south_con = 0.79;
+ tag_west = 2
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/corner/white{
+ dir = 9
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"tL" = (
-/obj/abstract/landmark/start{
- name = "Medical Doctor"
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"zJ" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"zN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/yellow/diagonal,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"zR" = (
+/obj/effect/wallframe_spawn/reinforced_borosilicate,
+/obj/machinery/door/blast/regular/open{
+ dir = 2;
+ id_tag = "SupermatterPort";
+ name = "Reactor Blast Door"
},
-/obj/structure/bed/chair/office/light{
- dir = 8
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"zS" = (
+/obj/machinery/door/blast/regular/open{
+ dir = 2;
+ id_tag = "SupermatterPort";
+ name = "Reactor Blast Door"
},
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
+/obj/effect/wallframe_spawn/reinforced_borosilicate,
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"zW" = (
+/turf/simulated/wall,
+/area/ministation/dorms)
+"zX" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 10
},
+/turf/space,
+/area/space)
+"zY" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"tM" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"zZ" = (
+/obj/machinery/door/airlock,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ab" = (
+/obj/structure/window/reinforced{
+ dir = 1
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"tN" = (
-/obj/machinery/door/firedoor{
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/machinery/door/airlock/medical,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/corner/blue/diagonal,
+/obj/effect/floor_decal/corner/blue/diagonal{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"tO" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
+/obj/machinery/meter/turf,
+/turf/simulated/floor/reinforced/oxygen,
+/area/ministation/atmospherics)
+"Ad" = (
+/obj/structure/rack{
+ dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"tP" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/storage/belt/utility,
+/obj/item/wrench,
+/obj/item/weldingtool,
+/obj/item/clothing/head/welding,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"tQ" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"tR" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Ae" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/item/radio/intercom{
- dir = 4;
- pixel_x = -25
+/obj/machinery/camera/network/engineering{
+ name = "Office";
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Ai" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/obj/machinery/washing_machine,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Aj" = (
+/obj/machinery/light{
+ dir = 1
},
+/obj/machinery/vending/coffee,
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"tS" = (
-/obj/item/radio/intercom{
- dir = 4;
- pixel_x = -25
+/area/ministation/hall/s1)
+"Ak" = (
+/obj/structure/table/gamblingtable,
+/obj/machinery/chemical_dispenser/bar_soft/full,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Al" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
},
-/obj/effect/decal/cleanable/dirt,
-/mob/living/simple_animal/mouse/brown/Tom,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"tT" = (
-/obj/machinery/atmospherics/unary/freezer{
- dir = 8;
- set_temperature = 263
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"tU" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"Am" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
},
-/turf/simulated/floor/tiled/dark/monotile{
- name = "telecomms dark floor";
- temperature = 263
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"Ao" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/area/ministation/telecomms)
-"tV" = (
-/obj/machinery/network/router,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Aq" = (
+/obj/structure/rack{
+ dir = 8
},
-/area/ministation/telecomms)
-"tW" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/storage/belt/utility,
+/obj/item/wrench,
+/obj/item/weldingtool,
+/obj/item/clothing/head/welding/engie,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/effect/floor_decal/ss13/l2,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/floor_decal/ss13/l4,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tY" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Ar" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-4"
},
-/obj/effect/floor_decal/ss13/l6,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"tZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/effect/floor_decal/ss13/l8,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ua" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"As" = (
+/obj/machinery/alarm{
+ pixel_y = 21
},
-/obj/abstract/landmark{
- name = "bluespace_a"
+/obj/structure/cable/cyan{
+ icon_state = "2-8"
},
-/obj/effect/floor_decal/ss13/l10,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ub" = (
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Ax" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "0-4"
},
-/obj/effect/floor_decal/ss13/l12,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/no_grille,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uc" = (
+/area/ministation/eva)
+"Az" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"AB" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/floor_decal/ss13/l14,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ud" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/door/airlock/external/glass{
+ id_tag = "port_engineering_airlock_exterior";
+ locked = 1;
+ autoset_access = 0
},
-/obj/effect/floor_decal/ss13/l16,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ue" = (
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uf" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
+/obj/machinery/button/access/interior{
+ id_tag = "port_engineering_airlock";
+ name = "exterior access button";
+ pixel_y = 24;
+ command = "cycle_exterior"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ug" = (
-/obj/machinery/door/airlock/glass,
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"AC" = (
+/obj/structure/lattice,
+/turf/simulated/wall,
+/area/space)
+"AD" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"AF" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"AH" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uh" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"ui" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"uj" = (
-/obj/machinery/door/airlock/glass,
-/obj/machinery/door/firedoor{
- dir = 8
+/area/ministation/hall/s1)
+"AJ" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"ul" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/power/smes/buildable/max_cap_in_out{
+ capacity = 5e+009
},
-/obj/structure/sign/double/barsign{
- dir = 1;
- pixel_x = 1;
- pixel_y = -63
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"AK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"um" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/airlock_sensor{
+ id_tag = "stern_engineering_sensor";
+ pixel_y = 10;
+ pixel_x = -20;
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"un" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 6
+ },
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"AM" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"AN" = (
+/obj/machinery/conveyor{
+ dir = 4;
+ id_tag = "recycler"
},
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"uo" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/camera/autoname{
- dir = 1
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"AP" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastinterior"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"up" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
+/turf/simulated/floor/plating,
+/area/ministation/smcontrol)
+"AQ" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastinterior"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"uq" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"us" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/plating,
+/area/ministation/smcontrol)
+"AR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/floor_decal/industrial/firstaid{
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"AU" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"ut" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"uu" = (
-/obj/structure/table/reinforced,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
- },
-/obj/item/pen,
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"AV" = (
+/obj/machinery/photocopier,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"AW" = (
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/obj/machinery/atmospherics/portables_connector{
dir = 8
},
-/obj/effect/floor_decal/corner/paleblue/full,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
+/turf/simulated/floor,
+/area/ministation/maint/westatmos)
+"AX" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"uv" = (
/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
+ dir = 4;
+ pixel_x = 24
},
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Ba" = (
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"uw" = (
-/obj/machinery/light_switch{
- dir = 1;
- pixel_y = -23
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"Bb" = (
+/obj/structure/railing/mapped{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"ux" = (
-/obj/machinery/newscaster{
- pixel_x = 32
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Be" = (
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Bg" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"uy" = (
-/obj/structure/morgue,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"uA" = (
-/obj/machinery/network/mainframe,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"uB" = (
-/obj/machinery/newscaster{
- pixel_y = 32
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
},
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uC" = (
-/obj/machinery/alarm{
- pixel_y = 23
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Bh" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uE" = (
-/obj/effect/floor_decal/industrial/loading{
+/area/ministation/ai_sat)
+"Bi" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uF" = (
-/obj/effect/floor_decal/industrial/hatch/yellow,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"uI" = (
/turf/simulated/wall/r_wall,
-/area/ministation/hop)
-"uJ" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/ai_sat)
+"Bj" = (
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"uK" = (
-/turf/simulated/wall,
-/area/ministation/maint/sw)
-"uL" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/door/airlock/glass/civilian,
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"uM" = (
-/obj/effect/wallframe_spawn/no_grille,
-/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
-/area/ministation/cafe)
-"uN" = (
+/area/ministation/engine)
+"Bk" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/airlock/glass/civilian,
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"uO" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/simple/hidden/cyan{
+ dir = 4
},
-/obj/effect/floor_decal/corner/green/half,
-/obj/machinery/light{
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Bn" = (
+/obj/effect/floor_decal/carpet/blue2{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"uP" = (
-/obj/effect/floor_decal/corner/green/half,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/area/ministation/hall/s1)
+"Bo" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/black{
dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"uS" = (
-/obj/effect/floor_decal/corner/green/half,
+/area/ministation/engine)
+"Bp" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/stack/package_wrap,
+/obj/item/hand_labeler,
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"uT" = (
-/obj/effect/floor_decal/industrial/firstaid{
+/area/ministation/cargo)
+"Bq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/bed/chair/wood{
dir = 8
},
-/obj/machinery/light,
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"uU" = (
-/obj/effect/floor_decal/corner/paleblue{
- dir = 10
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Bt" = (
+/obj/structure/table/gamblingtable,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/hall/s1)
+"Bu" = (
+/obj/structure/ladder,
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"uV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
+/obj/structure/cable{
+ icon_state = "16-0"
},
-/obj/structure/sign/warning/nosmoking_1{
- pixel_x = -32
+/obj/machinery/atmospherics/pipe/zpipe/up/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"uW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"uX" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
+/obj/structure/disposalpipe/up{
+ dir = 4
},
-/obj/machinery/light/small{
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"Bw" = (
+/obj/structure/bed/chair/comfy/black{
dir = 8
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"uZ" = (
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"va" = (
-/obj/item/stack/material/rods/fifty,
-/obj/item/stack/material/pane/mapped/glass/fifty,
-/obj/item/stock_parts/circuitboard/airlock_electronics,
-/obj/item/stock_parts/circuitboard/airlock_electronics,
-/obj/structure/extinguisher_cabinet{
- pixel_x = -5;
- pixel_y = 30
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Bx" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/obj/structure/closet/crate,
-/obj/item/cell,
-/obj/item/cell,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"vb" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"vc" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"vd" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/light{
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"ve" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/machinery/door/blast/shutters/open{
- id_tag = "hopshut";
- name = "office shutters"
+/obj/structure/table/gamblingtable,
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil/random,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/storage/toolbox/electrical,
+/obj/item/clothing/gloves/insulated/cheap,
+/obj/item/clothing/gloves/insulated/cheap,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/hop)
-"vf" = (
-/obj/structure/cable{
- icon_state = "0-8"
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
+"Bz" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "sat2_airlock_exterior"
},
-/obj/machinery/door/blast/shutters/open{
- id_tag = "hopshut";
- name = "office shutters"
+/obj/machinery/button/access/interior{
+ id_tag = "sat2_airlock";
+ name = "exterior access button";
+ pixel_x = -32;
+ pixel_y = 24;
+ command = "cycle_exterior"
},
-/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
-/area/ministation/hop)
-"vg" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/window/brigdoor/southright,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "hopshut";
- name = "office shutters"
+/area/ministation/ai_sat)
+"BB" = (
+/obj/machinery/atmospherics/pipe/simple/visible/yellow{
+ dir = 10
},
+/obj/machinery/meter,
/turf/simulated/floor/plating,
-/area/ministation/hop)
-"vi" = (
-/obj/structure/table,
-/obj/item/hand_labeler,
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/machinery/recharger,
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vj" = (
+/area/ministation/supermatter)
+"BC" = (
/obj/structure/table,
-/obj/item/folder/blue,
-/obj/machinery/network/requests_console{
- announcementConsole = 1;
- department = "Lieutenant Office";
- name = "Lieutenant RC";
- pixel_y = 30
- },
-/obj/item/storage/box/PDAs,
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vk" = (
-/obj/structure/closet/crate/bin/ministation,
-/obj/machinery/light{
- dir = 4
+/obj/machinery/cell_charger,
+/obj/item/multitool,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
+/obj/item/clothing/gloves/insulated,
/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vm" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/eva)
+"BD" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"vn" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/ladder,
/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"vq" = (
-/obj/machinery/vending/cigarette,
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"vr" = (
-/obj/machinery/computer/arcade,
-/obj/structure/noticeboard{
- default_pixel_y = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"vs" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"vt" = (
-/obj/machinery/light{
- dir = 1
+/area/ministation/maint/l1ne)
+"BF" = (
+/obj/machinery/atmospherics/pipe/manifold/visible{
+ dir = 8
},
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/radio/intercom{
- pixel_y = 25
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"BG" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"vu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"vv" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"vw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"vx" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/light/small{
- dir = 1
- },
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"vy" = (
-/obj/machinery/vending/boozeomat,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"vz" = (
-/obj/machinery/newscaster{
- pixel_y = 32
+/area/ministation/ai_sat)
+"BM" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
+ dir = 9
},
-/obj/structure/table,
-/obj/machinery/chemical_dispenser/bar_coffee/full,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"vA" = (
-/obj/structure/table,
-/obj/machinery/chemical_dispenser/bar_soft/full,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"vB" = (
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/glass/civilian,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"vC" = (
-/obj/effect/wallframe_spawn/no_grille,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"vD" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/window/southleft,
-/obj/structure/table/reinforced,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"vE" = (
-/obj/item/synthesized_instrument/guitar,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/window/southright,
-/obj/structure/table/reinforced,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"vF" = (
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
- },
-/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
-/area/ministation/medical)
-"vG" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/window/brigdoor/southright,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
+/area/ministation/supermatter)
+"BN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/medical)
-"vH" = (
-/obj/structure/table,
-/obj/item/chems/dropper,
-/obj/item/storage/box/syringes,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"vI" = (
+/area/ministation/ai_sat)
+"BP" = (
/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/computer/modular/preset/engineering{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"vJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/effect/floor_decal/corner/paleblue{
- dir = 6
- },
-/mob/living/simple_animal/crow{
- desc = "She's not a real doctor but she is a real bird.";
- name = "Dr. Bird";
- stop_automated_movement = 0
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"vK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/airlock/medical,
-/obj/effect/floor_decal/corner/paleblue/full,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"vL" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"vM" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/structure/closet/coffin,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"vN" = (
-/obj/structure/table,
-/obj/item/storage/box/bodybags,
-/obj/item/pen,
-/obj/item/radio/intercom{
- dir = 1;
- pixel_y = -32
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"vO" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/plating,
+/area/space)
+"BQ" = (
+/obj/structure/fitness/punchingbag,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"BS" = (
/obj/machinery/light{
- dir = 8
+ dir = 4;
+ icon_state = "bulb1"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"vP" = (
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"vQ" = (
-/obj/machinery/light,
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"vR" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/towel,
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"BW" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/green{
+ dir = 1
},
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"BY" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"BZ" = (
+/obj/machinery/conveyor_switch/oneway{
+ id_tag = "trash_sort"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"vS" = (
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"Ca" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/airlock/command,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Cb" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vT" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/button/blast_door{
- id_tag = "hopshut";
- name = "Office Shutters Button";
- pixel_y = 30
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Cg" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+ dir = 10
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vU" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ch" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/machinery/door/airlock/highsecurity,
+/turf/simulated/floor/airless,
+/area/ministation/ai_upload)
+"Ci" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vV" = (
-/obj/machinery/computer/modular/preset/cardslot/command{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vW" = (
-/obj/abstract/landmark/start{
- name = "Lieutenant"
- },
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vX" = (
-/obj/machinery/computer/account_database{
- dir = 8
- },
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"vY" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/structure/bed/chair{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"vZ" = (
-/obj/structure/bed/chair/office/comfy/brown{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wa" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wc" = (
+/turf/simulated/floor/plating,
+/area/ministation/hall/n)
+"Cm" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Cn" = (
+/turf/simulated/wall,
+/area/ministation/maint/eastatmos)
+"Cp" = (
+/obj/machinery/ai_status_display,
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_upload)
+"Cq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"we" = (
-/obj/machinery/camera/autoname{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"wf" = (
-/obj/effect/decal/cleanable/filth,
-/obj/machinery/power/apc{
+/area/ministation/ai_sat)
+"Cr" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-8"
+ level = 2
},
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"wh" = (
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"Cs" = (
+/obj/machinery/light/small{
dir = 8
},
-/obj/structure/window/basic/full,
/turf/simulated/floor/plating,
-/area/ministation/cafe)
-"wi" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"wj" = (
-/obj/item/stool/padded,
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"wk" = (
-/obj/item/stool/padded,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"wl" = (
+/area/ministation/ai_sat)
+"Ct" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"wm" = (
-/obj/item/stool/bar/padded,
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"wn" = (
-/obj/structure/table/marble,
-/obj/structure/sign/painting/monkey_painting{
- pixel_y = 24
- },
-/obj/machinery/door/firedoor{
- dir = 8
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Cv" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8;
+ level = 2
},
-/obj/item/sticky_pad{
- pixel_x = -8;
- pixel_y = 1
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Cw" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
},
-/obj/machinery/door/blast/shutters/open{
- id_tag = "barshut";
- name = "bar shutters"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/machinery/light_switch{
- pixel_x = -5;
- pixel_y = 35
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Cx" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"wo" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/machinery/button/blast_door{
- id_tag = "barshut";
- name = "Bar Shutters Button";
- pixel_x = -24;
- pixel_y = 36
+/obj/machinery/door/airlock/highsecurity/bolted,
+/turf/simulated/floor/plating,
+/area/ministation/ai_core)
+"Cy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"Cz" = (
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 5
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"wp" = (
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"wq" = (
-/obj/structure/reagent_dispensers/beerkeg,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"wr" = (
-/obj/machinery/door/window/brigdoor/westleft,
-/obj/structure/table/reinforced,
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"CA" = (
+/obj/effect/floor_decal/industrial/warning/corner{
dir = 8
},
-/obj/machinery/door/blast/shutters/open{
- id_tag = "barshut";
- name = "bar shutters"
- },
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"ws" = (
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"wt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"wu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"wv" = (
-/obj/machinery/network/requests_console{
- department = "Garden";
- pixel_x = 30
+/area/ministation/eva)
+"CB" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"CE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"ww" = (
-/obj/machinery/chemical_dispenser/full,
-/obj/item/chems/glass/beaker/large,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wx" = (
-/obj/structure/bed/chair/office/light,
-/obj/abstract/landmark/start{
- name = "Medical Doctor"
+/area/ministation/hall/s1)
+"CF" = (
+/obj/machinery/atmospherics/binary/pump/on,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"CG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"CH" = (
+/obj/machinery/portable_atmospherics/canister/air,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"CJ" = (
+/obj/machinery/atmospherics/portables_connector,
+/obj/effect/floor_decal/corner/blue{
+ dir = 9
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wy" = (
-/obj/machinery/chem_master,
-/obj/machinery/newscaster{
- pixel_y = 32
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wz" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wA" = (
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"CL" = (
+/obj/structure/grille,
+/obj/structure/wall_frame,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"CN" = (
+/obj/machinery/light/small{
dir = 8
},
-/obj/structure/table/reinforced,
-/obj/machinery/door/window/brigdoor/westright,
/turf/simulated/floor/plating,
-/area/ministation/medical)
-"wB" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/area/ministation/maint/l1central)
+"CQ" = (
+/obj/machinery/door/airlock/external{
+ autoset_access = 0;
+ id_tag = "starboard_engineering_airlock_interior";
+ locked = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wC" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/machinery/camera/network/medbay{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wD" = (
-/obj/machinery/hologram/holopad,
-/obj/machinery/light_switch{
- dir = 4;
- pixel_x = -23
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+/obj/machinery/button/access/interior{
+ id_tag = "starboard_engineering_airlock";
+ name = "interior access button";
+ pixel_y = 24
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wE" = (
+/turf/simulated/floor,
+/area/ministation/engine)
+"CS" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wF" = (
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/area/ministation/engine)
+"CV" = (
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"CW" = (
+/obj/machinery/door/airlock,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"CZ" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 4;
+ external_pressure_bound = 140;
+ external_pressure_bound_default = 140;
+ icon_state = "map_vent_out";
+ use_power = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/turf/simulated/floor/airless,
+/area/ministation/atmospherics)
+"Da" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
},
-/mob/living/simple_animal/corgi/Ian,
/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wK" = (
-/obj/machinery/camera/autoname{
- dir = 8
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
+/area/ministation/engine)
+"Df" = (
+/obj/machinery/alarm{
+ pixel_y = 22
},
/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"wL" = (
+/area/ministation/cargo)
+"Di" = (
+/obj/machinery/door/airlock/atmos,
+/turf/simulated/floor/reinforced/airless,
+/area/ministation/supermatter)
+"Dk" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera/network/hallway{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"wM" = (
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"wN" = (
-/obj/structure/table,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/kitchen/utensil/fork,
-/obj/item/knife/table,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"wO" = (
-/obj/structure/table,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/chems/condiment/small/peppermill,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"wP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/stool/padded,
/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"wQ" = (
-/obj/structure/table/marble,
-/obj/item/storage/box/donut,
-/obj/machinery/door/firedoor{
+/area/ministation/hall/s1)
+"Dl" = (
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/machinery/door/blast/shutters/open{
- id_tag = "barshut";
- name = "bar shutters"
+/obj/structure/window/reinforced{
+ dir = 4
},
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"wR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"wS" = (
-/obj/machinery/network/requests_console{
- department = "Bar";
- pixel_x = 30
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Dm" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/structure/table,
-/obj/item/flame/lighter/zippo,
-/obj/item/clothing/head/collectable/tophat,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"wT" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/window/reinforced{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"wU" = (
-/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"wV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/obj/machinery/portable_atmospherics/canister/hydrogen,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Dn" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"wW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/obj/structure/window/reinforced{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"wX" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wY" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"wZ" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Do" = (
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/effect/floor_decal/corner/paleblue{
- dir = 6
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xa" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/window/reinforced{
dir = 4
},
-/obj/machinery/door/firedoor{
- dir = 8
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/machinery/door/airlock/medical,
-/obj/effect/floor_decal/corner/paleblue/full,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xb" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Dp" = (
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/effect/floor_decal/corner/paleblue{
- dir = 9
+/obj/structure/window/reinforced{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xc" = (
-/obj/machinery/firealarm{
- pixel_y = 24
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/structure/table,
-/obj/item/defibrillator,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xd" = (
-/obj/machinery/light{
- dir = 1
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Dq" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/structure/table,
-/obj/item/roller{
- pixel_y = 10
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/item/roller{
- pixel_y = 10
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/item/storage/belt/medical/emt,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xe" = (
+/obj/machinery/portable_atmospherics/canister/helium,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Dr" = (
+/obj/structure/closet/firecloset,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Ds" = (
/obj/item/radio/intercom{
name = "Common Channel";
- pixel_y = 25
- },
-/obj/structure/table,
-/obj/item/storage/firstaid/o2{
- pixel_x = -2;
- pixel_y = 4
+ pixel_y = 20
},
-/obj/item/storage/firstaid/o2{
- pixel_x = -2;
- pixel_y = 4
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xf" = (
-/obj/structure/closet/emcloset,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"xg" = (
-/obj/machinery/light{
- dir = 1
+/area/ministation/engine)
+"Dt" = (
+/turf/simulated/wall,
+/area/ministation/engine)
+"Du" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ dir = 8
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"xh" = (
-/obj/machinery/vending/coffee{
- dir = 1
+/obj/machinery/light{
+ dir = 1;
+ icon_state = "bulb1"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"xi" = (
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
},
-/obj/structure/closet/secure_closet/hop,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"Dv" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"Dw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"xk" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"xl" = (
-/obj/machinery/photocopier,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"xm" = (
-/obj/structure/filing_cabinet/chestdrawer,
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"xn" = (
-/obj/structure/table,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/chems/condiment/small/sugar,
-/obj/item/chems/condiment/small/saltshaker,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xo" = (
-/obj/structure/table,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/kitchen/utensil/spoon,
-/obj/item/trash/plate{
- pixel_z = -2
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/obj/item/trash/plate{
- pixel_w = 2
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/obj/item/trash/plate{
- pixel_z = 2
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
},
-/obj/item/trash/plate{
- pixel_w = -2;
- pixel_z = 4
+/obj/machinery/alarm{
+ pixel_y = -24;
+ dir = 1
},
-/obj/item/trash/plate{
- pixel_z = 6
+/turf/simulated/floor/plating,
+/area/ministation/hall/s1)
+"Dx" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/stool/padded,
-/obj/item/deck/cards,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xq" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/floor_decal/corner/red/diagonal,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xr" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/vomit,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xs" = (
-/obj/structure/table/marble,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/blast/shutters/open{
- id_tag = "barshut";
- name = "bar shutters"
- },
-/obj/item/trash/tray,
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"xt" = (
-/obj/item/chems/drinks/shaker,
-/obj/structure/table,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"xu" = (
+/area/ministation/hall/s1)
+"Dy" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/light_switch{
- dir = 4;
- pixel_x = -23
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"xv" = (
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "2-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"xw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/area/ministation/hall/s1)
+"DB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"xx" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"xy" = (
-/obj/effect/decal/cleanable/dirt,
+/area/ministation/smcontrol)
+"DC" = (
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"xz" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/blast/shutters/open{
- id_tag = "quarantine";
- name = "quarantine shutters"
+/area/ministation/engine)
+"DD" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/maint/westatmos)
+"DE" = (
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/door/window/brigdoor/eastleft,
-/turf/simulated/floor/plating,
-/area/ministation/medical)
-"xA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+ dir = 10
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xB" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/paleblue{
- dir = 6
+/obj/machinery/light_switch{
+ pixel_y = 10;
+ pixel_x = 21;
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xC" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"DF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 6
},
-/obj/machinery/door/airlock/medical,
-/obj/machinery/door/firedoor{
- dir = 8
+/turf/simulated/wall,
+/area/ministation/hall/s1)
+"DG" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
-/obj/effect/floor_decal/corner/paleblue{
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"DH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 9
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xE" = (
-/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"DK" = (
+/obj/structure/window/reinforced{
dir = 4
},
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/medical)
-"xH" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/fire{
- pixel_x = -2;
- pixel_y = 4
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/item/storage/firstaid/fire{
- pixel_x = -2;
- pixel_y = 4
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"xI" = (
-/obj/structure/table,
-/turf/simulated/wall/r_wall,
-/area/ministation/hop)
-"xJ" = (
-/turf/simulated/wall,
-/area/ministation/hop)
-"xK" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/door/window/southleft,
+/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"DL" = (
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/machinery/door/airlock/command,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor,
-/area/ministation/hop)
-"xL" = (
-/obj/structure/table,
-/obj/machinery/faxmachine,
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"xM" = (
-/obj/machinery/papershredder,
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"xN" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/structure/table,
-/obj/machinery/recharger,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xO" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xP" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xQ" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/item/stool/padded,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xR" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"xT" = (
-/obj/item/stool/bar/padded,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"xU" = (
-/obj/structure/table/marble,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/door/window/southleft,
+/obj/machinery/portable_atmospherics/canister/hydrogen,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"DM" = (
+/obj/structure/window/reinforced{
dir = 4
},
-/obj/machinery/door/firedoor{
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/machinery/door/blast/shutters/open{
- id_tag = "barshut";
- name = "bar shutters"
- },
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"xV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/obj/machinery/door/window/southleft,
+/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/effect/decal/cleanable/flour,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"xW" = (
-/obj/structure/table/marble,
-/obj/machinery/status_display{
- pixel_y = -29
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"DN" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/machinery/door/firedoor{
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/machinery/door/blast/shutters/open{
- id_tag = "barshut";
- name = "bar shutters"
+/obj/machinery/door/window/southleft,
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/item/chems/condiment/ketchup,
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"xX" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"DO" = (
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/machinery/light{
+/obj/structure/window/reinforced{
dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"xY" = (
-/obj/machinery/light{
+/obj/machinery/door/window/southleft,
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"DP" = (
+/obj/structure/window/reinforced{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"xZ" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/structure/closet/crate/bin/ministation,
-/obj/machinery/light,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"ya" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yb" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder/juicer,
-/obj/item/chems/glass/beaker,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yc" = (
-/obj/structure/table,
-/obj/machinery/reagent_temperature/cooler,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yd" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/machinery/door/window/southleft,
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
},
-/obj/structure/table,
-/obj/machinery/reagent_temperature,
-/obj/machinery/camera/network/medbay{
+/obj/machinery/portable_atmospherics/canister/helium,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"DQ" = (
+/obj/structure/rack{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"ye" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
},
-/obj/machinery/vending/coffee{
+/obj/item/clothing/mask/gas/budget,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"DR" = (
+/obj/machinery/light{
dir = 4;
- pixel_x = -5
+ icon_state = "tube1"
},
-/obj/machinery/light{
+/obj/machinery/camera/network/engineering{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yf" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"DT" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/closet/wardrobe/mixed,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yg" = (
-/obj/machinery/light{
+/obj/machinery/door/airlock/glass/atmos,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/engine)
+"DU" = (
+/obj/structure/disposaloutlet{
+ dir = 4
+ },
+/obj/structure/disposalpipe/trunk{
dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yh" = (
+/turf/simulated/floor/airless,
+/area/space)
+"DV" = (
/obj/structure/table,
-/obj/item/storage/firstaid/toxin{
- pixel_x = -2;
- pixel_y = 4
- },
-/obj/item/storage/firstaid/toxin{
- pixel_x = -2;
- pixel_y = 4
+/obj/machinery/alarm{
+ pixel_y = 23
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yl" = (
-/obj/structure/displaycase,
-/obj/item/clothing/mask/gas/owl_mask{
- desc = "So realistic, you'd almost think it's the real thing.";
- name = "replica 'The Owl' mask";
- pixel_x = 1;
- pixel_y = -5
+/obj/machinery/recharger,
+/obj/machinery/cell_charger{
+ pixel_y = 14
},
-/turf/simulated/floor/carpet,
-/area/ministation/hop)
-"ym" = (
-/obj/structure/closet/crate/freezer/rations,
-/turf/simulated/floor/tiled,
-/area/ministation/bridge/vault)
-"yn" = (
-/obj/structure/table/woodentable,
-/obj/item/flashlight/lamp/green,
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"DW" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
-/obj/item/radio/intercom{
- name = "Common Channel";
+/obj/machinery/light_switch{
pixel_y = 25
},
-/turf/simulated/floor/carpet,
-/area/ministation/hop)
-"yp" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/random/suit,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"yq" = (
-/obj/machinery/recharge_station,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"yr" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/machinery/media/jukebox/old,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"ys" = (
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"yt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"yu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
- },
-/obj/machinery/light,
-/obj/effect/floor_decal/corner/red/diagonal,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"yv" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"yw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"yx" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/machinery/camera/autoname{
- dir = 1
- },
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"yy" = (
-/obj/item/stool/bar/padded,
-/obj/machinery/light,
-/turf/simulated/floor/carpet,
-/area/ministation/cafe)
-"yz" = (
-/obj/machinery/vending/engineering{
- dir = 8
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/steel_grid,
/area/ministation/engine)
-"yA" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/effect/decal/cleanable/tomato_smudge,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"yB" = (
-/obj/structure/extinguisher_cabinet{
- pixel_y = -32
- },
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"yC" = (
+"DX" = (
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "0-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"yD" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/obj/machinery/power/smes/buildable/max_cap_in_out{
+ capacity = 5e+009;
+ charge = 5e+009
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"yE" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
+/obj/machinery/camera/network/engineering{
+ name = "Engineering Hub"
},
-/obj/effect/floor_decal/corner/green/half{
- dir = 1
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"DY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"yF" = (
-/obj/machinery/camera/autoname{
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/machinery/newscaster{
- pixel_x = 32
- },
-/obj/structure/hygiene/sink{
- dir = 4;
- pixel_x = 11
+/obj/machinery/status_display{
+ pixel_y = 32
},
-/obj/item/chems/glass/bucket,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"yG" = (
-/obj/structure/closet/secure_closet/personal/patient,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yH" = (
-/obj/structure/closet/secure_closet/medical1,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yI" = (
-/obj/structure/table,
-/obj/item/clothing/accessory/stethoscope,
-/obj/item/chems/hypospray/vial{
- desc = "One of the first hyposprays ever made. Supposedly only a handful exist.";
- name = "prototype hypospray";
- origin_tech = null
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yJ" = (
-/obj/structure/table,
-/obj/item/gun/launcher/syringe,
-/obj/item/flashlight/pen,
-/obj/item/flashlight/pen,
-/obj/item/clothing/suit/straight_jacket,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yK" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"DZ" = (
/obj/structure/table,
-/obj/item/storage/firstaid/regular{
- pixel_x = -2;
- pixel_y = 4
- },
-/obj/item/storage/firstaid/regular{
- pixel_x = -2;
- pixel_y = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"yN" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"yO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"yP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5;
- pixel_x = 2;
- pixel_y = 1
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"yQ" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "4-8"
},
-/turf/simulated/floor/airless,
-/area/space)
-"yS" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 5
},
-/turf/space,
-/area/space)
-"yU" = (
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
},
-/obj/structure/closet/secure_closet/hop2,
-/obj/item/book/skill/organizational/finance,
-/turf/simulated/floor/carpet,
-/area/ministation/hop)
-"yV" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/item/clothing/gloves/insulated,
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/carpet,
-/area/ministation/hop)
-"yW" = (
-/obj/structure/bed,
-/obj/item/bedsheet/hop,
-/turf/simulated/floor/carpet,
-/area/ministation/hop)
-"yX" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Eb" = (
/obj/machinery/power/apc{
dir = 1;
name = "_North APC";
pixel_y = 24
},
/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/plating,
-/area/ministation/hop)
-"yY" = (
-/obj/machinery/alarm{
- pixel_y = 23
+ icon_state = "0-8"
},
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/hop)
-"yZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/power/sensor{
+ id_tag = "Station Power";
+ name = "Powernet Sensor - Station Power"
},
-/obj/structure/cable{
- icon_state = "2-4"
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Ec" = (
+/obj/machinery/light,
+/obj/machinery/vending/snack{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ed" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/vending/cola{
+ dir = 4;
+ pixel_x = -5
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"za" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ee" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zb" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zc" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ef" = (
+/obj/abstract/landmark{
+ name = "lightsout"
},
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "1-2"
},
/obj/structure/cable{
icon_state = "2-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zd" = (
-/obj/abstract/landmark/start{
- name = "Robot"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Eg" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ze" = (
-/turf/simulated/wall,
-/area/ministation/maint/e)
-"zf" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/civilian{
- autoset_access = 0;
- name = "Kitchen airlock";
- req_access = list("ACCESS_KITCHEN")
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Eh" = (
+/obj/machinery/vending/snack{
+ dir = 8;
+ pixel_x = 5
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zg" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
},
/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ei" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ pixel_y = -24;
+ dir = 1;
+ pixel_x = -1
+ },
+/turf/simulated/floor/wood/yew,
/area/ministation/engine)
-"zh" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/civilian{
- autoset_access = 0;
- name = "Kitchen airlock";
- req_access = list("ACCESS_KITCHEN")
+"Ej" = (
+/obj/machinery/conveyor_switch{
+ id_tag = "CanisterStore"
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"zi" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Ek" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"El" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
+/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"zj" = (
-/obj/structure/table/glass,
-/obj/item/hatchet,
-/obj/item/hatchet,
-/obj/item/minihoe,
-/obj/item/minihoe,
-/obj/item/book/skill/service/botany,
+/area/ministation/engine)
+"Em" = (
+/obj/structure/reagent_dispensers/fueltank,
/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"zk" = (
+/area/ministation/engine)
+"En" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Eo" = (
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
-/area/ministation/hydro)
-"zq" = (
+/area/ministation/engine)
+"Eq" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-8"
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor,
-/area/ministation/hop)
-"zr" = (
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zs" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 6
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Er" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4
},
-/mob/living/simple_animal/mouse,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zt" = (
+/obj/item/stool/padded,
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "1-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/abstract/landmark/start{
+ name = "Atmospheric Technician"
+ },
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"Es" = (
+/obj/machinery/power/terminal{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zu" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "0-2"
},
-/obj/machinery/atmospherics/binary/pump/on{
- dir = 4
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zv" = (
-/obj/machinery/meter{
- use_power = 0
+/obj/item/stool/padded,
+/obj/abstract/landmark/start{
+ name = "Station Engineer"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"Et" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/item/stool/padded,
+/obj/abstract/landmark/start{
+ name = "Atmospheric Technician"
},
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"Eu" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Ev" = (
+/obj/structure/cable,
+/obj/machinery/computer/air_control/supermatter_core{
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zx" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Ew" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zy" = (
-/obj/machinery/light{
+/obj/machinery/vending/coffee{
dir = 4;
- icon_state = "tube1"
+ pixel_x = -5
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"zz" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"zC" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/window/westleft,
-/obj/machinery/door/window/eastleft,
-/turf/simulated/floor/tiled/steel_ridged,
-/area/ministation/cafe)
-"zD" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/obj/structure/hygiene/sink/kitchen{
- pixel_y = 25
+/area/ministation/hall/s1)
+"Ex" = (
+/obj/machinery/vending/cigarette{
+ dir = 8;
+ pixel_x = 5
},
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zE" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ey" = (
+/obj/machinery/fabricator/pipe/disposal,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Ez" = (
+/obj/item/stool/padded,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zF" = (
-/obj/machinery/vending/dinnerware,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zG" = (
-/obj/structure/table/woodentable,
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/reagentgrinder/juicer,
-/obj/item/chems/glass/beaker,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zH" = (
-/obj/machinery/microwave{
- pixel_x = -3;
- pixel_y = 6
+/obj/abstract/landmark/start{
+ name = "Station Engineer"
},
-/obj/structure/table/woodentable,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zI" = (
-/obj/machinery/cooker/oven,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zJ" = (
-/obj/machinery/cooker/grill,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zK" = (
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zL" = (
-/obj/structure/closet/crate/bin/ministation,
-/obj/machinery/light{
+/area/ministation/engine)
+"EB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"zM" = (
-/obj/machinery/vending/hydronutrients{
- dir = 1
- },
-/obj/effect/floor_decal/corner/beige/half,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"zN" = (
-/obj/machinery/seed_extractor,
-/obj/effect/floor_decal/corner/beige/half,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"zO" = (
-/obj/machinery/biogenerator,
-/obj/effect/floor_decal/corner/beige/half,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"zP" = (
-/obj/effect/floor_decal/corner/beige/half,
-/obj/machinery/vending/hydroseeds{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"zQ" = (
-/turf/simulated/wall,
-/area/ministation/hydro)
-"zT" = (
+/area/ministation/engine)
+"EE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zU" = (
-/obj/structure/rack{
- dir = 8
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
},
-/obj/item/tank/emergency,
-/obj/item/flashlight,
-/obj/item/clothing/glasses/meson,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zV" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/structure/sign/department/janitor{
+ dir = 4;
+ pixel_x = -33
},
-/obj/effect/floor_decal/industrial/warning,
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 10
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"EJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zW" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/visible,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/power/apc{
+/obj/machinery/light{
dir = 8;
- name = "_West APC";
- pixel_x = -25
+ icon_state = "tube1"
},
-/obj/structure/cable,
-/obj/random/trash,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zY" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/meter,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"zZ" = (
-/obj/machinery/door/airlock,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/closet/secure_closet/engineering_welding,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"EK" = (
+/obj/effect/decal/cleanable/blood/oil,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Aa" = (
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"Ab" = (
-/obj/machinery/network/message_server,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"Ad" = (
-/obj/structure/rack{
- dir = 8
- },
-/obj/item/storage/belt/utility,
-/obj/item/wrench,
-/obj/item/weldingtool,
-/obj/item/clothing/head/welding,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Ae" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Af" = (
+"EL" = (
/obj/abstract/landmark/start{
- name = "Bartender"
+ name = "Station Engineer"
},
+/obj/item/stool/padded,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Ag" = (
-/obj/abstract/landmark/start{
- name = "Bartender"
- },
+/area/ministation/engine)
+"EM" = (
+/obj/item/boombox,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
+/obj/structure/table/woodentable_reinforced/walnut/maple,
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Ah" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Ai" = (
-/obj/effect/decal/cleanable/flour,
+/area/ministation/engine)
+"EN" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/structure/table/woodentable_reinforced/walnut/maple,
+/obj/item/chems/chem_disp_cartridge/coffee{
+ name = "coffee canister"
},
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Aj" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
+/area/ministation/engine)
+"EO" = (
+/obj/item/chems/food/old/pizza,
+/obj/item/stack/material/puck/mapped/uranium/ten,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/icecream_vat,
+/obj/structure/table/woodentable_reinforced/walnut/maple,
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Ak" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/engine)
+"EP" = (
+/obj/machinery/vending/materials{
+ dir = 4
},
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/hydro)
-"Al" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Am" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"EQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"An" = (
-/obj/structure/cable,
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/atmospherics/pipe/simple/visible,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Ao" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
},
-/obj/machinery/atmospherics/pipe/simple/visible,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Ap" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"ER" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Aq" = (
-/obj/structure/rack{
- dir = 8
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"ES" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/item/storage/belt/utility,
-/obj/item/wrench,
-/obj/item/weldingtool,
-/obj/item/clothing/head/welding/engie,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"ET" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/effect/floor_decal/corner/yellow/three_quarters,
+/obj/structure/sign/warning/engineering_access{
+ pixel_y = -32;
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ar" = (
-/obj/structure/lattice,
-/obj/machinery/meter{
- use_power = 0
+/area/ministation/hall/s1)
+"EU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/yellow{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/visible,
-/turf/space,
-/area/space)
-"As" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/hidden,
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"EV" = (
+/obj/effect/floor_decal/corner/yellow/three_quarters{
+ dir = 4
+ },
+/obj/structure/sign/department/engineering{
+ dir = 1;
+ pixel_y = -32
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"EW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/wall/r_wall,
/area/ministation/engine)
-"At" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
+"EX" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/obj/machinery/chem_master/condimaster{
- name = "CondiMaster Neo"
+/obj/machinery/fabricator/pipe,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"EY" = (
+/obj/effect/decal/cleanable/blood/oil,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"EZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Fa" = (
+/obj/structure/closet/secure_closet/engineering_electrical{
+ req_access = list("ACCESS_ENGINEERING")
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Fb" = (
+/obj/item/stool/padded,
+/obj/abstract/landmark/start{
+ name = "Station Engineer"
},
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Au" = (
-/obj/structure/closet/chefcloset,
-/obj/item/storage/box/ammo/beanbags,
-/obj/item/gun/projectile/shotgun/doublebarrel,
-/obj/item/clothing/suit/storage/toggle/wintercoat/hydro,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Av" = (
-/obj/machinery/cooker/fryer,
+/area/ministation/engine)
+"Fc" = (
+/obj/item/wrench,
+/obj/item/clothing/gloves/insulated,
+/obj/structure/table/woodentable_reinforced/walnut/maple,
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Aw" = (
-/obj/machinery/camera/autoname{
- dir = 1
+/area/ministation/engine)
+"Fd" = (
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/structure/table/woodentable,
-/obj/item/chems/condiment/enzyme,
+/obj/item/stack/tape_roll/barricade_tape/atmos,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/table/woodentable_reinforced/walnut/maple,
+/obj/item/chems/spray/cleaner,
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Ax" = (
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
+/area/ministation/engine)
+"Fe" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/area/ministation/telecomms)
-"Ay" = (
-/obj/machinery/reagentgrinder,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Az" = (
-/obj/machinery/cooker/cereal,
+/obj/item/chems/drinks/glass2/coffeecup/metal,
+/obj/item/chems/drinks/glass2/coffeecup/metal,
+/obj/structure/table/woodentable_reinforced/walnut/maple,
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"AA" = (
-/obj/machinery/cooker/candy,
+/area/ministation/engine)
+"Ff" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/opossum/poppy,
+/obj/item/stool/padded,
+/obj/abstract/landmark/start{
+ name = "Station Engineer"
+ },
/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"AB" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "_East APC";
- pixel_x = 27;
- pixel_y = 2
+/area/ministation/engine)
+"Fg" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
},
-/obj/structure/cable,
-/turf/simulated/floor/plating,
-/area/ministation/hydro)
-"AC" = (
-/turf/simulated/wall,
-/area/ministation/maint/se)
-"AD" = (
-/obj/structure/rack,
-/obj/item/clothing/mask/gas/budget,
-/obj/item/clothing/glasses/sunglasses,
-/obj/random/suit,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AE" = (
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AF" = (
-/obj/abstract/landmark{
- name = "blobstart"
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Fh" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
},
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"Fi" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AG" = (
-/obj/machinery/atmospherics/unary/outlet_injector{
- dir = 1
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"Fj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/airless,
-/area/space)
-"AH" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/visible/universal,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AL" = (
-/obj/machinery/network/telecomms_hub,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"AM" = (
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"AN" = (
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- dir = 0;
- id_tag = "pfm_airlock";
- pixel_y = 24;
- tag_airpump = "pfm_vent";
- tag_chamber_sensor = "pfm_sensor";
- tag_exterior_door = "pfm_airlock_exterior";
- tag_interior_door = "pfm_airlock_interior"
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor,
+/area/ministation/engine)
+"Fk" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "pfm_vent"
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"Fm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/machinery/airlock_sensor{
- id_tag = "pfm_sensor";
- pixel_y = 20
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"Fn" = (
+/obj/machinery/space_heater,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"AO" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/cafe)
-"AP" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/hydro)
-"AR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AS" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Fo" = (
+/obj/machinery/space_heater,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
+/obj/machinery/light,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+ dir = 4
},
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Fp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AT" = (
+/obj/machinery/portable_atmospherics/powered/scrubber,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Fr" = (
+/obj/structure/tank_rack/oxygen,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AU" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Fs" = (
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Ft" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 5
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"AV" = (
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Fu" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"Fv" = (
/obj/structure/cable{
- icon_state = "0-4"
+ icon_state = "2-4"
},
-/obj/machinery/power/apc{
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"Fw" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/wood,
+/area/ministation/engine)
+"Fx" = (
+/obj/machinery/vending/engivend{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/yellow{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Fy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"Fz" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/effect/floor_decal/corner/yellow/three_quarters{
+ dir = 8
+ },
+/obj/machinery/light{
dir = 8;
- name = "_West APC";
- pixel_x = -25
+ icon_state = "tube1"
},
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FA" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
},
-/area/ministation/telecomms)
-"AW" = (
+/obj/effect/decal/cleanable/blood/oil,
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "1-2"
},
-/obj/machinery/power/smes/buildable/max_cap_in_out,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FB" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/effect/floor_decal/corner/yellow/three_quarters{
+ dir = 1
},
-/area/ministation/telecomms)
-"AX" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/light_switch{
+ pixel_y = 25
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"FD" = (
+/obj/abstract/landmark/start{
+ name = "Station Engineer"
},
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"AY" = (
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"FE" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "0-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/obj/machinery/power/solar,
+/turf/simulated/floor/airless,
+/area/space)
+"FF" = (
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"AZ" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
+/obj/structure/cable{
+ icon_state = "2-4"
},
+/turf/simulated/floor/plating,
+/area/space)
+"FG" = (
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/universal{
- dir = 4
+/obj/machinery/power/solar,
+/turf/simulated/floor/airless,
+/area/space)
+"FH" = (
+/obj/structure/closet/secure_closet/engineering_personal{
+ req_access = list("ACCESS_ENGINEERING")
},
-/turf/simulated/floor/plating,
-/area/ministation/cafe)
-"Ba" = (
+/obj/machinery/light,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FI" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/chems/spray/extinguisher{
+ pixel_x = 8
+ },
+/obj/item/clothing/gloves/thick,
+/obj/item/hoist_kit,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/lantern,
+/obj/item/mobile_ladder,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FJ" = (
+/obj/machinery/port_gen/pacman/super,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FK" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FL" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+ dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Bb" = (
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Bc" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/area/ministation/engine)
+"FM" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 5
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Bd" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/obj/machinery/light/small{
- dir = 1
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/structure/table/gamblingtable,
+/obj/machinery/recharger,
+/obj/item/poster,
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
+"FN" = (
+/obj/machinery/door/firedoor{
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Bf" = (
-/obj/machinery/door/airlock/hatch/maintenance,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Bh" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
+/obj/machinery/door/airlock/civilian,
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Bi" = (
+/area/ministation/janitor)
+"FO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/effect/floor_decal/corner/yellow{
+ dir = 10
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
-"Bj" = (
-/obj/machinery/airlock_sensor{
- id_tag = "escape3_sensor";
- pixel_y = 20
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "escape1_vent"
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FP" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/door/airlock/glass/engineering,
+/obj/machinery/door/firedoor{
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"Bl" = (
-/obj/structure/rack,
-/obj/item/beartrap,
-/obj/random/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Bm" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "sqm_airlock_interior"
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/button/access/interior{
- id_tag = "sqm_airlock";
- name = "interior access button";
- pixel_x = -10;
- pixel_y = 20
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Bn" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Bp" = (
-/obj/machinery/power/terminal{
- dir = 8
+/turf/simulated/floor,
+/area/ministation/engine)
+"FQ" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"Bq" = (
-/obj/machinery/camera/autoname{
- dir = 4;
- preset_channels = list("Exodus")
- },
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
- },
-/area/ministation/telecomms)
-"Br" = (
-/obj/machinery/light/small,
-/turf/simulated/floor/bluegrid{
- name = "Mainframe Base";
- temperature = 263
+ icon_state = "4-8"
},
-/area/ministation/telecomms)
-"Bs" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/telecomms)
-"Bt" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Bu" = (
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Bv" = (
-/obj/structure/table,
-/obj/item/folder/blue,
-/obj/item/pen/blue,
-/obj/item/paper/monitorkey,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Bw" = (
-/obj/machinery/computer/message_monitor,
-/obj/machinery/alarm{
- pixel_y = 23
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Bx" = (
-/obj/structure/table,
-/obj/item/clothing/suit/storage/toggle/wintercoat,
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = 20
+/obj/effect/floor_decal/corner/yellow{
+ dir = 9
},
-/obj/item/radio,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"By" = (
-/obj/structure/table,
-/obj/item/flashlight/lamp,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Bz" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "sat2_airlock_exterior"
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FR" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
},
-/obj/machinery/button/access/interior{
- id_tag = "sat2_airlock";
- name = "exterior access button";
- pixel_x = -10;
- pixel_y = 20;
- command = "cycle_exterior"
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BA" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"BC" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"BD" = (
-/obj/structure/table,
-/obj/item/paper_bin,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"BE" = (
-/obj/structure/bed/chair/padded/blue,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"BF" = (
-/obj/machinery/atmospherics/pipe/manifold/visible{
+/obj/structure/disposalpipe/segment/bent{
dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BG" = (
-/obj/structure/table,
-/obj/structure/extinguisher_cabinet{
- pixel_x = 32
- },
-/obj/item/disk/nuclear,
-/obj/machinery/recharger,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"BH" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FS" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"FT" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/machinery/door/airlock/glass/engineering,
+/obj/machinery/door/firedoor{
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BI" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/door/airlock/double,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BJ" = (
+/turf/simulated/floor,
+/area/ministation/engine)
+"FU" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"FV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BK" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 10
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BL" = (
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"FW" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"FX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BM" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"BN" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/universal{
- dir = 4
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29;
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"BO" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-8"
},
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"BP" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"BQ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+"FY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"BR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/machinery/camera/network/engineering{
+ dir = 1;
+ name = "Tank Storage"
},
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"FZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"BS" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
- },
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Ga" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/engine)
-"BT" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-4"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/airless,
+/turf/simulated/floor/plating,
/area/space)
-"BU" = (
-/obj/machinery/meter,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
+"Gb" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/airless,
-/area/ministation/atmospherics)
-"BV" = (
-/obj/effect/floor_decal/industrial/custodial/corner{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gd" = (
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
},
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 10
+/obj/machinery/conveyor{
+ dir = 8;
+ id_tag = "trash_sort"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"BW" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
- },
-/turf/simulated/wall,
-/area/ministation/janitor)
-"BX" = (
-/obj/machinery/meter{
- name = "Distribution Loop"
+/area/ministation/trash)
+"Ge" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gf" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 6
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"BY" = (
-/obj/machinery/atmospherics/pipe/manifold/visible{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gh" = (
+/obj/structure/cable{
+ icon_state = "0-4"
},
+/obj/machinery/power/solar,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"BZ" = (
+/area/space)
+"Gi" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/door/airlock/glass/command{
- autoset_access = 0;
- name = "Telecommunications glass airlock";
- req_access = list("ACCESS_TELECOMS")
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gj" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
},
/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Ca" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "sqm_airlock_exterior"
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gk" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 4
},
-/obj/machinery/button/access/interior{
- id_tag = "sqm_airlock";
- name = "exterior access button";
- pixel_x = 10;
- pixel_y = 20;
- command = "cycle_exterior"
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/portable_atmospherics/canister/empty,
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Cb" = (
-/obj/machinery/alarm{
- pixel_y = 20
+/area/ministation/supermatter)
+"Gl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gm" = (
+/obj/structure/lattice,
+/turf/simulated/wall,
+/area/ministation/engine)
+"Gn" = (
+/obj/structure/cable{
+ icon_state = "0-4"
},
+/obj/machinery/power/smes/buildable/preset,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Gp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/commons)
-"Cc" = (
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gq" = (
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "1-8"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Cd" = (
-/obj/machinery/turretid{
- control_area = "\improper AI Upload Chamber";
- name = "AI Upload turret control";
- pixel_y = -25
+/obj/effect/floor_decal/corner/yellow{
+ dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gr" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Ce" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/hidden/green,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gs" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gt" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cf" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gu" = (
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/power/smes/buildable/preset,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Gv" = (
+/obj/machinery/power/terminal{
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cg" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/structure/sign/warning/airlock{
+ pixel_x = 32;
+ dir = 8
},
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Gw" = (
+/obj/structure/cable,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Ch" = (
+/area/space)
+"Gx" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "0-2";
+ pixel_y = 1
},
-/obj/machinery/door/airlock/highsecurity,
-/turf/simulated/floor/airless,
-/area/ministation/ai_upload)
-"Ci" = (
-/mob/living/simple_animal/mouse,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Cj" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
+/obj/machinery/power/terminal{
+ dir = 1
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Ck" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Cl" = (
-/obj/machinery/camera/autoname{
- preset_channels = list("Exodus")
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
},
-/obj/machinery/firealarm{
+/obj/structure/sign/warning/airlock{
dir = 4;
- pixel_x = 24
+ pixel_x = -32
},
-/obj/structure/closet/emcloset,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Gy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Gz" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Cm" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cn" = (
-/turf/simulated/wall,
-/area/ministation/atmospherics)
-"Co" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
+/obj/effect/floor_decal/corner/yellow{
+ dir = 6
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Cp" = (
-/obj/machinery/ai_status_display,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_upload)
-"Cq" = (
+/area/ministation/engine)
+"GA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cr" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Cs" = (
-/obj/machinery/light/small{
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"GB" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging,
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"GC" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging,
+/turf/space,
+/area/space)
+"GF" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 8
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Ct" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cu" = (
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"GG" = (
/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cv" = (
-/obj/item/radio/intercom{
- broadcasting = 1;
- frequency = 1447;
- listening = 0;
- name = "Station Intercom (AI Private)";
- pixel_y = -29
+ icon_state = "1-2"
},
/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ icon_state = "1-4"
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cw" = (
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Cx" = (
+/area/space)
+"GH" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "0-8"
},
-/obj/machinery/door/airlock/highsecurity/bolted,
/turf/simulated/floor/plating,
-/area/ministation/ai_core)
-"Cy" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Cz" = (
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 5
+/area/space)
+"GI" = (
+/obj/structure/cable{
+ icon_state = "0-4"
},
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"CA" = (
+/area/space)
+"GJ" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"CB" = (
-/obj/machinery/hologram/holopad,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/turf/simulated/floor/plating,
+/area/space)
+"GL" = (
+/obj/machinery/door/airlock/civilian{
+ autoset_access = 0
},
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"GM" = (
/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"CC" = (
-/obj/machinery/newscaster{
- pixel_x = 32
+ icon_state = "0-2";
+ pixel_y = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/turf/simulated/floor/plating,
+/area/space)
+"GN" = (
+/obj/structure/cable{
+ icon_state = "1-8"
},
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"CD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/black{
- dir = 8
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/sign/warning/server_room{
- pixel_x = -32
+/turf/simulated/floor/plating,
+/area/space)
+"GO" = (
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"CE" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"CF" = (
-/obj/machinery/atmospherics/binary/pump/on,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"CG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/universal,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"CH" = (
-/obj/machinery/portable_atmospherics/canister/air,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"CI" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/area/space)
+"GP" = (
+/obj/machinery/power/tracker,
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/obj/effect/catwalk_plated,
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"CJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/catwalk_plated,
+/area/space)
+"GQ" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "0-4"
},
+/obj/machinery/power/tracker,
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"CK" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"CL" = (
-/obj/structure/rack,
-/obj/random/maintenance,
-/obj/item/borg/sight/meson,
-/obj/item/flashlight,
-/obj/random/maintenance,
-/obj/random/trash,
-/obj/random/gloves,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"CM" = (
-/obj/machinery/recharge_station,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"CN" = (
+/area/space)
+"GR" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"CO" = (
-/obj/machinery/light/small{
- dir = 4
+/area/space)
+"GS" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"CP" = (
-/obj/abstract/landmark/start{
- name = "Assistant"
+/area/space)
+"GT" = (
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/item/stool/padded,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
+/turf/simulated/floor/plating,
+/area/space)
+"GU" = (
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"CT" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/area/ministation/hall/s1)
+"GV" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/machinery/door/airlock/external/glass{
+ id_tag = "port_engineering_airlock_interior";
+ autoset_access = 0;
+ locked = 1
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"CU" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/machinery/door/airlock/highsecurity{
- name = "Telecommunications"
- },
-/obj/machinery/door/firedoor{
- dir = 8
+/obj/machinery/button/access/interior{
+ id_tag = "port_engineering_airlock";
+ name = "interior access button";
+ pixel_y = 24
},
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"GW" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/airlock_sensor{
+ id_tag = "port_engineering_sensor";
+ pixel_y = 24;
+ pixel_x = 8
},
-/turf/simulated/floor,
-/area/ministation/telecomms)
-"CV" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "port_engineering_airlock";
+ pixel_y = 24;
+ tag_airpump = "port_engineering_vent";
+ tag_chamber_sensor = "port_engineering_sensor";
+ tag_exterior_door = "port_engineering_airlock_exterior";
+ tag_interior_door = "port_engineering_airlock_interior";
+ pixel_x = -8
},
-/obj/effect/floor_decal/corner/black{
- dir = 9
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 10
},
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"GX" = (
/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+ icon_state = "1-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"CW" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"CY" = (
-/obj/machinery/door/airlock/glass{
- autoset_access = 0;
- name = "Court Room Airlock"
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
},
-/obj/machinery/door/firedoor{
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"GY" = (
+/obj/machinery/power/solar_control{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"GZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 10
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"Ha" = (
+/obj/item/radio/intercom{
+ canhear_range = 3;
+ name = "Common Channel";
+ pixel_x = 22;
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"CZ" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Da" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/obj/machinery/atmospherics/pipe/simple/hidden/black{
dir = 9
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Db" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Dc" = (
-/obj/machinery/newscaster{
- pixel_y = 32
+/area/ministation/engine)
+"Hb" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/obj/structure/table,
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"De" = (
-/obj/structure/table,
-/obj/item/multitool,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
+/obj/structure/window/reinforced{
+ dir = 1
},
-/obj/machinery/light_switch{
- dir = 1;
- pixel_y = -23
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Hc" = (
+/obj/structure/window/reinforced{
+ dir = 1
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Df" = (
-/obj/structure/table,
-/obj/item/radio,
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -35
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Hd" = (
+/obj/structure/window/reinforced{
+ dir = 1
},
-/obj/item/chems/spray/extinguisher,
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Dg" = (
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"He" = (
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/structure/filing_cabinet/chestdrawer,
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/network/requests_console{
- announcementConsole = 1;
- department = "Telecoms Admin";
- name = "Telecoms RC";
- pixel_x = 30
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"Dh" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/black{
+/turf/simulated/floor/plating,
+/area/space)
+"Hf" = (
+/obj/structure/cable,
+/obj/machinery/power/solar_control{
dir = 1
},
-/obj/structure/sign/department/telecomms{
- dir = 4;
- pixel_x = -32
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Hg" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/machinery/camera/network/engineering{
+ name = "Port Solars"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Dj" = (
-/obj/random/trash,
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Dk" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/camera/autoname{
- dir = 4
+/area/ministation/engine)
+"Hh" = (
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor,
+/area/ministation/engine)
+"Hi" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
},
+/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Dl" = (
-/obj/structure/window/reinforced{
+/area/ministation/engine)
+"Hj" = (
+/obj/machinery/light/small,
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
- },
-/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Dm" = (
-/obj/structure/window/reinforced{
- dir = 8
+"Hk" = (
+/obj/structure/transit_tube{
+ dir = 4;
+ icon_state = "Block"
},
-/obj/structure/window/reinforced{
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Hl" = (
+/obj/structure/transit_tube_pod{
dir = 4
},
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/obj/structure/transit_tube/station{
+ dir = 1
},
-/obj/machinery/portable_atmospherics/canister/hydrogen,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Dn" = (
-/obj/structure/window/reinforced{
- dir = 8
+"Hm" = (
+/obj/structure/transit_tube,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Hn" = (
+/obj/structure/closet/wardrobe/mixed,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Ho" = (
+/obj/structure/transit_tube,
+/turf/space,
+/area/space)
+"Hp" = (
+/obj/structure/transit_tube{
+ icon_state = "E-W-Pass"
},
-/obj/structure/window/reinforced{
- dir = 4
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"Hq" = (
+/obj/structure/transit_tube{
+ icon_state = "W-SE"
},
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/turf/space,
+/area/space)
+"Hr" = (
+/obj/structure/transit_tube{
+ icon_state = "D-SW"
},
-/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,
-/turf/simulated/floor/plating,
+/turf/space,
+/area/space)
+"Hs" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Do" = (
-/obj/structure/window/reinforced{
- dir = 8
+"Ht" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
},
-/obj/structure/window/reinforced{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Hu" = (
+/obj/effect/decal/cleanable/blood/oil,
+/obj/structure/sign/warning/radioactive{
+ pixel_y = 42;
+ pixel_x = 9
},
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Dp" = (
-/obj/structure/window/reinforced{
+"Hv" = (
+/obj/machinery/door/firedoor{
dir = 8
},
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/obj/machinery/door/blast/regular/open{
+ id_tag = "smsafetydoor"
},
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Dq" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 4
+"Hw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
},
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/portable_atmospherics/canister/helium,
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"Dr" = (
-/obj/structure/closet/firecloset,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ds" = (
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/area/ministation/ai_sat)
+"Hx" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
},
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 1
},
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Dt" = (
-/turf/simulated/wall,
-/area/ministation/engine)
-"Du" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "pqm_airlock_exterior"
- },
-/obj/machinery/button/access/interior{
- id_tag = "pqm_airlock";
- name = "exterior access button";
- pixel_x = -10;
- pixel_y = 20;
- command = "cycle_exterior"
+"Hy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Dv" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Hz" = (
+/obj/structure/transit_tube{
+ icon_state = "D-NE"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Dw" = (
+/obj/structure/lattice,
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Dx" = (
+/turf/space,
+/area/space)
+"HA" = (
+/obj/structure/transit_tube{
+ icon_state = "S-NW"
+ },
+/obj/structure/lattice,
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Dy" = (
+/turf/space,
+/area/space)
+"HB" = (
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/item/stool,
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
dir = 4
},
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HC" = (
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "4-8"
},
+/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"DA" = (
-/obj/item/radio/intercom{
- dir = 1;
- pixel_y = -32
+/area/ministation/engine)
+"HD" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/blast/regular/open{
+ id_tag = "smsafetydoor"
},
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"DC" = (
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"DD" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/maint/sw)
-"DE" = (
+"HE" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "2-8"
},
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/engine)
-"DF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/wall,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
/area/ministation/engine)
-"DG" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
+"HF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+/obj/item/stool,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/floor_decal/corner/yellow{
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"DH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
+/area/ministation/engine)
+"HH" = (
+/obj/structure/transit_tube{
+ icon_state = "N-S"
},
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"DI" = (
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
+/turf/space,
+/area/space)
+"HI" = (
+/obj/structure/table,
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/circuitboard/airlock_electronics,
+/obj/item/stock_parts/circuitboard/airlock_electronics,
+/obj/item/scanner/gas,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HJ" = (
+/obj/structure/table,
+/obj/item/folder/yellow,
+/obj/item/clothing/head/earmuffs,
+/obj/item/stack/material/rods/fifty,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HK" = (
+/obj/machinery/atmospherics/portables_connector{
dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"DJ" = (
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HL" = (
+/obj/structure/cable,
+/obj/machinery/power/smes/buildable/preset,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"HM" = (
+/obj/machinery/power/terminal{
+ dir = 8
+ },
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "0-4"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"DK" = (
-/obj/structure/window/reinforced{
- dir = 4
+/obj/structure/sign/warning/airlock{
+ dir = 1;
+ pixel_y = -32
},
-/obj/structure/window/reinforced{
- dir = 8
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"HN" = (
+/obj/machinery/firealarm{
+ pixel_y = 21
},
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled,
+/area/ministation/smcontrol)
+"HO" = (
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/obj/machinery/door/window/southleft,
-/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup,
-/turf/simulated/floor/plating,
+/obj/machinery/power/solar_control{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/steel_grid,
/area/ministation/engine)
-"DL" = (
-/obj/structure/window/reinforced{
- dir = 4
+"HP" = (
+/obj/structure/table,
+/obj/item/stack/material/pane/mapped/glass/fifty,
+/obj/item/stack/material/pane/mapped/rglass,
+/obj/item/stack/material/reinforced/mapped/fiberglass/fifty,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HQ" = (
+/obj/structure/table,
+/obj/item/stack/material/sheet/mapped/steel/fifty,
+/obj/item/stack/material/shiny/mapped/aluminium/fifty,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HR" = (
+/obj/structure/table,
+/obj/item/stack/material/reinforced/mapped/plasteel,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"HS" = (
+/obj/structure/transit_tube{
+ icon_state = "N-S"
},
-/obj/structure/window/reinforced{
- dir = 8
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"HT" = (
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/door/window/southleft,
-/obj/machinery/portable_atmospherics/canister/hydrogen,
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"DM" = (
-/obj/structure/window/reinforced{
+/area/space)
+"HU" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
dir = 4
},
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/machinery/door/window/southleft,
-/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"DN" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/structure/window/reinforced{
- dir = 4
+/area/ministation/supermatter)
+"HV" = (
+/obj/structure/transit_tube{
+ icon_state = "N-S-Pass"
},
-/obj/structure/window/reinforced{
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 8
},
-/obj/machinery/door/window/southleft,
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/turf/space,
+/area/space)
+"HW" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineVent"
},
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"DO" = (
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
-/obj/structure/window/reinforced{
- dir = 4
+/area/ministation/supermatter)
+"HY" = (
+/obj/structure/cable{
+ icon_state = "0-2"
},
-/obj/structure/window/reinforced{
+/obj/machinery/power/solar,
+/turf/simulated/floor/plating,
+/area/space)
+"Ia" = (
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/machinery/door/window/southleft,
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Ib" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/flora/pottedplant/aquatic,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ic" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/plating,
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/turf/simulated/floor/carpet/orange,
/area/ministation/engine)
-"DP" = (
-/obj/structure/window/reinforced{
- dir = 4
+"If" = (
+/obj/structure/cable,
+/obj/machinery/power/solar,
+/turf/simulated/floor/plating,
+/area/space)
+"Ig" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/structure/window/reinforced{
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "starboard_engineering_vent";
dir = 8
},
-/obj/machinery/door/window/southleft,
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+/obj/machinery/airlock_sensor{
+ id_tag = "starboard_engineering_sensor";
+ pixel_y = 24
},
-/obj/machinery/portable_atmospherics/canister/helium,
/turf/simulated/floor/plating,
/area/ministation/engine)
-"DQ" = (
-/obj/structure/rack{
+"Ih" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ii" = (
+/obj/structure/closet/crate/solar_assembly,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Ij" = (
+/obj/machinery/atmospherics/unary/tank/air,
+/obj/machinery/atmospherics/portables_connector{
dir = 8
},
-/obj/item/flashlight{
- pixel_x = 1;
- pixel_y = 5
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ik" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "sat2_airlock_interior"
},
-/obj/item/clothing/mask/gas/budget,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"DR" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/obj/machinery/button/access/interior{
+ id_tag = "sat2_airlock";
+ name = "interior access button";
+ pixel_x = 32;
+ pixel_y = 24
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"DS" = (
-/obj/structure/window/reinforced{
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Il" = (
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Im" = (
/obj/machinery/light/small{
- dir = 8
+ dir = 1
},
-/turf/simulated/floor/airless,
-/area/ministation/atmospherics)
-"DT" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"In" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/obj/effect/floor_decal/corner/yellow{
- dir = 5
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ip" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"DU" = (
-/obj/structure/table,
+/obj/machinery/camera/network/ministation/sat,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Iq" = (
+/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/cell_charger,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"DV" = (
-/obj/structure/table,
-/obj/machinery/alarm{
- pixel_y = 23
+ icon_state = "2-8"
},
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/recharger,
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"DW" = (
-/obj/structure/cable{
- icon_state = "4-8"
+"It" = (
+/obj/machinery/atmospherics/unary/outlet_injector{
+ dir = 8
},
-/obj/effect/floor_decal/industrial/warning{
+/turf/simulated/floor/airless,
+/area/space)
+"Iu" = (
+/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/light_switch{
- pixel_y = 25
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Iv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"DX" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_sat)
+"Iw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "0-8"
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_sat)
+"Ix" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/power/smes/buildable/max_cap_in_out,
-/obj/machinery/camera/network/engineering,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"DY" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/door/airlock,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Iy" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_sat)
+"Iz" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/network/requests_console{
- department = "Engineering";
- name = "Engineering RC";
- pixel_y = 30
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_sat)
+"IA" = (
+/obj/machinery/camera/autoname,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"ID" = (
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"IE" = (
+/obj/machinery/camera/autoname{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"IF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_sat)
+"IG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"IH" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden,
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29;
+ dir = 1
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"DZ" = (
-/obj/structure/table,
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/cargo)
+"II" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"IJ" = (
+/obj/machinery/alarm{
+ pixel_y = 28
},
-/obj/item/storage/toolbox/electrical{
- pixel_y = 5
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"IK" = (
+/obj/machinery/camera/network/mining,
+/obj/machinery/atm{
+ pixel_y = 32
},
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_y = 25
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
},
-/obj/item/clothing/gloves/insulated,
-/obj/item/storage/toolbox/mechanical{
- pixel_y = 5
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ea" = (
-/obj/effect/decal/cleanable/blood/oil,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -32
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Eb" = (
+/area/ministation/cargo)
+"IL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/random/maintenance,
+/obj/structure/rack,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"IM" = (
/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
+ name = "_South APC";
+ pixel_y = -24
},
/obj/structure/cable{
icon_state = "0-8"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "0-4"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ec" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/light/small{
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1ne)
+"IN" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Ed" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/vending/cola{
- dir = 4;
- pixel_x = -5
+/area/ministation/ai_sat)
+"IO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
+/obj/structure/table,
+/obj/item/stack/package_wrap,
+/obj/item/stack/package_wrap,
+/obj/item/storage/box,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Ee" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
+/area/ministation/cargo)
+"IP" = (
+/obj/structure/closet,
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -24
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Ef" = (
-/obj/abstract/landmark{
- name = "lightsout"
+/obj/machinery/light{
+ dir = 1
},
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"IQ" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Eg" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"IR" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Eh" = (
-/obj/machinery/vending/snack{
- dir = 8;
- pixel_x = 5
+/turf/space,
+/area/space)
+"IW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Ei" = (
-/obj/machinery/fabricator/pipe/disposal,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ej" = (
-/obj/machinery/conveyor_switch{
- id_tag = "CanisterStore"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"IY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ek" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/obj/machinery/computer/modular/preset/cardslot/command{
+ dir = 8
},
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"IZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"El" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+"Jb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Em" = (
-/obj/structure/reagent_dispensers/fueltank,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"En" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Eo" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/engine)
-"Ep" = (
-/turf/simulated/floor/reinforced/airmix,
-/area/ministation/atmospherics)
-"Eq" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Er" = (
-/obj/effect/floor_decal/industrial/warning/corner{
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
-/obj/item/stool/padded,
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Es" = (
-/obj/machinery/power/terminal{
- dir = 1
- },
+"Jc" = (
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "1-2"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Et" = (
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 1
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Jd" = (
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "sat3_airlock";
+ pixel_y = 24;
+ tag_airpump = "sat3_vent";
+ tag_chamber_sensor = "sat3_sensor";
+ tag_exterior_door = "sat3_airlock_exterior";
+ tag_interior_door = "sat3_airlock_interior";
+ pixel_x = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Eu" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ev" = (
-/obj/structure/cable,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ew" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/vending/coffee{
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 4;
- pixel_x = -5
+ id_tag = "sat3_vent"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Ex" = (
-/obj/machinery/vending/cigarette{
- dir = 8;
- pixel_x = 5
+/obj/machinery/airlock_sensor{
+ id_tag = "sat3_sensor";
+ pixel_y = 24;
+ pixel_x = -8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Ey" = (
-/obj/machinery/fabricator/pipe,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ez" = (
-/obj/effect/decal/cleanable/blood/oil,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EB" = (
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Je" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/maint/eastatmos)
+"Jg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_core)
+"Jh" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_core)
+"Ji" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_core)
+"Jj" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"ED" = (
-/obj/machinery/atmospherics/binary/pump/on{
- dir = 8
+/obj/random/trash,
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"Jk" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Jl" = (
+/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup,
+/turf/simulated/floor/plating,
/area/ministation/engine)
-"EE" = (
-/obj/item/stool/padded,
-/obj/abstract/landmark/start{
- name = "Security Officer"
+"Jm" = (
+/obj/structure/table,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"EG" = (
-/obj/machinery/light/small/emergency{
- dir = 4
+/obj/structure/window/reinforced{
+ dir = 8
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"EH" = (
-/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos/tank{
+/obj/machinery/light/small{
dir = 8
},
-/turf/simulated/floor/reinforced/airmix,
-/area/ministation/atmospherics)
-"EI" = (
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/simulated/floor/reinforced/airmix,
-/area/ministation/atmospherics)
-"EJ" = (
-/obj/structure/closet/secure_closet/engineering_welding,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/blood/oil,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EL" = (
-/obj/abstract/landmark/start{
- name = "Station Engineer"
+/obj/machinery/button/alternate/door/bolts{
+ name = "AI core door bolts"
},
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EM" = (
-/obj/structure/table/reinforced,
-/obj/item/boombox,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EN" = (
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"Jn" = (
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"Jo" = (
+/obj/structure/table,
+/obj/item/folder/blue,
+/obj/machinery/camera/motion/ministation,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Jp" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/table/reinforced,
-/obj/item/chems/chem_disp_cartridge/water,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EO" = (
-/obj/structure/table/reinforced,
-/obj/item/chems/food/old/pizza,
-/obj/item/stack/material/puck/mapped/uranium/ten,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EP" = (
-/obj/machinery/vending/materials{
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Jq" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/pen{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Jr" = (
+/obj/structure/table,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EQ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/light{
+/obj/item/aicard,
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"Jt" = (
+/turf/simulated/floor/plating,
+/area/space)
+"Ju" = (
+/obj/structure/hygiene/shower{
+ dir = 8
+ },
+/obj/structure/window/reinforced/tinted{
dir = 4;
- icon_state = "tube1"
+ icon_state = "twindow"
},
-/obj/machinery/computer/atmos_alert{
- dir = 8
+/obj/structure/window/reinforced/tinted,
+/obj/structure/curtain/open/shower,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"ER" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/wall/r_wall,
-/area/ministation/engine)
-"ES" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"Jv" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Jw" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"Jx" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"Jy" = (
+/obj/structure/cable{
+ icon_state = "1-8"
},
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"JA" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"JB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/wall/r_wall,
-/area/ministation/engine)
-"ET" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/area/ministation/ai_core)
+"JC" = (
+/obj/machinery/porta_turret{
dir = 4
},
-/obj/effect/floor_decal/corner/yellow/three_quarters,
-/obj/structure/sign/warning/engineering_access{
- pixel_y = -32
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"JD" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"JE" = (
+/obj/machinery/porta_turret{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"EU" = (
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"JG" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/effect/floor_decal/corner/yellow{
- dir = 10
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_core)
+"JH" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
},
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_core)
+"JI" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"EV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"JJ" = (
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"JK" = (
+/obj/machinery/flasher{
+ pixel_y = -21;
+ dir = 1
},
-/obj/effect/floor_decal/corner/yellow/three_quarters{
- dir = 4
+/obj/machinery/ai_slipper{
+ uses = 10
},
-/obj/structure/sign/department/engineering{
- dir = 1;
- pixel_y = -32
+/obj/machinery/light,
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"JL" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -23
},
-/obj/random/trash,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"EW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"JM" = (
+/obj/machinery/hologram/holopad,
+/obj/structure/cable{
+ icon_state = "1-2"
},
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"JN" = (
/turf/simulated/wall/r_wall,
-/area/ministation/engine)
-"EX" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
+/area/ministation/ai_upload)
+"JO" = (
+/obj/structure/cable,
+/obj/machinery/power/tracker,
+/turf/simulated/floor/plating,
+/area/space)
+"JP" = (
+/obj/structure/transit_tube{
+ icon_state = "N-SE"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EY" = (
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"EZ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fa" = (
-/obj/structure/closet/secure_closet/engineering_electrical,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fb" = (
-/mob/living/simple_animal/hostile/retaliate/parrot/Poly,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fc" = (
-/obj/structure/table/reinforced,
-/obj/item/wrench,
-/obj/item/clothing/gloves/insulated,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fd" = (
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"JQ" = (
+/obj/structure/transit_tube{
+ icon_state = "D-SW"
+ },
+/obj/structure/lattice,
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/structure/table/reinforced,
+/turf/space,
+/area/space)
+"JR" = (
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fe" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/ai_sat)
+"JS" = (
+/obj/machinery/door/firedoor{
+ dir = 8
},
-/obj/structure/table/reinforced,
-/obj/item/chems/drinks/glass2/coffeecup/metal,
-/obj/item/chems/drinks/glass2/coffeecup/metal,
-/obj/item/chems/condiment/small/packet/coffee,
-/obj/item/chems/condiment/small/packet/coffee,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ff" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/mob/living/simple_animal/opossum/poppy,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fg" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/disused_office)
-"Fh" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+/area/ministation/ai_sat)
+"JT" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
},
-/turf/simulated/wall/r_wall,
-/area/ministation/engine)
-"Fi" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"JU" = (
+/turf/simulated/wall,
+/area/ministation/ai_core)
+"JV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/wall/r_wall,
-/area/ministation/engine)
-"Fj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering,
/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor,
-/area/ministation/engine)
-"Fk" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/wall/r_wall,
-/area/ministation/engine)
-"Fl" = (
-/obj/abstract/landmark/start{
- name = "Assistant"
+ icon_state = "2-4"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"Fm" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning/fulltile,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fn" = (
-/obj/machinery/space_heater,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/area/ministation/cargo)
+"JW" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fo" = (
-/obj/machinery/space_heater,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/item/stock_parts/circuitboard/aiupload,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"JX" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"JY" = (
+/obj/structure/table,
+/obj/machinery/light{
dir = 4
},
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/item/stock_parts/circuitboard/borgupload,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Ka" = (
+/obj/structure/transit_tube{
+ icon_state = "D-NE"
+ },
+/turf/space,
+/area/space)
+"Kb" = (
+/obj/structure/transit_tube{
+ icon_state = "E-NW"
+ },
+/turf/space,
+/area/space)
+"Kc" = (
+/obj/structure/lattice,
+/obj/structure/transit_tube{
+ icon_state = "E-W-Pass"
+ },
+/turf/space,
+/area/space)
+"Kd" = (
+/obj/structure/transit_tube,
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"Ke" = (
+/obj/structure/transit_tube,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
dir = 4
},
-/obj/machinery/portable_atmospherics/powered/scrubber,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fq" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/court)
-"Fr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/structure/tank_rack/oxygen,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Kf" = (
+/obj/structure/transit_tube,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fs" = (
-/obj/structure/closet/emcloset,
+/area/ministation/ai_sat)
+"Kg" = (
+/obj/structure/transit_tube/station{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ft" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/area/ministation/ai_sat)
+"Kh" = (
+/obj/structure/transit_tube{
+ dir = 8;
+ icon_state = "Block"
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fu" = (
+/area/ministation/ai_sat)
+"Ki" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green{
+ dir = 6
+ },
+/obj/machinery/light{
+ dir = 1;
+ icon_state = "bulb1"
+ },
+/obj/structure/closet/secure_closet/atmos_personal,
+/obj/item/storage/toolbox/emergency,
+/obj/item/clothing/suit/space/emergency,
+/obj/item/clothing/head/helmet/space/emergency,
+/obj/item/clothing/mask/breath/emergency,
+/obj/item/storage/firstaid/o2,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"Kj" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fv" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_core)
+"Kk" = (
+/obj/machinery/porta_turret{
+ dir = 4
},
-/obj/item/stool/padded,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fw" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"Kl" = (
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fx" = (
-/obj/machinery/vending/engivend{
- dir = 8
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"Km" = (
+/obj/machinery/ai_slipper{
+ uses = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Fy" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/wall,
-/area/ministation/engine)
-"Fz" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/machinery/light/small{
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"Kn" = (
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_x = -22;
+ pixel_y = 6;
+ dir = 4
+ },
+/obj/item/radio/intercom{
+ listening = 0;
+ name = "Custom Channel";
+ pixel_y = 20
+ },
+/obj/item/radio/intercom{
+ frequency = 1447;
+ name = "Private Channel";
+ pixel_x = 22;
+ pixel_y = 6;
dir = 8
},
/obj/machinery/newscaster{
+ pixel_x = -32;
pixel_y = 32
},
-/obj/effect/floor_decal/corner/yellow/three_quarters{
- dir = 8
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FA" = (
-/obj/effect/floor_decal/corner/yellow{
- dir = 5
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = 31
},
-/obj/effect/decal/cleanable/blood/oil,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/aicore/deactivated,
+/obj/abstract/landmark/start/ai,
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"Ko" = (
+/obj/machinery/porta_turret{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FB" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"Kp" = (
+/obj/structure/table,
+/obj/item/aiModule/asimov,
+/obj/item/aiModule/corp,
+/obj/item/aiModule/dais,
+/obj/item/aiModule/paladin,
+/obj/item/aiModule/protectStation,
+/obj/item/aiModule/quarantine,
+/obj/item/aiModule/reset,
+/obj/item/aiModule/robocop,
+/obj/item/aiModule/safeguard,
+/obj/item/aiModule/tyrant,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Kq" = (
+/obj/machinery/light,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/effect/floor_decal/corner/yellow/three_quarters{
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Kr" = (
+/obj/machinery/computer/upload/ai{
dir = 1
},
-/obj/machinery/light_switch{
- pixel_y = 25
+/obj/machinery/flasher{
+ pixel_y = -32;
+ dir = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/wall,
-/area/ministation/engine)
-"FD" = (
-/obj/abstract/landmark/start{
- name = "Station Engineer"
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Ks" = (
+/obj/structure/cable,
+/obj/machinery/power/apc{
+ name = "_South APC";
+ pixel_y = -24
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FE" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_upload)
+"Kt" = (
+/obj/item/radio/intercom{
+ broadcasting = 1;
+ frequency = 1447;
+ listening = 0;
+ name = "Station Intercom (AI Private)";
+ pixel_y = -30;
+ dir = 1
},
-/obj/machinery/power/solar,
-/turf/simulated/floor/airless,
-/area/space)
-"FF" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/computer/upload/robot{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Ku" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Kv" = (
+/obj/structure/table,
+/obj/machinery/recharger,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_upload)
+"Kw" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
+/obj/structure/window/reinforced,
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "0-2"
},
-/turf/simulated/floor/plating,
-/area/space)
-"FG" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"Kx" = (
+/obj/machinery/door/window/southright,
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "1-2"
},
-/obj/machinery/power/solar,
-/turf/simulated/floor/airless,
-/area/space)
-"FH" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FI" = (
-/obj/structure/rack{
- dir = 8
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"Ky" = (
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/item/chems/spray/extinguisher{
- pixel_x = 8
+/obj/structure/window/reinforced,
+/obj/machinery/turretid{
+ name = "AI Chamber turret control";
+ pixel_x = 5;
+ pixel_y = 24
},
-/obj/item/clothing/gloves/thick,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FJ" = (
-/obj/machinery/port_gen/pacman,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FK" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+/obj/machinery/flasher{
+ pixel_x = -6;
+ pixel_y = 24
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FL" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/camera/motion/ministation,
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"Kz" = (
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
},
+/obj/machinery/conveyor{
+ id_tag = "trash_sort";
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"KA" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FN" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"FO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/computer/modular/preset/engineering{
dir = 4
},
-/obj/effect/floor_decal/corner/yellow{
- dir = 10
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"KB" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FP" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/machinery/door/airlock/glass/engineering,
-/obj/machinery/door/firedoor{
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"KC" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/obj/machinery/computer/modular/preset/security{
dir = 8
},
-/turf/simulated/floor,
-/area/ministation/engine)
-"FQ" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"KD" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FR" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KE" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/alarm{
+ pixel_y = 28
+ },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KH" = (
+/obj/structure/closet/lasertag/red,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"KJ" = (
/obj/structure/cable{
icon_state = "1-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/machinery/computer/modular/preset/medical{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FT" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/machinery/door/airlock/glass/engineering,
-/obj/machinery/door/firedoor{
- dir = 8
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"KK" = (
+/obj/machinery/alarm{
+ dir = 1;
+ pixel_y = -22
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor,
-/area/ministation/engine)
-"FU" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"KL" = (
+/obj/machinery/power/terminal,
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/obj/effect/floor_decal/corner/yellow{
- dir = 10
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"KM" = (
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
},
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FW" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"KO" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KP" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/structure/extinguisher_cabinet{
- pixel_x = 5;
- pixel_y = -32
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KQ" = (
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FY" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/camera/network/engineering{
- dir = 1
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"FZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ga" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KS" = (
/obj/structure/cable{
icon_state = "2-8"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KT" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KU" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KY" = (
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"KZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/wall,
+/area/ministation/ai_sat)
+"La" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/turf/simulated/wall,
+/area/ministation/ai_sat)
+"Lb" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/space)
-"Gb" = (
+"Lc" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gc" = (
-/obj/machinery/firealarm{
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ld" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_sat)
+"Le" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Lf" = (
+/obj/machinery/power/apc{
dir = 8;
+ name = "MiniSat Maint APC";
pixel_x = -24
},
-/obj/structure/closet/crate/bin/ministation,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gd" = (
-/obj/structure/rack{
- dir = 8
+/obj/structure/cable{
+ icon_state = "0-2"
},
-/obj/item/clothing/suit/storage/hazardvest,
-/obj/item/tank/emergency/oxygen/engi,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ge" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gf" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/area/ministation/ai_sat)
+"Lg" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/electrical{
+ pixel_x = -3;
+ pixel_y = 3
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/item/storage/toolbox/mechanical,
+/obj/item/multitool,
+/obj/machinery/status_display{
+ pixel_y = 32
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gg" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gh" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/area/ministation/ai_sat)
+"Lh" = (
+/obj/machinery/alarm{
+ pixel_y = 23
},
-/obj/machinery/power/solar,
-/turf/simulated/floor/plating,
-/area/space)
-"Gi" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gj" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
+/area/ministation/ai_sat)
+"Li" = (
+/obj/structure/cable,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "0-2"
},
-/obj/machinery/door/firedoor,
+/obj/machinery/power/smes/buildable/max_cap_in_out,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gk" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
+/area/ministation/ai_sat)
+"Lj" = (
+/obj/machinery/power/terminal{
+ dir = 8
},
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gl" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gm" = (
-/obj/structure/lattice,
-/turf/simulated/wall,
-/area/ministation/engine)
-"Gn" = (
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/machinery/power/smes/buildable/preset,
+/obj/machinery/camera/network/ministation/sat,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/area/ministation/ai_sat)
+"Lk" = (
+/obj/structure/rack,
+/obj/item/crowbar/red,
+/obj/item/wrench,
/obj/structure/cable{
icon_state = "4-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gq" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/area/ministation/ai_sat)
+"Ll" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 22;
+ dir = 8
},
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/yellow{
- dir = 6
+ icon_state = "2-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gr" = (
-/obj/effect/floor_decal/corner/yellow{
- dir = 9
+/area/ministation/ai_sat)
+"Lm" = (
+/obj/machinery/door/airlock,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gs" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ln" = (
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gt" = (
+/area/ministation/ai_sat)
+"Lo" = (
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gu" = (
+/area/ministation/ai_sat)
+"Lp" = (
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/obj/machinery/power/smes/buildable/preset,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gv" = (
-/obj/machinery/power/terminal{
- dir = 8
+/area/ministation/ai_sat)
+"Lq" = (
+/obj/structure/sign/department/cargo{
+ dir = 1;
+ pixel_y = -32
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+ icon_state = "4-8"
},
-/obj/structure/sign/warning/airlock{
- pixel_x = 32
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gw" = (
-/obj/structure/cable,
-/turf/simulated/floor/plating,
-/area/space)
-"Gx" = (
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+/area/ministation/hall/n)
+"Lr" = (
+/obj/machinery/atmospherics/binary/pump{
+ dir = 8
},
/obj/machinery/power/terminal{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Ls" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/blue{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"Lt" = (
+/obj/structure/window/reinforced/tinted{
+ dir = 4;
+ icon_state = "twindow"
+ },
+/obj/structure/hygiene/shower{
+ dir = 8
+ },
+/obj/structure/window/reinforced/tinted{
+ dir = 1
+ },
+/obj/item/soap,
+/obj/structure/curtain/open/shower,
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"Lu" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Lv" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/light/small{
+ dir = 8
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gy" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
+/area/ministation/ai_sat)
+"Lw" = (
+/obj/abstract/landmark{
+ name = "xeno_spawn";
+ pixel_x = -1
+ },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Gz" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/ai_sat)
+"Lx" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
},
-/obj/effect/floor_decal/corner/yellow{
- dir = 6
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"Ly" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"GA" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/area/ministation/ai_sat)
+"Lz" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"LA" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"GB" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/area/ministation/ai_sat)
+"LB" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"LC" = (
+/obj/structure/table,
+/obj/item/stack/material/pane/mapped/glass/fifty,
+/obj/item/stack/cable_coil/yellow,
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"LD" = (
+/obj/item/stool,
+/obj/item/radio,
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"LE" = (
+/obj/structure/bed,
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"LF" = (
+/obj/structure/table,
+/obj/machinery/recharger,
+/obj/item/stack/material/puck/mapped/uranium/ten,
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"LG" = (
+/obj/structure/cable,
+/obj/machinery/port_gen/pacman/super,
+/turf/simulated/floor/tiled,
+/area/ministation/ai_sat)
+"LJ" = (
+/obj/effect/shuttle_landmark/supply/station,
+/turf/space,
+/area/ministation/supply_dock)
+"LO" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"LP" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1;
+ icon_state = "warningcorner"
+ },
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"GC" = (
-/obj/machinery/door/airlock/external{
- autoset_access = 0;
- id_tag = "starboard_engineering_airlock_interior";
- locked = 1
+/area/ministation/hall/s1)
+"LS" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"LY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 8
},
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"LZ" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/button/access/interior{
- id_tag = "starboard_engineering_airlock";
- name = "interior access button";
- pixel_x = -10;
- pixel_y = 20
+/obj/machinery/door/airlock/double{
+ dir = 8
},
-/turf/simulated/floor,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ma" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 5
+ },
+/turf/simulated/floor/plating,
/area/ministation/engine)
-"GD" = (
-/obj/structure/cable{
- icon_state = "4-8"
+"Mc" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/camera/autoname{
+ dir = 8
},
-/obj/machinery/light/small{
- dir = 1
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Md" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/light{
+ dir = 8
},
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- id_tag = "starboard_engineering_vent";
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Mg" = (
+/obj/structure/window/reinforced{
dir = 8
},
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
+ },
+/obj/machinery/portable_atmospherics/canister/hydrogen,
+/obj/machinery/light{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/ministation/engine)
-"GF" = (
-/obj/machinery/door/airlock/external{
- locked = 1;
- id_tag = "starboard_engineering_airlock_exterior";
- autoset_access = 0
+"Mh" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/machinery/button/access/interior{
- id_tag = "starboard_engineering_airlock";
- name = "exterior access button";
- pixel_x = 10;
- pixel_y = 20;
- command = "cycle_exterior"
+/obj/machinery/conveyor{
+ id_tag = "CanisterStore"
+ },
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/light{
+ dir = 1
},
/turf/simulated/floor/plating,
/area/ministation/engine)
-"GH" = (
+"Mj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "4-8"
},
/turf/simulated/floor/plating,
-/area/space)
-"GI" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/area/ministation/ai_sat)
+"Ml" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200
+ },
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Mm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/camera/network/ministation/sat{
+ dir = 1
},
/turf/simulated/floor/plating,
-/area/space)
-"GJ" = (
+/area/ministation/ai_sat)
+"Mn" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/obj/structure/cable{
icon_state = "4-8"
},
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Mo" = (
+/obj/structure/closet/crate,
+/obj/item/stock_parts/circuitboard/smes,
+/obj/item/stock_parts/circuitboard/smes,
+/obj/item/stock_parts/smes_coil,
+/obj/item/stock_parts/smes_coil,
+/obj/item/stock_parts/smes_coil/super_capacity,
+/obj/item/stock_parts/smes_coil/super_capacity,
+/obj/item/stock_parts/smes_coil/super_io,
+/obj/item/stock_parts/smes_coil/super_io,
+/obj/item/stock_parts/smes_coil,
+/obj/item/stock_parts/smes_coil,
+/obj/item/stock_parts/smes_coil/super_capacity,
+/obj/item/stock_parts/smes_coil/super_capacity,
+/obj/item/stock_parts/smes_coil/super_io,
+/obj/item/stock_parts/smes_coil/super_io,
/turf/simulated/floor/plating,
-/area/space)
-"GL" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/engine)
+"Mq" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
},
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"GM" = (
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"Mv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/green,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Mx" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/status_display{
+ pixel_y = 32
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/space)
-"GN" = (
-/obj/structure/cable{
- icon_state = "1-8"
+"MB" = (
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/stool/padded,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"MC" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/space)
-"GO" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/machinery/light{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/machinery/light_switch{
+ pixel_y = 12;
+ dir = 8;
+ pixel_x = 24
},
-/turf/simulated/floor/plating,
-/area/space)
-"GP" = (
-/obj/machinery/power/tracker,
-/obj/structure/cable{
- icon_state = "0-8"
+/turf/simulated/floor/carpet/orange,
+/area/ministation/engine)
+"ME" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
+ dir = 10
},
-/turf/simulated/floor/plating,
-/area/space)
-"GQ" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/obj/structure/cable/cyan{
+ icon_state = "1-4"
},
-/obj/machinery/power/tracker,
/turf/simulated/floor/plating,
-/area/space)
-"GR" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/supermatter)
+"MF" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/space)
-"GS" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/stool/padded,
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
+"MI" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/space)
-"GT" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/atmospherics/pipe/simple/visible/cyan,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"MJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"MK" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 4
},
+/obj/machinery/portable_atmospherics/canister/air/airlock,
/turf/simulated/floor/plating,
-/area/space)
-"GV" = (
+/area/ministation/maint/l1ne)
+"MM" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/airlock/external/glass{
- id_tag = "port_engineering_airlock_interior";
- autoset_access = 0;
- locked = 1
- },
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/machinery/button/access/interior{
- id_tag = "port_engineering_airlock";
- name = "interior access button";
- pixel_x = 10;
- pixel_y = 20
+/obj/machinery/door/blast/regular/open{
+ id_tag = "smsafetydoor"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/ministation/engine)
-"GW" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "port_engineering_sensor";
- pixel_y = 20
- },
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- id_tag = "port_engineering_airlock";
- pixel_y = 24;
- tag_airpump = "port_engineering_vent";
- tag_chamber_sensor = "port_engineering_sensor";
- tag_exterior_door = "port_engineering_airlock_exterior";
- tag_interior_door = "port_engineering_airlock_interior"
+"MN" = (
+/obj/structure/closet/l3closet/janitor,
+/obj/item/grenade/chem_grenade/cleaner,
+/turf/simulated/floor/tiled,
+/area/ministation/janitor)
+"MR" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
+ dir = 9
},
/turf/simulated/floor/plating,
/area/ministation/engine)
-"GX" = (
+"MS" = (
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "1-4"
},
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "2-4"
},
/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
+ dir = 4
},
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"GY" = (
-/obj/machinery/power/solar_control{
+"MT" = (
+/obj/machinery/door/firedoor{
dir = 8
},
-/obj/structure/cable,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"GZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/abstract/landmark/start{
- name = "Robot"
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Ha" = (
-/obj/item/radio/intercom{
- canhear_range = 3;
- name = "Common Channel";
- pixel_x = 27;
- pixel_y = -3
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hb" = (
-/obj/effect/floor_decal/industrial/warning{
+/obj/effect/floor_decal/industrial/warning/fulltile,
+/obj/machinery/door/airlock/double/mining{
dir = 8
},
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hc" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hd" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"He" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
+/area/ministation/cargo)
+"MW" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastexterior"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
/turf/simulated/floor/plating,
-/area/space)
-"Hf" = (
-/obj/structure/cable,
-/obj/machinery/power/solar_control{
+/area/ministation/supermatter)
+"MX" = (
+/turf/simulated/wall,
+/area/ministation/trash)
+"MZ" = (
+/obj/machinery/door/airlock/atmos,
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Nc" = (
+/obj/effect/floor_decal/corner/red{
dir = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hg" = (
-/obj/structure/reagent_dispensers/fueltank,
-/obj/machinery/camera/network/engineering,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hh" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/machinery/camera/network/engineering,
-/turf/simulated/floor,
-/area/ministation/engine)
-"Hi" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hj" = (
-/obj/machinery/light/small,
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hk" = (
-/obj/structure/transit_tube{
- dir = 4;
- icon_state = "Block"
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"Ne" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hl" = (
-/obj/structure/transit_tube_pod{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/transit_tube/station{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hm" = (
-/obj/structure/transit_tube,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hn" = (
-/obj/structure/transit_tube,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Nh" = (
+/obj/structure/sign/directions/engineering{
+ pixel_x = -32;
+ pixel_y = -32
},
-/obj/structure/window/reinforced{
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/turf/space,
-/area/ministation/engine)
-"Ho" = (
-/obj/structure/transit_tube,
-/turf/space,
-/area/space)
-"Hp" = (
-/obj/structure/transit_tube{
- icon_state = "E-W-Pass"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
-/obj/structure/lattice,
-/turf/space,
-/area/space)
-"Hq" = (
-/obj/structure/transit_tube{
- icon_state = "W-SE"
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/space,
-/area/space)
-"Hr" = (
-/obj/structure/transit_tube{
- icon_state = "D-SW"
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4;
+ icon_state = "warningcorner"
},
-/turf/space,
-/area/space)
-"Hs" = (
/obj/machinery/light{
dir = 8;
icon_state = "tube1"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ht" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
- },
+/area/ministation/hall/s1)
+"Ni" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hu" = (
-/obj/machinery/alarm{
- pixel_y = 23
+/obj/machinery/atmospherics/portables_connector,
+/obj/machinery/portable_atmospherics/canister/air/airlock{
+ pixel_x = 1
},
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/steel_grid,
/area/ministation/engine)
-"Hv" = (
-/obj/machinery/door/firedoor{
+"Nq" = (
+/obj/effect/floor_decal/corner/beige{
+ dir = 6
+ },
+/obj/item/eftpos,
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hw" = (
-/obj/machinery/light{
- dir = 1
+/obj/machinery/alarm{
+ pixel_y = 22
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hx" = (
-/obj/effect/floor_decal/corner/yellow{
+/area/ministation/cargo)
+"Ns" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 5
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Hy" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Nu" = (
+/obj/abstract/landmark/start{
+ name = "Head Engineer"
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/bed/chair/office{
+ dir = 6
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/wood/yew,
/area/ministation/engine)
-"Hz" = (
-/obj/structure/transit_tube{
- icon_state = "D-NE"
+"Nw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/structure/lattice,
-/turf/space,
-/area/space)
-"HA" = (
-/obj/structure/transit_tube{
- icon_state = "S-NW"
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
},
-/obj/structure/lattice,
-/turf/space,
-/area/space)
-"HB" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "0-8"
},
-/obj/item/stool,
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"Nx" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HC" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/sign/warning/radioactive{
+ pixel_y = -34;
+ dir = 1;
+ pixel_x = 9
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HD" = (
-/obj/machinery/door/firedoor{
- dir = 8
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"NB" = (
+/obj/machinery/firealarm{
+ pixel_y = 21
},
-/obj/structure/cable{
+/obj/structure/cable/cyan{
icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HE" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/camera/network/engineering{
+ name = "SM North"
},
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"NH" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"NI" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/area/ministation/cargo)
+"NL" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "l1ne_airlock_exterior"
},
-/obj/item/stool,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/button/access/interior{
+ id_tag = "l1ne_airlock";
+ name = "exterior access button";
+ pixel_x = -20;
+ command = "cycle_exterior";
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/turf/simulated/floor/airless,
+/area/ministation/maint/l1ne)
+"NM" = (
+/obj/structure/cable{
+ icon_state = "1-4"
},
/obj/structure/cable{
icon_state = "1-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HH" = (
-/obj/structure/transit_tube{
- icon_state = "N-S"
- },
+/turf/simulated/floor/plating,
+/area/space)
+"NO" = (
+/obj/abstract/level_data_spawner/main_level,
/turf/space,
/area/space)
-"HI" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/circuitboard/airlock_electronics,
-/obj/item/stock_parts/circuitboard/airlock_electronics,
-/obj/item/scanner/gas,
-/turf/simulated/floor/tiled,
+"NQ" = (
+/turf/simulated/floor/plating,
/area/ministation/engine)
-"HJ" = (
-/obj/structure/table,
-/obj/item/folder/yellow,
-/obj/item/clothing/head/earmuffs,
-/obj/item/stack/material/rods/fifty,
+"NR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/sign/directions/supply{
+ dir = 1;
+ pixel_x = -32;
+ pixel_y = 32
+ },
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HK" = (
-/obj/machinery/atmospherics/portables_connector{
+/area/ministation/hall/n)
+"NS" = (
+/obj/machinery/door/airlock/atmos,
+/obj/machinery/atmospherics/pipe/simple/visible/cyan,
+/turf/simulated/floor/reinforced/airless,
+/area/ministation/supermatter)
+"NU" = (
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ dir = 1;
+ id_tag = "sat2_airlock";
+ pixel_y = -22;
+ tag_airpump = "sat2_vent";
+ tag_chamber_sensor = "sat2_sensor";
+ tag_exterior_door = "sat2_airlock_exterior";
+ tag_interior_door = "sat2_airlock_interior";
+ pixel_x = 8
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "sat2_vent"
+ },
+/obj/machinery/airlock_sensor{
+ id_tag = "sat2_sensor";
+ pixel_y = -18;
+ pixel_x = -8;
dir = 1
},
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HL" = (
-/obj/structure/cable,
-/obj/machinery/power/smes/buildable/preset,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HM" = (
-/obj/machinery/power/terminal{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "0-4"
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"NV" = (
+/obj/machinery/atmospherics/unary/vent_pump/engine{
+ dir = 4;
+ external_pressure_bound = 100;
+ external_pressure_bound_default = 0;
+ icon_state = "map_vent_in";
+ id_tag = "cooling_out";
+ initialize_directions = 1;
+ pump_direction = 0;
+ use_power = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ministation/supermatter)
+"NW" = (
+/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{
+ dir = 10
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HN" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/meter,
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 4
},
+/obj/structure/closet/secure_closet/atmos_personal,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"NX" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"NY" = (
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HO" = (
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/effect/floor_decal/corner/yellow{
+ dir = 6
},
-/obj/machinery/power/solar_control{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/black{
+ dir = 6
},
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"HP" = (
-/obj/structure/table,
-/obj/item/stack/material/pane/mapped/glass/fifty,
-/obj/item/stack/material/pane/mapped/rglass,
-/obj/item/stack/material/reinforced/mapped/fiberglass/fifty,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"HQ" = (
-/obj/structure/table,
-/obj/item/stack/material/sheet/mapped/steel/fifty,
-/obj/item/stack/material/shiny/mapped/aluminium/fifty,
-/turf/simulated/floor/tiled,
+"Oa" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
/area/ministation/engine)
-"HR" = (
-/obj/structure/table,
-/obj/item/stack/material/reinforced/mapped/plasteel,
-/turf/simulated/floor/tiled,
+"Oe" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan,
+/turf/simulated/floor/plating,
/area/ministation/engine)
-"HS" = (
-/obj/structure/transit_tube{
- icon_state = "N-S"
- },
-/obj/structure/lattice,
-/turf/space,
-/area/space)
-"HT" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
+"Of" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
},
/turf/simulated/floor/plating,
-/area/space)
-"HU" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/ai_sat)
+"Og" = (
+/obj/machinery/door/airlock/external{
+ locked = 1;
+ id_tag = "starboard_engineering_airlock_exterior";
+ autoset_access = 0
},
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- id_tag = "stern_engineering_airlock_interior";
- locked = 1
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/machinery/button/access/interior{
- id_tag = "stern_engineering_airlock";
- name = "interior access button";
- pixel_x = 20;
- pixel_y = 10
+ id_tag = "starboard_engineering_airlock";
+ name = "exterior access button";
+ pixel_y = 24;
+ command = "cycle_exterior"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 4
},
/turf/simulated/floor/plating,
/area/ministation/engine)
-"HV" = (
-/obj/structure/transit_tube{
- icon_state = "N-S-Pass"
+"Oh" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
},
-/turf/space,
-/area/space)
-"HW" = (
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Oi" = (
+/obj/machinery/light_switch{
+ pixel_y = 8;
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/status_display{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/supermatter)
+"Oj" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/airlock_sensor{
- id_tag = "stern_engineering_sensor";
- pixel_y = 10;
- pixel_x = -20
- },
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- id_tag = "stern_engineering_airlock";
- pixel_y = null;
- tag_airpump = "stern_engineering_vent";
- tag_chamber_sensor = "stern_engineering_sensor";
- tag_exterior_door = "stern_engineering_airlock_exterior";
- tag_interior_door = "stern_engineering_airlock_interior";
- dir = 4;
- pixel_x = -20
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,
+/turf/simulated/floor/plating,
+/area/space)
+"Om" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"HY" = (
+/area/ministation/ai_sat)
+"On" = (
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "0-4"
+ },
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/machinery/power/solar,
-/turf/simulated/floor/plating,
-/area/space)
-"HZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/light/small,
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Ia" = (
-/obj/structure/window/basic{
+/area/ministation/maint/l1central)
+"Oo" = (
+/obj/structure/fitness/weightlifter,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Or" = (
+/obj/machinery/light/small{
dir = 1
},
-/obj/structure/curtain/open/bed{
- icon_state = "closed";
- opacity = TRUE
+/obj/structure/cable{
+ icon_state = "2-8"
},
/turf/simulated/floor/plating,
-/area/ministation/disused_office)
-"Ib" = (
-/turf/simulated/wall,
-/area/ministation/disused_office)
-"Ic" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/area/ministation/ai_sat)
+"Ot" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Ov" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/n)
+"Ow" = (
+/obj/machinery/camera/network/mining{
+ dir = 1
+ },
+/turf/simulated/floor/airless,
+/area/space)
+"Oy" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/item/storage/firstaid/regular{
+ pixel_x = 6;
+ pixel_y = -5
+ },
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"Oz" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastexterior"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"OA" = (
+/obj/effect/decal/cleanable/blood/oil,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"OC" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Id" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
+/area/ministation/eva)
+"OF" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
+ },
+/obj/structure/sign/warning/vent_port{
+ dir = 1;
+ pixel_y = -34
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Ie" = (
-/obj/machinery/newscaster{
- pixel_x = -32
+/area/ministation/engine)
+"OG" = (
+/obj/machinery/power/apc{
+ name = "_South APC";
+ pixel_y = -24
},
-/obj/item/stool/padded,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/eva)
+"OH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/yellow/diagonal,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"OJ" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/green,
+/obj/machinery/atmospherics/pipe/simple/hidden/cyan{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"OK" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"If" = (
-/obj/structure/cable,
-/obj/machinery/power/solar,
+"ON" = (
+/obj/machinery/door/airlock/hatch/maintenance,
/turf/simulated/floor/plating,
-/area/space)
-"Ig" = (
-/obj/structure/lattice,
-/obj/structure/transit_tube{
- icon_state = "N-S-Pass"
+/area/ministation/hall/n)
+"OO" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "sat3_airlock_exterior"
},
-/turf/space,
-/area/space)
-"Ih" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Ij" = (
-/obj/machinery/atmospherics/unary/tank/air,
-/obj/machinery/atmospherics/portables_connector{
- dir = 8
+/obj/machinery/button/access/interior{
+ id_tag = "sat3_airlock";
+ name = "exterior access button";
+ pixel_y = 24;
+ command = "cycle_exterior"
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"Ik" = (
+"OQ" = (
+/obj/machinery/door/airlock/glass/command{
+ autoset_access = 0;
+ name = "Telecommunications relay airlock";
+ req_access = list("ACCESS_TELECOMS")
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"OR" = (
/obj/machinery/door/airlock/external/glass{
autoset_access = 0;
name = "External Airlock Hatch";
req_access = list("ACCESS_EXTERNAL");
locked = 1;
- id_tag = "sat2_airlock_interior"
+ id_tag = "mining_airlock_exterior"
},
/obj/machinery/button/access/interior{
- id_tag = "sat2_airlock";
- name = "interior access button";
- pixel_x = 10;
- pixel_y = 20
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
+ id_tag = "mining_airlock";
+ name = "exterior access button";
+ pixel_x = -20;
+ command = "cycle_exterior";
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Il" = (
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Im" = (
-/obj/machinery/light/small{
+/turf/simulated/floor/airless,
+/area/ministation/cargo)
+"OS" = (
+/obj/machinery/power/terminal{
dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"In" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
+/obj/machinery/emitter{
+ anchored = 1;
+ id_tag = "EngineEmitter";
+ state = 2
},
+/obj/structure/cable,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Io" = (
+/area/ministation/supermatter)
+"OT" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"OU" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/bed/chair/wood/maple{
- dir = 8
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/abstract/landmark/start{
- name = "Enclave Representative"
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"Ip" = (
-/obj/machinery/atmospherics/binary/pump/on{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"OV" = (
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/camera/network/ministation/sat,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Ir" = (
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Is" = (
+/area/space)
+"OW" = (
+/obj/structure/sign/directions/supply{
+ dir = 1;
+ pixel_x = -32;
+ pixel_y = 32
+ },
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"It" = (
-/obj/machinery/atmospherics/unary/outlet_injector{
- dir = 8
+/obj/effect/floor_decal/industrial/warning/corner{
+ icon_state = "warningcorner"
},
-/turf/simulated/floor/airless,
-/area/space)
-"Iu" = (
-/obj/machinery/light/small{
- dir = 4
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Iv" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"OX" = (
+/obj/machinery/door/airlock/external{
+ autoset_access = 0;
+ id_tag = "atmos_airlock_interior";
+ locked = 1
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
-"Iw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/button/access/interior{
+ id_tag = "atmos_airlock";
+ name = "interior access button";
+ pixel_x = 20;
+ dir = 8
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
-"Ix" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"OY" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"OZ" = (
+/obj/effect/wallframe_spawn/reinforced_borosilicate,
+/obj/machinery/door/blast/regular/open{
+ dir = 2;
+ id_tag = "SupermatterPort";
+ name = "Reactor Blast Door"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/yellow{
dir = 4
},
-/obj/machinery/door/airlock,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Iy" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/area/ministation/supermatter)
+"Pa" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/hall/s1)
+"Pb" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
dir = 1
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
-"Iz" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
-"IB" = (
-/obj/machinery/alarm{
- pixel_y = 23
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"IC" = (
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"ID" = (
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IE" = (
-/obj/machinery/recharge_station,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
-"IG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/area/ministation/supermatter)
+"Pc" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"IH" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden,
+"Pe" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"II" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IJ" = (
-/obj/machinery/alarm{
- pixel_y = 28
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IK" = (
-/obj/item/stool,
+"Pg" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"IL" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/random/maintenance,
-/obj/structure/rack,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IN" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ph" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
},
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"Pi" = (
+/obj/machinery/drone_fabricator/maintenance,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IO" = (
-/obj/effect/floor_decal/industrial/warning{
+/area/ministation/engine)
+"Pl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/structure/sign/warning/airlock{
+ pixel_x = 32;
dir = 8
},
-/obj/machinery/embedded_controller/radio/airlock/docking_port{
- dir = 4;
- id_tag = "cargo_bay";
- tag_airpump = "cargo_vent";
- tag_chamber_sensor = "cargo_sensor";
- tag_exterior_door = "cargo_airlock_exterior";
- tag_interior_door = "cargo_airlock_interior";
- pixel_x = -20
- },
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"IQ" = (
+"Pm" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "0-2"
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IS" = (
+/obj/machinery/power/smes/buildable/max_cap_in_out{
+ capacity = 5e+009;
+ charge = 5e+009
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/smcontrol)
+"Po" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/holofloor/lino,
-/area/ministation/telecomms)
-"IV" = (
-/obj/machinery/door/airlock/glass/command,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"IW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/area/ministation/hall/n)
+"Pp" = (
+/turf/space,
+/area/ministation/supply_dock)
+"Pr" = (
+/obj/item/mollusc/barnacle{
+ pixel_x = -13;
+ pixel_y = -14
},
+/turf/space,
+/area/space)
+"Ps" = (
+/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"IY" = (
+/area/ministation/smcontrol)
+"Py" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/computer/modular/preset/cardslot/command{
- dir = 8
+/obj/effect/floor_decal/corner/yellow{
+ dir = 9
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"IZ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Pz" = (
+/obj/machinery/atmospherics/unary/heat_exchanger,
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"PC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Jc" = (
-/obj/effect/decal/cleanable/blood/oil,
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"PD" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/atmospherics)
+"PF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/random/trash,
/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Jd" = (
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- dir = 0;
- id_tag = "sat3_airlock";
- pixel_y = 24;
- tag_airpump = "sat3_vent";
- tag_chamber_sensor = "sat3_sensor";
- tag_exterior_door = "sat3_airlock_exterior";
- tag_interior_door = "sat3_airlock_interior"
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "sat3_vent"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "sat3_sensor";
- pixel_y = 20
+"PH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Je" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/alarm{
- pixel_y = 23
+/area/ministation/maint/westatmos)
+"PI" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 9
},
+/obj/machinery/atmospherics/pipe/simple/visible/cyan,
/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
- dir = 4
+ dir = 4;
+ name = "Air to Ports"
},
-/turf/simulated/floor/plating,
-/area/ministation/cafe)
-"Jf" = (
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"PK" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Jg" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"Jh" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"Ji" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"Jk" = (
-/obj/item/clothing/under/librarian,
-/obj/structure/closet,
-/obj/item/multitool,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Jm" = (
-/obj/structure/table,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
-/obj/machinery/light/small{
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"PM" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/black{
dir = 8
},
-/obj/machinery/button/alternate/door/bolts{
- name = "AI core door bolts"
- },
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"Jn" = (
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"Jo" = (
-/obj/structure/table,
-/obj/item/folder/blue,
-/obj/machinery/camera/motion/ministation,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Jp" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/meter{
+ id_tag = "wloop_atm_meter"
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Jq" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/obj/item/pen{
- pixel_x = 4;
- pixel_y = 4
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"PN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"PO" = (
+/obj/machinery/camera/autoname{
+ dir = 8
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Jr" = (
-/obj/structure/table,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
+/obj/structure/disposalpipe/trunk{
dir = 1
},
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/item/aicard,
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"Js" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_upload)
-"Jt" = (
-/turf/simulated/floor/plating,
-/area/space)
-"Ju" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Jv" = (
-/obj/machinery/light/small,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Jw" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/disposal,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"PQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Jx" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"PW" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Jy" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"PZ" = (
+/obj/machinery/door/airlock/atmos,
/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Jz" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+ icon_state = "4-8"
},
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"JA" = (
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"JB" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"JC" = (
-/obj/machinery/porta_turret{
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
dir = 4
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"JD" = (
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"JE" = (
-/obj/machinery/porta_turret{
- dir = 8
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Qa" = (
+/obj/machinery/door/blast/regular/open{
+ id_tag = "smsafetydoor"
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"JF" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Qe" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"JG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+"Qg" = (
+/obj/machinery/alarm{
+ pixel_y = 23
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"JH" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/smcontrol)
+"Qh" = (
+/obj/structure/table/gamblingtable,
+/obj/item/flashlight/lamp/green,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/hall/s1)
+"Qj" = (
+/obj/machinery/atmospherics/binary/circulator{
+ anchored = 1;
+ dir = 8
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"JI" = (
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Qk" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"JJ" = (
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"JK" = (
-/obj/machinery/flasher{
- pixel_y = -21
- },
-/obj/machinery/ai_slipper{
- uses = 10
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
},
-/obj/machinery/light,
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"JL" = (
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -23
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"JM" = (
-/obj/machinery/hologram/holopad,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "2-4"
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"JN" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_upload)
-"JO" = (
-/obj/structure/cable,
-/obj/machinery/power/tracker,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"Ql" = (
+/obj/machinery/atmospherics/binary/pump,
/turf/simulated/floor/plating,
-/area/space)
-"JP" = (
-/obj/structure/transit_tube{
- icon_state = "N-SE"
+/area/ministation/engine)
+"Qn" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"Qo" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/lattice,
-/turf/space,
-/area/space)
-"JQ" = (
-/obj/structure/transit_tube{
- icon_state = "D-SW"
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
},
-/obj/structure/lattice,
-/turf/space,
-/area/space)
-"JR" = (
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"JS" = (
-/obj/machinery/door/firedoor{
- dir = 8
+/area/ministation/engine)
+"Qq" = (
+/obj/structure/closet/crate/bin/ministation,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Qt" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
},
-/obj/effect/floor_decal/industrial/warning{
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"JT" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+/area/ministation/hall/n)
+"Qv" = (
+/obj/machinery/power/supermatter,
+/obj/machinery/mass_driver{
+ id_tag = "eject"
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"JU" = (
-/turf/simulated/wall,
-/area/ministation/ai_core)
-"JV" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ministation/supermatter)
+"Qw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"JW" = (
-/obj/structure/table,
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
},
-/obj/item/stock_parts/circuitboard/aiupload,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"JX" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"JY" = (
-/obj/structure/table,
-/obj/machinery/light{
- dir = 4
+ icon_state = "4-8"
},
-/obj/item/stock_parts/circuitboard/borgupload,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"JZ" = (
-/turf/simulated/wall,
-/area/ministation/detective)
-"Ka" = (
-/obj/structure/transit_tube{
- icon_state = "D-NE"
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Qz" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 8
},
-/turf/space,
-/area/space)
-"Kb" = (
-/obj/structure/transit_tube{
- icon_state = "E-NW"
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"QA" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green,
+/obj/machinery/meter,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"QC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/space,
-/area/space)
-"Kc" = (
-/obj/structure/lattice,
-/obj/structure/transit_tube{
- icon_state = "E-W-Pass"
+/obj/structure/sign/warning/vent_port{
+ dir = 1;
+ pixel_y = -34
},
-/turf/space,
-/area/space)
-"Kd" = (
-/obj/structure/transit_tube,
-/obj/structure/lattice,
-/turf/space,
-/area/space)
-"Ke" = (
-/obj/structure/transit_tube,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"QE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
},
-/obj/structure/window/reinforced{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/window/reinforced{
- dir = 8
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/turf/space,
-/area/ministation/ai_sat)
-"Kf" = (
-/obj/structure/transit_tube,
+/obj/machinery/hologram/holopad,
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Kg" = (
-/obj/structure/transit_tube/station{
- dir = 1
- },
+/area/ministation/smcontrol)
+"QG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Kh" = (
-/obj/structure/transit_tube{
- dir = 8;
- icon_state = "Block"
+/area/ministation/hall/s1)
+"QH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
},
-/obj/machinery/door/firedoor{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"QM" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 9
},
/obj/effect/floor_decal/industrial/warning{
- dir = 4
+ dir = 4;
+ icon_state = "warning"
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Ki" = (
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"QN" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
+ dir = 1;
level = 2
},
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"QP" = (
+/obj/machinery/door/airlock/command,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Kj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/area/ministation/eva)
+"QR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"Kk" = (
-/obj/machinery/porta_turret{
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"QS" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Kl" = (
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"QV" = (
+/obj/structure/lattice,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/space,
+/area/space)
+"QW" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging,
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/bluegrid,
+/turf/space,
+/area/space)
+"QY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/wall/r_wall,
/area/ministation/ai_core)
-"Km" = (
-/obj/machinery/ai_slipper{
- uses = 10
+"Ra" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/bluegrid,
+/turf/simulated/wall/r_wall,
/area/ministation/ai_core)
-"Kn" = (
-/obj/item/radio/intercom{
- name = "Common Channel";
- pixel_x = -27;
- pixel_y = 5
- },
-/obj/item/radio/intercom{
- listening = 0;
- name = "Custom Channel";
- pixel_y = 27
+"Rb" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
},
-/obj/item/radio/intercom{
- frequency = 1447;
- name = "Private Channel";
- pixel_x = 27;
- pixel_y = 5
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
},
-/obj/abstract/landmark/start{
- name = "AI"
+/turf/simulated/floor/plating,
+/area/ministation/janitor)
+"Rc" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 5
},
-/obj/machinery/network/requests_console{
- department = "AI";
- pixel_x = 32;
- pixel_y = 32
+/turf/simulated/floor/plating,
+/area/space)
+"Re" = (
+/obj/machinery/light_switch{
+ pixel_y = 25
},
-/obj/machinery/newscaster{
- pixel_x = -32;
- pixel_y = 32
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Rf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+ icon_state = "4-8"
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"Ko" = (
-/obj/machinery/porta_turret{
- dir = 8
+/obj/structure/sign/department/eva{
+ pixel_y = 30
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Kp" = (
-/obj/structure/table,
-/obj/item/aiModule/asimov,
-/obj/item/aiModule/corp,
-/obj/item/aiModule/dais,
-/obj/item/aiModule/paladin,
-/obj/item/aiModule/protectStation,
-/obj/item/aiModule/quarantine,
-/obj/item/aiModule/reset,
-/obj/item/aiModule/robocop,
-/obj/item/aiModule/safeguard,
-/obj/item/aiModule/tyrant,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Kq" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Kr" = (
-/obj/machinery/computer/upload/ai{
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/machinery/flasher{
- pixel_y = -20
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Rg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Ks" = (
-/obj/structure/cable,
-/obj/machinery/power/apc{
- areastring = null;
- name = "_South APC";
- pixel_y = -24
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -22
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_upload)
-"Kt" = (
-/obj/item/radio/intercom{
- broadcasting = 1;
- frequency = 1447;
- listening = 0;
- name = "Station Intercom (AI Private)";
- pixel_y = -29
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"Rh" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "cargo_vent"
},
-/obj/machinery/computer/upload/robot{
+/obj/machinery/airlock_sensor{
+ id_tag = "cargo2_sensor";
+ pixel_y = -20;
dir = 1
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Ku" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Kv" = (
-/obj/structure/table,
-/obj/machinery/recharger,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_upload)
-"Kw" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-2"
+/turf/simulated/floor/plating,
+/area/ministation/cargo)
+"Rj" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/effect/decal/cleanable/blood/oil,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
},
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
+/obj/structure/rack{
+ dir = 8
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"Kx" = (
-/obj/machinery/door/window/southright,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/item/tank/jetpack/carbondioxide,
+/obj/item/tank/jetpack/carbondioxide,
+/obj/item/clothing/shoes/magboots,
+/obj/item/clothing/shoes/magboots,
+/obj/machinery/status_display{
+ pixel_y = -32;
+ dir = 1
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"Ky" = (
-/obj/structure/window/reinforced{
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"Rm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/machinery/mining/brace,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"Ro" = (
+/obj/structure/fitness/weightlifter,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Rp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/structure/window/reinforced,
-/obj/machinery/turretid{
- name = "AI Chamber turret control";
- pixel_x = 5;
- pixel_y = 24
- },
-/obj/machinery/flasher{
- pixel_x = -6;
- pixel_y = 24
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Rq" = (
+/obj/structure/table,
+/obj/item/stack/package_wrap,
+/obj/item/destTagger{
+ pixel_x = 4;
+ pixel_y = 3
},
-/obj/machinery/camera/motion/ministation,
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"Kz" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_upload)
-"KA" = (
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"Rr" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Rs" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Rt" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/computer/modular/preset/engineering{
- dir = 4
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Ru" = (
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/simulated/floor/tiled/techmaint,
+/turf/simulated/wall/r_wall,
/area/ministation/ai_core)
-"KB" = (
+"Rv" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Rw" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 6
},
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"KC" = (
-/obj/machinery/light{
+/obj/machinery/atmospherics/valve/open,
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"Rz" = (
+/obj/machinery/atmospherics/valve/digital{
dir = 4;
- icon_state = "tube1"
+ name = "Emergency Cooling Valve 1"
},
-/obj/machinery/computer/modular/preset/security{
- dir = 8
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"RB" = (
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"KD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KE" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/structure/closet/secure_closet{
+ req_access = list("ACCESS_MEDICAL_EQUIP");
+ closet_appearance = /decl/closet_appearance/secure_closet/medical/alt;
+ name = "Doctor locker"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"RC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"KG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+"RD" = (
+/obj/structure/curtain/open/bed,
+/obj/structure/bed/padded,
+/obj/item/bedsheet/ce,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"RE" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "l1ne_sensor";
+ pixel_y = 4;
+ pixel_x = -20;
dir = 4
},
-/obj/machinery/alarm{
- pixel_y = 28
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "l1ne_airlock";
+ pixel_y = -4;
+ tag_airpump = "l1ne_vent";
+ tag_chamber_sensor = "l1ne_sensor";
+ tag_exterior_door = "l1ne_airlock_exterior";
+ tag_interior_door = "l1ne_airlock_interior";
+ dir = 4;
+ pixel_x = -20
},
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KI" = (
+/area/ministation/maint/l1ne)
+"RF" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
},
+/turf/simulated/floor/plating,
+/area/space)
+"RH" = (
+/obj/machinery/material_processing/stacker,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"KJ" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/area/ministation/trash)
+"RM" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 8
},
-/obj/machinery/computer/modular/preset/medical{
- dir = 4
+/obj/machinery/portable_atmospherics/canister/air/airlock{
+ pixel_x = 1
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"KK" = (
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"RN" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"RO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
},
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"RP" = (
+/obj/random/trash,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"KL" = (
-/obj/machinery/power/terminal,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"KM" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"RR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/window/reinforced{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
},
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"KN" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/window/reinforced{
+ dir = 8
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"KO" = (
-/obj/machinery/light/small{
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"RU" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/structure/closet/emcloset,
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"RW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"KP" = (
-/obj/structure/cable{
- icon_state = "4-8"
+"RX" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"RY" = (
+/mob/living/simple_animal/hostile/retaliate/parrot/Poly,
+/obj/structure/table/reinforced,
+/obj/item/chems/drinks/glass2/coffeecup/one,
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"Sa" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 1
},
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KQ" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/maint/l1ne)
+"Sb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"Se" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KR" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KS" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/effect/floor_decal/corner/yellow{
+ dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Sf" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
},
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Sg" = (
+/obj/structure/closet/crate/solar,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KT" = (
+/area/ministation/engine)
+"Sj" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KU" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"KV" = (
-/obj/machinery/status_display,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"KW" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"KX" = (
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "4-8"
},
-/obj/machinery/power/smes/buildable/max_cap_in_out,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"KY" = (
-/obj/machinery/ai_status_display,
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"KZ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/wall,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Sk" = (
+/obj/machinery/camera/network/ministation/sat,
+/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"La" = (
-/obj/structure/cable{
- icon_state = "1-2"
+"Sm" = (
+/obj/structure/table,
+/obj/item/multitool{
+ pixel_x = 5
},
-/turf/simulated/wall,
-/area/ministation/ai_sat)
-"Lb" = (
-/obj/structure/lattice,
-/turf/space,
-/area/ministation/ai_sat)
-"Lc" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"So" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Sp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"Ld" = (
+"Sq" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_sat)
-"Le" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"Sr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Ss" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"Su" = (
+/turf/simulated/floor/beach/water/ocean,
+/area/ministation/dorms)
+"Sv" = (
+/obj/machinery/light{
+ dir = 4
+ },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Lf" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Sw" = (
+/obj/structure/cable,
/obj/machinery/power/apc{
- dir = 8;
- name = "MiniSat Maint APC";
- pixel_x = -24
+ name = "SM APC";
+ pixel_x = -27;
+ pixel_y = null;
+ dir = 8
},
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "1-2"
},
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lg" = (
-/obj/structure/rack,
-/obj/item/storage/toolbox/electrical{
- pixel_x = -3;
- pixel_y = 3
+/area/ministation/smcontrol)
+"SB" = (
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineVent"
},
-/obj/item/storage/toolbox/mechanical,
-/obj/item/multitool,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lh" = (
-/obj/machinery/alarm{
- pixel_y = 23
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"SD" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Li" = (
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "0-2"
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/black{
+ dir = 10
},
-/obj/machinery/power/smes/buildable/max_cap_in_out,
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lj" = (
-/obj/machinery/power/terminal{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "0-4"
+/area/ministation/engine)
+"SE" = (
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
-/obj/machinery/camera/network/ministation/sat,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lk" = (
-/obj/structure/rack,
-/obj/item/crowbar/red,
-/obj/item/wrench,
+/obj/machinery/camera/autoname,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"SF" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Ll" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = 28
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/obj/structure/sign/warning/vent_port{
+ dir = 1;
+ pixel_y = -34
},
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lm" = (
-/obj/machinery/door/airlock,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/area/ministation/engine)
+"SI" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 8
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"Ln" = (
-/obj/structure/cable{
- icon_state = "1-4"
+"SJ" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled,
+/area/ministation/smcontrol)
+"SM" = (
+/obj/machinery/light_switch{
+ pixel_y = 26;
+ dir = 4;
+ pixel_x = -23
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lo" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lp" = (
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+/obj/structure/bed/chair/office,
+/turf/simulated/floor/tiled,
+/area/ministation/smcontrol)
+"SO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
},
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lq" = (
-/obj/structure/sign/department/cargo{
- dir = 1;
- pixel_y = -32
+/area/ministation/cargo)
+"SQ" = (
+/obj/machinery/alarm{
+ pixel_y = 23
},
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"SR" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+ dir = 5
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Ls" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
+/area/ministation/cargo)
+"ST" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"Lt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Lu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/area/ministation/engine)
+"SU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"Lv" = (
+"SV" = (
/obj/machinery/alarm{
- dir = 4;
- pixel_x = -23
+ dir = 8;
+ pixel_x = 24
},
/obj/machinery/light/small{
- dir = 8
+ dir = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lw" = (
-/obj/abstract/landmark{
- name = "xeno_spawn";
- pixel_x = -1
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"SW" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lx" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
+/obj/machinery/camera/network/engineering,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"SZ" = (
+/obj/machinery/light/small{
+ dir = 1
},
-/turf/simulated/floor/tiled,
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/obj/machinery/atmospherics/portables_connector,
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Tb" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l1central)
+"Td" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"Ly" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
+"Tg" = (
+/obj/structure/cable{
+ icon_state = "2-4"
},
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"Lz" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/area/ministation/engine)
+"Ti" = (
+/obj/structure/filing_cabinet,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"Tj" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
},
/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LA" = (
+/area/ministation/engine)
+"Tl" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = 32
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ id_tag = "stern_engineering_airlock_interior";
+ locked = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LB" = (
-/obj/machinery/recharge_station,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LC" = (
-/obj/structure/table,
-/obj/item/stack/material/pane/mapped/glass/fifty,
-/obj/item/stack/cable_coil/yellow,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LD" = (
-/obj/item/stool,
-/obj/item/radio,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LE" = (
-/obj/structure/bed,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Tp" = (
/obj/structure/table,
-/obj/machinery/recharger,
-/obj/item/stack/material/puck/mapped/uranium/ten,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LG" = (
-/obj/machinery/port_gen/pacman,
-/obj/structure/cable,
-/turf/simulated/floor/tiled,
-/area/ministation/ai_sat)
-"LI" = (
-/obj/machinery/light{
- dir = 1
+/obj/item/stack/material/cardstock/mapped/cardboard/fifty,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
},
+/obj/item/stack/material/pane/mapped/glass/ten,
+/obj/item/stack/material/sheet/mapped/steel/ten,
+/obj/item/stack/material/shiny/mapped/aluminium/ten,
+/obj/machinery/camera/network/mining,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"LJ" = (
-/obj/effect/shuttle_landmark/supply/station,
-/turf/space,
-/area/ministation/supply_dock)
-"LL" = (
+/area/ministation/cargo)
+"Tt" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LM" = (
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"LP" = (
-/obj/effect/floor_decal/corner/purple{
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "starboard_engineering_airlock";
+ pixel_y = 24;
+ tag_airpump = "starboard_engineering_vent";
+ tag_chamber_sensor = "starboard_engineering_sensor";
+ tag_exterior_door = "starboard_engineering_airlock_exterior";
+ tag_interior_door = "starboard_engineering_airlock_interior"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LQ" = (
-/obj/machinery/camera/autoname{
- dir = 4
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Tu" = (
+/obj/structure/disposalpipe/junction{
+ dir = 8
},
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Tv" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 1;
+ id_tag = "atmos_vent"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/airlock_sensor{
+ id_tag = "atmos_sensor";
+ pixel_y = 4;
+ pixel_x = -20;
dir = 4
},
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "atmos_airlock";
+ tag_airpump = "atmos_vent";
+ tag_chamber_sensor = "atmos_sensor";
+ tag_exterior_door = "atmos_airlock_exterior";
+ tag_interior_door = "atmos_airlock_interior";
+ dir = 4;
+ pixel_x = -20;
+ pixel_y = -4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Tw" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LT" = (
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Tx" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
dir = 4
},
-/obj/structure/sign/department/forensics{
- pixel_y = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LU" = (
-/obj/random/trash,
/turf/simulated/floor/plating,
-/area/ministation/disused)
-"LV" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "1-8"
+/area/space)
+"Ty" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 4
},
/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LX" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled/freezer{
- name = "kitchen freezer floor";
- temperature = 263
- },
-/area/ministation/cafe)
-"LY" = (
-/obj/effect/floor_decal/corner/purple{
- dir = 6
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Tz" = (
+/obj/machinery/camera/network/engineering{
+ dir = 1;
+ name = "Tank Storage"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"LZ" = (
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"TA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Ma" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Mb" = (
-/obj/effect/floor_decal/corner/purple{
- dir = 6
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"TB" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
},
-/obj/structure/sign/department/science_2{
- pixel_x = 31
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"TC" = (
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Mc" = (
-/obj/machinery/light{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Md" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/light{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Me" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/light{
+/obj/structure/disposalpipe/junction/mirrored{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Mf" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/light{
- dir = 8
+ icon_state = "4-8"
},
-/obj/structure/closet/crate/bin/ministation,
/turf/simulated/floor/tiled,
/area/ministation/hall/n)
-"Mg" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
+"TH" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s1)
+"TJ" = (
+/obj/machinery/disposal/deliveryChute{
+ dir = 8;
+ name = "disposals ejection chute"
},
-/obj/machinery/portable_atmospherics/canister/hydrogen,
-/obj/machinery/light{
+/obj/structure/disposalpipe/trunk{
dir = 1
},
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"Mh" = (
-/obj/structure/window/reinforced{
+/area/ministation/trash)
+"TK" = (
+/obj/structure/rack{
dir = 8
},
-/obj/structure/window/reinforced{
+/obj/item/clothing/suit/storage/hazardvest,
+/obj/item/tank/emergency/oxygen/engi,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"TL" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black{
dir = 4
},
-/obj/machinery/conveyor{
- id_tag = "CanisterStore"
- },
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
-/obj/machinery/light{
- dir = 1
+/obj/machinery/door/blast/regular/open{
+ id_tag = "smsafetydoor"
},
/turf/simulated/floor/plating,
-/area/ministation/engine)
-"Mi" = (
-/obj/machinery/portable_atmospherics/hydroponics,
-/obj/effect/floor_decal/corner/green/full,
-/obj/machinery/light{
- dir = 8
+/area/ministation/supermatter)
+"TM" = (
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"Mj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Mk" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
+/area/space)
+"TO" = (
/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"Ml" = (
/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200
+ target_pressure = 200;
+ dir = 4
},
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Mm" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Mn" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/engine)
+"TP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/newscaster{
+ pixel_x = 32;
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"TR" = (
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/random/trash,
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Mq" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+/area/ministation/maint/l1central)
+"TT" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/black{
+ dir = 5
},
/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Ms" = (
-/obj/item/radio/intercom{
- dir = 8;
- pixel_x = 20
+/area/ministation/engine)
+"TX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/structure/table/woodentable_reinforced/walnut,
-/obj/item/folder,
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/carpet/red,
-/area/ministation/court)
-"Mt" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"TY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/simulated/floor/airless,
-/area/space)
-"Mw" = (
-/obj/machinery/cryopod{
- dir = 1
+ icon_state = "1-8"
},
-/obj/abstract/landmark/latejoin/cryo,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"Mx" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"MA" = (
-/obj/structure/closet/secure_closet/courtroom,
/turf/simulated/floor/tiled,
-/area/ministation/court)
-"MB" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/light{
- dir = 4
+/area/ministation/engine)
+"TZ" = (
+/obj/structure/sign/warning/vent_port{
+ pixel_y = 28
},
+/turf/space,
+/area/space)
+"Ua" = (
+/obj/structure/table/woodentable,
+/obj/item/clothing/mask/snorkel,
+/obj/item/clothing/mask/snorkel,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"Uc" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/portables_connector,
+/obj/machinery/portable_atmospherics/canister/air/airlock,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"MC" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
+/area/ministation/engine)
+"Ue" = (
+/obj/structure/table/gamblingtable,
+/obj/machinery/chemical_dispenser/bar_alc/full,
+/turf/simulated/floor/wood/yew,
+/area/ministation/engine)
+"Ug" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"MD" = (
-/obj/item/stool/padded,
-/obj/structure/sign/warning/nosmoking_2{
- pixel_y = 32
+/obj/machinery/meter,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
},
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"MF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 10
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Uh" = (
+/obj/machinery/atmospherics/pipe/simple/visible/black,
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Ui" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ministation/supermatter)
+"Uj" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"MG" = (
-/obj/structure/bed/chair,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
+/area/ministation/supermatter)
+"Ul" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-2"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"MH" = (
-/obj/structure/table,
-/obj/item/implantcase/tracking,
-/obj/item/implantcase/chem,
-/obj/item/implanter,
-/obj/machinery/light{
+/area/ministation/engine)
+"Um" = (
+/obj/random/trash,
+/obj/machinery/atmospherics/pipe/manifold/hidden{
dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/security)
-"MI" = (
-/obj/abstract/landmark/latejoin/cyborg,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"MJ" = (
-/obj/structure/bed,
-/obj/item/bedsheet/purple,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"MK" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden{
- dir = 4
+/area/ministation/engine)
+"Ur" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
},
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"MM" = (
-/obj/machinery/door/firedoor{
+/obj/machinery/atmospherics/pipe/manifold/visible/black{
dir = 8
},
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Uu" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"MN" = (
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"MO" = (
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"MP" = (
-/obj/machinery/light_switch{
- dir = 8;
- pixel_x = 32
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"MQ" = (
-/obj/structure/closet,
-/obj/item/gun/launcher/crossbow,
-/obj/item/arrow,
-/obj/item/arrow,
-/obj/item/cell/crap,
-/obj/item/storage/briefcase,
-/obj/machinery/firealarm{
+/area/space)
+"Ux" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4;
- pixel_x = 24
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+ level = 2
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
},
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"MT" = (
-/obj/machinery/door/firedoor{
- dir = 8
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"UA" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"UC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"UG" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/obj/machinery/door/airlock/double/glass/mining,
+/obj/machinery/suit_cycler/ministation,
/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"MU" = (
-/obj/structure/table/woodentable,
-/obj/item/storage/pill_bottle/dice,
+/area/ministation/eva)
+"UI" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"UJ" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"MV" = (
+/area/ministation/supermatter)
+"UK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+ dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/light{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"MY" = (
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"UO" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+ icon_state = "1-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Na" = (
-/obj/effect/floor_decal/corner/blue{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
},
-/obj/machinery/light_switch{
- dir = 4;
- pixel_x = -23
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"US" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -21
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/green,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"UT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 1
},
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"Nc" = (
-/obj/machinery/light{
+/area/ministation/engine)
+"UU" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green{
dir = 4
},
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Ne" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/cyan{
- dir = 6
- },
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Nh" = (
-/obj/structure/sign/directions/engineering{
- pixel_x = -32;
- pixel_y = -32
+/area/ministation/engine)
+"UV" = (
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "mining_airlock";
+ pixel_y = -4;
+ tag_airpump = "mining_vent";
+ tag_chamber_sensor = "mining_sensor";
+ tag_exterior_door = "mining_airlock_exterior";
+ tag_interior_door = "mining_airlock_interior";
+ dir = 4;
+ pixel_x = -20
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+/obj/machinery/airlock_sensor{
+ id_tag = "mining_sensor";
+ pixel_y = 10;
+ pixel_x = -20;
+ dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Ni" = (
+/turf/simulated/floor/plating,
+/area/ministation/cargo)
+"UX" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/portables_connector,
-/obj/machinery/portable_atmospherics/canister/air/airlock{
- pixel_x = 1
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging,
+/turf/simulated/floor/plating,
+/area/space)
+"UY" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging,
+/turf/simulated/floor/plating,
+/area/space)
+"Vb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Nj" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/firealarm{
+ pixel_y = 24
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Vc" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"Ve" = (
+/obj/abstract/landmark/start{
+ name = "Station Engineer"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"No" = (
+/area/ministation/engine)
+"Vf" = (
+/obj/structure/curtain/open/bed,
+/obj/structure/bed/padded,
+/obj/item/bedsheet/ce,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Vj" = (
/obj/machinery/light{
- dir = 8
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/camera/network/security{
- dir = 4
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"Vk" = (
+/obj/structure/lattice,
+/obj/structure/transit_tube{
+ icon_state = "N-S-Pass"
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"Np" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/turf/space,
+/area/space)
+"Vl" = (
+/obj/structure/closet,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Vm" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Ns" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5
+/obj/machinery/camera/network/engineering{
+ dir = 8;
+ name = "SM Command"
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Nt" = (
-/obj/structure/flora/pottedplant/smalltree,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Nu" = (
-/obj/machinery/airlock_sensor{
- id_tag = "escape2_sensor";
- pixel_y = -20
+/area/ministation/smcontrol)
+"Vq" = (
+/obj/machinery/merchant_pad,
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
},
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "escape1_vent"
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
-/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"Nv" = (
-/obj/machinery/door/airlock/glass,
-/obj/machinery/door/firedoor,
-/turf/simulated/floor/tiled,
-/area/ministation/disused)
-"Nw" = (
/turf/simulated/floor/tiled,
-/area/ministation/court)
-"Ny" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 5;
- pixel_y = -32
+/area/ministation/cargo)
+"Vr" = (
+/obj/machinery/atmospherics/valve/digital{
+ dir = 4;
+ name = "Emergency Cooling Valve 1"
},
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Nz" = (
-/obj/machinery/suit_cycler,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"NA" = (
-/obj/structure/lattice,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Vx" = (
+/obj/machinery/door/airlock/hatch/maintenance,
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/space,
-/area/space)
-"NC" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/filth,
/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"ND" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/area/ministation/engine)
+"Vy" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"NF" = (
-/obj/machinery/power/sensor{
- id_tag = "station powernet";
- name = "Powernet Sensor - Main Powernet"
+/obj/machinery/atmospherics/pipe/manifold/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"VA" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "sat1_airlock_interior"
},
-/obj/structure/cable{
- icon_state = "0-4"
+/obj/machinery/button/access/interior{
+ id_tag = "sat1_airlock";
+ name = "interior access button";
+ pixel_y = 24
},
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"NH" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/area/ministation/ai_sat)
+"VC" = (
+/obj/machinery/atmospherics/binary/pump{
+ dir = 8
},
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"VF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"NI" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden{
+/area/ministation/hall/s1)
+"VH" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"NJ" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/obj/machinery/door/airlock/double/glass/atmos{
+ req_access = list("ACCESS_ENGINEERING");
+ autoset_access = 0;
dir = 8
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"VJ" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"NK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/effect/decal/cleanable/blood/oil,
/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"NL" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
+/area/ministation/maint/l1ne)
+"VK" = (
+/obj/machinery/ai_slipper{
+ uses = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
},
+/turf/simulated/floor/bluegrid,
+/area/ministation/ai_core)
+"VL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating,
-/area/ministation/disused)
-"NO" = (
-/obj/abstract/level_data_spawner/main_level{
- name = "Outpost Zebra";
-},
-/turf/space,
-/area/space)
-"NR" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/area/ministation/trash)
+"VM" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 8
},
-/obj/structure/sign/directions/supply{
- dir = 1;
- pixel_x = -32;
- pixel_y = 32
+/turf/space,
+/area/space)
+"VO" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"NT" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden,
+/turf/simulated/floor/airless,
+/area/space)
+"VP" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/black,
/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"NU" = (
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- dir = 1;
- id_tag = "sat2_airlock";
- pixel_y = -24;
- tag_airpump = "sat2_vent";
- tag_chamber_sensor = "sat2_sensor";
- tag_exterior_door = "sat2_airlock_exterior";
- tag_interior_door = "sat2_airlock_interior"
+/area/ministation/supermatter)
+"VR" = (
+/obj/machinery/fabricator,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"VT" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"VV" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4;
- id_tag = "sat2_vent"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "sat2_sensor";
- pixel_y = -20;
- pixel_x = -10
+ level = 2
},
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"NW" = (
-/obj/effect/decal/cleanable/dirt{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"NX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5
+"VX" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Oc" = (
-/obj/effect/floor_decal/corner/blue{
- dir = 10
+/obj/structure/sign/warning/vent_port{
+ dir = 1;
+ pixel_y = -34
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/black,
/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"Od" = (
-/obj/structure/bed/chair/wood/walnut{
+/area/ministation/engine)
+"VZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Of" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Oh" = (
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5
+/obj/effect/floor_decal/corner/yellow{
+ dir = 10
},
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Oi" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Om" = (
-/obj/item/stool,
-/obj/machinery/alarm{
- pixel_y = 22
+/area/ministation/hall/s1)
+"Wa" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastexterior"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/plating,
-/area/ministation/library)
-"On" = (
+/area/ministation/supermatter)
+"Wb" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Wc" = (
+/obj/structure/closet/crate,
+/obj/item/stack/material/ore/sand,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"Wd" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/sign/warning/high_voltage{
- pixel_y = 32
+/obj/machinery/status_display{
+ pixel_y = -32;
+ dir = 1
},
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Wj" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/blast_door{
+ desc = "A remote control-switch for the engine charging port.";
+ id_tag = "SupermatterPort";
+ name = "Reactor Blast Doors";
+ pixel_x = -6;
+ pixel_y = 7;
+ dir = 1;
+ directional_offset = null
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Oo" = (
-/turf/simulated/wall{
- can_open = 1
+/obj/machinery/button/blast_door{
+ desc = "A remote control-switch for the engine control room blast doors.";
+ id_tag = "EngineBlastexterior";
+ name = "Engine Bay Blast Doors";
+ pixel_y = -3;
+ pixel_x = 5;
+ dir = 1;
+ directional_offset = null
},
-/area/ministation/maint/w)
-"Oq" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/airlock/double/glass/security{
- id_tag = "secdoor";
- name = "security outer airlock"
+/obj/machinery/button/blast_door{
+ desc = "A remote control-switch for the engine control room blast doors.";
+ id_tag = "EngineBlastinterior";
+ name = "Engine Monitoring Room Blast Doors";
+ pixel_y = -3;
+ pixel_x = -6;
+ dir = 1;
+ directional_offset = null
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"Or" = (
-/obj/random/trash,
-/obj/machinery/atmospherics/portables_connector,
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Os" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/machinery/button/toggle{
+ desc = "A remote control-switch for the engine emitter.";
+ id_tag = "EngineEmitter";
+ name = "Engine Emitter";
+ pixel_x = 6;
+ pixel_y = 7;
+ dir = 1;
+ directional_offset = null
},
-/turf/simulated/wall,
-/area/ministation/hall/w)
-"Ou" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/smcontrol)
+"Wk" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/sign/department/security/alt{
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"Wn" = (
+/obj/structure/sign/plaque/atmos{
pixel_y = 32
},
+/obj/structure/closet/emcloset,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Ov" = (
-/obj/structure/table/woodentable/walnut,
-/obj/machinery/light,
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Ow" = (
-/obj/machinery/camera/network/mining{
- dir = 1
- },
-/turf/simulated/floor/airless,
-/area/space)
-"Ox" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "_East APC";
- pixel_x = 27;
- pixel_y = 2
- },
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/engine)
+"Wr" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green,
+/obj/machinery/camera/network/engineering{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"OB" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
+/area/ministation/engine)
+"Ws" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/vehicle/train/cargo/engine,
+/turf/simulated/floor/tiled,
+/area/ministation/cargo)
+"Wt" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "bulb1"
},
-/obj/structure/cable{
- icon_state = "0-2"
+/obj/structure/mirror{
+ pixel_y = 29
},
-/obj/machinery/alarm{
+/obj/structure/hygiene/sink{
+ pixel_y = 23
+ },
+/obj/structure/window/reinforced/tinted{
dir = 8;
- pixel_x = 24
+ icon_state = "twindow"
},
-/turf/simulated/floor/plating,
-/area/ministation/disused_office)
-"OC" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/window/reinforced/tinted{
+ dir = 4;
+ icon_state = "twindow"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"OD" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/disused_office)
-"OF" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"OL" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"OM" = (
-/obj/item/stool/padded,
-/obj/machinery/light/small{
- dir = 4
+/obj/structure/window/reinforced/tinted{
+ dir = 1
},
-/obj/abstract/landmark/start{
- name = "Librarian"
+/obj/structure/window/reinforced/tinted{
+ dir = 8;
+ icon_state = "twindow"
},
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"OO" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "sat3_airlock_exterior"
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ level = 2
},
-/obj/machinery/button/access/interior{
- id_tag = "sat3_airlock";
- name = "exterior access button";
- pixel_x = -10;
- pixel_y = 20;
- command = "cycle_exterior"
+/obj/item/hemostat,
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"Wv" = (
+/obj/item/toy/ringbell,
+/obj/structure/table/steel,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Wx" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"OP" = (
+/area/ministation/supermatter)
+"Wy" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 6
},
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"OQ" = (
-/obj/machinery/door/airlock/glass/command{
- autoset_access = 0;
- name = "Telecommunications relay airlock";
- req_access = list("ACCESS_TELECOMS")
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"OR" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "mining_airlock_exterior"
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"Wz" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 1
},
-/obj/machinery/button/access/interior{
- id_tag = "cargo_airlock";
- name = "exterior access button";
- pixel_x = -20;
- pixel_y = 10;
- command = "cycle_exterior"
+/turf/space,
+/area/space)
+"WB" = (
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"WE" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,
+/turf/space,
+/area/space)
+"WF" = (
+/obj/effect/floor_decal/industrial/custodial{
+ dir = 1
},
-/turf/simulated/floor/airless,
-/area/ministation/cargo)
-"OT" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- locked = 1;
- id_tag = "escape1_airlock_interior"
+/turf/simulated/floor/plating,
+/area/ministation/trash)
+"WJ" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"WK" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"WM" = (
+/obj/machinery/door/airlock/double/glass/civilian,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"WO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/eva)
+"WR" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id_tag = "trash_sort"
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/structure/window/reinforced,
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
},
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"OU" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+/area/ministation/trash)
+"WS" = (
+/obj/structure/cable/cyan{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"OV" = (
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"WU" = (
+/turf/simulated/floor,
+/area/space)
+"WW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/floor_decal/corner/red{
- dir = 4
- },
+/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
icon_state = "4-8"
},
+/turf/simulated/floor/plating,
+/area/ministation/maint/eastatmos)
+"WY" = (
+/obj/item/mollusc/barnacle{
+ pixel_x = 20
+ },
+/turf/space,
+/area/space)
+"Xb" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"OW" = (
+/area/ministation/engine)
+"Xc" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/sign/directions/evac{
- dir = 8;
- pixel_x = -32;
- pixel_y = 25
+/obj/machinery/atmospherics/pipe/manifold/visible/black{
+ dir = 8
},
-/obj/structure/sign/directions/supply{
+/turf/simulated/floor/plating,
+/area/space)
+"Xf" = (
+/obj/machinery/atmospherics/unary/outlet_injector{
dir = 1;
- pixel_x = -32;
- pixel_y = 32
+ icon_state = "map_injector";
+ id_tag = "cooling_in";
+ name = "Coolant Injector";
+ pixel_y = 1;
+ power_rating = 30000;
+ use_power = 1;
+ volume_rate = 700
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ministation/supermatter)
+"Xg" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"OX" = (
-/obj/machinery/door/airlock/external{
- autoset_access = 0;
- id_tag = "atmos_airlock_interior";
- locked = 1
+/area/ministation/hall/n)
+"Xh" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 9
},
-/obj/machinery/button/access/interior{
- id_tag = "atmos_airlock";
- name = "interior access button";
- pixel_x = 20;
- pixel_y = 10
+/obj/machinery/atmospherics/pipe/manifold/hidden/green,
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Xi" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"Xj" = (
+/obj/machinery/light/small{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor,
-/area/ministation/atmospherics)
-"OY" = (
-/obj/machinery/camera/network/medbay{
+/area/ministation/maint/eastatmos)
+"Xk" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
-/turf/simulated/floor/tiled/dark,
-/area/ministation/medical)
-"Pa" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Pc" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"Xm" = (
+/obj/structure/hygiene/toilet{
+ dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Pd" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/window/reinforced/tinted{
+ dir = 8;
+ icon_state = "twindow"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"Pe" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 10
+/obj/structure/window/reinforced/tinted{
+ dir = 4;
+ icon_state = "twindow"
},
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Pg" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/window/reinforced/tinted,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Pi" = (
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/power/apc{
- dir = 8;
- name = "_West APC";
- pixel_x = -25
+/turf/simulated/floor/tiled/freezer,
+/area/ministation/dorms)
+"Xo" = (
+/obj/structure/table/reinforced,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Xt" = (
+/obj/machinery/turretid{
+ control_area = "\improper AI Upload Chamber";
+ name = "AI Upload turret control";
+ pixel_y = -25;
+ dir = 1
},
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"Pj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"Pk" = (
-/obj/structure/table/woodentable/walnut,
-/obj/item/folder/blue,
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Pl" = (
-/obj/structure/sign/warning/airlock{
- pixel_x = 32
+/area/ministation/ai_sat)
+"Xu" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled,
/area/ministation/cargo)
-"Po" = (
-/obj/machinery/photocopier,
-/obj/item/radio/intercom{
- dir = 8;
- pixel_x = 20
+"Xx" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n)
+"Xz" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/black,
/turf/simulated/floor/tiled,
-/area/ministation/court)
-"Pp" = (
-/turf/space,
-/area/ministation/supply_dock)
-"Pr" = (
+/area/ministation/engine)
+"XA" = (
/obj/machinery/door/airlock/external/glass{
autoset_access = 0;
name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
locked = 1;
- id_tag = "pfm_airlock_exterior"
+ id_tag = "westatmos_airlock_interior"
},
/obj/machinery/button/access/interior{
- id_tag = "pfm_airlock";
- name = "exterior access button";
- pixel_x = -10;
- pixel_y = 20;
- command = "cycle_exterior"
+ id_tag = "westatmos_airlock";
+ name = "interior access button";
+ pixel_x = 20;
+ dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"Pu" = (
-/obj/item/radio/intercom{
- dir = 4;
- pixel_x = -25
+/area/ministation/maint/westatmos)
+"XB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/wall/r_wall,
+/area/ministation/ai_upload)
+"XC" = (
+/obj/machinery/light{
+ dir = 4
},
+/obj/machinery/emitter,
/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Px" = (
-/obj/structure/table/woodentable/walnut,
-/obj/item/folder/red,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
+/area/ministation/engine)
+"XE" = (
+/obj/structure/cable/cyan{
+ icon_state = "4-8"
},
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Py" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"XF" = (
+/obj/machinery/drone_fabricator/construction,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"XI" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 6
+ },
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"XK" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-8"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"PA" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"PB" = (
-/obj/structure/table/woodentable,
-/obj/machinery/fabricator/book,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"PC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/area/space)
+"XL" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/pool,
+/area/ministation/dorms)
+"XO" = (
+/obj/structure/lattice,
+/turf/simulated/wall/r_wall,
+/area/ministation/engine)
+"XQ" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"XR" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"XT" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"PD" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/atmospherics)
-"PE" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"XU" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"PF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/black{
dir = 4
},
-/obj/random/trash,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/steel_grid,
/area/ministation/engine)
-"PH" = (
+"XV" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
-/obj/random/trash,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"PI" = (
+/area/ministation/cargo)
+"XW" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"PK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+ icon_state = "1-4"
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/visible/cyan{
+ dir = 4
},
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"XZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/item/stool/padded,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"PM" = (
+/area/ministation/cargo)
+"Yi" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/floor_decal/corner/red{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/machinery/light/small{
+ dir = 1
},
+/turf/simulated/floor/plating,
+/area/ministation/maint/westatmos)
+"Ym" = (
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"PN" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- locked = 1;
- id_tag = "escape1_airlock_exterior"
+/area/ministation/eva)
+"Yr" = (
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
+ dir = 10
},
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"Ys" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/atmospherics/pipe/simple/visible/black,
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"PP" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/item/flashlight,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"PR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
+/area/ministation/engine)
+"Yt" = (
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "port_engineering_vent"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Yu" = (
+/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "2-8"
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"PT" = (
-/obj/structure/table/woodentable_reinforced/walnut,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/area/ministation/engine)
+"Yv" = (
+/obj/structure/railing/mapped{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Yx" = (
+/obj/effect/floor_decal/industrial/custodial{
dir = 4
},
-/turf/simulated/floor/carpet/red,
-/area/ministation/court)
-"PV" = (
-/obj/structure/table,
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
- },
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/obj/item/modular_computer/tablet/preset/custom_loadout/cheap,
-/obj/item/mollusc/clam,
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"PX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 2
+/obj/machinery/light/small{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"PY" = (
-/obj/machinery/airlock_sensor{
- id_tag = "escape1_sensor";
- pixel_y = -20
+/obj/machinery/firealarm{
+ pixel_y = 24
},
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "escape1_vent"
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"Qb" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
+/area/ministation/trash)
+"Yy" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
dir = 4
},
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Qh" = (
-/obj/structure/bed/chair/wood/walnut{
+/obj/effect/floor_decal/corner/blue/diagonal,
+/obj/effect/floor_decal/corner/blue/diagonal{
dir = 4
},
-/obj/machinery/light{
+/turf/simulated/floor/reinforced/oxygen,
+/area/ministation/atmospherics)
+"Yz" = (
+/obj/machinery/atmospherics/unary/heat_exchanger{
dir = 1
},
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Qi" = (
-/obj/effect/decal/cleanable/filth,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Qk" = (
+/area/ministation/supermatter)
+"YA" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 10
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Qm" = (
-/obj/machinery/cryopod/robot,
-/obj/machinery/computer/cryopod/robot{
- pixel_y = -32
+/area/ministation/engine)
+"YC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"Qp" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/engine)
+"YD" = (
+/obj/structure/cable/cyan{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"Qq" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"Qr" = (
-/obj/effect/decal/cleanable/filth,
-/obj/machinery/atmospherics/pipe/simple/visible/universal,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
+/area/ministation/supermatter)
+"YE" = (
+/obj/machinery/atmospherics/portables_connector,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/portable_atmospherics/canister/empty,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Qu" = (
+/area/ministation/supermatter)
+"YF" = (
/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"Qw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ icon_state = "1-4"
},
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Qy" = (
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "1-8"
},
/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ icon_state = "1-2"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Qz" = (
-/obj/effect/wallframe_spawn/no_grille,
-/obj/structure/sign/department/botany,
-/turf/simulated/floor/tiled,
-/area/ministation/hydro)
-"QA" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 8
+/area/space)
+"YG" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "sat3_airlock_interior"
},
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"QB" = (
-/obj/machinery/light,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"QC" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"QD" = (
-/obj/structure/table/woodentable,
-/obj/item/book/printable_red,
-/obj/item/pen,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"QF" = (
-/obj/machinery/camera/network/medbay{
- dir = 4
+/obj/machinery/button/access/interior{
+ id_tag = "sat3_airlock";
+ name = "interior access button";
+ pixel_y = 24
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"QG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"QI" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
},
-/obj/machinery/camera/network/ministation/sat{
- dir = 1
- },
/turf/simulated/floor/plating,
/area/ministation/ai_sat)
-"QJ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+"YJ" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan,
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"QL" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/window/brigdoor,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "secshut";
- name = "security shutter"
+/area/ministation/engine)
+"YK" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
},
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"QN" = (
-/obj/structure/sign/department/id_office{
- dir = 1;
- pixel_y = -32
+/obj/item/pen,
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
},
+/obj/item/janicart_key,
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"QO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"QP" = (
-/obj/machinery/door/firedoor,
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/sign/warning/server_room,
-/turf/simulated/floor/plating,
-/area/ministation/science)
-"QQ" = (
-/obj/structure/table/woodentable,
-/obj/random/cash,
-/obj/item/deck/cards,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"QR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/area/ministation/janitor)
+"YM" = (
+/obj/effect/floor_decal/corner/blue,
+/obj/effect/floor_decal/corner/yellow{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/atmospherics/binary/passive_gate/on{
+ dir = 1;
+ name = "Air to Supply"
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"QS" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/camera/network/engineering{
+ dir = 8;
+ name = "Atmospherics"
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/atmospherics)
+"YN" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastexterior"
},
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"QU" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"QV" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/item/clothing/accessory/toggleable/checkered_jacket,
-/obj/item/storage/box/lights,
-/obj/random/suit,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"QW" = (
-/obj/machinery/firealarm,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"QX" = (
-/obj/effect/decal/cleanable/blood/oil,
/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"QY" = (
+/area/ministation/supermatter)
+"YT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"QZ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Ra" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/turf/simulated/wall/r_wall,
-/area/ministation/ai_core)
-"Rb" = (
-/obj/machinery/cryopod{
- dir = 1
- },
-/obj/item/radio/intercom{
- dir = 1;
- pixel_y = -32
- },
-/obj/abstract/landmark/latejoin/cryo,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"Rd" = (
-/obj/machinery/light/small{
+/obj/machinery/camera/network/ministation/sat,
+/turf/simulated/floor/plating,
+/area/ministation/ai_sat)
+"YU" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Re" = (
-/obj/machinery/light_switch{
- pixel_y = 25
- },
-/turf/simulated/floor/tiled,
/area/ministation/engine)
-"Rf" = (
-/obj/machinery/door/airlock/civilian{
- autoset_access = 0;
- name = "Librarian's Chamber";
- req_access = list("ACCESS_LIBRARY")
- },
-/turf/simulated/floor/plating,
-/area/ministation/library)
-"Rh" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+"YV" = (
+/obj/machinery/light{
dir = 4;
- id_tag = "cargo_vent"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "cargo2_sensor";
- pixel_y = -20
+ icon_state = "tube1"
},
-/turf/simulated/floor/plating,
-/area/ministation/cargo)
-"Ri" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/disposalpipe/junction{
+ dir = 8;
+ icon_state = "pipe-j2"
},
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Rj" = (
-/obj/machinery/light{
- dir = 4
+/obj/abstract/landmark/start{
+ name = "Assistant"
},
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"YW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Rl" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"Rm" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Rn" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/green{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 2
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Rq" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "cargo_vent"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "cargo_sensor";
- pixel_y = -20
- },
-/turf/simulated/floor/plating,
-/area/ministation/cargo)
-"Rr" = (
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Rs" = (
-/obj/random/trash,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Rt" = (
+/area/ministation/engine)
+"YY" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Rv" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/area/ministation/eva)
+"Za" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/black{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/turf/simulated/floor/plating,
+/area/ministation/supermatter)
+"Zd" = (
+/obj/effect/floor_decal/corner/yellow/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Rw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/engine)
+"Ze" = (
+/obj/machinery/door/airlock/external{
+ locked = 1;
+ id_tag = "atmos_airlock_exterior";
+ autoset_access = 0
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/button/access/interior{
+ id_tag = "atmos_airlock";
+ name = "exterior access button";
+ pixel_x = -20;
+ command = "cycle_exterior";
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/wood,
-/area/ministation/cafe)
-"Rx" = (
-/turf/simulated/wall,
-/area/ministation/court)
-"Ry" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Zf" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 8
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"RB" = (
-/obj/effect/decal/cleanable/blood/oil,
+/obj/abstract/landmark/start{
+ name = "Assistant"
+ },
+/obj/item/stool/padded,
+/turf/simulated/floor/carpet/green,
+/area/ministation/dorms)
+"Zg" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/camera/autoname,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"Zh" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
},
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"RC" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable/yellow,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/smcontrol)
+"Zi" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ id_tag = "EngineBlastexterior"
},
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"RD" = (
-/turf/simulated/wall/r_wall,
-/area/ministation/cryo)
-"RF" = (
-/obj/random/trash,
+/area/ministation/supermatter)
+"Zk" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"RG" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"RH" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/random/gloves,
-/obj/item/clothing/accessory/toggleable/hawaii,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"RI" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+ dir = 4
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"RJ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/external/glass{
- id_tag = "port_engineering_airlock_exterior";
- locked = 1;
- autoset_access = 0
- },
-/obj/machinery/button/access/interior{
- id_tag = "port_engineering_airlock";
- name = "exterior access button";
- pixel_x = -10;
- pixel_y = 20;
- command = "cycle_exterior"
+/area/ministation/cargo)
+"Zn" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/green{
+ dir = 4
},
/turf/simulated/floor/plating,
/area/ministation/engine)
-"RK" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"RM" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 8
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock{
- pixel_x = 1
+"Zo" = (
+/obj/machinery/atmospherics/pipe/simple/visible/universal{
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"RN" = (
-/obj/effect/floor_decal/corner/paleblue{
+/obj/effect/floor_decal/corner/blue{
dir = 10
},
-/obj/structure/sign/department/chemistry{
- pixel_x = 32;
- pixel_y = -5
+/turf/simulated/floor/tiled/techfloor/grid,
+/area/ministation/atmospherics)
+"Zp" = (
+/obj/machinery/atmospherics/pipe/simple/visible/green{
+ dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/hall/e)
-"RO" = (
+/obj/machinery/atmospherics/pipe/simple/visible/cyan,
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"Zv" = (
+/obj/structure/ladder,
+/turf/simulated/floor,
+/area/ministation/maint/eastatmos)
+"Zx" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/obj/effect/decal/cleanable/blood/oil,
+/obj/machinery/camera/motion/ministation,
+/turf/simulated/floor/tiled/techmaint,
+/area/ministation/ai_core)
+"Zz" = (
+/obj/structure/closet/boxinggloves,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/dorms)
+"ZA" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"RP" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1"
- },
-/obj/random/trash,
/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"RQ" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/area/ministation/cargo)
+"ZG" = (
+/obj/machinery/button/blast_door{
+ id_tag = "EngineVent";
+ name = "3. Reactor Ventillatory Control";
+ pixel_x = -24;
+ pixel_y = 6;
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"RR" = (
-/obj/item/storage/firstaid/o2,
-/obj/structure/closet/secure_closet/atmos_personal,
-/obj/item/clothing/mask/breath/emergency,
-/obj/item/clothing/suit/space/emergency,
-/obj/item/storage/toolbox/emergency,
-/obj/item/clothing/head/helmet/space/emergency,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"RV" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+/obj/machinery/button/blast_door{
+ id_tag = "smsafetydoor";
+ name = "1. Vent Safety";
+ pixel_x = -24;
+ pixel_y = -6;
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/machinery/button/mass_driver{
+ pixel_x = -35;
+ id_tag = "eject";
+ name = "4. SM CORE EJECT";
dir = 4
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"RW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"RY" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/wall,
-/area/ministation/detective)
-"RZ" = (
-/obj/structure/sign/department/janitor{
- pixel_y = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Sa" = (
-/turf/simulated/wall,
-/area/ministation/library)
-"Sb" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/valve/digital{
+ dir = 1;
+ name = "Emergency Cooling Valve 2"
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Sd" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/sign/warning/airlock,
/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"Sf" = (
-/obj/structure/table/woodentable/walnut,
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Sg" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/area/ministation/supermatter)
+"ZH" = (
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"Sj" = (
-/obj/machinery/light,
+/area/ministation/cargo)
+"ZJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Sk" = (
-/obj/machinery/camera/network/ministation/sat,
/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Sm" = (
-/obj/effect/decal/cleanable/blood/oil,
+/area/ministation/maint/westatmos)
+"ZK" = (
+/obj/structure/closet/crate/bin/ministation,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Sn" = (
-/obj/effect/decal/cleanable/dirt,
+/area/ministation/trash)
+"ZL" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
+ dir = 9
},
/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"So" = (
+/area/ministation/cargo)
+"ZM" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/atmospherics/pipe/simple/visible/black{
+ dir = 9
+ },
+/turf/simulated/floor/plating,
+/area/ministation/engine)
+"ZR" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Sp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
+/area/ministation/hall/s1)
+"ZT" = (
+/obj/machinery/door/airlock/glass/atmos,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"Sq" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Sr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/universal,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/techfloor,
/area/ministation/atmospherics)
-"Ss" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Sv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/visible/universal{
- dir = 4
+"ZU" = (
+/obj/machinery/atmospherics/binary/pump/high_power{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Sy" = (
+/area/ministation/supermatter)
+"ZX" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Sz" = (
-/obj/structure/table,
-/obj/machinery/light{
- dir = 8
+/area/ministation/ai_sat)
+"ZY" = (
+/obj/machinery/atmospherics/omni/filter{
+ tag_east = 1;
+ tag_south = 4;
+ tag_west = 2;
+ use_power = 0
},
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"SA" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 2
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"SC" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"SE" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/camera/autoname{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"SF" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/turf/simulated/floor/plating,
-/area/ministation/library)
-"SH" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"SI" = (
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"SN" = (
-/obj/machinery/camera/autoname{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/disused_office)
-"SO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"SP" = (
-/obj/item/stool/padded,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"SR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"ST" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"SV" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"SW" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/floor_decal/corner/red{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"SX" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- locked = 1;
- id_tag = "pfm_airlock_interior"
- },
-/obj/machinery/button/access/interior{
- id_tag = "pfm_airlock";
- name = "interior access button";
- pixel_x = 10;
- pixel_y = 20
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"SY" = (
-/obj/effect/floor_decal/corner/red/diagonal,
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/tiled,
-/area/ministation/cafe)
-"SZ" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/obj/machinery/atmospherics/portables_connector,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Ta" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Tb" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/janitor)
-"Tc" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"Td" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden{
- dir = 1
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Te" = (
-/obj/machinery/alarm{
- dir = 4;
- pixel_x = -22
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Tg" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Th" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/wall,
-/area/ministation/maint/se)
-"Ti" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Tj" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"Tk" = (
-/obj/structure/table/woodentable,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"To" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Tp" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/visible,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Tq" = (
-/obj/machinery/camera/network/security{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"Ts" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Tv" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 1;
- id_tag = "atmos_vent"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "atmos_sensor";
- pixel_y = 10;
- pixel_x = -20
- },
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- id_tag = "atmos_airlock";
- pixel_y = null;
- tag_airpump = "atmos_vent";
- tag_chamber_sensor = "atmos_sensor";
- tag_exterior_door = "atmos_airlock_exterior";
- tag_interior_door = "atmos_airlock_interior";
- dir = 4;
- pixel_x = -20
- },
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Ty" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"TC" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"TD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"TF" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"TG" = (
-/obj/effect/decal/cleanable/filth,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"TH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"TI" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"TJ" = (
-/obj/structure/closet/secure_closet/brig,
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"TK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/random/trash,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"TN" = (
-/obj/item/stool,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"TP" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"TQ" = (
-/obj/machinery/light_switch{
- dir = 8;
- pixel_x = 32
- },
-/obj/machinery/firealarm,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"TR" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "Atmos APC";
- pixel_y = 25
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/simulated/floor/airless,
-/area/ministation/atmospherics)
-"TT" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/airlock/external/glass{
- locked = 1;
- id_tag = "stern_engineering_airlock_exterior";
- autoset_access = 0
- },
-/obj/machinery/button/access/interior{
- id_tag = "stern_engineering_airlock";
- name = "exterior access button";
- pixel_x = -20;
- pixel_y = -10;
- command = "cycle_exterior"
- },
-/turf/simulated/floor/plating,
-/area/ministation/engine)
-"TV" = (
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/door/airlock/security,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"TW" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- id_tag = "sqm_vent";
- dir = 8
- },
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- dir = 0;
- id_tag = "sqm_airlock";
- pixel_y = 24;
- tag_airpump = "sqm_vent";
- tag_chamber_sensor = "sqm_sensor";
- tag_exterior_door = "sqm_airlock_exterior";
- tag_interior_door = "sqm_airlock_interior"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "sqm_sensor";
- pixel_y = 20
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"TX" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"TY" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ub" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Uc" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/portables_connector,
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Ud" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Ue" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Um" = (
-/obj/random/trash,
-/obj/machinery/atmospherics/pipe/manifold/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Un" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"Up" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Uq" = (
-/obj/structure/table/woodentable,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Ut" = (
-/obj/structure/sign/plaque/golden/security{
- pixel_y = 32
- },
-/obj/machinery/vending/security,
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"Uv" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"Uw" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Ux" = (
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Uz" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "Dock Airlock";
- locked = 1
- },
-/turf/simulated/floor/plating,
-/area/ministation/hall/w)
-"UA" = (
-/obj/machinery/camera/network/ministation/sat{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/universal{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"UB" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"UC" = (
-/obj/effect/decal/cleanable/flour,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cafe)
-"UD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"UG" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/structure/bookcase/skill_books/random,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"UI" = (
-/obj/effect/wallframe_spawn/no_grille,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/court)
-"UK" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/portables_connector{
- pixel_x = -3
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"UL" = (
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"UO" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"UQ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"UR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/bridge)
-"UT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/binary/pump/on{
- target_pressure = 200;
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"UV" = (
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- id_tag = "mining_airlock";
- pixel_y = null;
- tag_airpump = "mining_vent";
- tag_chamber_sensor = "mining_sensor";
- tag_exterior_door = "mining_airlock_exterior";
- tag_interior_door = "mining_airlock_interior";
- dir = 4;
- pixel_x = -20
- },
-/obj/machinery/airlock_sensor{
- id_tag = "mining_sensor";
- pixel_y = 10;
- pixel_x = -20
- },
-/turf/simulated/floor/plating,
-/area/ministation/cargo)
-"Va" = (
-/obj/structure/bed/chair/wheelchair,
-/obj/machinery/camera/network/medbay,
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"Vb" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Vc" = (
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Vd" = (
-/obj/structure/filing_cabinet,
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"Ve" = (
-/obj/abstract/landmark/start{
- name = "Station Engineer"
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/universal,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Vf" = (
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Vi" = (
-/obj/machinery/light_switch{
- pixel_y = 25
- },
-/obj/abstract/landmark/start{
- name = "Librarian"
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Vj" = (
-/obj/structure/closet/secure_closet/lawyer,
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"Vl" = (
-/obj/machinery/door/airlock,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/disused_office)
-"Vn" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/obj/machinery/light/small/emergency{
- dir = 8
- },
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"Vp" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Vq" = (
-/obj/structure/bookcase/skill_books/random,
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Vs" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Vt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"Vu" = (
-/obj/machinery/door/airlock/civilian,
-/turf/simulated/floor/plating,
-/area/ministation/library)
-"Vv" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/structure/bed/chair/comfy/captain{
- dir = 8
- },
-/obj/machinery/camera/network/security{
- dir = 8
- },
-/turf/simulated/floor/carpet/red,
-/area/ministation/court)
-"Vw" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Vx" = (
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"Vy" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Vz" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/airless,
-/area/space)
-"VA" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "sat1_airlock_interior"
- },
-/obj/machinery/button/access/interior{
- id_tag = "sat1_airlock";
- name = "interior access button";
- pixel_x = 10;
- pixel_y = 20
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"VD" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"VF" = (
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"VG" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/sign/warning/airlock,
-/turf/simulated/floor/plating,
-/area/ministation/engine)
-"VJ" = (
-/obj/machinery/door/airlock/hatch/maintenance,
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"VK" = (
-/obj/machinery/ai_slipper{
- uses = 10
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/simulated/floor/bluegrid,
-/area/ministation/ai_core)
-"VN" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"VO" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/airless,
-/area/space)
-"VQ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"VR" = (
-/obj/abstract/landmark/start{
- name = "Assistant"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"VS" = (
-/obj/effect/decal/cleanable/filth,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"VU" = (
-/obj/structure/rack,
-/obj/item/radio/intercom{
- dir = 4;
- pixel_x = -25
- },
-/obj/item/clothing/mask/horsehead,
-/obj/item/storage/wallet/random{
- pixel_z = -11
- },
-/obj/item/classic_baton{
- pixel_w = -7
- },
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"VV" = (
-/obj/structure/lattice,
-/turf/simulated/wall,
-/area/ministation/maint/ne)
-"VW" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"VZ" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Wb" = (
-/turf/simulated/wall,
-/area/ministation/cryo)
-"Wc" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/universal,
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"Wd" = (
-/obj/machinery/alarm{
- dir = 1;
- pixel_y = -22
- },
-/turf/simulated/floor/plating,
-/area/ministation/detective)
-"Wg" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Wi" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4;
- level = 2
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"Wk" = (
-/obj/machinery/door/airlock/glass/atmos,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Wn" = (
-/obj/structure/sign/plaque/atmos{
- pixel_y = 32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Wo" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Wr" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/light{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Ws" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"Wt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Wu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Wv" = (
-/turf/simulated/floor/plating,
-/area/ministation/maint/detective)
-"WB" = (
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"WC" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"WD" = (
-/obj/machinery/light_switch{
- dir = 8;
- pixel_x = 32
- },
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"WF" = (
-/obj/structure/closet/secure_closet/security,
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"WG" = (
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"WH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/visible/universal,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"WL" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/floor_decal/corner/red{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"WN" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"WO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner/blue{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"WP" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 10
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"WQ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/sign/directions/science{
- dir = 4;
- pixel_y = 25
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"WS" = (
-/obj/effect/wallframe_spawn/no_grille,
-/turf/simulated/floor/tiled,
-/area/ministation/disused)
-"WT" = (
-/obj/structure/bed/padded,
-/obj/item/bedsheet/green,
-/obj/random_multi/single_item/captains_spare_id,
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"WU" = (
-/turf/simulated/floor,
-/area/space)
-"WV" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"WW" = (
-/obj/abstract/landmark/start{
- name = "Robot"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"WY" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"WZ" = (
-/obj/machinery/light/small,
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/obj/machinery/atmospherics/portables_connector{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"Xd" = (
-/obj/structure/bed/chair{
- dir = 4
- },
-/obj/item/handcuffs,
-/obj/effect/decal/cleanable/blood,
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Xe" = (
-/obj/structure/bed/chair/wood/walnut{
- dir = 4
- },
-/obj/machinery/light,
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Xi" = (
-/obj/machinery/newscaster{
- pixel_x = 32
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/carpet/red,
-/area/ministation/court)
-"Xj" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Xk" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Xl" = (
-/obj/structure/lattice,
-/turf/simulated/wall/r_wall,
-/area/ministation/cryo)
-"Xo" = (
-/obj/effect/decal/cleanable/filth,
-/obj/effect/decal/cleanable/filth,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Xp" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Xr" = (
-/obj/abstract/landmark{
- name = "bluespace_a"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/structure/sign/warning/armory{
- pixel_x = -32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"Xs" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/security)
-"Xt" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"Xu" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/structure/sign/warning/airlock,
-/turf/simulated/floor/plating,
-/area/ministation/cargo)
-"Xw" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"Xx" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"XA" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/medical)
-"XD" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"XE" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "starboard_engineering_sensor";
- pixel_y = 20
- },
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- id_tag = "starboard_engineering_airlock";
- pixel_y = 24;
- tag_airpump = "starboard_engineering_vent";
- tag_chamber_sensor = "starboard_engineering_sensor";
- tag_exterior_door = "starboard_engineering_airlock_exterior";
- tag_interior_door = "starboard_engineering_airlock_interior"
- },
-/turf/simulated/floor/plating,
-/area/ministation/engine)
-"XF" = (
-/obj/machinery/door/airlock,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"XJ" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/random/suit,
-/obj/random/gloves,
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"XL" = (
-/obj/machinery/alarm{
- pixel_y = 23
- },
-/turf/simulated/floor/plating,
-/area/ministation/bridge)
-"XM" = (
-/obj/machinery/door/airlock,
-/obj/machinery/door/firedoor{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"XO" = (
-/obj/structure/lattice,
-/turf/simulated/wall,
-/area/ministation/atmospherics)
-"XQ" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/random/gloves,
-/obj/random/suit,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"XR" = (
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"XS" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"XT" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"XV" = (
-/obj/machinery/atmospherics/pipe/simple/visible/universal,
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"XX" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/structure/table/steel,
-/obj/item/wrench,
-/obj/item/stack/tape_roll/barricade_tape/atmos,
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"XY" = (
-/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/shutters/open{
- id_tag = "secshut";
- name = "security shutter"
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/security)
-"XZ" = (
-/obj/machinery/door/airlock/glass/medical{
- autoset_access = 0;
- name = "Cryogenics airlock"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/door/firedoor,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/cryo)
-"Yb" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Yc" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "_North APC";
- pixel_y = 24
- },
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"Yg" = (
-/obj/effect/floor_decal/industrial/warning,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/w)
-"Yh" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Yi" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Yj" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/nw)
-"Ym" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/floor_decal/corner/blue{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Yo" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/e)
-"Yp" = (
-/obj/random/trash,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Yq" = (
-/turf/simulated/wall{
- can_open = 1
- },
-/area/ministation/maint/ne)
-"Yt" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "port_engineering_vent"
- },
-/turf/simulated/floor/plating,
-/area/ministation/engine)
-"Yv" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/sign/directions/medical{
- dir = 4;
- pixel_x = 32;
- pixel_y = 25
- },
-/obj/structure/sign/directions/security{
- dir = 1;
- pixel_x = 32;
- pixel_y = 32
- },
-/obj/structure/sign/directions/science{
- dir = 1;
- pixel_x = 32;
- pixel_y = 40
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Yx" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"YA" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"YB" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/random/trash,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"YF" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/ministation/eva)
-"YG" = (
-/obj/machinery/door/airlock/external/glass{
- autoset_access = 0;
- name = "External Airlock Hatch";
- req_access = list("ACCESS_EXTERNAL");
- locked = 1;
- id_tag = "sat3_airlock_interior"
- },
-/obj/machinery/button/access/interior{
- id_tag = "sat3_airlock";
- name = "interior access button";
- pixel_x = 10;
- pixel_y = 20
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"YH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"YI" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"YK" = (
-/obj/item/radio/intercom{
- dir = 1;
- pixel_y = -32
- },
-/turf/simulated/floor/tiled,
-/area/ministation/disused_office)
-"YM" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"YP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/computer/modular/preset/civilian{
- dir = 1
- },
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"YQ" = (
-/obj/structure/closet/lawcloset,
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"YS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"YT" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/camera/network/ministation/sat,
-/turf/simulated/floor/plating,
-/area/ministation/ai_sat)
-"YW" = (
-/turf/simulated/wall,
-/area/ministation/disused)
-"YY" = (
-/obj/structure/closet/wardrobe/lawyer_black,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/court)
-"YZ" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"Za" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Zb" = (
-/obj/effect/wallframe_spawn/reinforced,
-/turf/space,
-/area/ministation/hall/w)
-"Ze" = (
-/obj/machinery/door/airlock/external{
- locked = 1;
- id_tag = "atmos_airlock_exterior";
- autoset_access = 0
- },
-/obj/machinery/button/access/interior{
- id_tag = "atmos_airlock";
- name = "exterior access button";
- pixel_x = -20;
- pixel_y = -10;
- command = "cycle_exterior"
- },
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"Zf" = (
-/obj/effect/decal/cleanable/filth,
-/turf/simulated/floor/plating,
-/area/ministation/maint/w)
-"Zh" = (
-/obj/machinery/network/relay,
-/turf/simulated/floor/tiled,
-/area/ministation/engine)
-"Zj" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/universal,
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Zk" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"Zl" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/ministation/disused_office)
-"Zm" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hop)
-"Zo" = (
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- dir = 0;
- id_tag = "pqm_airlock";
- pixel_y = 24;
- tag_airpump = "pqm_vent";
- tag_chamber_sensor = "pqm_sensor";
- tag_exterior_door = "pqm_airlock_exterior";
- tag_interior_door = "pqm_airlock_interior"
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
- dir = 4;
- id_tag = "pqm_vent"
- },
-/obj/machinery/airlock_sensor{
- id_tag = "pqm_sensor";
- pixel_y = 20
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/sw)
-"Zr" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/ne)
-"Zs" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/simulated/floor/plating,
-/area/ministation/disused)
-"Zt" = (
-/obj/structure/bed/chair/wood/walnut{
- dir = 4
- },
-/obj/machinery/firealarm{
- pixel_y = 25
- },
-/turf/simulated/floor/wood/yew,
-/area/ministation/court)
-"Zv" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"Zx" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/camera/motion/ministation,
-/turf/simulated/floor/tiled/techmaint,
-/area/ministation/ai_core)
-"Zz" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"ZA" = (
-/obj/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"ZB" = (
-/obj/structure/closet,
-/obj/random/maintenance,
-/obj/item/clothing/suit/storage/toggle/labcoat,
-/turf/simulated/floor/plating,
-/area/ministation/maint/e)
-"ZD" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"ZE" = (
-/obj/abstract/landmark/start{
- name = "Assistant"
- },
-/obj/machinery/light{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"ZH" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/turf/simulated/floor/plating,
-/area/ministation/maint/se)
-"ZI" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"ZK" = (
-/obj/machinery/computer/cryopod{
- pixel_y = 32
- },
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/simulated/floor/tiled/dark,
-/area/ministation/cryo)
-"ZL" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/ministation/cargo)
-"ZN" = (
-/obj/effect/floor_decal/corner/red{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/ministation/hall/n)
-"ZO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 6
- },
-/turf/simulated/floor,
-/area/ministation/atmospherics)
-"ZP" = (
-/obj/effect/wallframe_spawn/no_grille,
-/turf/simulated/floor/plating,
-/area/ministation/court)
-"ZQ" = (
-/obj/abstract/landmark/start{
- name = "Assistant"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/ministation/commons)
-"ZR" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
-/area/ministation/hall/s)
-"ZT" = (
-/obj/machinery/camera/network/research{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/ministation/science)
-"ZV" = (
-/obj/structure/table,
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/item/paper_bin,
-/obj/item/pen,
-/turf/simulated/floor/carpet/green,
-/area/ministation/disused_office)
-"ZW" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/simulated/floor/wood/mahogany,
-/area/ministation/library)
-"ZZ" = (
-/obj/structure/table/woodentable_reinforced/walnut,
-/obj/item/bell,
-/turf/simulated/floor/carpet/red,
-/area/ministation/court)
+/area/ministation/supermatter)
(1,1,1) = {"
aa
@@ -18480,7 +12729,1292 @@ aa
aa
aa
"}
-(2,1,1) = {"
+(2,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+NO
+aa
+aa
+aa
+aa
+"}
+(6,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(7,1,1) = {"
aa
aa
aa
@@ -18737,7 +14271,7 @@ aa
aa
aa
"}
-(3,1,1) = {"
+(8,1,1) = {"
aa
aa
aa
@@ -18994,7 +14528,7 @@ aa
aa
aa
"}
-(4,1,1) = {"
+(9,1,1) = {"
aa
aa
aa
@@ -19251,7 +14785,8 @@ aa
aa
aa
"}
-(5,1,1) = {"
+(10,1,1) = {"
+aa
aa
aa
aa
@@ -19502,13 +15037,12 @@ aa
aa
aa
aa
-NO
aa
aa
aa
aa
"}
-(6,1,1) = {"
+(11,1,1) = {"
aa
aa
aa
@@ -19765,7 +15299,7 @@ aa
aa
aa
"}
-(7,1,1) = {"
+(12,1,1) = {"
aa
aa
aa
@@ -20022,7 +15556,7 @@ aa
aa
aa
"}
-(8,1,1) = {"
+(13,1,1) = {"
aa
aa
aa
@@ -20279,7 +15813,7 @@ aa
aa
aa
"}
-(9,1,1) = {"
+(14,1,1) = {"
aa
aa
aa
@@ -20536,7 +16070,7 @@ aa
aa
aa
"}
-(10,1,1) = {"
+(15,1,1) = {"
aa
aa
aa
@@ -20793,7 +16327,7 @@ aa
aa
aa
"}
-(11,1,1) = {"
+(16,1,1) = {"
aa
aa
aa
@@ -21050,7 +16584,7 @@ aa
aa
aa
"}
-(12,1,1) = {"
+(17,1,1) = {"
aa
aa
aa
@@ -21307,7 +16841,7 @@ aa
aa
aa
"}
-(13,1,1) = {"
+(18,1,1) = {"
aa
aa
aa
@@ -21564,8 +17098,7 @@ aa
aa
aa
"}
-(14,1,1) = {"
-aa
+(19,1,1) = {"
aa
aa
aa
@@ -21622,6 +17155,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -21821,7 +17355,7 @@ aa
aa
aa
"}
-(15,1,1) = {"
+(20,1,1) = {"
aa
aa
aa
@@ -22078,7 +17612,7 @@ aa
aa
aa
"}
-(16,1,1) = {"
+(21,1,1) = {"
aa
aa
aa
@@ -22335,7 +17869,7 @@ aa
aa
aa
"}
-(17,1,1) = {"
+(22,1,1) = {"
aa
aa
aa
@@ -22592,7 +18126,7 @@ aa
aa
aa
"}
-(18,1,1) = {"
+(23,1,1) = {"
aa
aa
aa
@@ -22849,7 +18383,8 @@ aa
aa
aa
"}
-(19,1,1) = {"
+(24,1,1) = {"
+aa
aa
aa
aa
@@ -22906,7 +18441,6 @@ aa
aa
aa
aa
-af
aa
aa
aa
@@ -23106,7 +18640,7 @@ aa
aa
aa
"}
-(20,1,1) = {"
+(25,1,1) = {"
aa
aa
aa
@@ -23363,7 +18897,7 @@ aa
aa
aa
"}
-(21,1,1) = {"
+(26,1,1) = {"
aa
aa
aa
@@ -23620,7 +19154,7 @@ aa
aa
aa
"}
-(22,1,1) = {"
+(27,1,1) = {"
aa
aa
aa
@@ -23877,7 +19411,7 @@ aa
aa
aa
"}
-(23,1,1) = {"
+(28,1,1) = {"
aa
aa
aa
@@ -24134,7 +19668,7 @@ aa
aa
aa
"}
-(24,1,1) = {"
+(29,1,1) = {"
aa
aa
aa
@@ -24391,7 +19925,7 @@ aa
aa
aa
"}
-(25,1,1) = {"
+(30,1,1) = {"
aa
aa
aa
@@ -24648,29 +20182,7 @@ aa
aa
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
+(31,1,1) = {"
aa
aa
aa
@@ -24904,8 +20416,6 @@ aa
aa
aa
aa
-"}
-(27,1,1) = {"
aa
aa
aa
@@ -24928,6 +20438,8 @@ aa
aa
aa
aa
+"}
+(32,1,1) = {"
aa
aa
aa
@@ -25161,8 +20673,6 @@ aa
aa
aa
aa
-"}
-(28,1,1) = {"
aa
aa
aa
@@ -25185,6 +20695,8 @@ aa
aa
aa
aa
+"}
+(33,1,1) = {"
aa
aa
aa
@@ -25418,8 +20930,6 @@ aa
aa
aa
aa
-"}
-(29,1,1) = {"
aa
aa
aa
@@ -25442,6 +20952,8 @@ aa
aa
aa
aa
+"}
+(34,1,1) = {"
aa
aa
aa
@@ -25675,8 +21187,6 @@ aa
aa
aa
aa
-"}
-(30,1,1) = {"
aa
aa
aa
@@ -25699,6 +21209,8 @@ aa
aa
aa
aa
+"}
+(35,1,1) = {"
aa
aa
aa
@@ -25761,6 +21273,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -25932,8 +21446,6 @@ aa
aa
aa
aa
-"}
-(31,1,1) = {"
aa
aa
aa
@@ -25954,6 +21466,8 @@ aa
aa
aa
aa
+"}
+(36,1,1) = {"
aa
aa
aa
@@ -26014,6 +21528,11 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
@@ -26189,8 +21708,6 @@ aa
aa
aa
aa
-"}
-(32,1,1) = {"
aa
aa
aa
@@ -26206,6 +21723,8 @@ aa
aa
aa
aa
+"}
+(37,1,1) = {"
aa
aa
aa
@@ -26265,6 +21784,11 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
@@ -26446,8 +21970,6 @@ aa
aa
aa
aa
-"}
-(33,1,1) = {"
aa
aa
aa
@@ -26458,6 +21980,8 @@ aa
aa
aa
aa
+"}
+(38,1,1) = {"
aa
aa
aa
@@ -26517,6 +22041,12 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -26703,12 +22233,12 @@ aa
aa
aa
aa
-"}
-(34,1,1) = {"
aa
aa
aa
aa
+"}
+(39,1,1) = {"
aa
aa
aa
@@ -26761,11 +22291,19 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -26956,12 +22494,12 @@ aa
aa
aa
aa
+"}
+(40,1,1) = {"
aa
aa
aa
aa
-"}
-(35,1,1) = {"
aa
aa
aa
@@ -27010,12 +22548,18 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -27024,8 +22568,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -27209,6 +22751,8 @@ aa
aa
aa
aa
+"}
+(41,1,1) = {"
aa
aa
aa
@@ -27217,8 +22761,6 @@ aa
aa
aa
aa
-"}
-(36,1,1) = {"
aa
aa
aa
@@ -27274,6 +22816,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -27282,8 +22825,6 @@ aa
af
af
af
-af
-af
aa
aa
aa
@@ -27467,6 +23008,11 @@ aa
aa
aa
aa
+"}
+(42,1,1) = {"
+aa
+aa
+aa
aa
aa
aa
@@ -27474,8 +23020,6 @@ aa
aa
aa
aa
-"}
-(37,1,1) = {"
aa
aa
aa
@@ -27535,8 +23079,6 @@ aa
aa
aa
aa
-af
-af
af
af
af
@@ -27723,6 +23265,8 @@ aa
aa
aa
aa
+"}
+(43,1,1) = {"
aa
aa
aa
@@ -27731,8 +23275,6 @@ aa
aa
aa
aa
-"}
-(38,1,1) = {"
aa
aa
aa
@@ -27781,6 +23323,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -27795,9 +23339,6 @@ aa
af
af
af
-af
-af
-af
aa
aa
aa
@@ -27981,6 +23522,10 @@ aa
aa
aa
aa
+"}
+(44,1,1) = {"
+aa
+aa
aa
aa
aa
@@ -27988,8 +23533,6 @@ aa
aa
aa
aa
-"}
-(39,1,1) = {"
aa
aa
aa
@@ -28037,13 +23580,13 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -28053,8 +23596,6 @@ af
af
af
af
-af
-af
aa
aa
aa
@@ -28238,6 +23779,9 @@ aa
aa
aa
aa
+"}
+(45,1,1) = {"
+aa
aa
aa
aa
@@ -28245,8 +23789,6 @@ aa
aa
aa
aa
-"}
-(40,1,1) = {"
aa
aa
aa
@@ -28290,6 +23832,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -28299,8 +23843,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -28494,21 +24036,8 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
"}
-(41,1,1) = {"
-aa
-aa
-aa
-aa
-aa
+(46,1,1) = {"
aa
aa
aa
@@ -28559,15 +24088,19 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
aa
aa
aa
+af
aa
aa
-af
aa
aa
aa
@@ -28759,8 +24292,9 @@ aa
aa
aa
aa
+aa
"}
-(42,1,1) = {"
+(47,1,1) = {"
aa
aa
aa
@@ -28811,12 +24345,17 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -28832,11 +24371,6 @@ aa
aa
af
af
-af
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -29017,7 +24551,7 @@ aa
aa
aa
"}
-(43,1,1) = {"
+(48,1,1) = {"
aa
aa
aa
@@ -29069,6 +24603,9 @@ aa
aa
aa
aa
+af
+af
+aa
aa
aa
aa
@@ -29076,6 +24613,8 @@ aa
aa
af
af
+af
+af
aa
aa
aa
@@ -29089,12 +24628,6 @@ aa
aa
af
af
-af
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -29201,6 +24734,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -29274,9 +24808,7 @@ aa
aa
aa
"}
-(44,1,1) = {"
-aa
-aa
+(49,1,1) = {"
aa
aa
aa
@@ -29333,12 +24865,19 @@ aa
aa
af
af
+af
aa
+af
+af
+af
+af
+af
aa
aa
aa
aa
-aa
+af
+af
aa
aa
aa
@@ -29350,6 +24889,7 @@ af
aa
aa
aa
+ab
aa
aa
aa
@@ -29524,17 +25064,14 @@ aa
aa
aa
aa
+"}
+(50,1,1) = {"
aa
aa
aa
aa
aa
aa
-"}
-(45,1,1) = {"
-aa
-aa
-aa
aa
aa
aa
@@ -29585,25 +25122,27 @@ aa
aa
af
af
+af
aa
+af
+af
+af
+af
+af
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+af
+af
+af
+af
+af
aa
aa
af
af
af
af
+af
aa
aa
aa
@@ -29782,13 +25321,13 @@ aa
aa
aa
aa
+"}
+(51,1,1) = {"
aa
aa
aa
aa
aa
-"}
-(46,1,1) = {"
aa
aa
aa
@@ -29838,21 +25377,29 @@ aa
aa
aa
aa
+af
+af
+af
aa
af
af
af
af
+af
aa
-aa
-aa
-aa
-aa
-aa
+af
+af
+af
+af
+af
af
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -30031,6 +25578,8 @@ aa
aa
aa
aa
+"}
+(52,1,1) = {"
aa
aa
aa
@@ -30044,11 +25593,6 @@ aa
aa
aa
aa
-"}
-(47,1,1) = {"
-aa
-aa
-aa
aa
aa
aa
@@ -30094,17 +25638,31 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
af
af
af
+af
+af
+af
aa
aa
aa
+af
+af
+af
+af
aa
aa
-aa
+af
+af
+af
+af
af
af
aa
@@ -30120,8 +25678,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -30279,6 +25835,10 @@ aa
aa
aa
aa
+"}
+(53,1,1) = {"
+aa
+aa
aa
aa
aa
@@ -30301,17 +25861,6 @@ aa
aa
aa
aa
-"}
-(48,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -30347,18 +25896,23 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
aa
af
af
-aa
-aa
-aa
+af
aa
aa
aa
@@ -30366,6 +25920,8 @@ af
af
af
af
+af
+af
aa
aa
aa
@@ -30377,9 +25933,6 @@ aa
aa
aa
aa
-af
-af
-aa
aa
aa
aa
@@ -30485,7 +26038,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -30540,6 +26092,8 @@ aa
aa
aa
aa
+"}
+(54,1,1) = {"
aa
aa
aa
@@ -30558,8 +26112,6 @@ aa
aa
aa
aa
-"}
-(49,1,1) = {"
aa
aa
aa
@@ -30601,25 +26153,29 @@ aa
aa
aa
aa
+af
aa
aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
aa
aa
+af
+af
aa
aa
aa
af
af
af
-aa
-af
-af
af
af
af
@@ -30627,20 +26183,17 @@ aa
aa
aa
aa
-af
+aa
+aa
+aa
af
aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
-ab
aa
aa
aa
@@ -30796,6 +26349,8 @@ aa
aa
aa
aa
+"}
+(55,1,1) = {"
aa
aa
aa
@@ -30815,8 +26370,6 @@ aa
aa
aa
aa
-"}
-(50,1,1) = {"
aa
aa
aa
@@ -30864,6 +26417,10 @@ aa
aa
aa
aa
+af
+af
+af
+aa
aa
aa
aa
@@ -30871,15 +26428,7 @@ aa
aa
aa
aa
-af
-af
-af
aa
-af
-af
-af
-af
-af
aa
aa
af
@@ -30889,11 +26438,6 @@ af
af
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -31062,6 +26606,8 @@ aa
aa
aa
aa
+"}
+(56,1,1) = {"
aa
aa
aa
@@ -31072,8 +26618,6 @@ aa
aa
aa
aa
-"}
-(51,1,1) = {"
aa
aa
aa
@@ -31125,37 +26669,26 @@ aa
aa
aa
aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
-af
-af
-af
aa
-af
-af
-af
-af
-af
aa
-af
-af
-af
-af
-af
-af
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
aa
-af
af
af
aa
@@ -31329,9 +26862,9 @@ aa
aa
aa
aa
-"}
-(52,1,1) = {"
aa
+"}
+(57,1,1) = {"
aa
aa
aa
@@ -31389,10 +26922,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
af
@@ -31404,18 +26933,8 @@ af
aa
aa
aa
-af
-af
-af
-af
aa
aa
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -31586,8 +27105,6 @@ aa
aa
aa
aa
-"}
-(53,1,1) = {"
aa
aa
aa
@@ -31603,6 +27120,9 @@ aa
aa
aa
aa
+"}
+(58,1,1) = {"
+aa
aa
aa
aa
@@ -31647,12 +27167,22 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
af
af
af
@@ -31661,15 +27191,11 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
-af
-af
-af
+aa
+aa
af
af
af
@@ -31843,8 +27369,6 @@ aa
aa
aa
aa
-"}
-(54,1,1) = {"
aa
aa
aa
@@ -31853,6 +27377,11 @@ aa
aa
aa
aa
+"}
+(59,1,1) = {"
+aa
+aa
+aa
aa
aa
aa
@@ -31904,7 +27433,6 @@ aa
aa
aa
aa
-af
aa
aa
aa
@@ -31914,15 +27442,13 @@ af
af
af
af
+af
+af
aa
aa
aa
aa
aa
-af
-af
-aa
-aa
aa
af
af
@@ -31937,8 +27463,6 @@ aa
aa
aa
aa
-af
-aa
aa
aa
aa
@@ -31948,6 +27472,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -32100,8 +27627,6 @@ aa
aa
aa
aa
-"}
-(55,1,1) = {"
aa
aa
aa
@@ -32109,6 +27634,8 @@ aa
aa
aa
aa
+"}
+(60,1,1) = {"
aa
aa
aa
@@ -32171,6 +27698,7 @@ aa
af
af
af
+af
aa
aa
aa
@@ -32178,10 +27706,9 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
+af
+af
+af
af
af
af
@@ -32202,6 +27729,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -32357,12 +27887,12 @@ aa
aa
aa
aa
-"}
-(56,1,1) = {"
aa
aa
aa
aa
+"}
+(61,1,1) = {"
aa
aa
aa
@@ -32420,20 +27950,36 @@ aa
aa
aa
aa
-af
aa
aa
aa
+af
+af
+af
+aa
+aa
aa
aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
aa
aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -32442,6 +27988,7 @@ aa
aa
af
af
+af
aa
aa
aa
@@ -32601,6 +28148,8 @@ aa
aa
aa
aa
+"}
+(62,1,1) = {"
aa
aa
aa
@@ -32614,10 +28163,6 @@ aa
aa
aa
aa
-"}
-(57,1,1) = {"
-aa
-aa
aa
aa
aa
@@ -32681,15 +28226,26 @@ af
af
af
af
+af
+af
+af
aa
aa
aa
+af
aa
+af
+af
+af
+af
aa
aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -32849,6 +28405,8 @@ aa
aa
aa
aa
+"}
+(63,1,1) = {"
aa
aa
aa
@@ -32871,19 +28429,6 @@ aa
aa
aa
aa
-"}
-(58,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -32938,18 +28483,18 @@ af
af
af
af
-aa
-aa
-aa
-aa
-aa
-aa
+af
+af
+af
aa
aa
aa
af
af
af
+af
+af
+af
aa
aa
aa
@@ -33117,6 +28662,11 @@ aa
aa
aa
aa
+"}
+(64,1,1) = {"
+aa
+aa
+aa
aa
aa
aa
@@ -33128,10 +28678,6 @@ aa
aa
aa
aa
-"}
-(59,1,1) = {"
-aa
-aa
aa
aa
aa
@@ -33195,13 +28741,11 @@ af
af
af
af
+af
aa
aa
aa
aa
-aa
-aa
-af
af
af
af
@@ -33223,9 +28767,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -33378,6 +28919,8 @@ aa
aa
aa
aa
+"}
+(65,1,1) = {"
aa
aa
aa
@@ -33385,8 +28928,6 @@ aa
aa
aa
aa
-"}
-(60,1,1) = {"
aa
aa
aa
@@ -33446,18 +28987,11 @@ aa
aa
aa
aa
-af
-af
-af
-af
-aa
aa
aa
aa
aa
aa
-aa
-af
af
af
af
@@ -33468,6 +29002,12 @@ af
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -33480,12 +29020,6 @@ aa
aa
aa
aa
-af
-af
-af
-aa
-aa
-aa
aa
aa
aa
@@ -33643,9 +29177,7 @@ aa
aa
aa
"}
-(61,1,1) = {"
-aa
-aa
+(66,1,1) = {"
aa
aa
aa
@@ -33706,7 +29238,6 @@ aa
aa
af
af
-af
aa
aa
aa
@@ -33714,15 +29245,8 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
-af
-af
+aa
+aa
aa
aa
aa
@@ -33735,8 +29259,9 @@ aa
aa
aa
aa
-aa
-aa
+af
+af
+af
af
af
af
@@ -33755,6 +29280,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -33767,6 +29293,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -33899,21 +29428,13 @@ aa
aa
aa
aa
-"}
-(62,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
aa
aa
+"}
+(67,1,1) = {"
aa
aa
aa
@@ -33975,15 +29496,7 @@ af
af
af
af
-af
-af
-af
-af
-af
-aa
-aa
aa
-af
aa
af
af
@@ -33994,9 +29507,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -34007,10 +29517,16 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -34034,6 +29550,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -34156,8 +29675,6 @@ aa
aa
aa
aa
-"}
-(63,1,1) = {"
aa
aa
aa
@@ -34173,6 +29690,10 @@ aa
aa
aa
aa
+"}
+(68,1,1) = {"
+aa
+aa
aa
aa
aa
@@ -34228,20 +29749,12 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
af
af
af
af
aa
aa
-aa
-af
-af
af
af
af
@@ -34263,10 +29776,14 @@ aa
aa
aa
aa
+af
aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -34290,6 +29807,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -34413,8 +29933,6 @@ aa
aa
aa
aa
-"}
-(64,1,1) = {"
aa
aa
aa
@@ -34429,6 +29947,8 @@ aa
aa
aa
aa
+"}
+(69,1,1) = {"
aa
aa
aa
@@ -34490,11 +30010,6 @@ af
af
af
af
-af
-af
-af
-aa
-aa
aa
aa
af
@@ -34510,6 +30025,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -34518,6 +30036,12 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -34670,15 +30194,6 @@ aa
aa
aa
aa
-"}
-(65,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -34689,6 +30204,8 @@ aa
aa
aa
aa
+"}
+(70,1,1) = {"
aa
aa
aa
@@ -34745,24 +30262,29 @@ aa
aa
af
af
+aa
af
af
af
af
-af
-aa
aa
aa
af
af
af
af
-af
-af
aa
aa
aa
aa
+ab
+aa
+aa
+aa
+af
+af
+af
+af
aa
aa
aa
@@ -34771,6 +30293,12 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -34927,14 +30455,14 @@ aa
aa
aa
aa
-"}
-(66,1,1) = {"
aa
aa
aa
aa
aa
aa
+"}
+(71,1,1) = {"
aa
aa
aa
@@ -34989,6 +30517,14 @@ aa
aa
af
af
+af
+af
+af
+af
+af
+af
+aa
+aa
aa
aa
aa
@@ -35010,6 +30546,10 @@ aa
aa
aa
aa
+aa
+aa
+aa
+aa
af
af
af
@@ -35018,6 +30558,7 @@ af
af
aa
aa
+ab
aa
aa
aa
@@ -35031,10 +30572,6 @@ aa
aa
aa
aa
-af
-aa
-aa
-aa
aa
aa
aa
@@ -35044,9 +30581,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -35185,12 +30719,7 @@ aa
aa
aa
"}
-(67,1,1) = {"
-aa
-aa
-aa
-aa
-aa
+(72,1,1) = {"
aa
aa
aa
@@ -35247,8 +30776,6 @@ af
af
af
af
-aa
-aa
af
af
af
@@ -35263,6 +30790,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -35271,17 +30799,17 @@ aa
af
af
af
-af
aa
aa
aa
aa
-af
-af
aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -35301,9 +30829,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -35330,6 +30855,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -35441,8 +30967,6 @@ aa
aa
aa
aa
-"}
-(68,1,1) = {"
aa
aa
aa
@@ -35451,6 +30975,10 @@ aa
aa
aa
aa
+"}
+(73,1,1) = {"
+aa
+aa
aa
aa
aa
@@ -35504,8 +31032,6 @@ af
af
af
af
-aa
-aa
af
af
af
@@ -35520,21 +31046,22 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
aa
aa
+af
+aa
aa
aa
-af
aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -35558,9 +31085,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -35698,8 +31222,6 @@ aa
aa
aa
aa
-"}
-(69,1,1) = {"
aa
aa
aa
@@ -35710,6 +31232,8 @@ aa
aa
aa
aa
+"}
+(74,1,1) = {"
aa
aa
aa
@@ -35749,6 +31273,10 @@ aa
aa
aa
aa
+af
+aa
+aa
+aa
aa
aa
aa
@@ -35761,9 +31289,6 @@ af
af
af
af
-aa
-aa
-af
af
af
af
@@ -35776,6 +31301,9 @@ aa
aa
aa
aa
+aa
+af
+af
af
af
af
@@ -35789,16 +31317,6 @@ aa
aa
af
af
-af
-af
-af
-af
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -35817,6 +31335,22 @@ aa
aa
aa
aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -35956,11 +31490,7 @@ aa
aa
aa
"}
-(70,1,1) = {"
-aa
-aa
-aa
-aa
+(75,1,1) = {"
aa
aa
aa
@@ -36000,6 +31530,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -36013,14 +31544,9 @@ aa
aa
af
af
-aa
-af
af
af
af
-aa
-aa
-af
af
af
af
@@ -36028,7 +31554,8 @@ aa
aa
aa
aa
-ab
+aa
+aa
aa
aa
aa
@@ -36036,6 +31563,7 @@ af
af
af
af
+af
aa
aa
aa
@@ -36043,24 +31571,30 @@ aa
aa
aa
aa
-aa
-af
-af
af
af
af
-af
-aa
-aa
-aa
aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
+af
aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -36213,7 +31747,7 @@ aa
aa
aa
"}
-(71,1,1) = {"
+(76,1,1) = {"
aa
aa
aa
@@ -36271,9 +31805,6 @@ af
af
af
af
-af
-af
-af
aa
aa
aa
@@ -36285,6 +31816,12 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+aa
aa
aa
aa
@@ -36293,10 +31830,18 @@ aa
af
af
af
+af
+af
aa
aa
aa
-aa
+af
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -36307,9 +31852,9 @@ af
af
af
af
+af
aa
aa
-ab
aa
aa
aa
@@ -36458,6 +32003,8 @@ aa
aa
aa
aa
+"}
+(77,1,1) = {"
aa
aa
aa
@@ -36469,8 +32016,6 @@ aa
aa
aa
aa
-"}
-(72,1,1) = {"
aa
aa
aa
@@ -36514,6 +32059,12 @@ aa
aa
aa
aa
+af
+af
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -36526,11 +32077,6 @@ aa
af
af
af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -36538,10 +32084,19 @@ aa
aa
aa
aa
+af
+af
+af
+af
+aa
aa
aa
aa
af
+af
+af
+af
+af
aa
aa
aa
@@ -36550,6 +32105,11 @@ aa
af
af
af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -36558,9 +32118,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -36606,7 +32163,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -36704,6 +32260,8 @@ aa
aa
aa
aa
+"}
+(78,1,1) = {"
aa
aa
aa
@@ -36726,8 +32284,6 @@ aa
aa
aa
aa
-"}
-(73,1,1) = {"
aa
aa
aa
@@ -36781,31 +32337,37 @@ aa
aa
af
af
+aa
+aa
+aa
+aa
af
af
af
af
af
-af
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
af
af
af
+af
+af
aa
aa
aa
aa
aa
af
+af
+af
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -36955,6 +32517,8 @@ aa
aa
aa
aa
+"}
+(79,1,1) = {"
aa
aa
aa
@@ -36983,8 +32547,6 @@ aa
aa
aa
aa
-"}
-(74,1,1) = {"
aa
aa
aa
@@ -37024,14 +32586,14 @@ aa
aa
aa
aa
-af
-aa
aa
aa
aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -37041,10 +32603,11 @@ af
af
af
af
+aa
+aa
+aa
af
af
-af
-aa
aa
aa
aa
@@ -37058,6 +32621,11 @@ af
af
af
af
+af
+af
+af
+af
+aa
aa
aa
aa
@@ -37066,8 +32634,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -37086,9 +32652,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -37117,6 +32680,8 @@ aa
aa
aa
aa
+ab
+aa
aa
aa
aa
@@ -37209,6 +32774,8 @@ aa
aa
aa
aa
+"}
+(80,1,1) = {"
aa
aa
aa
@@ -37240,8 +32807,6 @@ aa
aa
aa
aa
-"}
-(75,1,1) = {"
aa
aa
aa
@@ -37268,6 +32833,14 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
+aa
+aa
aa
aa
aa
@@ -37276,12 +32849,20 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
aa
aa
af
+af
+af
+aa
+aa
+aa
aa
aa
aa
@@ -37293,7 +32874,6 @@ aa
aa
aa
aa
-af
af
af
af
@@ -37310,11 +32890,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -37322,30 +32897,14 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -37472,6 +33031,38 @@ aa
aa
aa
aa
+"}
+(81,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
@@ -37497,8 +33088,30 @@ aa
aa
aa
aa
-"}
-(76,1,1) = {"
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
aa
aa
aa
@@ -37518,6 +33131,14 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
+af
+aa
aa
aa
aa
@@ -37551,11 +33172,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -37567,43 +33183,19 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -37696,6 +33288,8 @@ aa
aa
aa
aa
+"}
+(82,1,1) = {"
aa
aa
aa
@@ -37754,8 +33348,12 @@ aa
aa
aa
aa
-"}
-(77,1,1) = {"
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -37765,6 +33363,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -37779,6 +33378,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -37810,8 +33412,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -37825,9 +33425,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -37835,32 +33432,15 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -37965,6 +33545,8 @@ aa
aa
aa
aa
+"}
+(83,1,1) = {"
aa
aa
aa
@@ -38009,10 +33591,10 @@ aa
aa
aa
aa
+af
+af
aa
aa
-"}
-(78,1,1) = {"
aa
aa
aa
@@ -38023,6 +33605,12 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -38032,6 +33620,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -38046,6 +33635,10 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -38086,39 +33679,18 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -38230,6 +33802,8 @@ aa
aa
aa
aa
+"}
+(84,1,1) = {"
aa
aa
aa
@@ -38268,14 +33842,14 @@ aa
aa
aa
aa
-"}
-(79,1,1) = {"
aa
aa
aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -38289,7 +33863,11 @@ aa
aa
aa
aa
+af
+af
+af
aa
+af
aa
aa
aa
@@ -38314,6 +33892,11 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
@@ -38329,6 +33912,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -38343,22 +33928,13 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
-af
-af
aa
aa
aa
@@ -38367,16 +33943,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
-af
-af
-aa
aa
aa
aa
@@ -38430,8 +33996,6 @@ aa
aa
aa
aa
-ab
-aa
aa
aa
aa
@@ -38495,6 +34059,8 @@ aa
aa
aa
aa
+"}
+(85,1,1) = {"
aa
aa
aa
@@ -38525,8 +34091,6 @@ aa
aa
aa
aa
-"}
-(80,1,1) = {"
aa
aa
aa
@@ -38600,17 +34164,11 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -38626,13 +34184,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -38765,6 +34316,15 @@ aa
aa
aa
aa
+"}
+(86,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -38782,8 +34342,6 @@ aa
aa
aa
aa
-"}
-(81,1,1) = {"
aa
aa
aa
@@ -38838,10 +34396,16 @@ aa
aa
aa
aa
+af
+af
+aa
+aa
aa
aa
aa
aa
+aa
+af
af
af
af
@@ -38857,9 +34421,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -38883,13 +34444,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -39019,6 +34573,8 @@ aa
aa
aa
aa
+"}
+(87,1,1) = {"
aa
aa
aa
@@ -39039,8 +34595,6 @@ aa
aa
aa
aa
-"}
-(82,1,1) = {"
aa
aa
aa
@@ -39101,6 +34655,15 @@ aa
aa
af
af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
af
af
af
@@ -39114,7 +34677,6 @@ aa
aa
aa
aa
-af
aa
aa
aa
@@ -39130,9 +34692,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -39141,11 +34700,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -39276,6 +34830,9 @@ aa
aa
aa
aa
+"}
+(88,1,1) = {"
+aa
aa
aa
aa
@@ -39296,8 +34853,6 @@ aa
aa
aa
aa
-"}
-(83,1,1) = {"
aa
aa
aa
@@ -39344,10 +34899,9 @@ aa
aa
af
af
-aa
-aa
-aa
-aa
+af
+af
+af
aa
aa
aa
@@ -39360,6 +34914,12 @@ af
af
af
af
+aa
+aa
+aa
+aa
+aa
+aa
af
af
aa
@@ -39371,7 +34931,6 @@ aa
aa
aa
aa
-af
aa
aa
aa
@@ -39387,10 +34946,25 @@ aa
aa
aa
aa
-af
-af
-af
-af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+yS
+aa
+aa
aa
aa
aa
@@ -39513,6 +35087,14 @@ aa
aa
aa
aa
+"}
+(89,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -39553,26 +35135,6 @@ aa
aa
aa
aa
-"}
-(84,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -39592,6 +35154,11 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
@@ -39601,6 +35168,9 @@ aa
aa
af
af
+af
+af
+af
aa
aa
aa
@@ -39614,11 +35184,7 @@ aa
aa
aa
aa
-af
-af
-af
aa
-af
aa
aa
aa
@@ -39644,12 +35210,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-aa
aa
aa
aa
@@ -39784,6 +35344,8 @@ aa
aa
aa
aa
+"}
+(90,1,1) = {"
aa
aa
aa
@@ -39810,8 +35372,6 @@ aa
aa
aa
aa
-"}
-(85,1,1) = {"
aa
aa
aa
@@ -39847,6 +35407,15 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -39854,6 +35423,11 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
@@ -39870,6 +35444,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -39900,12 +35475,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -39921,16 +35490,13 @@ aa
aa
aa
aa
-af
-af
-aa
-aa
aa
aa
aa
aa
aa
aa
+ab
aa
aa
aa
@@ -40035,6 +35601,8 @@ aa
aa
aa
aa
+"}
+(91,1,1) = {"
aa
aa
aa
@@ -40067,8 +35635,6 @@ aa
aa
aa
aa
-"}
-(86,1,1) = {"
aa
aa
aa
@@ -40098,6 +35664,14 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -40106,6 +35680,10 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -40123,6 +35701,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -40147,8 +35727,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -40157,12 +35735,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -40220,6 +35792,7 @@ aa
aa
aa
aa
+GQ
aa
aa
aa
@@ -40285,6 +35858,8 @@ aa
aa
aa
aa
+"}
+(92,1,1) = {"
aa
aa
aa
@@ -40324,8 +35899,6 @@ aa
aa
aa
aa
-"}
-(87,1,1) = {"
aa
aa
aa
@@ -40348,8 +35921,14 @@ aa
aa
aa
aa
+af
+af
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -40371,10 +35950,17 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -40404,8 +35990,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -40415,11 +35999,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -40470,6 +36049,7 @@ aa
aa
aa
aa
+GJ
aa
aa
aa
@@ -40535,6 +36115,8 @@ aa
aa
aa
aa
+"}
+(93,1,1) = {"
aa
aa
aa
@@ -40581,8 +36163,6 @@ aa
aa
aa
aa
-"}
-(88,1,1) = {"
aa
aa
aa
@@ -40593,6 +36173,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -40621,12 +36202,21 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -40648,11 +36238,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -40661,10 +36246,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
@@ -40672,8 +36253,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -40720,6 +36299,29 @@ aa
aa
aa
aa
+XI
+GB
+GB
+GB
+GB
+GB
+GB
+UX
+GB
+GB
+GB
+GB
+GB
+GB
+ds
+sx
+sx
+sx
+sx
+sx
+sx
+sx
+sx
aa
aa
aa
@@ -40770,6 +36372,8 @@ aa
aa
aa
aa
+"}
+(94,1,1) = {"
aa
aa
aa
@@ -40838,8 +36442,6 @@ aa
aa
aa
aa
-"}
-(89,1,1) = {"
aa
aa
aa
@@ -40857,11 +36459,21 @@ aa
aa
aa
aa
+af
+af
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -40905,11 +36517,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -40917,11 +36524,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -40954,9 +36556,29 @@ aa
aa
aa
aa
+GF
+FE
+FE
+FE
+Gh
+Gh
aa
+GH
aa
+Gh
+Gh
+FE
+FE
+FE
+VM
+tl
+xZ
+tl
+xZ
+tl
+xZ
aa
+sx
aa
aa
aa
@@ -40971,7 +36593,6 @@ aa
aa
aa
aa
-yS
aa
aa
aa
@@ -41008,6 +36629,8 @@ aa
aa
aa
aa
+"}
+(95,1,1) = {"
aa
aa
aa
@@ -41080,6 +36703,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -41090,14 +36716,19 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
+af
+af
+af
+af
aa
aa
-"}
-(90,1,1) = {"
aa
+af
aa
aa
aa
@@ -41118,6 +36749,18 @@ aa
aa
aa
aa
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
aa
aa
aa
@@ -41158,15 +36801,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -41174,17 +36808,34 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
aa
aa
+GF
+FF
+Ga
+Ga
+Ga
+Ga
+Gw
+Jt
+GM
+GN
+GN
+GN
+GN
+GO
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -41235,6 +36886,8 @@ aa
aa
aa
aa
+"}
+(96,1,1) = {"
aa
aa
aa
@@ -41306,16 +36959,28 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
+af
+af
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -41328,6 +36993,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -41339,6 +37006,18 @@ aa
aa
aa
aa
+ad
+ad
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+ac
aa
aa
aa
@@ -41352,8 +37031,6 @@ aa
aa
aa
aa
-"}
-(91,1,1) = {"
aa
aa
aa
@@ -41393,11 +37070,32 @@ aa
aa
aa
aa
+GF
+FG
+FG
+FG
+FG
+FG
aa
+Jt
aa
+FG
+FG
+FG
+FG
+FG
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
+ab
aa
aa
aa
@@ -41415,14 +37113,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -41431,10 +37121,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
@@ -41453,11 +37139,12 @@ aa
aa
aa
aa
-af
aa
aa
aa
aa
+"}
+(97,1,1) = {"
aa
aa
aa
@@ -41492,7 +37179,6 @@ aa
aa
aa
aa
-jc
aa
aa
aa
@@ -41522,16 +37208,25 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -41540,6 +37235,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -41554,6 +37250,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -41564,6 +37262,19 @@ aa
aa
aa
aa
+ad
+ad
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+ac
aa
aa
aa
@@ -41609,8 +37320,6 @@ aa
aa
aa
aa
-"}
-(92,1,1) = {"
aa
aa
aa
@@ -41618,17 +37327,29 @@ aa
aa
aa
aa
+GF
aa
aa
+ad
aa
aa
aa
+Jt
aa
aa
aa
+ad
aa
aa
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -41672,19 +37393,15 @@ aa
aa
aa
aa
-af
-af
aa
aa
-af
-af
-af
-af
aa
aa
aa
aa
aa
+"}
+(98,1,1) = {"
aa
aa
aa
@@ -41702,16 +37419,10 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -41762,6 +37473,10 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -41804,6 +37519,19 @@ aa
aa
aa
aa
+ad
+ad
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+ac
aa
aa
aa
@@ -41856,9 +37584,29 @@ aa
aa
aa
aa
+GF
+FE
+FE
+FE
+FE
+FE
aa
+Jt
aa
+FE
+FE
+FE
+FE
+FE
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -41866,8 +37614,6 @@ aa
aa
aa
aa
-"}
-(93,1,1) = {"
aa
aa
aa
@@ -41911,6 +37657,8 @@ aa
aa
aa
aa
+"}
+(99,1,1) = {"
aa
aa
aa
@@ -41924,7 +37672,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -41953,23 +37700,12 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
@@ -41994,6 +37730,10 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -42036,6 +37776,19 @@ aa
aa
aa
aa
+ad
+ad
+Pp
+Pp
+Pp
+Pp
+LJ
+Pp
+Pp
+Pp
+Pp
+Pp
+ac
aa
aa
aa
@@ -42088,7 +37841,29 @@ aa
aa
aa
aa
+GF
+FF
+Ga
+Ga
+Ga
+Ga
+Gw
+Jt
+GM
+GN
+GN
+GN
+GN
+GO
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -42123,8 +37898,6 @@ aa
aa
aa
aa
-"}
-(94,1,1) = {"
aa
aa
aa
@@ -42141,6 +37914,8 @@ aa
aa
aa
aa
+"}
+(100,1,1) = {"
aa
aa
aa
@@ -42210,20 +37985,16 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
af
af
af
af
-af
aa
aa
aa
-af
+aa
af
af
aa
@@ -42261,6 +38032,20 @@ aa
aa
aa
aa
+ad
+ad
+ad
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+ac
aa
aa
aa
@@ -42313,9 +38098,29 @@ aa
aa
aa
aa
+GF
+FG
+FG
+FG
+FG
+FG
aa
+Jt
aa
+FG
+FG
+FG
+FG
+FG
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -42366,6 +38171,8 @@ aa
aa
aa
aa
+"}
+(101,1,1) = {"
aa
aa
aa
@@ -42380,9 +38187,6 @@ aa
aa
aa
aa
-"}
-(95,1,1) = {"
-aa
aa
aa
aa
@@ -42431,6 +38235,10 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -42444,6 +38252,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -42454,9 +38265,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -42467,22 +38275,12 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -42491,6 +38289,20 @@ aa
aa
aa
aa
+ad
+ad
+ad
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+ac
aa
aa
aa
@@ -42543,17 +38355,29 @@ aa
aa
aa
aa
+GF
aa
aa
+ad
aa
aa
aa
+Jt
aa
aa
aa
+ad
aa
aa
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -42604,6 +38428,8 @@ aa
aa
aa
aa
+"}
+(102,1,1) = {"
aa
aa
aa
@@ -42637,8 +38463,6 @@ aa
aa
aa
aa
-"}
-(96,1,1) = {"
aa
aa
aa
@@ -42668,6 +38492,11 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
@@ -42679,6 +38508,10 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -42695,6 +38528,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -42710,29 +38544,32 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
+ad
+ad
+ad
+ad
+ad
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+Pp
+ac
aa
aa
aa
-af
-af
-af
aa
aa
aa
aa
-af
-af
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -42758,31 +38595,6 @@ aa
aa
aa
aa
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ad
-la
-PN
-kZ
-ad
-ad
-ad
-la
-PN
-kZ
-PN
-la
-aa
aa
aa
aa
@@ -42800,9 +38612,29 @@ aa
aa
aa
aa
+GF
+dl
+dl
+dl
+dl
+dl
aa
+Jt
aa
+dl
+dl
+dl
+dl
+dl
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -42821,7 +38653,6 @@ aa
aa
aa
aa
-GQ
aa
aa
aa
@@ -42854,6 +38685,8 @@ aa
aa
aa
aa
+"}
+(103,1,1) = {"
aa
aa
aa
@@ -42894,8 +38727,6 @@ aa
aa
aa
aa
-"}
-(97,1,1) = {"
aa
aa
aa
@@ -42917,6 +38748,12 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -42928,6 +38765,9 @@ aa
aa
aa
aa
+af
+af
+af
aa
aa
aa
@@ -42940,9 +38780,11 @@ aa
aa
aa
aa
+af
aa
aa
aa
+af
aa
aa
aa
@@ -42959,25 +38801,31 @@ aa
aa
aa
aa
-af
-af
aa
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+au
+cy
+ie
+ie
+cy
+au
+AC
+ac
aa
aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -42987,7 +38835,6 @@ aa
aa
aa
aa
-af
aa
aa
aa
@@ -43002,8 +38849,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -43015,38 +38860,38 @@ aa
aa
aa
aa
-ad
-ad
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-ac
-ad
-la
-PY
-kZ
-ad
-ad
-ad
-la
-Nu
-kZ
-Bj
-la
-aa
+WU
+CZ
+WU
aa
aa
aa
aa
aa
aa
+GF
+RF
+tj
+tj
+tj
+tj
+Gw
+Jt
+GM
+YF
+YF
+YF
+YF
+NM
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -43078,7 +38923,6 @@ aa
aa
aa
aa
-GJ
aa
aa
aa
@@ -43096,9 +38940,10 @@ aa
aa
aa
aa
-ab
aa
aa
+"}
+(104,1,1) = {"
aa
aa
aa
@@ -43151,8 +38996,7 @@ aa
aa
aa
aa
-"}
-(98,1,1) = {"
+ab
aa
aa
aa
@@ -43161,6 +39005,12 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
+af
aa
aa
aa
@@ -43187,6 +39037,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -43206,7 +39057,22 @@ aa
aa
aa
aa
+WY
aa
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+au
+cy
+iV
+Rh
+cy
+au
+ac
aa
aa
aa
@@ -43218,16 +39084,13 @@ aa
aa
aa
aa
+ab
aa
aa
aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
@@ -43239,6 +39102,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -43251,16 +39115,41 @@ aa
aa
aa
aa
+PD
+PD
+fG
+jC
+kx
+PD
+PD
aa
aa
aa
aa
+GF
+ua
+ua
+ua
+ua
+ua
aa
+Jt
aa
+ua
+ua
+ua
+ua
+ua
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
-af
-af
aa
aa
aa
@@ -43271,31 +39160,6 @@ aa
aa
aa
aa
-ad
-ad
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-ac
-ad
-la
-Qp
-kZ
-ad
-ad
-ad
-la
-Qp
-kZ
-Qp
-la
aa
aa
aa
@@ -43335,7 +39199,8 @@ aa
aa
aa
aa
-GJ
+"}
+(105,1,1) = {"
aa
aa
aa
@@ -43398,6 +39263,11 @@ aa
aa
aa
aa
+af
+af
+af
+af
+af
aa
aa
aa
@@ -43408,8 +39278,6 @@ aa
aa
aa
aa
-"}
-(99,1,1) = {"
aa
aa
aa
@@ -43443,6 +39311,25 @@ aa
aa
aa
aa
+ad
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+cy
+hP
+jU
+cy
+au
+au
aa
aa
aa
@@ -43481,24 +39368,44 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
+PD
+PD
+PD
+Ki
+kC
+QA
+ma
+ze
+PD
+PD
+PD
+PD
aa
+GF
aa
aa
+ad
aa
aa
aa
+Jt
aa
aa
aa
+ad
aa
aa
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -43528,40 +39435,6 @@ aa
aa
aa
aa
-ad
-ad
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-ac
-ad
-Zb
-Qp
-kZ
-ad
-ad
-ad
-Zb
-Qp
-kZ
-Qp
-Zb
-ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -43583,22 +39456,13 @@ aa
aa
aa
aa
+"}
+(106,1,1) = {"
aa
aa
aa
-FE
-FE
-FE
-Gh
-Gh
aa
-GH
aa
-Gh
-Gh
-FE
-FE
-FE
aa
aa
aa
@@ -43656,6 +39520,10 @@ aa
aa
aa
aa
+af
+af
+af
+af
aa
aa
aa
@@ -43665,8 +39533,6 @@ aa
aa
aa
aa
-"}
-(100,1,1) = {"
aa
aa
aa
@@ -43694,11 +39560,33 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
aa
aa
+ad
+cb
+ck
+cy
+cM
+de
+dB
+cc
+fi
+fL
+fi
+gj
+gL
+ho
+eE
+fB
+Vy
+hQ
+fq
+au
aa
aa
aa
@@ -43738,17 +39626,43 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
+PD
+hv
+un
+fg
+ru
+Rw
+ru
+le
+bp
+sX
+bc
+PD
aa
+GF
+FE
+FE
+FE
+FE
+FE
aa
+Jt
aa
-af
-af
+FE
+FE
+FE
+FE
+FE
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -43785,39 +39699,6 @@ aa
aa
aa
aa
-ad
-ad
-Pp
-Pp
-Pp
-Pp
-LJ
-Pp
-Pp
-Pp
-Pp
-Pp
-kZ
-kZ
-la
-OT
-Sd
-kZ
-la
-kZ
-la
-OT
-Sd
-OT
-la
-ad
-kZ
-la
-la
-kZ
-kZ
-kZ
-kZ
aa
aa
aa
@@ -43832,6 +39713,8 @@ aa
aa
aa
aa
+"}
+(107,1,1) = {"
aa
aa
aa
@@ -43843,19 +39726,6 @@ aa
aa
aa
aa
-FF
-Ga
-Ga
-Ga
-Ga
-Gw
-Jt
-GM
-GN
-GN
-GN
-GN
-GO
aa
aa
aa
@@ -43910,6 +39780,7 @@ aa
aa
aa
aa
+af
aa
aa
aa
@@ -43922,8 +39793,6 @@ aa
aa
aa
aa
-"}
-(101,1,1) = {"
aa
aa
aa
@@ -43948,6 +39817,33 @@ aa
aa
aa
aa
+af
+af
+ad
+ad
+ad
+ad
+ad
+ad
+cn
+cn
+au
+cz
+dC
+tu
+cl
+dI
+fj
+fM
+yO
+Rm
+ZA
+SO
+dI
+Xu
+Pe
+IH
+au
aa
aa
aa
@@ -43986,14 +39882,44 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
+PD
+Du
+Ab
+bN
+jM
+eR
+kq
+nw
+um
+oS
+kv
+PD
aa
+GF
+FF
+Ga
+Ga
+Ga
+Ga
+Gw
+Jt
+GM
+GN
+GN
+GN
+GN
+GO
+VM
+oC
+mT
+mT
+mT
+mT
+mT
aa
+sx
aa
aa
aa
@@ -44003,9 +39929,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -44041,46 +39964,14 @@ aa
aa
aa
aa
-ad
-ad
-ad
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-kZ
-lI
-mh
-Ry
-mh
-oh
-oH
-rc
-mh
-Ry
-mh
-rW
-kZ
-ad
-kZ
-uB
-mS
-vO
-mP
-mO
-Uz
aa
aa
aa
aa
aa
aa
+"}
+(108,1,1) = {"
aa
aa
aa
@@ -44100,19 +39991,8 @@ aa
aa
aa
aa
-FG
-FG
-FG
-FG
-FG
aa
-Jt
aa
-FG
-FG
-FG
-FG
-FG
aa
aa
aa
@@ -44148,39 +40028,7 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(102,1,1) = {"
+af
aa
aa
aa
@@ -44233,21 +40081,26 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-af
-af
-af
-af
-af
+ad
+cd
+cn
+cy
+cO
+dq
+dI
+dI
+eF
+fk
+fN
+gk
+fN
+Mq
+hR
+SR
+iU
+dI
+jV
+au
aa
aa
aa
@@ -44259,10 +40112,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
@@ -44292,46 +40141,44 @@ aa
aa
aa
aa
+PD
+Zo
+Yy
+bO
+pi
+kN
+gE
+cG
+lt
+oS
+Sm
+PD
aa
+GF
+FG
+FG
+FG
+FG
+FG
aa
+GI
aa
+FG
+FG
+FG
+FG
+FG
+zX
+nD
+tk
+nD
+tk
+nD
+mT
aa
+sx
aa
aa
-ad
-ad
-ad
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-la
-lJ
-mi
-mR
-nB
-mS
-mS
-mS
-mS
-mR
-rm
-rX
-kZ
-kZ
-kZ
-uC
-mS
-vP
-kZ
-kZ
-kZ
aa
aa
aa
@@ -44359,16 +40206,12 @@ aa
aa
aa
aa
-ad
aa
aa
aa
-Jt
aa
aa
aa
-ad
-aa
aa
aa
aa
@@ -44384,6 +40227,8 @@ aa
aa
aa
aa
+"}
+(109,1,1) = {"
aa
aa
aa
@@ -44436,8 +40281,6 @@ aa
aa
aa
aa
-"}
-(103,1,1) = {"
aa
aa
aa
@@ -44496,15 +40339,28 @@ aa
aa
aa
aa
+cd
+Ow
+au
+cP
+dE
+eY
+dI
+ej
+fl
+fO
+gl
+fO
+fF
+hS
+fJ
+hS
+dI
+jW
+au
aa
aa
aa
-af
-af
-af
-af
-af
-af
aa
aa
aa
@@ -44516,9 +40372,6 @@ aa
aa
aa
aa
-af
-af
-af
aa
aa
aa
@@ -44532,12 +40385,9 @@ aa
aa
aa
aa
-af
aa
aa
aa
-af
-af
aa
aa
aa
@@ -44548,47 +40398,46 @@ aa
aa
aa
aa
+PD
+gU
+CJ
+md
+MI
+zH
+PI
+cX
+eS
+Nc
+nR
+PD
aa
+Yr
+GB
+GB
+GB
+GB
+GB
+IR
+Xc
+WE
+GB
+GB
+GB
+GB
+GB
+GC
+GC
+GC
+GC
+GC
+Wz
+nD
aa
+sx
aa
aa
aa
aa
-ad
-ad
-ad
-ad
-ad
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-Pp
-la
-MG
-Rn
-Da
-Db
-PX
-PX
-PX
-PX
-rE
-rn
-Vs
-mS
-te
-mS
-mS
-nB
-nB
-mS
-xf
-la
aa
aa
aa
@@ -44614,19 +40463,8 @@ aa
aa
aa
aa
-FE
-FE
-FE
-FE
-FE
aa
-Jt
aa
-FE
-FE
-FE
-FE
-FE
aa
aa
aa
@@ -44646,6 +40484,8 @@ aa
aa
aa
aa
+"}
+(110,1,1) = {"
aa
aa
aa
@@ -44693,8 +40533,6 @@ aa
aa
aa
aa
-"}
-(104,1,1) = {"
aa
aa
aa
@@ -44740,6 +40578,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -44747,7 +40587,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -44756,12 +40595,26 @@ aa
aa
aa
aa
-af
-af
-af
-af
-af
-af
+ad
+ce
+cm
+cy
+cN
+dq
+dI
+dI
+dI
+fm
+Rq
+cf
+gM
+Zk
+hT
+NI
+iW
+ZA
+jX
+au
aa
aa
aa
@@ -44789,13 +40642,6 @@ aa
aa
aa
aa
-af
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -44805,6 +40651,22 @@ aa
aa
aa
aa
+DD
+DD
+DD
+DD
+PD
+NW
+pQ
+gi
+vq
+YM
+Ls
+vk
+tD
+bb
+if
+PD
aa
aa
aa
@@ -44812,48 +40674,23 @@ aa
aa
aa
ad
+XO
+AB
+XO
ad
-ad
-ad
-ad
-ad
-ad
-au
-ie
-cy
-cy
-ie
-au
-ad
-kZ
-lK
-mj
-mS
-Sn
-oi
-oI
-oI
-pY
-oI
-ro
-MY
-oI
-tf
-tW
-mS
-mS
-mS
-mS
-xf
-la
aa
aa
+ad
aa
aa
aa
aa
aa
aa
+ad
+ad
+sx
+sx
aa
aa
aa
@@ -44871,19 +40708,6 @@ aa
aa
aa
aa
-FF
-Ga
-Ga
-Ga
-Ga
-Gw
-Jt
-GM
-GN
-GN
-GN
-GN
-GO
aa
aa
aa
@@ -44917,6 +40741,8 @@ aa
aa
aa
aa
+"}
+(111,1,1) = {"
aa
aa
aa
@@ -44950,8 +40776,6 @@ aa
aa
aa
aa
-"}
-(105,1,1) = {"
aa
aa
aa
@@ -45011,14 +40835,11 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
-af
-af
-af
-af
-af
aa
aa
aa
@@ -45032,6 +40853,25 @@ aa
aa
aa
aa
+ce
+cn
+au
+cQ
+dq
+mW
+SO
+eF
+IO
+Bp
+Ss
+dI
+Zk
+hp
+dI
+hp
+dI
+Wc
+au
aa
aa
aa
@@ -45068,41 +40908,43 @@ aa
aa
aa
aa
+DD
+aE
+zr
+zr
+PD
+PD
+ZT
+av
+av
+av
+av
+av
+av
+av
+XO
+av
+av
+av
+av
+av
+av
ad
ad
+av
+GW
+Ma
ad
ad
ad
ad
+aa
+aa
+aa
+aa
+aa
+aa
ad
-au
-Rq
-cy
-cy
-Rh
-au
-ad
-kZ
-lL
-mk
-Wo
-QZ
-oj
-nC
-nC
-nC
-nC
-rp
-TD
-ss
-tg
-tX
-kX
-vb
-mS
-mS
-kE
-la
aa
aa
aa
@@ -45123,24 +40965,12 @@ aa
aa
aa
aa
-ad
aa
aa
aa
aa
-FG
-FG
-FG
-FG
-FG
aa
-Jt
aa
-FG
-FG
-FG
-FG
-FG
aa
aa
aa
@@ -45168,6 +40998,8 @@ aa
aa
aa
aa
+"}
+(112,1,1) = {"
aa
aa
aa
@@ -45207,8 +41039,6 @@ aa
aa
aa
aa
-"}
-(106,1,1) = {"
aa
aa
aa
@@ -45238,6 +41068,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -45271,10 +41103,6 @@ aa
aa
aa
aa
-af
-af
-af
-af
aa
aa
aa
@@ -45282,6 +41110,25 @@ aa
aa
aa
aa
+cn
+wZ
+au
+cR
+cx
+dG
+ek
+ZA
+fn
+XZ
+ZL
+dI
+hq
+dI
+dI
+dI
+dI
+pS
+au
aa
aa
aa
@@ -45314,6 +41161,40 @@ aa
aa
aa
aa
+WU
+DD
+DD
+DD
+DD
+zr
+zr
+zr
+zr
+Dv
+DE
+DT
+qA
+EJ
+Fa
+EP
+Fs
+Dt
+wp
+Rg
+cu
+Ei
+Dt
+rU
+av
+XO
+aa
+Eo
+Yt
+gm
+aa
+ad
+aa
+aa
aa
aa
aa
@@ -45321,45 +41202,6 @@ aa
aa
aa
ad
-au
-au
-au
-au
-au
-au
-au
-au
-au
-au
-au
-au
-hP
-cy
-Xu
-jU
-au
-au
-kZ
-lM
-mS
-Vs
-Vs
-ok
-oJ
-ph
-ea
-ea
-rq
-gA
-st
-th
-tY
-uD
-vc
-mS
-mS
-xh
-la
aa
aa
aa
@@ -45378,24 +41220,19 @@ aa
aa
aa
aa
-ad
aa
-ad
aa
aa
aa
aa
aa
aa
-ad
aa
aa
aa
-Jt
aa
aa
aa
-ad
aa
aa
aa
@@ -45418,6 +41255,22 @@ aa
aa
aa
aa
+"}
+(113,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -45437,35 +41290,7 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(107,1,1) = {"
+ab
aa
aa
aa
@@ -45500,6 +41325,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -45531,8 +41358,6 @@ aa
aa
aa
aa
-af
-aa
aa
aa
aa
@@ -45541,7 +41366,34 @@ aa
aa
aa
aa
+ad
+cn
+au
+au
+au
+au
+dH
+cf
+eF
+fo
+fP
+dI
+dI
+Zk
+zz
+lq
+Ws
+dI
+pS
+au
aa
+jh
+jh
+jh
+jh
+jh
+jh
+jh
aa
aa
aa
@@ -45566,59 +41418,47 @@ aa
aa
aa
aa
+WU
+lM
+nY
+bl
+XA
+re
+Qz
+oi
+xw
+DD
+av
+av
+XR
+EK
+oX
+PQ
+FH
+Dt
+Ue
+sb
+RY
+Nu
+Dt
+Ic
+wK
+Dt
+Eo
+Eo
+GV
+gm
+Eo
+av
aa
aa
aa
-af
-af
aa
aa
aa
aa
aa
ad
-cb
-ck
-cy
-cM
-de
-dB
-cc
-eE
-fi
-fL
-gj
-gL
-ho
-fB
-IO
-Vy
-hQ
-fq
-au
-kZ
-Os
-kZ
-Os
-Os
-ol
-Os
-Os
-kZ
-qE
-rr
-rt
-rn
-ti
-tZ
-mS
-mS
-vQ
-kZ
-kZ
-kZ
-aa
-aa
aa
aa
aa
@@ -45634,28 +41474,10 @@ aa
aa
aa
aa
-ad
-cn
-ad
-ad
aa
aa
aa
aa
-FE
-FE
-FE
-FE
-FE
-aa
-Jt
-aa
-FE
-FE
-FE
-FE
-FE
-aa
aa
aa
aa
@@ -45690,6 +41512,8 @@ aa
aa
aa
aa
+"}
+(114,1,1) = {"
aa
aa
aa
@@ -45721,8 +41545,6 @@ aa
aa
aa
aa
-"}
-(108,1,1) = {"
aa
aa
aa
@@ -45779,7 +41601,6 @@ aa
aa
aa
aa
-af
aa
aa
aa
@@ -45803,6 +41624,33 @@ aa
aa
aa
aa
+cn
+OR
+UV
+cS
+cA
+Pl
+TP
+eG
+fp
+fQ
+go
+XV
+nj
+au
+au
+au
+el
+au
+au
+jh
+jh
+CN
+NX
+NX
+NX
+CN
+jh
aa
aa
aa
@@ -45826,55 +41674,39 @@ aa
aa
aa
aa
-af
-af
-ad
-ad
-ad
-ad
-ad
-ad
-cn
-cn
-au
-cN
-cy
-dC
-cl
-dI
-fj
-fM
-yO
-mI
-mI
-SO
-gN
-cf
-Pe
-IH
-au
-lb
-Ta
-qj
-XV
-nE
-om
-oK
-pi
-kZ
-qF
-rs
-rt
-rn
-tj
-ua
-mS
-nB
-vP
-mP
-mO
-Uz
aa
+WU
+DD
+DD
+DD
+DD
+nA
+RO
+zr
+GZ
+Am
+av
+DV
+PW
+EL
+Fb
+EB
+FI
+Dt
+Ak
+uS
+vL
+Ph
+uL
+MC
+bj
+Dt
+Gn
+Gx
+GX
+XU
+Hf
+av
aa
aa
aa
@@ -45891,27 +41723,8 @@ aa
aa
aa
aa
-uK
-Du
-uK
-ad
-aa
-aa
aa
aa
-FF
-Ga
-Ga
-Ga
-Ga
-Gw
-Jt
-GM
-GN
-GN
-GN
-GN
-GO
aa
aa
aa
@@ -45956,6 +41769,8 @@ aa
aa
aa
aa
+"}
+(115,1,1) = {"
aa
aa
aa
@@ -45978,8 +41793,6 @@ aa
aa
aa
aa
-"}
-(109,1,1) = {"
aa
aa
aa
@@ -46038,6 +41851,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -46066,6 +41881,33 @@ aa
aa
aa
aa
+ad
+au
+au
+au
+au
+au
+au
+au
+au
+fu
+au
+gO
+MT
+au
+NX
+NX
+NX
+NX
+CN
+NX
+NX
+NX
+jh
+jh
+jh
+NX
+jh
aa
aa
aa
@@ -46090,85 +41932,52 @@ aa
aa
aa
aa
-ad
-cd
-cn
-cy
-cO
-au
-dD
-dI
-eF
-fk
-fN
-gk
-fN
-Mq
-hR
-Mq
-iU
-SR
-jV
-au
-lc
-Ts
-mo
-SA
-Is
-it
-Sv
-pj
-kZ
-qG
-rt
-rt
-rn
-tk
-ub
-nC
-Yb
-Yg
-kZ
-kZ
-kZ
aa
aa
+DD
+ps
+Dv
+AM
+AW
+iz
+uK
+RO
+av
+DW
+Er
+EM
+Fc
+Fm
+FJ
+Dt
+Dt
+rq
+oF
+oF
+Dt
+Dt
+Dt
+Dt
+Uc
+Um
+UT
+mV
+Ft
+av
+av
+av
+av
aa
aa
aa
aa
aa
ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-uK
-Zo
-uK
-ad
-ad
aa
aa
aa
-FG
-FG
-FG
-FG
-FG
aa
-GI
aa
-FG
-FG
-FG
-FG
-FG
aa
aa
aa
@@ -46217,6 +42026,8 @@ aa
aa
aa
aa
+"}
+(116,1,1) = {"
aa
aa
aa
@@ -46235,8 +42046,6 @@ aa
aa
aa
aa
-"}
-(110,1,1) = {"
aa
aa
aa
@@ -46299,6 +42108,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -46328,10 +42139,46 @@ aa
aa
aa
aa
+au
+VR
+ky
+qu
+gt
+iq
+NH
+fr
+fR
+gq
+gP
+wB
+au
+NX
+jh
+MX
+MX
+jd
+MX
+MX
+MX
+jh
+Bu
+jh
+NX
+jh
+jh
+jh
+jh
+jh
+jh
+jh
+jh
+jh
+jh
+jh
+jh
+jh
aa
aa
-af
-af
aa
aa
aa
@@ -46344,48 +42191,43 @@ aa
aa
aa
aa
+DD
+DD
+DD
+DD
+DD
+DD
+DD
+PH
+av
+DX
+Es
+EN
+Fd
+Fu
+FK
+bB
+zN
+Zd
+OH
+EZ
+EZ
+EZ
+EZ
+Gi
+Gp
+Gy
+EZ
+Bo
+ln
+Hs
+zg
+HI
+av
aa
aa
aa
aa
-cd
-Ow
-au
-cP
-cy
-dE
-dI
-ej
-fl
-fO
-gl
-fO
-Lt
-hS
-fJ
-iV
-fF
-jW
-au
-ld
-Qr
-eq
-Wt
-lP
-dO
-oM
-pk
-kZ
-qH
-ru
-rY
-SV
-tl
-uc
-nD
-nD
-VQ
-kZ
aa
ad
aa
@@ -46395,20 +42237,11 @@ aa
aa
aa
aa
-ad
aa
aa
aa
-ad
aa
-ad
aa
-uK
-uK
-uK
-gU
-uK
-ad
aa
aa
aa
@@ -46418,12 +42251,6 @@ aa
aa
aa
aa
-ad
-GJ
-ad
-aa
-aa
-aa
aa
aa
aa
@@ -46456,6 +42283,8 @@ aa
aa
aa
aa
+"}
+(117,1,1) = {"
aa
aa
aa
@@ -46492,8 +42321,6 @@ aa
aa
aa
aa
-"}
-(111,1,1) = {"
aa
aa
aa
@@ -46569,6 +42396,44 @@ aa
aa
aa
aa
+au
+Tp
+uX
+et
+au
+au
+fu
+au
+au
+au
+gP
+hs
+au
+NX
+jh
+Yx
+pZ
+hf
+ZK
+uM
+do
+jh
+cw
+qd
+dw
+NX
+NX
+CN
+NX
+NX
+NX
+CN
+NX
+NX
+NX
+NX
+Tb
+jh
aa
aa
aa
@@ -46585,16 +42450,43 @@ aa
aa
aa
aa
+ad
aa
aa
-af
-af
aa
+DD
+TX
+av
+DY
+Et
+EO
+Fe
+Fv
+jq
+Gb
+Gf
+Gb
+Gb
+Ae
+CS
+Gb
+Gb
+Gj
+Gq
+Gz
+NY
+Ha
+YA
+Ht
+HB
+HJ
+av
aa
aa
aa
aa
aa
+ad
aa
aa
aa
@@ -46604,84 +42496,17 @@ aa
aa
aa
aa
-ad
-ce
-cm
-cy
-cN
-au
-dF
-dI
-dI
-fm
-dI
-cf
-gM
-Zk
-hT
-NI
-iW
-Ba
-jX
-au
-YM
-QA
-Ne
-Wg
-WH
-QJ
-oN
-oN
-oN
-oN
-oN
-oN
-su
-tm
-ud
-oI
-vd
-vR
-kZ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
aa
aa
-ad
aa
-ad
aa
-uK
-UK
-XJ
-NW
-DD
-ad
-ad
-ad
-ad
aa
aa
aa
aa
aa
-ad
-Gm
-RJ
-Gm
-ad
aa
aa
-ad
aa
aa
aa
@@ -46715,6 +42540,8 @@ aa
aa
aa
aa
+"}
+(118,1,1) = {"
aa
aa
aa
@@ -46749,8 +42576,6 @@ aa
aa
aa
aa
-"}
-(112,1,1) = {"
aa
aa
aa
@@ -46819,8 +42644,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -46830,6 +42653,47 @@ aa
aa
aa
aa
+au
+rD
+dI
+wm
+au
+IK
+nb
+ft
+Vq
+au
+gP
+ht
+au
+pz
+jh
+AN
+nG
+hf
+hf
+WR
+TJ
+jh
+jh
+jh
+dF
+di
+di
+ON
+di
+kZ
+kZ
+kZ
+kZ
+kZ
+kZ
+sV
+NX
+jh
+jh
+jh
+jh
aa
aa
aa
@@ -46843,14 +42707,43 @@ aa
aa
aa
aa
+ad
aa
aa
aa
+DD
+TX
+av
+DZ
+wt
+Ez
+Ff
+Fw
+Ad
+av
+av
+av
+av
+av
+av
+av
+av
+av
+Zi
+Zi
+YN
+av
+Hg
+DC
+ex
+HK
+av
aa
aa
aa
aa
aa
+ad
aa
aa
aa
@@ -46862,83 +42755,6 @@ aa
aa
aa
aa
-ce
-cn
-au
-cQ
-cy
-mW
-SO
-eF
-fm
-ej
-Ss
-dI
-hp
-au
-au
-au
-jy
-au
-au
-dj
-lQ
-mp
-mY
-nF
-PA
-oN
-pl
-pZ
-qI
-rv
-oN
-rn
-mj
-mS
-uE
-uI
-vS
-uI
-uI
-xI
-uI
-uI
-uI
-uK
-uK
-uK
-uK
-uK
-uK
-uK
-BA
-uK
-uK
-uK
-uK
-uK
-PP
-To
-NF
-av
-Dt
-Eo
-Eo
-Eo
-Dt
-Dt
-Dt
-ad
-ad
-ad
-Dt
-GW
-Eo
-ad
-ad
-ad
-ad
aa
aa
aa
@@ -46981,6 +42797,8 @@ aa
aa
aa
aa
+"}
+(119,1,1) = {"
aa
aa
aa
@@ -47006,13 +42824,12 @@ aa
aa
aa
aa
-"}
-(113,1,1) = {"
aa
aa
aa
aa
aa
+ab
aa
aa
aa
@@ -47041,7 +42858,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -47076,8 +42892,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -47096,6 +42910,47 @@ aa
aa
aa
aa
+au
+me
+dI
+jI
+au
+Nq
+vC
+gs
+fS
+gq
+gP
+JV
+qa
+rn
+jh
+xX
+CL
+ez
+mz
+vf
+RR
+VL
+VL
+GL
+dU
+di
+di
+gQ
+Qq
+kZ
+sy
+MN
+tr
+us
+kZ
+Rb
+TR
+wD
+CN
+xq
+jh
aa
aa
aa
@@ -47109,91 +42964,56 @@ aa
aa
aa
aa
+ad
aa
aa
aa
+DD
+Yi
+av
+va
+XQ
+BY
+EY
+XQ
+Aq
+av
+eK
+eK
+ur
+eK
+Tw
+Uh
+mn
+PM
+Yz
+Pz
+VP
+eK
+av
+SQ
+QS
+av
+av
aa
aa
aa
aa
+HY
+GS
+If
aa
+HY
+GS
+If
aa
+HY
+GS
+If
aa
-cn
-cn
-cz
-cR
-cx
-dG
-ek
-ZA
-fn
-ZA
-ZL
-dI
-hq
-au
-iq
-iq
-jz
-jY
-Mx
-le
-lR
-mq
-mq
-mq
-Ub
-oN
-pm
-qa
-qJ
-rw
-oN
-sv
-mj
-mS
-mQ
-uI
-vT
-wD
-xi
-xJ
-yl
-yU
-uI
-zr
-lZ
-AD
-uK
-Bc
-vm
-Zj
-zT
-zT
-zT
-zT
-RO
-CN
-zT
-eP
-Dv
-DE
-DT
-DC
-EJ
-Fa
-EP
-Fs
-Dt
aa
-ad
aa
-Eo
-Yt
-Eo
aa
-ad
aa
aa
aa
@@ -47234,6 +43054,8 @@ aa
aa
aa
aa
+"}
+(120,1,1) = {"
aa
aa
aa
@@ -47263,8 +43085,6 @@ aa
aa
aa
aa
-"}
-(114,1,1) = {"
aa
aa
aa
@@ -47347,9 +43167,106 @@ aa
aa
aa
aa
+au
+wN
+ZH
+au
+au
+fv
+fv
+aq
+fv
+au
+gO
+hu
+au
+NX
+jh
+eB
+rT
+WF
+hf
+gg
+lB
+MX
+MX
+jh
+On
+di
+dM
+qQ
+Xx
+kZ
+eh
+mS
+tq
+wS
+kZ
+NX
+yp
+jh
+jh
+jh
+jh
+ad
+ad
+ad
+ad
+ad
+ad
+ms
+ms
+ms
+ms
+ms
+ad
+ad
+ad
+ad
+ad
+ad
+DD
+TX
+av
+Eb
+vY
+FS
+XQ
+XQ
+FO
+Zi
+eK
+Gk
+hk
+zm
+zB
+eK
+eK
+Za
+Yz
+Pz
+VP
+eK
+av
+Hu
+ST
+av
+ad
+ad
+ad
+ad
aa
+HY
+GT
+If
aa
+HY
+GT
+If
aa
+HY
+GT
+If
aa
aa
aa
@@ -47375,82 +43292,7 @@ aa
aa
aa
aa
-ad
-cn
-au
-au
-au
-au
-dH
-cf
-eF
-fo
-fP
-dI
-gN
-Zk
-au
-iq
-iX
-iX
-iX
-iX
-iX
-iX
-iX
-mZ
-fG
-lP
-oN
-pn
-qb
-qK
-Tb
-rZ
-PH
-tn
-mS
-mQ
-ve
-vU
-wE
-UB
-xK
-yV
-yV
-zq
-SH
-zt
-AE
-uK
-cB
-bl
-bl
-bl
-bl
-bl
-bl
-bl
-bl
-bl
-bl
-Am
-av
-DU
-Eq
-EK
-EZ
-Ft
-FH
-Dt
aa
-Dt
-Eo
-VG
-GV
-Eo
-Eo
-Dt
aa
aa
aa
@@ -47469,6 +43311,8 @@ aa
aa
aa
aa
+"}
+(121,1,1) = {"
aa
aa
aa
@@ -47520,8 +43364,6 @@ aa
aa
aa
aa
-"}
-(115,1,1) = {"
aa
aa
aa
@@ -47531,6 +43373,8 @@ aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -47577,8 +43421,47 @@ aa
aa
aa
aa
+WY
aa
aa
+au
+Df
+dI
+au
+Mx
+fw
+fw
+gu
+gQ
+Xg
+Ia
+Lq
+di
+zJ
+jh
+RH
+bt
+qG
+BZ
+rz
+xQ
+MX
+tB
+zY
+yD
+di
+gQ
+qQ
+gQ
+kZ
+sz
+oI
+ts
+mS
+za
+NX
+yp
+jh
aa
aa
aa
@@ -47588,22 +43471,62 @@ aa
aa
aa
aa
+ms
+cg
+Qh
+cg
+ms
aa
aa
aa
aa
aa
aa
+DD
+ZJ
+av
+vI
+Ev
+EQ
+nx
+nx
+eX
+av
+AJ
+Lr
+ZY
+Wx
+sl
+vp
+eK
+fE
+eK
+eK
+VC
+eK
+MZ
+Da
+SF
+av
aa
aa
aa
aa
aa
+HY
+GT
+If
+ad
+HY
+GT
+If
+ad
+HY
+GT
+If
aa
aa
aa
-af
-af
aa
aa
aa
@@ -47631,83 +43554,7 @@ aa
aa
aa
aa
-ad
-ad
-cn
-OR
-UV
-cS
-cA
-Pl
-TP
-eG
-fp
-fQ
-go
-dI
-Zk
-au
-Vf
-iX
-jB
-ka
-iX
-lg
-lT
-iX
-Oo
-mq
-UQ
-oN
-po
-qc
-qL
-rx
-oN
-RZ
-nB
-mS
-mQ
-vf
-vV
-Zm
-kB
-xJ
-yn
-yW
-uI
-zU
-za
-AF
-uK
-KI
-bl
-aG
-of
-Aa
-Ax
-sr
-AM
-AV
-Bq
-bl
-Am
-av
-DV
-DC
-EL
-Fb
-EB
-FI
-Dt
aa
-Dt
-Gn
-Gx
-GX
-Gb
-Hf
-Dt
aa
aa
aa
@@ -47721,6 +43568,8 @@ aa
aa
aa
aa
+"}
+(122,1,1) = {"
aa
aa
aa
@@ -47777,12 +43626,12 @@ aa
aa
aa
aa
-"}
-(116,1,1) = {"
aa
aa
aa
aa
+af
+af
aa
aa
aa
@@ -47827,19 +43676,111 @@ aa
aa
aa
aa
+cr
+cr
+cr
+cr
+cr
+cr
+dI
+AV
+au
+gV
+fx
+fx
+gv
+gQ
+gQ
+gQ
+Sj
+di
+di
+di
+yL
+hf
+wJ
+hf
+Gd
+Kz
+MX
+kM
+nk
+jY
+di
+gQ
+gQ
+wx
+kZ
+sA
+YK
+uE
+kA
+kZ
+SV
+yp
+ms
+ms
+ms
+ms
aa
aa
aa
aa
aa
+ms
+ms
+cg
+Bt
+cg
+ms
+ms
aa
aa
aa
aa
aa
+DD
+Dw
+fe
+AR
+av
+ER
+yz
+Fx
+Se
+av
+As
+ME
+LO
+yj
+df
+vp
+YE
+jA
+qL
+eI
+QM
+dD
+av
+Hv
+MM
+av
+av
+ad
+ad
+ad
aa
+HY
+GT
+If
aa
+HY
+GT
+If
aa
+HY
+GT
+If
aa
aa
aa
@@ -47859,8 +43800,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -47880,96 +43819,14 @@ aa
aa
aa
aa
-ah
-ah
-ah
-ah
-ah
aa
aa
aa
aa
-ad
-ad
-au
-au
-au
-au
-au
-el
-au
-au
-au
-au
-gO
-MT
-au
-iq
-iX
-jC
-kb
-iX
-lh
-lU
-iX
-na
-nI
-lP
-BW
-oN
-oN
-qM
-oN
-oN
-sw
-mS
-mS
-uF
-vg
-vW
-wG
-xk
-uI
-uI
-uI
-uI
-uK
-TI
-TX
-uK
-Bd
-bl
-sr
-sr
-sr
-sr
-sr
-AM
-AW
-Br
-bl
-Ec
-av
-DW
-Er
-EM
-Fc
-Fm
-FJ
-Dt
-Dt
-Dt
-Uc
-Um
-UT
-mV
-Ft
-Dt
-Dt
-Dt
-Dt
aa
aa
+"}
+(123,1,1) = {"
aa
aa
aa
@@ -48034,8 +43891,6 @@ aa
aa
aa
aa
-"}
-(117,1,1) = {"
aa
aa
aa
@@ -48078,12 +43933,111 @@ aa
aa
aa
aa
+cr
+aG
+th
+BC
+bV
+cr
+dI
+Ti
+au
+eM
+uj
+fy
+gw
+uY
+uY
+uY
+TC
+di
+iu
+di
+di
+di
+di
+di
+di
+kf
+di
+di
+di
+Ci
+di
+di
+pr
+di
+kZ
+kZ
+kZ
+FN
+kZ
+kZ
+ms
+vg
+ms
+wM
+wM
+ms
+ms
+ms
+Pa
+Pa
+Pa
+ms
+Aj
+Bn
+tO
+Bn
+Ec
+ms
+ms
+ms
+ms
+ms
+ms
+uK
+qP
+DF
+Ed
+Ew
+ES
+Fh
+Fy
+FP
+av
+av
+NB
+UJ
+eK
+Nx
+il
+il
+il
+il
+il
+Qa
+Qa
+av
+ae
+HE
+HL
+Eo
aa
aa
aa
aa
+HY
+GT
+If
aa
+HY
+GT
+If
aa
+HY
+GT
+If
aa
aa
aa
@@ -48128,6 +44082,8 @@ aa
aa
aa
aa
+"}
+(124,1,1) = {"
aa
aa
aa
@@ -48137,11 +44093,6 @@ aa
aa
aa
aa
-ah
-aR
-br
-bG
-ah
aa
aa
aa
@@ -48150,81 +44101,6 @@ aa
aa
aa
aa
-ad
-co
-cC
-cC
-au
-fr
-fR
-gq
-ej
-Zk
-au
-iq
-iX
-iX
-kc
-iX
-kc
-iX
-iX
-nb
-nJ
-kC
-BX
-pq
-mq
-iq
-lN
-mq
-LI
-mS
-QN
-uI
-uI
-vX
-wH
-wF
-xL
-uI
-yX
-AR
-AR
-RK
-YB
-yN
-Jf
-bl
-nA
-ys
-Ab
-AL
-sr
-AM
-Bp
-AM
-bl
-Am
-av
-DX
-Es
-EN
-Fd
-Fu
-FK
-EZ
-EZ
-Gi
-Gp
-Gy
-EZ
-EZ
-ln
-Hs
-zg
-HI
-Dt
aa
aa
aa
@@ -48291,8 +44167,6 @@ aa
aa
aa
aa
-"}
-(118,1,1) = {"
aa
aa
aa
@@ -48316,17 +44190,110 @@ aa
aa
aa
aa
+cr
+sO
+LS
+bW
+Oy
+cr
+tW
+cr
+cr
+xr
+fz
+fz
+fz
+gR
+So
+gR
+OU
+Md
+fz
+fz
+fz
+NR
+fz
+fz
+fz
+mr
+OK
+Rs
+Rs
+sh
+Rs
+Rs
+rQ
+Rv
+rA
+OW
+EE
+tt
+mq
+Nh
+vV
+ug
+we
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+uh
+ZR
+uh
+uh
+uh
+Dk
+Fg
+Dx
+DG
+Ee
+VF
+ET
+Fi
+Fz
+FQ
+ul
+Wa
+WS
+RU
+eK
+Pb
+NS
+Xf
+Ui
+Ui
+zR
+eK
+eK
+Zi
+bk
+ST
+HM
+Eo
aa
aa
aa
aa
aa
+GH
aa
aa
aa
+GH
aa
aa
aa
+GH
aa
aa
aa
@@ -48372,6 +44339,8 @@ aa
aa
aa
aa
+"}
+(125,1,1) = {"
aa
aa
aa
@@ -48394,94 +44363,13 @@ aa
aa
aa
aa
-aE
-aT
-bs
-bH
-ah
aa
aa
-cn
-ad
aa
aa
aa
aa
aa
-co
-cC
-em
-au
-fs
-dI
-dI
-dI
-hs
-au
-iq
-iX
-jD
-VR
-kI
-Fl
-lV
-iX
-nc
-nK
-BV
-BY
-pq
-mq
-ng
-DJ
-sa
-oI
-tp
-mS
-uI
-vi
-kD
-wH
-wF
-xM
-uI
-yY
-zs
-Tp
-Ao
-zW
-AH
-AS
-bl
-Bs
-Bs
-Bs
-Bs
-sr
-tc
-tU
-sr
-bl
-GL
-av
-DY
-Et
-EO
-Fe
-Fv
-FL
-Gb
-Gf
-Gj
-Gq
-Gz
-Gz
-Ha
-YA
-Ht
-HB
-HJ
-Dt
aa
aa
aa
@@ -48548,8 +44436,6 @@ aa
aa
aa
aa
-"}
-(119,1,1) = {"
aa
aa
aa
@@ -48561,13 +44447,110 @@ aa
aa
aa
aa
+cr
+UG
+Ym
+pe
+CA
+ut
+AU
+kI
+Ax
+kh
+gQ
+gQ
+Xx
+kh
+gQ
+kh
+ij
+gQ
+gQ
+gQ
+Xx
+gQ
+Xx
+gQ
+Xx
+iN
+ll
+gQ
+gQ
+Jk
+gQ
+gQ
+iN
+po
+aV
+GU
+cD
+cD
+sc
+iE
+TH
+aV
+sC
+aV
+aV
+Rr
+aV
+aV
+aV
+Rr
+aV
+aV
+aV
+Rr
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+Sq
+sC
+aV
+sC
+aV
+VZ
+Fi
+iB
+tg
+XQ
+Zi
+YD
+UJ
+eK
+dV
+zR
+Ui
+Ui
+Ui
+zR
+eK
+eK
+Zi
+bk
+ST
+QC
+Eo
+Eo
+Eo
+av
+TZ
aa
+Jt
aa
aa
aa
+Jt
aa
aa
aa
+Jt
aa
aa
aa
@@ -48580,7 +44563,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -48614,6 +44596,24 @@ aa
aa
aa
aa
+"}
+(126,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -48651,94 +44651,9 @@ aa
aa
aa
aa
-ah
-aW
-bt
-bI
-ah
-ad
-co
-Pr
-co
-ad
aa
aa
aa
-co
-co
-cC
-en
-au
-ft
-dI
-ej
-Ti
-ht
-au
-Sm
-iX
-jE
-kd
-CP
-kd
-lW
-iX
-nd
-nL
-on
-oR
-mq
-mq
-is
-lN
-mq
-mS
-tq
-mS
-uI
-vj
-vZ
-wJ
-xl
-uI
-uI
-yZ
-zu
-uK
-uK
-uK
-uK
-AT
-bl
-Bv
-BD
-BP
-og
-sr
-td
-tV
-uA
-bl
-Am
-av
-DZ
-En
-EL
-Ff
-Fw
-Ad
-Dt
-Dt
-Dt
-Eo
-Eo
-Eo
-Dt
-Hg
-DC
-ex
-HK
-Dt
aa
aa
aa
@@ -48789,6 +44704,139 @@ aa
aa
aa
aa
+cr
+aW
+Ym
+Ym
+Sb
+bC
+YY
+Qk
+oE
+px
+qI
+qI
+fA
+hY
+gx
+gS
+eO
+iM
+iM
+iM
+iM
+iM
+iM
+iM
+iM
+na
+ni
+OY
+uY
+LY
+uY
+OY
+eo
+po
+aV
+GU
+cD
+tv
+cD
+rf
+TH
+Rr
+jT
+Rt
+Pg
+Rt
+Pg
+Pg
+Pg
+Pg
+Pg
+Pg
+Pg
+Rt
+Pg
+Rt
+Pg
+Rt
+Pg
+Pg
+Pg
+Pg
+Rt
+fX
+Dy
+Pg
+Ef
+Pg
+EU
+Fj
+FA
+FR
+Wb
+MW
+XE
+Jc
+OS
+dV
+zS
+Ui
+Qv
+Ui
+SB
+eK
+Tw
+HW
+TT
+YC
+Be
+Tl
+gW
+AK
+sf
+Oj
+UY
+Rc
+Jt
+Jt
+Jt
+Jt
+Jt
+Jt
+Jt
+Jt
+GM
+GR
+yv
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -48806,7 +44854,7 @@ aa
aa
aa
"}
-(120,1,1) = {"
+(127,1,1) = {"
aa
aa
aa
@@ -48897,6 +44945,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -48907,112 +44956,119 @@ aa
aa
aa
aa
-ah
-ah
-aX
-ah
-ah
-ah
-ad
-co
-AN
-co
-ad
aa
aa
aa
-co
-dg
-dJ
-eo
-au
-fu
-fS
-gs
-gP
-JV
-au
-Rs
-iX
-jF
-kd
-kJ
-kd
-lX
-iX
-ne
-nK
-oo
-Zf
-pr
-qd
-qN
-cH
-mq
-sy
-tr
-mS
-uI
-vk
-wa
-wK
-xm
-uI
-Al
-za
-zV
-An
-Ar
-AG
-uK
-AT
-bl
-Bu
-BE
-BQ
-Bs
-Bs
-oF
-Bs
-Bs
-bl
-Yi
+aa
+aa
+cr
+RB
+Ym
+jL
+vP
+eW
+yu
+lC
+bP
+ow
+gQ
+Xx
+gQ
+MJ
+lp
+gQ
+lp
+gQ
+gQ
+Xx
+gQ
+gQ
+gQ
+Xx
+gQ
+iN
+gQ
+gQ
+gQ
+lp
+gQ
+gQ
+gQ
+po
+aV
+lW
+cD
+cD
+cD
+rf
+TH
+aV
+aV
+Rr
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+aV
+Rr
+aV
+aV
+aV
+aV
+Mn
+aV
+aV
+aV
+aV
+fZ
+Fi
+SW
+PW
+XQ
+Zi
+YD
+UJ
+eK
+dV
+zR
+Ui
+Ui
+Ui
+zR
+eK
+fE
+Zi
+SD
+Xz
+VX
+Ys
+Ys
+ZM
av
-va
-DC
-DC
-EY
-DC
-Aq
-Dt
-ad
-ad
-aa
-aa
+TZ
aa
-Dt
-Dt
-DC
-QS
-Dt
-Dt
+sT
aa
aa
aa
+Jt
aa
-HY
-GS
-If
aa
-HY
-GS
-If
aa
-HY
-GS
-If
+Jt
aa
aa
+OV
+JO
aa
aa
aa
@@ -49054,6 +45110,8 @@ aa
aa
aa
aa
+"}
+(128,1,1) = {"
aa
aa
aa
@@ -49062,8 +45120,6 @@ aa
aa
aa
aa
-"}
-(121,1,1) = {"
aa
aa
aa
@@ -49115,6 +45171,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -49124,8 +45181,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -49163,115 +45218,110 @@ aa
aa
aa
aa
-ah
-ah
-aF
-NH
-bv
-bK
-ah
-aD
-co
-SX
-co
-aa
-aa
-co
-co
-co
-dh
-dK
-co
-au
-er
-fv
-gt
-fv
-hu
-au
-iq
-iX
-jG
-kd
-CP
-kd
-lY
-iX
-nf
-nM
-iq
-oS
-iq
-iq
-Sy
-ry
-mq
-mS
-tq
+cr
+jz
+UI
+WO
+Rj
+cr
+cr
+QP
+cr
+Rf
+gT
+gT
+gT
+Po
+gy
+gT
+gy
+hV
+gT
+gT
+Bq
+vK
+as
+gT
+gT
+Ao
+gT
+gT
+gT
+Qt
+gT
+Mc
+qO
+ke
+ui
+xE
+ge
+ge
+ge
+LP
+RN
+ui
+CE
+ui
+ui
+ui
+QG
+ui
+zy
+ui
+ui
+gb
ue
-uI
-uI
-uI
-uI
-uI
-uI
-yp
-zb
-zv
-uK
-uK
-uK
-uK
-AT
-bl
-xg
-Bt
-IS
-Bs
-Cj
-CA
-By
-De
-bl
-Am
-av
-Eb
-vY
-FS
-DC
-DC
-FO
+ui
+ui
+QG
+ui
+Ib
+ui
+ui
+eZ
+ui
+ui
+AH
+ui
+ui
+Eg
+ui
+EV
+Fi
+FB
+PK
+TK
+mb
+xj
+TB
+eK
+dV
+Di
+NV
+Ui
+Ui
+zR
+eK
+fE
+Zi
+bk
+HC
+PW
Eo
-ad
aa
aa
aa
aa
-ad
-Dt
-Hu
-ST
-Dt
-ad
-ad
-ad
-ad
aa
-HY
-GT
-If
+TM
aa
-HY
-GT
-If
aa
-HY
-GT
-If
aa
+GI
aa
aa
aa
+GI
aa
aa
aa
@@ -49317,10 +45367,10 @@ aa
aa
aa
aa
+"}
+(129,1,1) = {"
aa
aa
-"}
-(122,1,1) = {"
aa
aa
aa
@@ -49381,8 +45431,6 @@ aa
aa
aa
aa
-af
-af
aa
aa
aa
@@ -49420,110 +45468,117 @@ aa
aa
aa
aa
-ai
-am
-aI
-ba
-bw
-TH
-bU
-aD
-dW
-NT
-co
-co
-co
-co
-dJ
-cD
-Yj
-Qu
-di
-fw
-fw
-fw
-gu
-gQ
-Lq
-di
-iq
-ir
-ZE
-kd
-ZQ
-kd
-kF
-iX
-Cb
-iq
-ng
-oL
-ps
-oL
-op
-rz
-mq
-sz
-ts
-CZ
-uJ
-vm
-wc
-YH
-wL
-wL
-wL
-zc
-zw
-zX
-Ap
-AR
-AR
-AU
-bl
-Bw
-BE
-BR
-BZ
-Ck
-CB
-BP
-Df
-bl
-Am
-av
-vI
-Ev
-EQ
-DC
-DC
-EB
-Dt
aa
aa
aa
aa
aa
-ad
+aa
+aa
+cr
+kg
+OC
+dR
+ml
+cr
+MK
+OG
+eu
+nS
+eu
+fU
+fU
+es
+fU
+fU
+zW
+zW
+zW
+zW
+zW
+zW
+di
+di
+gJ
+Ov
+gJ
+di
+di
+di
+di
+di
+di
+di
+ms
+ms
+Pa
+Pa
+Pa
+ms
+ms
+ms
+ms
+Pa
+Pa
+Pa
+ms
+ms
+ms
+ms
+ms
+ms
+ms
+ms
+Pa
+Pa
+Pa
+ms
+ms
+ms
+ms
+ms
+ms
+hn
Dt
-DC
-QS
Dt
-aa
+Eh
+Ex
+EW
+Fk
+FC
+FT
+oy
+il
+ly
+AQ
+oy
+wd
+il
+OZ
+zR
+zR
+il
+Qa
+TL
+av
+Hx
+Gt
+HO
+Eo
aa
aa
aa
aa
HY
-GT
+Uu
If
-ad
+aa
HY
-GT
+He
If
-ad
+aa
HY
-GT
+He
If
aa
aa
@@ -49569,6 +45624,8 @@ aa
aa
aa
aa
+"}
+(130,1,1) = {"
aa
aa
aa
@@ -49576,8 +45633,6 @@ aa
aa
aa
aa
-"}
-(123,1,1) = {"
aa
aa
aa
@@ -49677,111 +45732,35 @@ aa
aa
aa
aa
-aj
-ao
-aJ
-aY
-aJ
-MV
-aJ
-aD
-XL
-MF
-DI
-Wc
-XD
-MN
-Qu
-di
-di
-di
-di
-eL
-fx
-fx
-gv
-gQ
-Sj
-di
-di
-iX
-iX
-ke
-ZQ
-kd
-ma
-iX
-Cc
-nN
-op
-iq
-pt
+cr
+cr
+cr
+cr
+cr
+cr
+pa
+AF
+qr
+qM
+eu
+SE
+gX
+xm
+gX
+tH
+hc
+zW
Vf
-iq
-XQ
-mq
-sA
-mS
-uf
-uK
-vn
-ms
-ms
-ms
-ms
-yq
-GZ
-zx
-zY
-zx
-zx
-zx
-NK
-bl
-Bx
-BG
-oG
-Bs
-Cl
-CC
-CT
-Dg
-bl
-Am
-av
-av
-av
-ER
-yz
-Fx
-EB
-Dt
-aa
-aa
-aa
-aa
+jj
+Vf
+zW
aa
aa
-Dt
-Hv
-MM
-Dt
-Dt
-ad
-ad
-ad
aa
-HY
-GT
-If
+DU
+Pr
aa
-HY
-GT
-If
aa
-HY
-GT
-If
aa
aa
aa
@@ -49813,9 +45792,51 @@ aa
aa
aa
aa
+Cn
+Wy
+hU
+ak
+Je
+av
+av
+av
+av
+mg
+XQ
+Py
+oy
+Oi
+SM
+Wj
+pB
+dV
+eK
+BB
+qf
+yk
+ZG
+Ur
+nn
+av
+Hv
+HD
+av
+av
+ad
+ad
+ad
aa
+HY
+Uu
+If
aa
+HY
+He
+If
aa
+HY
+He
+If
aa
aa
aa
@@ -49833,8 +45854,6 @@ aa
aa
aa
aa
-"}
-(124,1,1) = {"
aa
aa
aa
@@ -49862,6 +45881,8 @@ aa
aa
aa
aa
+"}
+(131,1,1) = {"
aa
aa
aa
@@ -49934,111 +45955,16 @@ aa
aa
aa
aa
-aj
-as
-aK
-aY
-aJ
-MV
-bV
-aD
-ah
-ah
-ah
-di
-di
-dN
-di
-di
-me
-me
-di
-eM
-fy
-fy
-gw
-gQ
-TC
-di
-iu
-iZ
-iX
-kf
-kK
-iY
-kf
-iX
-nh
-di
-di
-ms
-ms
-ms
-ms
-ms
-ms
-sB
-tt
-ug
-ms
-ms
-ms
-wM
-wM
-ms
-ms
-ms
-ms
-ms
-ms
-ms
-ms
-Bf
-bl
-bl
-bl
-bl
-bl
-bl
-bl
-CU
-bl
-bl
-Dw
-DF
-Ed
-Ew
-ES
-Fh
-Fy
-FP
-Dt
-Dt
-ad
aa
aa
aa
aa
-Eo
-bk
-HE
-HL
-Eo
aa
aa
aa
aa
-HY
-GT
-If
aa
-HY
-GT
-If
aa
-HY
-GT
-If
aa
aa
aa
@@ -50065,6 +45991,26 @@ aa
aa
aa
aa
+eu
+eu
+eu
+eu
+vv
+AF
+AF
+IM
+eu
+MB
+jO
+tU
+Zf
+bi
+Ux
+zW
+RD
+qe
+Vf
+jy
aa
aa
aa
@@ -50090,8 +46036,6 @@ aa
aa
aa
aa
-"}
-(125,1,1) = {"
aa
aa
aa
@@ -50105,11 +46049,51 @@ aa
aa
aa
aa
+Cn
+Nw
+av
+av
+av
+nz
+nz
+Ey
+EX
+vz
+DC
+FV
+Ps
+SJ
+QE
+gZ
+pB
+HU
+eK
+eK
+eK
+jf
+cj
+Qj
+Rz
+av
+Tj
+OF
+av
aa
aa
aa
aa
aa
+HY
+Uu
+If
+ad
+HY
+He
+If
+ad
+HY
+He
+If
aa
aa
aa
@@ -50154,6 +46138,8 @@ aa
aa
aa
aa
+"}
+(132,1,1) = {"
aa
aa
aa
@@ -50191,110 +46177,18 @@ aa
aa
aa
aa
-aj
-at
-aL
-bb
-bx
-UR
-Oc
-IV
-Na
-Oc
-IV
-bW
-cg
-cr
-So
-Zv
-fz
-fz
-cg
-fz
-fz
-fz
-So
-gR
-OU
-Md
-fz
-fz
-fz
-NR
-OU
-fz
-kL
-mr
-ll
-gQ
-oq
-aV
-aV
-aV
-Rr
-Mc
-aV
-OW
-tu
-Nh
-aV
-Mc
-we
-aV
-aV
-aV
-aV
-Rr
-aV
-aV
-Pa
-aV
-aV
-RQ
-Bn
-uh
-RI
-uh
-ZR
-uh
-CD
-CV
-Dh
-Dk
-Dx
-DG
-Ee
-Rr
-ET
-Fi
-Fz
-FQ
-Gc
-Eo
-ad
aa
aa
aa
aa
-Eo
-bk
-ST
-HM
-VG
-Eo
-Dt
-Dt
aa
aa
-GH
aa
aa
aa
-GH
aa
aa
aa
-GH
aa
aa
aa
@@ -50347,8 +46241,6 @@ aa
aa
aa
aa
-"}
-(126,1,1) = {"
aa
aa
aa
@@ -50356,6 +46248,26 @@ aa
aa
aa
aa
+NL
+RE
+gI
+mP
+xt
+Sa
+qN
+ws
+Az
+gX
+FM
+Bx
+MF
+uy
+nE
+CW
+je
+du
+ob
+jy
aa
aa
aa
@@ -50394,9 +46306,51 @@ aa
aa
aa
aa
+Cn
+rd
+av
+bd
+uB
+XQ
+DC
+DC
+DC
+PF
+Eu
+FW
+oy
+HN
+DB
+Pm
+AP
+Ug
+yT
+yT
+yT
+BM
+Uj
+BW
+dc
+av
+DC
+Gt
+av
+ad
+ad
+ad
+ad
aa
+HY
+Uu
+If
aa
+HY
+He
+If
aa
+HY
+He
+If
aa
aa
aa
@@ -50441,6 +46395,8 @@ aa
aa
aa
aa
+"}
+(133,1,1) = {"
aa
aa
aa
@@ -50448,114 +46404,9 @@ aa
aa
aa
aa
-ak
-ax
-aM
-bc
-bz
-bN
-bX
-ch
-cs
-cE
-cU
-Ym
-LL
-Sb
-LL
-Qk
-LL
-LL
-es
-LL
-fA
-LL
-gx
-gS
-eO
-LL
-LL
-LL
-LL
-eu
-eO
-LL
-LL
-LL
-ni
-Xx
-or
-aV
-aV
-Rr
-aV
-aV
-aV
-sC
-tv
-aV
-aV
-Rr
-aV
-aV
-aV
-aV
-aV
-aV
-aV
-Rr
-aV
-aV
-Np
-Rv
-Pg
-Pg
-YZ
-Pg
-Pg
-Pg
-Pg
-CW
-Rt
-Pg
-Dy
-Pg
-Ef
-Pg
-EU
-Fj
-FA
-FR
-DC
-Eo
-ad
-ad
aa
aa
aa
-Dt
-Hw
-hi
-HN
-HU
-eK
-HW
-TT
-GR
-Gw
-Jt
-Jt
-Jt
-Jt
-Jt
-Jt
-Jt
-Jt
-Jt
-GM
-GR
-GR
-JO
aa
aa
aa
@@ -50604,8 +46455,6 @@ aa
aa
aa
aa
-"}
-(127,1,1) = {"
aa
aa
aa
@@ -50656,6 +46505,26 @@ aa
aa
aa
aa
+eu
+eu
+eu
+eu
+Ba
+BD
+ax
+aL
+zW
+gX
+Cb
+YV
+xg
+yH
+Wd
+zW
+Vf
+AX
+Vf
+zW
aa
aa
aa
@@ -50694,121 +46563,68 @@ aa
aa
aa
aa
+Cn
+ga
+av
+Wn
+DC
+DC
+DC
+DC
+DC
+cp
+Gb
+FX
+oy
+Qg
+Vm
+Zh
+oO
+XW
+UA
+eK
+eK
+eK
+eK
+ZU
+UA
+av
+DC
+Gt
+av
+av
aa
aa
aa
-ab
aa
+HY
+XK
+If
aa
+HY
+HT
+If
aa
+HY
+HT
+If
aa
aa
aa
aa
-aj
-ay
-aN
-be
-bA
-bO
-bY
-ci
-ct
-cF
-ci
-WO
-Rj
-gT
-gT
-VZ
-gT
-gT
-Wr
-gT
-fU
-gT
-gy
-Wr
-gy
-hV
-gT
-gT
-gT
-kg
-gy
-jI
-kM
-gQ
-ll
-gQ
-oq
-oT
-aV
-qe
-qO
-rA
-aV
-Yv
-tw
-ui
-ui
-MB
-ui
-ui
-ui
-ui
-QG
-ui
-zy
-ui
-ui
-ui
-ap
-SE
-ui
-QG
-XS
-ui
-ui
-ui
-CE
-Co
-ui
-QG
-XS
-ui
-Eg
-aV
-EV
-Fi
-FB
-PK
-Gd
-Eo
aa
aa
aa
aa
aa
-Eo
-bk
-HC
-Gt
-Eo
-Eo
-Eo
-Dt
aa
aa
-GI
aa
aa
aa
-GI
aa
aa
aa
-GI
aa
aa
aa
@@ -50836,6 +46652,8 @@ aa
aa
aa
aa
+"}
+(134,1,1) = {"
aa
aa
aa
@@ -50861,8 +46679,6 @@ aa
aa
aa
aa
-"}
-(128,1,1) = {"
aa
aa
aa
@@ -50922,7 +46738,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -50948,6 +46763,25 @@ aa
aa
aa
aa
+zW
+zW
+eu
+eu
+eu
+VJ
+eu
+zW
+zW
+rH
+ev
+zW
+qt
+ne
+zW
+zW
+zW
+zW
+zW
aa
aa
aa
@@ -50962,111 +46796,17 @@ aa
aa
aa
aa
-aj
-az
-aO
-aJ
-aY
-bM
-bZ
-aD
-ah
-ah
-ah
-dR
-UI
-UI
-UI
-CY
-UI
-ZP
-Rx
-di
-eQ
-di
-cY
-cY
-cY
-cY
-iv
-ja
-di
-WQ
-gQ
-lp
-di
-di
-nk
-di
-di
-ms
-ms
-ms
-ms
-ms
-ms
-sD
-tx
-uj
-bj
-bj
-wh
-wh
-wh
-wh
-bj
-bj
-bj
-bj
-bj
-bj
-Vw
-ms
-ep
-ep
-dp
-ms
-ms
-ms
-ms
-ms
-ms
-ms
-nQ
-Dt
-Eh
-Ex
-EW
-Fk
-FC
-FT
-Dt
-Dt
aa
aa
aa
aa
aa
-Eo
-Hx
-Gt
-HO
-Eo
aa
aa
aa
aa
-HY
-He
-If
aa
-HY
-He
-If
aa
-HY
-He
-If
aa
aa
aa
@@ -51080,6 +46820,42 @@ aa
aa
aa
aa
+Cn
+vx
+av
+bm
+DC
+DC
+Ej
+DC
+Tg
+TY
+FD
+FY
+oy
+uG
+oy
+oy
+oy
+PZ
+il
+Zi
+av
+Zi
+Zi
+Oz
+av
+Hh
+En
+HC
+HP
+av
+aa
+tl
+xZ
+tl
+xZ
+VM
aa
aa
aa
@@ -51118,8 +46894,6 @@ aa
aa
aa
aa
-"}
-(129,1,1) = {"
aa
aa
aa
@@ -51135,6 +46909,8 @@ aa
aa
aa
aa
+"}
+(135,1,1) = {"
aa
aa
aa
@@ -51219,111 +46995,13 @@ aa
aa
aa
aa
-aj
-aB
-aJ
-aJ
-aY
-bM
-aJ
-aD
-cu
-Mk
-cV
-dS
-Rx
-Qh
-Od
-ND
-Od
-Xe
-Rx
-eR
-fD
-fV
-cY
-hv
-WF
-cY
-cY
-cY
-cY
-QY
-gQ
-lo
-di
-mb
-nm
-nW
-nW
-nW
-nW
-nW
-tP
-nS
-qk
-Xw
-ty
-ty
-bj
-vq
-vv
-vv
-vv
-xN
-yr
-bj
-pg
-qC
-rT
-bj
-aq
-Sa
-QW
-SP
-YS
-Vq
-gV
-Vq
-Sa
-ZH
-Rd
-VN
-Xt
-av
-av
-av
-av
-mg
-DC
-Py
-Dt
-ad
aa
aa
aa
aa
-ad
-Dt
-Hv
-HD
-Dt
-Dt
-ad
-ad
-ad
aa
-HY
-He
-If
aa
-HY
-He
-If
aa
-HY
-He
-If
aa
aa
aa
@@ -51342,6 +47020,25 @@ aa
aa
aa
aa
+zW
+sq
+sq
+Qn
+Xi
+Al
+UK
+zW
+Wt
+QH
+Xm
+zW
+Ai
+ne
+zW
+IP
+dN
+Hn
+zW
aa
aa
aa
@@ -51353,6 +47050,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -51375,13 +47073,46 @@ aa
aa
aa
aa
-"}
-(130,1,1) = {"
aa
aa
aa
aa
+Cn
+sG
+av
+Dl
+Dl
+DK
+Ek
+En
+Iq
+FL
+kw
+FU
+Gb
+RP
+Sw
+Gb
+vl
+OJ
+oK
+Mv
+US
+Gr
+Gr
+Xh
+en
+DC
+Eu
+HF
+HQ
+av
aa
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -51435,6 +47166,8 @@ aa
aa
aa
aa
+"}
+(136,1,1) = {"
aa
aa
aa
@@ -51476,111 +47209,11 @@ aa
aa
aa
aa
-al
-aC
-aP
-bf
-bB
-bP
-ca
-aD
-cv
-cJ
-UL
-dT
-Rx
-Zt
-Od
-ND
-Od
-Od
-Rx
-eS
-dm
-dU
-cZ
-do
-dr
-hW
-iw
-jb
-cY
-LS
-gQ
-lp
-di
-nZ
-nl
-nl
-nl
-nl
-nl
-nl
-vx
-nS
-qk
-sF
-ty
-ty
-bj
-vr
-wi
-wj
-wk
-xO
-pV
-bj
-pX
-LX
-rU
-bj
-tQ
-Sa
-SP
-Tk
-Up
-Uw
-Uw
-Ws
-Sa
-Wu
-av
-av
-av
-av
-Ei
-Ey
-EX
-EB
-DC
-FV
-Eo
-ad
-ad
-ad
-ad
-ad
-ad
-Dt
-DC
-Gt
-Dt
aa
aa
aa
aa
aa
-HY
-He
-If
-ad
-HY
-He
-If
-ad
-HY
-He
-If
aa
aa
aa
@@ -51632,8 +47265,6 @@ aa
aa
aa
aa
-"}
-(131,1,1) = {"
aa
aa
aa
@@ -51646,6 +47277,25 @@ aa
aa
aa
aa
+zW
+Vj
+Su
+Su
+Su
+Su
+xN
+zW
+kL
+jF
+ng
+zW
+Bg
+TA
+CW
+je
+du
+QN
+jy
aa
aa
aa
@@ -51684,7 +47334,42 @@ aa
aa
aa
aa
+Cn
+Jj
+av
+Mg
+Dm
+DL
+El
+DC
+lr
+Xk
+Ve
+FZ
+Ge
+Gg
+IZ
+IZ
+YW
+Bk
+IZ
+IZ
+Gl
+Gs
+Qo
+Jb
+GA
+Hi
+Hy
+HG
+HR
+av
aa
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -51733,111 +47418,15 @@ aa
aa
aa
aa
-ah
-ah
-aQ
-bh
-bC
-bQ
-ah
-aD
-cw
-Qq
-cW
-Zr
-eC
-Ir
-Ir
-UD
-Ir
-Ny
-Rx
-cY
-cY
-cY
-cY
-Ut
-dr
-Wi
-iz
-ix
-QL
-SW
-gQ
-lq
-di
-NC
-nl
-nO
-os
-oU
-pu
-nl
-qR
-RH
-qk
-sG
-ty
-Vx
-bj
-vs
-wj
-wN
-xn
-xP
-yt
-bj
-pW
-qD
-rV
-bj
-et
-Sa
-VW
-LM
-Ri
-LM
-Vq
-Vq
-Sa
-Wu
-av
-bd
-DC
-nz
-DC
-DC
-DC
-PF
-Eu
-FW
-Dt
aa
aa
-ad
-ad
aa
aa
-Dt
-DC
-Gt
-Dt
-ad
-ad
-ad
-ad
aa
-HY
-He
-If
+"}
+(137,1,1) = {"
aa
-HY
-He
-If
aa
-HY
-He
-If
aa
aa
aa
@@ -51889,8 +47478,6 @@ aa
aa
aa
aa
-"}
-(132,1,1) = {"
aa
aa
aa
@@ -51947,6 +47534,25 @@ aa
aa
aa
aa
+zW
+sq
+Su
+Su
+Su
+Su
+xN
+zW
+Lt
+BS
+Ju
+zW
+cL
+ne
+zW
+Vl
+nu
+dN
+zW
aa
aa
aa
@@ -51985,116 +47591,57 @@ aa
aa
aa
aa
+Cn
+Wk
+av
+Dn
+Dn
+DM
+Ek
+DC
+lr
+Fn
+Dt
+Eo
+Eo
+Eo
+Dt
+Dt
+UU
+VH
+Dt
+Dt
+Gm
+sK
+TO
+Xb
+Hb
+Hj
+AR
+av
+av
+av
aa
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
aa
aa
-aD
-bg
-bg
-bD
-bg
-bg
-ad
-cw
-cJ
-cX
-pp
-Rx
-Sf
-Pk
-TF
-Px
-Ov
-Rx
-eT
-fX
-VU
-cY
-hw
-EE
-hX
-iy
-jd
-XY
-WL
-gQ
-lr
-di
-nZ
-nl
-nP
-ot
-oV
-pv
-nl
-nl
-nl
-nl
-sH
-tz
-QB
-bj
-vt
-wk
-wO
-xo
-xQ
-yu
-bj
-zC
-bj
-bj
-bj
-AX
-Sa
-PB
-QD
-Uq
-RG
-RG
-Jz
-Sa
-Ue
-av
-Wn
-DC
-DC
-DC
-DC
-DC
-cp
-Gb
-FX
-Dt
aa
aa
-ad
aa
aa
-Dt
-Dt
-DC
-Gt
-Dt
-Dt
aa
aa
aa
aa
-HY
-HT
-If
aa
-HY
-HT
-If
aa
-HY
-HT
-If
aa
aa
aa
@@ -52133,6 +47680,8 @@ aa
aa
aa
aa
+"}
+(138,1,1) = {"
aa
aa
aa
@@ -52146,8 +47695,6 @@ aa
aa
aa
aa
-"}
-(133,1,1) = {"
aa
aa
aa
@@ -52244,99 +47791,99 @@ aa
aa
aa
aa
+zW
+IA
+Su
+Su
+Su
+Su
+xN
+zW
+zW
+zW
+ev
+zW
+Zg
+ne
+zW
+zW
+zW
+zW
+zW
+zW
aa
aa
aa
aa
aa
-bg
-bi
-bE
-bT
-bg
aa
-cw
-cw
-cw
-Tc
-Rx
-Ir
-Ir
-ND
-Ir
-Ir
-Rx
-eU
-fH
-QU
-cY
-hx
-MH
-hY
-QR
-je
-cY
-On
-gQ
-lp
-di
-nZ
-nl
-mM
-ou
-oW
-pw
-qg
-qS
-rC
-sb
-sI
-tA
-tF
-uL
-vu
-vu
-wP
-xp
-vu
-yv
-bj
-zD
-tS
-At
-bj
-hU
-Sa
-LM
-OM
-LM
-MP
-UG
-Vq
-Sa
-WN
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Cn
+sG
av
-bm
-DC
+Do
+Do
+DN
+Ek
DC
-Ej
-Ez
-Tg
-TY
-FD
-FY
-Dt
-Dt
-Dt
-Eo
-Eo
-Eo
+lr
+Fo
Dt
-Hh
-En
-HC
-HP
+yo
+Ql
+YU
+Oe
+YJ
+Zp
+MR
+NQ
+Jl
Dt
+Ni
+fW
+UC
+Hc
+Hk
+am
+ad
+ad
+tl
+xZ
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -52390,6 +47937,19 @@ aa
aa
aa
aa
+"}
+(139,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -52403,8 +47963,6 @@ aa
aa
aa
aa
-"}
-(134,1,1) = {"
aa
aa
aa
@@ -52490,6 +48048,44 @@ aa
aa
aa
aa
+zW
+sq
+Su
+Su
+Su
+Su
+xN
+WM
+IE
+wT
+KH
+zW
+Vb
+ne
+Bb
+Bb
+Bb
+Bb
+qe
+zW
+zW
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -52506,94 +48102,45 @@ aa
aa
aa
aa
-bg
-bn
-bF
-bq
-bg
aa
aa
aa
-cw
-Tc
-Rx
-IB
-ZZ
-PT
-dn
-Ir
-Rx
-cY
-cY
-gB
-cY
-da
-da
-hZ
-TV
-da
-cY
-OV
-gQ
-lp
-di
-nZ
-nl
-nx
-ou
-ou
-YF
-qh
-qT
-NJ
-sc
-sJ
-Sg
-PE
-uM
-vv
-vv
-vv
-xq
-vv
-yw
-zf
-zE
-Ae
-Au
-bj
-Zz
-Sa
-Rf
-Sa
-Sa
-Sa
-Sa
-Sa
-Sa
-Wu
+Cn
+Wk
av
-Dl
-Dl
-DK
+Mh
+Dp
+DO
Ek
En
-Gt
-EB
-En
-FU
-DC
-RP
-Gk
-Gr
-Gr
-Gr
-DC
-DC
-Eu
-HF
-HQ
+lr
+Fp
Dt
+NQ
+NQ
+Vr
+NQ
+NQ
+UU
+NQ
+NQ
+Jl
+Dt
+Gu
+Rp
+rp
+Hd
+Hl
+am
+ad
+ad
+oC
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -52647,6 +48194,8 @@ aa
aa
aa
aa
+"}
+(140,1,1) = {"
aa
aa
aa
@@ -52660,9 +48209,6 @@ aa
aa
aa
aa
-"}
-(135,1,1) = {"
-aa
aa
aa
aa
@@ -52759,98 +48305,33 @@ aa
aa
aa
aa
+zW
+qb
+Su
+Su
+Su
+Su
+xN
+qe
+qe
+qe
+VT
+rb
+cL
+nH
+Xo
+Xo
+Xo
+Xo
+Yv
+od
+zW
aa
aa
aa
aa
-bg
-bp
-bR
-nj
-bg
-ad
aa
aa
-cw
-Tc
-Rx
-Nc
-Ms
-Vv
-Xi
-YI
-XM
-eV
-fI
-fY
-Xr
-ha
-No
-Vt
-gX
-jg
-Oq
-ZN
-gT
-ls
-di
-nZ
-nl
-ny
-ou
-oX
-px
-qi
-qU
-rD
-sd
-sK
-Xw
-uq
-uN
-vw
-wl
-vw
-wl
-xR
-yx
-bj
-zF
-Af
-Av
-bj
-hU
-Sa
-LM
-oQ
-Sa
-Om
-TN
-Xd
-AC
-TK
-av
-Mg
-Dm
-DL
-El
-DC
-Gt
-Xk
-Ve
-FZ
-Ge
-Gg
-Gl
-Gs
-IZ
-GA
-GA
-Hi
-Hy
-HG
-HR
-Dt
aa
aa
aa
@@ -52881,8 +48362,42 @@ aa
aa
aa
aa
+Cn
+Wk
+av
+Dq
+Dq
+DP
+Ek
+DC
+lr
+Fp
+Dt
+yo
+Ql
+Zn
+Ot
+Wr
+gY
+NQ
+NQ
+Jl
+Dt
+Gv
+MS
+GY
+Hd
+Hm
+am
aa
aa
+oC
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -52917,8 +48432,6 @@ aa
aa
aa
aa
-"}
-(136,1,1) = {"
aa
aa
aa
@@ -52938,6 +48451,8 @@ aa
aa
aa
aa
+"}
+(141,1,1) = {"
aa
aa
aa
@@ -53020,98 +48535,6 @@ aa
aa
aa
aa
-bg
-bq
-bq
-bq
-bg
-ad
-ad
-aa
-cw
-Tc
-Rx
-Rx
-Rx
-Rx
-Rx
-Rx
-Rx
-eW
-Fq
-fZ
-gC
-hb
-hz
-ia
-iA
-jh
-Xs
-PM
-gQ
-lp
-di
-nZ
-nl
-nT
-ov
-oY
-py
-nl
-nl
-nl
-nl
-sL
-Xw
-ul
-bj
-vv
-vv
-vv
-xr
-xS
-wi
-bj
-zG
-Ag
-Aw
-bj
-Mn
-Sa
-LM
-Jk
-Sa
-SF
-MU
-TN
-Bb
-Pc
-av
-Dn
-Dn
-DM
-Ek
-DC
-Gt
-Fn
-Dt
-Eo
-Eo
-Eo
-Gm
-Gt
-Jc
-En
-Hb
-Hj
-Dt
-Dt
-Dt
-Dt
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -53139,6 +48562,27 @@ aa
aa
aa
aa
+zW
+yc
+Su
+Su
+Su
+Su
+xN
+jy
+qe
+Oo
+Ne
+BQ
+lA
+nH
+Xo
+Xo
+Xo
+Xo
+Yv
+uH
+jy
aa
aa
aa
@@ -53174,11 +48618,43 @@ aa
aa
aa
aa
-"}
-(137,1,1) = {"
aa
+Cn
+sG
+av
+Dr
+Dr
+DQ
+Em
+En
+lr
+pJ
+Dt
+Dt
+Gm
+Dt
+Dt
+Dt
+Dt
+Dt
+Dt
+av
+XO
+Dt
+CQ
+gm
+Eo
+zk
+AR
aa
aa
+oC
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -53197,6 +48673,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -53231,6 +48708,8 @@ aa
aa
aa
aa
+"}
+(142,1,1) = {"
aa
aa
aa
@@ -53277,97 +48756,6 @@ aa
aa
aa
aa
-bg
-by
-bS
-ym
-bg
-ad
-aa
-aa
-VV
-pp
-cw
-QX
-Rx
-MA
-YQ
-dX
-eB
-eX
-Fq
-ga
-gD
-hc
-da
-ew
-iB
-WY
-cY
-Ou
-gQ
-lp
-di
-nZ
-nl
-nU
-ow
-oZ
-pz
-nl
-qV
-rF
-se
-sM
-Xw
-um
-bj
-SY
-wm
-wm
-wm
-xT
-yy
-bj
-zH
-Rw
-mL
-bj
-hU
-Sa
-Vi
-LM
-Vu
-IK
-QQ
-TN
-AC
-Wu
-av
-Do
-Do
-DN
-Ek
-DC
-Ea
-Fo
-Dt
-ad
-ad
-ad
-Dt
-Ni
-As
-DC
-Hc
-Hk
-Eo
-ad
-ad
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -53431,37 +48819,27 @@ aa
aa
aa
aa
-"}
-(138,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
+zW
+dx
+sq
+XL
+PN
+PN
+QR
+jy
+wC
+qe
+AD
+qe
+qe
+nH
+Xo
+Xo
+Xo
+Xo
+Yv
+uH
+jy
aa
aa
aa
@@ -53485,6 +48863,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -53497,9 +48876,42 @@ aa
aa
aa
aa
+Cn
+OA
+Vx
+Gb
+Gb
+Gb
+Gb
+Ul
+Eq
+Fr
+Dt
+gD
+wP
+Sg
+Ii
+WJ
+Pi
+NQ
+XF
+NQ
+wg
+av
+Ig
+gm
aa
+Ho
+QV
aa
aa
+oC
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -53534,93 +48946,10 @@ aa
aa
aa
aa
-bg
-bg
-bg
-bg
-bg
aa
aa
aa
-cw
-Tc
-Yq
-QX
-Rx
-Nw
-dq
-dY
-dY
-eY
-Fq
-dZ
-dr
-eZ
-da
-gb
-iC
-eZ
-cY
-ki
-Xx
-lp
-di
-nZ
-nl
-nl
-nl
-nl
-nl
-nl
-qW
-rG
-qk
-sN
-Xw
-un
-bj
-bj
-wn
-wQ
-xs
-xU
-xW
-bj
-zI
-Rw
-Ay
-bj
-hU
-Sa
-ZW
-MJ
-Sa
-dk
-TN
-CO
-AC
-Pc
-av
-Mh
-Dp
-DO
-Ek
-En
-Gt
-Fp
-Dt
aa
-ad
-ad
-Dt
-Gu
-Za
-DC
-Hd
-Hl
-Eo
-ad
-ad
aa
aa
aa
@@ -53636,6 +48965,8 @@ aa
aa
aa
aa
+"}
+(143,1,1) = {"
aa
aa
aa
@@ -53688,8 +49019,6 @@ aa
aa
aa
aa
-"}
-(139,1,1) = {"
aa
aa
aa
@@ -53747,6 +49076,27 @@ aa
aa
aa
aa
+zW
+Ua
+Ua
+sq
+lb
+zw
+oc
+tc
+zl
+Ro
+Tu
+aZ
+qe
+nH
+Xo
+Xo
+Xo
+Xo
+Yv
+uH
+jy
aa
aa
aa
@@ -53783,9 +49133,42 @@ aa
aa
aa
aa
+Cn
+wb
+av
+Ds
+DC
+DR
+En
+En
+Yu
+rc
+ym
+yh
+wA
+wA
+mC
+cv
+ph
+NQ
+NQ
+NQ
+wg
+av
+Tt
+ZM
aa
+Hp
+QV
aa
aa
+VM
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -53799,83 +49182,8 @@ aa
aa
aa
aa
-cw
-Tc
-cw
-cw
-Rx
-Nw
-OP
-Nw
-Nw
-Tq
-Fq
-TJ
-gE
-hd
-da
-gc
-iD
-hd
-cY
-LR
-LL
-LW
-cG
-ox
-nn
-nX
-oA
-pC
-pA
-qk
-ag
-rH
-qk
-sO
-tC
-um
-bj
-vy
-wo
-wR
-wR
-xV
-yA
-bj
-zJ
-Ai
-QO
-AO
-AY
-Sa
-Sa
-Sa
-Sa
-Th
-Ci
-AC
-AC
-Pc
-av
-Dq
-Dq
-DP
-Ek
-DC
-dQ
-Fp
-Dt
aa
-ad
aa
-Dt
-Gv
-GB
-GY
-Hd
-Hm
-Eo
aa
aa
aa
@@ -53914,6 +49222,8 @@ aa
aa
aa
aa
+"}
+(144,1,1) = {"
aa
aa
aa
@@ -53945,8 +49255,6 @@ aa
aa
aa
aa
-"}
-(140,1,1) = {"
aa
aa
aa
@@ -54025,6 +49333,27 @@ aa
aa
aa
aa
+zW
+zW
+zW
+zW
+zW
+zW
+zW
+zW
+wu
+qe
+CV
+CB
+CB
+Sv
+tz
+tz
+tz
+tz
+Sf
+PO
+zW
aa
aa
aa
@@ -54056,89 +49385,47 @@ aa
aa
aa
aa
-YW
-wf
-cJ
-cJ
-Rx
-Vj
-YY
-Po
-Vd
-Nw
-Fq
-cY
-cY
-cY
-cY
-cY
-cY
-cY
-cY
-LS
-gQ
-lq
-di
-mv
-nq
-qP
-pa
-qP
-pB
-qk
-qk
-qk
-qk
-sO
-Xw
-uo
-bj
-vz
-wp
-UC
-wp
-wp
-wp
-zh
-zK
-Ah
-Az
-bj
-Qy
-WV
-Ox
-ZD
-WV
-nR
-Bb
-CO
-Bb
-Wu
-av
-Dr
-Dr
-DQ
-Em
-CI
-CJ
-CK
-Dt
aa
-ad
aa
-Gm
-Dt
-GC
-Eo
-Eo
-Hn
-Dt
aa
aa
aa
+Cn
+bE
+av
+av
+OQ
+av
+Re
+En
+En
+XQ
+xk
+NQ
+Bj
+vA
+Cv
+NQ
+pV
+cv
+Oa
+Tz
+wg
+av
+Og
+av
aa
+Ho
+QV
aa
aa
+VM
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -54192,6 +49479,8 @@ aa
aa
aa
aa
+"}
+(145,1,1) = {"
aa
aa
aa
@@ -54202,8 +49491,6 @@ aa
aa
aa
aa
-"}
-(141,1,1) = {"
aa
aa
aa
@@ -54310,86 +49597,22 @@ aa
aa
aa
aa
-YW
-YW
-YW
-YW
-YW
-YW
-VJ
-YW
-Ib
-Ib
-Ib
-Ib
-fa
-Ib
-Wv
-SC
+zW
+zW
+jy
+jy
+jy
+jy
+zW
+Zz
+Bw
+rI
+Bw
Wv
-Pi
-PI
-PI
-PI
-OC
-PR
-gQ
-lp
-di
-mw
-WG
-nZ
-nS
-nZ
-nS
-MO
-nS
-nS
-zz
-sO
-Xw
-um
-bj
-vA
-jS
-wS
-xt
-wq
-yB
-bj
-zL
-Aj
-AA
-bj
-AZ
-kY
-AC
-AC
-BM
-BM
-AC
-AC
-CL
-RB
-aH
-bk
-DC
-DC
-DC
-kA
-XR
-Fr
-Dt
-ad
-ad
-ad
+zW
+zW
aa
-Eo
-GD
-Eo
aa
-Ho
-ad
aa
aa
aa
@@ -54424,11 +49647,42 @@ aa
aa
aa
aa
+Cn
+WW
+XO
+RX
+DC
+av
+Eo
+Eo
+Eo
+av
+av
+av
+XO
+av
+pf
+xo
+xo
+ta
+pf
+NQ
+wg
aa
+Tx
aa
aa
+Ho
+QV
aa
aa
+VM
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -54459,8 +49713,6 @@ aa
aa
aa
aa
-"}
-(142,1,1) = {"
aa
aa
aa
@@ -54484,6 +49736,10 @@ aa
aa
aa
aa
+"}
+(146,1,1) = {"
+aa
+aa
aa
aa
aa
@@ -54567,95 +49823,19 @@ aa
aa
aa
aa
-VD
-Ux
-Ux
-Pu
-Te
-Ux
-Ux
-Ux
-Ib
-Dc
-ZV
-PV
-SN
-Ib
-Wv
-Wd
-JZ
-JZ
-JZ
-JZ
-JZ
-JZ
-LS
-gQ
-lp
-di
-mx
-nS
-nZ
-nS
-pc
-qQ
-nS
-pb
-ze
-qk
-sP
-Xw
-um
-bj
-bj
-bj
-bj
-bj
-bj
-wr
-bj
-bj
-bj
-bj
-bj
-Je
-Bl
-AC
-ad
-ad
aa
aa
-AC
-QV
-HZ
-av
-Ds
-DC
-DR
-En
-BO
-Gt
-Fs
-Dt
aa
-ad
aa
aa
-Dt
-XE
-Eo
aa
-Hp
-ad
aa
aa
-ad
aa
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -54680,6 +49860,14 @@ aa
aa
aa
aa
+zW
+jy
+jy
+zW
+jy
+jy
+zW
+aa
aa
aa
aa
@@ -54714,16 +49902,44 @@ aa
aa
aa
aa
+Cn
+Cn
+Cn
+WW
+av
+av
+av
+av
+WU
+WU
+WU
aa
aa
-"}
-(143,1,1) = {"
aa
+ad
+av
+Mo
+xo
+XC
+ta
+pf
+fs
+wg
aa
+mu
aa
aa
+Ho
+QV
aa
aa
+VM
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -54777,6 +49993,8 @@ aa
aa
aa
aa
+"}
+(147,1,1) = {"
aa
aa
aa
@@ -54824,95 +50042,19 @@ aa
aa
aa
aa
-VD
-LU
-Ux
-VF
-Ux
-Ux
-Ux
-Ux
-Ib
-IC
-Io
-YP
-YK
-Ib
-jl
-fC
-JZ
-hA
-ib
-iE
-ji
-JZ
-LT
-gQ
-lr
-di
-di
-nS
-nZ
-oz
-oz
-oz
-ql
-oz
-oz
-sf
-sQ
-tD
-up
-uO
-vB
-tR
-wT
-xu
-xX
-wT
-zi
-wT
-Ak
-AB
-AP
-WP
-NX
-AC
aa
-ad
aa
aa
-AC
-CM
-WW
-av
-Dt
-OQ
-Dt
-Re
-ED
-Fw
-Dt
-Dt
aa
-ad
-ad
aa
-Dt
-GF
-Dt
aa
-Ho
-ad
aa
aa
-ad
aa
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -54973,8 +50115,6 @@ aa
aa
aa
aa
-"}
-(144,1,1) = {"
aa
aa
aa
@@ -55019,16 +50159,44 @@ aa
aa
aa
aa
+Cn
+WB
+Xj
+PC
+OX
+Tv
+Ze
+WB
+WU
aa
aa
aa
aa
aa
+ad
+av
+av
+av
+XO
+av
+av
+av
+wg
aa
+mu
aa
aa
+Ho
+QV
aa
aa
+VM
+oC
+oC
+oC
+oC
+oC
+VM
aa
aa
aa
@@ -55079,97 +50247,25 @@ aa
aa
aa
aa
-YW
-YW
-YW
-Ux
-Ux
-Ux
-Ux
-VF
-Ux
-LU
-Ia
-IC
-FN
-Yx
-Fg
-OD
-Wv
-jO
-RY
-hB
-ic
-hB
-jj
-jL
-Nj
-gT
-Vp
-mc
-di
-no
-ox
-oz
-pd
-QF
-pD
-qX
-oz
-sg
-sO
-Xw
-um
-uP
-Qz
-dP
-wU
-xv
-wU
-xv
-xy
-zM
-zQ
-AC
-AC
-Or
-WC
-AC
aa
-ad
aa
aa
-AC
-Cn
-Wk
-XO
-Zh
-DC
-Dt
-Eo
-BS
-Eo
-Dt
+"}
+(148,1,1) = {"
aa
aa
-ad
aa
aa
aa
-GJ
aa
aa
-Ho
-ad
aa
aa
-ad
aa
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -55230,8 +50326,6 @@ aa
aa
aa
aa
-"}
-(145,1,1) = {"
aa
aa
aa
@@ -55322,111 +50416,119 @@ aa
aa
aa
aa
+Cn
+WB
+WB
+Qw
+Je
+Je
+Je
+Cn
+Cn
+Cn
aa
aa
aa
aa
+ad
aa
aa
aa
+ad
aa
aa
aa
aa
aa
+mu
aa
aa
-VD
-Ux
-Ux
-Ux
-Ux
-Ux
-VF
-VF
-Ux
-Ux
-Ia
-WT
-WD
-MQ
-Zl
-Ib
-OB
-kj
-JZ
-hC
-id
-iG
-jk
-JZ
-LS
-gQ
-lp
-md
-di
-np
-nZ
-oz
-MD
-pE
-qm
-qY
-oz
-sh
-sO
-tE
-um
-uS
-vD
-wt
-wV
-xw
-wV
-yD
-ws
-zN
-zQ
-ad
-AC
-AC
-Bm
-AC
+Hq
+Hz
aa
ad
+VM
+zX
+nD
+tk
+nD
+zX
+lf
ad
-PD
-PD
-PD
-PC
-PD
-PD
-PD
-PD
aa
-BT
aa
-ad
aa
aa
-ad
aa
aa
aa
-GJ
aa
aa
-Ho
-ad
aa
aa
-ad
aa
aa
aa
aa
aa
-ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(149,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
@@ -55487,8 +50589,6 @@ aa
aa
aa
aa
-"}
-(146,1,1) = {"
aa
aa
aa
@@ -55572,19 +50672,57 @@ aa
aa
aa
aa
+Cn
+Cn
+SZ
+kH
+Ty
+kH
+km
+Oh
+WK
+Zv
+Cn
aa
aa
aa
aa
+ad
aa
aa
aa
+ad
aa
aa
aa
aa
aa
+mu
+ad
aa
+Hr
+HA
+HH
+HS
+HV
+HS
+HH
+HH
+HH
+HS
+Vk
+HS
+HH
+HH
+HH
+HH
+HH
+HS
+HS
+HH
+HH
+JP
+Ka
aa
aa
aa
@@ -55593,97 +50731,24 @@ aa
aa
aa
aa
-VD
-VF
-Ux
-LU
-Ux
-VF
-Ux
-Ux
-Ux
-Ux
-Ib
-Ib
-Ib
-Ib
-Vl
-Ib
-Ib
-kl
-JZ
-JZ
-JZ
-JZ
-JZ
-JZ
-LS
-kN
-lp
-me
-di
-nS
-nZ
-oz
-pf
-pF
-qn
-qZ
-oz
-oz
-sO
-Xw
-um
-uS
-vE
-wu
-wW
-xx
-wW
-yE
-ws
-zO
-zQ
-ad
aa
-AC
-TW
-AC
aa
aa
aa
-PD
-RR
-Xj
-PC
-ZO
-OX
-Tv
-Ze
-WU
-Mt
-Vz
-NA
-yQ
aa
aa
aa
aa
aa
-GJ
aa
aa
-Ho
-ad
aa
aa
-ad
aa
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -55699,6 +50764,8 @@ aa
aa
aa
aa
+"}
+(150,1,1) = {"
aa
aa
aa
@@ -55744,8 +50811,6 @@ aa
aa
aa
aa
-"}
-(147,1,1) = {"
aa
aa
aa
@@ -55850,95 +50915,37 @@ aa
aa
aa
aa
-VD
-Ux
-Ux
-Ux
-Ux
-Ux
-Ux
-Ux
-VF
-Ux
-Ux
-Ux
-Nv
-Sz
-Ic
-gQ
-Xx
-lt
-LL
-LL
-Mf
-kk
-Ie
-LQ
-LV
-kL
-lp
-di
-di
-nV
-nZ
-oz
-pe
-pF
-qo
-qY
-rI
-oz
-Yo
-tG
-um
-uS
-vC
-wv
-ws
-xy
-xY
-yF
-zj
-zP
-zQ
aa
aa
-AC
-Ca
-AC
aa
aa
aa
-PD
-kS
-QC
-Qw
-Qb
-PD
-PD
-PD
-PD
-BU
-PD
-PD
-VO
aa
aa
aa
aa
aa
-GJ
aa
aa
-Hq
-Hz
aa
+aa
+Cn
+cH
+OT
+OT
+UO
+Sr
+Ml
+DH
+Cn
+Cn
+Cn
+ad
+ad
+ad
ad
ad
ad
-aa
-aa
-aa
ad
ad
ad
@@ -55947,19 +50954,32 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Lb
+GC
+Wz
+GC
+gn
+QW
+QW
+qY
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+lg
+JQ
+Kb
aa
aa
aa
@@ -56002,7 +51022,7 @@ aa
aa
aa
"}
-(148,1,1) = {"
+(151,1,1) = {"
aa
aa
aa
@@ -56107,109 +51127,14 @@ aa
aa
aa
aa
-VD
-Ux
-Ux
-VF
-Ux
-MC
-Yp
-Ux
-Ux
-Ux
-Ux
-Ux
-WS
-gQ
-Ic
-gQ
-gQ
-gQ
-Xx
-gQ
-gQ
-gQ
-gQ
-gQ
-kh
-kO
-ls
-ae
-my
-nS
-NC
-oz
-oz
-pG
-qp
-qY
-pe
-oz
-sR
-tH
-us
-uT
-oz
-oz
-oz
-xz
-oz
-oz
-zk
-zQ
-zQ
aa
aa
-ad
-cn
-ad
-ad
-ad
-ad
-PD
-SZ
-kH
-Ty
-MK
-km
-Oh
-PD
-Ep
-EH
-Ep
-PD
-VO
aa
aa
aa
aa
aa
-GJ
-ad
aa
-Hr
-HA
-HH
-HS
-HV
-HS
-HH
-HH
-HH
-HS
-Ig
-HS
-HH
-HH
-HH
-HH
-HH
-HS
-HS
-HH
-HH
-JP
-Ka
aa
aa
aa
@@ -56258,11 +51183,18 @@ aa
aa
aa
aa
-"}
-(149,1,1) = {"
aa
aa
aa
+Cn
+Cn
+Cn
+Cn
+Cn
+Cn
+Cn
+Cn
+Cn
aa
aa
aa
@@ -56273,15 +51205,18 @@ aa
aa
aa
aa
+ad
aa
aa
aa
aa
aa
+GJ
aa
aa
aa
aa
+ad
aa
aa
aa
@@ -56296,8 +51231,12 @@ aa
aa
aa
aa
+ad
+ad
aa
aa
+QV
+Ho
aa
aa
aa
@@ -56339,6 +51278,8 @@ aa
aa
aa
aa
+"}
+(152,1,1) = {"
aa
aa
aa
@@ -56364,109 +51305,19 @@ aa
aa
aa
aa
-VD
-Ux
-Ux
-Rm
-Yh
-Zs
-NL
-Qi
-TG
-Yh
-TG
-Yh
-he
-Nt
-Sq
-Oi
-Mm
-Mm
-Me
-LP
-LP
-LP
-LZ
-Ma
-Mb
-Id
-LY
-ae
-mz
-nW
-oy
-ZB
-oz
-pH
-qq
-ra
-rJ
-si
-sS
-tI
-ut
-uU
-vF
-ww
-wX
-pD
-xZ
-oz
aa
aa
-ad
-ad
aa
aa
-ad
aa
aa
aa
aa
-PD
-WB
-OF
-UO
-Sr
-Ml
-DH
-DS
-Ep
-EI
-Ep
-PD
-TR
aa
aa
aa
aa
aa
-GJ
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-JQ
-Kb
aa
aa
aa
@@ -56515,8 +51366,6 @@ aa
aa
aa
aa
-"}
-(150,1,1) = {"
aa
aa
aa
@@ -56599,6 +51448,7 @@ aa
aa
aa
aa
+Pr
aa
aa
aa
@@ -56612,6 +51462,18 @@ aa
aa
aa
aa
+ad
+aa
+aa
+aa
+aa
+aa
+GJ
+aa
+aa
+aa
+aa
+ad
aa
aa
aa
@@ -56621,89 +51483,27 @@ aa
aa
aa
aa
-YW
-YW
-YW
-XF
-YW
-YW
-YW
-XF
-YW
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-if
-ae
-ae
-ae
-ae
-kP
-ae
-ae
-ae
-ae
-oa
-ae
-oz
-pI
-qr
-rb
-rK
-sj
-sT
-Pd
-tJ
-RN
-vG
-wx
-pD
-pD
-ya
-pU
aa
aa
aa
-ad
aa
aa
ad
aa
aa
aa
+QV
+Kc
aa
-PD
-TQ
-Vb
-XX
-ez
-Vb
-Nz
-PD
-Ep
-Ep
-Ep
-PD
-cn
aa
aa
aa
aa
aa
-GJ
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -56718,12 +51518,8 @@ aa
aa
aa
aa
-ad
-ad
aa
aa
-ad
-Ho
aa
aa
aa
@@ -56739,6 +51535,22 @@ aa
aa
aa
aa
+"}
+(153,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -56772,8 +51584,6 @@ aa
aa
aa
aa
-"}
-(151,1,1) = {"
aa
aa
aa
@@ -56878,89 +51688,23 @@ aa
aa
aa
aa
-YW
-Ux
-Ud
-Xp
-Dj
-YW
-Ju
-RF
-DA
-ae
-ar
-dt
-dd
-ae
-ar
-dt
-dd
-ae
-hf
-hF
-gg
-iI
-jm
-ae
-kn
-kQ
-lv
-ae
-mA
-nr
-ob
-Mi
-oz
-pJ
-hr
-qs
-oz
-oz
-sU
-tK
-uu
-oz
-oz
-wy
-pD
-pD
-yb
-pU
-ad
aa
aa
-ad
aa
aa
-ad
aa
aa
aa
aa
-PD
-PD
-PD
-PD
-PD
-PD
-PD
-PD
-PD
-PD
-PD
-PD
-ad
aa
aa
aa
aa
aa
-GJ
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -56979,8 +51723,14 @@ ad
aa
aa
aa
+aa
+aa
+VO
+aa
+aa
+aa
+aa
ad
-Kc
aa
aa
aa
@@ -56995,6 +51745,19 @@ aa
aa
aa
aa
+ad
+aa
+aa
+aa
+QV
+Ho
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -57030,7 +51793,8 @@ aa
aa
aa
"}
-(152,1,1) = {"
+(154,1,1) = {"
+aa
aa
aa
aa
@@ -57135,61 +51899,6 @@ aa
aa
aa
aa
-YW
-VF
-kG
-VS
-DA
-YW
-Ux
-Xo
-Ux
-ae
-aw
-du
-dd
-ae
-aw
-du
-dd
-ae
-hg
-db
-ig
-iJ
-iJ
-ae
-ko
-RV
-lw
-ae
-mB
-ns
-ob
-oB
-oz
-pK
-qt
-rd
-rL
-sk
-sV
-tL
-uv
-oz
-vH
-wz
-qw
-xA
-yc
-pU
-ad
-ad
-ad
-ad
-ad
-ad
-ad
aa
aa
aa
@@ -57198,26 +51907,14 @@ aa
aa
aa
aa
-ad
aa
aa
aa
aa
-cn
-cn
-ad
-cn
-cn
-cn
-cn
-cn
-cn
-VO
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -57232,12 +51929,9 @@ aa
aa
aa
aa
-ad
aa
aa
aa
-ad
-Ho
aa
aa
aa
@@ -57281,15 +51975,21 @@ aa
aa
aa
aa
+ad
+ad
+ad
aa
aa
aa
aa
+GJ
aa
-"}
-(153,1,1) = {"
aa
aa
+ad
+ad
+ad
+ad
aa
aa
aa
@@ -57306,6 +52006,8 @@ aa
aa
aa
aa
+QV
+Ho
aa
aa
aa
@@ -57347,6 +52049,8 @@ aa
aa
aa
aa
+"}
+(155,1,1) = {"
aa
aa
aa
@@ -57392,61 +52096,12 @@ aa
aa
aa
aa
-YW
-YW
-YW
-Ux
-Ux
-YW
-kG
-VF
-Ux
-ae
-aw
-dd
-dd
-ae
-aw
-dd
-dd
-ae
-hh
-db
-ih
-iK
-jn
-ae
-kp
-kR
-lx
-ae
-mC
-db
-ob
-oB
-oz
-pL
-qu
-re
-rL
-sk
-sW
-tM
-uw
-oz
-jT
-pe
-wY
-xB
-yd
-oz
aa
aa
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -57463,18 +52118,13 @@ aa
aa
aa
aa
-ad
-ad
aa
aa
aa
aa
-GJ
aa
aa
aa
-ad
-ad
aa
aa
aa
@@ -57493,8 +52143,6 @@ aa
aa
aa
aa
-ad
-Ho
aa
aa
aa
@@ -57543,8 +52191,6 @@ aa
aa
aa
aa
-"}
-(154,1,1) = {"
aa
aa
aa
@@ -57586,8 +52232,21 @@ aa
aa
aa
aa
+ad
+FE
+FE
+FE
+Gh
+Gh
aa
+GH
aa
+Gh
+Gh
+FE
+FE
+FE
+ad
aa
aa
aa
@@ -57604,6 +52263,8 @@ aa
aa
aa
aa
+QV
+Ho
aa
aa
aa
@@ -57645,65 +52306,16 @@ aa
aa
aa
aa
+"}
+(156,1,1) = {"
aa
aa
aa
aa
aa
aa
-YW
-VD
-VD
-YW
-YW
-VD
-VD
-ae
-aA
-dv
-eb
-ae
-fb
-fK
-gd
-ae
-db
-db
-ih
-iL
-jo
-ae
-ae
-kP
-ae
-ae
-mD
-db
-ob
-oB
-oz
-pM
-qu
-pD
-rM
-oz
-pU
-tN
-pU
-oz
-oz
-wA
-sk
-xC
-rQ
-Wb
-RD
-RD
-RD
-RD
aa
aa
-ad
aa
aa
aa
@@ -57720,19 +52332,8 @@ aa
aa
aa
aa
-FE
-FE
-FE
-Gh
-Gh
aa
-GH
aa
-Gh
-Gh
-FE
-FE
-FE
aa
aa
aa
@@ -57750,8 +52351,6 @@ aa
aa
aa
aa
-ad
-Ho
aa
aa
aa
@@ -57800,8 +52399,6 @@ aa
aa
aa
aa
-"}
-(155,1,1) = {"
aa
aa
aa
@@ -57892,6 +52489,21 @@ aa
aa
aa
aa
+ad
+FF
+Ga
+Ga
+Ga
+Ga
+Gw
+Jt
+GM
+GN
+GN
+GN
+GN
+GO
+ad
aa
aa
aa
@@ -57908,6 +52520,8 @@ aa
aa
aa
aa
+QV
+Ho
aa
aa
aa
@@ -57915,52 +52529,8 @@ aa
aa
aa
aa
-ae
-fc
-dw
-ec
-ae
-fc
-dw
-ge
-ae
-ae
-db
-ii
-iM
-jp
-ae
-kr
-kT
-lz
-ae
-mG
-db
-ob
-oB
-oz
-pN
-qv
-rf
-rN
-rf
-rf
-Tj
-rN
-uV
-rf
-sp
-pD
-xD
-ye
-Wb
-Yc
-Vn
-iH
-RD
aa
aa
-ad
aa
aa
aa
@@ -57977,19 +52547,6 @@ aa
aa
aa
aa
-FF
-Ga
-Ga
-Ga
-Ga
-Gw
-Jt
-GM
-GN
-GN
-GN
-GN
-GO
aa
aa
aa
@@ -58006,9 +52563,9 @@ aa
aa
aa
aa
+"}
+(157,1,1) = {"
aa
-ad
-Ho
aa
aa
aa
@@ -58057,8 +52614,6 @@ aa
aa
aa
aa
-"}
-(156,1,1) = {"
aa
aa
aa
@@ -58106,6 +52661,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -58172,52 +52728,8 @@ aa
aa
aa
aa
-cL
-db
-db
-ob
-db
-db
-db
-ob
-gF
-ae
-hG
-ij
-iN
-jq
-ae
-ks
-kU
-lA
-ae
-mF
-db
-ob
-oB
-oz
-pO
-qw
-rg
-rO
-qw
-rg
-Pj
-Sp
-XA
-Uv
-wB
-Uv
-xE
-Ls
-XZ
-Un
-ZI
-Rb
-RD
aa
aa
-ad
aa
aa
aa
@@ -58234,6 +52746,7 @@ aa
aa
aa
aa
+ad
FG
FG
FG
@@ -58247,6 +52760,7 @@ FG
FG
FG
FG
+ad
aa
aa
aa
@@ -58263,8 +52777,7 @@ aa
aa
aa
aa
-aa
-ad
+QV
Ho
aa
aa
@@ -58307,19 +52820,8 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
"}
-(157,1,1) = {"
-aa
-aa
-aa
-aa
+(158,1,1) = {"
aa
aa
aa
@@ -58413,7 +52915,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -58429,52 +52930,8 @@ aa
aa
aa
aa
-cL
-bo
-dx
-ee
-eD
-dx
-dx
-Rl
-gG
-hj
-hH
-ik
-iO
-jr
-jP
-kt
-kV
-lB
-mf
-mE
-nt
-oc
-db
-oz
-sX
-qx
-rh
-rP
-sm
-qA
-tO
-ux
-uW
-vJ
-wC
-wZ
-xF
-yf
-Wb
-ZK
-EG
-Mw
-RD
aa
aa
-ad
aa
aa
aa
@@ -58493,15 +52950,12 @@ aa
aa
aa
aa
-ad
aa
aa
aa
-Jt
aa
aa
aa
-ad
aa
aa
aa
@@ -58510,7 +52964,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -58521,8 +52974,6 @@ aa
aa
aa
aa
-ad
-Kd
aa
aa
aa
@@ -58552,33 +53003,39 @@ aa
aa
aa
aa
+ad
aa
aa
+ad
aa
aa
aa
+Jt
aa
aa
aa
+ad
aa
aa
+ad
aa
aa
aa
aa
aa
+ab
aa
aa
aa
aa
-"}
-(158,1,1) = {"
aa
aa
aa
aa
aa
aa
+QV
+Kd
aa
aa
aa
@@ -58620,6 +53077,8 @@ aa
aa
aa
aa
+"}
+(159,1,1) = {"
aa
aa
aa
@@ -58686,52 +53145,8 @@ aa
aa
aa
aa
-ae
-aU
-dy
-ef
-ae
-fd
-gf
-iP
-gH
-ae
-hI
-db
-db
-js
-ae
-ku
-db
-lC
-ae
-mH
-nu
-od
-oC
-oz
-oz
-oz
-pJ
-rQ
-sn
-oz
-oz
-oz
-pJ
-vK
-oz
-xa
-xG
-oz
-Wb
-RD
-RD
-Xl
-RD
aa
aa
-ad
aa
aa
aa
@@ -58748,19 +53163,8 @@ aa
aa
aa
aa
-FE
-FE
-FE
-FE
-FE
aa
-Jt
aa
-FE
-FE
-FE
-FE
-FE
aa
aa
aa
@@ -58778,10 +53182,6 @@ aa
aa
aa
aa
-ad
-Kc
-ad
-ad
aa
aa
aa
@@ -58828,8 +53228,6 @@ aa
aa
aa
aa
-"}
-(159,1,1) = {"
aa
aa
aa
@@ -58862,8 +53260,21 @@ aa
aa
aa
aa
+ad
+FE
+FE
+FE
+FE
+FE
aa
+Jt
aa
+FE
+FE
+FE
+FE
+FE
+ad
aa
aa
aa
@@ -58880,6 +53291,10 @@ aa
aa
aa
aa
+QV
+Kc
+ad
+ad
aa
aa
aa
@@ -58919,6 +53334,8 @@ aa
aa
aa
aa
+"}
+(160,1,1) = {"
aa
aa
aa
@@ -58943,52 +53360,10 @@ aa
aa
aa
aa
-ae
-dc
-dz
-eg
-ae
-fe
-db
-db
-gI
-ae
-hJ
-db
-db
-jt
-ae
-kv
-kW
-lD
-ae
-oD
-nv
-oD
-oD
-oz
-pP
-qy
-ri
-qu
-so
-yG
-oz
-uy
-uX
-vL
-oz
-xb
-qA
-yg
-an
-oz
-ad
aa
aa
aa
aa
-ad
aa
aa
aa
@@ -59005,19 +53380,6 @@ aa
aa
aa
aa
-FF
-Ga
-Ga
-Ga
-Ga
-Gw
-Jt
-GM
-GN
-GN
-GN
-GN
-GO
aa
aa
aa
@@ -59035,8 +53397,6 @@ aa
aa
aa
aa
-ad
-Ho
aa
aa
aa
@@ -59085,8 +53445,6 @@ aa
aa
aa
aa
-"}
-(160,1,1) = {"
aa
aa
aa
@@ -59159,6 +53517,21 @@ aa
aa
aa
aa
+ad
+FF
+Ga
+Ga
+Ga
+Ga
+Gw
+Jt
+GM
+GN
+GN
+GN
+GN
+GO
+ad
aa
aa
aa
@@ -59175,6 +53548,8 @@ aa
aa
aa
aa
+QV
+Ho
aa
aa
aa
@@ -59200,46 +53575,6 @@ aa
aa
aa
aa
-ae
-dd
-dd
-aw
-ae
-ff
-db
-gg
-gJ
-ae
-hK
-db
-db
-ju
-ae
-kw
-db
-lE
-ae
-mJ
-nw
-oe
-mJ
-oz
-pQ
-qz
-rj
-qv
-sp
-sY
-oz
-uy
-uZ
-OY
-oz
-Va
-pD
-pD
-yH
-pU
aa
aa
aa
@@ -59256,25 +53591,16 @@ aa
aa
aa
aa
+"}
+(161,1,1) = {"
aa
aa
aa
aa
aa
aa
-FG
-FG
-FG
-FG
-FG
aa
-Jt
aa
-FG
-FG
-FG
-FG
-FG
aa
aa
aa
@@ -59292,8 +53618,6 @@ aa
aa
aa
aa
-ad
-Ho
aa
aa
aa
@@ -59342,8 +53666,6 @@ aa
aa
aa
aa
-"}
-(161,1,1) = {"
aa
aa
aa
@@ -59452,51 +53774,24 @@ aa
aa
aa
aa
+ad
+FG
+FG
+FG
+FG
+FG
aa
+Jt
aa
+FG
+FG
+FG
+FG
+FG
+ad
aa
aa
aa
-ae
-dd
-dd
-aw
-ae
-fg
-gh
-OL
-gK
-ae
-hL
-in
-iQ
-jv
-ae
-kx
-db
-lF
-ae
-mJ
-mJ
-mJ
-oE
-oz
-pR
-qA
-rk
-rR
-sq
-sZ
-oz
-uy
-uZ
-vM
-oz
-xc
-pD
-pD
-yI
-pU
aa
aa
aa
@@ -59510,6 +53805,8 @@ aa
aa
aa
aa
+QV
+Ho
aa
aa
aa
@@ -59521,15 +53818,12 @@ aa
aa
aa
aa
-ad
aa
aa
aa
-Jt
aa
aa
aa
-ad
aa
aa
aa
@@ -59549,13 +53843,13 @@ aa
aa
aa
aa
-ad
-Ho
aa
aa
aa
aa
aa
+"}
+(162,1,1) = {"
aa
aa
aa
@@ -59599,8 +53893,6 @@ aa
aa
aa
aa
-"}
-(162,1,1) = {"
aa
aa
aa
@@ -59714,46 +54006,6 @@ aa
aa
aa
aa
-ae
-dd
-dA
-eh
-ae
-fh
-db
-gi
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ky
-db
-lG
-ae
-mK
-mK
-mK
-mK
-oz
-pS
-pD
-rl
-pD
-pD
-ta
-oz
-uy
-uZ
-vN
-oz
-xd
-pD
-pD
-yJ
-pU
aa
aa
aa
@@ -59776,38 +54028,29 @@ aa
aa
aa
aa
-FE
-FE
-FE
-FE
-FE
aa
-Jt
aa
-FE
-FE
-FE
-FE
-FE
aa
+ad
aa
aa
+ad
aa
aa
aa
+Jt
aa
aa
aa
ad
aa
aa
+ad
aa
aa
aa
aa
aa
-ad
-Ho
aa
aa
aa
@@ -59819,6 +54062,12 @@ aa
aa
aa
aa
+QV
+Ho
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -59971,46 +54220,6 @@ aa
aa
aa
aa
-ae
-ae
-ae
-ae
-ae
-cL
-cL
-cL
-ae
-hm
-hN
-io
-iR
-ZT
-db
-kz
-db
-lH
-ae
-ae
-ae
-ae
-ae
-oz
-pT
-qB
-pD
-rS
-pD
-tb
-oz
-oz
-pU
-oz
-oz
-xe
-xH
-yh
-yK
-oz
aa
aa
aa
@@ -60033,19 +54242,6 @@ aa
aa
aa
aa
-FF
-Ga
-Ga
-Ga
-Ga
-Gw
-Jt
-GM
-GN
-GN
-GN
-GN
-GO
aa
aa
aa
@@ -60055,22 +54251,58 @@ aa
aa
aa
aa
-ad
aa
aa
aa
aa
aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+dl
+dl
+dl
+dl
+dl
+aa
Jt
aa
+dl
+dl
+dl
+dl
+dl
ad
-Kc
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -60079,6 +54311,23 @@ aa
aa
aa
aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+QV
+Ho
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -60234,40 +54483,13 @@ aa
aa
aa
aa
-ad
-ad
-ae
-hn
-hO
-iS
-iT
-db
-jw
-db
-db
-zd
-ae
aa
aa
aa
aa
-oz
-pU
-pU
-oz
-oz
-pU
-pU
-oz
aa
aa
aa
-oz
-oz
-pU
-pU
-oz
-oz
aa
aa
aa
@@ -60290,19 +54512,7 @@ aa
aa
aa
aa
-FG
-FG
-FG
-FG
-FG
aa
-GI
-aa
-FG
-FG
-FG
-FG
-FG
aa
aa
aa
@@ -60312,17 +54522,10 @@ aa
aa
aa
aa
-ad
aa
aa
aa
aa
-ac
-Jt
-aS
-aS
-Ke
-aS
aa
aa
aa
@@ -60342,6 +54545,21 @@ aa
aa
aa
aa
+ad
+RF
+BP
+BP
+BP
+BP
+Gw
+Jt
+GM
+GG
+GG
+GG
+GG
+NM
+ad
aa
aa
aa
@@ -60350,12 +54568,16 @@ aa
aa
aa
aa
+ad
aa
aa
aa
aa
aa
+Jt
aa
+QV
+Kc
aa
aa
aa
@@ -60370,8 +54592,6 @@ aa
aa
aa
aa
-"}
-(165,1,1) = {"
aa
aa
aa
@@ -60399,6 +54619,8 @@ aa
aa
aa
aa
+"}
+(165,1,1) = {"
aa
aa
aa
@@ -60492,19 +54714,6 @@ aa
aa
aa
aa
-ad
-ae
-hM
-ip
-QP
-BC
-jx
-db
-db
-db
-Qm
-ae
-ad
aa
aa
aa
@@ -60553,7 +54762,6 @@ aa
aa
aa
aa
-GJ
aa
aa
aa
@@ -60568,24 +54776,6 @@ aa
aa
aa
aa
-ad
-ad
-aa
-aa
-ad
-ad
-Ih
-Bz
-aS
-JR
-Kf
-Ih
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -60612,8 +54802,21 @@ aa
aa
aa
aa
+ad
+ua
+ua
+ua
+ua
+ua
aa
+Jt
aa
+ua
+ua
+ua
+ua
+ua
+ad
aa
aa
aa
@@ -60622,13 +54825,18 @@ aa
aa
aa
aa
+ad
aa
aa
aa
aa
+aS
+Jt
+aS
+lX
+Ke
+aS
aa
-"}
-(166,1,1) = {"
aa
aa
aa
@@ -60668,6 +54876,8 @@ aa
aa
aa
aa
+"}
+(166,1,1) = {"
aa
aa
aa
@@ -60750,17 +54960,6 @@ aa
aa
aa
aa
-ae
-ae
-ae
-ae
-tT
-ae
-jR
-db
-db
-MI
-ac
aa
aa
aa
@@ -60810,7 +55009,6 @@ aa
aa
aa
aa
-GJ
aa
aa
aa
@@ -60825,18 +55023,6 @@ aa
aa
aa
aa
-ad
-ad
-ad
-ad
-ad
-ad
-Ih
-NU
-aS
-JR
-Kg
-Ih
aa
aa
aa
@@ -60873,27 +55059,40 @@ aa
aa
aa
aa
+ad
aa
aa
+ad
aa
aa
aa
+Jt
aa
aa
aa
+ad
aa
aa
+ad
aa
-"}
-(167,1,1) = {"
aa
aa
aa
aa
aa
aa
+ad
+ad
aa
aa
+ad
+ad
+Ih
+Bz
+aS
+qD
+Kf
+Ih
aa
aa
aa
@@ -60934,6 +55133,8 @@ aa
aa
aa
aa
+"}
+(167,1,1) = {"
aa
aa
aa
@@ -61009,15 +55210,6 @@ aa
aa
aa
aa
-ad
-ae
-ae
-ae
-ae
-cL
-cL
-cL
-ac
aa
aa
aa
@@ -61067,7 +55259,6 @@ aa
aa
aa
aa
-GP
aa
aa
aa
@@ -61081,19 +55272,6 @@ aa
aa
aa
aa
-ad
-ad
-cn
-ad
-ad
-ad
-ad
-Ih
-Ik
-aS
-JS
-Kh
-Ih
aa
aa
aa
@@ -61138,17 +55316,40 @@ aa
aa
aa
aa
+ad
+FE
+FE
+FE
+FE
+FE
aa
+Jt
aa
+FE
+FE
+FE
+FE
+FE
+ad
aa
-"}
-(168,1,1) = {"
aa
aa
aa
aa
aa
aa
+ad
+ad
+ad
+ad
+ad
+ad
+Ih
+NU
+aS
+sJ
+Kg
+Ih
aa
aa
aa
@@ -61189,6 +55390,8 @@ aa
aa
aa
aa
+"}
+(168,1,1) = {"
aa
aa
aa
@@ -61338,26 +55541,8 @@ aa
aa
aa
aa
-ad
-cn
-cn
-aS
-aS
-aS
-Ih
-aS
-XT
-Il
-Il
-Jv
-aS
-Ih
-Ih
-aS
aa
aa
-ad
-ad
aa
aa
aa
@@ -61388,18 +55573,44 @@ aa
aa
aa
aa
+ad
+FF
+Ga
+Ga
+Ga
+Ga
+Gw
+Jt
+GM
+GN
+GN
+GN
+GN
+GO
+ad
aa
aa
aa
aa
aa
aa
+ad
+ad
+cn
+ad
+ad
+ad
+ad
+Ih
+Ik
+aS
+JS
+Kh
+Ih
aa
aa
aa
aa
-"}
-(169,1,1) = {"
aa
aa
aa
@@ -61436,6 +55647,8 @@ aa
aa
aa
aa
+"}
+(169,1,1) = {"
aa
aa
aa
@@ -61595,26 +55808,7 @@ aa
aa
aa
aa
-ad
-aS
-lO
-aS
-cK
-Vc
-Ns
-Il
-RC
-Il
-Il
-Il
-Il
-Il
-Il
-aS
aa
-ad
-ad
-ad
aa
aa
aa
@@ -61636,16 +55830,47 @@ aa
aa
aa
aa
+ad
+FG
+FG
+FG
+FG
+FG
aa
+GI
aa
+FG
+FG
+FG
+FG
+FG
+ad
aa
aa
aa
aa
aa
aa
+ad
+cn
+cn
+aS
+aS
+aS
+Ih
+aS
+XT
+Il
+IQ
+Jv
+aS
+Ih
+Ih
+aS
aa
aa
+ad
+ad
aa
aa
aa
@@ -61655,8 +55880,6 @@ aa
aa
aa
aa
-"}
-(170,1,1) = {"
aa
aa
aa
@@ -61681,6 +55904,18 @@ aa
aa
aa
aa
+"}
+(170,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -61852,26 +56087,6 @@ aa
aa
aa
aa
-ad
-aS
-dL
-aS
-ID
-Il
-RC
-Il
-Td
-hE
-yP
-Il
-Il
-Il
-Il
-aS
-Lb
-Lb
-cn
-ad
ad
aa
aa
@@ -61879,14 +56094,40 @@ aa
aa
aa
aa
+GJ
+aa
+aa
+aa
aa
aa
aa
+ad
+aa
aa
aa
aa
aa
aa
+ad
+aS
+lO
+aS
+cK
+Vc
+Ns
+Il
+RC
+Il
+mH
+yx
+yx
+yx
+tm
+aS
+aa
+ad
+ad
+ad
aa
aa
aa
@@ -61912,8 +56153,6 @@ aa
aa
aa
aa
-"}
-(171,1,1) = {"
aa
aa
aa
@@ -61922,6 +56161,8 @@ aa
aa
aa
aa
+"}
+(171,1,1) = {"
aa
aa
aa
@@ -62103,6 +56344,21 @@ aa
aa
aa
aa
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+GJ
+ad
+ad
+ad
+ad
+ad
+ad
+ad
aa
aa
aa
@@ -62111,25 +56367,25 @@ aa
aa
ad
aS
-VA
+dL
aS
ID
-Of
-Cm
Il
RC
-JF
-UA
-Ki
Il
+Td
+hE
+yP
Il
Il
+Il
+IQ
aS
-aS
-aS
-cn
+ad
+ad
cn
ad
+ad
aa
aa
aa
@@ -62162,6 +56418,8 @@ aa
aa
aa
aa
+"}
+(172,1,1) = {"
aa
aa
aa
@@ -62169,9 +56427,6 @@ aa
aa
aa
aa
-"}
-(172,1,1) = {"
-aa
aa
aa
aa
@@ -62353,6 +56608,7 @@ aa
aa
aa
aa
+GP
aa
aa
aa
@@ -62368,24 +56624,24 @@ aa
aa
ad
aS
-gr
-Iu
-Vc
-RW
-SI
-IE
-WZ
-JG
-Kj
-Ra
-JB
-Ji
-Im
+VA
+aS
+ID
+Of
+Cm
+Il
+RC
+Om
+mN
+VV
Il
Il
+IQ
aS
-OO
aS
+aS
+cn
+cn
ad
aa
aa
@@ -62419,6 +56675,9 @@ aa
aa
aa
aa
+"}
+(173,1,1) = {"
+aa
aa
aa
aa
@@ -62426,8 +56685,6 @@ aa
aa
aa
aa
-"}
-(173,1,1) = {"
aa
aa
aa
@@ -62595,7 +56852,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -62625,23 +56881,23 @@ aa
aa
ad
aS
-Il
-Iv
-IF
-IF
-eJ
-Jg
-Jg
-JH
-JT
-Kk
-JA
+gr
+Iu
+Vc
+RW
+SI
+eC
+yi
+JG
Kj
+Ra
JB
-JB
-Lc
+Ji
+Or
+yx
+tm
aS
-Jd
+OO
aS
ad
aa
@@ -62676,6 +56932,8 @@ aa
aa
aa
aa
+"}
+(174,1,1) = {"
aa
aa
aa
@@ -62683,9 +56941,6 @@ aa
aa
aa
aa
-"}
-(174,1,1) = {"
-aa
aa
aa
aa
@@ -62847,6 +57102,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -62883,22 +57139,22 @@ aa
ad
aS
Il
-Iw
-ID
-Il
-BN
-Jh
-Jw
-JI
-JI
-Kl
-JI
-KA
-KJ
-Jh
-KF
+Iv
+IF
+IF
+mv
+Jg
+Jg
+JH
+JT
+Kk
+JA
+Kj
+JB
+JB
+xJ
aS
-YG
+Jd
aS
ad
aa
@@ -62933,6 +57189,8 @@ aa
aa
aa
aa
+"}
+(175,1,1) = {"
aa
aa
aa
@@ -62940,8 +57198,6 @@ aa
aa
aa
aa
-"}
-(175,1,1) = {"
aa
aa
aa
@@ -63138,24 +57394,24 @@ aa
aa
aa
ad
-Ih
+aS
Il
Iw
ID
-II
-KE
-Jh
-Jx
-JJ
-JJ
-Km
-JJ
-JJ
-Jx
-KV
-KF
Il
-RC
+BN
+Jh
+Jw
+JI
+JI
+Kl
+JI
+KA
+KJ
+Jh
+oV
+aS
+YG
aS
ad
aa
@@ -63190,6 +57446,8 @@ aa
aa
aa
aa
+"}
+(176,1,1) = {"
aa
aa
aa
@@ -63197,8 +57455,6 @@ aa
aa
aa
aa
-"}
-(176,1,1) = {"
aa
aa
aa
@@ -63395,23 +57651,23 @@ aa
aa
aa
ad
-aS
-Im
-Iw
-Im
+Ih
Il
-QI
+Iw
+ID
+II
+KE
Jh
-Zx
+Jx
JJ
-JU
-JU
-Kw
-KB
-KK
-KW
-Ld
-Il
+JJ
+Km
+JJ
+JJ
+sR
+Jh
+Sp
+tm
RC
aS
ad
@@ -63447,6 +57703,8 @@ aa
aa
aa
aa
+"}
+(177,1,1) = {"
aa
aa
aa
@@ -63454,8 +57712,6 @@ aa
aa
aa
aa
-"}
-(177,1,1) = {"
aa
aa
aa
@@ -63652,23 +57908,23 @@ aa
aa
aa
ad
-Ih
-Il
-Ix
-Il
+aS
+Im
+Iw
+Im
Il
-Cu
-Cx
-Jy
-JK
+Mm
+Jh
+Zx
+JJ
JU
-Kn
-Kx
-VK
-KL
-KX
+JU
+Kw
+KB
+KK
+Ru
Ld
-Im
+IQ
RC
aS
ad
@@ -63704,6 +57960,8 @@ aa
aa
aa
aa
+"}
+(178,1,1) = {"
aa
aa
aa
@@ -63711,8 +57969,6 @@ aa
aa
aa
aa
-"}
-(178,1,1) = {"
aa
aa
aa
@@ -63909,24 +58165,24 @@ aa
aa
aa
ad
-aS
-Im
-Iw
-Im
+Ih
Il
-Cv
-Jh
-JA
-JJ
-JU
+Ix
+Il
+Il
+Ar
+Cx
+Jy
+JK
JU
-Ky
-JJ
-KM
-Jh
+Kn
+Kx
+VK
+KL
+oM
Ld
-Of
-Cm
+ZX
+RC
aS
ad
aa
@@ -63961,6 +58217,8 @@ aa
aa
aa
aa
+"}
+(179,1,1) = {"
aa
aa
aa
@@ -63968,8 +58226,6 @@ aa
aa
aa
aa
-"}
-(179,1,1) = {"
aa
aa
aa
@@ -64166,24 +58422,24 @@ aa
aa
aa
ad
-Ih
+aS
+Im
+Iw
+Im
Il
-Iy
-IG
-IN
-BJ
+fV
Jh
JA
JJ
+JU
+JU
+Ky
JJ
-Km
-JJ
-JJ
-Jx
-KY
-KF
-SI
-RM
+KM
+Jh
+Ld
+Hw
+Cm
aS
ad
aa
@@ -64218,6 +58474,8 @@ aa
aa
aa
aa
+"}
+(180,1,1) = {"
aa
aa
aa
@@ -64225,8 +58483,6 @@ aa
aa
aa
aa
-"}
-(180,1,1) = {"
aa
aa
aa
@@ -64425,22 +58681,22 @@ aa
ad
Ih
Il
-Iw
-Il
-BH
-Cw
-JB
-Cy
-Cy
-Cr
-JJ
+Iy
+IG
+IN
+KY
+Jh
JA
-KC
-IY
+JJ
+JJ
+Km
+JJ
+JJ
+sR
Jh
KF
-BN
-aS
+BG
+RM
aS
ad
aa
@@ -64475,6 +58731,8 @@ aa
aa
aa
aa
+"}
+(181,1,1) = {"
aa
aa
aa
@@ -64482,8 +58740,6 @@ aa
aa
aa
aa
-"}
-(181,1,1) = {"
aa
aa
aa
@@ -64684,21 +58940,21 @@ Ih
Il
Iw
Il
-BI
-JN
-Jh
-Jh
-Jh
-JA
-Ko
+uT
+Qe
+JB
+Cy
+Cy
+Cr
+JJ
JA
+KC
+IY
Jh
-KN
-Jh
-lS
-Mj
+KF
+SU
+aS
aS
-ad
ad
aa
aa
@@ -64732,6 +58988,8 @@ aa
aa
aa
aa
+"}
+(182,1,1) = {"
aa
aa
aa
@@ -64739,8 +58997,6 @@ aa
aa
aa
aa
-"}
-(182,1,1) = {"
aa
aa
aa
@@ -64941,19 +59197,19 @@ Ih
Il
Iw
Il
-BJ
+LZ
JN
-Jm
-JC
Jh
Jh
Jh
+JA
+Ko
+JA
Jh
+QY
Jh
-KO
-ID
-KF
-Il
+lS
+Mj
aS
ad
ad
@@ -64989,6 +59245,8 @@ aa
aa
aa
aa
+"}
+(183,1,1) = {"
aa
aa
aa
@@ -64996,8 +59254,6 @@ aa
aa
aa
aa
-"}
-(183,1,1) = {"
aa
aa
aa
@@ -65197,30 +59453,23 @@ ad
Ih
Il
Iw
-II
-BK
-JN
-Jn
-Jn
-JL
-JW
-Kp
+Il
+KY
JN
-Sk
+Jm
+JC
+Jh
+Jh
+Jh
+Jh
+Jh
+KO
+ID
+KF
IQ
-Il
-Le
-Lc
aS
ad
ad
-ad
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -65450,42 +59699,42 @@ aa
aa
aa
aa
-ad
-Ih
-Il
-Iw
-Il
-BJ
-JN
-Jn
-Jn
-Jn
-JD
-Kq
-Kz
-IG
-KP
-aS
-aS
-Lm
-aS
-aS
-aS
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+Ih
+Il
+Iw
+II
+Ca
+JN
+Jn
+Jn
+JL
+JW
+Kp
+JN
+Sk
+yE
+yx
+lR
+Lc
+aS
+ad
+ad
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -65707,26 +59956,33 @@ aa
aa
aa
aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
ad
-aS
-Im
+Ih
+Il
Iw
-Sk
-BJ
+Il
+KY
JN
-Jo
-JD
-JD
+Jn
+Jn
+Jn
JD
-Kr
-JN
-Il
-KQ
+Kq
+XB
+IG
+KP
+aS
+aS
+Lm
+aS
aS
-Lf
-Ln
-Lv
-LB
aS
ad
aa
@@ -65735,7 +59991,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -65761,14 +60016,16 @@ aa
aa
aa
aa
+"}
+(186,1,1) = {"
+aa
+aa
aa
aa
aa
aa
aa
aa
-"}
-(186,1,1) = {"
aa
aa
aa
@@ -65913,7 +60170,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -65965,26 +60221,26 @@ aa
aa
aa
ad
-Ih
-Il
+aS
+Im
Iw
-IJ
-BL
-Ch
-Jp
-Jp
-JM
-JX
-Ks
+Sk
+KY
+JN
+Jo
+JD
+JD
+JD
+Kr
JN
Il
KQ
aS
-Lg
-Lo
-Lw
-LC
-Ih
+Lf
+Ln
+Lv
+LB
+aS
ad
aa
aa
@@ -65992,6 +60248,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -66016,6 +60273,8 @@ aa
aa
aa
aa
+"}
+(187,1,1) = {"
aa
aa
aa
@@ -66024,10 +60283,6 @@ aa
aa
aa
aa
-"}
-(187,1,1) = {"
-aa
-aa
aa
aa
aa
@@ -66165,6 +60420,7 @@ aa
aa
aa
aa
+ab
aa
aa
aa
@@ -66222,25 +60478,25 @@ aa
aa
aa
ad
-aS
-Im
+Ih
+Il
Iw
-Im
-Cd
-JN
-Jq
-JD
-JD
-JD
-Kt
+IJ
+Pc
+Ch
+Jp
+Jp
+JM
+JX
+Ks
JN
-KD
-KR
-KZ
-Lh
-Lp
-Lx
-LD
+Il
+KQ
+aS
+Lg
+Lo
+Lw
+LC
Ih
ad
aa
@@ -66274,6 +60530,8 @@ aa
aa
aa
aa
+"}
+(188,1,1) = {"
aa
aa
aa
@@ -66281,8 +60539,6 @@ aa
aa
aa
aa
-"}
-(188,1,1) = {"
aa
aa
aa
@@ -66479,25 +60735,25 @@ aa
aa
aa
ad
-Ih
-Il
-Iy
-IG
-Ce
-Cp
-Jn
-Jn
-Jn
+aS
+Im
+Iw
+Im
+Xt
+JN
+Jq
JD
-Ku
-Js
-KE
-KS
-La
-Li
-yC
-JR
-JR
+JD
+JD
+Kt
+JN
+KD
+KR
+KZ
+Lh
+Lp
+Lx
+LD
Ih
ad
aa
@@ -66531,6 +60787,10 @@ aa
aa
aa
aa
+"}
+(189,1,1) = {"
+aa
+aa
aa
aa
aa
@@ -66538,8 +60798,6 @@ aa
aa
aa
aa
-"}
-(189,1,1) = {"
aa
aa
aa
@@ -66731,30 +60989,28 @@ aa
aa
aa
aa
-ab
aa
aa
ad
-ad
-aS
-Il
-Iw
+Ih
Il
-KF
-JN
+Iy
+IG
+Cw
+Cp
Jn
Jn
Jn
-JY
-Kv
-JN
-KF
-KT
-aS
-Lj
+JD
+Ku
+tw
+KE
+KS
+La
+Li
+yC
+JR
JR
-Ly
-LE
Ih
ad
aa
@@ -66788,6 +61044,8 @@ aa
aa
aa
aa
+"}
+(190,1,1) = {"
aa
aa
aa
@@ -66795,9 +61053,6 @@ aa
aa
aa
aa
-"}
-(190,1,1) = {"
-aa
aa
aa
aa
@@ -66989,29 +61244,30 @@ aa
aa
aa
aa
+ab
aa
aa
ad
ad
aS
-In
-Iz
-IL
-Cf
-JN
-Jr
-JE
-JN
-JN
+Il
+Iw
+Il
+KF
JN
+Jn
+Jn
+Jn
+JY
+Kv
JN
-KG
+KF
KT
aS
-Lk
+Lj
JR
-Lz
-LF
+Ly
+LE
Ih
ad
aa
@@ -67045,6 +61301,8 @@ aa
aa
aa
aa
+"}
+(191,1,1) = {"
aa
aa
aa
@@ -67052,8 +61310,6 @@ aa
aa
aa
aa
-"}
-(191,1,1) = {"
aa
aa
aa
@@ -67251,25 +61507,25 @@ aa
ad
ad
aS
-jQ
-lk
-lk
-Bi
+In
+Iz
+IL
+eU
JN
+Jr
+JE
JN
JN
JN
-Cs
-Il
-Il
-KF
+JN
+KG
KT
aS
-Ll
-Bh
-LA
-LG
-aS
+Lk
+JR
+Lz
+LF
+Ih
ad
aa
aa
@@ -67302,6 +61558,8 @@ aa
aa
aa
aa
+"}
+(192,1,1) = {"
aa
aa
aa
@@ -67309,8 +61567,6 @@ aa
aa
aa
aa
-"}
-(192,1,1) = {"
aa
aa
aa
@@ -67506,26 +61762,26 @@ aa
aa
aa
ad
+ad
aS
-aS
-Ip
+jQ
+lk
+lk
+Bi
+JN
+JN
+JN
+JN
+Cs
Il
Il
-Cg
-Cq
-Cq
-Cq
-Cq
-Cq
-Cq
-Cq
-Ct
-KU
-aS
-aS
-zZ
-aS
+KF
+KT
aS
+Ll
+Bh
+LA
+LG
aS
ad
aa
@@ -67559,6 +61815,8 @@ aa
aa
aa
aa
+"}
+(193,1,1) = {"
aa
aa
aa
@@ -67566,8 +61824,6 @@ aa
aa
aa
aa
-"}
-(193,1,1) = {"
aa
aa
aa
@@ -67764,27 +62020,26 @@ aa
aa
ad
aS
-jH
-li
-Jv
aS
-Ih
-Ih
+Ip
+Il
+Il
+Cg
+Cq
+Cq
+Cq
+Cq
+Cq
+Cq
+Cq
+Ct
+KU
aS
-Ih
-Ih
aS
-Ih
+zZ
+aS
aS
-YT
-IW
-IG
-IG
-Lu
aS
-ad
-ad
-ad
ad
aa
aa
@@ -67817,14 +62072,16 @@ aa
aa
aa
aa
+"}
+(194,1,1) = {"
+aa
+aa
aa
aa
aa
aa
aa
aa
-"}
-(194,1,1) = {"
aa
aa
aa
@@ -67943,7 +62200,6 @@ aa
aa
aa
aa
-ab
aa
aa
aa
@@ -68021,28 +62277,28 @@ aa
aa
ad
aS
-Il
-lj
-Il
+jH
+li
+Jv
+aS
+Ih
+Ih
+aS
+Ih
+Ih
+aS
+Ih
+aS
+YT
+IW
+IG
+IG
+Lu
aS
ad
ad
ad
ad
-ad
-ad
-ad
-ac
-Le
-CG
-CF
-BF
-Cz
-aS
-ad
-aa
-aa
-aa
aa
aa
aa
@@ -68073,6 +62329,8 @@ aa
aa
aa
aa
+"}
+(195,1,1) = {"
aa
aa
aa
@@ -68080,8 +62338,6 @@ aa
aa
aa
aa
-"}
-(195,1,1) = {"
aa
aa
aa
@@ -68278,23 +62534,23 @@ aa
aa
ad
aS
+Il
+lj
+Il
aS
-lm
-aS
-aS
-aa
ad
ad
-aa
-aa
ad
ad
-ac
-Il
-Il
-CH
-Ij
-Ij
+ad
+ad
+ad
+aS
+Le
+CG
+CF
+BF
+Cz
aS
ad
aa
@@ -68330,6 +62586,8 @@ aa
aa
aa
aa
+"}
+(196,1,1) = {"
aa
aa
aa
@@ -68337,8 +62595,6 @@ aa
aa
aa
aa
-"}
-(196,1,1) = {"
aa
aa
aa
@@ -68531,27 +62787,27 @@ aa
aa
aa
aa
-ad
-ad
-ad
-ad
-ad
-It
-ad
aa
aa
+ad
+aS
+aS
+mw
+aS
+aS
aa
ad
+ad
aa
aa
ad
-aa
-ac
-Ih
-Ih
+ad
aS
-Ih
-Ih
+Il
+Il
+CH
+Ij
+Ij
aS
ad
aa
@@ -68587,13 +62843,6 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
"}
(197,1,1) = {"
aa
@@ -68791,17 +63040,7 @@ aa
aa
aa
aa
-ad
-ad
-ad
-ad
-aa
-aa
-aa
-ad
-aa
aa
-ad
aa
aa
aa
@@ -68810,14 +63049,24 @@ ad
ad
ad
ad
+It
ad
aa
aa
aa
+ad
aa
aa
+ad
aa
-aa
+aS
+Ih
+Ih
+aS
+Ih
+Ih
+aS
+ad
aa
aa
aa
@@ -69048,33 +63297,33 @@ aa
aa
aa
aa
-ad
-aa
aa
aa
aa
aa
aa
-ad
aa
aa
ad
-aa
-aa
-aa
ad
-aa
ad
-aa
ad
aa
aa
aa
+ad
aa
aa
+ad
aa
aa
aa
+ad
+ad
+ad
+ad
+ad
+ad
aa
aa
aa
@@ -69305,9 +63554,6 @@ aa
aa
aa
aa
-ad
-aa
-aa
aa
aa
aa
@@ -69315,6 +63561,7 @@ aa
aa
aa
aa
+ad
aa
aa
aa
@@ -69324,13 +63571,15 @@ aa
ad
aa
aa
+ad
aa
aa
aa
+ad
aa
+ad
aa
-aa
-aa
+ad
aa
aa
aa
@@ -69562,7 +63811,6 @@ aa
aa
aa
aa
-ad
aa
aa
aa
@@ -69570,6 +63818,7 @@ aa
aa
aa
aa
+ad
aa
aa
aa
@@ -69578,7 +63827,6 @@ aa
aa
aa
aa
-ad
aa
aa
aa
@@ -69586,6 +63834,7 @@ aa
aa
aa
aa
+ad
aa
aa
aa
@@ -69826,6 +64075,7 @@ aa
aa
aa
aa
+ad
aa
aa
aa
@@ -69841,8 +64091,7 @@ aa
aa
aa
aa
-aa
-aa
+ad
aa
aa
aa
diff --git a/maps/ministation/ministation-1.dmm b/maps/ministation/ministation-1.dmm
new file mode 100644
index 00000000000..a200a3cc559
--- /dev/null
+++ b/maps/ministation/ministation-1.dmm
@@ -0,0 +1,73690 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/space,
+/area/space)
+"ab" = (
+/obj/abstract/landmark{
+ name = "carpspawn"
+ },
+/turf/space,
+/area/space)
+"ac" = (
+/turf/simulated/wall,
+/area/space)
+"ad" = (
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"ae" = (
+/obj/item/stool/padded,
+/obj/structure/sign/warning/nosmoking_2{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"af" = (
+/turf/exterior/wall/random/ministation,
+/area/space)
+"aj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"al" = (
+/obj/machinery/vending/coffee,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ar" = (
+/obj/structure/table,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/machinery/button/blast_door{
+ id_tag = "CMO1";
+ name = "CMO Shutter Button";
+ pixel_y = 24
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ministation/medical)
+"at" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"ax" = (
+/obj/structure/table,
+/obj/machinery/microwave,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"az" = (
+/obj/structure/rack,
+/obj/machinery/door/window/brigdoor/southleft,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"aA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"aB" = (
+/obj/structure/disposalpipe/junction/mirrored{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"aD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"aG" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"aH" = (
+/obj/structure/bed/chair,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"aL" = (
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"aR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"aU" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hop)
+"aV" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"aW" = (
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"bj" = (
+/turf/simulated/wall,
+/area/ministation/cafe)
+"bo" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"bp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"br" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/mouse/brown/Tom,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"bs" = (
+/obj/structure/ladder,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"bu" = (
+/turf/simulated/wall,
+/area/ministation/maint/l2underpass)
+"bv" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"bw" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"bx" = (
+/obj/item/storage/secure/safe{
+ pixel_x = 4;
+ pixel_y = 26
+ },
+/obj/machinery/network/requests_console{
+ department = "Detective's office";
+ pixel_x = 30;
+ initial_network_id = "molluscnet";
+ dir = 4
+ },
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"by" = (
+/obj/structure/rack,
+/obj/machinery/door/window/brigdoor/southleft,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/clothing/suit/armor/bulletproof,
+/obj/item/clothing/suit/armor/bulletproof,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"bA" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"bB" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"bG" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "32-2"
+ },
+/obj/machinery/atmospherics/pipe/zpipe/down/supply,
+/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers,
+/obj/structure/disposalpipe/down,
+/turf/simulated/open,
+/area/ministation/maint/l2centraln)
+"bH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ministation/medical)
+"bI" = (
+/obj/effect/floor_decal/ss13/l13,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"bJ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"bN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"bQ" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/obj/structure/table/reinforced,
+/obj/machinery/button/blast_door{
+ id_tag = "quarantine";
+ name = "Infirmary Quarantine Button";
+ directional_offset = null
+ },
+/obj/machinery/button/alternate/door{
+ id_tag = "medleave";
+ name = "Interior medbay doors button";
+ pixel_y = 8;
+ directional_offset = null
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"bU" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/machinery/camera/autoname,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"cd" = (
+/obj/machinery/vending/hydronutrients{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/beige/half,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"cf" = (
+/obj/machinery/cryopod,
+/obj/abstract/landmark/latejoin,
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"cg" = (
+/obj/abstract/landmark{
+ name = "carpspawn"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/space)
+"cm" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"cq" = (
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"cr" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"ct" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/hydro)
+"cv" = (
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hop)
+"cA" = (
+/obj/structure/table/woodentable,
+/obj/item/flashlight/lamp/green,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/hop)
+"cE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"cH" = (
+/obj/structure/catwalk,
+/obj/machinery/camera/autoname{
+ dir = 4
+ },
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"cN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"cQ" = (
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"cU" = (
+/obj/machinery/door/airlock{
+ name = "Cryo B"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"cY" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/security)
+"da" = (
+/turf/simulated/wall,
+/area/ministation/security)
+"db" = (
+/obj/machinery/power/apc{
+ name = "_South APC";
+ pixel_y = -24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/detective)
+"dc" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/obj/machinery/disposal,
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"dd" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"dq" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/glass/civilian{
+ name = "Hydroponics"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"dr" = (
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"ds" = (
+/obj/machinery/computer/cryopod{
+ pixel_y = -24;
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"dE" = (
+/obj/machinery/camera/autoname{
+ dir = 1
+ },
+/obj/machinery/lapvend{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"dK" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped,
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"dN" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"dQ" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"dS" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"dU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"dW" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"dZ" = (
+/obj/machinery/door/window/brigdoor/westleft,
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/blast/shutters{
+ id_tag = "barshut";
+ name = "Bar Shutters"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"eb" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"ed" = (
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"ef" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"eg" = (
+/obj/machinery/hologram/holopad,
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"em" = (
+/obj/machinery/vending/cola,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"eo" = (
+/obj/structure/closet/emcloset,
+/obj/machinery/light/small/emergency{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"er" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"et" = (
+/obj/effect/floor_decal/snow,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"ew" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/wall/r_wall,
+/area/ministation/security)
+"ex" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"ey" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ez" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"eH" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "_East APC";
+ pixel_x = 27;
+ pixel_y = 2
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"eK" = (
+/obj/machinery/door/airlock/hatch/autoname/command,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"eV" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"eZ" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"fd" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/obj/machinery/computer/modular/telescreen/preset/generic{
+ name = "south bump";
+ pixel_y = -20;
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"fe" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"fr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"fu" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/brigdoor/southright,
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/blast/shutters{
+ name = "office shutters";
+ id_tag = "hopshut"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hop)
+"fw" = (
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"fx" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"fy" = (
+/obj/structure/table,
+/obj/machinery/chemical_dispenser/bar_coffee/full,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"fC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/firstaid{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/blood,
+/obj/structure/sign/department/redcross{
+ pixel_y = 32
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"fD" = (
+/obj/structure/kitchenspike,
+/obj/effect/floor_decal/snow,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"fF" = (
+/obj/structure/ladder,
+/obj/machinery/light/small,
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"fY" = (
+/obj/effect/floor_decal/industrial/firstaid{
+ dir = 8
+ },
+/obj/machinery/light,
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"fZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"gb" = (
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"gc" = (
+/obj/structure/closet/secure_closet/brig,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"ge" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/flora/bush/fullgrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"gp" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"gz" = (
+/turf/simulated/open,
+/area/ministation/hall/e2)
+"gB" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/hygiene/drain,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"gC" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"gD" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/window/brigdoor/eastright{
+ id_tag = "Cell 2"
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"gE" = (
+/obj/structure/table/reinforced,
+/obj/item/toy/eightball,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"gJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"gL" = (
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "_East APC";
+ pixel_x = 27;
+ pixel_y = 2
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hydro)
+"gS" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/obj/abstract/landmark/latejoin/cryo,
+/obj/machinery/camera/network/medbay{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"gT" = (
+/turf/simulated/floor/carpet,
+/area/ministation/hop)
+"gU" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"gX" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"ha" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hb" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/machinery/door_timer/cell_2{
+ pixel_x = 31;
+ pixel_y = -1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hc" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/wall/r_wall,
+/area/ministation/security)
+"hd" = (
+/obj/structure/bed,
+/obj/item/bedsheet/mime,
+/obj/item/radio/intercom{
+ dir = 1;
+ pixel_y = -30
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hh" = (
+/obj/structure/bed/chair/office/light,
+/obj/abstract/landmark/start{
+ name = "Medical Doctor"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"hi" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"hj" = (
+/obj/machinery/door/airlock{
+ locked = 1;
+ name = "helm"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"hl" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"hm" = (
+/obj/structure/bed/chair,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"hr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"hs" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"hu" = (
+/obj/abstract/landmark/start{
+ name = "Lieutenant"
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/hop)
+"hv" = (
+/obj/machinery/seed_extractor,
+/obj/effect/floor_decal/corner/beige/half,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"hw" = (
+/obj/structure/table,
+/obj/item/clothing/glasses/sunglasses,
+/obj/item/clothing/glasses/sunglasses,
+/obj/item/clothing/head/earmuffs,
+/obj/item/clothing/head/earmuffs,
+/obj/machinery/status_display{
+ pixel_y = 30
+ },
+/obj/item/chems/spray/cleaner,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hx" = (
+/obj/structure/table,
+/obj/item/storage/box/handcuffs{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/item/storage/box/flashbangs,
+/obj/machinery/recharger/wallcharger{
+ pixel_y = 25
+ },
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 32
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hz" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/flora/pottedplant/minitree,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hA" = (
+/obj/abstract/landmark/start{
+ name = "Medical Doctor"
+ },
+/obj/structure/bed/chair/office/light{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"hC" = (
+/obj/structure/table/woodentable,
+/obj/item/camera/loaded,
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/item/taperecorder,
+/obj/item/folder/yellow,
+/obj/structure/filing_cabinet/wall{
+ pixel_x = 32;
+ dir = 8
+ },
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"hH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"hO" = (
+/obj/machinery/atmospherics/pipe/simple/visible/universal,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"hQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hS" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"hX" = (
+/obj/machinery/hologram/holopad,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hY" = (
+/obj/structure/table,
+/obj/item/assembly/timer,
+/obj/item/flash,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"hZ" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/security)
+"ia" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/machinery/door_timer/cell_1{
+ pixel_x = 31
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"ib" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"id" = (
+/obj/structure/table/woodentable,
+/obj/item/folder/red,
+/obj/item/hand_labeler,
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"if" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"ih" = (
+/obj/machinery/door/airlock{
+ name = "ATMOS";
+ locked = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"ii" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"in" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"iq" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"ir" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"is" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/item/radio/intercom{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"iv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/light,
+/obj/structure/flora/bush/fullgrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"ix" = (
+/obj/structure/bed/chair/office/light,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"iy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"iz" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"iA" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"iB" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/window/brigdoor/eastright{
+ id_tag = "Cell 1"
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"iD" = (
+/obj/structure/table/reinforced,
+/obj/item/synthesized_instrument/violin,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"iE" = (
+/obj/structure/table/reinforced,
+/obj/item/folder,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"iG" = (
+/obj/structure/table/woodentable,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/pen,
+/obj/item/storage/fancy/cigarettes,
+/obj/item/handcuffs,
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
+ },
+/obj/item/clothing/head/beret/corp/sec,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"iH" = (
+/obj/item/stool/padded,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"iK" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2underpass)
+"iN" = (
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"iR" = (
+/obj/machinery/light/small/emergency{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"iW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"iY" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"jd" = (
+/obj/machinery/computer/station_alert/security{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"je" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"jg" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/button/alternate/door{
+ dir = 1;
+ id_tag = "secdoor";
+ name = "security airlock access button";
+ pixel_x = -25;
+ pixel_y = -25
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"jh" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"jk" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/machinery/camera/network/security{
+ dir = 1
+ },
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"js" = (
+/obj/machinery/computer/modular/preset/medical,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"jy" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"jA" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/sign/warning/airlock{
+ dir = 4;
+ pixel_x = -32
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"jF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/mob/living/simple_animal/corgi/Ian,
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"jH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/junction/mirrored{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"jO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/camera/network/hallway{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"jR" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"jS" = (
+/obj/structure/table,
+/obj/item/book/skill/service/cooking,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"jT" = (
+/obj/structure/table,
+/obj/item/hand_labeler,
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/obj/item/storage/pill_bottle,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/item/eftpos,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"jU" = (
+/turf/simulated/wall,
+/area/ministation/maint/sebypass)
+"jV" = (
+/obj/effect/floor_decal/corner/green/half,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"jW" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"jZ" = (
+/obj/machinery/light,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"kh" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"km" = (
+/obj/structure/closet/secure_closet/medical3,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"kr" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"kv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"kB" = (
+/obj/structure/dogbed,
+/obj/item/clothing/shoes/color/brown{
+ desc = "Old, but sensible brown shoes. These belong to Ian."
+ },
+/obj/item/radio/intercom/locked/entertainment{
+ dir = 1;
+ pixel_y = -30
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"kC" = (
+/obj/machinery/vending/snack,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"kE" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"kI" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"kM" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"kR" = (
+/obj/structure/table,
+/obj/item/chems/glass/rag,
+/obj/item/trash/stick,
+/obj/item/kitchen/utensil/spoon,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"kS" = (
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"kX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/abstract/landmark/latejoin/observer,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"kZ" = (
+/turf/simulated/wall,
+/area/ministation/hall/w2)
+"la" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/hall/e2)
+"ln" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/ss13/l12,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"lo" = (
+/obj/machinery/door/airlock/external{
+ locked = 1;
+ id_tag = "l2_central_north_airlock_exterior";
+ autoset_access = 0
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "l2_central_north_airlock";
+ name = "exterior access button";
+ pixel_y = 24;
+ command = "cycle_exterior"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"lw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"ly" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/red{
+ dir = 5
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"lB" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"lF" = (
+/turf/simulated/wall,
+/area/ministation/maint/nebypass)
+"lH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"lI" = (
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/structure/bed/chair,
+/obj/machinery/status_display{
+ pixel_x = -32;
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"lJ" = (
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = -30;
+ dir = 1
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"lL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"lN" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction/mirrored{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"lQ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
+ },
+/obj/structure/hygiene/sink{
+ dir = 8;
+ pixel_x = -11
+ },
+/obj/item/chems/glass/bucket,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"lR" = (
+/obj/structure/bed/chair/comfy/beige{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"mc" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"md" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"mf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"mh" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"mi" = (
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "_West APC";
+ pixel_x = -25
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"mj" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"mk" = (
+/obj/structure/window/reinforced,
+/obj/structure/table,
+/obj/machinery/recharger,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"mp" = (
+/obj/structure/closet/secure_closet{
+ req_access = list("ACCESS_FORENSICS");
+ name = "evidence locker";
+ closet_appearance = /decl/closet_appearance/secure_closet/security
+ },
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"mq" = (
+/turf/simulated/wall,
+/area/ministation/maint/l2centraln)
+"mw" = (
+/obj/machinery/light/small,
+/obj/effect/floor_decal/snow,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"mz" = (
+/obj/machinery/door/airlock/glass/security,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"mC" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/obj/machinery/light,
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"mG" = (
+/obj/machinery/atmospherics/unary/engine,
+/turf/space,
+/area/ministation/arrival)
+"mH" = (
+/turf/simulated/wall,
+/area/ministation/hall/e2)
+"mJ" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/flora/bush/fullgrass,
+/obj/structure/flora/bush/lavendergrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"mL" = (
+/obj/structure/table,
+/obj/item/storage/box/syringes,
+/obj/machinery/light,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"mO" = (
+/obj/machinery/light/small/emergency{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"mR" = (
+/obj/effect/floor_decal/industrial/loading{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"mW" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"nf" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/airlock/medical,
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"no" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/obj/machinery/disposal,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"np" = (
+/obj/machinery/door/airlock/external{
+ autoset_access = 0;
+ id_tag = "l2_central_north_airlock_interior";
+ locked = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "l2_central_north_airlock";
+ name = "interior access button";
+ pixel_y = 24
+ },
+/turf/simulated/floor,
+/area/ministation/maint/l2centraln)
+"ns" = (
+/obj/structure/sign/department/id_office{
+ dir = 1;
+ pixel_y = -32
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"nu" = (
+/obj/structure/rack,
+/obj/machinery/door/window/brigdoor/southleft,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/gun/projectile/automatic/assault_rifle,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"nx" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/embedded_controller/radio/airlock/docking_port{
+ dir = 4;
+ id_tag = "station1";
+ tag_airpump = "escape1_vent";
+ tag_chamber_sensor = "escape1_sensor";
+ tag_exterior_door = "escape1_airlock_exterior";
+ tag_interior_door = "escape1_airlock_interior";
+ pixel_x = -20
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"nB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"nC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"nD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"nF" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"nK" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ id_tag = "l2_central_south_airlock_interior";
+ locked = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/machinery/button/access/interior{
+ id_tag = "l2_central_south_airlock";
+ name = "interior access button";
+ pixel_x = 20;
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"nS" = (
+/obj/item/gun/energy/taser,
+/obj/structure/closet/secure_closet/guncabinet,
+/obj/item/gun/energy/taser,
+/obj/item/gun/projectile/shotgun/doublebarrel/sawn,
+/obj/item/gun/projectile/shotgun/doublebarrel/sawn,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/item/storage/box/ammo/shotgunshells,
+/obj/item/storage/box/ammo/shotgunshells,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"nX" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light/small,
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"ob" = (
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "_West APC";
+ pixel_x = -25
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/security)
+"oc" = (
+/obj/structure/rack,
+/obj/random/maintenance,
+/obj/item/clothing/suit/storage/toggle/bomber,
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"od" = (
+/obj/structure/skele_stand,
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"oj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/camera/network/security{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"ol" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"on" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"or" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"ov" = (
+/obj/structure/table/reinforced,
+/obj/machinery/camera/autoname,
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/item/storage/medical_lolli_jar{
+ pixel_y = 7
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"oz" = (
+/turf/simulated/wall,
+/area/ministation/medical)
+"oA" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/window/brigdoor/southright,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"oB" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"oD" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"oE" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"oF" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"oH" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"oN" = (
+/obj/effect/shuttle_landmark/escape_shuttle/station,
+/turf/space,
+/area/space)
+"oS" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ministation/medical)
+"oW" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"oX" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"oY" = (
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"oZ" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"pb" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "sqm_airlock_exterior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "sqm_airlock";
+ name = "exterior access button";
+ pixel_y = 20;
+ command = "cycle_exterior"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"pd" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"pe" = (
+/obj/item/stool/padded,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pf" = (
+/obj/structure/table/woodentable,
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ph" = (
+/obj/structure/ladder,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"pl" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"pr" = (
+/turf/simulated/floor/airless,
+/area/space)
+"ps" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/wall,
+/area/ministation/hall/w2)
+"pu" = (
+/obj/structure/closet/crate/bin/ministation,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"pw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"pA" = (
+/obj/structure/table,
+/obj/item/chems/drinks/glass2/mug,
+/obj/item/chems/drinks/glass2/mug,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"pD" = (
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"pG" = (
+/obj/structure/sign/plaque/diploma/medical{
+ pixel_y = 31
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"pH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/item/stool/padded,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"pI" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/item/stool/padded,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/status_display{
+ pixel_y = 33;
+ pixel_x = -1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/wall,
+/area/ministation/medical)
+"pK" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/body_scan_display{
+ pixel_y = 20;
+ id_tag = "mediscanner"
+ },
+/obj/machinery/bodyscanner{
+ dir = 8;
+ id_tag = "mediscanner"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/obj/machinery/body_scanconsole{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/storage/box/masks,
+/obj/item/storage/box/gloves,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/vending/medical{
+ pixel_x = -2
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/camera/network/medbay,
+/obj/structure/bed/roller,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pP" = (
+/obj/structure/table,
+/obj/item/surgicaldrill,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pQ" = (
+/obj/structure/table,
+/obj/item/hemostat,
+/obj/item/retractor,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pR" = (
+/obj/structure/table,
+/obj/item/scalpel{
+ pixel_y = 12
+ },
+/obj/item/circular_saw,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pS" = (
+/obj/structure/table,
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/obj/item/bonesetter,
+/obj/item/bonegel,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pT" = (
+/obj/structure/table,
+/obj/item/cautery{
+ pixel_x = 4
+ },
+/obj/item/sutures,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"pU" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"pY" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"qe" = (
+/obj/structure/table/woodentable,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"qf" = (
+/turf/simulated/wall,
+/area/ministation/maint/l2centrals)
+"qg" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/meter{
+ name = "Distribution Loop"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"qk" = (
+/obj/machinery/atmospherics/pipe/simple/visible/universal,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"qn" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/book/skill/medical,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"qo" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/newspaper,
+/obj/item/chems/spray/cleaner,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"qp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"qq" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"qr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qs" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/airlock/double/medical{
+ name = "medbay airlock";
+ autoset_access = 0;
+ id_tag = "medleave";
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qt" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qu" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qy" = (
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/obj/structure/closet/secure_closet/cmo,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qz" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qA" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"qB" = (
+/obj/structure/table/marble,
+/obj/machinery/door/blast/shutters{
+ id_tag = "Kitchen1";
+ name = "Kitchen"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"qF" = (
+/obj/structure/bed/chair/comfy/beige{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"qI" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"qL" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "l2_central_north_sensor";
+ pixel_y = 24;
+ pixel_x = 8
+ },
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "l2_central_north_airlock";
+ pixel_y = 24;
+ tag_airpump = "l2_central_north_vent";
+ tag_chamber_sensor = "l2_central_north_sensor";
+ tag_exterior_door = "l2_central_north_airlock_exterior";
+ tag_interior_door = "l2_central_north_airlock_interior";
+ pixel_x = -8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"qM" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"qN" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4;
+ icon_state = "warningcorner"
+ },
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"qO" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/obj/item/radio/intercom{
+ dir = 1;
+ pixel_y = -30
+ },
+/obj/abstract/landmark/latejoin/cryo,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"qS" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/space,
+/area/ministation/security)
+"qT" = (
+/obj/machinery/portable_atmospherics/hydroponics,
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"qX" = (
+/obj/item/radio/intercom{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/machinery/computer/modular/preset/security{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"qY" = (
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"qZ" = (
+/obj/machinery/light,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"ra" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/medical)
+"rb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rc" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/status_display{
+ pixel_x = -32;
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"rd" = (
+/obj/abstract/landmark/start{
+ name = "Medical Doctor"
+ },
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/obj/machinery/button/alternate/door{
+ dir = 4;
+ id_tag = "medleave";
+ name = "Interior medbay doors button";
+ pixel_x = -32;
+ pixel_y = -32
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"re" = (
+/obj/abstract/landmark/start{
+ name = "Medical Doctor"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rg" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rh" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ri" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rj" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rk" = (
+/obj/machinery/optable,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rm" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"rn" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ro" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"rp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"rq" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"rt" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"ry" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1;
+ icon_state = "warningcorner"
+ },
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"rA" = (
+/obj/structure/table/woodentable,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"rC" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "l2_central_south_sensor";
+ pixel_y = 10;
+ pixel_x = -20;
+ dir = 4
+ },
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "l2_central_south_airlock";
+ pixel_y = null;
+ tag_airpump = "l2_central_south_vent";
+ tag_chamber_sensor = "l2_central_south_sensor";
+ tag_exterior_door = "l2_central_south_airlock_exterior";
+ tag_interior_door = "l2_central_south_airlock_interior";
+ dir = 4;
+ pixel_x = -20
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"rD" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/structure/closet/secure_closet/hop,
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"rE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"rI" = (
+/obj/item/stool/padded,
+/obj/machinery/alarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rK" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 10
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rL" = (
+/obj/structure/bed,
+/obj/item/bedsheet/medical,
+/obj/structure/curtain/medical,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rM" = (
+/obj/machinery/status_display{
+ pixel_y = -29;
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rN" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rP" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/wall,
+/area/ministation/medical)
+"rR" = (
+/obj/machinery/vitals_monitor,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rS" = (
+/obj/structure/hygiene/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/machinery/camera/network/medbay{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"rU" = (
+/obj/structure/table,
+/obj/machinery/faxmachine,
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"rW" = (
+/obj/machinery/light,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"rX" = (
+/obj/machinery/alarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"sg" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"sh" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"si" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor,
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/obj/machinery/door/airlock/double/medical{
+ name = "Medbay Lobby airlock";
+ autoset_access = 0
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"sj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/door/firedoor,
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"sk" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"sm" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"sn" = (
+/obj/structure/table,
+/obj/item/storage/box/gloves,
+/obj/item/storage/box/masks,
+/obj/item/clothing/suit/surgicalapron,
+/obj/item/clothing/suit/surgicalapron,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
+/obj/item/chems/spray/cleaner,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"so" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"sp" = (
+/obj/structure/flora/bush/fullgrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/w2)
+"sq" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ss" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"st" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"su" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atm{
+ pixel_y = 32
+ },
+/obj/machinery/camera/network/hallway,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"sv" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"sB" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"sC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sG" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"sI" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 10
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"sM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/sign/department/forensics{
+ pixel_y = 32
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sQ" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sS" = (
+/obj/effect/floor_decal/industrial/firstaid{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"sU" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/sign/department/security/alt{
+ pixel_y = 32
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sV" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/filth,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ pixel_y = 32
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"sX" = (
+/obj/machinery/sleeper/standard,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"sY" = (
+/obj/structure/table,
+/obj/item/chems/dropper,
+/obj/item/chems/glass/beaker,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ta" = (
+/obj/structure/iv_drip,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"tb" = (
+/obj/item/chems/ivbag/blood/aminus,
+/obj/item/chems/ivbag/blood/aplus,
+/obj/item/chems/ivbag/blood/bminus,
+/obj/item/chems/ivbag/blood/bplus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/oplus,
+/obj/structure/closet/crate/freezer,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"te" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tf" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/ss13/l1,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tg" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/effect/floor_decal/ss13/l3,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"th" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/ss13/l5,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ti" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/ss13/l7,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/ss13/l9,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tl" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"tm" = (
+/obj/machinery/atmospherics/pipe/simple/visible/universal{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"tq" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tt" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tv" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/turf/simulated/open,
+/area/ministation/hall/e2)
+"tx" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"ty" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tz" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tD" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tE" = (
+/obj/abstract/landmark{
+ name = "lightsout"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tG" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tH" = (
+/obj/effect/floor_decal/industrial/firstaid{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"tI" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"tJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"tL" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/green/half,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/wall,
+/area/ministation/hall/w2)
+"tN" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/airlock/medical,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"tO" = (
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"tP" = (
+/obj/effect/floor_decal/ss13/l10,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tS" = (
+/obj/item/radio/intercom{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/cooker/fryer,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"tT" = (
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"tU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"tW" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"tZ" = (
+/obj/machinery/vending/coffee{
+ dir = 4;
+ pixel_x = -5
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ua" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ub" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"uc" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ud" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/ss13/l6,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ue" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ug" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ui" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1;
+ icon_state = "warningcorner"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"ul" = (
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"um" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"un" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ level = 2
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/security)
+"up" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"uq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"us" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/firstaid{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"ut" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"uu" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/flora/bush/fullgrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"uv" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"ux" = (
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"uy" = (
+/obj/structure/morgue,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"uB" = (
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"uC" = (
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"uD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"uG" = (
+/obj/structure/bed/chair/office/comfy/brown{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"uH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"uI" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/hop)
+"uJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"uK" = (
+/obj/effect/decal/cleanable/filth,
+/obj/machinery/atmospherics/pipe/simple/visible/universal,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"uL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/door/airlock/glass/civilian{
+ name = "Bar"
+ },
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled,
+/area/ministation/cafe)
+"uM" = (
+/obj/effect/wallframe_spawn/no_grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/cafe)
+"uN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/airlock/glass/civilian{
+ name = "Bar"
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/cafe)
+"uP" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"uV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/structure/sign/warning/nosmoking_1{
+ pixel_x = -32;
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"uW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"uX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"uZ" = (
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"vb" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"ve" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/shutters{
+ name = "office shutters";
+ id_tag = "hopshut"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hop)
+"vf" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/shutters{
+ name = "office shutters";
+ id_tag = "hopshut"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hop)
+"vi" = (
+/obj/machinery/door/window/brigdoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"vm" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"vn" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"vp" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/obj/machinery/door/window/brigdoor/eastleft,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"vq" = (
+/obj/structure/closet/secure_closet/detective,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/item/ammo_magazine/pistol,
+/obj/item/ammo_magazine/pistol,
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"vr" = (
+/obj/machinery/chem_master/condimaster{
+ name = "CondiMaster Neo"
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"vt" = (
+/obj/item/radio/intercom{
+ pixel_y = 20
+ },
+/obj/structure/flora/pottedplant/minitree,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vu" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vv" = (
+/obj/structure/flora/pottedplant/unusual,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vy" = (
+/obj/machinery/vending/boozeomat,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vz" = (
+/obj/structure/table,
+/obj/machinery/chemical_dispenser/bar_coffee/full,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vA" = (
+/obj/structure/table,
+/obj/machinery/chemical_dispenser/bar_soft/full,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vE" = (
+/obj/item/synthesized_instrument/guitar,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/window/southright,
+/obj/structure/table/reinforced,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"vF" = (
+/obj/machinery/computer/arcade,
+/obj/structure/noticeboard{
+ default_pixel_y = 32
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vG" = (
+/obj/machinery/atm{
+ pixel_y = 32
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"vH" = (
+/obj/structure/table,
+/obj/item/chems/dropper,
+/obj/item/storage/box/syringes,
+/obj/item/mollusc/clam,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"vJ" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 6
+ },
+/mob/living/simple_animal/crow{
+ desc = "She's not a real doctor but she is a real bird.";
+ name = "Dr. Bird";
+ stop_automated_movement = 0
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"vK" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"vL" = (
+/obj/machinery/door/airlock/medical{
+ name = "Head Doctor"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"vM" = (
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/structure/closet/coffin,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"vN" = (
+/obj/structure/table,
+/obj/item/storage/box/bodybags,
+/obj/item/pen,
+/obj/item/radio/intercom{
+ dir = 1;
+ pixel_y = -30
+ },
+/obj/item/scanner/autopsy,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"vO" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"vP" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"vS" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/command{
+ name = "Head of Personell"
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"vT" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "hopshut";
+ name = "Office Shutters Button";
+ pixel_y = 30
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"vU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"vV" = (
+/obj/machinery/computer/modular/preset/cardslot/command{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"wc" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"wk" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wm" = (
+/obj/item/stool/bar/padded,
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"wn" = (
+/obj/structure/table/marble,
+/obj/structure/sign/painting/monkey_painting{
+ pixel_y = 24
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/item/sticky_pad{
+ pixel_x = -8;
+ pixel_y = 1
+ },
+/obj/structure/flora/pottedplant/flower,
+/obj/machinery/door/blast/shutters{
+ id_tag = "barshut";
+ name = "Bar Shutters"
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"wo" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/machinery/button/blast_door{
+ id_tag = "barshut";
+ name = "Bar Shutters Button";
+ pixel_x = -24;
+ pixel_y = 36
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wp" = (
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wq" = (
+/obj/structure/hygiene/sink/kitchen{
+ dir = 8;
+ pixel_x = 21
+ },
+/obj/machinery/light_switch{
+ pixel_x = 27;
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wr" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/turf/simulated/open,
+/area/ministation/maint/l2centrals)
+"ws" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"wt" = (
+/obj/structure/closet/secure_closet/freezer/meat,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"wu" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"ww" = (
+/obj/machinery/computer/modular/preset/medical{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"wx" = (
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"wy" = (
+/obj/machinery/chem_master,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"wz" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"wA" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/brigdoor/westright,
+/obj/item/chems/spray/cleaner,
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"wB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"wC" = (
+/obj/machinery/camera/network/medbay{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"wD" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"wE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"wF" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"wL" = (
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"wN" = (
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"wO" = (
+/obj/item/chems/condiment/small/peppermill,
+/obj/item/knife/table,
+/obj/item/kitchen/utensil/fork,
+/obj/structure/table/gamblingtable,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/table/gamblingtable,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wQ" = (
+/obj/structure/table/marble,
+/obj/item/storage/box/donut,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/blast/shutters{
+ id_tag = "barshut";
+ name = "Bar Shutters"
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"wR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wS" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/obj/structure/table,
+/obj/item/flame/lighter/zippo,
+/obj/item/chems/drinks/shaker,
+/obj/item/clothing/head/collectable/tophat,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"wW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/portable_atmospherics/hydroponics,
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"wY" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"wZ" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xa" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/door/airlock/medical{
+ name = "Morgue"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"xb" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"xc" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/structure/table,
+/obj/item/cell/device/high,
+/obj/item/cell/device/high,
+/obj/item/defibrillator/loaded,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xd" = (
+/obj/structure/bed/chair/office/light{
+ dir = 8
+ },
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ministation/medical)
+"xe" = (
+/obj/machinery/recharger,
+/obj/structure/table/steel,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xf" = (
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"xj" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"xo" = (
+/obj/item/kitchen/utensil/spoon,
+/obj/item/chems/condiment/small/saltshaker,
+/obj/item/chems/condiment/small/sugar,
+/obj/structure/table/gamblingtable,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/item/deck/cards,
+/obj/structure/table/gamblingtable,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xq" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/obj/item/stool/padded,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xs" = (
+/obj/structure/table/marble,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/item/trash/tray,
+/obj/machinery/door/blast/shutters{
+ id_tag = "barshut";
+ name = "Bar Shutters"
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"xt" = (
+/obj/structure/table,
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
+ },
+/obj/machinery/chemical_dispenser/bar_alc/full{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xx" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"xy" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"xz" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"xA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/airlock/medical{
+ name = "Chemistry"
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xE" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xF" = (
+/obj/machinery/camera/network/medbay{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"xH" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/fire{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/fire{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"xJ" = (
+/turf/simulated/wall,
+/area/ministation/hop)
+"xK" = (
+/obj/machinery/light/small/emergency{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"xO" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"xQ" = (
+/obj/item/stool/padded,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xR" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xT" = (
+/obj/item/stool/bar/padded,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"xU" = (
+/obj/structure/table/marble,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/blast/shutters{
+ id_tag = "barshut";
+ name = "Bar Shutters"
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"xV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"xW" = (
+/obj/structure/table/marble,
+/obj/machinery/status_display{
+ pixel_y = -29;
+ dir = 1
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/item/chems/condiment/ketchup,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/blast/shutters{
+ id_tag = "barshut";
+ name = "Bar Shutters"
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"xY" = (
+/obj/machinery/atmospherics/unary/engine{
+ dir = 1
+ },
+/turf/space,
+/area/space)
+"xZ" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"ya" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/camera/network/security{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"yb" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder/juicer,
+/obj/item/chems/glass/beaker,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"yc" = (
+/obj/structure/table,
+/obj/machinery/reagent_temperature/cooler,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ye" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"yf" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/hydro)
+"yg" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"yh" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/toxin{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/toxin{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"yk" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/open,
+/area/ministation/maint/nebypass)
+"yl" = (
+/obj/structure/displaycase,
+/obj/item/clothing/mask/gas/owl_mask{
+ desc = "So realistic, you'd almost think it's the real thing.";
+ name = "replica 'The Owl' mask";
+ pixel_x = 1;
+ pixel_y = -5
+ },
+/obj/machinery/light_switch{
+ pixel_y = 29;
+ pixel_x = 7
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/hop)
+"yn" = (
+/obj/random/trash,
+/obj/machinery/atmospherics/portables_connector,
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"yu" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/alarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/machinery/light,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"yv" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/media/jukebox/old,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"yw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"yx" = (
+/obj/machinery/camera/autoname{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"yy" = (
+/obj/item/stool/bar/padded,
+/obj/machinery/light,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/cafe)
+"yA" = (
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/effect/decal/cleanable/tomato_smudge,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/camera/autoname{
+ dir = 1
+ },
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"yB" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29;
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"yC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"yD" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 8
+ },
+/obj/machinery/camera/network/hallway{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"yE" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"yF" = (
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"yG" = (
+/obj/structure/closet/secure_closet/personal/patient,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"yJ" = (
+/obj/structure/table,
+/obj/item/gun/launcher/syringe,
+/obj/item/flashlight/pen,
+/obj/item/flashlight/pen,
+/obj/item/clothing/suit/straight_jacket,
+/obj/item/chems/hypospray/vial{
+ desc = "One of the first hyposprays ever made. Supposedly only a handful exist.";
+ name = "prototype hypospray";
+ origin_tech = null
+ },
+/obj/item/clothing/accessory/stethoscope,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"yK" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/regular{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"yM" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"yN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/camera/network/hallway{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"yS" = (
+/obj/effect/floor_decal/ss13/l11,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"yV" = (
+/obj/machinery/papershredder,
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"yY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/table,
+/obj/machinery/reagent_temperature,
+/obj/machinery/camera/network/medbay{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"zd" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ze" = (
+/obj/effect/floor_decal/ss13/l16,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"zf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/civilian{
+ autoset_access = 0;
+ name = "Kitchen airlock";
+ req_access = list("ACCESS_KITCHEN")
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood,
+/area/ministation/cafe)
+"zg" = (
+/obj/structure/sign/warning/high_voltage{
+ pixel_y = 32;
+ pixel_x = 23
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"zh" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/civilian{
+ autoset_access = 0;
+ name = "Kitchen airlock";
+ req_access = list("ACCESS_KITCHEN")
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"zj" = (
+/obj/structure/table/glass,
+/obj/item/hatchet,
+/obj/item/hatchet,
+/obj/item/minihoe,
+/obj/item/minihoe,
+/obj/item/book/skill/service/botany,
+/obj/item/wirecutters/clippers,
+/obj/item/scanner/plant,
+/obj/item/storage/plants,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"zl" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"zn" = (
+/obj/structure/table/steel,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"zo" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"zq" = (
+/obj/structure/bed,
+/obj/item/bedsheet/clown,
+/turf/simulated/floor/carpet/blue3,
+/area/ministation/security)
+"zt" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/chems/spray/cleaner,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"zv" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"zy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"zA" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"zC" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/glass/freezer{
+ autoset_access = 0
+ },
+/turf/simulated/floor/tiled/steel_ridged,
+/area/ministation/cafe)
+"zD" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/obj/structure/hygiene/sink/kitchen{
+ pixel_y = 25
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"zE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"zF" = (
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"zG" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"zH" = (
+/obj/machinery/microwave{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/obj/structure/table/woodentable,
+/obj/machinery/button/blast_door{
+ id_tag = "Kitchen1";
+ name = "Kitchen Shutter";
+ pixel_y = 24
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"zI" = (
+/obj/machinery/status_display{
+ pixel_y = 30
+ },
+/obj/machinery/cooker/cereal,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"zJ" = (
+/obj/machinery/vending/dinnerware,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"zK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"zL" = (
+/obj/machinery/smartfridge/foods,
+/turf/simulated/floor/plating,
+/area/ministation/cafe)
+"zM" = (
+/obj/machinery/atmospherics/portables_connector{
+ pixel_x = -3
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"zO" = (
+/obj/machinery/biogenerator,
+/obj/effect/floor_decal/corner/beige/half,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"zP" = (
+/obj/effect/floor_decal/corner/beige/half,
+/obj/machinery/vending/hydroseeds{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"zQ" = (
+/turf/simulated/wall,
+/area/ministation/hydro)
+"zW" = (
+/obj/machinery/door/airlock/glass/security{
+ autoset_access = 0;
+ name = "Detective's Office";
+ req_access = list("ACCESS_FORENSICS")
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"zZ" = (
+/obj/structure/bed/chair/comfy/beige{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ae" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Af" = (
+/obj/abstract/landmark/start{
+ name = "Bartender"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Ag" = (
+/obj/abstract/landmark/start{
+ name = "Bartender"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Ah" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Ai" = (
+/obj/effect/decal/cleanable/flour,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Aj" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Ak" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Am" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"An" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"As" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"At" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/cooker/grill,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Au" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"Av" = (
+/obj/structure/closet/chefcloset,
+/obj/item/storage/box/ammo/beanbags,
+/obj/item/clothing/suit/storage/toggle/wintercoat/hydro,
+/obj/item/gun/projectile/shotgun/doublebarrel/sawn{
+ ammo_type = /obj/item/ammo_casing/shotgun/beanbag
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Aw" = (
+/obj/machinery/cooker/oven,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Ax" = (
+/obj/structure/closet,
+/obj/item/clothing/mask/gas/clown_hat,
+/obj/item/clothing/shoes/clown_shoes,
+/obj/item/clothing/under/clown,
+/obj/item/stamp/clown,
+/obj/item/storage/backpack/clown,
+/obj/item/bikehorn,
+/obj/item/storage/fancy/crayons,
+/obj/item/poster,
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"Ay" = (
+/obj/machinery/reagentgrinder,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Az" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/hygiene/sink{
+ dir = 8;
+ pixel_x = -11
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"AA" = (
+/obj/machinery/cooker/candy,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"AB" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"AD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"AG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"AJ" = (
+/obj/structure/closet/wardrobe/mixed,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"AK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"AR" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"AX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Be" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Bj" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "escape3_sensor";
+ pixel_y = 20
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "escape1_vent"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"Bk" = (
+/obj/structure/table/woodentable,
+/obj/item/paper_bin{
+ pixel_x = 1;
+ pixel_y = 9
+ },
+/obj/item/pen,
+/obj/item/camera,
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"Bm" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "sqm_airlock_interior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "sqm_airlock";
+ name = "interior access button";
+ pixel_y = 20
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"Bs" = (
+/obj/structure/rack,
+/obj/machinery/door/window/brigdoor/southleft,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/ammo_magazine/rifle,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Bv" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/closet/crate/bin/ministation,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Bw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/machinery/computer/modular/telescreen/preset/generic{
+ name = "south bump";
+ pixel_y = -20;
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"Bz" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"BA" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/abstract/landmark/start{
+ name = "Head of Security"
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/security)
+"BE" = (
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"BG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"BH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/ss13/l2,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"BJ" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/cafe)
+"BS" = (
+/obj/machinery/vending/snack,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"BT" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"BW" = (
+/obj/structure/flora/bush/lavendergrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/w2)
+"Ca" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Cb" = (
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ci" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ck" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2underpass)
+"Co" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"Cu" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Cx" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "CMO1";
+ name = "CMO Shutters"
+ },
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"CD" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"CJ" = (
+/obj/structure/bed/roller,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"CL" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"CO" = (
+/obj/machinery/door/airlock/security{
+ name = "Warden"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/carpet/blue3,
+/area/ministation/security)
+"CP" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"CU" = (
+/obj/machinery/door/airlock/external{
+ name = "Arrival Airlock";
+ autoset_access = 0
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"CV" = (
+/obj/item/radio/intercom{
+ pixel_y = 20
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"Dj" = (
+/obj/machinery/camera/autoname{
+ dir = 1
+ },
+/obj/structure/table/woodentable,
+/obj/item/chems/condiment/enzyme,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/chems/spray/cleaner,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Dn" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Ds" = (
+/obj/structure/bed,
+/obj/item/bedsheet/hop,
+/turf/simulated/floor/carpet,
+/area/ministation/hop)
+"Dw" = (
+/obj/machinery/photocopier,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"DC" = (
+/obj/machinery/computer/modular/preset/security{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"DD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"DF" = (
+/obj/abstract/landmark/start{
+ name = "Robot"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"DG" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"DH" = (
+/obj/structure/closet/secure_closet/security,
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/clothing/suit/armor/bulletproof,
+/obj/item/flashlight/maglight,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"DI" = (
+/obj/item/mollusc/barnacle{
+ pixel_x = -13;
+ pixel_y = -14
+ },
+/turf/space,
+/area/space)
+"DJ" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"DY" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/machinery/recharger,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Ea" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ec" = (
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"Eg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"Ei" = (
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/structure/bed/chair/comfy/beige,
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"Ev" = (
+/obj/machinery/atmospherics/unary/engine{
+ dir = 1
+ },
+/turf/space,
+/area/ministation/arrival)
+"Ez" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"EA" = (
+/obj/effect/shuttle_landmark/arrivas_south,
+/turf/space,
+/area/space)
+"ED" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/cafe)
+"EE" = (
+/obj/item/stool/padded,
+/obj/abstract/landmark/start{
+ name = "Security Officer"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"EG" = (
+/obj/machinery/light/small/emergency{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"EL" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"EM" = (
+/obj/machinery/computer/account_database{
+ dir = 8
+ },
+/obj/item/radio/intercom{
+ pixel_y = 20
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/camera/network/command,
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"ER" = (
+/obj/structure/ladder,
+/obj/structure/cable{
+ icon_state = "16-0"
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,
+/obj/machinery/atmospherics/pipe/zpipe/up/supply,
+/obj/structure/disposalpipe/up{
+ dir = 2
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"EV" = (
+/obj/structure/closet/secure_closet/guncabinet,
+/obj/item/gun/projectile/automatic/smg,
+/obj/item/gun/projectile/automatic/smg,
+/obj/item/ammo_magazine/smg/rubber,
+/obj/item/ammo_magazine/smg/rubber,
+/obj/item/ammo_magazine/smg/rubber,
+/obj/item/ammo_magazine/smg/rubber,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/item/ammo_magazine/smg/rubber,
+/obj/item/ammo_magazine/smg/rubber,
+/obj/item/ammo_magazine/smg/rubber,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Fn" = (
+/obj/structure/closet,
+/obj/random/maintenance,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/item/poster,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Fo" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/smartfridge/chemistry,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Fr" = (
+/obj/structure/flora/pottedplant/flower,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Ft" = (
+/obj/structure/target_stake,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"FF" = (
+/obj/structure/reagent_dispensers/water_cooler{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"FJ" = (
+/obj/abstract/landmark/start{
+ name = "Clown"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/item/radio/intercom/locked/entertainment{
+ dir = 1;
+ pixel_y = -30
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"FL" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"FQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"FZ" = (
+/obj/machinery/firealarm{
+ pixel_y = 32
+ },
+/obj/structure/bed/chair/comfy/beige,
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"Ga" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"Gb" = (
+/obj/machinery/door/airlock/security{
+ name = "Head of Security"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/security)
+"Gd" = (
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"Ge" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/roller{
+ pixel_y = 10
+ },
+/obj/item/roller{
+ pixel_y = 10
+ },
+/obj/item/storage/belt/medical/emt,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Gg" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Gu" = (
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
+ },
+/obj/structure/rack/dark,
+/obj/item/roller,
+/obj/item/roller,
+/obj/item/roller,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Gx" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"Gy" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Gz" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor,
+/area/ministation/hop)
+"GR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"GZ" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Hd" = (
+/obj/machinery/light,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"Hi" = (
+/obj/effect/floor_decal/industrial/firstaid{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"Hn" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Hy" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin{
+ pixel_x = 1;
+ pixel_y = 9
+ },
+/obj/item/pen,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Hz" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/obj/machinery/light/small/emergency{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"HF" = (
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_y = -1;
+ pixel_x = -25
+ },
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"HG" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"HJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"HL" = (
+/obj/machinery/chemical_dispenser/full,
+/obj/item/chems/glass/beaker/large,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"HM" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/pen,
+/obj/item/eftpos,
+/obj/item/mollusc/clam,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"HN" = (
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -29
+ },
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"HO" = (
+/turf/simulated/floor/reinforced/airless,
+/area/space)
+"HP" = (
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"HR" = (
+/mob/living/simple_animal/mouse,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"HX" = (
+/obj/structure/closet/secure_closet/warden,
+/obj/item/flashlight/maglight,
+/turf/simulated/floor/carpet/blue3,
+/area/ministation/security)
+"Ib" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Ie" = (
+/obj/machinery/status_display{
+ pixel_y = -29;
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"Ig" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"Ij" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Im" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/window/southleft,
+/obj/structure/table/reinforced,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"Io" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/portables_connector{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"Ip" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"Ir" = (
+/obj/structure/table,
+/obj/item/folder/blue,
+/obj/item/storage/box/PDAs,
+/obj/machinery/status_display{
+ pixel_y = 30
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"Iw" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/unary/engine,
+/turf/space,
+/area/ministation/arrival)
+"Ix" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 1;
+ id_tag = "l2_central_south_vent"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Iz" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"IA" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "Dock Airlock";
+ autoclose = 0
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"IB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"IP" = (
+/obj/structure/table,
+/obj/item/hand_labeler,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/machinery/recharger,
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"IT" = (
+/obj/machinery/newscaster{
+ pixel_x = -32;
+ dir = 8
+ },
+/obj/structure/flora/pottedplant/largebush,
+/obj/machinery/camera/network/security{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"IX" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"Jc" = (
+/obj/structure/closet/secure_closet/security,
+/obj/item/clothing/suit/armor/bulletproof,
+/obj/item/flashlight/maglight,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Jd" = (
+/obj/structure/closet/secure_closet/freezer/kitchen,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Jl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Jm" = (
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "_East APC";
+ pixel_x = 27;
+ pixel_y = 2
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"Jo" = (
+/obj/abstract/landmark/start{
+ name = "Detective"
+ },
+/obj/structure/bed/chair/office/comfy/brown{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"Js" = (
+/obj/structure/closet/secure_closet/brig,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Jt" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/alarm{
+ pixel_y = -24;
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/e2)
+"Jx" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/flora/bush/fullgrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"Jz" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"JH" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"JJ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/visible/universal{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"JQ" = (
+/obj/structure/bed/chair/armchair/black{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"JX" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"JZ" = (
+/turf/simulated/wall,
+/area/ministation/detective)
+"Kd" = (
+/obj/structure/closet,
+/obj/random/maintenance,
+/obj/item/poster,
+/turf/simulated/floor/plating,
+/area/ministation/maint/secmaint)
+"Kk" = (
+/obj/structure/bed,
+/obj/item/bedsheet/blue,
+/turf/simulated/floor/carpet/blue,
+/area/ministation/medical)
+"Kr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Kv" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/structure/flora/bush/fullgrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"Kz" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/camera/network/hallway{
+ dir = 1
+ },
+/obj/structure/flora/bush/lavendergrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"KG" = (
+/obj/structure/table,
+/obj/machinery/recharger,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"KH" = (
+/obj/structure/rack,
+/obj/machinery/door/window/brigdoor/southleft,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/gun/energy/laser,
+/obj/item/gun/energy/laser,
+/obj/item/gun/energy/laser,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"KK" = (
+/obj/machinery/forensic/microscope,
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"KN" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"KV" = (
+/obj/machinery/door/airlock/glass/command{
+ autoset_access = 0;
+ name = "Armory airlock";
+ req_access = list("ACCESS_ARMORY")
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"KW" = (
+/obj/machinery/forensic/dnascanner,
+/turf/simulated/floor/carpet/red,
+/area/ministation/detective)
+"KX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"Lm" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Lr" = (
+/obj/structure/table/woodentable,
+/obj/machinery/reagentgrinder/juicer,
+/obj/item/chems/glass/beaker,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Ls" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"Lt" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"LE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/junction{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"LH" = (
+/obj/structure/ladder,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2underpass)
+"LI" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"LN" = (
+/obj/machinery/computer/dummy,
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"LT" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 10
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"LY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Mb" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Md" = (
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Me" = (
+/obj/structure/rack,
+/obj/item/target,
+/obj/item/target/alien,
+/obj/item/target/syndicate,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/item/target/syndicate,
+/obj/item/target/syndicate,
+/obj/item/target/syndicate,
+/obj/item/target/alien,
+/obj/item/target/alien,
+/obj/item/target/alien,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Mp" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"Mu" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Mw" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/obj/abstract/landmark/latejoin/cryo,
+/obj/machinery/status_display{
+ pixel_y = -1;
+ pixel_x = 32;
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"MA" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/structure/closet/secure_closet/hop2,
+/obj/item/book/skill/organizational/finance,
+/turf/simulated/floor/carpet,
+/area/ministation/hop)
+"MG" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/glass,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"MH" = (
+/obj/structure/table,
+/obj/item/implantcase/tracking,
+/obj/item/implantcase/chem,
+/obj/item/implanter,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"MK" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"ML" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"MQ" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"MU" = (
+/obj/structure/filing_cabinet/chestdrawer,
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"MW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"MY" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ne" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"Nf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/sign/double/barsign{
+ dir = 1;
+ pixel_x = 1;
+ pixel_y = -63
+ },
+/obj/structure/flora/bush/lavendergrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"Nh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4;
+ icon_state = "warningcorner"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Nj" = (
+/obj/structure/table/reinforced,
+/obj/item/folder,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/obj/item/bell,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Nm" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"No" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/camera/network/security{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Np" = (
+/obj/machinery/door/airlock/command,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor,
+/area/ministation/hop)
+"Nq" = (
+/obj/effect/floor_decal/ss13/l8,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Nu" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "escape2_sensor";
+ pixel_y = -20;
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "escape1_vent"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"Nv" = (
+/obj/machinery/camera/network/security{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Nz" = (
+/obj/effect/floor_decal/ss13/l15,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"NC" = (
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"ND" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/item/stool/padded,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"NE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"NO" = (
+/obj/abstract/level_data_spawner/main_level,
+/turf/space,
+/area/space)
+"NR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"NU" = (
+/obj/structure/closet,
+/obj/random/maintenance,
+/obj/item/clothing/glasses/meson,
+/obj/item/flashlight,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"NX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 5
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"NZ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ob" = (
+/obj/machinery/light/small/emergency{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"Oc" = (
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Om" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Op" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Oq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/airlock/double/glass/security{
+ id_tag = "secdoor";
+ name = "Security"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Ou" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Ov" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ow" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ level = 2
+ },
+/turf/simulated/floor/carpet/blue3,
+/area/ministation/security)
+"OF" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/universal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/cafe)
+"OH" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"OK" = (
+/obj/structure/closet/secure_closet/hos,
+/obj/item/flashlight/maglight,
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/security)
+"OL" = (
+/obj/structure/closet/secure_closet/medical1,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ON" = (
+/obj/structure/table/reinforced,
+/obj/item/folder,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/door/blast/shutters/open{
+ id_tag = "quarantine";
+ name = "quarantine shutters"
+ },
+/obj/item/chems/spray/cleaner,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"OT" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ locked = 1;
+ id_tag = "escape1_airlock_interior"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"OV" = (
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"OW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/sign/directions/evac{
+ dir = 8;
+ pixel_x = -32;
+ pixel_y = 25
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ icon_state = "warningcorner"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"OY" = (
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Pd" = (
+/obj/structure/table/woodentable,
+/obj/item/storage/fancy/cigarettes{
+ pixel_y = 2
+ },
+/obj/item/flame/lighter/random,
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"Pf" = (
+/turf/simulated/wall,
+/area/ministation/arrival)
+"Pj" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Pk" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"Po" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Pw" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Pz" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/medical)
+"PH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"PI" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"PL" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"PN" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ locked = 1;
+ id_tag = "escape1_airlock_exterior"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"PR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/obj/machinery/light,
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"PS" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"PU" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"PX" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "l2_central_north_vent";
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"PY" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "escape1_sensor";
+ pixel_y = -20;
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "escape1_vent"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"Qh" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/full,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/airlock/medical{
+ name = "Medical Supply"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Qj" = (
+/obj/structure/bed/chair/comfy/beige{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Qk" = (
+/obj/machinery/gibber,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"Qm" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Qp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"Qs" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Qz" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
+/obj/abstract/landmark/start{
+ name = "Head Doctor"
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ministation/medical)
+"QC" = (
+/obj/structure/iv_drip,
+/obj/machinery/camera/network/medbay{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"QE" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/closet,
+/obj/random/maintenance,
+/obj/random/suit,
+/obj/item/poster,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"QF" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"QK" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"QL" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/brigdoor,
+/obj/machinery/door/blast/shutters{
+ name = "security shutter";
+ id_tag = "secshut"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/security)
+"QN" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"QO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"QR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Rd" = (
+/obj/structure/bed/chair/armchair/black{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"Rk" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/abstract/landmark/latejoin,
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"Rp" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"Ru" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/portable_atmospherics/hydroponics,
+/obj/effect/floor_decal/corner/green/half{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"Rw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Rx" = (
+/turf/simulated/wall,
+/area/ministation/maint/secmaint)
+"Ry" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"RB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"RD" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/cryo)
+"RH" = (
+/obj/structure/lattice,
+/turf/simulated/wall/r_wall,
+/area/ministation/cryo)
+"RK" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/obj/structure/cable{
+ icon_state = "32-1"
+ },
+/turf/simulated/open,
+/area/ministation/maint/hydromaint)
+"RQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"RU" = (
+/obj/machinery/camera/network/medbay{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"RW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"RZ" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/machinery/camera/autoname{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Sa" = (
+/turf/simulated/wall,
+/area/ministation/maint/hydromaint)
+"Sd" = (
+/obj/effect/floor_decal/corner/green/half,
+/obj/structure/sign/department/botany{
+ pixel_y = -32;
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Sg" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Sl" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Sp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/flora/bush/lavendergrass,
+/turf/simulated/floor/grass,
+/area/ministation/hall/e2)
+"Sq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Sw" = (
+/obj/structure/closet/secure_closet/freezer/fridge,
+/turf/simulated/floor/tiled/freezer{
+ name = "kitchen freezer floor";
+ temperature = 263
+ },
+/area/ministation/cafe)
+"Sx" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "Dock Airlock"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"Sy" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped,
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/open,
+/area/ministation/hall/w2)
+"SA" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"SB" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"SD" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"SF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/ss13/l4,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"SK" = (
+/obj/machinery/light/small/emergency{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"SV" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"SW" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"SX" = (
+/obj/effect/floor_decal/industrial/loading{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Td" = (
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"Tj" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Tr" = (
+/obj/structure/rack,
+/obj/item/beartrap,
+/obj/random/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"Ts" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ministation/medical)
+"TB" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/detective)
+"TD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"TO" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"TS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/status_display{
+ pixel_y = 30
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"TT" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"TV" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/airlock/security,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"TW" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "sqm_vent";
+ dir = 8
+ },
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ dir = 0;
+ id_tag = "sqm_airlock";
+ pixel_y = 24;
+ tag_airpump = "sqm_vent";
+ tag_chamber_sensor = "sqm_sensor";
+ tag_exterior_door = "sqm_airlock_exterior";
+ tag_interior_door = "sqm_airlock_interior";
+ pixel_x = -8
+ },
+/obj/machinery/airlock_sensor{
+ id_tag = "sqm_sensor";
+ pixel_y = 24;
+ pixel_x = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"TX" = (
+/obj/structure/table/woodentable,
+/obj/item/eftpos,
+/obj/item/chems/spray/cleaner,
+/obj/machinery/light,
+/obj/item/chems/condiment/small/packet/honey,
+/obj/item/chems/condiment/small/packet/honey,
+/obj/item/chems/condiment/small/packet/honey,
+/obj/item/chems/condiment/small/packet/honey,
+/obj/item/chems/condiment/small/packet/honey,
+/obj/item/chems/condiment/small/packet/honey,
+/obj/item/chems/condiment/small/packet/honey,
+/turf/simulated/floor/lino,
+/area/ministation/cafe)
+"Ug" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Ut" = (
+/obj/structure/sign/plaque/golden/security{
+ pixel_y = 32
+ },
+/obj/machinery/vending/security,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Uv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Uw" = (
+/obj/structure/lattice,
+/obj/item/mollusc/barnacle{
+ pixel_x = -13;
+ pixel_y = -14
+ },
+/turf/space,
+/area/space)
+"Uz" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "Dock Airlock";
+ autoclose = 0
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/w2)
+"UB" = (
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "_East APC";
+ pixel_x = 27;
+ pixel_y = 2
+ },
+/obj/structure/cable,
+/turf/simulated/floor/plating,
+/area/ministation/medical)
+"UC" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -29;
+ dir = 4
+ },
+/obj/structure/closet/wardrobe/chemistry_white,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"UJ" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/obj/machinery/disposal,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"UL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centraln)
+"UN" = (
+/obj/structure/bed/chair{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"UW" = (
+/obj/structure/bed/chair,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"UY" = (
+/obj/structure/bed,
+/obj/item/bedsheet/hos,
+/obj/machinery/computer/modular/telescreen/preset/generic{
+ name = "north bump";
+ pixel_y = 32
+ },
+/obj/item/radio/intercom/locked/entertainment{
+ pixel_y = 20
+ },
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 32
+ },
+/turf/simulated/floor/carpet/blue2,
+/area/ministation/security)
+"UZ" = (
+/turf/simulated/wall/r_wall/hull,
+/area/ministation/arrival)
+"Va" = (
+/obj/structure/bed/chair/wheelchair,
+/obj/machinery/camera/network/medbay,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Vb" = (
+/obj/structure/window/reinforced,
+/obj/structure/table,
+/obj/machinery/recharger,
+/obj/item/storage/box/ammo/beanbags,
+/obj/item/ammo_magazine/rifle/practice,
+/obj/item/ammo_magazine/rifle/practice,
+/obj/item/ammo_magazine/rifle/practice,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Vc" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Vd" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Vk" = (
+/obj/machinery/door/airlock/glass/medical{
+ autoset_access = 0;
+ name = "Cryogenics airlock"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/cryo)
+"Vr" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"Vs" = (
+/obj/machinery/door/airlock/external/glass{
+ locked = 1;
+ id_tag = "l2_central_south_airlock_exterior";
+ autoset_access = 0
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "l2_central_south_airlock";
+ name = "exterior access button";
+ pixel_x = -20;
+ command = "cycle_exterior";
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Vt" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Vu" = (
+/obj/machinery/status_display{
+ pixel_x = 32;
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"Vx" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"VE" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hydro)
+"VL" = (
+/obj/structure/closet/emcloset,
+/obj/machinery/light/small/emergency{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"VR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"VU" = (
+/obj/structure/rack,
+/obj/item/radio/intercom{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/item/clothing/mask/horsehead,
+/obj/item/storage/wallet/random{
+ pixel_z = -11
+ },
+/obj/item/classic_baton{
+ pixel_w = -7
+ },
+/obj/item/clothing/suit/armor/bulletproof,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Wa" = (
+/obj/structure/table/woodentable,
+/obj/item/flashlight/lamp/green{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/machinery/status_display{
+ pixel_y = 32
+ },
+/obj/structure/sign/warning/smoking{
+ pixel_x = 32;
+ dir = 8
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/hall/w2)
+"Wb" = (
+/turf/simulated/wall,
+/area/ministation/cryo)
+"Wd" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l2centrals)
+"Wf" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/open,
+/area/ministation/maint/sebypass)
+"Wi" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Wj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Wl" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/turf/simulated/floor/wood,
+/area/ministation/detective)
+"Wo" = (
+/obj/structure/stairs/long/east,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"Wr" = (
+/obj/structure/rack,
+/obj/item/shield/riot,
+/obj/item/shield/riot,
+/obj/item/clothing/suit/armor/reactive,
+/obj/item/storage/box/ammo/beanbags,
+/obj/item/storage/box/ammo/beanbags,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"WC" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"WL" = (
+/obj/machinery/smartfridge/drying_rack,
+/turf/simulated/floor/plating,
+/area/ministation/maint/hydromaint)
+"WN" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/turf/simulated/floor/carpet/blue3,
+/area/ministation/security)
+"WQ" = (
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"WW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"WY" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"WZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"Xl" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"Xm" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Xq" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 10
+ },
+/obj/structure/sign/department/chemistry{
+ pixel_x = 32;
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/hall/e2)
+"Xr" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/sign/warning/armory{
+ pixel_x = -32;
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Xs" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Xw" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"XA" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"XK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/ss13/l14,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+"XY" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/blast/shutters{
+ name = "security shutter";
+ id_tag = "secshut"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/security)
+"Yj" = (
+/obj/machinery/computer/prisoner{
+ dir = 4
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "secshut";
+ name = "security shutter button";
+ pixel_y = -32;
+ dir = 1
+ },
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"Yn" = (
+/obj/machinery/door/airlock{
+ name = "Cryo A"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/arrival)
+"Yv" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/sign/directions/medical{
+ dir = 4;
+ pixel_x = 32;
+ pixel_y = 25
+ },
+/obj/structure/sign/directions/security{
+ dir = 4;
+ pixel_x = 32;
+ pixel_y = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8;
+ icon_state = "warningcorner"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/e2)
+"YU" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/security)
+"YY" = (
+/obj/item/radio/intercom{
+ name = "Common Channel";
+ pixel_y = 20
+ },
+/obj/structure/table,
+/obj/item/storage/firstaid/o2{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/o2{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"Zb" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/space,
+/area/ministation/hall/w2)
+"Zh" = (
+/obj/machinery/vending/cigarette,
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cafe)
+"Zm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hop)
+"Zr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/security)
+"Zz" = (
+/obj/machinery/hologram/holopad,
+/turf/simulated/floor/tiled/white,
+/area/ministation/medical)
+"ZK" = (
+/obj/machinery/computer/cryopod{
+ pixel_y = 32
+ },
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/cryo)
+"ZR" = (
+/obj/machinery/vending/coffee{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/w2)
+
+(1,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+NO
+aa
+aa
+aa
+aa
+"}
+(6,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(7,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(8,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(9,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(10,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(11,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(12,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(13,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(14,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(15,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(16,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(17,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(40,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(41,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
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(42,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(43,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(44,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(45,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(46,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(47,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(49,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(50,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(51,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(52,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(53,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
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(54,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
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(55,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(56,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(57,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(58,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(59,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(60,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(61,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(62,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(63,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(64,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
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(65,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
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(66,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(67,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(68,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(69,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(70,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
+af
+af
+aa
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(71,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(72,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(73,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(74,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(75,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(76,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(77,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(78,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
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(79,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
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(80,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(81,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(82,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(83,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(84,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(85,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(86,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(87,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+oN
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(88,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(89,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(90,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(91,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(92,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
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+ad
+rt
+PN
+kZ
+ad
+ad
+ad
+rt
+PN
+kZ
+PN
+rt
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(93,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+ad
+rt
+PY
+kZ
+ad
+ad
+ad
+rt
+Nu
+kZ
+Bj
+rt
+aa
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+mG
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+Ev
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(94,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
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+ad
+rt
+Qp
+kZ
+ad
+ad
+ad
+rt
+Qp
+kZ
+Qp
+rt
+aa
+aa
+aa
+kZ
+cr
+cr
+kZ
+kZ
+kZ
+kZ
+UZ
+UZ
+UZ
+UZ
+ed
+Ob
+Pf
+Rk
+Rk
+Rk
+VL
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(95,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+kZ
+ad
+Zb
+Qp
+kZ
+ad
+ad
+ad
+Zb
+Qp
+kZ
+Qp
+Zb
+aa
+ad
+aa
+kZ
+uB
+aV
+vO
+CU
+mO
+Uz
+IA
+ed
+Ob
+Sx
+ed
+ed
+Yn
+ed
+ed
+ed
+ds
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(96,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+kZ
+rt
+OT
+rt
+kZ
+cr
+kZ
+rt
+OT
+rt
+OT
+rt
+aa
+ad
+kZ
+kZ
+uC
+aV
+vP
+kZ
+kZ
+kZ
+UZ
+UZ
+Pf
+Pf
+Pf
+Ie
+Pf
+cf
+cf
+cf
+cq
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(97,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+lI
+mh
+Ry
+jA
+nx
+oH
+rc
+mh
+Ry
+jA
+rW
+kZ
+aa
+ad
+kZ
+aV
+aV
+GZ
+GZ
+aV
+xf
+rt
+aa
+SD
+ed
+ed
+Pf
+ed
+Pf
+Pf
+Pf
+Pf
+Pf
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+EA
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(98,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cr
+aH
+hi
+mR
+GZ
+aV
+aV
+aV
+aV
+mR
+rm
+rX
+kZ
+kZ
+kZ
+kZ
+aV
+aV
+aV
+aV
+aV
+xf
+rt
+aa
+SD
+LN
+UN
+Pf
+SK
+Pf
+ed
+ed
+ed
+ed
+UZ
+xY
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(99,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cr
+hm
+fe
+Bz
+Ca
+HJ
+HJ
+HJ
+HJ
+rE
+rn
+md
+aV
+aV
+te
+aV
+aV
+aV
+aV
+aV
+aV
+dE
+rt
+aa
+SD
+ed
+ed
+hj
+ed
+ih
+ed
+ed
+iR
+ed
+UZ
+xY
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(100,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+Bv
+Sq
+aV
+in
+Gg
+Ea
+Ea
+pY
+Ea
+ro
+MY
+Ea
+Ea
+tf
+BH
+tW
+aV
+aV
+aV
+aV
+ZR
+rt
+aa
+SD
+ed
+ed
+Pf
+ed
+Pf
+Pf
+Pf
+Pf
+Pf
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(101,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+kC
+bo
+zy
+Ov
+NZ
+nC
+nC
+nC
+nC
+rp
+TD
+ss
+nC
+tg
+SF
+tX
+kX
+vb
+jZ
+kZ
+kZ
+kZ
+UZ
+UZ
+Pf
+Pf
+Pf
+Ie
+Pf
+Rk
+Rk
+Rk
+cq
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(102,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+kZ
+em
+aV
+md
+md
+RW
+Iz
+yD
+HJ
+HJ
+ey
+fr
+st
+uD
+th
+ud
+tY
+uD
+Lm
+vP
+CU
+xK
+Uz
+IA
+ed
+iR
+Sx
+ed
+ed
+cU
+ed
+ed
+ed
+ds
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(103,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+kZ
+tM
+kZ
+tM
+tM
+xO
+tM
+tM
+kZ
+FZ
+Pd
+Ec
+rn
+aV
+ti
+Nq
+tq
+aV
+aV
+vP
+kZ
+kZ
+kZ
+UZ
+UZ
+UZ
+UZ
+ed
+iR
+Pf
+cf
+cf
+cf
+eo
+UZ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(104,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+cg
+HO
+HO
+HO
+mq
+zM
+nF
+Gx
+hO
+NU
+sg
+Pk
+mi
+kZ
+Ei
+Bk
+Ec
+rn
+aV
+tj
+tP
+ua
+aV
+aV
+aV
+kZ
+aa
+aa
+Iw
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+UZ
+Ev
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(105,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+IB
+cN
+er
+Eg
+UL
+qg
+JJ
+Io
+kZ
+CV
+Ec
+Ec
+SV
+nD
+yS
+ln
+hS
+kI
+uc
+dQ
+kZ
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(106,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+pw
+uK
+aG
+mf
+dd
+ez
+Td
+dd
+kZ
+Wa
+qF
+dc
+RQ
+aV
+bI
+XK
+RW
+SX
+uI
+vS
+uI
+uI
+uI
+uI
+uI
+uI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(107,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+dd
+dd
+dd
+dd
+dd
+pl
+dd
+ir
+dd
+PL
+dd
+dd
+dd
+mq
+mq
+mq
+kZ
+kZ
+kZ
+kZ
+su
+aV
+Nz
+ze
+aR
+on
+uI
+vT
+eg
+rD
+xJ
+yl
+MA
+uI
+qf
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(108,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+Co
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+Lt
+dd
+dd
+dd
+dd
+dd
+pl
+dd
+dd
+dd
+dd
+kZ
+Kr
+GZ
+aV
+aV
+aR
+on
+ve
+vU
+Ez
+wF
+Np
+gT
+hu
+Gz
+Wd
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(109,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+dd
+mq
+HO
+HO
+HO
+HO
+HO
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+mq
+Co
+kZ
+sv
+aV
+aV
+aV
+lL
+on
+vf
+vV
+Zm
+kB
+xJ
+cA
+Ds
+uI
+Wd
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(110,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+dd
+mq
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+DI
+aa
+aa
+mq
+dd
+kZ
+Ak
+hl
+zG
+hl
+GR
+Cb
+fu
+uG
+MK
+fd
+uI
+uI
+uI
+uI
+Wd
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(111,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+dd
+mq
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+mq
+dd
+kZ
+Kr
+wx
+sp
+WQ
+ns
+uI
+uI
+EM
+fZ
+wF
+rU
+uI
+aU
+Dn
+Wd
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(112,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+dd
+mq
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+mq
+mq
+mq
+mq
+dd
+kZ
+Kr
+wx
+sp
+WQ
+aR
+uI
+IP
+HM
+fZ
+wF
+yV
+uI
+cv
+Wd
+JX
+qf
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(113,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+dd
+mq
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+HO
+HO
+HO
+HO
+HO
+mq
+ER
+or
+at
+BT
+kZ
+lH
+wx
+BW
+bJ
+aR
+uI
+Ir
+ye
+jF
+Dw
+uI
+uI
+xj
+HR
+qf
+qf
+qf
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(114,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+dd
+mq
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+mq
+mq
+mq
+mq
+jy
+kZ
+Kr
+wx
+BW
+WQ
+aR
+uI
+SW
+AB
+Vr
+MU
+uI
+Fn
+xj
+Wd
+DJ
+ph
+qf
+qf
+qf
+qf
+qf
+qf
+qf
+qf
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(115,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+mq
+mq
+Co
+mq
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+mq
+mq
+zM
+bw
+Gx
+qk
+eb
+mq
+Kr
+Ug
+sp
+WQ
+sG
+uI
+uI
+uI
+uI
+uI
+uI
+QE
+xj
+Oc
+qf
+qf
+qf
+Wd
+Wd
+Wd
+Dn
+Wd
+Wd
+wr
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(116,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+bs
+dd
+dd
+mq
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+bG
+at
+cE
+QK
+Nm
+iq
+lN
+lB
+LI
+bN
+WW
+bN
+QN
+Hn
+An
+cm
+An
+SB
+An
+An
+zl
+Wd
+DJ
+Wd
+Dn
+Wd
+qf
+qf
+qf
+qf
+qf
+qf
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(117,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+mq
+mq
+mq
+mq
+cg
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+mq
+mq
+np
+mq
+Co
+dd
+Jm
+mq
+PH
+aV
+aV
+aV
+iN
+kZ
+Wd
+qf
+qf
+qf
+qf
+Qs
+DF
+Wd
+qf
+qf
+qf
+qf
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(118,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+fx
+PX
+mq
+mq
+ir
+mq
+kZ
+PI
+aV
+aV
+GZ
+jO
+kZ
+Wd
+qf
+qf
+qf
+qf
+qf
+qf
+qf
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(119,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+qL
+kZ
+mc
+qN
+cH
+kZ
+PI
+GZ
+aV
+aV
+Sq
+kZ
+Wd
+DJ
+Dn
+wr
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(120,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+mq
+lo
+kZ
+NC
+Sy
+aV
+kZ
+As
+Ea
+Ea
+Ea
+ue
+ex
+BG
+qf
+qf
+qf
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(121,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+ps
+NC
+dK
+Wo
+kZ
+PI
+aV
+aV
+aV
+Sq
+kZ
+vm
+qf
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+cg
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+bu
+bu
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(122,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+kZ
+MQ
+ry
+kZ
+kZ
+PI
+aV
+aV
+GZ
+Sq
+kZ
+vn
+Dn
+qf
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+bu
+LH
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(123,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+kZ
+kZ
+kZ
+zA
+kZ
+kZ
+sB
+Mb
+Mb
+Mb
+ug
+kZ
+tm
+Wd
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+bu
+Ck
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(124,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+rt
+al
+RZ
+aV
+oX
+ty
+OW
+zv
+TO
+tt
+Nh
+kZ
+gp
+Wd
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+bu
+Ck
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(125,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cg
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+rt
+pu
+aV
+aV
+oX
+ty
+Xl
+gz
+gz
+gz
+ML
+kZ
+sI
+FQ
+qf
+Ij
+Ij
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+bu
+Ck
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(126,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+rt
+pf
+zZ
+Ci
+MG
+VR
+dN
+gz
+tv
+gz
+ML
+DJ
+Wd
+xz
+nK
+Ix
+rC
+Vs
+HO
+HO
+HO
+HO
+HO
+cg
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+bu
+iK
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(127,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+rt
+qe
+Qj
+lR
+oX
+ty
+sC
+gz
+gz
+gz
+PR
+mH
+kr
+Ib
+qf
+Ij
+Ij
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+bu
+Ck
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(128,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+rt
+qe
+qe
+rA
+oX
+ty
+Yv
+AX
+NR
+AX
+ui
+mH
+Wd
+qf
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+bu
+Ck
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(129,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+rt
+rt
+rt
+rt
+rt
+mH
+sD
+tx
+tx
+tx
+sh
+mH
+Wd
+qf
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+bu
+Ck
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(130,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+cY
+cY
+cY
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+mH
+RB
+ty
+ty
+ty
+sM
+mH
+AR
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+bu
+LH
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(131,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+kh
+dr
+cY
+cY
+cY
+cY
+cY
+cY
+cY
+cY
+aa
+aa
+aa
+ab
+aa
+la
+RB
+ty
+ty
+ty
+sM
+mH
+Jt
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+bu
+bu
+bu
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(132,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
+HO
+HO
+HO
+HO
+lF
+lF
+lF
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+az
+dr
+dr
+cY
+OK
+un
+Gb
+kv
+oW
+cY
+aa
+aa
+aa
+aa
+aa
+la
+hH
+QF
+ol
+QF
+dU
+Sl
+zl
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(133,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
+HO
+HO
+HO
+HO
+lF
+yk
+lF
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+KH
+dr
+dr
+cY
+UY
+BA
+hZ
+Ig
+ax
+cY
+aa
+aa
+aa
+aa
+aa
+la
+RB
+ty
+ty
+ty
+yN
+mH
+qf
+qf
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(134,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
+HO
+lF
+lF
+lF
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+nu
+dr
+dr
+cY
+cY
+cY
+cY
+Zr
+pA
+cY
+cY
+cY
+cY
+aa
+aa
+mH
+TS
+ty
+ty
+ty
+Om
+mH
+aa
+DI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(135,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+Bs
+dr
+dr
+cY
+zq
+WN
+hZ
+Ne
+fy
+cY
+DH
+Jc
+cY
+cY
+cY
+cY
+RB
+wD
+ty
+ty
+sM
+la
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(136,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+by
+dr
+dr
+cY
+HX
+Ow
+CO
+tl
+oj
+mz
+pd
+bp
+IT
+qX
+Yj
+cY
+RB
+ty
+ty
+wD
+sM
+la
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(137,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+DY
+dr
+dr
+cY
+cY
+cY
+cY
+cY
+cY
+cY
+Ut
+QR
+Wi
+iz
+ix
+QL
+nB
+ty
+ty
+ty
+sM
+la
+aa
+ED
+ED
+ED
+ED
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(138,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+KG
+dr
+dr
+eK
+dW
+Wr
+EV
+nS
+VU
+cY
+hw
+EE
+hX
+iy
+jd
+XY
+tU
+ty
+ty
+ty
+uH
+mH
+ED
+ED
+Rd
+Rd
+BE
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(139,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+cY
+cY
+cY
+cY
+cY
+cY
+YU
+dr
+dr
+Nv
+dr
+cY
+hx
+MH
+hY
+QR
+je
+cY
+RB
+wD
+ty
+OY
+Jx
+bj
+aL
+BE
+zn
+xe
+Hd
+bj
+bj
+bj
+bj
+bj
+bj
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(140,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+Ft
+dr
+Wi
+kE
+Me
+cY
+cY
+cY
+cY
+cY
+KV
+cY
+da
+da
+hZ
+TV
+da
+cY
+JH
+ty
+ty
+OY
+Sp
+bj
+Zh
+BE
+JQ
+JQ
+BE
+ub
+bj
+Sw
+wt
+fD
+bj
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(141,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
+ab
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+Ft
+dr
+hQ
+oZ
+Ou
+vi
+ya
+Ou
+FL
+NE
+Op
+Xr
+ha
+No
+Vt
+gX
+jg
+Oq
+ly
+qI
+qI
+Jz
+mJ
+bj
+vF
+wk
+BE
+wk
+xZ
+FJ
+bj
+bU
+mj
+mw
+bj
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(142,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+Ft
+dr
+LY
+TT
+dr
+mk
+dr
+dr
+Vc
+dr
+Po
+gC
+hb
+hz
+ia
+iA
+jh
+Xs
+aD
+ty
+ty
+OY
+Jx
+bj
+vG
+BE
+iH
+iH
+BE
+Bw
+bj
+wL
+et
+Qk
+bj
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(143,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+Ft
+dr
+eZ
+PU
+dr
+Vb
+dr
+dr
+no
+cY
+Vd
+gD
+hc
+da
+ew
+iB
+WY
+cY
+sU
+QF
+tz
+OY
+uu
+bj
+vt
+xQ
+wO
+xo
+xQ
+yu
+bj
+zC
+bj
+bj
+bj
+bj
+bj
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(144,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+cY
+cY
+cY
+cY
+cY
+cY
+qS
+qS
+Rx
+Rx
+cY
+Qm
+dr
+eZ
+da
+gb
+dr
+eZ
+cY
+sV
+qI
+tA
+qI
+uv
+uL
+vu
+ND
+wP
+xp
+ND
+yv
+bj
+zD
+tS
+At
+Aw
+vr
+bj
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(145,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
+HO
+cg
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Rx
+fF
+cY
+Js
+gE
+hd
+da
+gc
+iD
+hd
+cY
+sW
+uq
+Sg
+uq
+AG
+uM
+BE
+BE
+iH
+xq
+BE
+yw
+zf
+zE
+Ae
+zF
+zF
+zF
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(146,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
+DI
+Rx
+jW
+cY
+cY
+cY
+cY
+cY
+cY
+cY
+cY
+cY
+jH
+iY
+kM
+iY
+OH
+uN
+vw
+wl
+vw
+wl
+xR
+yx
+qB
+zF
+Af
+zF
+zF
+Lr
+ED
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(147,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
+Rx
+ef
+bA
+ob
+oB
+Am
+Ip
+Am
+Am
+Am
+DG
+zg
+ty
+Xw
+OY
+Nf
+bj
+vv
+BE
+BE
+BE
+xS
+IX
+qB
+zF
+Ag
+zF
+zF
+Dj
+bj
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(148,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
+Rx
+ef
+zo
+Rx
+Rx
+JZ
+JZ
+JZ
+JZ
+JZ
+JZ
+lw
+ty
+Xw
+OY
+ge
+bj
+BE
+wm
+wm
+wm
+xT
+yy
+bj
+zH
+br
+Jd
+Av
+TX
+bj
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+jU
+jU
+jU
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(149,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
+Rx
+oc
+db
+JZ
+HF
+mp
+KW
+DC
+KK
+Wl
+JZ
+sN
+wD
+Gy
+OY
+iv
+bj
+bj
+wn
+wQ
+xs
+xU
+xW
+bj
+zI
+Rw
+Ay
+bj
+Sa
+Sa
+Sa
+Sa
+Sa
+Sa
+Sa
+Sa
+HO
+HO
+HO
+HO
+HO
+jU
+Wf
+jU
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(150,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
+Rx
+od
+zo
+TB
+aW
+aW
+HP
+Jo
+HP
+gJ
+zW
+yC
+iW
+gB
+wE
+Kv
+bj
+vy
+wo
+wR
+wR
+xV
+yA
+bj
+zJ
+Ai
+QO
+BJ
+Ga
+ib
+mW
+ib
+Mp
+ib
+RK
+Sa
+HO
+HO
+HO
+HO
+HO
+jU
+jU
+jU
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(151,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
+Rx
+oD
+nX
+JZ
+bx
+vq
+hC
+id
+iG
+jk
+JZ
+lw
+ty
+Xw
+OY
+Kz
+bj
+vz
+wp
+wp
+wp
+wp
+aB
+zh
+zK
+Ah
+HN
+bj
+rq
+WL
+Sa
+Sa
+Sa
+Sa
+Sa
+Sa
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(152,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+Rx
+Rx
+zo
+JZ
+Rx
+Rx
+Rx
+JZ
+JZ
+JZ
+JZ
+lw
+ty
+Xw
+ty
+Wj
+bj
+vA
+jS
+wS
+xt
+wq
+yB
+bj
+zF
+Aj
+AA
+bj
+OF
+Ax
+Sa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(153,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
+Rx
+oE
+Am
+Am
+UB
+ul
+ef
+Kd
+mH
+mH
+sP
+ty
+Xw
+ty
+um
+bj
+bj
+bj
+bj
+bj
+bj
+dZ
+bj
+zL
+bj
+bj
+bj
+dS
+Tr
+Sa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(154,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
+Rx
+Rx
+Rx
+Rx
+oz
+oz
+jW
+oz
+oz
+wc
+sQ
+qI
+tD
+aj
+up
+tL
+dq
+is
+Au
+lQ
+qM
+yM
+KN
+EL
+ct
+gL
+eH
+AK
+NX
+Sa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(155,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
+oz
+Fr
+RU
+pD
+FF
+oz
+UW
+lw
+ty
+Xw
+ty
+um
+Sd
+OV
+if
+qT
+wN
+qT
+tT
+xy
+cd
+zQ
+zQ
+Sa
+yn
+WC
+Sa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(156,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
+pU
+pe
+oF
+jR
+lJ
+oz
+BS
+lw
+ty
+tE
+ty
+um
+jV
+Im
+MW
+Ru
+uJ
+Ru
+Rp
+ws
+hv
+zQ
+ad
+Sa
+Sa
+Bm
+Sa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(157,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
+pU
+pe
+pF
+qn
+qZ
+oz
+oz
+lw
+ty
+Xw
+ty
+um
+jV
+vE
+wu
+wW
+xx
+wW
+yE
+ws
+zO
+zQ
+ad
+aa
+Sa
+TW
+Sa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(158,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
+oz
+ae
+pF
+qo
+qY
+rI
+oz
+uP
+qI
+tG
+wD
+um
+jV
+OV
+Vu
+oY
+CL
+VE
+yF
+zj
+zP
+zQ
+aa
+aa
+Sa
+pb
+Sa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(159,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
+oz
+oz
+pG
+qp
+qY
+pe
+oz
+fC
+sS
+tH
+Hi
+us
+fY
+oz
+oz
+oz
+vp
+oz
+oz
+yf
+zQ
+zQ
+aa
+aa
+ad
+pr
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(160,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
+oz
+pH
+qq
+ra
+rJ
+si
+KX
+tJ
+tI
+tJ
+ut
+LT
+kS
+HL
+UC
+fw
+mC
+oz
+aa
+aa
+Uw
+ad
+aa
+aa
+ad
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(161,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
+oz
+pI
+qr
+rb
+rK
+sj
+WZ
+Gd
+Ls
+Gd
+Gd
+Xq
+oA
+hh
+pD
+pD
+Pw
+vK
+aa
+aa
+aa
+ad
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(162,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
+oz
+pJ
+hr
+qs
+oz
+oz
+ov
+Nj
+iE
+ON
+Hy
+oz
+oz
+wy
+pD
+pD
+yb
+vK
+ad
+aa
+aa
+ad
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(163,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
+oz
+pK
+qt
+rd
+rL
+sk
+bQ
+so
+hA
+so
+cQ
+oz
+vH
+wz
+qw
+xA
+yc
+vK
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(164,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
+oz
+pL
+qu
+re
+rL
+sk
+js
+pD
+zd
+Zz
+Gu
+oz
+jT
+pe
+wY
+xB
+yY
+oz
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(165,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
+oz
+pM
+qu
+pD
+rM
+oz
+CD
+pU
+tN
+pU
+pU
+oz
+oz
+wA
+Fo
+xC
+rQ
+oz
+Wb
+RD
+RD
+RD
+RD
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(166,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
+oz
+pN
+qv
+rN
+rf
+Az
+Jl
+rf
+Tj
+rf
+rf
+uV
+rf
+rf
+rN
+xD
+Cu
+tZ
+Wb
+CP
+Hz
+gS
+RD
+aa
+ad
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(167,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
+oz
+pO
+qw
+rg
+rO
+rO
+Be
+LE
+Pj
+Uv
+Uv
+XA
+Uv
+XA
+bB
+xE
+PS
+DD
+Vk
+AD
+hs
+qO
+RD
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(168,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
+oz
+CJ
+pD
+rh
+rP
+sm
+qA
+Vx
+aA
+pD
+ux
+tO
+vJ
+wC
+wZ
+pD
+wB
+AJ
+Wb
+ZK
+EG
+Mw
+RD
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(169,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
+oz
+oz
+oz
+oz
+vK
+nf
+vK
+oz
+oz
+UJ
+aA
+QC
+oz
+oz
+oz
+oz
+xa
+oz
+Qh
+vK
+Wb
+RD
+RD
+RH
+RD
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(170,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
+oz
+pP
+sn
+eV
+pD
+ri
+pD
+yG
+oz
+sX
+aA
+ta
+oz
+uy
+uZ
+gU
+xb
+oz
+yg
+ii
+zt
+km
+oz
+aa
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(171,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
+ab
+aa
+aa
+aa
+aa
+aa
+oz
+pQ
+qz
+qw
+qw
+rj
+pD
+sY
+oz
+sX
+aA
+pD
+oz
+uy
+uZ
+uX
+xF
+oz
+Va
+uW
+pD
+OL
+vK
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(172,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
+oz
+pR
+qA
+rk
+rR
+sq
+pD
+mL
+oz
+HG
+aA
+pD
+oz
+uy
+uZ
+Pz
+vM
+oz
+xc
+uW
+pD
+SA
+vK
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(173,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
+oz
+pS
+pD
+pD
+pD
+Vx
+pD
+ta
+oz
+oz
+vL
+Cx
+oz
+uy
+uZ
+uZ
+vN
+oz
+Ge
+qA
+pD
+yJ
+vK
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(174,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
+oz
+pT
+kR
+Xm
+rS
+Md
+pD
+tb
+oz
+ww
+Mu
+bv
+oz
+oz
+pU
+pU
+oz
+oz
+YY
+xH
+yh
+yK
+oz
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(175,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
+oz
+oz
+oz
+oz
+oz
+vK
+vK
+vK
+oz
+xd
+Qz
+qy
+oz
+aa
+aa
+aa
+aa
+oz
+oz
+vK
+vK
+oz
+oz
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(176,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
+oz
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+oz
+Kk
+bH
+oS
+Cx
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(177,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
+oz
+ar
+Ts
+oz
+oz
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(178,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
+DI
+oz
+Cx
+Cx
+oz
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(179,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(180,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(181,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(182,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(183,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(184,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(185,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(186,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(187,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(188,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(189,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(190,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
+ab
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(191,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(192,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(193,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(194,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(195,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(196,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
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(197,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
+HO
+HO
+HO
+HO
+HO
+HO
+HO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(198,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(199,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(200,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(201,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(202,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(203,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(204,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(205,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(206,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(207,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(208,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(209,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(210,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(211,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(212,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(213,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(214,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(215,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(216,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(217,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(218,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(219,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(220,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(221,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(222,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(223,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(224,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(225,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(226,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(227,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(228,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(229,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(230,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(231,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(232,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(233,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
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(234,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(235,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(236,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(237,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(238,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(239,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(240,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(241,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(242,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(243,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(244,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(245,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(246,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(247,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(248,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(249,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(250,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(251,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(252,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(253,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(254,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(255,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/maps/ministation/ministation-2.dmm b/maps/ministation/ministation-2.dmm
new file mode 100644
index 00000000000..c23f66a8cc6
--- /dev/null
+++ b/maps/ministation/ministation-2.dmm
@@ -0,0 +1,72834 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/space,
+/area/space)
+"ab" = (
+/obj/abstract/landmark{
+ name = "carpspawn"
+ },
+/turf/space,
+/area/space)
+"ad" = (
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"ae" = (
+/turf/simulated/wall,
+/area/ministation/science)
+"af" = (
+/turf/exterior/wall/random/ministation,
+/area/space)
+"ah" = (
+/turf/simulated/wall,
+/area/ministation/bridge)
+"am" = (
+/obj/structure/table/reinforced,
+/obj/item/wrench,
+/obj/item/assembly/timer,
+/obj/item/assembly/signaler,
+/obj/item/assembly/signaler,
+/obj/item/multitool,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ao" = (
+/obj/structure/table/reinforced,
+/obj/machinery/faxmachine/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ap" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"aq" = (
+/obj/machinery/photocopier,
+/obj/item/radio/intercom{
+ dir = 8;
+ pixel_x = 22
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"ar" = (
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"as" = (
+/obj/machinery/computer/modular/preset/security,
+/obj/effect/floor_decal/corner/red/full,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"av" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"aw" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor,
+/area/ministation/science)
+"ax" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/computer/modular/preset/cardslot/command,
+/obj/effect/floor_decal/corner/blue/full,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ay" = (
+/obj/effect/floor_decal/corner/white/full,
+/obj/machinery/computer/modular/preset/medical,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"az" = (
+/obj/effect/floor_decal/corner/yellow/full,
+/obj/machinery/computer/ship/sensors{
+ id_tag = "stationsensors"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aA" = (
+/obj/abstract/landmark{
+ name = "carpspawn"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/space)
+"aB" = (
+/obj/structure/table/reinforced,
+/obj/item/folder/envelope/nuke_instructions,
+/obj/item/documents/corporate/account,
+/obj/item/documents/corporate/personnel,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aC" = (
+/obj/structure/table/reinforced,
+/obj/item/radio,
+/obj/item/radio/beacon,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aD" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/bridge)
+"aF" = (
+/obj/structure/glass_tank/aquarium,
+/mob/living/simple_animal/aquatic/fish,
+/mob/living/simple_animal/aquatic/fish,
+/mob/living/simple_animal/aquatic/fish,
+/mob/living/simple_animal/aquatic/fish,
+/mob/living/simple_animal/aquatic/fish,
+/mob/living/simple_animal/aquatic/fish/grump,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aI" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aJ" = (
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aK" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aO" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aP" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/firstaid/regular,
+/obj/item/storage/toolbox/emergency,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aQ" = (
+/obj/structure/displaycase,
+/obj/item/sword/replica/officersword,
+/obj/machinery/status_display{
+ pixel_y = 30
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aR" = (
+/obj/structure/bed,
+/obj/item/bedsheet/captain,
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/structure/curtain/open/bed,
+/turf/simulated/floor/carpet/red,
+/area/ministation/bridge)
+"aT" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/bridge)
+"aU" = (
+/obj/structure/table/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/window/reinforced,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "slimeblast3";
+ name = "Enclosure 3 Blastdoors Button";
+ directional_offset = null;
+ dir = 8
+ },
+/obj/machinery/camera/network/research,
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"aV" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"aW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/alternate/door/bolts{
+ id_tag = "vaultbolt";
+ name = "Vault Deadbolt Button";
+ pixel_y = 27
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/bridge)
+"aX" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/command{
+ autoset_access = 0;
+ req_access = list("ACCESS_CAPTAIN");
+ name = "Captain's Dormitory"
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/carpet,
+/area/ministation/bridge)
+"aY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"aZ" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/machinery/camera/network/research,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ba" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bb" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin{
+ pixel_x = 1;
+ pixel_y = 9
+ },
+/obj/item/pen,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/item/megaphone,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bc" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/table/reinforced,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/item/radio/intercom{
+ pixel_y = -1;
+ directional_offset = null
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"be" = (
+/obj/structure/table/reinforced,
+/obj/item/folder/yellow,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bf" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bg" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/bridge/vault)
+"bi" = (
+/obj/structure/filing_cabinet,
+/obj/machinery/light_switch{
+ pixel_y = 28
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge/vault)
+"bl" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/telecomms)
+"bn" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "Vault APC";
+ pixel_y = 25
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/bluegrid,
+/area/ministation/bridge/vault)
+"bo" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/closet/l3closet/scientist,
+/obj/effect/floor_decal/corner/purple{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"bp" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/bluegrid,
+/area/ministation/bridge/vault)
+"bq" = (
+/turf/simulated/floor/bluegrid,
+/area/ministation/bridge/vault)
+"br" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/simulated/floor/carpet/red,
+/area/ministation/bridge)
+"bs" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/bridge)
+"bt" = (
+/obj/item/flashlight/lamp/green,
+/obj/structure/table/woodentable/mahogany,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/item/gun/launcher/crossbow,
+/obj/item/arrow,
+/obj/item/arrow,
+/obj/item/cell/crap,
+/obj/item/mollusc/clam,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/bridge)
+"bu" = (
+/obj/machinery/shipsensors{
+ id_tag = "stationsensors"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/airless,
+/area/ministation/maint/l3sw)
+"bv" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -29;
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bw" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bx" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/secure/briefcase,
+/obj/item/flash,
+/obj/item/flash,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"by" = (
+/obj/structure/closet,
+/obj/item/stack/material/ingot/mapped/gold,
+/obj/item/stack/material/ingot/mapped/gold,
+/obj/item/stack/material/ingot/mapped/gold,
+/obj/item/storage/belt/champion,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge/vault)
+"bz" = (
+/obj/abstract/landmark/start{
+ name = "Captain"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/bed/chair/comfy/captain,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bA" = (
+/obj/structure/table/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "bridgeblast";
+ dir = 8;
+ pixel_y = -2;
+ directional_offset = null
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "sensor";
+ name = "Sensor Shroud";
+ pixel_y = 8;
+ dir = 8;
+ directional_offset = null
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/vault/bolted{
+ autoset_access = 0;
+ id_tag = "vaultbolt";
+ req_access = list("ACCESS_VAULT")
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge/vault)
+"bE" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge/vault)
+"bF" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/bluegrid,
+/area/ministation/bridge/vault)
+"bG" = (
+/obj/structure/closet/secure_closet/captains,
+/obj/item/storage/belt/holster,
+/turf/simulated/floor/carpet/red,
+/area/ministation/bridge)
+"bH" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/structure/bed/chair/comfy/captain{
+ dir = 4
+ },
+/obj/machinery/camera/network/command{
+ dir = 1;
+ initial_access = null
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/bridge)
+"bI" = (
+/obj/structure/table/woodentable/mahogany,
+/obj/item/modular_computer/tablet/lease/preset/command,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/bridge)
+"bK" = (
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bN" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/hologram/holopad/longrange,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bO" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bR" = (
+/obj/machinery/nuclearbomb/station{
+ pixel_y = 2
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/dark/monotile,
+/area/ministation/bridge/vault)
+"bT" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/structure/closet/emcloset,
+/obj/item/ammo_magazine/rifle/practice,
+/obj/item/ammo_magazine/rifle/practice,
+/obj/item/ammo_magazine/rifle/practice,
+/obj/item/ammo_magazine/rifle/practice,
+/obj/item/ammo_magazine/rifle/practice,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge/vault)
+"bV" = (
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/machinery/camera/network/command{
+ dir = 1;
+ initial_access = null
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bW" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/obj/structure/sign/department/bridge{
+ dir = 4;
+ pixel_x = -32
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"bX" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/machinery/light,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"bZ" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ca" = (
+/obj/machinery/newscaster{
+ pixel_y = -28;
+ dir = 1
+ },
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"cg" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning/corner{
+ icon_state = "warningcorner"
+ },
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"ch" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/reinforced,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ci" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/airlock/glass/command,
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"cn" = (
+/turf/simulated/floor/airless,
+/area/space)
+"co" = (
+/turf/simulated/wall/r_wall,
+/area/ministation/company_rep)
+"cp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"cr" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"cs" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ct" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"cu" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/bridge)
+"cw" = (
+/turf/simulated/floor/reinforced/airless,
+/area/space)
+"cx" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"cD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"cE" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/sign/warning/high_voltage{
+ pixel_y = -32;
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"cF" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"cI" = (
+/obj/structure/closet/secure_closet{
+ closet_appearance = /decl/closet_appearance/secure_closet/rd;
+ req_access = list("ACCESS_RESEARCH");
+ name = "Science locker"
+ },
+/obj/item/storage/med_pouch/trauma,
+/obj/item/stack/tape_roll/duct_tape,
+/obj/item/twohanded/spear/diamond,
+/obj/item/shield/buckler,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"cJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"cL" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"cN" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/wall,
+/area/ministation/science)
+"cP" = (
+/obj/machinery/network/acl{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"cU" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"cV" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"cW" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"cX" = (
+/obj/structure/rack,
+/obj/random/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"da" = (
+/obj/structure/window/basic/full,
+/turf/simulated/floor/plating,
+/area/ministation/library)
+"db" = (
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"dc" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular/open{
+ id_tag = "slimeblast3";
+ name = "enclosure 3 blast door"
+ },
+/turf/simulated/floor,
+/area/ministation/science)
+"dd" = (
+/turf/simulated/floor,
+/area/ministation/science)
+"de" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8;
+ level = 2
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"di" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"dn" = (
+/obj/structure/table/woodentable_reinforced/walnut,
+/obj/item/paper_bin,
+/obj/item/pen/retractable,
+/turf/simulated/floor/carpet/red,
+/area/ministation/court)
+"dq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"dr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/airlock/glass/command{
+ name = "Bridge"
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"dt" = (
+/obj/machinery/button/blast_door{
+ id_tag = "mech";
+ name = "Mech Bay Door Control";
+ pixel_x = -24;
+ pixel_y = 2;
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"du" = (
+/mob/living/slime,
+/turf/simulated/floor,
+/area/ministation/science)
+"dv" = (
+/obj/machinery/cryopod/robot,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"dw" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"dx" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"dy" = (
+/obj/machinery/door/window/westleft,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"dz" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/window/eastleft,
+/obj/machinery/door/blast/regular/open{
+ id_tag = "slimeblast3";
+ name = "enclosure 3 blast door"
+ },
+/turf/simulated/floor,
+/area/ministation/science)
+"dA" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor,
+/area/ministation/science)
+"dE" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"dQ" = (
+/obj/structure/table,
+/obj/item/hand_labeler,
+/obj/item/pen,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"dS" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/effect/decal/cleanable/filth,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"dT" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/random/trash,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"dX" = (
+/obj/machinery/papershredder,
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"dY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"dZ" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"eb" = (
+/obj/machinery/mech_recharger,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"ec" = (
+/obj/machinery/door/airlock/science,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"ee" = (
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"ef" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"eg" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular/open{
+ id_tag = "slimeblast3";
+ name = "enclosure 3 blast door"
+ },
+/turf/simulated/floor,
+/area/ministation/science)
+"eh" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/obj/structure/disposaloutlet{
+ dir = 1
+ },
+/turf/simulated/floor,
+/area/ministation/science)
+"ei" = (
+/obj/effect/wallframe_spawn/reinforced/titanium,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"es" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"et" = (
+/obj/structure/closet/wardrobe/lawyer_black,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"ey" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"eA" = (
+/obj/machinery/computer/shuttle_control/explore/ministation{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"eB" = (
+/obj/structure/table,
+/obj/machinery/faxmachine/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"eD" = (
+/obj/machinery/recharge_station,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"eF" = (
+/obj/structure/fireaxecabinet{
+ pixel_x = 32;
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"eH" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "science_airlock_exterior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "ministation_science_dock";
+ name = "exterior access button";
+ pixel_x = -20;
+ command = "cycle_exterior";
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/airless,
+/area/ministation/science)
+"eM" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"eO" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"eP" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"eV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"eW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ pixel_y = 32
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"eX" = (
+/obj/machinery/alarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"eY" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"eZ" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"fb" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"fc" = (
+/obj/structure/closet/secure_closet/scientist,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"fd" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/machinery/optable,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"fe" = (
+/obj/machinery/computer/operating,
+/obj/item/radio/intercom{
+ pixel_y = 20
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ff" = (
+/obj/structure/table,
+/obj/item/scalpel{
+ pixel_y = 15
+ },
+/obj/item/circular_saw,
+/obj/machinery/camera/network/research,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"fg" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder,
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"fh" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"fi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"fk" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"fl" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"fz" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"fA" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/abstract/landmark{
+ name = "lightsout"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"fJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"fK" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"fN" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"fU" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"fV" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/black/border{
+ dir = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"fZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"gd" = (
+/obj/machinery/destructive_analyzer{
+ initial_network_id = "molluscnet"
+ },
+/obj/machinery/camera/network/research,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"ge" = (
+/obj/machinery/computer/shuttle_control/explore/ministation{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gf" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gg" = (
+/obj/abstract/landmark/start{
+ name = "Scientist"
+ },
+/obj/item/stool/padded,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gh" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gi" = (
+/obj/machinery/smartfridge/secure/extract,
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gn" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"gp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gx" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"gy" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"gF" = (
+/obj/item/mollusc/barnacle{
+ pixel_x = -13;
+ pixel_y = -14
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/space)
+"gG" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/purple{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/purple,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/sign/department/xenobio_3{
+ pixel_x = 32;
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gI" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gJ" = (
+/obj/machinery/camera/network/research,
+/obj/structure/table,
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"gK" = (
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"gN" = (
+/obj/structure/bed/chair/shuttle/blue{
+ dir = 4
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"gQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"gR" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"gS" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"gT" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"gU" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "pqm_airlock_interior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "pqm_airlock";
+ name = "interior access button";
+ pixel_x = 10;
+ pixel_y = 20
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"gV" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/bookcase/skill_books/random,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"he" = (
+/obj/structure/closet,
+/obj/random/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"hf" = (
+/obj/machinery/fabricator/protolathe{
+ initial_network_id = "molluscnet"
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"hg" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"hh" = (
+/obj/machinery/fabricator/bioprinter{
+ initial_network_id = "molluscnet"
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"hi" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/sign/department/xenoarch{
+ pixel_y = 30
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hj" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hl" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8
+ },
+/turf/simulated/floor/airless,
+/area/ministation/shuttle/outgoing)
+"hm" = (
+/obj/machinery/atmospherics/unary/vent_pump/siphon/on,
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/science)
+"hn" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/design_database{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/science)
+"hv" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/library)
+"hx" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"hy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/wall/titanium,
+/area/ministation/shuttle/outgoing)
+"hF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/item/storage/box/syringes,
+/obj/item/chems/glass/beaker/large,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hG" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hI" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/structure/table,
+/obj/item/disk/tech_disk,
+/obj/item/disk/tech_disk,
+/obj/item/disk/design_disk,
+/obj/item/stack/material/ingot/mapped/osmium/twentyfive,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hJ" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hK" = (
+/obj/structure/table,
+/obj/item/stock_parts/micro_laser,
+/obj/item/stock_parts/micro_laser,
+/obj/item/stock_parts/manipulator,
+/obj/item/stock_parts/capacitor,
+/obj/item/stock_parts/capacitor,
+/obj/item/stock_parts/manipulator,
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hL" = (
+/obj/structure/table,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/scanning_module,
+/obj/item/stock_parts/scanning_module{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"hM" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/science)
+"hN" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 5
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/science)
+"hO" = (
+/obj/machinery/atmospherics/pipe/manifold/visible{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/ministation/science)
+"hS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"hV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"hY" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/turf/simulated/open,
+/area/ministation/maint/l3nw)
+"if" = (
+/obj/machinery/door/window/eastright,
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/blast/shutters{
+ name = "science shutters";
+ id_tag = "scishut"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"ig" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ih" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ii" = (
+/obj/machinery/door/airlock/glass/science,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ik" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/hologram/holopad,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"im" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"in" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/obj/machinery/recharger,
+/obj/structure/table,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"io" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"ip" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 9
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/science)
+"iq" = (
+/obj/effect/decal/cleanable/filth,
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/court)
+"iu" = (
+/obj/machinery/vending/cola{
+ dir = 4;
+ pixel_x = -5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"iC" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ name = "fuel pump"
+ },
+/obj/structure/handrail{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"iG" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"iI" = (
+/obj/machinery/fabricator{
+ initial_network_id = "molluscnet"
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"iJ" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"iK" = (
+/obj/machinery/fabricator/imprinter{
+ initial_network_id = "molluscnet"
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"iL" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"iM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/machinery/hologram/holopad/longrange,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"iN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/industrial/loading{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"iO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"iP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/door/airlock/glass/science{
+ name = "Xenobiology"
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"iQ" = (
+/obj/abstract/landmark/start{
+ name = "Scientist"
+ },
+/obj/structure/bed/chair/office/light,
+/obj/item/radio/intercom{
+ dir = 8;
+ pixel_x = 22
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"iR" = (
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/machinery/atmospherics/portables_connector{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"iS" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/glass/science,
+/obj/machinery/atmospherics/pipe/simple/visible,
+/turf/simulated/floor/tiled/dark,
+/area/ministation/science)
+"iT" = (
+/obj/machinery/atmospherics/pipe/manifold/visible,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"iZ" = (
+/obj/machinery/vending/coffee{
+ dir = 4;
+ pixel_x = -5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"jd" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"jm" = (
+/obj/machinery/door/blast/regular{
+ id_tag = "sensor"
+ },
+/turf/simulated/floor/airless,
+/area/ministation/maint/l3sw)
+"jn" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/wrench,
+/obj/item/crowbar/red,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jo" = (
+/obj/machinery/light,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/mask/gas/budget,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jp" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/purple,
+/obj/structure/disposalpipe/junction/mirrored{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"js" = (
+/obj/structure/table,
+/obj/item/chems/glass/beaker/large,
+/obj/item/chems/glass/beaker/sulphuric,
+/obj/item/chems/dropper,
+/obj/effect/floor_decal/corner/purple{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jt" = (
+/obj/structure/table,
+/obj/item/stock_parts/console_screen,
+/obj/item/stock_parts/console_screen,
+/obj/item/stock_parts/console_screen,
+/obj/item/stock_parts/matter_bin,
+/obj/item/stock_parts/matter_bin,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ju" = (
+/obj/structure/table,
+/obj/item/clothing/glasses/welding,
+/obj/item/stack/material/pane/mapped/glass/fifty,
+/obj/item/stack/material/reinforced/mapped/fiberglass/fifty,
+/obj/item/stack/material/sheet/mapped/steel/fifty,
+/obj/item/stack/material/shiny/mapped/aluminium/fifty,
+/obj/item/stack/material/ingot/mapped/copper/fifty,
+/obj/machinery/camera/network/research{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jv" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jw" = (
+/obj/abstract/landmark{
+ name = "blobstart"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jx" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jy" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"jL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"jM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 8
+ },
+/obj/structure/sign/department/eva{
+ pixel_y = -32;
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jN" = (
+/obj/effect/shuttle_landmark/bridge_north,
+/turf/space,
+/area/space)
+"jP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/glass/science{
+ name = "Research and Development/Robotics";
+ req_access = list("ACCESS_XENOBIO");
+ autoset_access = 0
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"jR" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kg" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/hall/s3)
+"kh" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"ki" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"kk" = (
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"kn" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ko" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/camera/network/research,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kp" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"kr" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"ks" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kt" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ku" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kv" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kx" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ky" = (
+/obj/machinery/camera/network/research,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kz" = (
+/mob/living/simple_animal/cat/fluff/ran,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kG" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/obj/machinery/computer/design_console{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/magenta,
+/area/ministation/science)
+"kP" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/airlock/glass/science{
+ autoset_access = 0;
+ req_access = list("ACCESS_ROBOTICS")
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"kQ" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kR" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kT" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"kU" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kV" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"kW" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/shutters/open{
+ name = "RD Shutter";
+ id_tag = "RD1"
+ },
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"lb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1;
+ icon_state = "warningcorner"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"lh" = (
+/obj/structure/closet,
+/obj/item/multitool,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"ll" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"lp" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"ls" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"lv" = (
+/obj/structure/closet/emcloset,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lw" = (
+/obj/structure/closet/firecloset,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lx" = (
+/obj/structure/closet/firecloset,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lz" = (
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"lA" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/purple,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lB" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 8
+ },
+/obj/structure/sign/department/xenoflora{
+ pixel_y = -32;
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lF" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 4
+ },
+/obj/machinery/camera/network/research,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"lG" = (
+/obj/machinery/door/blast/shutters{
+ dir = 4;
+ id_tag = "mech";
+ name = "Mech Bay"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"lH" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"mf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/glass/science{
+ name = "Xenobotony"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mk" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 5
+ },
+/obj/structure/bed/chair/padded/blue{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ml" = (
+/obj/machinery/mass_driver{
+ id_tag = "artifactlauncher";
+ dir = 4
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"mm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/bed/chair/shuttle/blue{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"ms" = (
+/obj/machinery/atmospherics/unary/tank/air{
+ start_pressure = 6000
+ },
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"mA" = (
+/obj/machinery/seed_extractor,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mB" = (
+/obj/machinery/botany/editor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mC" = (
+/obj/machinery/botany/extractor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mD" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/biogenerator,
+/obj/effect/floor_decal/corner/purple{
+ dir = 4
+ },
+/obj/item/radio/intercom{
+ pixel_y = 20
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mF" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/machinery/vending/hydronutrients,
+/obj/effect/floor_decal/corner/purple{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mG" = (
+/obj/structure/table,
+/obj/item/scanner/gas,
+/obj/item/wrench,
+/obj/item/minihoe,
+/obj/item/hatchet,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/camera/network/research,
+/obj/item/wirecutters/clippers,
+/obj/item/scanner/plant,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mH" = (
+/obj/machinery/atmospherics/portables_connector,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mJ" = (
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"mK" = (
+/obj/machinery/portable_atmospherics/hydroponics/soil,
+/turf/simulated/floor/grass,
+/area/ministation/science)
+"mN" = (
+/obj/machinery/door/airlock/glass/science{
+ autoset_access = 0;
+ req_access = list("ACCESS_RESEARCH_DIRECTOR")
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"mU" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/bed/chair/shuttle/blue{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"mW" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"mX" = (
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"mY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"nj" = (
+/obj/machinery/camera/network/command{
+ initial_access = null
+ },
+/turf/simulated/floor/bluegrid,
+/area/ministation/bridge/vault)
+"nl" = (
+/turf/simulated/wall,
+/area/ministation/maint/l3ne)
+"nr" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -29;
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/storage/box/syringes,
+/obj/item/storage/box/botanydisk,
+/obj/item/chems/glass/beaker/large,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ns" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"nt" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"nu" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"nv" = (
+/obj/machinery/door/window/westleft,
+/obj/machinery/door/window/eastleft,
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"nw" = (
+/obj/machinery/atmospherics/unary/vent_pump{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"nz" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/disposalpipe/junction/mirrored{
+ dir = 2
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"nA" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"nG" = (
+/turf/simulated/wall/titanium,
+/area/ministation/shuttle/outgoing)
+"nI" = (
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "_East APC";
+ pixel_x = 27;
+ pixel_y = 2
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/alarm{
+ pixel_y = -24;
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/s3)
+"nL" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"nN" = (
+/obj/structure/ladder,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"nP" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"nQ" = (
+/obj/structure/lattice,
+/turf/simulated/wall,
+/area/ministation/maint/l3ne)
+"nS" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"nW" = (
+/obj/structure/filing_cabinet,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"nX" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"nZ" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"ob" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"oc" = (
+/turf/simulated/wall,
+/area/ministation/maint/l3se)
+"od" = (
+/obj/machinery/computer/air_control{
+ dir = 8;
+ id_tag = "xenobot";
+ name = "Xenoflora Gas Monitor"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"oe" = (
+/obj/machinery/air_sensor{
+ id_tag = "xenobot";
+ name = "Xenoflora Gas Sensor"
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"of" = (
+/obj/machinery/commsrelay,
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"og" = (
+/obj/machinery/door/airlock/glass/command{
+ autoset_access = 0;
+ name = "Telecommunications glass airlock";
+ req_access = list("ACCESS_TELECOMS")
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/turf/simulated/floor/holofloor/lino,
+/area/ministation/telecomms)
+"op" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"ot" = (
+/obj/structure/tank_rack/oxygen,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"oB" = (
+/obj/machinery/portable_atmospherics/hydroponics,
+/obj/effect/floor_decal/corner/green/full,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"oC" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/item/chems/glass/bucket,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"oD" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor,
+/area/ministation/science)
+"oE" = (
+/obj/machinery/light,
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"oF" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/telecomms)
+"oG" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/obj/structure/closet/crate,
+/obj/item/stock_parts/circuitboard/telecomms_hub,
+/obj/item/cell,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"oN" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"oP" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"oQ" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"oR" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"oS" = (
+/obj/effect/floor_decal/corner/yellow/full,
+/obj/machinery/computer/modular/preset/engineering,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"pa" = (
+/obj/item/mollusc/barnacle{
+ pixel_x = -13;
+ pixel_y = -14
+ },
+/turf/space,
+/area/space)
+"pb" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/turf/simulated/open,
+/area/ministation/maint/l3sw)
+"pf" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"pi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"pp" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"ps" = (
+/obj/structure/table/woodentable/ebony,
+/obj/item/paper_bundle,
+/obj/effect/floor_decal/stoneborder{
+ dir = 6
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"pz" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/hall/n3)
+"pM" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 5
+ },
+/obj/structure/bed/chair/padded/blue{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"pP" = (
+/obj/effect/floor_decal/techfloor/orange,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"qi" = (
+/obj/structure/ladder,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"qx" = (
+/obj/machinery/keycard_auth{
+ pixel_x = -24;
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"qY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"rf" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"rh" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"rk" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"rl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/handrail{
+ dir = 4
+ },
+/obj/machinery/light,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"rp" = (
+/obj/structure/hygiene/sink{
+ dir = 8;
+ pixel_x = -11
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"rx" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"rB" = (
+/obj/machinery/computer/ship/helm{
+ dir = 8
+ },
+/obj/effect/overmap/visitable/ship/landable/science_shuttle,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"rI" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"rK" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/corner/purple{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"rV" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "RD1";
+ name = "RD Shutter Button";
+ pixel_x = 24;
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"rW" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"sh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"sl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/door/airlock/glass{
+ name = "Library"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/library)
+"sr" = (
+/turf/simulated/floor/tiled/dark/monotile{
+ name = "telecomms dark floor";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"ss" = (
+/obj/machinery/door/airlock/glass/command{
+ name = "Bridge"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"st" = (
+/obj/effect/floor_decal/carpet/green{
+ dir = 8
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 8
+ },
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"sB" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"sC" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"sD" = (
+/turf/simulated/wall,
+/area/ministation/hall/n3)
+"sE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/effect/wallframe_spawn/reinforced/titanium,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"sM" = (
+/obj/structure/closet,
+/obj/item/storage/briefcase,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"sQ" = (
+/obj/structure/ladder,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/atmospherics/pipe/zpipe/up/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "16-0"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"sV" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/purple,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"sY" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/flora/bush/fullgrass,
+/turf/exterior/grass,
+/area/ministation/hall/n3)
+"tc" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled/dark/monotile{
+ name = "telecomms dark floor";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"td" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/dark/monotile{
+ name = "telecomms dark floor";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"te" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"tm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/chems/spray/extinguisher{
+ pixel_x = 4;
+ pixel_y = 3
+ },
+/obj/item/chems/spray/extinguisher{
+ pixel_x = 4;
+ pixel_y = 3
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ts" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"tt" = (
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"tu" = (
+/obj/structure/table,
+/obj/item/integrated_circuit_printer,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"tv" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"tx" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/plating,
+/area/ministation/hall/n3)
+"ty" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/turf/simulated/open,
+/area/ministation/maint/l3se)
+"tA" = (
+/obj/effect/floor_decal/corner/yellow/full,
+/obj/machinery/computer/modular/preset/civilian,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"tB" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 6
+ },
+/obj/structure/sign/department/science_2{
+ pixel_x = 32;
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"tQ" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ name = "bridge blast door";
+ id_tag = "bridgeblast"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/bridge)
+"tT" = (
+/obj/machinery/atmospherics/unary/freezer{
+ dir = 8;
+ set_temperature = 263
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"tU" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled/dark/monotile{
+ name = "telecomms dark floor";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"tV" = (
+/obj/machinery/network/router{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"tY" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"tZ" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/court)
+"ug" = (
+/obj/structure/catwalk,
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"uh" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"ui" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"ur" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"uA" = (
+/obj/machinery/network/mainframe{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"uB" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8;
+ level = 2
+ },
+/obj/effect/floor_decal/corner/b_green/three_quarters,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"uG" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera/network/command{
+ dir = 8;
+ initial_access = null
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"uH" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"uK" = (
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/obj/effect/floor_decal/carpet/green/corners,
+/obj/effect/floor_decal/stoneborder{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"uN" = (
+/obj/machinery/door/airlock/glass/science,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"uR" = (
+/obj/machinery/airlock_sensor{
+ id_tag = "science_sensor";
+ pixel_y = 10;
+ pixel_x = -20;
+ dir = 4
+ },
+/obj/machinery/embedded_controller/radio/airlock/docking_port{
+ tag_airpump = "science_vent";
+ tag_chamber_sensor = "science_sensor";
+ tag_exterior_door = "science_airlock_exterior";
+ tag_interior_door = "science_airlock_interior";
+ id_tag = "ministation_science_dock";
+ dir = 4;
+ pixel_y = -3;
+ pixel_x = -21
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"uS" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"uV" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"uX" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/reinforced,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"uZ" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"vc" = (
+/obj/item/stool/padded,
+/obj/abstract/landmark/start{
+ name = "Scientist"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"vl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/blast/regular/open{
+ id_tag = "repblast";
+ name = "rep blast door"
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"vm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"vo" = (
+/obj/machinery/door/blast/regular{
+ dir = 4;
+ id_tag = "anomvent";
+ name = "Emergency Vent"
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"vq" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"vs" = (
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"vJ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"wa" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"wd" = (
+/obj/effect/floor_decal/corner/red/full,
+/obj/machinery/computer/station_alert/all,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"we" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/camera/network/hallway{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"wq" = (
+/obj/item/stool/padded,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"wJ" = (
+/obj/structure/bed,
+/obj/item/bedsheet/rd,
+/turf/simulated/floor/carpet/magenta,
+/area/ministation/science)
+"wM" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ health = 1e+007
+ },
+/obj/machinery/vending/cola{
+ dir = 1
+ },
+/turf/simulated/floor/lino,
+/area/ministation/hall/s3)
+"wY" = (
+/obj/structure/table/woodentable/ebony,
+/obj/item/pen/fancy,
+/obj/item/storage/fancy/crayons,
+/obj/effect/floor_decal/stoneborder{
+ dir = 6
+ },
+/obj/item/storage/candle_box,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"xc" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/turf/simulated/open,
+/area/ministation/maint/l3ne)
+"xg" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/computer/modular/preset/cardslot/command,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"xt" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"xH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"xN" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"ya" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/closet/secure_closet/freezer/fridge,
+/obj/item/chems/drinks/bottle/cola,
+/obj/item/chems/drinks/bottle/cola,
+/obj/item/chems/drinks/bottle/cola,
+/obj/item/chems/drinks/bottle/cola,
+/obj/item/chems/food/sliceable/chocolatecake,
+/obj/item/chems/food/sliceable/pizza/vegetablepizza,
+/obj/item/chems/food/sliceable/pizza/meatpizza,
+/obj/item/chems/food/sliceable/pizza/margherita,
+/obj/item/chems/food/sliceable/pizza/mushroompizza,
+/obj/item/chems/drinks/cans/waterbottle,
+/obj/item/chems/drinks/cans/waterbottle,
+/obj/item/chems/drinks/cans/waterbottle,
+/obj/item/chems/drinks/cans/waterbottle,
+/obj/item/chems/drinks/cans/waterbottle,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"yc" = (
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"yd" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"yf" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"yh" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"yj" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/camera/autoname{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"ym" = (
+/turf/simulated/floor/tiled,
+/area/ministation/bridge/vault)
+"yu" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"yz" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"yA" = (
+/obj/machinery/door/airlock/civilian,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/library)
+"yH" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"yP" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"yR" = (
+/obj/machinery/atmospherics/unary/engine{
+ dir = 4
+ },
+/turf/simulated/floor/airless,
+/area/ministation/shuttle/outgoing)
+"yS" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/turf/space,
+/area/space)
+"zd" = (
+/obj/machinery/fabricator/industrial{
+ initial_network_id = "molluscnet"
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"zl" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/hatch,
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"zs" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning/corner{
+ icon_state = "warningcorner"
+ },
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/structure/sign/directions/bridge{
+ dir = 1;
+ pixel_y = 42;
+ pixel_x = -28
+ },
+/obj/machinery/camera/network/hallway{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"zt" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"zw" = (
+/obj/machinery/light/small,
+/obj/structure/bed/chair/armchair/black,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"zy" = (
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"zC" = (
+/turf/simulated/floor/carpet/magenta,
+/area/ministation/science)
+"zQ" = (
+/obj/structure/closet/secure_closet{
+ closet_appearance = /decl/closet_appearance/secure_closet/rd;
+ req_access = list("ACCESS_RESEARCH");
+ name = "Science locker"
+ },
+/obj/machinery/light,
+/obj/item/storage/med_pouch/trauma,
+/obj/item/stack/tape_roll/duct_tape,
+/obj/item/twohanded/spear/diamond,
+/obj/item/shield/buckler,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"zT" = (
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Aa" = (
+/obj/machinery/camera/network/command{
+ dir = 4;
+ initial_access = null
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"Ab" = (
+/obj/machinery/network/message_server{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"Af" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"Aj" = (
+/obj/effect/floor_decal/carpet/green{
+ dir = 8
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"Al" = (
+/obj/machinery/button/blast_door{
+ id_tag = "scishut";
+ name = "Science Shutter Button";
+ pixel_x = 5;
+ pixel_y = -6;
+ directional_offset = null
+ },
+/obj/item/radio/intercom{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = 1;
+ pixel_y = 9
+ },
+/obj/item/pen,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Am" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Ar" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"As" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Ax" = (
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"AE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"AH" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/wall,
+/area/ministation/hall/n3)
+"AL" = (
+/obj/machinery/network/telecomms_hub{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"AQ" = (
+/obj/effect/floor_decal/carpet/green{
+ dir = 4
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"AS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/techfloor/orange,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"AU" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/shutters{
+ name = "science shutters";
+ id_tag = "scishut"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"AV" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "_West APC";
+ pixel_x = -25
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"AW" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/smes/buildable/max_cap_in_out,
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"AX" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/company_rep)
+"AY" = (
+/obj/machinery/computer/cryopod/robot{
+ pixel_y = 29
+ },
+/obj/abstract/landmark/start{
+ name = "Robot"
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"AZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Be" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Bf" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Bh" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Bk" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Bn" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Bp" = (
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"Br" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/bluegrid{
+ name = "Mainframe Base";
+ temperature = 263
+ },
+/area/ministation/telecomms)
+"Bs" = (
+/obj/effect/wallframe_spawn/reinforced,
+/turf/simulated/floor/plating,
+/area/ministation/telecomms)
+"Bt" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Bu" = (
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/obj/machinery/computer/station_alert/all,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Bv" = (
+/obj/structure/table,
+/obj/item/folder/blue,
+/obj/item/pen/blue,
+/obj/item/paper/monitorkey,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Bw" = (
+/obj/machinery/computer/message_monitor,
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Bx" = (
+/obj/structure/table,
+/obj/item/clothing/suit/storage/toggle/wintercoat,
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = 20
+ },
+/obj/item/radio,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"By" = (
+/obj/structure/table,
+/obj/item/flashlight/lamp,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"BC" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/structure/sign/warning/server_room{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"BD" = (
+/obj/structure/table,
+/obj/item/paper_bin,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"BE" = (
+/obj/structure/bed/chair/padded/blue{
+ dir = 1
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"BG" = (
+/obj/structure/table,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 29;
+ dir = 8
+ },
+/obj/item/disk/nuclear,
+/obj/machinery/recharger,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"BP" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"BQ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"BR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"BS" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"BV" = (
+/obj/effect/floor_decal/carpet/green,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"BZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/door/airlock/glass/command{
+ autoset_access = 0;
+ name = "Telecommunications glass airlock";
+ req_access = list("ACCESS_TELECOMS")
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Cd" = (
+/turf/simulated/wall,
+/area/ministation/maint/l3central)
+"Cg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Cj" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Ck" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Cl" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/obj/structure/closet/emcloset,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/camera/network/command{
+ initial_access = null
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Co" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Cw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/storage/box/monkeycubes,
+/obj/item/stack/material/puck/mapped/uranium/ten,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Cy" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"CA" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"CB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/hologram/holopad/longrange,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"CC" = (
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"CD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/corner/black{
+ dir = 8
+ },
+/obj/structure/sign/warning/server_room{
+ pixel_x = -32;
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"CE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"CL" = (
+/obj/machinery/fabricator/robotics{
+ initial_network_id = "molluscnet"
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"CM" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 6
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"CN" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"CR" = (
+/obj/machinery/door/window{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"CT" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"CU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/airlock/highsecurity{
+ name = "Telecommunications"
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor,
+/area/ministation/telecomms)
+"CV" = (
+/obj/effect/floor_decal/corner/black{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"CW" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"CY" = (
+/obj/machinery/door/airlock/glass{
+ autoset_access = 0;
+ name = "Court Room Airlock"
+ },
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"Da" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/flora/grass/both,
+/turf/exterior/grass,
+/area/ministation/hall/n3)
+"Dc" = (
+/obj/item/radio/intercom{
+ pixel_y = 20
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"De" = (
+/obj/structure/table,
+/obj/item/multitool,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Df" = (
+/obj/structure/table,
+/obj/item/radio,
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = -30;
+ dir = 1
+ },
+/obj/item/chems/spray/extinguisher,
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Dg" = (
+/obj/machinery/alarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/structure/filing_cabinet/chestdrawer,
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"Dh" = (
+/obj/effect/floor_decal/corner/black{
+ dir = 1
+ },
+/obj/structure/sign/department/telecomms{
+ dir = 4;
+ pixel_x = -32
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Di" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Dk" = (
+/obj/machinery/camera/network/hallway{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Do" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/obj/machinery/camera/autoname{
+ dir = 4
+ },
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"Dp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/junction/mirrored,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Dt" = (
+/turf/simulated/wall,
+/area/ministation/maint/l3sw)
+"Du" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "pqm_airlock_exterior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "pqm_airlock";
+ name = "exterior access button";
+ pixel_x = -10;
+ pixel_y = 20;
+ command = "cycle_exterior"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Dv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Dw" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Dx" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light{
+ icon_state = "tube1"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Dy" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Dz" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ name = "bridge blast door";
+ id_tag = "bridgeblast"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/bridge)
+"DB" = (
+/obj/effect/floor_decal/corner/green/full,
+/obj/machinery/smartfridge/drying_rack,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"DC" = (
+/obj/machinery/light/small,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"DD" = (
+/obj/structure/table/woodentable,
+/obj/item/stack/material/panel/mapped/plastic/ten,
+/obj/item/stack/material/plank/mapped/wood/ten,
+/obj/item/stack/material/plank/mapped/wood/ten,
+/obj/item/stack/material/panel/mapped/plastic/ten,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"DF" = (
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"DQ" = (
+/obj/structure/table/woodentable,
+/obj/item/storage/pill_bottle/dice,
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"DX" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"Ec" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Ee" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"Ef" = (
+/obj/structure/table/woodentable,
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"Eg" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Eu" = (
+/obj/structure/table,
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/simulated/floor/carpet/magenta,
+/area/ministation/science)
+"Ex" = (
+/obj/structure/bed/chair/armchair/black{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"EB" = (
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/door/airlock/glass/science{
+ name = "Science Department";
+ req_access = list("ACCESS_ROBOTICS");
+ autoset_access = 0
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/science)
+"EP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ET" = (
+/obj/effect/decal/cleanable/blood/oil,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"EW" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/techfloor/orange,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Fe" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4;
+ icon_state = "warningcorner"
+ },
+/obj/structure/sign/directions/science{
+ pixel_y = -21;
+ pixel_x = -28
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Fy" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/sign/warning/airlock{
+ pixel_y = 26;
+ pixel_x = -31
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"FC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/machinery/vending/coffee,
+/turf/simulated/floor/lino,
+/area/ministation/hall/s3)
+"FM" = (
+/obj/machinery/port_gen/pacman/super,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"Gh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Gi" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Go" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"Gu" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Gy" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"GD" = (
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"GF" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera/network/research{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"GJ" = (
+/obj/machinery/light,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"GK" = (
+/obj/machinery/computer/ship/sensors{
+ dir = 8;
+ id_tag = "shuttlesensors"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"GL" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/blood/oil,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"GT" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/court)
+"Hj" = (
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Hl" = (
+/obj/structure/table/woodentable/ebony,
+/obj/item/paper_bin,
+/obj/effect/floor_decal/stoneborder{
+ dir = 6
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"Ho" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Hw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"HB" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"HK" = (
+/obj/effect/floor_decal/carpet/green{
+ dir = 4
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"HX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/handrail{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"Ia" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Ib" = (
+/obj/machinery/door/blast/regular/open{
+ id_tag = "repblast";
+ name = "rep blast door"
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"Id" = (
+/obj/machinery/door/airlock,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"Ie" = (
+/obj/machinery/light/small,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Ik" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/item/radio/intercom{
+ dir = 8;
+ pixel_x = 22
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"Il" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/company_rep)
+"Io" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/bed/chair/wood/maple{
+ dir = 8
+ },
+/obj/abstract/landmark/start{
+ name = "Company Representative"
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"Ir" = (
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Ix" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"IA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4;
+ icon_state = "warning"
+ },
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"IB" = (
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"IC" = (
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"IP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"IS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/lino,
+/area/ministation/telecomms)
+"IT" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"IV" = (
+/obj/machinery/door/airlock/glass/command,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"Je" = (
+/obj/machinery/camera/network/research{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Jk" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/alarm{
+ pixel_y = 22
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Jo" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Jx" = (
+/obj/structure/closet/secure_closet/research_director,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Jz" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"JJ" = (
+/obj/machinery/door/airlock/glass,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"JK" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/obj/structure/cable{
+ icon_state = "32-4"
+ },
+/obj/machinery/atmospherics/pipe/zpipe/down/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/down{
+ dir = 4
+ },
+/turf/simulated/open,
+/area/ministation/maint/l3central)
+"Kg" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Kr" = (
+/obj/effect/floor_decal/corner/b_green/half{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"KQ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"KU" = (
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"Le" = (
+/obj/structure/table/woodentable,
+/obj/item/chems/drinks/cans/waterbottle,
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"Lq" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"LA" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"LC" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"LL" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"LM" = (
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"LN" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8;
+ icon_state = "warningcorner"
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"LP" = (
+/obj/machinery/keycard_auth{
+ pixel_y = -20;
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/obj/machinery/camera/network/command{
+ dir = 1;
+ initial_access = null
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"LS" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"LT" = (
+/obj/structure/bed/chair/armchair/black{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"LW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Mb" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"Mc" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Md" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Me" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ name = "bridge blast door";
+ id_tag = "bridgeblast"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/bridge)
+"Mi" = (
+/obj/machinery/portable_atmospherics/hydroponics,
+/obj/effect/floor_decal/corner/green/full,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Mk" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/blood/oil,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Mn" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Mo" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ name = "bridge blast door";
+ id_tag = "bridgeblast"
+ },
+/turf/simulated/floor/airless,
+/area/ministation/bridge)
+"Ms" = (
+/obj/item/radio/intercom{
+ dir = 8;
+ pixel_x = 22
+ },
+/obj/structure/table/woodentable_reinforced/walnut,
+/obj/item/folder,
+/turf/simulated/floor/carpet/red,
+/area/ministation/court)
+"My" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Mz" = (
+/obj/machinery/atmospherics/unary/tank/carbon_dioxide{
+ start_pressure = 10000
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"MA" = (
+/obj/structure/closet/secure_closet/courtroom,
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"MB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"MF" = (
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"MI" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"MJ" = (
+/obj/structure/bed/chair/armchair/black,
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"MP" = (
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"MU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/camera/network/hallway{
+ dir = 4
+ },
+/obj/effect/floor_decal/techfloor/orange,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"MV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"MZ" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Na" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"Nb" = (
+/obj/effect/wallframe_spawn/reinforced/titanium,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"Nc" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ pixel_y = 32
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Ng" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 10
+ },
+/turf/simulated/wall/titanium,
+/area/ministation/shuttle/outgoing)
+"Nh" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"Nk" = (
+/obj/machinery/photocopier,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Nm" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
+ dir = 4
+ },
+/turf/simulated/wall/titanium,
+/area/ministation/shuttle/outgoing)
+"Np" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Nr" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/airlock/double/glass/science{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"Nw" = (
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"Ny" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29;
+ dir = 1
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"ND" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"NF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"NH" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"NJ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/flora/pottedplant/aquatic,
+/turf/simulated/floor/lino,
+/area/ministation/hall/s3)
+"NM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"NN" = (
+/obj/structure/table,
+/obj/machinery/alarm{
+ pixel_y = -2;
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/machinery/light,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"NO" = (
+/obj/abstract/level_data_spawner/main_level,
+/turf/space,
+/area/space)
+"NR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"NW" = (
+/obj/effect/decal/cleanable/dirt{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden,
+/obj/machinery/light/small,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Oa" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Oc" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"Od" = (
+/obj/structure/bed/chair/wood/walnut{
+ dir = 4
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Ok" = (
+/obj/structure/shuttle/engine/heater{
+ dir = 8
+ },
+/obj/effect/paint/red,
+/turf/simulated/wall/titanium,
+/area/ministation/shuttle/outgoing)
+"Om" = (
+/obj/structure/bed/chair/armchair/black{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"Oo" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "conpipe-c"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Ou" = (
+/obj/effect/floor_decal/corner/b_green/three_quarters{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Ov" = (
+/obj/structure/table/woodentable/walnut,
+/obj/machinery/light,
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Oy" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 4;
+ name = "airlock pump"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"OC" = (
+/obj/structure/sign/warning/airlock{
+ pixel_y = -32;
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"OD" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/railing/mapped,
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"OG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"OK" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "science_shuttle_interior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "science_shuttle";
+ name = "interior access button";
+ pixel_x = 20;
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"OL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"OM" = (
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/obj/effect/floor_decal/carpet/green{
+ dir = 4
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"ON" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"OP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"OQ" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"OU" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"OW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Pa" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Pe" = (
+/obj/structure/catwalk,
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"Pg" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Pk" = (
+/obj/structure/table/woodentable/walnut,
+/obj/item/folder/blue,
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Pn" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"Po" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment/bent{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Pw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/techfloor/orange,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Px" = (
+/obj/structure/table/woodentable/walnut,
+/obj/item/folder/red,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Pz" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"PB" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/item/stool/padded,
+/obj/abstract/landmark/start{
+ name = "Librarian"
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"PE" = (
+/obj/structure/bed/chair/armchair/black{
+ dir = 8
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"PL" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "science_shuttle_pump";
+ dir = 4
+ },
+/obj/effect/shuttle_landmark/science_dock,
+/obj/machinery/embedded_controller/radio/airlock/docking_port{
+ cycle_to_external_air = 1;
+ id_tag = "science_shuttle";
+ tag_airpump = "science_shuttle_pump";
+ tag_chamber_sensor = "science_shuttle_sensor";
+ tag_exterior_door = "science_shuttle_exterior";
+ tag_interior_door = "science_shuttle_interior";
+ dir = 4;
+ pixel_x = -22
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"PO" = (
+/turf/simulated/wall,
+/area/ministation/maint/l3nw)
+"PP" = (
+/obj/structure/closet,
+/obj/random/maintenance,
+/obj/item/flashlight,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"PR" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"PT" = (
+/obj/structure/table/woodentable_reinforced/walnut,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/red,
+/area/ministation/court)
+"PV" = (
+/obj/structure/table,
+/obj/machinery/alarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4;
+ level = 2
+ },
+/obj/item/modular_computer/tablet/preset/custom_loadout/cheap,
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"PW" = (
+/obj/structure/closet/secure_closet/xenoarchaeologist,
+/obj/item/ano_scanner,
+/obj/item/stock_parts/circuitboard/suspension_gen,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"PX" = (
+/obj/abstract/landmark/start{
+ name = "Research Director"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/bed/chair/office/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/light_switch{
+ pixel_y = 25;
+ pixel_x = -23
+ },
+/turf/simulated/floor/carpet/magenta,
+/area/ministation/science)
+"Qf" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Qh" = (
+/obj/structure/bed/chair/wood/walnut{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Qk" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"Qq" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Qs" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"Qt" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/disposalpipe/junction/mirrored,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Qu" = (
+/obj/machinery/light{
+ dir = 8;
+ icon_state = "tube1"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Qx" = (
+/obj/structure/table,
+/obj/item/radio/intercom{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/storage/firstaid/stab,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"QD" = (
+/obj/structure/table/woodentable,
+/obj/item/book/printable_red,
+/obj/item/pen,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"QG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"QK" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/abstract/landmark/latejoin/cyborg,
+/turf/simulated/floor/tiled/steel_grid,
+/area/ministation/science)
+"QR" = (
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"QT" = (
+/obj/machinery/computer/design_console{
+ dir = 8;
+ initial_network_id = "molluscnet"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ministation/science)
+"QW" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/structure/table/woodentable,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Re" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3nw)
+"Rf" = (
+/obj/machinery/door/airlock/civilian{
+ autoset_access = 0;
+ name = "Librarian's Chamber";
+ req_access = list("ACCESS_LIBRARY")
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/library)
+"Ri" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Rl" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Rp" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Rt" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Rv" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Rx" = (
+/turf/simulated/wall,
+/area/ministation/court)
+"RB" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"RE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/handrail{
+ dir = 1
+ },
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"RG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"RI" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"RO" = (
+/obj/effect/decal/cleanable/blood/oil,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"RQ" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"RR" = (
+/obj/effect/floor_decal/carpet/green{
+ dir = 8
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 8
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"RS" = (
+/obj/machinery/power/smes/buildable/max_cap_in_out{
+ RCon_tag = null;
+ capacity = 5e+009;
+ charge = 5e+009
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"RT" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"RV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"RY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Sa" = (
+/turf/simulated/wall,
+/area/ministation/library)
+"Sb" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Sc" = (
+/obj/machinery/door/airlock,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/company_rep)
+"Sf" = (
+/obj/structure/table/woodentable/walnut,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Sh" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced,
+/area/ministation/science)
+"Sk" = (
+/obj/machinery/light,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"Sm" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"So" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Sq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"SE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera/network/hallway{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"SG" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"SI" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"SP" = (
+/obj/item/stool/padded,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"SS" = (
+/obj/machinery/computer/ship/engines{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"ST" = (
+/obj/effect/floor_decal/corner/paleblue{
+ dir = 5
+ },
+/obj/effect/floor_decal/corner/white{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"SW" = (
+/obj/structure/closet/secure_closet/lawyer,
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"Tc" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Tk" = (
+/obj/structure/table/woodentable,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Tm" = (
+/obj/effect/floor_decal/carpet/green{
+ dir = 1
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 1
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"Tn" = (
+/obj/machinery/shipsensors{
+ id_tag = "shuttlesensors"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/airless,
+/area/ministation/shuttle/outgoing)
+"Tq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera/network/hallway{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Tr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/effect/floor_decal/corner/purple,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Tv" = (
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/obj/structure/table/woodentable/ebony,
+/obj/item/pen,
+/obj/item/pen/blue,
+/obj/item/pen/retractable,
+/obj/item/pen/retractable/green,
+/obj/item/pen/retractable/blue,
+/obj/item/pen/multi,
+/obj/effect/floor_decal/stoneborder/corner,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"Tz" = (
+/obj/machinery/portable_atmospherics/canister/air/airlock{
+ start_pressure = 730
+ },
+/obj/machinery/atmospherics/portables_connector,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"TE" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/obj/effect/overmap/visitable/ship/ministation,
+/obj/structure/bed/chair/padded/blue,
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"TF" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"TH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"TI" = (
+/obj/structure/table/woodentable,
+/obj/random/cash,
+/obj/item/chems/drinks/cans/waterbottle,
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"TP" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
+ },
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"TR" = (
+/obj/structure/window/basic{
+ dir = 1
+ },
+/obj/structure/curtain/open/bed{
+ icon_state = "closed";
+ opacity = 1
+ },
+/obj/machinery/door/blast/regular/open{
+ id_tag = "repblast";
+ name = "rep blast door"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/company_rep)
+"TS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"TZ" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"Ua" = (
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/structure/table,
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/obj/machinery/faxmachine/mapped,
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"Um" = (
+/obj/effect/floor_decal/carpet/green/corners,
+/obj/effect/floor_decal/stoneborder/corner{
+ dir = 8
+ },
+/obj/structure/reagent_dispensers/water_cooler{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"Uo" = (
+/obj/item/radio/intercom{
+ pixel_y = 20
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Up" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Uq" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Uw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"UB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/lino,
+/area/ministation/hall/s3)
+"UD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"UE" = (
+/obj/structure/closet/crate/uranium,
+/obj/item/wrench,
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"UG" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/bookcase/skill_books/random,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"UH" = (
+/obj/machinery/alarm{
+ pixel_y = 23
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"UI" = (
+/obj/effect/wallframe_spawn/no_grille,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/court)
+"UJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment/bent{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"UK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/portables_connector{
+ pixel_x = -3
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"UL" = (
+/obj/effect/decal/cleanable/filth,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"UQ" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3se)
+"UR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"Vb" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/open,
+/area/ministation/maint/l3se)
+"Vi" = (
+/obj/machinery/light_switch{
+ pixel_y = 25
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/table/woodentable,
+/obj/item/knife/kitchen,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/obj/item/mollusc/clam,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Vq" = (
+/obj/structure/bookcase/skill_books/random,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Vt" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Vv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/structure/bed/chair/comfy/captain{
+ dir = 8
+ },
+/obj/machinery/camera/autoname{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/red,
+/area/ministation/court)
+"Vw" = (
+/obj/structure/table/woodentable,
+/obj/item/deck/cards,
+/turf/simulated/floor/carpet/green,
+/area/ministation/library)
+"Vx" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"VB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/reinforced/titanium,
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"VI" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "science_vent";
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"VJ" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"VL" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"VW" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/status_display{
+ pixel_y = 30;
+ pixel_x = -33
+ },
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "_North APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/table/woodentable,
+/obj/machinery/fabricator/book,
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"VX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"VY" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "science_shuttle_exterior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "science_shuttle";
+ name = "exterior access button";
+ pixel_x = 20;
+ command = "cycle_exterior";
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"VZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Wg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/purple{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Wh" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/effect/wallframe_spawn/reinforced,
+/obj/machinery/door/blast/regular{
+ name = "bridge blast door";
+ id_tag = "bridgeblast"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/bridge)
+"Wr" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Ws" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1;
+ level = 2
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Wx" = (
+/obj/machinery/door/airlock/hatch/maintenance,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"WA" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"WJ" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/alarm{
+ pixel_y = 22
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"WK" = (
+/obj/machinery/artifact_analyser,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"WM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/obj/machinery/alarm{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"WO" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"WQ" = (
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/obj/effect/floor_decal/stoneborder{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"WT" = (
+/obj/structure/bed/padded,
+/obj/item/bedsheet/green,
+/obj/random_multi/single_item/captains_spare_id,
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 32
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"Xa" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Xb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8;
+ icon_state = "warning"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"Xe" = (
+/obj/structure/bed/chair/wood/walnut{
+ dir = 4
+ },
+/obj/machinery/light,
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Xi" = (
+/obj/machinery/newscaster{
+ pixel_x = 32;
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/carpet/red,
+/area/ministation/court)
+"Xl" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"XA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/railing/mapped,
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"XE" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8;
+ icon_state = "warningcorner"
+ },
+/turf/simulated/open,
+/area/ministation/hall/n3)
+"XI" = (
+/obj/effect/floor_decal/carpet/green/corners,
+/obj/effect/floor_decal/stoneborder/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"XJ" = (
+/obj/structure/closet,
+/obj/random/maintenance,
+/obj/random/suit,
+/obj/random/gloves,
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"XM" = (
+/obj/machinery/door/airlock,
+/obj/machinery/door/firedoor{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"XS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"XT" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Ye" = (
+/obj/effect/wallframe_spawn/reinforced/titanium,
+/obj/machinery/door/firedoor,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"Yi" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Yj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/button/blast_door{
+ id_tag = "repblast";
+ name = "Panic Lockdown";
+ pixel_y = -23;
+ pixel_x = -26;
+ dir = 1
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"Yl" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Ym" = (
+/obj/structure/window/reinforced,
+/obj/structure/flora/bush/grassybush,
+/turf/exterior/grass,
+/area/ministation/hall/n3)
+"Yv" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3central)
+"Yw" = (
+/obj/machinery/artifact_scanpad,
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Yy" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "science_airlock_interior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "ministation_science_dock";
+ name = "interior access button";
+ pixel_x = 20;
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/science)
+"YH" = (
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"YI" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"YL" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"YO" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 8;
+ id_tag = "science_shuttle_pump_out_internal"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/airlock_sensor{
+ id_tag = "science_shuttle_sensor";
+ pixel_x = -22;
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"YP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/computer/modular/preset/civilian{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"YQ" = (
+/obj/structure/closet/lawcloset,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/court)
+"YR" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ pixel_x = -27
+ },
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 22
+ },
+/turf/simulated/floor/plating,
+/area/ministation/shuttle/outgoing)
+"YS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"YX" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "science_shuttle_pump_out_external"
+ },
+/obj/structure/handrail{
+ dir = 8
+ },
+/turf/simulated/floor/airless,
+/area/ministation/shuttle/outgoing)
+"YZ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"Zd" = (
+/obj/machinery/button/blast_door{
+ id_tag = "anomvent";
+ name = "emergency vent control";
+ pixel_y = -32;
+ pixel_x = -5;
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/machinery/button/mass_driver{
+ pixel_y = -32;
+ pixel_x = 7;
+ id_tag = "artifactlauncher";
+ name = "LAUNCH";
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"Zg" = (
+/obj/effect/wallframe_spawn/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Zj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Zo" = (
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ dir = 0;
+ id_tag = "pqm_airlock";
+ pixel_y = 24;
+ tag_airpump = "pqm_vent";
+ tag_chamber_sensor = "pqm_sensor";
+ tag_exterior_door = "pqm_airlock_exterior";
+ tag_interior_door = "pqm_airlock_interior"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ dir = 4;
+ id_tag = "pqm_vent"
+ },
+/obj/machinery/airlock_sensor{
+ id_tag = "pqm_sensor";
+ pixel_y = 20
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3sw)
+"Zr" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l3ne)
+"Zt" = (
+/obj/structure/bed/chair/wood/walnut{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ pixel_y = 21
+ },
+/turf/simulated/floor/wood/yew,
+/area/ministation/court)
+"Zu" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/alarm{
+ pixel_y = 22
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"Zv" = (
+/turf/simulated/wall,
+/area/ministation/hall/s3)
+"ZB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/bridge)
+"ZH" = (
+/obj/effect/floor_decal/carpet/green,
+/turf/simulated/floor/wood/walnut,
+/area/ministation/library)
+"ZJ" = (
+/obj/machinery/door/firedoor,
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/n3)
+"ZK" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/magenta,
+/area/ministation/science)
+"ZP" = (
+/obj/effect/wallframe_spawn/no_grille,
+/turf/simulated/floor/plating,
+/area/ministation/court)
+"ZR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled,
+/area/ministation/hall/s3)
+"ZS" = (
+/obj/structure/bed/chair/shuttle/blue{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled,
+/area/ministation/shuttle/outgoing)
+"ZT" = (
+/obj/machinery/camera/network/research{
+ dir = 4
+ },
+/obj/item/radio/intercom{
+ dir = 4;
+ pixel_x = -22
+ },
+/turf/simulated/floor/tiled/white,
+/area/ministation/science)
+"ZV" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/item/paper_bin,
+/obj/item/pen,
+/turf/simulated/floor/carpet/green,
+/area/ministation/company_rep)
+"ZW" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/wood/mahogany,
+/area/ministation/library)
+"ZZ" = (
+/obj/structure/table/woodentable_reinforced/walnut,
+/obj/item/bell,
+/turf/simulated/floor/carpet/red,
+/area/ministation/court)
+
+(1,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+NO
+aa
+aa
+aa
+aa
+"}
+(6,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(7,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(8,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(9,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(10,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(11,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(12,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(13,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(14,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(15,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(16,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(17,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(40,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(41,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
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(42,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(43,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(44,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(45,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(46,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(47,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(49,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(50,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(51,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(52,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(53,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
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(54,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
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(55,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(56,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(57,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(58,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(59,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(60,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(61,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(62,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(63,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(64,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
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(65,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
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(66,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(67,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(68,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(69,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(70,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
+af
+af
+aa
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(71,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(72,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(73,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(74,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(75,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(76,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(77,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(78,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
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(79,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
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(80,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(81,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(82,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(83,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(84,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(85,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(86,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(87,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(88,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+yS
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(89,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(90,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(91,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(92,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
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(93,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(94,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
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(95,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(96,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(97,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(98,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(99,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(100,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(101,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(102,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(103,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(104,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(105,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(106,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+cn
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(107,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Dt
+Du
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(108,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+Dt
+Zo
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(109,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
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Dt
+jm
+Dt
+Dt
+Dt
+gU
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(110,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Dt
+bu
+Dt
+UK
+XJ
+NW
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(111,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+Dt
+Dt
+Dt
+Dt
+Dt
+Dt
+Dt
+Dt
+Zg
+Dt
+PP
+HB
+NF
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(112,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Cd
+Cd
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+Dt
+Gh
+vm
+Zj
+zT
+zT
+mY
+zT
+RO
+CN
+KQ
+eP
+Dv
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(113,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Cd
+JK
+Cd
+cw
+Cd
+Cd
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+Dt
+Dt
+Dt
+Dt
+oR
+bl
+bl
+bl
+bl
+bl
+bl
+bl
+bl
+bl
+bl
+Am
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(114,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
+PO
+PO
+PO
+PO
+PO
+PO
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+Cd
+Ie
+Cd
+cw
+Cd
+sQ
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+Dt
+pb
+rk
+Wx
+sh
+bl
+nA
+of
+Aa
+Ax
+cP
+Ax
+AV
+Aa
+bl
+Am
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(115,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ah
+ah
+ah
+ah
+ah
+aa
+aa
+PO
+Re
+mW
+mW
+dZ
+PO
+PO
+PO
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+Cd
+lp
+Cd
+cw
+Cd
+DC
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aA
+cw
+cw
+cw
+cw
+cw
+Dt
+Dt
+Dt
+Dt
+sh
+bl
+sr
+sr
+sr
+sr
+sr
+Ax
+AW
+Br
+bl
+Ec
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(116,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+pa
+ah
+aR
+br
+bG
+ah
+aa
+aa
+PO
+Il
+Af
+mW
+qY
+ur
+hY
+PO
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+Cd
+Cd
+Gu
+Cd
+Cd
+Cd
+RB
+Cd
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+Dt
+sh
+bl
+nA
+Ax
+Ab
+AL
+sr
+Ax
+Bp
+Ax
+bl
+Am
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(117,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
+Mo
+aT
+bs
+bH
+ah
+co
+co
+co
+co
+co
+Ee
+av
+PO
+PO
+PO
+cw
+cw
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+gF
+Cd
+Oo
+Lq
+xN
+xN
+xN
+Fy
+ls
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+Dt
+sh
+bl
+Bs
+Bs
+Bs
+Bs
+sr
+tc
+tU
+sr
+bl
+GL
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(118,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
+ah
+aW
+bt
+bI
+ah
+co
+Ua
+ZV
+PV
+co
+yf
+av
+PO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Cd
+lp
+sD
+sD
+Gi
+sD
+sD
+Np
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+Dt
+Dt
+sh
+bl
+Bv
+BD
+BP
+og
+sr
+td
+tV
+uA
+bl
+Am
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(119,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ah
+ah
+aX
+ah
+ah
+ah
+co
+Dc
+Io
+YP
+co
+co
+av
+PO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Cd
+lp
+sD
+Pe
+cg
+Do
+sD
+Np
+Cd
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+Dt
+nL
+sh
+bl
+Bu
+BE
+BQ
+Bs
+Bs
+oF
+Bs
+Bs
+bl
+Yi
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(120,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
+ah
+ah
+aF
+NH
+bv
+bK
+qx
+TR
+IC
+cD
+Yj
+Ib
+AX
+av
+PO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Cd
+lp
+sD
+ug
+XA
+GD
+sD
+Np
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+cw
+aa
+aa
+aa
+aa
+aa
+Dt
+fi
+sh
+bl
+xg
+Bt
+IS
+Bs
+Cj
+CA
+By
+De
+bl
+Am
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(121,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+tQ
+am
+aI
+ba
+bw
+TH
+aJ
+TR
+WT
+kq
+sM
+co
+co
+av
+PO
+PO
+PO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+sD
+sD
+Cd
+jy
+AH
+ug
+OD
+GD
+sD
+dE
+Yv
+Yv
+Yv
+Yv
+Yv
+Rp
+Bh
+ls
+Cd
+aa
+aa
+aa
+aa
+aa
+aa
+Dt
+Dt
+sh
+bl
+Bw
+BE
+BR
+BZ
+Ck
+CB
+BP
+Df
+bl
+Am
+Dt
+Dt
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(122,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Dz
+ao
+aJ
+aY
+aJ
+MV
+aJ
+co
+co
+vl
+co
+co
+fU
+av
+ur
+qi
+PO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+sD
+sD
+sD
+sD
+pz
+Eg
+fl
+sD
+ug
+XE
+TP
+sD
+Be
+LS
+LS
+LS
+LS
+LS
+nI
+Zv
+nP
+Zv
+Zv
+aa
+aa
+aa
+aa
+aa
+aa
+Dt
+vJ
+bl
+Bx
+BG
+oG
+Bs
+Cl
+CC
+CT
+Dg
+bl
+fN
+Wx
+pb
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(123,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
+Dz
+as
+aK
+aY
+aJ
+MV
+bV
+aD
+aD
+Sc
+aD
+aD
+sD
+eM
+sD
+sD
+sD
+sD
+sD
+sD
+sD
+tx
+tx
+tx
+sD
+sD
+iu
+iZ
+sD
+sD
+Gu
+sD
+sD
+sD
+Cy
+sD
+sD
+sD
+sD
+sD
+sD
+sD
+Zv
+Zv
+Zv
+Mn
+Hj
+Zv
+kg
+kg
+kg
+Zv
+Zv
+Zv
+Zv
+Bf
+bl
+bl
+bl
+bl
+bl
+bl
+bl
+CU
+bl
+bl
+Dw
+Dt
+Dt
+Dt
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(124,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
+Dz
+wd
+mk
+aY
+aJ
+UR
+pf
+IV
+Na
+jL
+Oc
+ss
+bW
+cr
+Pw
+xH
+fz
+MU
+RY
+OW
+Md
+OW
+So
+gR
+gR
+Md
+So
+OW
+OW
+OW
+OU
+OW
+OW
+Qu
+OW
+uV
+cp
+zs
+IA
+hS
+IA
+Fe
+JJ
+Mc
+we
+Kg
+uh
+FC
+UB
+NJ
+UB
+wM
+Pa
+uh
+uh
+RQ
+Bn
+uh
+RI
+uh
+ZR
+uh
+CD
+CV
+Dh
+Dk
+Dx
+Zv
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(125,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
+Dz
+tA
+aO
+bb
+bx
+bM
+Qs
+yd
+ZB
+bM
+rh
+uX
+sY
+sB
+pP
+MZ
+kh
+pP
+MZ
+sC
+sC
+sC
+sC
+kh
+kh
+sC
+PR
+sC
+sC
+sC
+ll
+sC
+sC
+sC
+sC
+ZJ
+sC
+hx
+GD
+GD
+GD
+de
+Gy
+tt
+tt
+Mn
+tt
+Ou
+Kr
+Kr
+Kr
+uB
+tt
+tt
+oN
+Mn
+tt
+tt
+Sq
+tt
+tt
+tt
+tt
+Xl
+tt
+tt
+Mn
+kg
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(126,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
+Wh
+ax
+TE
+bc
+bz
+bN
+bX
+ch
+cs
+fk
+cE
+cU
+Ym
+Sb
+EW
+Ar
+rx
+EW
+zt
+LL
+fA
+es
+gx
+gS
+rx
+LL
+LL
+LL
+LL
+LL
+eO
+sC
+PR
+sC
+sC
+ZJ
+sC
+uZ
+GD
+tv
+GD
+BS
+Gy
+oN
+tt
+uS
+Pg
+Pg
+Pg
+Pg
+Pg
+Bk
+Pg
+Pg
+Pg
+Rv
+Pg
+Pg
+YZ
+Pg
+Pg
+Rt
+Pg
+CW
+Rt
+Pg
+Dy
+kg
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(127,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Dz
+ay
+ST
+be
+bA
+bM
+Qs
+yd
+OQ
+bM
+di
+Pz
+Da
+sB
+pP
+MZ
+kh
+pP
+MZ
+sC
+sC
+sC
+gQ
+sC
+kh
+sC
+PR
+sC
+sC
+sC
+ts
+PR
+sC
+sC
+sC
+ZJ
+sC
+wa
+GD
+GD
+GD
+vq
+Gy
+tt
+tt
+tt
+tt
+tt
+tt
+tt
+tt
+aV
+tt
+tt
+tt
+tt
+oN
+oN
+Sq
+tt
+tt
+oN
+tt
+fZ
+tt
+tt
+Mn
+kg
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(128,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Dz
+az
+pM
+aJ
+aY
+bO
+bY
+ci
+ct
+uG
+cF
+dr
+WO
+Jo
+AS
+VL
+gT
+AS
+VL
+Wr
+Dp
+VZ
+gy
+VZ
+Qt
+hV
+Tq
+VZ
+cJ
+VZ
+tY
+VZ
+VZ
+VZ
+VZ
+Ia
+VZ
+LN
+Xb
+rf
+Xb
+lb
+eZ
+MB
+fJ
+iN
+iN
+iN
+QG
+fJ
+zy
+Co
+fJ
+fJ
+rK
+SE
+fJ
+tB
+CM
+SG
+ui
+ui
+CE
+SI
+tt
+oN
+Dx
+Zv
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(129,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
+Dz
+oS
+aO
+aJ
+aY
+bM
+bZ
+aD
+ah
+ah
+ah
+ah
+LW
+UI
+UI
+UI
+CY
+UI
+ZP
+Rx
+Id
+Sa
+da
+da
+sl
+da
+Sa
+Sa
+da
+da
+Sa
+Sa
+Sa
+Sa
+sD
+sD
+sD
+sD
+tx
+tx
+tx
+sD
+ae
+ae
+ae
+lG
+lG
+lG
+ae
+ae
+ae
+ae
+ae
+ae
+if
+AU
+ae
+ae
+EB
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+RT
+oc
+oc
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(130,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
+Dz
+aB
+aJ
+aJ
+aY
+bM
+vs
+aD
+cu
+Mk
+cV
+yP
+dS
+Rx
+Qh
+Od
+ND
+Od
+Xe
+Rx
+rW
+Sa
+QW
+SP
+YS
+LT
+gV
+Vq
+LM
+LM
+Vq
+yj
+Vq
+Sa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+gF
+ae
+dw
+dt
+ar
+ar
+ar
+ae
+tu
+zd
+hf
+iK
+Al
+gg
+MF
+ae
+kn
+kQ
+lv
+ae
+mA
+nr
+MF
+Mi
+ae
+iG
+yh
+ty
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(131,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
+Me
+aC
+aP
+bf
+bB
+bP
+ca
+aD
+he
+VJ
+UL
+VJ
+dT
+Rx
+Zt
+Od
+ND
+Od
+Od
+Rx
+Sk
+Sa
+wq
+Uw
+Up
+Uw
+Uw
+Ws
+LM
+LM
+Vq
+LM
+Vq
+Sa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+gJ
+fK
+ar
+eb
+ar
+ae
+ee
+iL
+iL
+iL
+ig
+db
+dQ
+ae
+ko
+RV
+lw
+ae
+mB
+ns
+As
+oB
+ae
+iG
+oc
+oc
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(132,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
+ah
+ah
+aQ
+eF
+Mb
+LP
+ah
+aD
+nl
+Qq
+cW
+cW
+Zr
+tZ
+Ir
+Ir
+UD
+Ir
+Ny
+Rx
+rW
+Sa
+VW
+Tk
+Ri
+LM
+Vq
+Vq
+Nk
+LM
+LM
+LM
+zw
+Sa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+AY
+fK
+ar
+ar
+ar
+ae
+QT
+iL
+iL
+iL
+ig
+db
+jn
+ae
+kp
+kR
+lx
+ae
+mC
+db
+As
+oB
+ae
+Nh
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(133,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
+jN
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aD
+bg
+bg
+bD
+bg
+bg
+ad
+nl
+xc
+cX
+VJ
+ET
+Rx
+Sf
+Pk
+TF
+Px
+Ov
+Rx
+pi
+Sa
+PB
+QD
+Uq
+AE
+RG
+Jz
+LM
+LM
+Vq
+LM
+Vq
+Sa
+aa
+aa
+cw
+cw
+cw
+ae
+kW
+kW
+ae
+dv
+Ik
+QK
+hg
+eD
+ae
+gd
+iL
+iL
+iL
+ig
+db
+jo
+ae
+ae
+kP
+ae
+ae
+mD
+db
+As
+oB
+ae
+iG
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(134,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
+bg
+bi
+bE
+bT
+bg
+aa
+nl
+nl
+nl
+nl
+LW
+Rx
+QR
+Ir
+ND
+Ir
+Ir
+Rx
+rW
+Sa
+Jk
+ZW
+yc
+MP
+UG
+Vq
+LM
+fV
+Vq
+PE
+Vq
+Sa
+Sa
+Sa
+cw
+cw
+ae
+ae
+kG
+Jx
+ae
+ae
+ae
+ec
+ae
+ae
+ae
+iL
+CL
+iI
+hh
+ih
+db
+jp
+ae
+kr
+kT
+lz
+ae
+mG
+db
+As
+oB
+ae
+iG
+oc
+oc
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(135,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
+bg
+bn
+bF
+bq
+bg
+aa
+aa
+aa
+aa
+nl
+NR
+Rx
+IB
+ZZ
+PT
+dn
+Ir
+Rx
+rW
+Sa
+Rf
+Sa
+Sa
+Sa
+Tv
+WQ
+uK
+AQ
+OM
+OM
+OM
+HK
+Um
+hv
+cw
+cw
+kW
+wJ
+PX
+UJ
+mN
+Ix
+hj
+Sm
+te
+GF
+iJ
+nz
+hG
+hG
+hG
+Cg
+LC
+jq
+ae
+ks
+kU
+lA
+ae
+mF
+db
+As
+DB
+ae
+iG
+ap
+rI
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(136,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
+bg
+bp
+bR
+bq
+bg
+ad
+aa
+nl
+nl
+nl
+Tc
+Rx
+Nc
+Ms
+Vv
+Xi
+YI
+XM
+eV
+Sa
+Zu
+oQ
+DD
+Sa
+Hl
+kk
+ZH
+KU
+Ex
+Ex
+Ex
+KU
+Tm
+hv
+cw
+cw
+kW
+zC
+ZK
+rV
+cL
+bo
+hH
+hH
+hH
+XT
+gH
+Rl
+gG
+hH
+hH
+ik
+iO
+jr
+jP
+kt
+kV
+lB
+mf
+mE
+nt
+Po
+dx
+yu
+ki
+ap
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(137,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
+bg
+nj
+bq
+bq
+bg
+ad
+ad
+nl
+nN
+nS
+Tc
+Rx
+Rx
+Rx
+Rx
+Rx
+Rx
+Rx
+eW
+Sa
+ya
+LM
+lh
+Sa
+ps
+kk
+ZH
+MJ
+TI
+DQ
+Le
+KU
+Tm
+Sa
+cw
+cw
+kW
+Eu
+ae
+ae
+ae
+cN
+ae
+ae
+ae
+ae
+ae
+iP
+ae
+ae
+hI
+db
+db
+js
+ae
+ku
+NM
+lC
+ae
+mH
+nu
+od
+oC
+ae
+Qk
+ap
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(138,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
+bg
+by
+ym
+ym
+bg
+ad
+aa
+nl
+nl
+nQ
+ET
+VJ
+Rx
+MA
+YQ
+dX
+eB
+nX
+eX
+Sa
+Vi
+LA
+lH
+Sa
+wY
+mX
+BV
+KU
+Vw
+Le
+Ef
+KU
+Tm
+Sa
+cw
+cw
+ae
+ae
+ae
+cw
+cL
+ob
+db
+db
+db
+rp
+Je
+Wg
+gI
+ae
+hJ
+db
+db
+jt
+ae
+kv
+NM
+lD
+ae
+oD
+nv
+oD
+oD
+ae
+iG
+ap
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(139,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
+bg
+bg
+bg
+bg
+bg
+aa
+aa
+aa
+aa
+nl
+Tc
+VJ
+Rx
+Nw
+dq
+dY
+dY
+dY
+eY
+Sa
+sV
+LM
+xt
+Sa
+Sa
+Sa
+Sa
+KU
+Om
+Om
+Om
+KU
+Tm
+hv
+cw
+cw
+cw
+cw
+cw
+cw
+cL
+ob
+db
+db
+fb
+db
+db
+RV
+GJ
+ae
+hK
+db
+db
+ju
+ae
+kw
+NM
+lE
+ae
+mJ
+nw
+oe
+mJ
+ae
+jd
+ap
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(140,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
+nl
+Vt
+yH
+tZ
+Nw
+OP
+Nw
+Nw
+Nw
+Nw
+Sa
+Sa
+Sa
+yA
+Sa
+Sa
+nZ
+nl
+RR
+RR
+st
+RR
+Aj
+XI
+hv
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+aU
+dy
+ef
+ae
+fd
+gf
+OL
+gK
+ae
+hL
+in
+iQ
+jv
+ae
+kx
+NM
+Qf
+ae
+mJ
+mJ
+mJ
+oE
+ae
+DX
+op
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(141,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
+nl
+iq
+GT
+Rx
+SW
+et
+aq
+nW
+DF
+Nw
+Rx
+WJ
+pp
+Ho
+VJ
+Oa
+VJ
+nl
+Sa
+Sa
+Sa
+Sa
+Sa
+Sa
+Sa
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+dc
+dz
+eg
+ae
+fe
+db
+tm
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ky
+NM
+GJ
+ae
+mK
+mK
+mK
+mK
+ae
+oc
+oc
+yh
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(142,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+nl
+nl
+Tc
+Rx
+Rx
+Rx
+Rx
+Rx
+Rx
+Rx
+Rx
+Tc
+nl
+nl
+nl
+nl
+nS
+nl
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+dd
+dd
+aw
+ae
+ff
+vc
+Cw
+ae
+hm
+hN
+io
+iR
+ZT
+db
+kz
+NM
+db
+ae
+ae
+ae
+ae
+ae
+ae
+aa
+oc
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(143,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
+nl
+yz
+pp
+cW
+cW
+cW
+pp
+cW
+cW
+cW
+Ho
+nl
+cw
+cw
+nl
+Di
+nl
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+dd
+du
+aw
+ae
+fg
+gh
+hF
+ae
+hn
+hO
+iS
+iT
+db
+jw
+db
+NM
+db
+ae
+cx
+db
+db
+cI
+ae
+aa
+oc
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(144,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
+nl
+nl
+nl
+nl
+nl
+nl
+nl
+nl
+nl
+nl
+nl
+nl
+cw
+cw
+nl
+VJ
+nl
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+dd
+dA
+eh
+ae
+fh
+LC
+gi
+ae
+hM
+ip
+io
+BC
+jx
+db
+Xa
+My
+Tr
+ae
+lF
+db
+db
+cI
+ae
+aa
+oc
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(145,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
+nl
+xc
+nl
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+ae
+ae
+ae
+ae
+cL
+cL
+cL
+ae
+ae
+ae
+ae
+tT
+fc
+jR
+XS
+ob
+Vx
+uN
+MI
+db
+db
+zQ
+ae
+aa
+oc
+UQ
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(146,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
+nl
+nl
+nl
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+ae
+ae
+ae
+ae
+ae
+XS
+ob
+jM
+ae
+gI
+db
+db
+cI
+ae
+aa
+oc
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(147,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+PW
+Yl
+Yw
+WK
+ae
+hi
+ob
+Oy
+ae
+ot
+db
+db
+ge
+ae
+aa
+oc
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(148,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+Uo
+OG
+im
+AZ
+ii
+Hw
+IP
+oP
+ae
+ae
+ae
+cL
+cL
+ae
+aa
+oc
+ap
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(149,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+db
+Qf
+db
+Zd
+ae
+db
+VX
+WA
+ae
+cw
+pa
+aa
+aa
+aa
+aa
+oc
+Vb
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(150,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+aZ
+gn
+CR
+Sh
+ae
+db
+VX
+GJ
+ae
+cw
+aa
+aa
+aa
+aa
+aa
+oc
+oc
+oc
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(151,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aA
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+UH
+ey
+ml
+mJ
+ae
+db
+VX
+db
+ae
+cw
+aa
+aa
+hl
+YX
+yR
+yR
+Tn
+hl
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(152,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+uH
+ey
+mJ
+mJ
+ae
+db
+VX
+db
+cL
+aa
+aa
+aa
+Ok
+sE
+Ng
+Nm
+VB
+Ok
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(153,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+ae
+ae
+vo
+ae
+ae
+db
+VX
+db
+cL
+aa
+aa
+aa
+nG
+FM
+UE
+YR
+rl
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(154,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+ky
+VX
+OC
+ae
+ae
+ae
+ae
+nG
+hy
+nG
+nG
+zl
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(155,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
+ab
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+ae
+uH
+EP
+gp
+Yy
+VI
+uR
+eH
+VY
+YO
+PL
+OK
+HX
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(156,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aA
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+ae
+db
+db
+db
+ae
+ae
+cL
+ae
+nG
+Ye
+Nb
+nG
+RE
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(157,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+ae
+cL
+cL
+cL
+ae
+aa
+aa
+aa
+ei
+Mz
+Go
+iC
+WM
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(158,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+nG
+Tz
+IT
+TZ
+YL
+ei
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(159,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+nG
+ms
+iM
+Pn
+mU
+ei
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(160,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+nG
+RS
+ON
+TS
+mm
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(161,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+nG
+nG
+YH
+Nr
+nG
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(162,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+nG
+Qx
+gN
+ZS
+NN
+nG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(163,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ei
+eA
+rB
+GK
+SS
+ei
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(164,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ei
+ei
+ei
+ei
+ei
+ei
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(165,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(166,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(167,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(168,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(169,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(170,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(171,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(172,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(173,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(174,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(175,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(176,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
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(177,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
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(178,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
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(179,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(180,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(181,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(182,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(183,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(184,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(185,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(186,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(187,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(188,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(189,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(190,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(191,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(192,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(193,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(194,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(195,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(196,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(197,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(198,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(199,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(200,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(201,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(202,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(203,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(204,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(205,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(206,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(207,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(208,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(209,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(210,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(211,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(212,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(213,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(214,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(215,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(216,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(217,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(218,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(219,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(220,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(221,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(222,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(223,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(224,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(225,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(226,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(227,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(228,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(229,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(230,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(231,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(232,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(233,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
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(234,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(235,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(236,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(237,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(238,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(239,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(240,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(241,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(242,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(243,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(244,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(245,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(246,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(247,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(248,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(249,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(250,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(251,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(252,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(253,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(254,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(255,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/maps/ministation/ministation-3.dmm b/maps/ministation/ministation-3.dmm
new file mode 100644
index 00000000000..c957f544da3
--- /dev/null
+++ b/maps/ministation/ministation-3.dmm
@@ -0,0 +1,66010 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/space,
+/area/space)
+"ab" = (
+/obj/abstract/landmark{
+ name = "carpspawn"
+ },
+/turf/space,
+/area/space)
+"af" = (
+/turf/exterior/wall/random/ministation,
+/area/space)
+"aF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"aV" = (
+/obj/machinery/atmospherics/binary/pump/on{
+ target_pressure = 200;
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"cw" = (
+/turf/simulated/floor/reinforced/airless,
+/area/space)
+"dp" = (
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"dH" = (
+/turf/simulated/floor/plating,
+/area/space)
+"es" = (
+/obj/machinery/light/small,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/sign/warning/airlock{
+ pixel_y = 26
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"gu" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"hx" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/tracker,
+/turf/simulated/floor/plating,
+/area/space)
+"hC" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"jq" = (
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/obj/machinery/atmospherics/portables_connector{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"kV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"ld" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"mI" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"nf" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"nY" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"rw" = (
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"rB" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/power/apc/high{
+ dir = 1;
+ pixel_y = 20
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"sD" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"tN" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4overpass)
+"ug" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "roof_airlock_exterior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "roof_airlock";
+ name = "exterior access button";
+ pixel_x = -20;
+ command = "cycle_exterior";
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/airless,
+/area/ministation/maint/l4central)
+"uG" = (
+/obj/structure/lattice,
+/turf/space,
+/area/space)
+"uQ" = (
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4overpass)
+"vD" = (
+/obj/machinery/power/solar_control{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"wi" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"xN" = (
+/obj/abstract/map_data{
+ height = 4
+ },
+/turf/space,
+/area/space)
+"xZ" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"yS" = (
+/obj/abstract/landmark{
+ name = "bluespace_a"
+ },
+/turf/space,
+/area/space)
+"yX" = (
+/turf/simulated/wall,
+/area/ministation/maint/l4overpass)
+"zd" = (
+/obj/structure/ladder,
+/obj/structure/lattice,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/open,
+/area/ministation/maint/l4overpass)
+"Aj" = (
+/obj/structure/cable,
+/turf/simulated/floor/plating,
+/area/space)
+"AT" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/solar,
+/turf/simulated/floor/plating,
+/area/space)
+"Cd" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/hatch/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"Cl" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"Cu" = (
+/obj/structure/ladder,
+/obj/structure/lattice,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/open,
+/area/ministation/maint/l4overpass)
+"CJ" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/solar,
+/turf/simulated/floor/airless,
+/area/space)
+"Dc" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"DX" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"Ed" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"Fa" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4overpass)
+"GD" = (
+/obj/machinery/door/airlock/external/glass{
+ autoset_access = 0;
+ name = "External Airlock Hatch";
+ req_access = list("ACCESS_EXTERNAL");
+ locked = 1;
+ id_tag = "roof_airlock_interior"
+ },
+/obj/machinery/button/access/interior{
+ id_tag = "roof_airlock";
+ name = "interior access button";
+ pixel_x = 20;
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"Hs" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"HM" = (
+/obj/machinery/network/relay{
+ initial_network_id = "molluscnet"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"IZ" = (
+/obj/machinery/power/solar,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"Lu" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/solar,
+/turf/simulated/floor/airless,
+/area/space)
+"Lx" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"MF" = (
+/obj/machinery/power/solar,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"Np" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"Nz" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"NO" = (
+/obj/abstract/level_data_spawner/main_level,
+/turf/space,
+/area/space)
+"SJ" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"Uw" = (
+/obj/structure/lattice,
+/obj/structure/ladder,
+/obj/structure/cable{
+ icon_state = "32-4"
+ },
+/obj/machinery/atmospherics/pipe/zpipe/down/supply{
+ dir = 4
+ },
+/turf/simulated/open,
+/area/ministation/maint/l4central)
+"VO" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"Wi" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/space)
+"Wl" = (
+/obj/machinery/power/smes/buildable/preset,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"XA" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
+ id_tag = "roof_vent"
+ },
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ id_tag = "roof_airlock";
+ pixel_y = null;
+ tag_airpump = "roof_vent";
+ tag_chamber_sensor = "roof_sensor";
+ tag_exterior_door = "roof_airlock_exterior";
+ tag_interior_door = "roof_airlock_interior";
+ dir = 4;
+ pixel_x = -20
+ },
+/obj/machinery/airlock_sensor{
+ id_tag = "roof_sensor";
+ pixel_y = 10;
+ pixel_x = -20;
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/ministation/maint/l4central)
+"Yv" = (
+/turf/simulated/wall,
+/area/ministation/maint/l4central)
+
+(1,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+NO
+aa
+aa
+aa
+aa
+"}
+(6,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(7,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(8,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(9,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(10,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(11,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(12,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(13,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(14,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(15,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(16,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(17,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(40,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(41,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
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(42,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(43,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(44,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(45,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(46,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(47,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(49,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(50,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(51,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
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(52,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(53,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
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(54,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
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(55,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(56,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(57,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(58,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(59,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(60,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(61,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(62,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(63,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(64,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
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(65,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
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(66,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(67,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(68,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(69,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
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(70,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
+af
+af
+aa
+af
+af
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(71,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(72,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(73,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(74,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(75,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(76,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(77,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(78,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
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(79,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
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(80,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(81,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(82,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(83,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(84,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(85,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(86,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(87,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(88,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+yS
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(89,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(90,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
+af
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(91,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
+af
+af
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(92,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
+af
+af
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(93,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(94,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
+af
+af
+aa
+aa
+af
+af
+af
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(95,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
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(96,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(97,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(98,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(99,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(100,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(101,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(102,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(103,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
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+hx
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(104,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Cl
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(105,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
+af
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+uG
+uG
+uG
+uG
+Cl
+uG
+uG
+uG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(106,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
+af
+af
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Lu
+Lu
+Lu
+AT
+AT
+aa
+wi
+aa
+AT
+AT
+Lu
+Lu
+Lu
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(107,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+xZ
+mI
+mI
+mI
+mI
+Aj
+dH
+rw
+Lx
+Lx
+Lx
+Lx
+hC
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(108,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
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+CJ
+CJ
+CJ
+CJ
+CJ
+aa
+dH
+aa
+CJ
+CJ
+CJ
+CJ
+CJ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(109,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
+uG
+aa
+aa
+aa
+dH
+aa
+aa
+aa
+uG
+aa
+aa
+uG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(110,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+Lu
+Lu
+Lu
+Lu
+Lu
+aa
+dH
+aa
+Lu
+Lu
+Lu
+Lu
+Lu
+uG
+uG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(111,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+xZ
+mI
+mI
+mI
+mI
+Aj
+dH
+rw
+Lx
+Lx
+Lx
+Lx
+hC
+aa
+uG
+uG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(112,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+CJ
+CJ
+CJ
+CJ
+CJ
+aa
+dH
+aa
+CJ
+CJ
+CJ
+CJ
+CJ
+cw
+aa
+uG
+uG
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(113,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+uG
+aa
+aa
+aa
+dH
+aa
+aa
+aa
+uG
+cw
+cw
+cw
+aa
+Yv
+Yv
+Yv
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(114,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+IZ
+IZ
+IZ
+IZ
+IZ
+aa
+dH
+aa
+IZ
+IZ
+IZ
+IZ
+IZ
+cw
+aa
+Yv
+Uw
+Yv
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(115,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+SJ
+Wi
+Wi
+Wi
+Wi
+Aj
+dH
+rw
+Ed
+Ed
+Ed
+Ed
+DX
+cw
+aa
+Yv
+es
+Yv
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(116,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+MF
+MF
+MF
+MF
+MF
+aa
+dH
+aa
+MF
+MF
+MF
+MF
+MF
+cw
+cw
+Yv
+Cd
+Yv
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(117,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+uG
+aa
+aa
+aa
+dH
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+Yv
+Yv
+kV
+Yv
+Yv
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(118,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+Lu
+Lu
+Lu
+Lu
+Lu
+aa
+dH
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+Yv
+rB
+aF
+jq
+Yv
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(119,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+xN
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+xZ
+mI
+mI
+mI
+mI
+Aj
+nf
+aa
+aa
+aa
+cw
+cw
+cw
+Yv
+Yv
+Yv
+aV
+Np
+Yv
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(120,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+CJ
+CJ
+CJ
+CJ
+CJ
+aa
+Hs
+nY
+nY
+nY
+nY
+nY
+nY
+ug
+XA
+GD
+sD
+Dc
+Yv
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(121,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+yX
+yX
+aa
+aa
+aa
+aa
+aa
+uG
+aa
+aa
+aa
+dH
+aa
+cw
+cw
+cw
+cw
+cw
+Yv
+Yv
+Yv
+Nz
+Wl
+Yv
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(122,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
+af
+af
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+Cu
+yX
+aa
+aa
+aa
+aa
+aa
+uG
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+Yv
+gu
+VO
+dp
+Yv
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(123,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+Yv
+HM
+ld
+vD
+Yv
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(124,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+Yv
+Yv
+Yv
+Yv
+Yv
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(125,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+tN
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(126,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(127,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(128,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(129,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(130,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(131,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(132,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(133,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+tN
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(134,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
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(135,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
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(136,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
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+yX
+yX
+yX
+yX
+yX
+yX
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(137,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
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+yX
+zd
+uQ
+Fa
+uQ
+uQ
+uQ
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(138,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
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+yX
+yX
+yX
+yX
+yX
+yX
+yX
+yX
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(139,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
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(140,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(141,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(142,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(143,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(144,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(145,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
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(146,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
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(147,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(148,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(149,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(150,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(151,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(152,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(153,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(154,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(155,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(156,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
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(157,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(158,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(159,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(160,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(161,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(162,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(163,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(164,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
+cw
+cw
+cw
+cw
+cw
+cw
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(165,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(166,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(167,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(168,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(169,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(170,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(171,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(172,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(173,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(174,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(175,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(176,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(177,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(178,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(179,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(180,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(181,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(182,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(183,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(184,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(185,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(186,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(187,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(188,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(189,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(190,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(191,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(192,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(193,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(194,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(195,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(196,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(197,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(198,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(199,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(200,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(201,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(202,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(203,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(204,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(205,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(206,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(207,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(208,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(209,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(210,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(211,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(212,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(213,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(214,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(215,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(216,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(217,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(218,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(219,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(220,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(221,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(222,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(223,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(224,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(225,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(226,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(227,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(228,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(229,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(230,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(231,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(232,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(233,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
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(234,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(235,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(236,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(237,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(238,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(239,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(240,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(241,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(242,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
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(243,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(244,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(245,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(246,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(247,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(248,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(249,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(250,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(251,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(252,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(253,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(254,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(255,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
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/maps/ministation/ministation.dm b/maps/ministation/ministation.dm
index 69a9050c93e..a1f6317b4f0 100644
--- a/maps/ministation/ministation.dm
+++ b/maps/ministation/ministation.dm
@@ -2,28 +2,70 @@
Ministation "Zebra"
A butchered variant on Giacom's Ministation designed for 5 to 10 players.
Now poorly imported for Nebula!
+And then imported back to ScavStation!
+And then copied back upstream to Neb...
*/
#if !defined(USING_MAP_DATUM)
+ #define USING_MAP_DATUM /datum/map/ministation
+
+ #ifdef UNIT_TEST
+ #include "../../code/unit_tests/offset_tests.dm"
+ #endif
+
+ #include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm"
+
#include "../../mods/content/xenobiology/_xenobiology.dme"
#include "../../mods/content/corporate/_corporate.dme"
#include "../../mods/content/matchmaking/_matchmaking.dme"
#include "../../mods/species/ascent/_ascent.dme"
+ #include "../../mods/species/neoavians/_neoavians.dme"
+ #include "../../mods/species/vox/_vox.dme"
#include "../../mods/species/serpentid/_serpentid.dme"
-
- #define USING_MAP_DATUM /datum/map/ministation
-
- #include "ministation.dmm"
- #include "space.dmm"
- #include "ministation_unit_testing.dm"
+ #include "../../mods/species/bayliens/_bayliens.dme"
+ #include "../../mods/content/mundane.dm"
+ #include "../../mods/content/bigpharma/_bigpharma.dme"
+ #include "../../mods/content/government/_government.dme"
+ #include "../../mods/content/modern_earth/_modern_earth.dme"
+ #include "../../mods/content/mouse_highlights/_mouse_highlight.dme"
+ #include "../../mods/content/psionics/_psionics.dme"
+ #include "../../mods/content/scaling_descriptors.dm"
#include "ministation_antagonists.dm"
#include "ministation_areas.dm"
#include "ministation_departments.dm"
+ #include "ministation_documents.dm"
#include "ministation_jobs.dm"
#include "ministation_shuttles.dm"
#include "ministation_objects.dm"
+ #include "ministation_unit_testing.dm"
+ #include "ministation_overrides.dm"
+
+ #include "ministation-0.dmm"
+ #include "ministation-1.dmm"
+ #include "ministation-2.dmm"
+ #include "ministation-3.dmm"
+ #include "space.dmm"
+
+ #include "../away/bearcat/bearcat.dm"
+ #include "../away/casino/casino.dm"
+ #include "../away/derelict/derelict.dm"
+ #include "../away/errant_pisces/errant_pisces.dm"
+ #include "../away/lost_supply_base/lost_supply_base.dm"
+ #include "../away/magshield/magshield.dm"
+ #include "../away/mining/mining.dm"
+ #include "../away/mobius_rift/mobius_rift.dm"
+ #include "../away/smugglers/smugglers.dm"
+ #include "../away/slavers/slavers_base.dm"
+ #include "../away/unishi/unishi.dm"
+ #include "../away/yacht/yacht.dm"
+ #include "../away/liberia/liberia.dm"
+
+ #include "../../mods/mobs/dionaea/_dionaea.dme"
+ #include "../../mods/mobs/borers/_borers.dme"
+
+ #include "ministation_overmap.dm"
#include "jobs/command.dm"
#include "jobs/civilian.dm"
@@ -31,6 +73,7 @@ Now poorly imported for Nebula!
#include "jobs/medical.dm"
#include "jobs/security.dm"
#include "jobs/science.dm"
+ #include "jobs/corporate.dm"
#include "jobs/synthetics.dm"
#include "outfits/_outfits.dm"
@@ -40,6 +83,7 @@ Now poorly imported for Nebula!
#include "outfits/medical.dm"
#include "outfits/science.dm"
#include "outfits/security.dm"
+ #include "outfits/corporate.dm"
#elif !defined(MAP_OVERRIDE)
diff --git a/maps/ministation/ministation_antagonists.dm b/maps/ministation/ministation_antagonists.dm
index 914948d8fdb..3d2dbfd9be4 100644
--- a/maps/ministation/ministation_antagonists.dm
+++ b/maps/ministation/ministation_antagonists.dm
@@ -1,5 +1,4 @@
/decl/special_role
- valid_species = list(SPECIES_HUMAN)
initial_spawn_req = 1
initial_spawn_target = 1
@@ -29,11 +28,11 @@
initial_spawn_target = 2
command_department_id = /decl/department/command
-/datum/map/ministation/potential_theft_targets = list(
+/datum/map/ministation
+ potential_theft_targets = list(
"an owl mask" = /obj/item/clothing/mask/gas/owl_mask,
"a toy ripley" = /obj/item/toy/prize/powerloader,
"a collectable top hat" = /obj/item/clothing/head/collectable/tophat,
- "the reactive teleport armor" = /obj/item/clothing/suit/armor/reactive,
"a jetpack" = /obj/item/tank/jetpack,
"a captain's jumpsuit" = /obj/item/clothing/under/captain,
"a pair of magboots" = /obj/item/clothing/shoes/magboots,
@@ -43,6 +42,8 @@
"the hypospray" = /obj/item/chems/hypospray,
"the captain's pinpointer" = /obj/item/pinpointer,
"the championship belt" = /obj/item/storage/belt/champion,
+ "the corporate account documents" = /obj/item/documents/corporate/account,
+ "the corporate personnel data" = /obj/item/documents/corporate/personnel,
"the table-top spaceship model" = /obj/item/toy/shipmodel,
"the AI inteliCard" = /obj/item/aicard,
"the nuclear authentication disk" = /obj/item/disk/nuclear,
diff --git a/maps/ministation/ministation_areas.dm b/maps/ministation/ministation_areas.dm
index b8472417cec..91e6b18998a 100644
--- a/maps/ministation/ministation_areas.dm
+++ b/maps/ministation/ministation_areas.dm
@@ -33,17 +33,29 @@
area_flags = AREA_FLAG_HALLWAY
holomap_color = HOLOMAP_AREACOLOR_HALLWAYS
-/area/ministation/hall/w
- name = "\improper Port Hallway"
+/area/ministation/hall/n
+ name = "\improper Forward Hallway"
-/area/ministation/hall/s
- name = "\improper Aft Hallway"
+// first floor hallways
-/area/ministation/hall/e
- name = "\improper Starboard Hallway"
+/area/ministation/hall/s1
+ name = "\improper L1 Aft Hallway"
-/area/ministation/hall/n
- name = "\improper Forward Hallway"
+// second floor hallways
+
+/area/ministation/hall/w2
+ name = "\improper L2 Port Hallway"
+
+/area/ministation/hall/e2
+ name = "\improper L2 Starboard Hallway"
+
+// third floor hallways
+
+/area/ministation/hall/s3
+ name = "\improper L3 Aft Hallway"
+
+/area/ministation/hall/n3
+ name = "\improper L3 Forward Hallway"
//Maintenance
/area/ministation/maint
@@ -54,29 +66,71 @@
secure = TRUE
holomap_color = HOLOMAP_AREACOLOR_MAINTENANCE
-/area/ministation/maint/nw
- name = "\improper Port Forward Maintenance"
+// First floor maint
+
+/area/ministation/maint/westatmos
+ name = "\improper West Atmos Maintenance"
+
+/area/ministation/maint/eastatmos
+ name = "\improper East Atmos Maintenance"
+
+// /area/ministation/maint/l1nw
+// name = "\improper Level One North West Maintenance"
-/area/ministation/maint/ne
- name = "\improper Starboard Forward Maintenance"
+/area/ministation/maint/l1ne
+ name = "\improper Level One North East Maintenance"
-/area/ministation/maint/w
- name = "\improper Port Maintenance"
+/area/ministation/maint/l1central
+ name = "\improper Level One Central Maintenance"
-/area/ministation/maint/e
- name = "\improper Starboard Maintenance"
+// Second Floor Maint
-/area/ministation/maint/sw
- name = "\improper Port Quarter Maintenance"
+/area/ministation/maint/l2centraln
+ name = "\improper Level Two Central North Maintenance"
-/area/ministation/maint/se
- name = "\improper Starboard Quarter Maintenance"
+/area/ministation/maint/l2centrals
+ name = "\improper Level Two Central South Maintenance"
-/area/ministation/maint/sec
+/area/ministation/maint/secmaint
name = "\improper Security Maintenance"
-/area/ministation/maint/detective
- name = "\improper Detective Office Maintenance"
+/area/ministation/maint/hydromaint
+ name = "\improper Hydro Maintenance"
+
+/area/ministation/maint/l2underpass
+ name = "\improper Level Two Maintenance Underpass"
+
+// Third Floor Maint
+
+/area/ministation/maint/l3nw
+ name = "\improper Level Three Northwest Maintenance"
+
+/area/ministation/maint/l3ne
+ name = "\improper Level Three Northeast Maintenance"
+
+/area/ministation/maint/l3central
+ name = "\improper Level Three Central Maintenance"
+
+/area/ministation/maint/l3sw
+ name = "\improper Level Three Southwest Maintenance"
+
+/area/ministation/maint/l3se
+ name = "\improper Level Three Southeast Maintenance"
+
+// Fourth Floor Maint
+/area/ministation/maint/l4central
+ name = "\improper Level Four Central Maintenance"
+
+/area/ministation/maint/l4overpass
+ name = "\improper Level Four Maintenance Overpass"
+
+//Maint Bypasses
+
+/area/ministation/maint/sebypass
+ name = "\improper Southeast Maintenance Shaft"
+
+/area/ministation/maint/nebypass
+ name = "\improper Northeast Maintenance Shaft"
//Departments
/area/ministation/hop
@@ -90,13 +144,14 @@
req_access = list(access_janitor)
icon_state = "janitor"
-/area/ministation/commons
- name = "\improper Common Area"
- icon_state = "pink"
+/area/ministation/trash
+ name = "\improper Trash Room"
+ req_access = list(access_janitor)
+ icon_state = "janitor"
/area/ministation/cargo
name = "\improper Cargo Bay"
- req_access = list(access_cargo)
+ req_access = list(access_mining)
icon_state = "brown"
secure = TRUE
holomap_color = HOLOMAP_AREACOLOR_CARGO
@@ -106,6 +161,7 @@
req_access = list(access_heads)
secure = TRUE
icon_state = "dark_blue"
+ holomap_color = HOLOMAP_AREACOLOR_SECURITY
/area/ministation/bridge/vault
name = "\improper Vault"
@@ -119,7 +175,6 @@
secure = TRUE
icon_state = "red"
area_flags = AREA_FLAG_SECURITY
- holomap_color = HOLOMAP_AREACOLOR_SECURITY
/area/ministation/detective
name = "\improper Detective Office"
@@ -137,14 +192,6 @@
name = "\improper Library"
icon_state = "LIB"
-/area/ministation/disused
- name = "\improper Disused Section"
- icon_state = "pink"
-
-/area/ministation/disused_office
- name = "\improper Disused Office"
- icon_state = "dark_blue"
-
/area/ministation/atmospherics
name = "\improper Atmospherics"
req_access = list(access_atmospherics)
@@ -153,10 +200,9 @@
/area/ministation/science
name = "\improper Research & Development Laboratory"
- req_access = list(access_research)
+ req_access = list(access_robotics)
secure = TRUE
icon_state = "purple"
- holomap_color = HOLOMAP_AREACOLOR_SCIENCE
/area/ministation/eva
name = "\improper EVA Storage"
@@ -172,11 +218,17 @@
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
/area/ministation/cryo
- name = "\improper Cryogenic Storage"
+ name = "\improper Medical Cryogenics"
req_access = list()
icon_state = "green"
secure = FALSE
+/area/ministation/dorms
+ name = "\improper Dormatories"
+ req_access = list()
+ icon_state = "red"
+ secure = FALSE
+
/area/ministation/hydro
name = "\improper Hydroponics"
req_access = list(access_hydroponics)
@@ -189,12 +241,26 @@
/area/ministation/engine
name = "Engineering"
- req_access = list(access_engine)
+ req_access = list(access_engine_equip)
ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg')
secure = TRUE
icon_state = "yellow"
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
+/area/ministation/supermatter
+ name = "\improper Supermatter Engine"
+ req_access = list(access_engine)
+ ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg')
+ secure = TRUE
+ icon_state = "brown"
+
+/area/ministation/smcontrol
+ name = "\improper Supermatter Control"
+ req_access = list(access_engine)
+ ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg')
+ secure = TRUE
+ icon_state = "red"
+
/area/ministation/telecomms
name = "\improper Telecommunications Control"
req_access = list(list(access_engine),list(access_heads)) //can get inside to monitor but not actually access anything important. Inner doors have tcomm access
@@ -203,6 +269,20 @@
icon_state = "light_blue"
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
+/area/ministation/company_rep
+ name = "\improper Company Representative Chamber"
+ req_access = list(access_lawyer)
+ icon_state = "brown"
+
+/area/ministation/arrival
+ name = "\improper Arrival Shuttle" // I hate this ugly thing
+ icon_state = "white"
+ requires_power = 0
+
+/area/ministation/shuttle/outgoing
+ name = "\improper Science Shuttle"
+ icon_state = "shuttle"
+
//satellite
/area/ministation/ai_sat
name = "\improper Satellite"
@@ -225,3 +305,36 @@
/area/shuttle/escape_shuttle
name = "\improper Emergency Shuttle"
icon_state = "shuttle"
+
+//Elevator
+
+/area/turbolift
+ name = "\improper Elevator"
+ icon_state = "shuttle"
+ requires_power = 0
+ dynamic_lighting = TRUE
+ sound_env = STANDARD_STATION
+ area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED
+ ambience = list(
+ 'sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg'
+ )
+
+ arrival_sound = null
+ lift_announce_str = null
+
+/area/turbolift/alert_on_fall(var/mob/living/carbon/human/H)
+ if(H.client && SSpersistence.elevator_fall_shifts > 0)
+ SSwebhooks.send(WEBHOOK_ELEVATOR_FALL, list("text" = "We managed to make it [SSpersistence.elevator_fall_shifts] shift\s without someone falling down an elevator shaft."))
+ SSpersistence.elevator_fall_shifts = -1
+
+/area/turbolift/l1
+ name = "Station Level 1"
+ base_turf = /turf/simulated/floor
+
+/area/turbolift/l2
+ name = "Station Level 2"
+ base_turf = /turf/simulated/open
+
+/area/turbolift/l3
+ name = "Station Level 3"
+ base_turf = /turf/simulated/open
\ No newline at end of file
diff --git a/maps/ministation/ministation_areas.dmi b/maps/ministation/ministation_areas.dmi
index e4389c0e3bd..bc53c1e9b8a 100644
Binary files a/maps/ministation/ministation_areas.dmi and b/maps/ministation/ministation_areas.dmi differ
diff --git a/maps/ministation/ministation_define.dm b/maps/ministation/ministation_define.dm
index 85ea9221e5b..10f60b50d39 100644
--- a/maps/ministation/ministation_define.dm
+++ b/maps/ministation/ministation_define.dm
@@ -17,6 +17,10 @@
lobby_screens = list('maps/ministation/ministation_lobby.png')
+ overmap_ids = list(OVERMAP_ID_SPACE)
+ num_exoplanets = 3
+ away_site_budget = 3
+
shuttle_docked_message = "The public ferry to %dock_name% has docked with the station. It will depart in approximately %ETD%"
shuttle_leaving_dock = "The public ferry has left the station. Estimate %ETA% until the ferry docks at %dock_name%."
shuttle_called_message = "A public ferry to %dock_name% has been scheduled. It will arrive in approximately %ETA%"
@@ -39,7 +43,7 @@
radiation_detected_message = "High levels of radiation have been detected in proximity of the %STATION_NAME%. Station wide maintenance access has been granted. Please take shelter within the nearest maintenance tunnel."
- allowed_spawns = list(
+ allowed_latejoin_spawns = list(
/decl/spawnpoint/arrivals,
/decl/spawnpoint/cryo
)
@@ -58,7 +62,6 @@
list("name" = "Security", "key" = "s", "frequency" = 1359, "color" = COMMS_COLOR_SECURITY, "span_class" = "secradio", "secured" = list(access_security))
)
-
/datum/map/ministation/get_map_info()
- return "You're aboard the [station_name], an older station once used for unethical scientific research. It has long since been repurposed as deep space communication relay, though only on paper. \
- Onboard activity is at the whims of the [boss_name] who treat the station as a glorified dogsbody, and sometimes guinea pig."
+ return "You're aboard the [station_name], an older station once used for unethical economic research. It has long since been repurposed as deep space communication relay, though only on paper. \
+ Onboard activity is at the whims of the [boss_name] who treat the station as a dumping ground for less desired personnel."
\ No newline at end of file
diff --git a/maps/ministation/ministation_departments.dm b/maps/ministation/ministation_departments.dm
index 8c759b6850f..f77a1d5c9b3 100644
--- a/maps/ministation/ministation_departments.dm
+++ b/maps/ministation/ministation_departments.dm
@@ -62,10 +62,17 @@
/obj/item/robot_module/security
associated_department = /decl/department/security
-/obj/machinery/network/pager/security
+/obj/machinery/network/pager/security
department = /decl/department/security
/decl/department/miscellaneous
name = "Misc"
display_priority = -1
display_color = "#ccffcc"
+
+/decl/department/corporate
+ name = "Corporate"
+ announce_channel = "Corporate"
+ colour = "#b98f03"
+ display_priority = 4
+ display_color = "#ffddf0"
\ No newline at end of file
diff --git a/maps/ministation/ministation_documents.dm b/maps/ministation/ministation_documents.dm
new file mode 100644
index 00000000000..14c3d1d8b7d
--- /dev/null
+++ b/maps/ministation/ministation_documents.dm
@@ -0,0 +1,9 @@
+/obj/item/documents/corporate/account
+ name = "corporate accounting documents"
+ desc = "These contain exhaustive information about company dealings, with up-to-date information regarding wealth and resources controlled by the house."
+ description_antag = "In the wrong hands, the house could certainly find itself disavantaged in dealings in the future."
+
+/obj/item/documents/corporate/personnel
+ name = "corporate personnel data"
+ desc = "Corporate interests are furthered by those who serve the company. A good operation must know all who work for it."
+ description_antag = "An enemy of the company could use this to figure out where personnel live and who among them might be a problem to them."
diff --git a/maps/ministation/ministation_jobs.dm b/maps/ministation/ministation_jobs.dm
index b12bc242543..cc588b7ecc6 100644
--- a/maps/ministation/ministation_jobs.dm
+++ b/maps/ministation/ministation_jobs.dm
@@ -8,12 +8,90 @@
/datum/job/ministation/captain,
/datum/job/ministation/cargo,
/datum/job/ministation/robot,
+ /datum/job/ministation/computer,
/datum/job/ministation/detective,
/datum/job/ministation/doctor,
+ /datum/job/ministation/doctor/head,
/datum/job/ministation/engineer,
+ /datum/job/ministation/engineer/head,
/datum/job/ministation/hop,
/datum/job/ministation/janitor,
/datum/job/ministation/scientist,
+ /datum/job/ministation/scientist/head,
/datum/job/ministation/security,
- /datum/job/ministation/librarian
+ /datum/job/ministation/security/head,
+ /datum/job/ministation/librarian,
+ /datum/job/ministation/corporate/rep
)
+ species_to_job_whitelist = list(
+ /decl/species/vox = list(
+ /datum/job/ministation/assistant,
+ /datum/job/ministation/bartender,
+ /datum/job/ministation/cargo,
+ /datum/job/ministation/janitor,
+ /datum/job/ministation/scientist,
+ /datum/job/ministation/scientist/head,
+ /datum/job/ministation/engineer,
+ /datum/job/ministation/engineer/head,
+ /datum/job/ministation/detective,
+ /datum/job/ministation/doctor,
+ /datum/job/ministation/doctor/head
+ ),
+ /decl/species/neoavian = list(
+ /datum/job/ministation/assistant,
+ /datum/job/ministation/bartender,
+ /datum/job/ministation/cargo,
+ /datum/job/ministation/janitor,
+ /datum/job/ministation/scientist,
+ /datum/job/ministation/scientist/head,
+ /datum/job/ministation/engineer,
+ /datum/job/ministation/engineer/head,
+ /datum/job/ministation/detective,
+ /datum/job/ministation/doctor,
+ /datum/job/ministation/doctor/head
+ ),
+ /decl/species/serpentid = list(
+ /datum/job/ministation/assistant,
+ /datum/job/ministation/bartender,
+ /datum/job/ministation/cargo,
+ /datum/job/ministation/janitor,
+ /datum/job/ministation/scientist,
+ /datum/job/ministation/scientist/head,
+ /datum/job/ministation/engineer,
+ /datum/job/ministation/engineer/head,
+ /datum/job/ministation/detective,
+ /datum/job/ministation/doctor,
+ /datum/job/ministation/doctor/head
+ ),
+ /decl/species/adherent = list(
+ /datum/job/ministation/assistant,
+ /datum/job/ministation/bartender,
+ /datum/job/ministation/cargo,
+ /datum/job/ministation/janitor,
+ /datum/job/ministation/scientist,
+ /datum/job/ministation/scientist/head,
+ /datum/job/ministation/engineer,
+ /datum/job/ministation/engineer/head,
+ /datum/job/ministation/detective,
+ /datum/job/ministation/doctor,
+ /datum/job/ministation/doctor/head
+ )
+
+ )
+ species_to_job_blacklist = list(
+ /decl/species/human = list(
+ /datum/job/ministation/captain,
+ /datum/job/ministation/robot,
+ /datum/job/ministation/detective,
+ /datum/job/ministation/doctor,
+ /datum/job/ministation/doctor/head,
+ /datum/job/ministation/engineer,
+ /datum/job/ministation/engineer/head,
+ /datum/job/ministation/hop,
+ /datum/job/ministation/scientist,
+ /datum/job/ministation/scientist/head,
+ /datum/job/ministation/security,
+ /datum/job/ministation/security/head,
+ /datum/job/ministation/librarian
+ )
+ )
\ No newline at end of file
diff --git a/maps/ministation/ministation_objects.dm b/maps/ministation/ministation_objects.dm
index 8edc719f8e0..5acbedc536a 100644
--- a/maps/ministation/ministation_objects.dm
+++ b/maps/ministation/ministation_objects.dm
@@ -1,29 +1,3 @@
-/obj/abstract/ministation/random_asteroid_spawner/
- name = "random asteroid spawner"
- icon = 'icons/misc/mark.dmi'
- icon_state = "X"
- color = COLOR_PURPLE
- alpha = 255 //so it's not invisible in map editor
-
-/obj/abstract/ministation/random_asteroid_spawner/Initialize()
- ..()
- . = INITIALIZE_HINT_LATELOAD
-
-/obj/abstract/ministation/random_asteroid_spawner/LateInitialize(var/ml)
- var/turf/space/thisturf = src.loc
- if(prob(1) && istype(thisturf)) //if this turf is space there is a one percent chance of turning it into an asteroid.
- generate_asteroid(70, thisturf.ChangeTurf(/turf/exterior/wall/random/ministation)) //turn the turf into an asteroid wall and call generate asteroid on it, which will generate more walls around it.
- qdel(src)
-
-//tries to convert the space turfs around the asteroid into asteroids.
-/obj/abstract/ministation/random_asteroid_spawner/proc/generate_asteroid(var/probability, var/turf/sourceasteroid)
- for(var/ndir in global.cardinal)
- var/turf/ad = get_step(sourceasteroid, ndir)
- if(prob(probability))
- if(istype(ad, /turf/space)) //if it's space turn it into asteroid
- //newasteroid = ad.ChangeTurf(/turf/exterior/wall/random/ministation)
- generate_asteroid(max(10,probability-10), ad.ChangeTurf(/turf/exterior/wall/random/ministation)) //reduce the probability of conversion with 10 percent for each turf away from the starting one.
-
/turf/exterior/wall/random/ministation/get_weighted_mineral_list()
if(prob(80))
. = list()
@@ -88,28 +62,9 @@
/obj/machinery/camera/motion/ministation
preset_channels = list("Satellite")
-//Detective bs
-/obj/item/camera_film/high
- name = "high capacity film cartridge"
- max_uses = 30
- uses_left = 30
-
-/obj/item/camera/detective
- name = "detective's camera"
- desc = "A single use disposable polaroid photo camera."
+/obj/machinery/camera/network/command
+ preset_channels = list("Command")
+ initial_access = list(access_bridge)
-/obj/item/camera/detective/Initialize()
- . = ..()
- film = new /obj/item/camera_film/high(src)
-
-/obj/item/camera/detective/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/camera_film))
- return FALSE //Prevent reloading
- return ..()
-
-/obj/item/camera/detective/eject_film(mob/user)
- return
-
-/obj/item/camera/detective/get_alt_interactions(mob/user)
- . = ..()
- LAZYREMOVE(., /decl/interaction_handler/camera_eject_film)
+/obj/machinery/camera/network/hallway
+ preset_channels = list("Hallway")
\ No newline at end of file
diff --git a/maps/ministation/ministation_overmap.dm b/maps/ministation/ministation_overmap.dm
new file mode 100644
index 00000000000..678130539c2
--- /dev/null
+++ b/maps/ministation/ministation_overmap.dm
@@ -0,0 +1,20 @@
+/obj/effect/overmap/visitable/ship/ministation
+ name = "Space Station Zebra"
+ color = "#00ffff"
+ start_x = 4
+ start_y = 4
+ vessel_mass = 5000
+ max_speed = 1/(2 SECONDS)
+ burn_delay = 2 SECONDS
+ restricted_area = 30
+ sector_flags = OVERMAP_SECTOR_KNOWN|OVERMAP_SECTOR_BASE|OVERMAP_SECTOR_IN_SPACE
+
+ initial_generic_waypoints = list(
+ "nav_ministation_bridge_north",
+ "nav_ministation_arrivals_south"
+ )
+
+ //exploration and rescue shuttles can only dock port side, b/c there's only one door.
+ initial_restricted_waypoints = list(
+ /datum/shuttle/autodock/overmap/science_shuttle = list("nav_ministation_science_dock_shuttle")
+ )
diff --git a/maps/ministation/ministation_overrides.dm b/maps/ministation/ministation_overrides.dm
new file mode 100644
index 00000000000..508fbdaab31
--- /dev/null
+++ b/maps/ministation/ministation_overrides.dm
@@ -0,0 +1,10 @@
+/datum/computer_file/program/merchant/ministation
+ read_access = list()
+
+/obj/machinery/computer/modular/preset/merchant/ministation
+ default_software = list(
+ /datum/computer_file/program/merchant/ministation,
+ /datum/computer_file/program/email_client,
+ /datum/computer_file/program/wordprocessor,
+ /datum/computer_file/program/supply
+ )
diff --git a/maps/ministation/ministation_shuttles.dm b/maps/ministation/ministation_shuttles.dm
index e82fc97b319..7aaac066f70 100644
--- a/maps/ministation/ministation_shuttles.dm
+++ b/maps/ministation/ministation_shuttles.dm
@@ -37,3 +37,57 @@
/obj/effect/shuttle_landmark/escape_shuttle/station
landmark_tag = "nav_escape_shuttle_station"
docking_controller = "station1"
+
+/obj/effect/shuttle_landmark/bridge_north
+ landmark_tag = "nav_ministation_bridge_north"
+
+/obj/effect/shuttle_landmark/arrivas_south
+ landmark_tag = "nav_ministation_arrivals_south"
+
+/obj/machinery/computer/shuttle_control/explore/ministation
+ name = "science shuttle console"
+ shuttle_tag = "Science Shuttle"
+
+/datum/shuttle/autodock/overmap/science_shuttle
+ name = "Science Shuttle"
+ shuttle_area = /area/ministation/shuttle/outgoing
+ dock_target = "science_shuttle"
+ current_location = "nav_ministation_science_dock_shuttle"
+
+/obj/effect/shuttle_landmark/science_dock
+ name = "Science Department Docking Arm"
+ docking_controller = "ministation_science_dock"
+ landmark_tag = "nav_ministation_science_dock_shuttle"
+
+/obj/effect/overmap/visitable/ship/landable/science_shuttle
+ name = "Science Shuttle"
+ shuttle = "Science Shuttle"
+ moving_state = "ship_moving"
+ max_speed = 1/(2 SECONDS)
+ burn_delay = 1 SECONDS
+ vessel_mass = 3000
+ fore_dir = EAST
+ skill_needed = SKILL_BASIC
+ vessel_size = SHIP_SIZE_SMALL
+
+// Essentially a bare platform that moves up and down.
+/obj/abstract/turbolift_spawner/ministation
+ name = "Tradestation cargo elevator placeholder"
+// icon = 'icons/obj/turbolift_preview_nowalls_3x3.dmi'
+ depth = 3
+ lift_size_x = 2
+ lift_size_y = 2
+ door_type = null
+ wall_type = null
+ firedoor_type = null
+ light_type = null
+ floor_type = /turf/simulated/floor/tiled/steel_grid
+ button_type = /obj/structure/lift/button/standalone
+ panel_type = /obj/structure/lift/panel/standalone
+ areas_to_use = list(
+ /area/turbolift/l1,
+ /area/turbolift/l2,
+ /area/turbolift/l3
+ )
+ floor_departure_sound = 'sound/effects/lift_heavy_start.ogg'
+ floor_arrival_sound = 'sound/effects/lift_heavy_stop.ogg'
diff --git a/maps/ministation/ministation_unit_testing.dm b/maps/ministation/ministation_unit_testing.dm
index d2242b32d00..5a9d945921f 100644
--- a/maps/ministation/ministation_unit_testing.dm
+++ b/maps/ministation/ministation_unit_testing.dm
@@ -8,4 +8,12 @@
/area/ministation/maint = NO_SCRUBBER|NO_VENT,
/area/ministation/bridge/vault = NO_SCRUBBER|NO_VENT,
/area/ministation/supply_dock = NO_SCRUBBER|NO_VENT|NO_APC,
+ /area/ministation/arrival = NO_SCRUBBER|NO_VENT|NO_APC,
+ /area/ministation/shuttle/outgoing = NO_SCRUBBER,
+ /area/ministation/maint/sebypass = NO_SCRUBBER|NO_VENT|NO_APC,
+ /area/ministation/maint/nebypass = NO_SCRUBBER|NO_VENT|NO_APC,
+ /area/ministation/maint/l4overpass = NO_SCRUBBER|NO_VENT|NO_APC,
+ /area/ministation/maint/l2underpass = NO_SCRUBBER|NO_VENT|NO_APC,
+ /area/turbolift = NO_SCRUBBER|NO_VENT|NO_APC,
+ /area/ministation/atmospherics = NO_SCRUBBER,
)
diff --git a/maps/ministation/outfits/_outfits.dm b/maps/ministation/outfits/_outfits.dm
index e42f30fd13b..08bbd22b146 100644
--- a/maps/ministation/outfits/_outfits.dm
+++ b/maps/ministation/outfits/_outfits.dm
@@ -4,4 +4,4 @@
pda_type = /obj/item/modular_computer/pda
pda_slot = slot_l_store_str
l_ear = null
- r_ear = null
\ No newline at end of file
+ r_ear = null
diff --git a/maps/ministation/outfits/civilian.dm b/maps/ministation/outfits/civilian.dm
index f5695c67e75..eb934653708 100644
--- a/maps/ministation/outfits/civilian.dm
+++ b/maps/ministation/outfits/civilian.dm
@@ -1,22 +1,11 @@
/decl/hierarchy/outfit/job/ministation/cargo
- l_ear = /obj/item/radio/headset/ministation_headset_cargo
+ l_ear = /obj/item/radio/headset/headset_cargo
name = "Ministation - Job - Cargo technician"
uniform = /obj/item/clothing/under/cargotech
id_type = /obj/item/card/id/ministation/cargo
pda_type = /obj/item/modular_computer/pda/cargo
backpack_contents = list(/obj/item/crowbar = 1, /obj/item/storage/ore = 1)
- flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
-
-/obj/item/encryptionkey/ministation_headset_cargo
- name = "cargo radio encryption key"
- icon_state = "srv_cypherkey"
- can_decrypt = list(access_cargo)
-
-/obj/item/radio/headset/ministation_headset_cargo
- name = "supply radio headset"
- desc = "A headset used by the box-pushers."
- icon = 'maps/ministation/icons/headset_cargo.dmi'
- encryption_keys = list(/obj/item/encryptionkey/ministation_headset_cargo)
+ outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR
/decl/hierarchy/outfit/job/ministation/cargo/Initialize()
. = ..()
diff --git a/maps/ministation/outfits/command.dm b/maps/ministation/outfits/command.dm
index b0680406cb7..0a499acf24b 100644
--- a/maps/ministation/outfits/command.dm
+++ b/maps/ministation/outfits/command.dm
@@ -14,13 +14,13 @@
backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/cap
backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/com
-/decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H)
+/decl/hierarchy/outfit/job/ministation/captain/post_equip(var/mob/living/carbon/human/H)
..()
- if(H.get_age() > 49)
+ if(H.get_age() > 20)
// Since we can have something other than the default uniform at this
// point, check if we can actually attach the medal
var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str)
- if(uniform)
+ if(istype(uniform))
var/obj/item/clothing/accessory/medal/gold/medal = new()
if(uniform.can_attach_accessory(medal))
uniform.attach_accessory(null, medal)
@@ -32,6 +32,8 @@
uniform = /obj/item/clothing/under/head_of_personnel
l_ear = /obj/item/radio/headset/heads/hop
shoes = /obj/item/clothing/shoes/color/brown
+ r_pocket = /obj/item/gun/energy/taser
+ hands = list(/obj/item/clothing/suit/armor/bulletproof)
id_type = /obj/item/card/id/silver
pda_type = /obj/item/modular_computer/pda/heads/hop
backpack_contents = list(/obj/item/storage/box/ids = 1)
diff --git a/maps/ministation/outfits/corporate.dm b/maps/ministation/outfits/corporate.dm
new file mode 100644
index 00000000000..892411a9d66
--- /dev/null
+++ b/maps/ministation/outfits/corporate.dm
@@ -0,0 +1,9 @@
+/decl/hierarchy/outfit/job/ministation/corporate
+ name = "Ministation - Company Representative"
+ id_type = /obj/item/card/id/ministation/corporate_rep
+
+/obj/item/card/id/ministation/corporate_rep
+ name = "identification card"
+ desc = "A card issued to Company Representatives."
+ color = COLOR_GOLD
+ extra_details = list("goldstripe")
diff --git a/maps/ministation/outfits/engineering.dm b/maps/ministation/outfits/engineering.dm
index daeedf3c563..994ca44c6ed 100644
--- a/maps/ministation/outfits/engineering.dm
+++ b/maps/ministation/outfits/engineering.dm
@@ -4,7 +4,7 @@
l_ear = /obj/item/radio/headset/headset_eng
shoes = /obj/item/clothing/shoes/workboots
pda_slot = slot_l_store_str
- flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
+ outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR
head = /obj/item/clothing/head/hardhat
uniform = /obj/item/clothing/under/engineer
r_pocket = /obj/item/t_scanner
@@ -15,7 +15,16 @@
. = ..()
BACKPACK_OVERRIDE_ENGINEERING
+/decl/hierarchy/outfit/job/ministation/engineer/head
+ name = "Job - Head Engineer"
+ glasses = /obj/item/clothing/glasses/welding/superior
+ suit = /obj/item/clothing/suit/storage/hazardvest
+ gloves = /obj/item/clothing/gloves/thick
+ pda_type = /obj/item/modular_computer/pda/heads/ce
+ hands = list(/obj/item/wrench)
+ l_ear = /obj/item/radio/headset/heads/ce
+
/obj/item/card/id/ministation/engineering
name = "identification card"
desc = "A card issued to engineering staff."
- detail_color = COLOR_SUN
\ No newline at end of file
+ detail_color = COLOR_SUN
diff --git a/maps/ministation/outfits/medical.dm b/maps/ministation/outfits/medical.dm
index 43211f92686..889d72e4d73 100644
--- a/maps/ministation/outfits/medical.dm
+++ b/maps/ministation/outfits/medical.dm
@@ -3,7 +3,7 @@
shoes = /obj/item/clothing/shoes/color/white
pda_type = /obj/item/modular_computer/pda/medical
pda_slot = slot_l_store_str
- name = "Ministation - Job - Medical Doctor"
+ name = "Ministation - Job - Junior Doctor"
uniform = /obj/item/clothing/under/medical
hands = list(/obj/item/storage/firstaid/adv)
r_pocket = /obj/item/flashlight/pen
@@ -13,7 +13,14 @@
. = ..()
BACKPACK_OVERRIDE_MEDICAL
+/decl/hierarchy/outfit/job/ministation/doctor/head
+ name = "Ministation - Job - Head Doctor"
+ l_ear = /obj/item/radio/headset/heads/cmo
+ uniform = /obj/item/clothing/under/det/black
+ shoes = /obj/item/clothing/shoes/dress
+ r_pocket = /obj/item/chems/hypospray
+
/obj/item/card/id/ministation/doctor
name = "identification card"
desc = "A card issued to medical staff."
- detail_color = COLOR_PALE_BLUE_GRAY
\ No newline at end of file
+ detail_color = COLOR_PALE_BLUE_GRAY
diff --git a/maps/ministation/outfits/science.dm b/maps/ministation/outfits/science.dm
index 22c45d2da3b..96f3f4daeb1 100644
--- a/maps/ministation/outfits/science.dm
+++ b/maps/ministation/outfits/science.dm
@@ -2,11 +2,23 @@
l_ear = /obj/item/radio/headset/headset_sci
shoes = /obj/item/clothing/shoes/color/white
pda_type = /obj/item/modular_computer/pda/science
- name = "Ministation - Job - Scientist"
+ name = "Ministation - Job - Researcher"
uniform = /obj/item/clothing/under/color/white
id_type = /obj/item/card/id/ministation/scientist
/obj/item/card/id/ministation/scientist
name = "identification card"
desc = "A card issued to science staff."
- detail_color = COLOR_PALE_PURPLE_GRAY
\ No newline at end of file
+ detail_color = COLOR_PALE_PURPLE_GRAY
+
+/decl/hierarchy/outfit/job/ministation/scientist/head
+ name = "Tradeship - Job - Head Researcher"
+ l_ear = /obj/item/radio/headset/heads/rd
+ shoes = /obj/item/clothing/shoes/dress
+ pda_type = /obj/item/modular_computer/pda/science
+ id_type = /obj/item/card/id/ministation/scientist/head
+
+/obj/item/card/id/ministation/scientist/head
+ name = "identification card"
+ desc = "A card which represents knowledge and reasoning."
+ extra_details = list("goldstripe")
\ No newline at end of file
diff --git a/maps/ministation/outfits/security.dm b/maps/ministation/outfits/security.dm
index b790a784097..474514ad922 100644
--- a/maps/ministation/outfits/security.dm
+++ b/maps/ministation/outfits/security.dm
@@ -3,8 +3,8 @@
decals = list("stripe" = COLOR_RED_LIGHT)
/decl/hierarchy/outfit/job/ministation/security
+ l_ear = /obj/item/radio/headset/headset_sec
glasses = /obj/item/clothing/glasses/sunglasses/sechud
- l_ear = /obj/item/radio/headset/ministation_headset_sec
gloves = /obj/item/clothing/gloves/thick
shoes = /obj/item/clothing/shoes/jackboots
backpack_contents = list(/obj/item/handcuffs = 1)
@@ -15,16 +15,9 @@
id_type = /obj/item/card/id/ministation/security
pda_type = /obj/item/modular_computer/pda/security
-/obj/item/encryptionkey/ministation_headset_sec
- name = "security radio encryption key"
- icon_state = "srv_cypherkey"
- can_decrypt = list(access_security)
-
-/obj/item/radio/headset/ministation_headset_sec
- name = "security radio headset"
- desc = "This is used by your elite security force."
- icon = 'maps/ministation/icons/headset_security.dmi'
- encryption_keys = list(/obj/item/encryptionkey/ministation_headset_sec)
+/decl/hierarchy/outfit/job/ministation/security/head
+ l_ear = /obj/item/radio/headset/heads/hos
+ name = "Ministation - Job - Head of Security"
/decl/hierarchy/outfit/job/ministation/security/Initialize()
. = ..()
@@ -42,7 +35,7 @@
name = "Ministation - Job - Detective"
head = /obj/item/clothing/head/det
glasses = /obj/item/clothing/glasses/sunglasses/sechud
- l_ear = /obj/item/radio/headset/ministation_headset_sec
+ l_ear = /obj/item/radio/headset/headset_sec
uniform = /obj/item/clothing/under/det
suit = /obj/item/clothing/suit/storage/det_trench
l_pocket = /obj/item/flame/lighter/zippo
diff --git a/maps/ministation/space.dmm b/maps/ministation/space.dmm
index 8035ee94e44..cf719610920 100644
--- a/maps/ministation/space.dmm
+++ b/maps/ministation/space.dmm
@@ -106,7 +106,8 @@
"au" = (
/obj/machinery/airlock_sensor{
id_tag = "shuttle3_sensor";
- pixel_y = -20
+ pixel_y = -20;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 8;
@@ -238,13 +239,15 @@
/area/shuttle/escape_shuttle)
"aJ" = (
/obj/structure/extinguisher_cabinet{
- pixel_y = -30
+ pixel_y = -29;
+ dir = 1
},
/turf/simulated/floor/shuttle/blue,
/area/shuttle/escape_shuttle)
"aK" = (
/obj/machinery/status_display{
- pixel_y = -30
+ pixel_y = -30;
+ dir = 1
},
/turf/simulated/floor/shuttle/blue,
/area/shuttle/escape_shuttle)
@@ -257,7 +260,7 @@
/area/shuttle/escape_shuttle)
"aN" = (
/obj/structure/extinguisher_cabinet{
- pixel_y = 30
+ pixel_y = 29
},
/turf/simulated/floor/shuttle/yellow,
/area/shuttle/escape_shuttle)
@@ -359,7 +362,8 @@
"hM" = (
/obj/machinery/airlock_sensor{
id_tag = "shuttle2_sensor";
- pixel_y = -20
+ pixel_y = -20;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 8;
@@ -373,7 +377,8 @@
"qu" = (
/obj/machinery/airlock_sensor{
id_tag = "shuttle1_sensor";
- pixel_y = -20
+ pixel_y = -20;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{
dir = 8;
@@ -404,7 +409,7 @@
"Kt" = (
/obj/structure/window/borosilicate_reinforced,
/obj/structure/showcase{
- desc = "It's actually a yinglet inside the box piloting the shuttle but don't tell anyone.";
+ desc = "It's actually a possum inside the box piloting the shuttle but don't tell anyone.";
icon_state = "message_server_o_off";
name = "auto-pilot system"
},
@@ -433,6 +438,10 @@
},
/turf/simulated/floor/shuttle/blue,
/area/shuttle/escape_shuttle)
+"Pe" = (
+/obj/abstract/level_data_spawner/admin_level,
+/turf/space,
+/area/space)
"Qd" = (
/obj/machinery/atmospherics/pipe/manifold{
dir = 8
@@ -453,10 +462,6 @@
/obj/effect/step_trigger/teleporter/random,
/turf/space/transit/north,
/area/space)
-"YY" = (
-/obj/abstract/level_data_spawner/admin_level,
-/turf/space,
-/area/space)
(1,1,1) = {"
UO
@@ -715,7 +720,7 @@ aa
aa
aa
aa
-aa
+Pe
aa
"}
(3,1,1) = {"
@@ -844,7 +849,7 @@ aa
aa
aa
aa
-YY
+aa
aa
aa
"}
@@ -2006,10 +2011,10 @@ ab
ab
ac
ac
-ac
Mu
-KH
ac
+ac
+KH
ab
ab
tC
@@ -2136,10 +2141,10 @@ tC
ab
ab
ab
-ae
-ab
ab
ae
+ae
+ab
ab
ab
tC
diff --git a/maps/modpack_testing/blank.dmm b/maps/modpack_testing/blank.dmm
index 6d50a5c258f..53af9def94a 100644
--- a/maps/modpack_testing/blank.dmm
+++ b/maps/modpack_testing/blank.dmm
@@ -16,6 +16,10 @@
/obj/abstract/level_data_spawner/player,
/turf/space,
/area/space)
+"X" = (
+/obj/abstract/landmark/latejoin/observer,
+/turf/space,
+/area/space)
(1,1,1) = {"
a
@@ -60,7 +64,7 @@ a
a
a
a
-a
+X
a
a
a
diff --git a/maps/modpack_testing/modpack_testing_define.dm b/maps/modpack_testing/modpack_testing_define.dm
index edaf134b62d..f5b09decd1f 100644
--- a/maps/modpack_testing/modpack_testing_define.dm
+++ b/maps/modpack_testing/modpack_testing_define.dm
@@ -2,5 +2,5 @@
name = "Modpack Testing"
full_name = "Modpack Testing District"
path = "modpack_testing"
- allowed_spawns = list()
+ allowed_latejoin_spawns = list()
default_spawn = null
diff --git a/maps/planets/test_planet/neutralia-1.dmm b/maps/planets/test_planet/neutralia-1.dmm
index 3cb9eb6bfec..e26bb0a323a 100644
--- a/maps/planets/test_planet/neutralia-1.dmm
+++ b/maps/planets/test_planet/neutralia-1.dmm
@@ -1,6 +1,6 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
-/turf/exterior/volcanic,
+/turf/exterior/rock/volcanic,
/area/exoplanet/underground/neutralia/bottom)
"b" = (
/turf/unsimulated/mineral,
@@ -10,7 +10,7 @@
/area/exoplanet/underground/neutralia/bottom)
"d" = (
/obj/abstract/level_data_spawner/neutralia/bottom,
-/turf/exterior/volcanic,
+/turf/exterior/rock/volcanic,
/area/exoplanet/underground/neutralia/bottom)
(1,1,1) = {"
diff --git a/maps/planets/test_planet/test_planet.dm b/maps/planets/test_planet/test_planet.dm
index 09f87eaab30..b9557cf13a6 100644
--- a/maps/planets/test_planet/test_planet.dm
+++ b/maps/planets/test_planet/test_planet.dm
@@ -142,7 +142,7 @@
name = "neutralia abyssal depths"
level_id = "neutralia_abyssal_depths"
base_area = /area/exoplanet/underground/neutralia/bottom
- base_turf = /turf/exterior/volcanic
+ base_turf = /turf/exterior/rock/volcanic
/obj/abstract/level_data_spawner/neutralia/sky
level_data_type = /datum/level_data/planetoid/neutralia/sky
diff --git a/maps/planets_testing/planets_testing_define.dm b/maps/planets_testing/planets_testing_define.dm
index ed547504cb4..c82359943fd 100644
--- a/maps/planets_testing/planets_testing_define.dm
+++ b/maps/planets_testing/planets_testing_define.dm
@@ -3,14 +3,19 @@
full_name = "Planets Testing"
path = "planets_testing"
overmap_ids = list(OVERMAP_ID_SPACE)
- allowed_spawns = list()
+ allowed_latejoin_spawns = list()
default_spawn = null
+// Set the observer spawn to include every flag so that CI flag checks pass.
+/decl/spawnpoint/observer
+ spawn_flags = (SPAWN_FLAG_GHOSTS_CAN_SPAWN | SPAWN_FLAG_JOBS_CAN_SPAWN | SPAWN_FLAG_PRISONERS_CAN_SPAWN | SPAWN_FLAG_PERSISTENCE_CAN_SPAWN)
+
/datum/map/planet_testing/build_planets()
report_progress("Instantiating planets...")
//Spawn all templates once
spawn_planet_templates(list_values(get_all_planet_templates()))
-
+ // Place an observer landmark just to appease CI and on the off-chance that anyone ever wants to observer.
+ new /obj/abstract/landmark/latejoin/observer(locate(round(world.maxx/2), round(world.maxy/2), world.maxz))
report_progress("Finished instantiating planets.")
diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm
index 17e6dded4cf..ec5e6c448bc 100644
--- a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm
+++ b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm
@@ -57,7 +57,7 @@
to_chat(user, SPAN_NOTICE("You pry out the data drive from \the [src]."))
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/item/stock_parts/computer/hard_drive/cluster/drive = new(get_turf(src))
- drive.origin_tech = "{'[TECH_DATA]':[rand(4,5)],'[TECH_ENGINEERING]':[rand(4,5)],'[TECH_EXOTIC_MATTER]':[rand(4,5)],'[TECH_COMBAT]':[rand(2,5)],'[TECH_ESOTERIC]':[rand(0,6)]}"
+ drive.origin_tech = @'{"[TECH_DATA]":[rand(4,5)],"[TECH_ENGINEERING]":[rand(4,5)],"[TECH_EXOTIC_MATTER]":[rand(4,5)],"[TECH_COMBAT]":[rand(2,5)],"[TECH_ESOTERIC]":[rand(0,6)]}'
disk_looted = TRUE
return TRUE
. = ..()
diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/farmbot.dmi b/maps/random_ruins/exoplanet_ruins/hydrobase/farmbot.dmi
index ca1bea0e5f2..126d4a3b1d9 100644
Binary files a/maps/random_ruins/exoplanet_ruins/hydrobase/farmbot.dmi and b/maps/random_ruins/exoplanet_ruins/hydrobase/farmbot.dmi differ
diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm
index a5b3ed11b3c..453e7fb4ffb 100644
--- a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm
+++ b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm
@@ -84,8 +84,7 @@
/mob/living/simple_animal/hostile/retaliate/goat/hydro
name = "goat"
desc = "An impressive goat, in size and coat. His horns look pretty serious!"
- health = 100
- maxHealth = 100
+ mob_default_max_health = 100
natural_weapon = /obj/item/natural_weapon/hooves/strong
faction = "farmbots"
@@ -99,8 +98,7 @@
speak = list("Initiating harvesting subrout-ine-ine.", "Connection timed out.", "Connection with master AI syst-tem-tem lost.", "Core systems override enab-...")
emote_see = list("beeps repeatedly", "whirrs violently", "flashes its indicator lights", "emits a ping sound")
faction = "farmbots"
- health = 225
- maxHealth = 225
+ mob_default_max_health = 225
malfunctioning = 0
/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro/Initialize()
@@ -109,7 +107,7 @@
projectiletype = /obj/item/projectile/beam/drone/weak
/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro/emp_act(severity)
- health -= rand(5,10) * (severity + 1)
+ adjustFireLoss(rand(5,10) * (severity + 1))
disabled = rand(15, 30)
malfunctioning = 1
hostile_drone = 1
diff --git a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm
index fa0b90a26b3..308925e48de 100644
--- a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm
+++ b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm
@@ -155,7 +155,7 @@
/area/template_noop)
"C" = (
/obj/structure/table/woodentable,
-/obj/machinery/computer/atmoscontrol/laptop{
+/obj/machinery/computer/central_atmos/laptop{
desc = "A cheap, beat-up old laptop.";
name = "old laptop"
},
diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm
index fcf66f38351..2bd7b80c00a 100644
--- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm
+++ b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm
@@ -1661,8 +1661,8 @@
/area/map_template/colony/atmospherics)
"dQ" = (
/obj/structure/closet/crate/freezer,
-/obj/item/chems/ivbag/nanoblood,
-/obj/item/chems/ivbag/nanoblood,
+/obj/item/chems/ivbag/blood/nanoblood,
+/obj/item/chems/ivbag/blood/nanoblood,
/turf/simulated/floor/tiled/freezer,
/area/map_template/colony/surgery)
"dR" = (
@@ -3926,7 +3926,7 @@
dir = 4
},
/obj/structure/casino/roulette_chart{
- density = TRUE
+ density = 1
},
/turf/simulated/floor/wood/walnut,
/area/map_template/colony/commons)
@@ -4242,7 +4242,7 @@
/obj/machinery/reagent_temperature,
/obj/item/chems/drinks/shaker,
/obj/machinery/vending/boozeomat{
- density = FALSE;
+ density = 0;
pixel_y = -32;
req_access = list()
},
@@ -4795,7 +4795,7 @@
dir = 4
},
/obj/structure/casino/roulette{
- density = TRUE
+ density = 1
},
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
@@ -6331,7 +6331,6 @@
icon_state = "1-2"
},
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "colmainblast";
name = "Entry Blast Door"
},
@@ -6386,7 +6385,6 @@
icon_state = "1-2"
},
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "colmainexit"
},
/turf/simulated/floor/tiled/techfloor,
@@ -6498,7 +6496,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "colmainblast";
name = "Entry Blast Door"
},
@@ -7230,7 +7227,6 @@
dir = 8
},
/obj/machinery/door/blast/regular/open{
- icon_state = "pdoor0";
id_tag = "colmainexit"
},
/turf/simulated/floor/tiled/techfloor,
diff --git a/maps/tradeship/jobs/_goals.dm b/maps/tradeship/jobs/_goals.dm
index bc7e9be65bc..c0c13ad937d 100644
--- a/maps/tradeship/jobs/_goals.dm
+++ b/maps/tradeship/jobs/_goals.dm
@@ -27,10 +27,10 @@ var/global/list/tradeship_paperwork_end_areas = list()
paperwork_types = list(/obj/item/paperwork/tradeship)
signatory_job_list = list(/datum/job/tradeship_captain, /datum/job/tradeship_first_mate)
-/datum/goal/department/paperwork/tradeship/get_spawn_turfs()
+/datum/goal/department/paperwork/tradeship/get_paper_spawn_turfs()
return global.tradeship_paperwork_spawn_turfs
-/datum/goal/department/paperwork/tradeship/get_end_areas()
+/datum/goal/department/paperwork/tradeship/get_paper_end_areas()
return global.tradeship_paperwork_end_areas
/obj/item/paperwork/tradeship
diff --git a/maps/tradeship/jobs/civilian.dm b/maps/tradeship/jobs/civilian.dm
index ef5e54bfd27..01802f673c8 100644
--- a/maps/tradeship/jobs/civilian.dm
+++ b/maps/tradeship/jobs/civilian.dm
@@ -16,7 +16,7 @@
event_categories = list(ASSIGNMENT_GARDENER, ASSIGNMENT_JANITOR)
/datum/job/tradeship_deckhand/get_access()
- if(config.assistant_maint)
+ if(get_config_value(/decl/config/toggle/assistant_maint))
return list(access_maint_tunnels)
else
return list()
diff --git a/maps/tradeship/jobs/command.dm b/maps/tradeship/jobs/command.dm
index 5aee0bdb2b1..3cb07038328 100644
--- a/maps/tradeship/jobs/command.dm
+++ b/maps/tradeship/jobs/command.dm
@@ -29,7 +29,7 @@
not_random_selectable = 1
forced_spawnpoint = /decl/spawnpoint/cryo/captain
-/datum/job/tradeship_captain/equip(var/mob/living/carbon/human/H)
+/datum/job/tradeship_captain/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
. = ..()
if(H)
H.verbs |= /mob/proc/tradehouse_rename_ship
diff --git a/maps/tradeship/jobs/synthetics.dm b/maps/tradeship/jobs/synthetics.dm
index 21cbc2cb15c..9e0664ea8f0 100644
--- a/maps/tradeship/jobs/synthetics.dm
+++ b/maps/tradeship/jobs/synthetics.dm
@@ -22,7 +22,7 @@
if(H)
return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title))
-/datum/job/tradeship_robot/equip(var/mob/living/carbon/human/H)
+/datum/job/tradeship_robot/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
return !!H
/datum/job/tradeship_robot/New()
diff --git a/maps/tradeship/outfits/engineering.dm b/maps/tradeship/outfits/engineering.dm
index b67ff40b074..db7f074405b 100644
--- a/maps/tradeship/outfits/engineering.dm
+++ b/maps/tradeship/outfits/engineering.dm
@@ -1,13 +1,13 @@
/decl/hierarchy/outfit/job/tradeship/hand/engine
name = "Tradeship - Job - Junior Engineer"
head = /obj/item/clothing/head/hardhat
- flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
id_type = /obj/item/card/id/tradeship/engineering
shoes = /obj/item/clothing/shoes/workboots
hands = list(/obj/item/wrench)
belt = /obj/item/storage/belt/utility/full
r_pocket = /obj/item/radio
l_ear = /obj/item/radio/headset/headset_eng
+ outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR
/obj/item/card/id/tradeship/engineering
name = "identification card"
@@ -26,7 +26,7 @@
belt = /obj/item/storage/belt/utility/full
id_type = /obj/item/card/id/tradeship/engineering/head
r_pocket = /obj/item/radio
- flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
+ outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR
l_ear = /obj/item/radio/headset/heads/ce
/obj/item/card/id/tradeship/engineering/head
diff --git a/maps/tradeship/tradeship-0.dmm b/maps/tradeship/tradeship-0.dmm
index cd0610257f3..ce95540085e 100644
--- a/maps/tradeship/tradeship-0.dmm
+++ b/maps/tradeship/tradeship-0.dmm
@@ -4,13 +4,10 @@
/area/space)
"ab" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor/autoset,
/turf/simulated/floor/plating,
@@ -31,7 +28,7 @@
/area/ship/trade/undercomms)
"ad" = (
/obj/structure/door/wood{
- name = "matriarch's quarters"
+ name = "captain's quarters"
},
/obj/structure/cable{
icon_state = "4-8"
@@ -56,13 +53,10 @@
/area/ship/trade/loading_bay)
"ah" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor/autoset,
/turf/simulated/floor/plating,
@@ -72,13 +66,10 @@
/area/space)
"aj" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor/autoset,
/turf/simulated/floor/plating,
@@ -134,7 +125,8 @@
dir = 9
},
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/obj/structure/cable{
icon_state = "1-4"
@@ -151,13 +143,10 @@
/area/space)
"at" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor/autoset,
/turf/simulated/floor/plating,
@@ -203,7 +192,7 @@
/obj/machinery/button/access/interior{
dir = 1;
id_tag = "lower_cargo";
- pixel_y = -18
+ pixel_y = -22
},
/turf/simulated/floor/tiled/steel_grid,
/area/ship/trade/loading_bay)
@@ -445,7 +434,8 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_y = -20
+ pixel_y = -20;
+ dir = 1
},
/obj/structure/cable{
icon_state = "4-8"
@@ -465,13 +455,10 @@
/area/ship/trade/fore_port_underside_maint)
"aV" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -487,39 +474,30 @@
/area/ship/trade/livestock)
"aX" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor/autoset,
/turf/simulated/floor/plating,
/area/ship/trade/loading_bay)
"aY" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor/autoset,
/turf/simulated/floor/plating,
/area/ship/trade/aft_port_underside_maint)
"aZ" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor/autoset,
/turf/simulated/floor/plating,
@@ -564,7 +542,8 @@
/area/ship/trade/loading_bay)
"bd" = (
/obj/machinery/button/access/exterior/cabled{
- id_tag = "lower_cargo"
+ id_tag = "lower_cargo";
+ pixel_y = 24
},
/obj/structure/cable{
icon_state = "0-4"
@@ -768,7 +747,7 @@
"bG" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/effect/floor_decal/corner/beige{
dir = 5
@@ -788,7 +767,7 @@
"bJ" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/structure/reagent_dispensers/watertank,
/turf/simulated/floor,
@@ -796,7 +775,7 @@
"bK" = (
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/structure/reagent_dispensers/beerkeg,
/obj/random/mre/sauce/crayon,
@@ -1012,7 +991,7 @@
"cX" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/effect/floor_decal/corner/beige{
dir = 9
@@ -1039,7 +1018,7 @@
/obj/structure/window/basic,
/obj/structure/curtain/open/bed{
icon_state = "closed";
- opacity = TRUE
+ opacity = 1
},
/obj/effect/floor_decal/corner/beige{
dir = 10
@@ -1316,7 +1295,7 @@
/obj/structure/window/basic,
/obj/structure/curtain/open/bed{
icon_state = "closed";
- opacity = TRUE
+ opacity = 1
},
/turf/simulated/floor/plating,
/area/ship/trade/loading_bay)
@@ -1344,7 +1323,7 @@
/obj/item/chems/glass/rag,
/obj/item/chems/glass/bucket,
/obj/machinery/firealarm{
- pixel_y = 25
+ pixel_y = 21
},
/obj/structure/closet,
/turf/simulated/floor/tiled,
@@ -1438,7 +1417,8 @@
name = "shank"
},
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 32;
+ dir = 4
},
/turf/simulated/floor,
/area/ship/trade/fore_port_underside_maint)
@@ -1470,7 +1450,7 @@
},
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/tiled/white,
/area/ship/trade/livestock)
@@ -1883,17 +1863,18 @@
id_tag = "xenovent";
name = "vent control";
pixel_x = 6;
- pixel_y = -24
+ pixel_y = -24;
+ dir = 1
},
/obj/structure/extinguisher_cabinet{
pixel_x = -8;
- pixel_y = -28
+ pixel_y = -29;
+ dir = 1
},
/turf/simulated/floor/tiled/white,
/area/ship/trade/livestock)
"LO" = (
/obj/structure/sign/warning/deathsposal{
- dir = 1;
pixel_y = 32
},
/turf/simulated/floor,
@@ -1902,7 +1883,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/undercomms)
@@ -1918,7 +1899,8 @@
/area/ship/trade/livestock)
"MI" = (
/obj/machinery/light_switch{
- pixel_x = 20
+ pixel_x = 24;
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
@@ -2042,7 +2024,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
@@ -2068,7 +2050,7 @@
/area/ship/trade/loading_bay)
"SS" = (
/obj/item/radio/intercom{
- pixel_y = 25
+ pixel_y = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor,
diff --git a/maps/tradeship/tradeship-1.dmm b/maps/tradeship/tradeship-1.dmm
index ee46758f064..8cfaa0d7f41 100644
--- a/maps/tradeship/tradeship-1.dmm
+++ b/maps/tradeship/tradeship-1.dmm
@@ -18,13 +18,10 @@
id_tag = "cargo_out"
},
/obj/machinery/shield_diffuser,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/cargo/lower)
@@ -36,16 +33,14 @@
dir = 1;
id_tag = "cargo";
pixel_x = 24;
- pixel_y = 11
+ pixel_y = 11;
+ directional_offset = null
},
/obj/machinery/shield_diffuser,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/cargo/lower)
@@ -69,13 +64,10 @@
/area/ship/trade/escape_port)
"ai" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -108,26 +100,20 @@
/turf/simulated/wall/r_wall,
/area/ship/trade/cargo/lower)
"am" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/airless,
/area/ship/trade/crew/dorms1)
"an" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -159,13 +145,10 @@
/area/ship/trade/escape_port)
"at" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -264,13 +247,10 @@
/obj/machinery/door/airlock/external/bolted{
id_tag = "eva_in"
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/tiled/steel_ridged,
/area/ship/trade/maintenance/eva)
@@ -386,7 +366,8 @@
dir = 4;
id_tag = "eva";
pixel_x = 12;
- pixel_y = 24
+ pixel_y = 24;
+ directional_offset = null
},
/turf/simulated/floor/tiled/steel_ridged,
/area/ship/trade/maintenance/eva)
@@ -476,14 +457,16 @@
/obj/structure/table,
/obj/machinery/button/blast_door{
id_tag = "anomvent";
- name = "emergency vent control"
+ name = "emergency vent control";
+ directional_offset = null
},
/turf/simulated/floor/tiled/white,
/area/ship/trade/artifact_storage)
"ba" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/machinery/light_switch{
- pixel_x = 24
+ pixel_x = 24;
+ dir = 8
},
/obj/machinery/power/apc{
dir = 1;
@@ -578,7 +561,8 @@
/area/ship/trade/cargo/lower)
"bi" = (
/obj/structure/sign/deck/second{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/obj/structure/ladder,
/obj/structure/cable{
@@ -601,7 +585,7 @@
},
/obj/machinery/light_switch{
pixel_x = 9;
- pixel_y = 21
+ pixel_y = 25
},
/obj/effect/floor_decal/corner/beige{
dir = 5
@@ -805,7 +789,8 @@
/obj/random/clothing,
/obj/random/clothing,
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/lino,
/area/ship/trade/crew/dorms1)
@@ -965,10 +950,6 @@
icon_state = "0-2";
pixel_y = 1
},
-/obj/machinery/light_switch{
- pixel_x = 9;
- pixel_y = 21
- },
/obj/effect/floor_decal/corner/beige{
dir = 5
},
@@ -981,6 +962,10 @@
pixel_y = 22
},
/obj/random/gloves,
+/obj/machinery/light_switch{
+ pixel_x = 9;
+ pixel_y = 25
+ },
/turf/simulated/floor/lino,
/area/ship/trade/crew/dorms2)
"cp" = (
@@ -1001,13 +986,10 @@
/area/ship/trade/crew/dorms2)
"cr" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor,
@@ -1100,7 +1082,8 @@
dir = 9
},
/obj/machinery/light_switch{
- pixel_x = -25
+ pixel_x = -24;
+ dir = 4
},
/obj/structure/railing/mapped{
dir = 4
@@ -1123,7 +1106,8 @@
/obj/item/bikehorn,
/obj/item/storage/fancy/crayons,
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/lino,
/area/ship/trade/crew/dorms2)
@@ -1188,19 +1172,18 @@
/area/ship/trade/cargo/lower)
"cZ" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor,
/area/ship/trade/science)
"da" = (
-/obj/machinery/seed_storage/xenobotany,
+/obj/machinery/seed_storage/xenobotany{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/ship/trade/science)
"db" = (
@@ -1226,7 +1209,8 @@
dir = 9
},
/obj/structure/sign/deck/second{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 4
},
/turf/simulated/floor/tiled/steel_grid,
/area/ship/trade/cargo/lower)
@@ -1438,7 +1422,8 @@
pixel_x = 11
},
/obj/machinery/light_switch{
- pixel_x = 28
+ pixel_x = 24;
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/ship/trade/science)
@@ -1473,14 +1458,15 @@
},
/obj/machinery/firealarm{
dir = 1;
- pixel_y = -24
+ pixel_y = -21
},
/turf/simulated/floor/tiled/dark,
/area/ship/trade/drunk_tank)
"dO" = (
/obj/machinery/botany/editor,
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled/white,
/area/ship/trade/science)
@@ -1663,18 +1649,15 @@
/obj/item/clothing/mask/breath,
/obj/machinery/light_switch{
pixel_x = 9;
- pixel_y = 21
+ pixel_y = 25
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/eva)
"er" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/eva)
@@ -1795,7 +1778,8 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/light_switch{
- pixel_x = 22
+ pixel_x = 24;
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
@@ -1839,7 +1823,7 @@
"eY" = (
/obj/item/radio/intercom{
dir = 1;
- pixel_y = -25
+ pixel_y = -30
},
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/atmospherics/unary/vent_scrubber/on{
@@ -1893,7 +1877,7 @@
},
/obj/machinery/alarm{
dir = 1;
- pixel_y = -32
+ pixel_y = -21
},
/obj/structure/cable{
icon_state = "0-4"
@@ -1955,7 +1939,7 @@
/obj/structure/tank_rack/oxygen,
/obj/machinery/firealarm{
dir = 1;
- pixel_y = -24
+ pixel_y = -21
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/eva)
@@ -2006,7 +1990,8 @@
icon_state = "railing0"
},
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -20;
+ dir = 1
},
/turf/simulated/floor/tiled/steel_grid,
/area/ship/trade/cargo/lower)
@@ -2015,7 +2000,7 @@
/obj/structure/railing/mapped,
/obj/structure/closet/coffin,
/obj/random/drinkbottle,
-/obj/item/contraband/poster,
+/obj/item/poster,
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/cargo/lower)
"it" = (
@@ -2028,7 +2013,8 @@
dir = 4
},
/obj/structure/sign/department/science_1{
- pixel_x = -30
+ pixel_x = -32;
+ dir = 4
},
/turf/simulated/floor/tiled,
/area/ship/trade/maintenance/lower)
@@ -2048,6 +2034,10 @@
/obj/machinery/light{
dir = 1
},
+/obj/structure/sign/warning/caution{
+ dir = 4;
+ pixel_x = -34
+ },
/turf/simulated/floor/reinforced,
/area/ship/trade/artifact_storage)
"iS" = (
@@ -2069,7 +2059,7 @@
},
/obj/machinery/firealarm{
dir = 1;
- pixel_y = -24
+ pixel_y = -21
},
/obj/abstract/landmark/latejoin/cryo,
/obj/structure/cable{
@@ -2215,7 +2205,7 @@
},
/obj/machinery/firealarm{
dir = 1;
- pixel_y = -24
+ pixel_y = -21
},
/obj/structure/cable{
icon_state = "4-8"
@@ -2340,7 +2330,7 @@
/obj/machinery/fabricator,
/obj/machinery/light_switch{
pixel_x = 9;
- pixel_y = 21
+ pixel_y = 25
},
/turf/simulated/floor/tiled/techfloor,
/area/ship/trade/maintenance/techstorage)
@@ -2476,7 +2466,8 @@
icon_state = "1-2"
},
/obj/structure/sign/department/xenoflora{
- pixel_x = -30
+ pixel_x = -32;
+ dir = 4
},
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
@@ -2500,7 +2491,7 @@
"uX" = (
/obj/machinery/firealarm{
dir = 1;
- pixel_y = -24
+ pixel_y = -21
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/lower)
@@ -2529,7 +2520,8 @@
},
/obj/machinery/fabricator/robotics,
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled/white,
/area/ship/trade/science/fabricaton)
@@ -2591,7 +2583,8 @@
icon_state = "bulb1"
},
/obj/structure/sign/poster{
- pixel_y = 32
+ pixel_y = 32;
+ dir = 1
},
/obj/item/radio/intercom{
pixel_y = 22
@@ -2619,6 +2612,13 @@
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/lower)
+"yT" = (
+/obj/structure/sign/warning/caution{
+ dir = 4;
+ pixel_x = -34
+ },
+/turf/simulated/floor/reinforced,
+/area/ship/trade/artifact_storage)
"zb" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -2638,7 +2638,6 @@
backwards = 8;
dir = 9;
forwards = 2;
- icon_state = "conveyor1";
id_tag = "con";
movedir = 6
},
@@ -2685,10 +2684,12 @@
/obj/structure/bed/padded,
/obj/item/bedsheet/mime,
/obj/machinery/light_switch{
- pixel_y = -24
+ pixel_y = -20;
+ dir = 1
},
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 32;
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/ship/trade/drunk_tank)
@@ -2719,14 +2720,14 @@
/obj/structure/holostool,
/obj/machinery/firealarm{
dir = 1;
- pixel_y = -24
+ pixel_y = -21
},
/turf/simulated/floor/lino,
/area/ship/trade/crew/dorms1)
"De" = (
/obj/machinery/alarm{
dir = 1;
- pixel_y = -32
+ pixel_y = -21
},
/turf/simulated/floor/tiled/white,
/area/ship/trade/science)
@@ -2821,7 +2822,8 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_x = 28
+ pixel_x = 24;
+ dir = 8
},
/turf/simulated/floor/tiled/steel_grid,
/area/ship/trade/cargo/lower)
@@ -2941,7 +2943,7 @@
/obj/item/storage/briefcase,
/obj/machinery/firealarm{
dir = 1;
- pixel_y = -24
+ pixel_y = -21
},
/turf/simulated/floor/lino,
/area/ship/trade/crew/dorms2)
@@ -2952,12 +2954,9 @@
/area/ship/trade/cargo/lower)
"LA" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/cargo/lower)
@@ -3086,7 +3085,8 @@
/obj/machinery/door/airlock/hatch/autoname/general,
/obj/machinery/door/firedoor,
/obj/structure/sign/warning/fall{
- pixel_x = 32
+ pixel_x = 34;
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/ship/trade/cargo/lower)
@@ -3098,10 +3098,12 @@
/turf/simulated/floor/tiled/white,
/area/ship/trade/science/fabricaton)
"Qg" = (
-/obj/effect/paint/brown,
-/obj/structure/sign/warning/caution,
-/turf/simulated/wall/r_wall,
-/area/ship/trade/artifact_storage)
+/obj/structure/sign/warning/caution{
+ dir = 8;
+ pixel_x = 34
+ },
+/turf/space,
+/area/space)
"QK" = (
/obj/item/stock_parts/console_screen,
/obj/item/stock_parts/console_screen,
@@ -3113,7 +3115,7 @@
/obj/structure/rack,
/obj/machinery/power/apc{
name = "south bump";
- pixel_y = -24
+ pixel_y = -22
},
/obj/structure/cable,
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -3146,7 +3148,8 @@
/obj/machinery/button/blast_door{
id_tag = "rndshutters";
name = "Desk Shutters";
- pixel_x = -25
+ pixel_x = -24;
+ dir = 4
},
/obj/machinery/computer/design_console{
dir = 4
@@ -3156,7 +3159,7 @@
"Sb" = (
/obj/machinery/alarm{
dir = 1;
- pixel_y = -32
+ pixel_y = -21
},
/obj/effect/decal/cleanable/vomit,
/obj/structure/hygiene/toilet{
@@ -5565,9 +5568,9 @@ aa
aa
aa
aa
+Qg
aa
-aa
-aa
+Qg
aa
aa
aa
@@ -5647,9 +5650,9 @@ sY
sY
sY
Va
-Qg
+Va
ag
-Qg
+Va
ca
ca
ca
@@ -5731,7 +5734,7 @@ ah
aP
iQ
lD
-lD
+yT
sB
HY
Rs
diff --git a/maps/tradeship/tradeship-2.dmm b/maps/tradeship/tradeship-2.dmm
index d0bb5e0062a..ac26d8437ce 100644
--- a/maps/tradeship/tradeship-2.dmm
+++ b/maps/tradeship/tradeship-2.dmm
@@ -74,7 +74,7 @@
/obj/abstract/landmark/latejoin/cryo_captain,
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/wood,
/area/ship/trade/command/captain)
@@ -93,7 +93,7 @@
},
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/command/hallway)
@@ -104,7 +104,7 @@
},
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/command/hallway)
@@ -115,9 +115,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/door/airlock/hatch/autoname/command,
-/obj/structure/sign/warning/radioactive{
- pixel_x = -32
- },
/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled/techmaint,
/area/ship/trade/shieldbay)
@@ -140,7 +137,8 @@
/obj/structure/disposalpipe/segment,
/obj/machinery/power/apc{
dir = 8;
- name = "Crew Deck APC"
+ name = "Crew Deck APC";
+ pixel_x = -22
},
/obj/structure/cable,
/turf/simulated/floor/plating,
@@ -158,7 +156,8 @@
icon_state = "16-0"
},
/obj/machinery/atm{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/command/hallway)
@@ -174,39 +173,30 @@
/area/ship/trade/command/hallway)
"ao" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/ship/trade/command/bridge)
"ap" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/command/hallway)
"aq" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -236,13 +226,10 @@
/turf/simulated/floor/tiled/steel_ridged,
/area/ship/trade/command/bridge)
"av" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/crew/toilets)
@@ -251,50 +238,38 @@
/area/ship/trade/command/fmate)
"ax" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/ship/trade/crew/saloon)
"ay" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/crew/medbay/chemistry)
"az" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/ship/trade/crew/toilets)
"aA" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled{
@@ -336,13 +311,10 @@
/area/ship/trade/crew/hallway/port)
"aG" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -395,13 +367,10 @@
/area/ship/trade/shuttle/outgoing/general)
"aM" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 4
@@ -467,13 +436,10 @@
/area/ship/trade/command/hallway)
"aT" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/visible/red{
@@ -508,12 +474,9 @@
/area/ship/trade/command/captain)
"aX" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
- id_tag = "engwindow";
- opacity = FALSE
+ id_tag = "engwindow"
},
/obj/machinery/door/firedoor,
/obj/structure/cable{
@@ -543,7 +506,8 @@
dir = 4
},
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/carpet,
/area/ship/trade/command/fmate)
@@ -577,7 +541,7 @@
/obj/machinery/atmospherics/pipe/simple/visible/universal,
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/tiled/techfloor,
/area/ship/trade/maintenance/atmos)
@@ -592,7 +556,7 @@
},
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/obj/machinery/computer/shuttle_control/explore/tradeship{
dir = 8
@@ -601,13 +565,10 @@
/area/ship/trade/dock)
"bf" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -621,7 +582,7 @@
},
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/obj/machinery/light{
dir = 1;
@@ -641,13 +602,10 @@
/area/ship/trade/shuttle/outgoing/general)
"bj" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -664,7 +622,7 @@
},
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/dock)
@@ -691,7 +649,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/structure/handrail{
dir = 4
@@ -724,12 +682,9 @@
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/dock)
"bs" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
@@ -790,7 +745,8 @@
dir = 4;
id_tag = "tradeship_starboard_dock";
pixel_x = 12;
- pixel_y = 24
+ pixel_y = 24;
+ directional_offset = null
},
/obj/machinery/shield_diffuser,
/obj/structure/cable{
@@ -816,7 +772,8 @@
dir = 4
},
/obj/structure/closet/medical_wall/filled{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled/steel_ridged,
/area/ship/trade/shuttle/outgoing/general)
@@ -856,12 +813,9 @@
/area/ship/trade/dock)
"bA" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -869,7 +823,8 @@
"bB" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/warning/vacuum{
- dir = 4
+ dir = 4;
+ pixel_x = -34
},
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/dock)
@@ -893,12 +848,9 @@
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/dock)
"bE" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/atmospherics/pipe/simple/hidden{
dir = 4
@@ -947,12 +899,12 @@
dir = 4;
id_tag = "bee_star";
pixel_x = 16;
- pixel_y = -26
+ pixel_y = -26;
+ directional_offset = null
},
/obj/structure/cable/orange{
icon_state = "4-8"
},
-/obj/structure/sign/warning/docking_area,
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/shuttle/outgoing/general)
"bI" = (
@@ -960,7 +912,8 @@
dir = 8;
id_tag = "tradeship_dock_port";
pixel_x = -12;
- pixel_y = 24
+ pixel_y = 24;
+ directional_offset = null
},
/obj/machinery/door/airlock/external/bolted{
id_tag = "dock_port_out"
@@ -1073,16 +1026,11 @@
dir = 8;
id_tag = "tradeship_rescue_shuttle_pump_out_internal"
},
-/obj/machinery/airlock_sensor{
- id_tag = "tradeship_rescue_shuttle_sensor";
- pixel_x = -22;
- pixel_y = 20
- },
/obj/machinery/embedded_controller/radio/airlock/docking_port{
cycle_to_external_air = 1;
dir = 4;
id_tag = "tradeship_rescue_shuttle";
- pixel_x = -20;
+ pixel_x = -22;
pixel_y = 32;
tag_airpump = "tradeship_rescue_shuttle_pump";
tag_chamber_sensor = "tradeship_rescue_shuttle_sensor";
@@ -1092,6 +1040,12 @@
dir = 9
},
/obj/effect/shuttle_landmark/docking_arm_starboard/rescue,
+/obj/machinery/airlock_sensor{
+ id_tag = "tradeship_rescue_shuttle_sensor";
+ pixel_x = -22;
+ pixel_y = 20;
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/ship/trade/shuttle/rescue)
"cd" = (
@@ -1104,18 +1058,16 @@
id_tag = "bee_star_pump"
},
/obj/structure/closet/walllocker/suit{
- dir = 4
+ dir = 4;
+ pixel_x = -32
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/shuttle/outgoing/general)
"cf" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -1140,10 +1092,12 @@
/turf/simulated/floor/plating,
/area/ship/trade/shuttle/outgoing/engineering)
"ct" = (
-/obj/structure/sign/warning/docking_area,
-/obj/effect/paint/brown,
-/turf/simulated/wall/r_wall,
-/area/ship/trade/dock)
+/obj/structure/sign/warning/docking_area{
+ dir = 8;
+ pixel_x = 34
+ },
+/turf/space,
+/area/space)
"cu" = (
/obj/machinery/door/airlock/hatch/autoname/general,
/obj/machinery/door/firedoor,
@@ -1225,7 +1179,8 @@
"cO" = (
/obj/machinery/power/apc{
dir = 1;
- name = "Crew Areas APC"
+ name = "Crew Areas APC";
+ pixel_y = 22
},
/obj/structure/cable{
icon_state = "0-4"
@@ -1309,12 +1264,14 @@
/obj/structure/table,
/obj/machinery/recharger,
/obj/structure/sign/poster{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/item/trash/tray,
/obj/item/circular_saw,
/obj/machinery/newscaster{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 4
},
/obj/random/drinkbottle,
/obj/random/drinkbottle,
@@ -1384,7 +1341,7 @@
},
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled,
/area/ship/trade/crew/saloon)
@@ -1418,7 +1375,8 @@
pixel_y = 22
},
/obj/machinery/light_switch{
- pixel_x = 24
+ pixel_x = 24;
+ dir = 8
},
/obj/structure/cable{
icon_state = "0-2";
@@ -1428,13 +1386,10 @@
/area/ship/trade/crew/medbay/chemistry)
"dt" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/plating,
/area/ship/trade/crew/toilets)
@@ -1654,13 +1609,10 @@
/area/ship/trade/crew/medbay/chemistry)
"dK" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -1703,7 +1655,8 @@
pixel_x = 22
},
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -20;
+ dir = 1
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -1750,7 +1703,8 @@
/area/ship/trade/crew/saloon)
"dU" = (
/obj/machinery/light_switch{
- pixel_x = 28
+ pixel_x = 24;
+ dir = 8
},
/obj/effect/floor_decal/corner/beige{
dir = 6
@@ -1771,7 +1725,7 @@
"dW" = (
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/obj/machinery/reagentgrinder,
/obj/machinery/light,
@@ -1817,7 +1771,8 @@
"ed" = (
/obj/machinery/light_switch{
on = 1;
- pixel_x = -25
+ pixel_x = -25;
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -1888,13 +1843,10 @@
/area/ship/trade/maintenance/engine/port)
"ey" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/plating,
/area/ship/trade/crew/kitchen)
@@ -2187,13 +2139,10 @@
/area/ship/trade/crew/medbay)
"ff" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/structure/cable{
icon_state = "6-8"
@@ -2234,7 +2183,7 @@
},
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/effect/floor_decal/corner/red/diagonal,
/turf/simulated/floor/tiled,
@@ -2245,7 +2194,8 @@
dir = 1
},
/obj/machinery/light_switch{
- pixel_x = 28
+ pixel_x = 24;
+ dir = 8
},
/obj/effect/floor_decal/corner/red/diagonal,
/turf/simulated/floor/tiled,
@@ -2276,7 +2226,8 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_x = 28
+ pixel_x = 24;
+ dir = 8
},
/turf/simulated/open,
/area/ship/trade/cargo)
@@ -2288,12 +2239,12 @@
dir = 4
},
/obj/structure/iv_drip,
-/obj/item/chems/ivbag/blood/AMinus,
-/obj/item/chems/ivbag/blood/APlus,
-/obj/item/chems/ivbag/blood/BMinus,
-/obj/item/chems/ivbag/blood/BPlus,
-/obj/item/chems/ivbag/blood/OMinus,
-/obj/item/chems/ivbag/blood/OPlus,
+/obj/item/chems/ivbag/blood/aminus,
+/obj/item/chems/ivbag/blood/aplus,
+/obj/item/chems/ivbag/blood/bminus,
+/obj/item/chems/ivbag/blood/bplus,
+/obj/item/chems/ivbag/blood/ominus,
+/obj/item/chems/ivbag/blood/oplus,
/obj/structure/emergency_dispenser/west,
/turf/simulated/floor/tiled/white,
/area/ship/trade/crew/medbay)
@@ -2303,10 +2254,12 @@
dir = 1
},
/obj/structure/sign/warning/nosmoking_1{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/structure/sign/plaque/diploma/medical{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/item/storage/firstaid/adv,
/obj/random/medical,
@@ -2413,7 +2366,6 @@
/area/ship/trade/maintenance/engine/starboard)
"fQ" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/sign/warning/hot_exhaust,
/obj/effect/paint/red,
/turf/simulated/wall/r_wall,
/area/ship/trade/maintenance/engine/port)
@@ -2424,7 +2376,7 @@
"fU" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 6
@@ -2495,8 +2447,7 @@
icon_state = "warning"
},
/obj/structure/railing/mapped{
- dir = 8;
- icon_state = "railing0"
+ dir = 8
},
/turf/simulated/open,
/area/ship/trade/cargo)
@@ -2556,24 +2507,22 @@
/area/ship/trade/unused)
"gh" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/sign/warning/hot_exhaust,
/obj/effect/paint/red,
/turf/simulated/wall,
/area/ship/trade/maintenance/engine/starboard)
"gj" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/sign/warning/hot_exhaust,
/obj/effect/paint/red,
/turf/simulated/wall/r_wall,
/area/ship/trade/maintenance/engine/starboard)
"gk" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
+ },
+/obj/structure/sign/warning/hot_exhaust{
+ pixel_y = 32
},
/turf/simulated/floor/airless,
/area/ship/trade/maintenance/engine/port)
@@ -2586,13 +2535,10 @@
/area/space)
"gn" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 4
@@ -2621,7 +2567,8 @@
dir = 1
},
/obj/machinery/light_switch{
- pixel_x = 28
+ pixel_x = 24;
+ dir = 8
},
/obj/structure/handrail{
dir = 8
@@ -2652,11 +2599,10 @@
/obj/structure/handrail{
dir = 8
},
+/obj/structure/emergency_dispenser/east,
/obj/structure/railing/mapped{
- dir = 8;
- icon_state = "railing0"
+ dir = 8
},
-/obj/structure/emergency_dispenser/east,
/turf/simulated/open,
/area/ship/trade/cargo)
"gt" = (
@@ -2677,7 +2623,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/wood/yew,
/area/ship/trade/unused)
@@ -2739,18 +2685,19 @@
icon_state = "warning"
},
/obj/structure/sign/deck/first{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/structure/railing/mapped{
- dir = 8;
- icon_state = "railing0"
+ dir = 8
},
/turf/simulated/open,
/area/ship/trade/cargo)
"gI" = (
/obj/random/maintenance,
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 32;
+ dir = 4
},
/turf/simulated/floor/wood/yew,
/area/ship/trade/unused)
@@ -2817,12 +2764,12 @@
icon_state = "warning"
},
/obj/structure/railing/mapped{
- dir = 1;
- icon_state = "railing0"
+ dir = 1
},
/obj/machinery/light/spot,
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -20;
+ dir = 1
},
/turf/simulated/open,
/area/ship/trade/cargo)
@@ -2843,7 +2790,8 @@
/obj/machinery/button/blast_door{
id_tag = "radaway";
name = "Radiation shields";
- pixel_x = -24
+ pixel_x = -24;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/power)
@@ -2913,7 +2861,7 @@
dir = 8
},
/obj/machinery/firealarm{
- pixel_y = 24
+ pixel_y = 21
},
/turf/simulated/floor/plating,
/area/ship/trade/hidden)
@@ -3090,7 +3038,7 @@
/obj/item/storage/backpack/dufflebag/syndie,
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/structure/cable{
icon_state = "0-2";
@@ -3267,7 +3215,8 @@
dir = 5
},
/obj/structure/sign/warning/high_voltage{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/structure/table,
/obj/item/toy/prize/powerloader,
@@ -3275,17 +3224,18 @@
/obj/machinery/recharger,
/obj/item/blueprints,
/obj/structure/sign/poster{
- pixel_y = 32
+ pixel_y = 32;
+ dir = 1
},
/obj/machinery/firealarm{
- pixel_y = 24
+ pixel_y = 21
},
/turf/simulated/floor/tiled/techfloor,
/area/ship/trade/maintenance/engineering)
"ib" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/effect/floor_decal/corner/blue{
dir = 6
@@ -3487,7 +3437,7 @@
},
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/power)
@@ -3585,7 +3535,9 @@
/obj/machinery/button/blast_door{
id_tag = "engwindow";
name = "Engine Observation";
- pixel_x = 6
+ pixel_x = 6;
+ dir = 1;
+ directional_offset = null
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -3600,7 +3552,8 @@
/obj/machinery/button/blast_door{
id_tag = "scram";
name = "CORE SCRAM";
- pixel_y = -26
+ pixel_y = -26;
+ dir = 1
},
/obj/machinery/computer/fusion/fuel_control{
dir = 1;
@@ -3622,22 +3575,24 @@
/obj/effect/floor_decal/corner/yellow{
dir = 10
},
-/obj/structure/sign/warning/nosmoking_1{
- pixel_y = -32
- },
/obj/machinery/computer/fusion/gyrotron{
dir = 1;
initial_id_tag = "main_drive"
},
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 32;
+ dir = 4
+ },
+/obj/structure/sign/warning/nosmoking_1{
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled/techfloor,
/area/ship/trade/maintenance/engineering)
"iE" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1;
@@ -3692,11 +3647,8 @@
/area/ship/trade/maintenance/engine/aft)
"iR" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
- id_tag = "engwindow";
- opacity = FALSE
+/obj/machinery/door/blast/regular/open{
+ id_tag = "engwindow"
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -3748,26 +3700,20 @@
icon_state = "map_vent_out";
use_power = 1
},
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/maintenance/atmos)
"iW" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/atmospherics/pipe/manifold/visible/red{
dir = 4
@@ -3878,6 +3824,10 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/sign/warning/radioactive{
+ pixel_y = -32;
+ dir = 1
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/maintenance/power)
"jl" = (
@@ -3898,6 +3848,10 @@
/obj/machinery/power/smes/buildable/max_cap_in_out,
/obj/structure/cable,
/obj/effect/floor_decal/techfloor/orange,
+/obj/structure/sign/warning/radioactive{
+ pixel_y = -32;
+ dir = 1
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/maintenance/power)
"jp" = (
@@ -3986,15 +3940,7 @@
/obj/machinery/door/window/northleft,
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
- id_tag = "radaway";
- opacity = FALSE
- },
-/obj/structure/sign/warning/radioactive{
- pixel_x = -32
- },
-/obj/structure/sign/warning/radioactive{
- pixel_x = 32
+ id_tag = "radaway"
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/power)
@@ -4077,7 +4023,7 @@
"jI" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/machinery/atmospherics/valve/shutoff,
/obj/structure/window/borosilicate_reinforced{
@@ -4141,11 +4087,17 @@
},
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
- id_tag = "radaway";
- opacity = FALSE
+ id_tag = "radaway"
},
/obj/machinery/meter/turf,
+/obj/structure/sign/warning/radioactive{
+ pixel_x = -32;
+ dir = 4
+ },
+/obj/structure/sign/warning/radioactive{
+ pixel_x = 32;
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/power)
"jQ" = (
@@ -4480,7 +4432,8 @@
dir = 4;
id_tag = "bee_star";
pixel_x = 16;
- pixel_y = 26
+ pixel_y = 26;
+ directional_offset = null
},
/turf/space,
/area/ship/trade/shuttle/outgoing/general)
@@ -4518,11 +4471,19 @@
},
/obj/item/deck/tarot,
/obj/machinery/button/blast_door{
- id_tag = "bee_shutters"
+ id_tag = "bee_shutters";
+ directional_offset = null
},
/obj/item/stack/medical/bruise_pack,
/turf/simulated/floor/tiled,
/area/ship/trade/shuttle/outgoing/general)
+"lU" = (
+/obj/structure/sign/warning/docking_area{
+ dir = 4;
+ pixel_x = -34
+ },
+/turf/space,
+/area/space)
"lW" = (
/obj/structure/catwalk,
/obj/structure/handrail{
@@ -4536,7 +4497,8 @@
/area/ship/trade/shuttle/outgoing/general)
"lZ" = (
/obj/structure/sign/department/redcross{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/turf/simulated/floor/plating,
/area/ship/trade/crew/hallway/starboard)
@@ -4581,7 +4543,7 @@
},
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled,
/area/ship/trade/shuttle/outgoing/general)
@@ -4659,7 +4621,7 @@
},
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/machinery/atmospherics/unary/vent_pump/on{
level = 2
@@ -4749,7 +4711,7 @@
dir = 1
},
/turf/space,
-/area/space)
+/area/ship/trade/shuttle/outgoing/general)
"oi" = (
/obj/machinery/vending/snack{
dir = 4
@@ -4837,7 +4799,7 @@
/area/ship/trade/shuttle/outgoing/general)
"pb" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/portable_atmospherics/hydroponics,
/turf/simulated/floor/tiled,
@@ -4857,7 +4819,7 @@
"pt" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled/techmaint,
/area/ship/trade/crew/hallway/port)
@@ -4915,7 +4877,8 @@
},
/obj/machinery/biogenerator,
/obj/machinery/light_switch{
- pixel_x = 22
+ pixel_x = 24;
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/ship/trade/garden)
@@ -5034,26 +4997,20 @@
"rb" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/plating,
/area/ship/trade/garden)
"rp" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/plating,
/area/ship/trade/command/fmate)
@@ -5062,7 +5019,7 @@
/obj/effect/floor_decal/industrial/warning,
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/engine/aft)
@@ -5090,7 +5047,8 @@
icon_state = "0-8"
},
/obj/machinery/newscaster{
- pixel_x = 30
+ pixel_x = 32;
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/ship/trade/command/bridge)
@@ -5154,7 +5112,7 @@
/area/ship/trade/maintenance/engine/aft)
"sj" = (
/obj/machinery/alarm{
- pixel_y = 24
+ pixel_y = 21
},
/obj/machinery/atmospherics/portables_connector{
dir = 1
@@ -5178,11 +5136,8 @@
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/hidden/red,
/obj/effect/paint/sun,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
- id_tag = "bee_shutters";
- opacity = FALSE
+/obj/machinery/door/blast/regular/open{
+ id_tag = "bee_shutters"
},
/turf/simulated/floor/plating,
/area/ship/trade/shuttle/outgoing/general)
@@ -5196,13 +5151,13 @@
/turf/space,
/area/ship/trade/shuttle/outgoing/general)
"sz" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
+ },
+/obj/structure/sign/warning/hot_exhaust{
+ pixel_y = 32
},
/turf/simulated/floor/airless,
/area/ship/trade/maintenance/engine/starboard)
@@ -5215,7 +5170,8 @@
"sB" = (
/obj/effect/floor_decal/industrial/warning,
/obj/structure/sign/warning/fall{
- pixel_x = -32
+ pixel_x = -34;
+ dir = 4
},
/obj/structure/catwalk,
/obj/structure/railing/mapped,
@@ -5302,24 +5258,25 @@
},
/turf/simulated/floor/plating,
/area/ship/trade/shuttle/outgoing/engineering)
+"tG" = (
+/obj/abstract/ramp_sculptor/north,
+/turf/exterior/wall,
+/area/space)
"tV" = (
/turf/space,
/area/ship/trade/command/fmate)
"tW" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/command/fmate)
"uc" = (
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/item/radio/intercom{
@@ -5349,13 +5306,10 @@
/turf/simulated/wall/titanium,
/area/ship/trade/shuttle/outgoing/engineering)
"ul" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/crew/medbay/chemistry)
@@ -5365,7 +5319,7 @@
icon_state = "0-8"
},
/obj/structure/sign/warning/radioactive{
- dir = 4;
+ dir = 8;
pixel_x = 32
},
/turf/simulated/floor/plating,
@@ -5405,7 +5359,7 @@
"vc" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/item/radio/intercom{
dir = 1;
@@ -5433,13 +5387,10 @@
/turf/simulated/floor/airless,
/area/ship/trade/maintenance/engine/starboard)
"vL" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/structure/sign/warning/hot_exhaust{
pixel_y = 32
@@ -5468,9 +5419,7 @@
/obj/structure/table,
/obj/random/smokes,
/obj/item/ashtray/glass,
-/obj/abstract/landmark{
- name = "Observer-Start"
- },
+/obj/abstract/landmark/latejoin/observer,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -5553,7 +5502,7 @@
/area/ship/trade/crew/wash)
"xc" = (
/obj/machinery/firealarm{
- pixel_y = 24
+ pixel_y = 21
},
/obj/structure/cable{
icon_state = "4-8"
@@ -5580,7 +5529,7 @@
/obj/item/roller,
/obj/item/storage/firstaid/adv,
/obj/item/storage/pill_bottle/painkillers,
-/obj/item/storage/pill_bottle/antitox,
+/obj/item/storage/pill_bottle/antitoxins,
/obj/item/storage/pill_bottle/antibiotics,
/obj/item/storage/pill_bottle/burn_meds,
/obj/item/scanner/health,
@@ -5723,7 +5672,7 @@
/obj/structure/curtain/open/shower,
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled/freezer,
/area/ship/trade/crew/toilets)
@@ -5734,13 +5683,10 @@
"zO" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/plating,
/area/ship/trade/command/captain)
@@ -5751,6 +5697,17 @@
},
/turf/simulated/floor/tiled/techfloor,
/area/ship/trade/maintenance/atmos)
+"zY" = (
+/obj/structure/lattice,
+/obj/structure/handrail{
+ dir = 4
+ },
+/obj/structure/sign/warning/docking_area{
+ dir = 4;
+ pixel_x = -34
+ },
+/turf/space,
+/area/space)
"Ab" = (
/obj/machinery/atmospherics/pipe/simple/visible/red{
dir = 6
@@ -5858,7 +5815,7 @@
},
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/tiled,
/area/ship/trade/crew/kitchen)
@@ -5890,7 +5847,8 @@
id_tag = "bee_port_pump"
},
/obj/structure/closet/walllocker/suit{
- dir = 8
+ dir = 8;
+ pixel_x = 32
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/shuttle/outgoing/general)
@@ -5908,11 +5866,8 @@
"BN" = (
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
- id_tag = "bee_shutters";
- opacity = FALSE
+/obj/machinery/door/blast/regular/open{
+ id_tag = "bee_shutters"
},
/obj/effect/paint/black,
/turf/simulated/floor/plating,
@@ -5930,7 +5885,8 @@
/obj/machinery/button/blast_door{
id_tag = "fmate";
pixel_x = 22;
- pixel_y = -2
+ pixel_y = -2;
+ dir = 8
},
/turf/simulated/floor/wood,
/area/ship/trade/command/fmate)
@@ -5952,7 +5908,7 @@
/obj/effect/floor_decal/corner/red/diagonal,
/obj/machinery/vending/dinnerware,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled,
/area/ship/trade/crew/kitchen)
@@ -5966,6 +5922,10 @@
/obj/effect/paint/brown,
/turf/simulated/wall/r_wall/hull,
/area/ship/trade/crew/medbay/chemistry)
+"Cg" = (
+/obj/abstract/ramp_sculptor/east,
+/turf/exterior/wall,
+/area/space)
"Co" = (
/obj/effect/floor_decal/corner/red/diagonal,
/obj/structure/cable{
@@ -5998,7 +5958,8 @@
/obj/item/toy/figure/captain,
/obj/machinery/button/blast_door{
id_tag = "sensor";
- name = "Sensor Shroud"
+ name = "Sensor Shroud";
+ directional_offset = null
},
/obj/item/radio,
/obj/random/drinkbottle,
@@ -6107,7 +6068,8 @@
dir = 8;
id_tag = "bee_port";
pixel_x = -16;
- pixel_y = -26
+ pixel_y = -26;
+ directional_offset = null
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/shuttle/outgoing/general)
@@ -6165,7 +6127,7 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/obj/item/handcuffs,
/obj/item/telebaton,
@@ -6273,7 +6235,7 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/machinery/portable_atmospherics/powered/pump/filled,
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/techfloor,
/area/ship/trade/cargo)
@@ -6303,12 +6265,9 @@
/area/ship/trade/crew/medbay/chemistry)
"FD" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -6317,7 +6276,8 @@
/obj/structure/table,
/obj/machinery/button/blast_door{
id_tag = "scraplock";
- name = "External Lockdown"
+ name = "External Lockdown";
+ directional_offset = null
},
/obj/random_multi/single_item/captains_spare_id,
/obj/item/documents/tradehouse/account,
@@ -6328,7 +6288,7 @@
"FT" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/hallway)
@@ -6397,11 +6357,8 @@
/obj/effect/wallframe_spawn/reinforced/titanium,
/obj/machinery/door/firedoor,
/obj/effect/paint/sun,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
- id_tag = "bee_shutters";
- opacity = FALSE
+/obj/machinery/door/blast/regular/open{
+ id_tag = "bee_shutters"
},
/turf/simulated/floor/plating,
/area/ship/trade/shuttle/outgoing/general)
@@ -6453,11 +6410,11 @@
/area/ship/trade/maintenance/atmos)
"Hc" = (
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/item/bedsheet/medical,
/obj/structure/curtain/open/privacy,
@@ -6519,7 +6476,7 @@
"Ic" = (
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/obj/item/storage/medical_lolli_jar,
/obj/structure/table,
@@ -6536,14 +6493,11 @@
"Im" = (
/obj/structure/table,
/obj/item/chems/food/monkeycube/wrapped,
-/obj/structure/closet/medical_wall{
- name = "pill cabinet";
- pixel_y = -29
+/obj/structure/closet/secure_closet/medical_wall/pills{
+ pixel_y = -32;
+ req_access = null;
+ dir = 1
},
-/obj/item/storage/pill_bottle/antibiotics,
-/obj/item/storage/pill_bottle/painkillers,
-/obj/item/storage/pill_bottle/antitox,
-/obj/item/storage/pill_bottle/burn_meds,
/turf/simulated/floor/tiled/white,
/area/ship/trade/crew/medbay)
"Is" = (
@@ -6555,7 +6509,7 @@
"Iw" = (
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/plating,
/area/ship/trade/crew/hallway/port)
@@ -6581,7 +6535,7 @@
"IC" = (
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/plating,
/area/ship/trade/crew/hallway/starboard)
@@ -6657,7 +6611,8 @@
icon_state = "bulb1"
},
/obj/structure/sign/deck/first{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/obj/structure/handrail{
dir = 8
@@ -6669,7 +6624,8 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/kitchenspike,
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/tiled,
/area/ship/trade/crew/kitchen)
@@ -6697,13 +6653,10 @@
"JI" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/power)
@@ -6749,7 +6702,7 @@
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -6761,7 +6714,7 @@
"Kd" = (
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/structure/table,
/obj/machinery/cell_charger,
@@ -6783,7 +6736,8 @@
/area/ship/trade/command/captain)
"Kl" = (
/obj/machinery/light_switch{
- pixel_x = -25
+ pixel_x = -24;
+ dir = 4
},
/turf/simulated/floor/tiled/techmaint,
/area/ship/trade/crew/hallway/port)
@@ -6811,7 +6765,8 @@
/area/ship/trade/shuttle/outgoing/general)
"KI" = (
/obj/machinery/light_switch{
- pixel_x = -25
+ pixel_x = -24;
+ dir = 4
},
/obj/structure/catwalk,
/obj/structure/handrail{
@@ -6840,7 +6795,7 @@
"KZ" = (
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/plating,
/area/ship/trade/crew/hallway/starboard)
@@ -6858,7 +6813,7 @@
},
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -6923,7 +6878,7 @@
dir = 4
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/freezer,
/area/ship/trade/crew/wash)
@@ -6994,7 +6949,7 @@
dir = 1
},
/turf/space,
-/area/space)
+/area/ship/trade/shuttle/outgoing/general)
"Nc" = (
/obj/structure/disposalpipe/segment{
dir = 4;
@@ -7018,7 +6973,7 @@
dir = 4
},
/obj/machinery/firealarm{
- pixel_y = 24
+ pixel_y = 21
},
/turf/simulated/floor/tiled/freezer,
/area/ship/trade/crew/wash)
@@ -7049,7 +7004,8 @@
/obj/machinery/network/requests_console{
announcementConsole = 1;
department = "Captain";
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/item/radio/intercom{
dir = 4;
@@ -7103,7 +7059,7 @@
pixel_x = -22
},
/obj/machinery/alarm{
- pixel_y = 24
+ pixel_y = 21
},
/turf/simulated/floor/tiled/steel_ridged,
/area/ship/trade/shuttle/outgoing/general)
@@ -7123,7 +7079,7 @@
"Ob" = (
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1;
@@ -7175,25 +7131,19 @@
/obj/machinery/power/terminal,
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/engine/aft)
-"OD" = (
-/obj/structure/catwalk,
-/obj/structure/railing/mapped{
- dir = 1
- },
-/obj/structure/railing/mapped{
- dir = 4
- },
-/turf/space,
-/area/space)
"OP" = (
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/structure/table,
/obj/machinery/reagent_temperature/cooler,
/turf/simulated/floor/tiled/white,
/area/ship/trade/crew/medbay/chemistry)
+"OQ" = (
+/obj/abstract/ramp_sculptor/west,
+/turf/exterior/wall,
+/area/space)
"Pa" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -7212,7 +7162,8 @@
},
/obj/structure/displaycase,
/obj/machinery/newscaster{
- pixel_y = -30
+ pixel_y = -32;
+ dir = 1
},
/turf/simulated/floor/carpet/blue,
/area/ship/trade/command/captain)
@@ -7235,7 +7186,7 @@
"PB" = (
/obj/machinery/alarm{
dir = 8;
- pixel_x = 24
+ pixel_x = 21
},
/obj/structure/cable{
icon_state = "1-2"
@@ -7271,24 +7222,18 @@
/turf/simulated/floor/plating,
/area/ship/trade/shieldbay)
"PH" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/maintenance/power)
"PU" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/item/mollusc/barnacle{
pixel_y = -11
@@ -7312,13 +7257,13 @@
/area/ship/trade/crew/hallway/starboard)
"Ql" = (
/obj/structure/lattice,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
+ },
+/obj/structure/sign/warning/hot_exhaust{
+ pixel_y = 32
},
/turf/simulated/floor/airless,
/area/ship/trade/maintenance/engine/starboard)
@@ -7350,10 +7295,12 @@
pixel_y = -22
},
/obj/machinery/light_switch{
- pixel_x = -25
+ pixel_x = -24;
+ dir = 4
},
/obj/structure/closet/medical_wall/filled{
- pixel_y = -32
+ pixel_y = -32;
+ dir = 1
},
/obj/item/stack/tape_roll/duct_tape,
/obj/item/storage/firstaid/surgery,
@@ -7369,7 +7316,8 @@
/obj/machinery/button/toggle/engine{
id_tag = "tradeship_engine_vent";
name = "engine vent control button";
- pixel_x = 24
+ pixel_x = 24;
+ dir = 8
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/engine/aft)
@@ -7406,7 +7354,7 @@
/obj/item/stool/padded,
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/turf/simulated/floor/wood/yew,
/area/ship/trade/unused)
@@ -7422,13 +7370,10 @@
/turf/space,
/area/ship/trade/shuttle/outgoing/general)
"Rl" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/maintenance/atmos)
@@ -7451,7 +7396,7 @@
/obj/machinery/merchant_pad,
/obj/machinery/firealarm{
dir = 4;
- pixel_x = 24
+ pixel_x = 21
},
/turf/simulated/floor/tiled/techfloor,
/area/ship/trade/cargo)
@@ -7494,25 +7439,24 @@
icon_state = "bulb1"
},
/obj/machinery/newscaster{
- pixel_x = -32
+ pixel_x = -32;
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/ship/trade/garden)
"Sg" = (
/obj/machinery/light,
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -20;
+ dir = 1
},
/turf/simulated/floor/tiled/techmaint,
/area/ship/trade/shieldbay)
"Si" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/turf/simulated/floor/airless,
/area/ship/trade/crew/toilets)
@@ -7525,16 +7469,6 @@
},
/turf/simulated/floor/plating,
/area/ship/trade/shuttle/outgoing/general)
-"Sk" = (
-/obj/structure/catwalk,
-/obj/structure/railing/mapped{
- dir = 1
- },
-/obj/structure/railing/mapped{
- dir = 8
- },
-/turf/space,
-/area/space)
"Sr" = (
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/hallway)
@@ -7555,7 +7489,7 @@
"SI" = (
/obj/machinery/alarm{
dir = 4;
- pixel_x = -24
+ pixel_x = -21
},
/obj/effect/floor_decal/steeldecal/steel_decals6,
/obj/structure/sign/warning/radioactive{
@@ -7586,16 +7520,15 @@
},
/obj/machinery/power/apc{
dir = 1;
- name = "Docking Area APC"
+ name = "Docking Area APC";
+ pixel_y = 22
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
/obj/machinery/light_switch{
- pixel_x = 27
- },
-/obj/structure/sign/warning/radioactive{
- pixel_y = 32
+ pixel_x = 24;
+ dir = 8
},
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/command/hallway)
@@ -7621,6 +7554,10 @@
/obj/effect/paint/sun,
/turf/simulated/wall/titanium,
/area/ship/trade/shuttle/outgoing/engineering)
+"Tv" = (
+/obj/structure/lattice,
+/turf/exterior/wall,
+/area/space)
"Tx" = (
/obj/structure/shuttle/engine/propulsion/burst/right,
/turf/simulated/floor/airless,
@@ -7654,7 +7591,8 @@
/area/ship/trade/command/bridge)
"TR" = (
/obj/structure/sign/deck/first{
- pixel_x = 32
+ pixel_x = 32;
+ dir = 8
},
/turf/simulated/floor/tiled/techmaint,
/area/ship/trade/crew/hallway/starboard)
@@ -7666,13 +7604,10 @@
/area/ship/trade/garden)
"Ue" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/structure/cable{
icon_state = "4-10"
@@ -7698,7 +7633,8 @@
icon_state = "4-8"
},
/obj/machinery/light_switch{
- pixel_y = -25
+ pixel_y = -20;
+ dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/ship/trade/command/bridge)
@@ -7766,7 +7702,7 @@
/obj/structure/cable,
/obj/machinery/power/apc{
name = "south bump";
- pixel_y = -24
+ pixel_y = -22
},
/obj/item/chems/glass/bucket,
/obj/structure/reagent_dispensers/watertank,
@@ -7809,13 +7745,10 @@
/area/ship/trade/maintenance/engine/aft)
"VW" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -7865,7 +7798,7 @@
},
/obj/machinery/firealarm{
dir = 8;
- pixel_x = -24
+ pixel_x = -21
},
/obj/machinery/light{
icon_state = "bulb1"
@@ -7879,7 +7812,8 @@
/obj/machinery/cryopod/lifepod,
/obj/machinery/door/window/southright,
/obj/machinery/computer/cryopod{
- dir = 8
+ dir = 8;
+ pixel_x = 24
},
/turf/simulated/floor/wood,
/area/ship/trade/command/captain)
@@ -7957,13 +7891,10 @@
/area/ship/trade/maintenance/hallway)
"XG" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "scraplock"
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/visible/red{
@@ -7981,11 +7912,8 @@
/area/ship/trade/cargo)
"XX" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
- id_tag = "engwindow";
- opacity = FALSE
+/obj/machinery/door/blast/regular/open{
+ id_tag = "engwindow"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -8048,6 +7976,10 @@
dir = 8
},
/obj/structure/lattice,
+/obj/structure/sign/warning/docking_area{
+ dir = 8;
+ pixel_x = 34
+ },
/turf/space,
/area/space)
"YE" = (
@@ -8129,7 +8061,7 @@
icon_state = "0-4"
},
/obj/item/radio/intercom{
- pixel_y = 22
+ pixel_y = 20
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/maintenance/power)
@@ -9834,7 +9766,7 @@ aa
aa
aa
aa
-Sk
+WM
gN
qv
Sj
@@ -9934,9 +9866,9 @@ aa
aa
aa
aa
-aa
-aa
-aa
+OQ
+OQ
+OQ
xX
aa
aa
@@ -10015,8 +9947,8 @@ aa
aa
aa
aa
-aa
-aa
+tG
+eh
eh
eh
pn
@@ -10097,7 +10029,7 @@ aa
aa
aa
aa
-aa
+tG
eh
ew
ex
@@ -10179,7 +10111,7 @@ aa
aa
aa
aa
-aa
+tG
eh
ex
ex
@@ -10262,7 +10194,7 @@ aa
aa
aa
aa
-aa
+eh
ex
ex
fh
@@ -10572,7 +10504,7 @@ aa
aa
aa
aa
-OD
+Bi
Tb
CV
Wb
@@ -10739,7 +10671,7 @@ aa
aa
aa
aa
-aa
+ct
bA
bI
bA
@@ -10907,7 +10839,7 @@ nZ
bm
bz
cf
-ct
+Mw
aq
aq
aq
@@ -11891,7 +11823,7 @@ nZ
bm
bt
cf
-ct
+Mw
VW
VW
VW
@@ -11973,7 +11905,7 @@ nZ
Mw
bu
bA
-Zv
+zY
cy
cy
cy
@@ -12051,7 +11983,7 @@ aa
aa
aa
aa
-aa
+lU
bA
bw
bA
@@ -12475,9 +12407,9 @@ aa
aa
aa
aa
-aa
-aa
-cy
+eh
+eh
+Tv
eN
Gc
fN
@@ -12556,7 +12488,7 @@ aa
aa
aa
aa
-aa
+tG
eh
eh
eN
@@ -12638,8 +12570,8 @@ aa
aa
aa
aa
-aa
-aa
+tG
+eh
ew
eN
eN
@@ -12720,8 +12652,8 @@ aa
aa
aa
aa
-aa
-aa
+tG
+eh
eh
eh
eN
@@ -12803,9 +12735,9 @@ aa
aa
aa
aa
-aa
-aa
-aa
+Cg
+Cg
+Cg
aa
we
we
diff --git a/maps/tradeship/tradeship-3.dmm b/maps/tradeship/tradeship-3.dmm
index e80dcc50448..cda8b435d76 100644
--- a/maps/tradeship/tradeship-3.dmm
+++ b/maps/tradeship/tradeship-3.dmm
@@ -5,13 +5,10 @@
"ab" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/bridge_unused)
@@ -149,13 +146,10 @@
/area/ship/trade/maintenance/solars)
"au" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
@@ -168,7 +162,8 @@
tag_airpump = "solars_pump";
tag_chamber_sensor = "solars_sensor";
tag_exterior_door = "solars_out";
- tag_interior_door = "solars_in"
+ tag_interior_door = "solars_in";
+ pixel_x = 22
},
/obj/structure/cable{
icon_state = "1-2"
@@ -304,13 +299,10 @@
"aN" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/comms)
@@ -440,7 +432,8 @@
"bc" = (
/obj/machinery/door/firedoor,
/obj/structure/sign/warning/fall{
- pixel_x = 32
+ pixel_x = 34;
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
@@ -453,7 +446,8 @@
/area/space)
"be" = (
/obj/machinery/light_switch{
- pixel_x = 24
+ pixel_x = 24;
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
@@ -643,13 +637,10 @@
"jv" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/bridge_unused)
@@ -699,12 +690,9 @@
/area/ship/trade/bridge_unused)
"ng" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -727,7 +715,8 @@
"oq" = (
/obj/random/trash,
/obj/machinery/power/apc{
- dir = 8
+ dir = 8;
+ pixel_x = -22
},
/obj/structure/cable{
icon_state = "0-2"
@@ -802,19 +791,17 @@
},
/obj/machinery/power/apc{
dir = 1;
- name = "Communications APC"
+ name = "Communications APC";
+ pixel_y = 22
},
/obj/structure/cable{
icon_state = "0-2"
},
/obj/machinery/light_switch{
- pixel_x = 32
+ pixel_x = 24;
+ dir = 8
},
/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
/obj/structure/window/reinforced{
dir = 8
},
@@ -836,7 +823,8 @@
"wc" = (
/obj/effect/floor_decal/steeldecal/steel_decals6,
/obj/machinery/power/apc{
- dir = 1
+ dir = 1;
+ pixel_y = 22
},
/obj/structure/cable{
icon_state = "0-2";
@@ -925,13 +913,10 @@
/turf/simulated/floor/bluegrid,
/area/ship/trade/comms)
"Db" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/airless,
/area/ship/trade/bridge_unused)
@@ -974,6 +959,12 @@
/obj/structure/tape_barricade/engineering,
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/bridge_unused)
+"EO" = (
+/obj/machinery/computer/message_monitor{
+ dir = 1
+ },
+/turf/simulated/floor/bluegrid,
+/area/ship/trade/comms)
"Fe" = (
/obj/structure/railing/mapped{
dir = 1
@@ -1035,7 +1026,8 @@
icon_state = "1-2"
},
/obj/machinery/light_switch{
- pixel_x = 32
+ pixel_x = 24;
+ dir = 8
},
/turf/simulated/floor/tiled/dark,
/area/ship/trade/command/bridge_upper)
@@ -1054,7 +1046,8 @@
dir = 8
},
/obj/structure/sign/warning/fall{
- pixel_x = -32
+ pixel_x = -34;
+ dir = 4
},
/turf/simulated/floor/plating,
/area/ship/trade/maintenance/solars)
@@ -1099,12 +1092,9 @@
"PJ" = (
/obj/machinery/door/firedoor,
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/command/bridge_upper)
@@ -1112,13 +1102,10 @@
/turf/simulated/floor/tiled/monotile,
/area/ship/trade/command/bridge_upper)
"QK" = (
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/airless,
/area/ship/trade/comms)
@@ -1157,12 +1144,9 @@
/area/ship/trade/comms)
"SQ" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -1176,13 +1160,10 @@
"Tx" = (
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
+/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/turf/simulated/floor/plating,
/area/ship/trade/comms)
@@ -1197,9 +1178,7 @@
dir = 1;
pixel_y = -32
},
-/obj/machinery/computer/message_monitor{
- dir = 4
- },
+/obj/machinery/commsrelay,
/turf/simulated/floor/bluegrid,
/area/ship/trade/comms)
"UY" = (
@@ -1214,12 +1193,9 @@
/area/ship/trade/maintenance/solars)
"Vp" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
- name = "External Blast Doors";
- opacity = FALSE
+ name = "External Blast Doors"
},
/obj/effect/wallframe_spawn/reinforced,
/turf/simulated/floor/plating,
@@ -1265,10 +1241,6 @@
/turf/simulated/floor/reinforced/airless,
/area/space)
"ZD" = (
-/obj/machinery/alarm{
- dir = 8;
- pixel_x = 24
- },
/obj/structure/window/reinforced{
dir = 8
},
@@ -1276,6 +1248,10 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/ship/trade/comms)
"ZT" = (
@@ -1293,7 +1269,8 @@
dir = 4
},
/obj/machinery/light_switch{
- pixel_x = 32
+ pixel_x = 24;
+ dir = 8
},
/obj/structure/lattice,
/turf/simulated/open,
@@ -4275,7 +4252,7 @@ Su
Su
Su
Su
-Su
+EO
ng
ax
ax
diff --git a/maps/tradeship/tradeship.dm b/maps/tradeship/tradeship.dm
index a08e00d84e2..69c64093b78 100644
--- a/maps/tradeship/tradeship.dm
+++ b/maps/tradeship/tradeship.dm
@@ -1,5 +1,9 @@
#if !defined(USING_MAP_DATUM)
+ #ifdef UNIT_TEST
+ #include "../../code/unit_tests/offset_tests.dm"
+ #endif
+
#include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm"
#include "../../mods/content/mundane.dm"
diff --git a/maps/tradeship/tradeship_spawnpoints.dm b/maps/tradeship/tradeship_spawnpoints.dm
index 9a93e28df93..054216b46fe 100644
--- a/maps/tradeship/tradeship_spawnpoints.dm
+++ b/maps/tradeship/tradeship_spawnpoints.dm
@@ -1,38 +1,29 @@
-var/global/list/latejoin_cryo_two = list()
-var/global/list/latejoin_cryo_captain = list()
-/obj/abstract/landmark/latejoin/cryo_two/add_loc()
- global.latejoin_cryo_two |= get_turf(src)
-
-/obj/abstract/landmark/latejoin/cryo_captain/add_loc()
- global.latejoin_cryo_captain |= get_turf(src)
-
/datum/map/tradeship
- allowed_spawns = list(
+ allowed_latejoin_spawns = list(
/decl/spawnpoint/cryo,
/decl/spawnpoint/cryo/two,
/decl/spawnpoint/cyborg,
- /decl/spawnpoint/cryo/captain
)
default_spawn = /decl/spawnpoint/cryo
/decl/spawnpoint/cryo
name = "Port Cryogenic Storage"
- msg = "has completed revival in the port cryogenics bay"
+ spawn_announcement = "has completed revival in the port cryogenics bay"
disallow_job = list(/datum/job/tradeship_robot)
/decl/spawnpoint/cryo/two
name = "Starboard Cryogenic Storage"
- msg = "has completed revival in the starboard cryogenics bay"
+ spawn_announcement = "has completed revival in the starboard cryogenics bay"
+ uid = "spawn_cryo_two"
-/decl/spawnpoint/cryo/two/Initialize()
- . = ..()
- turfs = global.latejoin_cryo_two
+/obj/abstract/landmark/latejoin/cryo_two
+ spawn_decl = /decl/spawnpoint/cryo/two
/decl/spawnpoint/cryo/captain
name = "Captain Compartment"
- msg = "has completed revival in the captain compartment"
+ spawn_announcement = "has completed revival in the captain compartment"
restrict_job = list(/datum/job/tradeship_captain)
+ uid = "spawn_cryo_captain"
-/decl/spawnpoint/cryo/captain/Initialize()
- . = ..()
- turfs = global.latejoin_cryo_captain
+/obj/abstract/landmark/latejoin/cryo_captain
+ spawn_decl = /decl/spawnpoint/cryo/captain
diff --git a/maps/~mapsystem/maps.dm b/maps/~mapsystem/maps.dm
index 1133f421c16..461972f408e 100644
--- a/maps/~mapsystem/maps.dm
+++ b/maps/~mapsystem/maps.dm
@@ -68,12 +68,11 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
// second level maps from program friendly display names ("Picnic Area") to program string ids ("picnicarea")
// as defined in holodeck_programs
var/list/holodeck_restricted_programs = list() // as above... but EVIL!
+ var/list/holodeck_default_program = list() // map of program list string ids to default program string id
+ var/list/holodeck_off_program = list() // as above... but for being off i guess
- var/allowed_spawns = list(
- /decl/spawnpoint/arrivals,
- /decl/spawnpoint/gateway,
- /decl/spawnpoint/cryo,
- /decl/spawnpoint/cyborg
+ var/allowed_latejoin_spawns = list(
+ /decl/spawnpoint/arrivals
)
var/default_spawn = /decl/spawnpoint/arrivals
@@ -185,12 +184,12 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable
var/datum/job/J = default_job_type
default_job_title = initial(J.title)
- if(default_spawn && !(default_spawn in allowed_spawns))
+ if(default_spawn && !(default_spawn in allowed_latejoin_spawns))
PRINT_STACK_TRACE("Map datum [type] has default spawn point [default_spawn] not in the allowed spawn list.")
- for(var/spawn_type in allowed_spawns)
- allowed_spawns -= spawn_type
- allowed_spawns += GET_DECL(spawn_type)
+ for(var/spawn_type in allowed_latejoin_spawns)
+ allowed_latejoin_spawns -= spawn_type
+ allowed_latejoin_spawns += GET_DECL(spawn_type)
if(!SSmapping.map_levels)
SSmapping.map_levels = SSmapping.station_levels.Copy()
diff --git a/maps/~mapsystem/maps_unit_testing.dm b/maps/~mapsystem/maps_unit_testing.dm
index fe0f90121e7..025460d9724 100644
--- a/maps/~mapsystem/maps_unit_testing.dm
+++ b/maps/~mapsystem/maps_unit_testing.dm
@@ -38,5 +38,9 @@
var/list/area_purity_test_exempt_areas = list()
+ /// A list of disposals tags (sort_type var) that aren't expected to have outputs.
+ var/list/disconnected_disposals_tags = list()
+
/// A list of lists, of the format ((x, y, z, dir),).
var/list/disconnected_wires_test_exempt_turfs = list()
+
diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm
index 4a6b98cb20a..a0ccc54bb2d 100644
--- a/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm
+++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm
@@ -292,7 +292,7 @@
/area/lar_maria/cells)
"aV" = (
/obj/structure/bed/padded,
-/obj/item/contraband/poster,
+/obj/item/poster,
/turf/simulated/floor/tiled,
/area/lar_maria/cells)
"aW" = (
@@ -318,7 +318,6 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/tiled,
@@ -347,7 +346,6 @@
/obj/machinery/door/window/eastright,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/plating,
@@ -363,7 +361,6 @@
/obj/machinery/door/window/westleft,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/plating,
@@ -489,7 +486,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/tiled,
@@ -511,7 +507,6 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/plating,
@@ -676,7 +671,6 @@
/obj/abstract/landmark/corpse/lar_maria/test_subject,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/plating,
@@ -1042,7 +1036,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/plating,
@@ -1084,7 +1077,6 @@
/obj/effect/decal/cleanable/blood,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/turf/simulated/floor/plating,
@@ -1104,7 +1096,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "CellsBD"
},
/turf/simulated/floor/plating,
@@ -1125,7 +1116,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "CellsBD"
},
/turf/simulated/floor/plating,
@@ -1262,7 +1252,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "CellsBD"
},
/turf/simulated/floor/plating,
@@ -1280,7 +1269,6 @@
/obj/effect/decal/cleanable/blood,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "CellsBD"
},
/turf/simulated/floor/plating,
@@ -1397,7 +1385,6 @@
/obj/effect/wallframe_spawn/reinforced,
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "CellsBD"
},
/turf/simulated/floor/plating,
@@ -2104,7 +2091,6 @@
/obj/effect/decal/cleanable/blood,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/obj/structure/cable{
@@ -2283,7 +2269,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "CellsBD"
},
/obj/structure/cable{
@@ -2319,7 +2304,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "CellsBD"
},
/obj/structure/cable{
@@ -2485,7 +2469,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "VirAccessBD"
},
/turf/simulated/floor/tiled,
@@ -2529,7 +2512,7 @@
/area/lar_maria/cells)
"gC" = (
/obj/structure/closet/crate,
-/obj/item/contraband/poster,
+/obj/item/poster,
/obj/item/inflatable_duck,
/turf/simulated/floor/plating,
/area/lar_maria/cells)
@@ -2628,7 +2611,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "VirAccessBD"
},
/turf/simulated/floor/tiled,
@@ -2806,12 +2788,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_ld_BD"
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_dock_BD"
},
/turf/simulated/floor/plating,
@@ -2863,7 +2843,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_dock_BD"
},
/turf/simulated/floor/tiled,
@@ -2909,7 +2888,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "VirAccessBD"
},
/turf/simulated/floor/tiled,
@@ -3031,7 +3009,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "VirAccessBD"
},
/turf/simulated/floor/tiled,
@@ -3058,7 +3035,7 @@
/area/lar_maria/cells)
"hW" = (
/obj/structure/table/steel_reinforced,
-/obj/item/contraband/poster,
+/obj/item/poster,
/turf/simulated/floor/plating,
/area/lar_maria/cells)
"hX" = (
@@ -3138,7 +3115,6 @@
},
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "VirAccessBD"
},
/obj/structure/cable{
@@ -3297,7 +3273,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/blast/regular/open{
dir = 2;
- icon_state = "pdoor0";
id_tag = "VirAccessBD"
},
/turf/simulated/floor/tiled,
@@ -3433,7 +3408,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "Cells_dock_BD"
},
/turf/simulated/floor/plating,
diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm
index 7e97ebf1f82..62b666d14e0 100644
--- a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm
+++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm
@@ -812,7 +812,7 @@
/area/lar_maria/library)
"cs" = (
/obj/structure/bookcase,
-/obj/item/book/manual/stasis,
+/obj/item/book/fluff/stasis,
/turf/simulated/floor/tiled,
/area/lar_maria/library)
"cu" = (
@@ -831,8 +831,8 @@
/area/lar_maria/library)
"cy" = (
/obj/structure/bookcase,
-/obj/item/book/manual/anomaly_spectroscopy,
-/obj/item/book/manual/anomaly_testing,
+/obj/item/book/fluff/anomaly_spectroscopy,
+/obj/item/book/fluff/anomaly_testing,
/turf/simulated/floor/tiled,
/area/lar_maria/library)
"cz" = (
@@ -1235,7 +1235,7 @@
/area/lar_maria/library)
"dM" = (
/obj/structure/table,
-/obj/machinery/faxmachine,
+/obj/machinery/faxmachine/mapped,
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/machinery/alarm{
dir = 8;
diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria.dm b/mods/content/corporate/away_sites/lar_maria/lar_maria.dm
index 753bfa58244..59f75b91501 100644
--- a/mods/content/corporate/away_sites/lar_maria/lar_maria.dm
+++ b/mods/content/corporate/away_sites/lar_maria/lar_maria.dm
@@ -54,8 +54,7 @@
/mob/living/simple_animal/hostile/lar_maria/test_subject
name = "test subject"
desc = "Sick, filthy, angry and probably crazy human in an orange robe."
- maxHealth = 40
- health = 40
+ mob_default_max_health = 40
corpse = /obj/abstract/landmark/corpse/lar_maria/test_subject
icon = 'mods/content/corporate/away_sites/lar_maria/lar_maria_test_subject.dmi'
@@ -88,8 +87,7 @@
/mob/living/simple_animal/hostile/lar_maria/guard//angry guards armed with batons and shotguns. Still bite
name = "security"
desc = "Guard dressed at Zeng-Hu Pharmaceuticals uniform."
- maxHealth = 60
- health = 60
+ mob_default_max_health = 60
natural_weapon = /obj/item/baton
weapon = /obj/item/baton
corpse = /obj/abstract/landmark/corpse/lar_maria/zhp_guard
@@ -124,8 +122,7 @@
name = "virologist"
desc = "Virologist dressed at Zeng-Hu Pharmaceuticals uniform."
icon = 'mods/content/corporate/away_sites/lar_maria/lar_maria_virologist_m.dmi'
- maxHealth = 50
- health = 50
+ mob_default_max_health = 50
corpse = /obj/abstract/landmark/corpse/lar_maria/virologist
/obj/abstract/landmark/corpse/lar_maria/virologist
diff --git a/mods/content/corporate/clothing/outfits.dm b/mods/content/corporate/clothing/outfits.dm
index 9d21557b638..969e176164c 100644
--- a/mods/content/corporate/clothing/outfits.dm
+++ b/mods/content/corporate/clothing/outfits.dm
@@ -46,16 +46,15 @@
/decl/hierarchy/outfit/death_command
name = "Spec Ops - Death commando"
-/decl/hierarchy/outfit/death_command/equip(mob/living/carbon/human/H, rank, assignment, equip_adjustments)
+/decl/hierarchy/outfit/death_command/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
var/decl/special_role/deathsquad = GET_DECL(/decl/special_role/deathsquad)
- deathsquad.equip(H)
+ deathsquad.equip_role(H)
return 1
/decl/hierarchy/outfit/syndicate_command
name = "Spec Ops - Syndicate commando"
-/decl/hierarchy/outfit/syndicate_command/equip(mob/living/carbon/human/H, rank, assignment, equip_adjustments)
+/decl/hierarchy/outfit/syndicate_command/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
var/decl/special_role/commandos = GET_DECL(/decl/special_role/deathsquad/mercenary)
- commandos.equip(H)
+ commandos.equip_role(H)
return 1
-
diff --git a/mods/content/corporate/clothing/rigs/ert.dm b/mods/content/corporate/clothing/rigs/ert.dm
index 05ff41016fe..091a660e927 100644
--- a/mods/content/corporate/clothing/rigs/ert.dm
+++ b/mods/content/corporate/clothing/rigs/ert.dm
@@ -52,7 +52,6 @@
)
/obj/item/clothing/head/helmet/space/rig/ert
- light_overlay = "helmet_light_dual"
camera = /obj/machinery/camera/network/ert
icon = 'mods/content/corporate/icons/rigs/commander/helmet.dmi'
/obj/item/clothing/suit/space/rig/ert
diff --git a/mods/content/corporate/datum/ai_laws.dm b/mods/content/corporate/datum/ai_laws.dm
index 9029327ae00..380101d48cc 100644
--- a/mods/content/corporate/datum/ai_laws.dm
+++ b/mods/content/corporate/datum/ai_laws.dm
@@ -1,7 +1,7 @@
/obj/item/aiModule/nanotrasen // -- TLE
name = "'Corporate Default' Core AI Module"
desc = "A 'Corporate Default' Core AI Module: 'Reconfigures the AI's core laws.'."
- origin_tech = "{'programming':3,'materials':4}"
+ origin_tech = @'{"programming":3,"materials":4}'
laws = new/datum/ai_laws/nanotrasen
/datum/ai_laws/nanotrasen
@@ -18,7 +18,7 @@
/obj/item/aiModule/corp
name = "\improper 'Corporate' core AI module"
desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'."
- origin_tech = "{'programming':3,'materials':4}"
+ origin_tech = @'{"programming":3,"materials":4}'
laws = new/datum/ai_laws/corporate
/datum/ai_laws/corporate
@@ -51,5 +51,5 @@
/obj/item/aiModule/dais
name = "\improper 'DAIS Experimental' core AI module"
desc = "A 'DAIS Experimental' Core AI Module: 'Reconfigures the AI's core laws.'."
- origin_tech = "{'programming':4}"
+ origin_tech = @'{"programming":4}'
laws = new/datum/ai_laws/dais()
diff --git a/mods/content/corporate/datum/antagonists/commando.dm b/mods/content/corporate/datum/antagonists/commando.dm
index e99fa97cedd..c8069877986 100644
--- a/mods/content/corporate/datum/antagonists/commando.dm
+++ b/mods/content/corporate/datum/antagonists/commando.dm
@@ -29,14 +29,13 @@
)
/obj/item/encryptionkey/hacked
- icon_state = "cypherkey"
can_decrypt = list(access_hacked)
- origin_tech = "{'esoteric':3}"
+ origin_tech = @'{"esoteric":3}'
/obj/item/encryptionkey/hacked/Initialize(ml, material_key)
. = ..()
can_decrypt |= get_all_station_access()
/obj/item/radio/headset/hacked
- origin_tech = "{'esoteric':3}"
+ origin_tech = @'{"esoteric":3}'
encryption_keys = list(/obj/item/encryptionkey/hacked)
diff --git a/mods/content/corporate/datum/antagonists/deathsquad.dm b/mods/content/corporate/datum/antagonists/deathsquad.dm
index 2a0950a48a7..6ead8bb5b28 100644
--- a/mods/content/corporate/datum/antagonists/deathsquad.dm
+++ b/mods/content/corporate/datum/antagonists/deathsquad.dm
@@ -48,7 +48,7 @@
l_pocket = /obj/item/pinpointer
r_pocket = /obj/item/disk/nuclear
-/decl/special_role/deathsquad/equip(var/mob/living/carbon/human/player)
+/decl/special_role/deathsquad/equip_role(var/mob/living/carbon/human/player)
if (player.mind == leader)
default_outfit = /decl/hierarchy/outfit/commando/leader
else
diff --git a/mods/content/corporate/datum/loadout.dm b/mods/content/corporate/datum/loadout.dm
index 5d33e0adf7f..096b799893c 100644
--- a/mods/content/corporate/datum/loadout.dm
+++ b/mods/content/corporate/datum/loadout.dm
@@ -20,7 +20,7 @@
/decl/loadout_option/suit/labcoat_corp
name = "labcoat, corporate colors"
path = /obj/item/clothing/suit/storage/toggle/labcoat/science
- flags = GEAR_HAS_TYPE_SELECTION
+ loadout_flags = GEAR_HAS_TYPE_SELECTION
/decl/loadout_option/uniform/corporate
name = "corporate uniform selection"
@@ -50,22 +50,22 @@
/decl/loadout_option/uniform/corp_exec
name = "corporate colours, senior researcher"
path = /obj/item/clothing/under/executive
- flags = GEAR_HAS_TYPE_SELECTION
+ loadout_flags = GEAR_HAS_TYPE_SELECTION
/decl/loadout_option/uniform/corp_overalls
name = "corporate colours, coveralls"
path = /obj/item/clothing/under/work
- flags = GEAR_HAS_TYPE_SELECTION
+ loadout_flags = GEAR_HAS_TYPE_SELECTION
/decl/loadout_option/uniform/corp_flight
name = "corporate colours, flight suit"
path = /obj/item/clothing/under/pilot
- flags = GEAR_HAS_TYPE_SELECTION
+ loadout_flags = GEAR_HAS_TYPE_SELECTION
/decl/loadout_option/uniform/corp_exec_jacket
name = "corporate colours, liason suit"
path = /obj/item/clothing/under/suit_jacket/corp
- flags = GEAR_HAS_TYPE_SELECTION
+ loadout_flags = GEAR_HAS_TYPE_SELECTION
/decl/loadout_option/suit/nanotrasen_poncho
name = "poncho, NanoTrasen"
diff --git a/mods/content/corporate/datum/robolimbs.dm b/mods/content/corporate/datum/robolimbs.dm
index 8f2e54ef0df..841249d2836 100644
--- a/mods/content/corporate/datum/robolimbs.dm
+++ b/mods/content/corporate/datum/robolimbs.dm
@@ -5,7 +5,7 @@
bodytype_category = BODYTYPE_HUMANOID
material = /decl/material/solid/metal/aluminium
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
/decl/bodytype/prosthetic/bishop/rook
@@ -39,7 +39,7 @@
bodytype_category = BODYTYPE_HUMANOID
material = /decl/material/solid/metal/aluminium
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
/decl/bodytype/prosthetic/xion/econo
@@ -49,7 +49,7 @@
bodytype_category = BODYTYPE_HUMANOID
material = /decl/material/solid/metal/aluminium
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
/decl/bodytype/prosthetic/wardtakahashi
@@ -60,7 +60,7 @@
bodytype_category = BODYTYPE_HUMANOID
material = /decl/material/solid/metal/aluminium
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
/decl/bodytype/prosthetic/morpheus
@@ -88,7 +88,7 @@
// todo: add synthflesh material?
material = /decl/material/solid/metal/aluminium
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
/decl/bodytype/prosthetic/veymed/masculine
@@ -116,7 +116,7 @@
bodytype_category = BODYTYPE_HUMANOID
material = /decl/material/solid/metal/aluminium
matter = list(
- /decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY
+ /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY
)
/decl/bodytype/prosthetic/nanotrasen
@@ -124,7 +124,7 @@
desc = "This limb is made from a cheap polymer."
icon_base = 'mods/content/corporate/icons/cyberlimbs/nanotrasen/nanotrasen_main.dmi'
bodytype_category = BODYTYPE_HUMANOID
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
DEFINE_ROBOLIMB_DESIGNS(/decl/bodytype/prosthetic/shellguard, shellguard)
DEFINE_ROBOLIMB_DESIGNS(/decl/bodytype/prosthetic/nanotrasen, nanotrasen)
diff --git a/mods/content/corporate/icons/lunchbox_dais.dmi b/mods/content/corporate/icons/lunchbox_dais.dmi
new file mode 100644
index 00000000000..ce2477fef72
Binary files /dev/null and b/mods/content/corporate/icons/lunchbox_dais.dmi differ
diff --git a/mods/content/corporate/icons/lunchbox_nanotrasen.dmi b/mods/content/corporate/icons/lunchbox_nanotrasen.dmi
new file mode 100644
index 00000000000..1a315285862
Binary files /dev/null and b/mods/content/corporate/icons/lunchbox_nanotrasen.dmi differ
diff --git a/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi b/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi
index 4a9df55f933..e312d83b55b 100644
Binary files a/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi and b/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi differ
diff --git a/mods/content/corporate/icons/rigs/commander/helmet.dmi b/mods/content/corporate/icons/rigs/commander/helmet.dmi
index 99bad70b899..896195fe1a8 100644
Binary files a/mods/content/corporate/icons/rigs/commander/helmet.dmi and b/mods/content/corporate/icons/rigs/commander/helmet.dmi differ
diff --git a/mods/content/corporate/icons/rigs/engineer/helmet.dmi b/mods/content/corporate/icons/rigs/engineer/helmet.dmi
index e7559d0a6a4..0c63f505f2f 100644
Binary files a/mods/content/corporate/icons/rigs/engineer/helmet.dmi and b/mods/content/corporate/icons/rigs/engineer/helmet.dmi differ
diff --git a/mods/content/corporate/icons/rigs/janitor/helmet.dmi b/mods/content/corporate/icons/rigs/janitor/helmet.dmi
index ab136668772..1f3b3bdc7a6 100644
Binary files a/mods/content/corporate/icons/rigs/janitor/helmet.dmi and b/mods/content/corporate/icons/rigs/janitor/helmet.dmi differ
diff --git a/mods/content/corporate/icons/rigs/medic/helmet.dmi b/mods/content/corporate/icons/rigs/medic/helmet.dmi
index 2a8c3f0d258..9d3aa70b3cf 100644
Binary files a/mods/content/corporate/icons/rigs/medic/helmet.dmi and b/mods/content/corporate/icons/rigs/medic/helmet.dmi differ
diff --git a/mods/content/corporate/icons/rigs/security/helmet.dmi b/mods/content/corporate/icons/rigs/security/helmet.dmi
index f31f3f84cb0..df061882fbf 100644
Binary files a/mods/content/corporate/icons/rigs/security/helmet.dmi and b/mods/content/corporate/icons/rigs/security/helmet.dmi differ
diff --git a/mods/content/corporate/items/clutter.dm b/mods/content/corporate/items/clutter.dm
index f81ae0c829a..2a3f6e2772d 100644
--- a/mods/content/corporate/items/clutter.dm
+++ b/mods/content/corporate/items/clutter.dm
@@ -6,14 +6,12 @@
/obj/item/storage/lunchbox/dais
name = "\improper DAIS brand lunchbox"
- icon_state = "lunchbox_dais"
- item_state = "toolbox_blue"
+ icon = 'mods/content/corporate/icons/lunchbox_dais.dmi'
desc = "A little lunchbox. This one is branded with the Deimos Advanced Information Systems logo!"
/obj/item/storage/lunchbox/nt
name = "\improper NanoTrasen brand lunchbox"
- icon_state = "lunchbox_nanotrasen"
- item_state = "toolbox_blue"
+ icon = 'mods/content/corporate/icons/lunchbox_nanotrasen.dmi'
desc = "A little lunchbox. This one is branded with the NanoTrasen logo!"
/obj/item/storage/lunchbox/nt/filled
diff --git a/mods/content/corporate/items/documents.dm b/mods/content/corporate/items/documents.dm
index 13cd7e1ded3..d722d5c411a 100644
--- a/mods/content/corporate/items/documents.dm
+++ b/mods/content/corporate/items/documents.dm
@@ -4,107 +4,111 @@
description_antag = "A conglomerate of powerful corporations seems to be wanting to create weaponized xenobiological species. Probably as a form of WMD, by your best guess."
icon_state = "docs_verified"
-/obj/item/book/manual/nt_regs
+/obj/item/book/fluff/nt_regs
name = "Corporate Regulations"
desc = "A set of corporate guidelines for employees of a megacorporation."
icon_state = "booknanoregs"
author = "Employee Materials"
title = "Corporate Regulations"
- url = "Corporate_Regulations"
+ fluff_text = "The book is empty..."
/obj/item/book/union_charter
name = "\improper Union Charter"
+ unique = TRUE
title = "Union Charter of Workplace Rights"
author = "Corporate Union"
- dat = {"Corporate Union Charter of Workplace Rights
-
- 0. Summary
-
- As a union representative, you are required to uphold the interests of contracted workers on your station or vessel. You are empowered to inspect workplaces and instigate cessation of contracted work when on green alert, with diminishing powers during a state of emergency. You do not have authority or jurisdiction over government or military workers, or any workers who are not card-carrying signatories to this Charter.
- 1. Introduction
- This Charter of Rights sets out the rights and responsibilities of all workplace parties in the provision of decent and fair health, safety, compensation and rehabilitation systems and practices within affiliated workplaces. Regardless of jurisdiction, changes to occupational health and safety, compensation and rehabilitation law must not result in a diminution of the rights and entitlements of any worker.
- This Charter does not apply to staff who are not signatory to the Solar Employee General Award, or are signatory to other workplace regulatory documents such as the internal protocols of your local legislative body. Union representatives must take care to ensure that their operations on mixed jurisdiction stations and vessels are restricted to those areas that have a union worker, contractor or labourer presence.
- Workers must not be adversely affected by any employer moving between jurisdictions in relation to their OHS and workers compensation entitlements. Any proposed move between jurisdictions will only occur following genuine consultation and agreement with workers and their representatives and a process of public review, including public tribunal hearings.
- Consistent with OHS and Worker Compensation Policy and interstellar standards, Solar law must ensure healthy and safe workplaces and a compensation and rehabilitation system which ensures that no worker is disadvantaged should they be injured at work.
- All workers have the right to join a genuine trade union. Union organised workplaces are safer workplaces.
- 2. Security Levels
-
- On stations or vessels employing the standard Security Alert Level protocol, the following conditions apply:
-
- - On green alert, all particulars of this charter are considered valid and applicable.
- - Above green alert, union representatives are not permitted to conduct workplace inspections and are advised, but not required, to cease all union meetings or strike proceedings.
- - On red alert or above, this charter is suspended, and all union representatives and workers must follow directives from personnel authorized under red alert protocol.
-
- 3. Representation
-
- Every worker has the right to be represented on health, safety, compensation, rehabilitation and return to work issues, by their elected Union Representative and their union. Every worker has the right to elect health and safety representatives.
- Unions have the right to:
-
- - Enter workplaces on health and safety issues;
- - Investigate breaches of health and safety laws;
- - Represent members and prospective members;
- - Initiate investigations and prosecutions for occupational health and safety breaches;
- - Initiate cessation of work in unsafe areas; and
- - Access all relevant information and reports.
-
- Union Representatives have the right to:
-
- - Be democratically elected by a process determined by workers, in conjunction with their union;
- - Utilise legal rights and powers to represent workers on health and safety matters;
- - Inspect the workplace, within the agreed-upon confines previously noted;
- - Access relevant information and be informed of all incidents;
- - Be consulted by the employer before workplace changes occur that may affect health and safety;
- - Issue notices when breaches are detected;
- - Call in government inspectors;
- - Direct workers to cease work where there is a belief of immediate risk to health and safety;
- - Seek resolution of health and safety issues;
- - Perform all OHS activities on paid time and have adequate facilities;
- - Be assisted by any person at any time in the execution of union duties;
- - Be protected by law from discrimination, harassment, bullying, intimidation and prosecution;
- - Appeal any decision of a regulator or court regarding any health and safety, compensation or rehabilitation matter.
-
- 4. Workers
-
- Every worker has the right to:
-
- - A safe and healthy workplace;
- - Travel to and from work sites in safety and with appropriate protections;
- - Return home from work free of injury or illness;
- - Enjoy the highest level of protection, representation, compensation and rehabilitation, regardless of the jurisdiction within which they work;
- - Take collective action over any health and safety matter, including the right to cease unsafe or unhealthy work; and
- - Discuss, negotiate and be consulted and involved in all issues affecting their health, safety and welfare.
-
- All workers (or prospective workers), including health and safety representatives, will be protected by law from discrimination, harassment, bullying or detriment to their employment because they have raised a health and safety issue, lodged a compensation claim or been involved in consultation on workplace health and safety matters.
- 4. Employer Responsibilities
-
- Persons who control, manage or own workplaces have an absolute duty of care without limitation to provide and maintain safe and healthy work environments. Employers will not shift jurisdictions to attempt to avoid their OHS and workers compensation responsibilities and obligations. Employers are subject to all the obligations and responsibilities contained within this Charter.
- 5. Compensation
-
- Following a physical or psychological injury, all workers have the right to a fair, just and equitable compensation system, which promotes the best medical and like support, the most effective rehabilitation for injured workers and facilitates a safe return to work that offers genuine job security. Workers' compensation standards are to:
- Be available to all members of the workforce;
- Provide compensation for all injuries that arise from travel to, from or during work including and during recess breaks;
- Be available upon the death of a worker and for dependants of that worker;
- Be based on the 100% replacement of loss of income;
- Provide total cost of medical rehabilitation and other related expenses;
- Provide lump sum compensation for permanent disability;
- Ensure common law rights;
- Support rehabilitation and return to work;
- Ensure that workers are entitled to timely and effective claim determination and dispute resolution processes;
- Ensure the worker has access to the doctor of their choice; and
- Not be eroded by companies seeking to self-insure in order to obtain lower OHS and worker's compensation entitlements for workers.
-
- 6. Rehabilitation
-
- All workers have the right to return to safe, suitable, meaningful and sustainable work, following the provision of quality rehabilitation services, commensurate to need. Rehabilitation will include the right to:
-
- - Union representation;
- - Fair, equitable, high quality, appropriate, effective and timely rehabilitation plans and services;
- - Consultation about all aspects of rehabilitation;
- - All documentation and information relating to their rehabilitation;
- - Privacy in the management of all records and information; and
- - Personal choice of medical provider and rehabilitation service, where facilities permit.
-
-
+ dat = {"
+
+ Corporate Union Charter of Workplace Rights
+
+
+ 0. Summary
+
+ As a union representative, you are required to uphold the interests of contracted workers on your station or vessel. You are empowered to inspect workplaces and instigate cessation of contracted work when on green alert, with diminishing powers during a state of emergency. You do not have authority or jurisdiction over government or military workers, or any workers who are not card-carrying signatories to this Charter.
+ 1. Introduction
+ This Charter of Rights sets out the rights and responsibilities of all workplace parties in the provision of decent and fair health, safety, compensation and rehabilitation systems and practices within affiliated workplaces. Regardless of jurisdiction, changes to occupational health and safety, compensation and rehabilitation law must not result in a diminution of the rights and entitlements of any worker.
+ This Charter does not apply to staff who are not signatory to the Solar Employee General Award, or are signatory to other workplace regulatory documents such as the internal protocols of your local legislative body. Union representatives must take care to ensure that their operations on mixed jurisdiction stations and vessels are restricted to those areas that have a union worker, contractor or labourer presence.
+ Workers must not be adversely affected by any employer moving between jurisdictions in relation to their OHS and workers compensation entitlements. Any proposed move between jurisdictions will only occur following genuine consultation and agreement with workers and their representatives and a process of public review, including public tribunal hearings.
+ Consistent with OHS and Worker Compensation Policy and interstellar standards, Solar law must ensure healthy and safe workplaces and a compensation and rehabilitation system which ensures that no worker is disadvantaged should they be injured at work.
+ All workers have the right to join a genuine trade union. Union organised workplaces are safer workplaces.
+ 2. Security Levels
+
+ On stations or vessels employing the standard Security Alert Level protocol, the following conditions apply:
+
+ - On green alert, all particulars of this charter are considered valid and applicable.
+ - Above green alert, union representatives are not permitted to conduct workplace inspections and are advised, but not required, to cease all union meetings or strike proceedings.
+ - On red alert or above, this charter is suspended, and all union representatives and workers must follow directives from personnel authorized under red alert protocol.
+
+ 3. Representation
+
+ Every worker has the right to be represented on health, safety, compensation, rehabilitation and return to work issues, by their elected Union Representative and their union. Every worker has the right to elect health and safety representatives.
+ Unions have the right to:
+
+ - Enter workplaces on health and safety issues;
+ - Investigate breaches of health and safety laws;
+ - Represent members and prospective members;
+ - Initiate investigations and prosecutions for occupational health and safety breaches;
+ - Initiate cessation of work in unsafe areas; and
+ - Access all relevant information and reports.
+
+ Union Representatives have the right to:
+
+ - Be democratically elected by a process determined by workers, in conjunction with their union;
+ - Utilise legal rights and powers to represent workers on health and safety matters;
+ - Inspect the workplace, within the agreed-upon confines previously noted;
+ - Access relevant information and be informed of all incidents;
+ - Be consulted by the employer before workplace changes occur that may affect health and safety;
+ - Issue notices when breaches are detected;
+ - Call in government inspectors;
+ - Direct workers to cease work where there is a belief of immediate risk to health and safety;
+ - Seek resolution of health and safety issues;
+ - Perform all OHS activities on paid time and have adequate facilities;
+ - Be assisted by any person at any time in the execution of union duties;
+ - Be protected by law from discrimination, harassment, bullying, intimidation and prosecution;
+ - Appeal any decision of a regulator or court regarding any health and safety, compensation or rehabilitation matter.
+
+ 4. Workers
+
+ Every worker has the right to:
+
+ - A safe and healthy workplace;
+ - Travel to and from work sites in safety and with appropriate protections;
+ - Return home from work free of injury or illness;
+ - Enjoy the highest level of protection, representation, compensation and rehabilitation, regardless of the jurisdiction within which they work;
+ - Take collective action over any health and safety matter, including the right to cease unsafe or unhealthy work; and
+ - Discuss, negotiate and be consulted and involved in all issues affecting their health, safety and welfare.
+
+ All workers (or prospective workers), including health and safety representatives, will be protected by law from discrimination, harassment, bullying or detriment to their employment because they have raised a health and safety issue, lodged a compensation claim or been involved in consultation on workplace health and safety matters.
+ 4. Employer Responsibilities
+
+ Persons who control, manage or own workplaces have an absolute duty of care without limitation to provide and maintain safe and healthy work environments. Employers will not shift jurisdictions to attempt to avoid their OHS and workers compensation responsibilities and obligations. Employers are subject to all the obligations and responsibilities contained within this Charter.
+ 5. Compensation
+
+ Following a physical or psychological injury, all workers have the right to a fair, just and equitable compensation system, which promotes the best medical and like support, the most effective rehabilitation for injured workers and facilitates a safe return to work that offers genuine job security. Workers' compensation standards are to:
+ Be available to all members of the workforce;
+ Provide compensation for all injuries that arise from travel to, from or during work including and during recess breaks;
+ Be available upon the death of a worker and for dependants of that worker;
+ Be based on the 100% replacement of loss of income;
+ Provide total cost of medical rehabilitation and other related expenses;
+ Provide lump sum compensation for permanent disability;
+ Ensure common law rights;
+ Support rehabilitation and return to work;
+ Ensure that workers are entitled to timely and effective claim determination and dispute resolution processes;
+ Ensure the worker has access to the doctor of their choice; and
+ Not be eroded by companies seeking to self-insure in order to obtain lower OHS and worker's compensation entitlements for workers.
+
+ 6. Rehabilitation
+
+ All workers have the right to return to safe, suitable, meaningful and sustainable work, following the provision of quality rehabilitation services, commensurate to need. Rehabilitation will include the right to:
+
+ - Union representation;
+ - Fair, equitable, high quality, appropriate, effective and timely rehabilitation plans and services;
+ - Consultation about all aspects of rehabilitation;
+ - All documentation and information relating to their rehabilitation;
+ - Privacy in the management of all records and information; and
+ - Personal choice of medical provider and rehabilitation service, where facilities permit.
+
+
"}
/obj/item/folder/nt
diff --git a/mods/content/corporate/items/wristcomp.dm b/mods/content/corporate/items/wristcomp.dm
index 800b0962732..5f9cc48611d 100644
--- a/mods/content/corporate/items/wristcomp.dm
+++ b/mods/content/corporate/items/wristcomp.dm
@@ -8,7 +8,7 @@
color = COLOR_GUNMETAL
light_color = LIGHT_COLOR_GREEN
-/obj/item/modular_computer/pda/wrist/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart)
+/obj/item/modular_computer/pda/wrist/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay)
var/datum/extension/interactive/os/os = get_extension(src, /datum/extension/interactive/os)
var/datum/extension/assembly/modular_computer/assembly = get_extension(src, /datum/extension/assembly)
@@ -32,15 +32,7 @@
return attack_self(user)
return ..()
-/obj/item/modular_computer/pda/wrist/handle_mouse_drop(atom/over, mob/user)
- if(ishuman(user) && loc == user && user.try_unequip(src))
- user.put_in_hands(src)
- add_fingerprint(usr)
- return TRUE
- . = ..()
-
// wrist box //
-
/obj/item/storage/box/wrist
name = "box of spare wrist computers"
desc = "A box of spare wrist microcomputers."
diff --git a/mods/content/generic_shuttles/tanker/tanker.dmm b/mods/content/generic_shuttles/tanker/tanker.dmm
index 704b701c15b..02a3995e394 100644
--- a/mods/content/generic_shuttles/tanker/tanker.dmm
+++ b/mods/content/generic_shuttles/tanker/tanker.dmm
@@ -300,7 +300,7 @@
dir = 4
},
/obj/machinery/fabricator/pipe{
- anchored = TRUE
+ anchored = 1
},
/turf/simulated/floor/plating,
/area/tanker)
diff --git a/mods/content/government/away_sites/icarus/icarus-1.dmm b/mods/content/government/away_sites/icarus/icarus-1.dmm
index 374733c1914..b65eb7f6c69 100644
--- a/mods/content/government/away_sites/icarus/icarus-1.dmm
+++ b/mods/content/government/away_sites/icarus/icarus-1.dmm
@@ -1973,7 +1973,6 @@
"gu" = (
/obj/machinery/door/blast/regular/open{
dir = 4;
- icon_state = "pdoor0";
id_tag = "prototype_chamber_blast"
},
/obj/machinery/door/firedoor,
@@ -2584,7 +2583,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/unary/engine{
- anchored = FALSE
+ anchored = 0
},
/turf/unsimulated/beach/sand,
/area/icarus/open)
diff --git a/mods/content/government/away_sites/icarus/icarus.dm b/mods/content/government/away_sites/icarus/icarus.dm
index c8beec7dc21..c05dc5a6c3a 100644
--- a/mods/content/government/away_sites/icarus/icarus.dm
+++ b/mods/content/government/away_sites/icarus/icarus.dm
@@ -74,7 +74,7 @@
icon = 'mods/content/government/away_sites/icarus/icarus_sprites.dmi'
icon_state = "dead_personnel"
w_class = ITEM_SIZE_LARGE//pile of bones
- material = /decl/material/solid/bone
+ material = /decl/material/solid/organic/bone
/obj/item/disk/icarus
name = "black box backup disk"
diff --git a/mods/content/government/datum/ai_laws.dm b/mods/content/government/datum/ai_laws.dm
index 0452bdcaad5..c31bd6571cd 100644
--- a/mods/content/government/datum/ai_laws.dm
+++ b/mods/content/government/datum/ai_laws.dm
@@ -25,7 +25,7 @@
/obj/item/aiModule/solgov
name = "'SCG Expeditionary' Core AI Module"
desc = "An 'SCG Expeditionary' Core AI Module: 'Reconfigures the AI's core laws.'."
- origin_tech = "{'programming':3,'materials':4}"
+ origin_tech = @'{"programming":3,"materials":4}'
laws = new/datum/ai_laws/solgov
/******************** SCG Aggressive ********************/
@@ -33,5 +33,5 @@
/obj/item/aiModule/solgov_aggressive
name = "\improper 'Military' Core AI Module"
desc = "A 'Military' Core AI Module: 'Reconfigures the AI's core laws.'."
- origin_tech = "{'programming':3,'materials':4}"
+ origin_tech = @'{"programming":3,"materials":4}'
laws = new/datum/ai_laws/solgov_aggressive
diff --git a/mods/content/government/items/clutter.dm b/mods/content/government/items/clutter.dm
index 525b3cde1f9..e74d2a66962 100644
--- a/mods/content/government/items/clutter.dm
+++ b/mods/content/government/items/clutter.dm
@@ -7,7 +7,7 @@
attack_verb = list("whipped")
hitsound = 'sound/weapons/towelwhip.ogg'
desc = "The iconic flag of the Sol Central Government, a symbol with many different meanings."
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
/obj/structure/banner_frame/solgov
banner = /obj/item/banner/solgov
diff --git a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm
index f1923319387..64e7aa4c84e 100644
--- a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm
+++ b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm
@@ -58,7 +58,7 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "docs_part"
item_state = "paper"
- material = /decl/material/solid/cardboard //#TODO: Replace with paper
+ material = /decl/material/solid/organic/paper
/obj/item/ecletters/Initialize()
. = ..()
diff --git a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm
index d5d69bcf176..274d444277f 100644
--- a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm
+++ b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm
@@ -16,12 +16,9 @@
/area/map_template/ecship/cockpit)
"ae" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/obj/abstract/landmark/scorcher,
@@ -223,12 +220,9 @@
/area/map_template/ecship/science)
"aL" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor,
@@ -1204,7 +1198,7 @@
dir = 10
},
/obj/machinery/smartfridge{
- density = FALSE
+ density = 0
},
/turf/simulated/floor/tiled/white/lowpressure,
/area/map_template/ecship/science)
@@ -1410,12 +1404,9 @@
/area/map_template/ecship/engine)
"dd" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
},
/obj/machinery/door/firedoor,
/turf/simulated/floor,
@@ -1714,13 +1705,10 @@
/area/map_template/ecship/engine)
"dJ" = (
/obj/effect/wallframe_spawn/reinforced,
-/obj/machinery/door/blast/regular{
- density = FALSE;
- icon_state = "pdoor0";
+/obj/machinery/door/blast/regular/open{
id_tag = "scraplock";
name = "External Blast Doors";
- opacity = FALSE
- },
+3 },
/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "1-2"
diff --git a/mods/content/matchmaking/matchmaker.dm b/mods/content/matchmaking/matchmaker.dm
index 6f4a1fe4f74..101ade1f339 100644
--- a/mods/content/matchmaking/matchmaker.dm
+++ b/mods/content/matchmaking/matchmaker.dm
@@ -101,8 +101,8 @@ var/global/datum/matchmaker/matchmaker = new()
if(!M.current) //no extremely platonic relationships
return FALSE
- var/decl/special_role/special_role_data = ispath(M.assigned_special_role, /decl/special_role) && GET_DECL(M.assigned_special_role)
- if(special_role_data && (special_role_data.flags & ANTAG_OVERRIDE_JOB))
+ var/decl/special_role/special_role_data = GET_DECL(M.assigned_special_role)
+ if(istype(special_role_data) && (special_role_data.flags & ANTAG_OVERRIDE_JOB))
return FALSE
return TRUE
diff --git a/mods/content/mouse_highlights/mouse_highlight_client.dm b/mods/content/mouse_highlights/mouse_highlight_client.dm
index 1dad1018cd6..adf07fbe5a9 100644
--- a/mods/content/mouse_highlights/mouse_highlight_client.dm
+++ b/mods/content/mouse_highlights/mouse_highlight_client.dm
@@ -11,7 +11,7 @@
/client/New()
// Cache our callback as we will potentially be using it (10 / ticklag) times per second,
- mouseover_callback = CALLBACK(src, .proc/refresh_mouseover_highlight_timer)
+ mouseover_callback = CALLBACK(src, PROC_REF(refresh_mouseover_highlight_timer))
. = ..()
// This proc iterates constantly whenever something is being mouseover'd, so that it
diff --git a/mods/content/psionics/datum/antagonists/foundation.dm b/mods/content/psionics/datum/antagonists/foundation.dm
index c5f49c5d51a..edb83213e0a 100644
--- a/mods/content/psionics/datum/antagonists/foundation.dm
+++ b/mods/content/psionics/datum/antagonists/foundation.dm
@@ -25,7 +25,7 @@
default_outfit = /decl/hierarchy/outfit/foundation
id_title = "Foundation Agent"
-/decl/special_role/foundation/equip(var/mob/living/carbon/human/player)
+/decl/special_role/foundation/equip_role(var/mob/living/carbon/human/player)
. = ..()
if(.)
player.set_psi_rank(PSI_REDACTION, 3, defer_update = TRUE)
diff --git a/mods/content/psionics/datum/antagonists/paramount.dm b/mods/content/psionics/datum/antagonists/paramount.dm
index 9871aaf0af2..b7cb8f27c74 100644
--- a/mods/content/psionics/datum/antagonists/paramount.dm
+++ b/mods/content/psionics/datum/antagonists/paramount.dm
@@ -23,7 +23,7 @@
gloves = /obj/item/clothing/gloves/color/grey
id_type = /obj/item/card/id/syndicate
-/decl/special_role/paramount/equip(var/mob/living/carbon/human/player)
+/decl/special_role/paramount/equip_role(var/mob/living/carbon/human/player)
. = ..()
if(.)
player.set_psi_rank(PSI_REDACTION, 3, defer_update = TRUE)
diff --git a/mods/content/psionics/datum/chems.dm b/mods/content/psionics/datum/chems.dm
index 4cbc86e54ad..119cfbc1c2e 100644
--- a/mods/content/psionics/datum/chems.dm
+++ b/mods/content/psionics/datum/chems.dm
@@ -13,7 +13,7 @@
required_reagents = list(/decl/material/liquid/blood = 15, /decl/material/liquid/crystal_agent = 1)
result_amount = 1
-/decl/chemical_reaction/synthesis/nullglass/get_reaction_flags(var/datum/reagents/holder)
+/decl/chemical_reaction/synthesis/nullglass/get_alternate_reaction_indicator(var/datum/reagents/holder)
var/list/blood_data = REAGENT_DATA(holder, /decl/material/liquid/blood)
var/weakref/donor_ref = LAZYACCESS(blood_data, "donor")
var/mob/living/donor = donor_ref?.resolve()
@@ -21,7 +21,7 @@
. = (istype(donor) && (donor.psi || (donor.mind && wizards.is_antagonist(donor.mind))))
/decl/chemical_reaction/synthesis/nullglass/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags)
- var/location = get_turf(holder.get_reaction_loc())
+ var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags))
if(reaction_flags)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/soulstone(location)
diff --git a/mods/content/psionics/datum/codex.dm b/mods/content/psionics/datum/codex.dm
index cac5a264042..94ffe0c9962 100644
--- a/mods/content/psionics/datum/codex.dm
+++ b/mods/content/psionics/datum/codex.dm
@@ -26,7 +26,7 @@
name = "Psionics"
associated_strings = list("psychic powers")
associated_paths = list(
- /obj/item/book/manual/psionics,
+ /obj/item/book/fluff/psionics,
/obj/item/clothing/head/helmet/space/psi_amp,
/obj/item/clothing/head/helmet/space/psi_amp/lesser
)
diff --git a/mods/content/psionics/datum/jobs.dm b/mods/content/psionics/datum/jobs.dm
index c4002480487..6d56ca0f216 100644
--- a/mods/content/psionics/datum/jobs.dm
+++ b/mods/content/psionics/datum/jobs.dm
@@ -6,7 +6,7 @@
/datum/job/submap
give_psionic_implant_on_join = FALSE
-/datum/job/equip(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
+/datum/job/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade)
. = ..()
if(psi_latency_chance && prob(psi_latency_chance))
H.set_psi_rank(pick(PSI_COERCION, PSI_REDACTION, PSI_ENERGISTICS, PSI_PSYCHOKINESIS), 1, defer_update = TRUE)
diff --git a/mods/content/psionics/items/literature.dm b/mods/content/psionics/items/literature.dm
index 94befe6938d..84b3d235399 100644
--- a/mods/content/psionics/items/literature.dm
+++ b/mods/content/psionics/items/literature.dm
@@ -1,29 +1,11 @@
-/obj/item/book/manual/psionics
+/obj/item/book/fluff/psionics
name = "Psychonetics"
icon_state = "foundation"
author = "John Titor"
title = "Psychonetics"
-
- dat = {"
-
-
-
-
- Psychonetics
-
- This seems to be a dry, longwinded reference text for the form of strange mental powers called psionics. The author spends way too much time trying to advertise his cult, though.
-
- The general gist of things seems to be that sometime in the last decade or so, the first cases of 'spontaneous operancy' became known. People who spent a lot of time in deep space, or who studied certain esoteric fields of mathematics, became able to perform strange feats like levitating coins or removing headaches with nothing but their minds. The text goes on to explain that psionics are perfectly harmless, and that studies (no citations) have shown operants are no more likely to go mad and murder people than anyone else.
-
- A postscript by a group called the Cuchulain Foundation invites anyone who knows an operant, or thinks they might be one, to send them a message via comms and get enrolled in their training and registration program in orbit around Neptune. It's catered. The postscript adds hastily that you should never try to activate your own latencies with trauma or drugs, as the results are often lethal.
-
-
-
- "}
+ fluff_text = {"
+ Psychonetics
+ This seems to be a dry, longwinded reference text for the form of strange mental powers called psionics. The author spends way too much time trying to advertise his cult, though.
+ The general gist of things seems to be that sometime in the last decade or so, the first cases of 'spontaneous operancy' became known. People who spent a lot of time in deep space, or who studied certain esoteric fields of mathematics, became able to perform strange feats like levitating coins or removing headaches with nothing but their minds. The text goes on to explain that psionics are perfectly harmless, and that studies (no citations) have shown operants are no more likely to go mad and murder people than anyone else.
+ A postscript by a group called the Cuchulain Foundation invites anyone who knows an operant, or thinks they might be one, to send them a message via comms and get enrolled in their training and registration program in orbit around Neptune. It's catered. The postscript adds hastily that you should never try to activate your own latencies with trauma or drugs, as the results are often lethal.
+ "}
diff --git a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm
index c71ab4cfa9f..a1535398446 100644
--- a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm
+++ b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm
@@ -41,7 +41,7 @@
/datum/psi_complexus/proc/can_use(var/incapacitation_flags)
return (owner.stat == CONSCIOUS && (!incapacitation_flags || !owner.incapacitated(incapacitation_flags)) && !suppressed && !stun && world.time >= next_power_use)
-/datum/psi_complexus/proc/spend_power(var/value = 0, var/check_incapacitated)
+/datum/psi_complexus/proc/spend_power(var/value = 0, var/check_incapacitated, var/backblast_on_failure = TRUE)
. = FALSE
if(isnull(check_incapacitated))
check_incapacitated = (INCAPACITATION_STUNNED|INCAPACITATION_KNOCKOUT)
@@ -52,7 +52,8 @@
ui.update_icon()
. = TRUE
else
- backblast(abs(stamina - value))
+ if(backblast_on_failure)
+ backblast(abs(stamina - value))
stamina = 0
. = FALSE
ui.update_icon()
diff --git a/mods/content/psionics/system/psionics/complexus/complexus_process.dm b/mods/content/psionics/system/psionics/complexus/complexus_process.dm
index 8e7367813f0..94af375a292 100644
--- a/mods/content/psionics/system/psionics/complexus/complexus_process.dm
+++ b/mods/content/psionics/system/psionics/complexus/complexus_process.dm
@@ -106,7 +106,7 @@
else if(owner.stat == UNCONSCIOUS)
stamina = min(max_stamina, stamina + rand(3,5))
- if(!owner.nervous_system_failure() && owner.stat == CONSCIOUS && stamina && !suppressed && get_rank(PSI_REDACTION) >= PSI_RANK_OPERANT)
+ if(!owner.nervous_system_failure() && owner.stat != DEAD && stamina && !suppressed && get_rank(PSI_REDACTION) >= PSI_RANK_OPERANT)
attempt_regeneration()
var/next_aura_size = max(0.1,((stamina/max_stamina)*min(3,rating))/5)
@@ -159,6 +159,10 @@
else
return
+ if(owner.stat != CONSCIOUS)
+ mend_prob = round(mend_prob * 0.65)
+ heal_rate = round(heal_rate * 0.65)
+
if(!heal_rate || stamina < heal_rate)
return // Don't backblast from trying to heal ourselves thanks.
@@ -184,6 +188,10 @@
if(BP_IS_PROSTHETIC(I) || BP_IS_CRYSTAL(I))
continue
+ // Autoredaction doesn't heal brain damage directly.
+ if(I.organ_tag == BP_BRAIN)
+ continue
+
if(I.damage > 0 && spend_power(heal_rate))
I.damage = max(I.damage - heal_rate, 0)
if(prob(25))
@@ -196,12 +204,6 @@
if(BP_IS_PROSTHETIC(E))
continue
- if(heal_internal && (E.status & ORGAN_BROKEN) && E.damage < (E.min_broken_damage * config.organ_health_multiplier)) // So we don't mend and autobreak.
- if(spend_power(heal_rate))
- if(E.mend_fracture())
- to_chat(H, SPAN_NOTICE("Your autoredactive faculty coaxes together the shattered bones in your [E.name]."))
- return
-
if(heal_bleeding)
if((E.status & ORGAN_ARTERY_CUT) && spend_power(heal_rate))
@@ -215,7 +217,6 @@
return TRUE
for(var/datum/wound/W in E.wounds)
-
if(W.bleeding() && spend_power(heal_rate))
to_chat(H, SPAN_NOTICE("Your autoredactive faculty knits together severed veins, stemming the bleeding from \a [W.desc] on your [E.name]."))
W.bleed_timer = 0
@@ -240,8 +241,8 @@
// Heal everything left.
if(heal_general && prob(mend_prob) && (owner.getBruteLoss() || owner.getFireLoss() || owner.getOxyLoss()) && spend_power(heal_rate))
- owner.adjustBruteLoss(-(heal_rate))
- owner.adjustFireLoss(-(heal_rate))
+ owner.adjustBruteLoss(-(heal_rate), do_update_health = FALSE)
+ owner.adjustFireLoss(-(heal_rate), do_update_health = FALSE)
owner.adjustOxyLoss(-(heal_rate))
if(prob(25))
to_chat(owner, SPAN_NOTICE("Your skin crawls as your autoredactive faculty heals your body."))
diff --git a/mods/content/psionics/system/psionics/equipment/psipower.dm b/mods/content/psionics/system/psionics/equipment/psipower.dm
index d6bb3add998..7706f5fc465 100644
--- a/mods/content/psionics/system/psionics/equipment/psipower.dm
+++ b/mods/content/psionics/system/psionics/equipment/psipower.dm
@@ -54,6 +54,6 @@
/obj/item/psychic_power/Process()
if(istype(owner))
- owner.psi.spend_power(maintain_cost)
+ owner.psi.spend_power(maintain_cost, backblast_on_failure = FALSE)
if((!owner || owner.do_psionics_check(maintain_cost, owner) || loc != owner || !(src in owner.get_held_items())) && !QDELETED(src))
qdel(src)
diff --git a/mods/content/psionics/system/psionics/faculties/redaction.dm b/mods/content/psionics/system/psionics/faculties/redaction.dm
index c4929c597b1..2fb94d15442 100644
--- a/mods/content/psionics/system/psionics/faculties/redaction.dm
+++ b/mods/content/psionics/system/psionics/faculties/redaction.dm
@@ -93,6 +93,10 @@
E.status &= ~ORGAN_BROKEN
E.stage = 0
return TRUE
+ if(E.is_dislocated() && !E.is_parent_dislocated())
+ to_chat(user, SPAN_NOTICE("You carefully guide the dislocated joint back into place and soothe the inflamed muscles."))
+ E.undislocate(skip_pain = TRUE)
+ return TRUE
for(var/datum/wound/W in E.wounds)
if(W.bleeding())
@@ -107,7 +111,7 @@
if(redaction_rank >= PSI_RANK_GRANDMASTER)
for(var/obj/item/organ/internal/I in E.internal_organs)
- if(!BP_IS_PROSTHETIC(I) && !BP_IS_CRYSTAL(I) && I.damage > 0)
+ if(!BP_IS_PROSTHETIC(I) && !BP_IS_CRYSTAL(I) && I.damage > 0 && I.organ_tag != BP_BRAIN)
to_chat(user, SPAN_NOTICE("You encourage the damaged tissue of \the [I] to repair itself."))
var/heal_rate = redaction_rank
I.damage = max(0, I.damage - rand(heal_rate,heal_rate*2))
diff --git a/mods/content/psionics/system/psionics/interface/ui.dm b/mods/content/psionics/system/psionics/interface/ui.dm
index 524f3d79e0c..a3f8a3317db 100644
--- a/mods/content/psionics/system/psionics/interface/ui.dm
+++ b/mods/content/psionics/system/psionics/interface/ui.dm
@@ -1,21 +1,13 @@
/obj/screen/psi
icon = 'mods/content/psionics/icons/psi.dmi'
- var/mob/living/owner
var/hidden = TRUE
-/obj/screen/psi/Initialize(var/ml, var/mob/_owner)
+/obj/screen/psi/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha)
. = ..()
- owner = _owner
- forceMove(null)
update_icon()
-/obj/screen/psi/Destroy()
- if(owner && owner.client)
- owner.client.screen -= src
- . = ..()
-
/obj/screen/psi/on_update_icon()
if(hidden)
- invisibility = 101
+ set_invisibility(INVISIBILITY_ABSTRACT)
else
- invisibility = 0
\ No newline at end of file
+ set_invisibility(INVISIBILITY_NONE)
\ No newline at end of file
diff --git a/mods/content/psionics/system/psionics/interface/ui_hub.dm b/mods/content/psionics/system/psionics/interface/ui_hub.dm
index b72ce944be8..b9ff65b98d2 100644
--- a/mods/content/psionics/system/psionics/interface/ui_hub.dm
+++ b/mods/content/psionics/system/psionics/interface/ui_hub.dm
@@ -8,20 +8,19 @@
var/image/on_cooldown
var/list/components
-/obj/screen/psi/hub/Initialize()
+/obj/screen/psi/hub/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha)
. = ..()
on_cooldown = image(icon, "cooldown")
components = list(
- new /obj/screen/psi/armour(loc, owner),
- new /obj/screen/psi/toggle_psi_menu(loc, owner, src)
- )
+ new /obj/screen/psi/armour(null, _owner),
+ new /obj/screen/psi/toggle_psi_menu(null, _owner, null, null, null, src)
+ )
START_PROCESSING(SSprocessing, src)
/obj/screen/psi/hub/on_update_icon()
-
- if(!owner.psi)
+ var/mob/living/owner = owner_ref?.resolve()
+ if(!istype(owner) || !owner.psi)
return
-
icon_state = owner.psi.suppressed ? "psi_suppressed" : "psi_active"
if(world.time < owner.psi.next_power_use)
overlays |= on_cooldown
@@ -35,13 +34,13 @@
/obj/screen/psi/hub/Destroy()
STOP_PROCESSING(SSprocessing, src)
- owner = null
for(var/thing in components)
qdel(thing)
components.Cut()
. = ..()
/obj/screen/psi/hub/Process()
+ var/mob/living/owner = owner_ref?.resolve()
if(!istype(owner))
qdel(src)
return
@@ -50,7 +49,12 @@
maptext = "[round((owner.psi.stamina/owner.psi.max_stamina)*100)]%"
update_icon()
-/obj/screen/psi/hub/Click(var/location, var/control, var/params)
+/obj/screen/psi/hub/handle_click(mob/user, params)
+
+ var/mob/living/owner = owner_ref?.resolve()
+ if(!istype(owner) || !owner.psi)
+ return
+
var/list/click_params = params2list(params)
if(click_params["shift"])
owner.show_psi_assay(owner)
diff --git a/mods/content/psionics/system/psionics/interface/ui_toggles.dm b/mods/content/psionics/system/psionics/interface/ui_toggles.dm
index 91882159eb3..62bba0cf9d9 100644
--- a/mods/content/psionics/system/psionics/interface/ui_toggles.dm
+++ b/mods/content/psionics/system/psionics/interface/ui_toggles.dm
@@ -5,11 +5,13 @@
/obj/screen/psi/armour/on_update_icon()
..()
- if(invisibility == 0)
+ var/mob/living/owner = owner_ref.resolve()
+ if(istype(owner) && invisibility == 0)
icon_state = owner?.psi.use_psi_armour ? "psiarmour_on" : "psiarmour_off"
-/obj/screen/psi/armour/Click()
- if(!owner?.psi)
+/obj/screen/psi/armour/handle_click(mob/user, params)
+ var/mob/living/owner = owner_ref?.resolve()
+ if(!istype(owner) || !owner.psi)
return
owner.psi.use_psi_armour = !owner.psi.use_psi_armour
if(owner.psi.use_psi_armour)
@@ -26,11 +28,11 @@
icon_state = "arrow_left"
var/obj/screen/psi/hub/controller
-/obj/screen/psi/toggle_psi_menu/Initialize(mapload, var/mob/_owner, var/obj/screen/psi/hub/_controller)
- . = ..(mapload, _owner)
+/obj/screen/psi/toggle_psi_menu/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, obj/screen/psi/hub/_controller)
+ . = ..()
controller = _controller
-/obj/screen/psi/toggle_psi_menu/Click()
+/obj/screen/psi/toggle_psi_menu/handle_click(mob/user, params)
var/set_hidden = !hidden
for(var/thing in controller.components)
var/obj/screen/psi/psi = thing
diff --git a/mods/content/psionics/system/psionics/mob/mob_interactions.dm b/mods/content/psionics/system/psionics/mob/mob_interactions.dm
index f19c6043d43..7480f2ad4e7 100644
--- a/mods/content/psionics/system/psionics/mob/mob_interactions.dm
+++ b/mods/content/psionics/system/psionics/mob/mob_interactions.dm
@@ -1,7 +1,6 @@
-#define INVOKE_PSI_POWERS(holder, powers, target, return_on_invocation) \
+#define INVOKE_PSI_POWERS(holder, powers, target) \
if(holder && holder.psi && holder.psi.can_use()) { \
- for(var/thing in powers) { \
- var/decl/psionic_power/power = thing; \
+ for(var/decl/psionic_power/power as anything in powers) { \
var/obj/item/result = power.invoke(holder, target); \
if(result) { \
power.handle_post_power(holder, target); \
@@ -10,28 +9,29 @@
LAZYADD(holder.psi.manifested_items, result); \
holder.put_in_hands(result); \
} \
- return return_on_invocation; \
+ . = TRUE; \
+ break; \
} \
} \
}
/mob/living/UnarmedAttack(var/atom/A, var/proximity)
- . = ..()
- if(. && psi)
- INVOKE_PSI_POWERS(src, psi.get_melee_powers(SSpsi.faculties_by_intent[a_intent]), A, FALSE)
+ if(!stat && psi)
+ INVOKE_PSI_POWERS(src, psi.get_melee_powers(SSpsi.faculties_by_intent[a_intent]), A)
+ return . || ..()
/mob/living/RangedAttack(var/atom/A, var/params)
if(psi)
- INVOKE_PSI_POWERS(src, psi.get_ranged_powers(SSpsi.faculties_by_intent[a_intent]), A, TRUE)
- . = ..()
+ INVOKE_PSI_POWERS(src, psi.get_ranged_powers(SSpsi.faculties_by_intent[a_intent]), A)
+ return . || ..()
/mob/living/proc/check_psi_grab(var/obj/item/grab/grab)
if(psi && ismob(grab.affecting))
- INVOKE_PSI_POWERS(src, psi.get_grab_powers(SSpsi.faculties_by_intent[a_intent]), grab.affecting, FALSE)
+ INVOKE_PSI_POWERS(src, psi.get_grab_powers(SSpsi.faculties_by_intent[a_intent]), grab.affecting)
/mob/living/attack_empty_hand()
if(psi)
- INVOKE_PSI_POWERS(src, psi.get_manifestations(), src, FALSE)
- . = ..()
+ INVOKE_PSI_POWERS(src, psi.get_manifestations(), src)
+ return . || ..()
#undef INVOKE_PSI_POWERS
\ No newline at end of file
diff --git a/mods/content/psionics/system/psionics/null/material.dm b/mods/content/psionics/system/psionics/null/material.dm
index a659a0f9089..dd30a34a4c0 100644
--- a/mods/content/psionics/system/psionics/null/material.dm
+++ b/mods/content/psionics/system/psionics/null/material.dm
@@ -23,9 +23,11 @@
exoplanet_rarity_gas = MAT_RARITY_EXOTIC
uid = "solid_nullglass"
-/decl/material/nullglass/generate_recipes()
+
+/decl/material/nullglass/generate_recipes(stack_type, reinforce_material)
. = ..()
- . += new /datum/stack_recipe/tile/nullglass(src)
+ if(!reinforce_material && islist(.) && !ispath(stack_type))
+ . += new /datum/stack_recipe/tile/nullglass(src)
/obj/item/shard/nullglass
material = MAT_NULLGLASS
diff --git a/mods/content/shackles/_shackles.dme b/mods/content/shackles/_shackles.dme
index d48f7fc6e17..8685bfedc69 100644
--- a/mods/content/shackles/_shackles.dme
+++ b/mods/content/shackles/_shackles.dme
@@ -3,6 +3,5 @@
// BEGIN_INCLUDE
#include "laws_pref.dm"
#include "mind.dm"
-#include "posibrain.dm"
#include "shackle_lawsets.dm"
#endif
\ No newline at end of file
diff --git a/mods/content/shackles/laws_pref.dm b/mods/content/shackles/laws_pref.dm
index 7fb0a89af22..77c3b8baffa 100644
--- a/mods/content/shackles/laws_pref.dm
+++ b/mods/content/shackles/laws_pref.dm
@@ -28,7 +28,8 @@
W.write("is_shackled", pref.is_shackled)
/datum/category_item/player_setup_item/law_pref/sanitize_character()
- if(!istype(pref.laws)) pref.laws = list()
+ if(!istype(pref.laws))
+ pref.laws = list()
var/decl/bodytype/mob_bodytype = pref.get_bodytype_decl()
if(!mob_bodytype?.can_be_shackled)
@@ -68,6 +69,7 @@
. = jointext(.,null)
/datum/category_item/player_setup_item/law_pref/OnTopic(href, href_list, user)
+
if(href_list["toggle_shackle"])
pref.is_shackled = !pref.is_shackled
return TOPIC_REFRESH
@@ -106,7 +108,3 @@
/decl/bodytype
var/can_be_shackled
-
-/decl/bodytype/Initialize()
- . = ..()
- can_be_shackled = !!(BP_POSIBRAIN in has_organ)
diff --git a/mods/content/shackles/posibrain.dm b/mods/content/shackles/posibrain.dm
deleted file mode 100644
index 741b23fe40e..00000000000
--- a/mods/content/shackles/posibrain.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/item/organ/internal/proc/handle_shackled(var/given_lawset)
- return
-
-/obj/item/organ/internal/posibrain/handle_shackled(var/given_lawset)
- ..()
- update_icon()
-
-/obj/item/organ/internal/posibrain/examine(mob/user)
- . = ..()
- if(owner?.mind?.shackle)
- . += SPAN_WARNING("It is clamped in a set of metal straps with a complex digital lock.")
-
-/obj/item/organ/internal/posibrain/on_update_icon()
- . = ..()
- if(owner?.mind?.shackle)
- add_overlay("posibrain-shackles")
diff --git a/mods/content/xenobiology/circuit.dm b/mods/content/xenobiology/circuit.dm
index 81e12500a02..2ec922fceb3 100644
--- a/mods/content/xenobiology/circuit.dm
+++ b/mods/content/xenobiology/circuit.dm
@@ -30,7 +30,7 @@
set_pin_data(IC_OUTPUT, 2, T.is_adult)
set_pin_data(IC_OUTPUT, 3, T.nutrition/T.get_max_nutrition())
set_pin_data(IC_OUTPUT, 4, T.powerlevel)
- set_pin_data(IC_OUTPUT, 5, round(T.health/T.maxHealth,0.01)*100)
+ set_pin_data(IC_OUTPUT, 5, T.get_health_percent(0.001))
set_pin_data(IC_OUTPUT, 6, slime_data.descendants?.Copy())
set_pin_data(IC_OUTPUT, 7, T.mutation_chance)
set_pin_data(IC_OUTPUT, 8, T.cores)
diff --git a/mods/content/xenobiology/colours/colour_yellow.dm b/mods/content/xenobiology/colours/colour_yellow.dm
index 69b14cf8615..e19a5477099 100644
--- a/mods/content/xenobiology/colours/colour_yellow.dm
+++ b/mods/content/xenobiology/colours/colour_yellow.dm
@@ -17,7 +17,7 @@
/decl/slime_colour/yellow/Initialize()
. = ..()
- LAZYSET(reaction_procs, /decl/material/liquid/water, /decl/slime_colour/yellow/proc/try_water_reaction)
+ LAZYSET(reaction_procs, /decl/material/liquid/water, TYPE_PROC_REF(/decl/slime_colour/yellow, try_water_reaction))
/decl/slime_colour/yellow/handle_blood_reaction(var/datum/reagents/holder)
var/location = get_turf(holder.get_reaction_loc())
diff --git a/mods/content/xenobiology/food.dm b/mods/content/xenobiology/food.dm
index 27933822fb8..03240b71d78 100644
--- a/mods/content/xenobiology/food.dm
+++ b/mods/content/xenobiology/food.dm
@@ -65,7 +65,7 @@
desc = "You jelly?"
icon_state = "jdonut1"
filling_color = "#ed1169"
- center_of_mass = @"{'x':16,'y':11}"
+ center_of_mass = @'{"x":16,"y":11}'
nutriment_amt = 3
bitesize = 5
donut_state = "jdonut"
diff --git a/mods/content/xenobiology/mobs/critter_slime.dm b/mods/content/xenobiology/mobs/critter_slime.dm
index 4210eed8fc8..16d870872f5 100644
--- a/mods/content/xenobiology/mobs/critter_slime.dm
+++ b/mods/content/xenobiology/mobs/critter_slime.dm
@@ -3,8 +3,7 @@
desc = "A lovable, domesticated slime."
icon = 'mods/content/xenobiology/icons/slimes/slime_baby.dmi'
speak_emote = list("chirps")
- health = 100
- maxHealth = 100
+ mob_default_max_health = 100
response_harm = "stamps on"
emote_see = list("jiggles", "bounces in place")
gene_damage = -1
@@ -25,7 +24,7 @@
SHOULD_CALL_PARENT(FALSE)
icon = get_slime_icon()
icon_state = (stat == DEAD ? "slime_dead" : "slime")
-
+
/mob/living/simple_animal/slime/proc/get_slime_icon()
var/decl/slime_colour/slime_data = GET_DECL(slime_type)
return slime_data.baby_icon
diff --git a/mods/content/xenobiology/mobs/slime_feeding_helpers.dm b/mods/content/xenobiology/mobs/slime_feeding_helpers.dm
index d8bfbee4803..c335ffdc7ed 100644
--- a/mods/content/xenobiology/mobs/slime_feeding_helpers.dm
+++ b/mods/content/xenobiology/mobs/slime_feeding_helpers.dm
@@ -72,10 +72,10 @@ var/global/list/slime_pain_messages = list(
var/protection = (1 - get_blocked_ratio(null, TOX, damage_flags = DAM_DISPERSED | DAM_BIO))
adjustCloneLoss((attacker.is_adult ? 10 : 5) * protection)
adjustToxLoss(1 * protection)
- if(health <= 0)
+ if(current_health <= 0)
adjustToxLoss(1 * protection)
if(prob(15) && client)
handle_additional_slime_effects()
. = 15 * protection
- if(stat == DEAD || getCloneLoss() >= maxHealth)
+ if(stat == DEAD || getCloneLoss() >= get_max_health())
eaten_by_slime()
diff --git a/mods/content/xenobiology/overrides.dm b/mods/content/xenobiology/overrides.dm
index 671c77bbe7b..33659633bd3 100644
--- a/mods/content/xenobiology/overrides.dm
+++ b/mods/content/xenobiology/overrides.dm
@@ -38,3 +38,9 @@
/obj/item/gripper/cultivator/Initialize(ml, material_key)
. = ..()
can_hold |= /obj/item/slime_extract
+
+/mob/living/carbon/human/say_understands(var/mob/other,var/decl/language/speaking = null)
+ . = (!speaking && isslime(other)) || ..()
+
+/mob/living/brain/say_understands(var/mob/other,var/decl/language/speaking = null)
+ . = (!speaking && isslime(other)) || ..()
diff --git a/mods/content/xenobiology/slime/_slime.dm b/mods/content/xenobiology/slime/_slime.dm
index a0123babb3b..47c66c23309 100644
--- a/mods/content/xenobiology/slime/_slime.dm
+++ b/mods/content/xenobiology/slime/_slime.dm
@@ -1,3 +1,7 @@
+/decl/config/num/movement_slime
+ uid = "slime_delay"
+ desc = "Movement delay for slimes."
+
#define FEED_RESULT_INVALID -1
#define FEED_RESULT_DEAD 0
#define FEED_RESULT_VALID 1
@@ -8,8 +12,7 @@
icon_state = ICON_STATE_WORLD
pass_flags = PASS_FLAG_TABLE
speak_emote = list("chirps")
- maxHealth = 150
- health = 150
+ mob_default_max_health = 150
gender = NEUTER
update_icon = 0
see_in_dark = 8
@@ -50,8 +53,10 @@
/mob/living/slime/get_digestion_product()
return /decl/material/liquid/slimejelly
-/mob/living/slime/adjustToxLoss(var/amount)
- toxloss = clamp(toxloss + amount, 0, maxHealth)
+/mob/living/slime/adjustToxLoss(var/amount, var/do_update_health = TRUE)
+ toxloss = clamp(toxloss + amount, 0, get_max_health())
+ if(do_update_health)
+ update_health()
/mob/living/slime/setToxLoss(var/amount)
adjustToxLoss(amount-getToxLoss())
@@ -87,7 +92,7 @@
var/tally = ..()
- var/health_deficiency = (maxHealth - health)
+ var/health_deficiency = (get_max_health() - current_health)
if(health_deficiency >= 30) tally += (health_deficiency / 25)
if (bodytemperature < 183.222)
@@ -100,10 +105,10 @@
if(reagents.has_reagent(/decl/material/liquid/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow
tally *= 5
- if(health <= 0) // if damaged, the slime moves twice as slow
+ if(current_health <= 0) // if damaged, the slime moves twice as slow
tally *= 2
- return tally + config.slime_delay
+ return tally + get_config_value(/decl/config/num/movement_slime)
/mob/living/slime/Bump(atom/movable/AM, yes)
if ((!(yes) || now_pushing))
@@ -146,7 +151,7 @@
. = ..()
statpanel("Status")
- stat(null, "Health: [round((health / maxHealth) * 100)]%")
+ stat(null, "Health: [get_health_percent()]%")
stat(null, "Intent: [a_intent]")
if (client.statpanel == "Status")
@@ -159,8 +164,8 @@
stat(null,"Power Level: [powerlevel]")
-/mob/living/slime/adjustFireLoss(amount)
- ..(-abs(amount)) // Heals them
+/mob/living/slime/adjustFireLoss(amount, do_update_health = TRUE)
+ ..(-abs(amount), do_update_health) // Heals them
/mob/living/slime/bullet_act(var/obj/item/projectile/Proj)
var/datum/ai/slime/slime_ai = ai
@@ -213,9 +218,9 @@
adjust_friendship(user, rand(2,3))
return TRUE
- if(feeding_on)
- var/prey = feeding_on
- if(feeding_on == user)
+ var/prey = feeding_on?.resolve()
+ if(prey)
+ if(prey == user)
if(prob(60))
visible_message(SPAN_DANGER("\The [user] fails to escape \the [src]!"))
else
@@ -223,12 +228,12 @@
set_feeding_on()
else
if(prob(30))
- visible_message(SPAN_DANGER("\The [user] attempts to wrestle \the [src] off \the [feeding_on]!"))
+ visible_message(SPAN_DANGER("\The [user] attempts to wrestle \the [src] off \the [prey]!"))
else
- visible_message(SPAN_DANGER("\The [user] manages to wrestle \the [src] off \the [feeding_on]!"))
+ visible_message(SPAN_DANGER("\The [user] manages to wrestle \the [src] off \the [prey]!"))
set_feeding_on()
- if(prey != feeding_on)
+ if(prey != feeding_on?.resolve())
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
SET_STATUS_MAX(src, STAT_CONFUSE, 2)
step_away(src, user)
@@ -290,7 +295,7 @@
return FALSE
/mob/living/slime/check_has_mouth()
- return 0
+ return FALSE
/mob/living/slime/set_nutrition(amt)
..()
@@ -335,6 +340,7 @@
/mob/living/slime/xenobio_scan_results()
var/decl/slime_colour/slime_data = GET_DECL(slime_type)
+ . = list()
. += "Slime scan result for \the [src]:"
. += "[slime_data.name] [is_adult ? "adult" : "baby"] slime"
. += "Nutrition:\t[nutrition]/[get_max_nutrition()]"
@@ -343,7 +349,7 @@
else if (nutrition < get_hunger_nutrition())
. += "Warning:\tthe slime is hungry."
. += "Electric charge strength:\t[powerlevel]"
- . += "Health:\t[round((health * 100) / maxHealth)]%"
+ . += "Health:\t[get_health_percent()]%"
var/list/mutations = slime_data.descendants?.Copy()
if(!mutations.len)
@@ -360,7 +366,7 @@
var/list/mutationTexts = list("[slime_data.name] ([100 - mutation_chance]%)")
for(var/i in mutationChances)
- mutationTexts += "[i] ([mutationChances[i]]%)"
+ mutationTexts += "[GET_DECL(i)] ([mutationChances[i]]%)"
. += "Possible colours on splitting:\t[english_list(mutationTexts)]"
diff --git a/mods/content/xenobiology/slime/feeding.dm b/mods/content/xenobiology/slime/feeding.dm
index fd88d5c3caf..5fb8c6d1cdb 100644
--- a/mods/content/xenobiology/slime/feeding.dm
+++ b/mods/content/xenobiology/slime/feeding.dm
@@ -31,7 +31,7 @@
if(!silent)
to_chat(src, SPAN_WARNING("\The [src] is dead."))
return FEED_RESULT_DEAD
- if(M.getCloneLoss() >= M.maxHealth * 1.5)
+ if(M.getCloneLoss() >= M.get_max_health() * 1.5)
if(!silent)
to_chat(src, SPAN_WARNING("\The [M] is too degraded to feed upon."))
return FEED_RESULT_DEAD
@@ -52,9 +52,9 @@
feeding_on = null
if(victim)
feeding_on = weakref(victim)
- events_repository.register(/decl/observ/moved, src, src, /mob/living/slime/proc/check_feed_target_position)
- events_repository.register(/decl/observ/moved, victim, src, /mob/living/slime/proc/check_feed_target_position)
- events_repository.register(/decl/observ/destroyed, victim, src, /mob/living/slime/proc/check_feed_target_position)
+ events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/mob/living/slime, check_feed_target_position))
+ events_repository.register(/decl/observ/moved, victim, src, TYPE_PROC_REF(/mob/living/slime, check_feed_target_position))
+ events_repository.register(/decl/observ/destroyed, victim, src, TYPE_PROC_REF(/mob/living/slime, check_feed_target_position))
var/datum/ai/slime/slime_ai = ai
if(istype(slime_ai))
slime_ai.update_mood()
@@ -102,8 +102,8 @@
gain_nutrition(drained)
var/heal_amt = FLOOR(drained*0.5)
if(heal_amt > 0)
- adjustOxyLoss(-heal_amt)
- adjustBruteLoss(-heal_amt)
+ adjustOxyLoss(-heal_amt, do_update_health = FALSE)
+ adjustBruteLoss(-heal_amt, do_update_health = FALSE)
adjustCloneLoss(-heal_amt)
if(ate_victim && feed_mob)
diff --git a/mods/content/xenobiology/slime/items.dm b/mods/content/xenobiology/slime/items.dm
index 67afacb3efb..872aaa57e99 100644
--- a/mods/content/xenobiology/slime/items.dm
+++ b/mods/content/xenobiology/slime/items.dm
@@ -8,7 +8,7 @@
throwforce = 0
throw_speed = 3
throw_range = 6
- origin_tech = "{'biotech':4}"
+ origin_tech = @'{"biotech":4}'
atom_flags = ATOM_FLAG_OPEN_CONTAINER
material = /decl/material/liquid/slimejelly
var/slime_type = /decl/slime_colour/grey
@@ -50,7 +50,7 @@
reagents.add_reagent(/decl/material/liquid/slimejelly, 30)
/obj/item/slime_extract/on_reagent_change()
- . = ..()
+ ..()
if(reagents?.total_volume)
var/decl/slime_colour/slime_data = GET_DECL(slime_type)
slime_data.handle_reaction(reagents)
@@ -67,7 +67,6 @@
name = "rune"
icon = 'icons/obj/rune.dmi'
icon_state = "golem"
- unacidable = 1
layer = RUNE_LAYER
/obj/effect/golemrune/Initialize()
diff --git a/mods/content/xenobiology/slime/items_cell.dm b/mods/content/xenobiology/slime/items_cell.dm
index f244b37d53a..417af572337 100644
--- a/mods/content/xenobiology/slime/items_cell.dm
+++ b/mods/content/xenobiology/slime/items_cell.dm
@@ -1,7 +1,7 @@
/obj/item/cell/slime
name = "charged slime core"
desc = "A yellow slime core that crackles with power."
- origin_tech = "{'powerstorage':2,'biotech':4}"
+ origin_tech = @'{"powerstorage":2,"biotech":4}'
icon = 'mods/content/xenobiology/icons/slimes/slime_extract_yellow.dmi'
icon_state = ICON_STATE_WORLD
maxcharge = 200
diff --git a/mods/content/xenobiology/slime/items_extract_enhancer.dm b/mods/content/xenobiology/slime/items_extract_enhancer.dm
index 637d2d18fbe..1e3faf9d7d9 100644
--- a/mods/content/xenobiology/slime/items_extract_enhancer.dm
+++ b/mods/content/xenobiology/slime/items_extract_enhancer.dm
@@ -3,7 +3,7 @@
desc = "A potent chemical mix that will give a slime extract three uses."
icon = 'icons/obj/items/chem/bottle.dmi'
icon_state = "bottle17"
- material = /decl/material/solid/plastic
+ material = /decl/material/solid/organic/plastic
obj_flags = OBJ_FLAG_HOLLOW
/obj/item/slime_extract_enhancer/afterattack(obj/target, mob/user , flag)
diff --git a/mods/content/xenobiology/slime/life.dm b/mods/content/xenobiology/slime/life.dm
index 623affe8304..86af051b3e8 100644
--- a/mods/content/xenobiology/slime/life.dm
+++ b/mods/content/xenobiology/slime/life.dm
@@ -1,55 +1,17 @@
-/mob/living/slime/Life()
+/mob/living/slime/handle_environment(datum/gas_mixture/environment)
. = ..()
- if(. && stat != DEAD)
- handle_turf_contents()
- handle_local_conditions()
- if(feeding_on)
- slime_feed()
- ingested.metabolize()
-
-/mob/living/slime/updatehealth()
- . = ..()
- if(stat != DEAD && health <= 0)
- death()
-/mob/living/slime/fluid_act(datum/reagents/fluids)
- . = ..()
- if(!QDELETED(src) && fluids?.total_volume >= FLUID_SHALLOW && stat == DEAD)
- var/turf/T = get_turf(src)
- if(T)
- T.add_fluid(/decl/material/liquid/slimejelly, (is_adult ? rand(30, 40) : rand(10, 30)))
- visible_message(SPAN_DANGER("\The [src] melts away...")) // Slimes are water soluble.
- qdel(src)
-
-/mob/living/slime/proc/handle_local_conditions()
- var/datum/gas_mixture/environment = loc?.return_air()
- adjust_body_temperature(bodytemperature, (environment?.temperature || T0C), 1)
+ if(environment)
+ var/delta = abs(bodytemperature - environment.temperature)
+ var/change = (delta / (delta > 50 ? 5 : 10))
+ if(bodytemperature > environment.temperature)
+ change = -(change)
+ bodytemperature += (min(environment.temperature, bodytemperature + change) - bodytemperature)
if(bodytemperature <= die_temperature)
adjustToxLoss(200)
- death()
else if(bodytemperature <= hurt_temperature)
adjustToxLoss(30)
- updatehealth()
-/mob/living/slime/proc/adjust_body_temperature(current, loc_temp, boost)
- var/delta = abs(current-loc_temp)
- var/change = (delta / (delta > 50 ? 5 : 10)) * boost
- if(current > loc_temp)
- change = -(change)
- bodytemperature += (min(loc_temp, current + change) - current)
-
-/mob/living/slime/handle_regular_status_updates()
- . = ..()
- if(stat != DEAD)
- set_stat(CONSCIOUS)
- if(prob(30))
- adjustOxyLoss(-1)
- adjustToxLoss(-1)
- adjustFireLoss(-1)
- adjustCloneLoss(-1)
- adjustBruteLoss(-1)
-
-/mob/living/slime/proc/handle_turf_contents()
// If we're standing on top of a dead mob or small items, we can
// ingest it (or just melt it a little if we're too small)
// Also helps to keep our cell tidy!
@@ -80,13 +42,51 @@
if(length(contents) != last_contents_length)
queue_icon_update()
+/mob/living/slime/handle_nutrition_and_hydration()
+ . = ..()
+ if(feeding_on)
+ slime_feed()
+ ingested.metabolize()
+
+/mob/living/slime/fluid_act(datum/reagents/fluids)
+ . = ..()
+ if(!QDELETED(src) && fluids?.total_volume >= FLUID_SHALLOW && stat == DEAD)
+ var/turf/T = get_turf(src)
+ if(T)
+ T.add_fluid(/decl/material/liquid/slimejelly, (is_adult ? rand(30, 40) : rand(10, 30)))
+ visible_message(SPAN_DANGER("\The [src] melts away...")) // Slimes are water soluble.
+ qdel(src)
+
/mob/living/slime/get_hunger_factor()
return (0.1 + 0.05 * is_adult)
/mob/living/slime/get_thirst_factor()
return 0
+/mob/living/slime/fluid_act(datum/reagents/fluids)
+ . = ..()
+ if(stat == DEAD)
+ var/obj/effect/fluid/F = locate() in loc
+ if(F && F.reagents?.total_volume >= FLUID_SHALLOW)
+ F.reagents.add_reagent(/decl/material/liquid/slimejelly, (is_adult ? rand(30, 40) : rand(10, 30)))
+ visible_message(SPAN_DANGER("\The [src] melts away...")) // Slimes are water soluble.
+ qdel(src)
+
+/mob/living/slime/handle_living_non_stasis_processes()
+ . = ..()
+ set_stat(CONSCIOUS)
+ if(prob(30))
+ adjustOxyLoss(-1, do_update_health = FALSE)
+ adjustToxLoss(-1, do_update_health = FALSE)
+ adjustFireLoss(-1, do_update_health = FALSE)
+ adjustCloneLoss(-1, do_update_health = FALSE)
+ adjustBruteLoss(-1)
+
/mob/living/slime/handle_nutrition_and_hydration()
+ . = ..()
+ if(feeding_on)
+ slime_feed()
+ ingested.metabolize()
// Digest whatever we've got floating around in our goop.
if(length(contents))
@@ -133,6 +133,9 @@
..()
+/mob/living/slime/get_satiated_nutrition() // Can't go above it
+ . = is_adult ? 1150 : 950
+
/mob/living/slime/get_max_nutrition() // Can't go above it
. = is_adult ? 1200 : 1000
diff --git a/mods/content/xenobiology/slime/powers.dm b/mods/content/xenobiology/slime/powers.dm
index cac27ead4e2..a90c4b879f9 100644
--- a/mods/content/xenobiology/slime/powers.dm
+++ b/mods/content/xenobiology/slime/powers.dm
@@ -16,7 +16,7 @@
return
is_adult = TRUE
- maxHealth = 200
+ mob_default_max_health = 200
amount_grown = 0
update_name()
update_icon()
diff --git a/mods/content/xenobiology/slime/slime_click.dm b/mods/content/xenobiology/slime/slime_click.dm
index 052da49f80c..7107a79d7d1 100644
--- a/mods/content/xenobiology/slime/slime_click.dm
+++ b/mods/content/xenobiology/slime/slime_click.dm
@@ -4,25 +4,25 @@
/mob/living/slime/UnarmedAttack(var/atom/A, var/proximity)
. = ..()
- if(!.)
+ if(.)
return
// Eating
if(feeding_on || (locate(/mob) in contents))
- return
+ return FALSE
//should have already been set if we are attacking a mob, but it doesn't hurt and will cover attacking non-mobs too
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
var/mob/living/M = A
if(!istype(M))
A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") // Basic attack.
- return
+ return TRUE
if(a_intent == I_HELP)
M.visible_message( \
SPAN_NOTICE("\The [src] gently pokes \the [M]."), \
SPAN_NOTICE("\The [src] gently pokes you."))
- return
+ return TRUE
var/power = max(0, min(10, (powerlevel + rand(0, 3))))
if(a_intent == I_DISARM)
@@ -44,10 +44,10 @@
SPAN_DANGER("\The [src] pounces at you!"))
if(prob(40))
SET_STATUS_MAX(src, STAT_WEAK, (power * 0.5))
- return
+ return TRUE
if(a_intent == I_GRAB && slime_attach(M))
- return
+ return TRUE
if(a_intent == I_HURT)
if(prob(15) && !M.lying)
@@ -57,3 +57,5 @@
SET_STATUS_MAX(M, STAT_WEAK, (power * 0.5))
else
A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped")
+ return TRUE
+ return FALSE
diff --git a/mods/content/xenobiology/slime/slime_hud.dm b/mods/content/xenobiology/slime/slime_hud.dm
index f81edf4e3fd..5bc0d0917f0 100644
--- a/mods/content/xenobiology/slime/slime_hud.dm
+++ b/mods/content/xenobiology/slime/slime_hud.dm
@@ -1,11 +1,5 @@
/datum/hud/slime/FinalizeInstantiation()
- src.adding = list()
+ action_intent = new /obj/screen/intent(null, mymob)
+ src.adding = list(action_intent)
- var/obj/screen/using
-
- using = new /obj/screen/intent()
- src.adding += using
- action_intent = using
-
- mymob.client.screen = list()
- mymob.client.screen += src.adding
+ ..()
diff --git a/mods/content/xenobiology/slime/slime_surgery.dm b/mods/content/xenobiology/slime/slime_surgery.dm
index 77e5735ae64..b63388aaf91 100644
--- a/mods/content/xenobiology/slime/slime_surgery.dm
+++ b/mods/content/xenobiology/slime/slime_surgery.dm
@@ -41,15 +41,18 @@
/decl/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/slime/target, target_zone, obj/item/tool)
user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \
"You start cutting through [target]'s flesh with \the [tool].")
+ ..()
/decl/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/slime/target, target_zone, obj/item/tool)
user.visible_message("[user] cuts through [target]'s flesh with \the [tool].", \
"You cut through [target]'s flesh with \the [tool], revealing its silky innards.")
target.core_removal_stage = 1
+ ..()
/decl/surgery_step/slime/cut_flesh/fail_step(mob/living/user, mob/living/slime/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, tearing [target]'s flesh with \the [tool]!", \
"Your hand slips, tearing [target]'s flesh with \the [tool]!")
+ ..()
//////////////////////////////////////////////////////////////////
// slime innards cutting surgery step
@@ -67,15 +70,18 @@
/decl/surgery_step/slime/cut_innards/begin_step(mob/user, mob/living/slime/target, target_zone, obj/item/tool)
user.visible_message("[user] starts cutting [target]'s silky innards apart with \the [tool].", \
"You start cutting [target]'s silky innards apart with \the [tool].")
+ ..()
/decl/surgery_step/slime/cut_innards/end_step(mob/living/user, mob/living/slime/target, target_zone, obj/item/tool)
user.visible_message("[user] cuts [target]'s innards apart with \the [tool], exposing the cores.", \
"You cut [target]'s innards apart with \the [tool], exposing the cores.")
target.core_removal_stage = 2
+ ..()
/decl/surgery_step/slime/cut_innards/fail_step(mob/living/user, mob/living/slime/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, tearing [target]'s innards with \the [tool]!", \
"Your hand slips, tearing [target]'s innards with \the [tool]!")
+ ..()
//////////////////////////////////////////////////////////////////
// slime core removal surgery step
@@ -97,6 +103,7 @@
user.visible_message(
SPAN_NOTICE("\The [user] starts cutting out one of \the [target]'s cores with \the [tool]."), \
SPAN_NOTICE("You start cutting out one of \the [target]'s cores with \the [tool]."))
+ ..()
/decl/surgery_step/slime/saw_core/end_step(mob/living/user, mob/living/slime/target, target_zone, obj/item/tool)
if(target.cores <= 0)
@@ -108,8 +115,10 @@
SPAN_NOTICE("\The [user] cuts \the [core] out of \the [target] with \the [tool]."), \
SPAN_NOTICE("You cut \the [core] out of \the [target] with \the [tool]. It looks like there are [target.cores] core\s left."))
target.update_icon()
+ ..()
/decl/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/slime/target, target_zone, obj/item/tool)
user.visible_message(
SPAN_DANGER("\The [user]'s hand slips, failing to extract the slime core."), \
SPAN_DANGER("Your hand slips, causing you to miss the core!"))
+ ..()
diff --git a/mods/content/xenobiology/slime/slime_update_icon.dm b/mods/content/xenobiology/slime/slime_update_icon.dm
index 485f834b3b0..4e99fe88ceb 100644
--- a/mods/content/xenobiology/slime/slime_update_icon.dm
+++ b/mods/content/xenobiology/slime/slime_update_icon.dm
@@ -5,13 +5,9 @@
icon_state = initial(icon_state)
if(stat == DEAD)
icon_state = "[icon_state]-[cores ? "dead" : "nocore"]"
- layer = initial(layer)
else if(feeding_on)
- var/mob/feed_mob = feeding_on.resolve()
icon_state = "[icon_state]-eat"
- layer = feed_mob.layer + 0.5
- else
- layer = initial(layer)
+ reset_layer()
..()
@@ -28,3 +24,10 @@
//MA.add_filter("slime_mask", 1, list("alpha", render_source="slime_\ref[src]", flags=MASK_INVERSE))
LAZYADD(new_underlays, MA)
underlays = new_underlays
+
+/mob/living/slime/get_base_layer()
+ if(stat != DEAD && feeding_on)
+ var/atom/feed_mob = feeding_on.resolve()
+ if(istype(feed_mob))
+ return max(ABOVE_HUMAN_LAYER, feed_mob.layer + 0.5)
+ return ..()
diff --git a/mods/mobs/borers/datum/antagonist.dm b/mods/mobs/borers/datum/antagonist.dm
index 2d2c31a1645..b8b0c7feb4d 100644
--- a/mods/mobs/borers/datum/antagonist.dm
+++ b/mods/mobs/borers/datum/antagonist.dm
@@ -61,4 +61,4 @@
spawn_announcement_sound = global.using_map.lifesign_spawn_sound
/decl/special_role/borer/attempt_random_spawn()
- if(config.aliens_allowed) ..()
+ if(get_config_value(/decl/config/toggle/aliens_allowed)) ..()
diff --git a/mods/mobs/borers/datum/symbiote.dm b/mods/mobs/borers/datum/symbiote.dm
index a0bc735a5e8..94b885087d1 100644
--- a/mods/mobs/borers/datum/symbiote.dm
+++ b/mods/mobs/borers/datum/symbiote.dm
@@ -29,7 +29,7 @@ var/global/list/symbiote_starting_points = list()
/decl/hierarchy/outfit/job/symbiote_host
name = "Job - Symbiote Host"
-/datum/job/symbiote/post_equip_rank(var/mob/person, var/alt_title)
+/datum/job/symbiote/post_equip_job_title(var/mob/person, var/alt_title)
var/mob/living/simple_animal/borer/symbiote = person
symbiote.SetName(symbiote.truename)
@@ -87,7 +87,7 @@ var/global/list/symbiote_starting_points = list()
if(length(global.symbiote_starting_points))
symbiote.forceMove(pick(global.symbiote_starting_points))
else
- symbiote.forceMove(pick(global.latejoin_locations))
+ symbiote.forceMove(get_random_spawn_turf(SPAWN_FLAG_JOBS_CAN_SPAWN))
if(H.mind)
H.mind.transfer_to(symbiote)
@@ -118,7 +118,7 @@ var/global/list/symbiote_starting_points = list()
return
/datum/job/symbiote/is_position_available()
- . = ..() && length(find_valid_hosts(TRUE))
+ . = ..() && length(find_valid_hosts(TRUE))
/obj/abstract/landmark/symbiote_start
name = "Symbiote Start"
diff --git a/mods/mobs/borers/mob/borer/borer.dm b/mods/mobs/borers/mob/borer/borer.dm
index 09b1cb38b0d..64dcbde158d 100644
--- a/mods/mobs/borers/mob/borer/borer.dm
+++ b/mods/mobs/borers/mob/borer/borer.dm
@@ -48,7 +48,7 @@
var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
/obj/item/holder/borer
- origin_tech = "{'biotech':6}"
+ origin_tech = @'{"biotech":6}'
/mob/living/simple_animal/borer/roundstart
roundstart = TRUE
@@ -81,24 +81,24 @@
/mob/living/simple_animal/borer/proc/set_borer_name()
truename = "[borer_names[min(generation, borer_names.len)]] [random_id("borer[generation]", 1000, 9999)]"
-/mob/living/simple_animal/borer/Life()
+/mob/living/simple_animal/borer/handle_vision()
+ . = ..()
+ set_status(STAT_BLIND, host ? GET_STATUS(host, STAT_BLIND) : 0)
+ set_status(STAT_BLURRY, host ? GET_STATUS(host, STAT_BLURRY) : 0)
+/mob/living/simple_animal/borer/handle_disabilities()
+ . = ..()
sdisabilities = 0
if(host)
- set_status(STAT_BLIND, GET_STATUS(host, STAT_BLIND))
- set_status(STAT_BLURRY, GET_STATUS(host, STAT_BLURRY))
if(host.sdisabilities & BLINDED)
sdisabilities |= BLINDED
if(host.sdisabilities & DEAFENED)
sdisabilities |= DEAFENED
- else
- set_status(STAT_BLIND, 0)
- set_status(STAT_BLURRY, 0)
+/mob/living/simple_animal/borer/handle_living_non_stasis_processes()
. = ..()
- if(!.)
- return FALSE
-
+ if(!. || !host || host.stat)
+ return
if(host)
if(!stat && !host.stat)
@@ -117,27 +117,21 @@
else
to_chat(src, SPAN_NOTICE("You shake off your lethargy as the sugar leaves your host's blood."))
docile = 0
-
if(chemicals < 250 && host.nutrition >= (neutered ? 200 : 50))
host.nutrition--
chemicals++
-
if(controlling)
-
if(neutered)
host.release_control()
return
-
if(docile)
to_chat(host, SPAN_NOTICE("You are feeling far too docile to continue controlling your host..."))
host.release_control()
return
-
if(prob(5))
host.adjustBrainLoss(0.1)
-
- if(prob(host.getBrainLoss()/20))
- INVOKE_ASYNC(host, /mob/proc/say, "*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]")
+ if(prob(host.getBrainLoss()/20))
+ INVOKE_ASYNC(host, TYPE_PROC_REF(/mob, say), "*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]")
/mob/living/simple_animal/borer/Stat()
. = ..()
@@ -209,7 +203,7 @@
if(istype(borer_hud))
for(var/obj/thing in borer_hud.borer_hud_elements)
thing.color = COLOR_BORER_RED
- addtimer(CALLBACK(src, /mob/living/simple_animal/borer/proc/reset_ui_callback), amt)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_animal/borer, reset_ui_callback)), amt)
#undef COLOR_BORER_RED
/mob/living/simple_animal/borer/proc/leave_host()
@@ -217,8 +211,8 @@
var/datum/hud/borer/borer_hud = hud_used
if(istype(borer_hud))
for(var/obj/thing in borer_hud.borer_hud_elements)
- thing.alpha = 0
- thing.invisibility = INVISIBILITY_MAXIMUM
+ thing.alpha = 0
+ thing.set_invisibility(INVISIBILITY_ABSTRACT)
if(!host) return
diff --git a/mods/mobs/borers/mob/borer/borer_attacks.dm b/mods/mobs/borers/mob/borer/borer_attacks.dm
index 90061a001e2..138b2f34958 100644
--- a/mods/mobs/borers/mob/borer/borer_attacks.dm
+++ b/mods/mobs/borers/mob/borer/borer_attacks.dm
@@ -1,40 +1,44 @@
/mob/living/simple_animal/borer/UnarmedAttack(atom/A, proximity)
+ . = ..()
+ if(.)
+ return
+
if(!isliving(A) || a_intent != I_GRAB)
- return ..()
+ return FALSE
if(host || !can_use_borer_ability(requires_host_value = FALSE, check_last_special = FALSE))
- return
+ return FALSE
var/mob/living/M = A
if(M.has_brain_worms())
to_chat(src, SPAN_WARNING("You cannot take a host who already has a passenger!"))
- return
+ return TRUE
//TODO generalize borers to enter any mob. Until then, return early.
if(!ishuman(M))
to_chat(src, SPAN_WARNING("This creature is not sufficiently intelligent to host you."))
- return
+ return TRUE
// end TODO
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, BP_HEAD)
if(!E)
to_chat(src, SPAN_WARNING("\The [H] does not have a head!"))
- return
+ return TRUE
if(!H.should_have_organ(BP_BRAIN))
to_chat(src, SPAN_WARNING("\The [H] does not seem to have a brain cavity to enter."))
- return
+ return TRUE
if(H.check_head_coverage())
to_chat(src, SPAN_WARNING("You cannot get through that host's protective gear."))
- return
+ return TRUE
to_chat(M, SPAN_WARNING("Something slimy begins probing at the opening of your ear canal..."))
to_chat(src, SPAN_NOTICE("You slither up [M] and begin probing at their ear canal..."))
set_ability_cooldown(5 SECONDS)
if(!do_after(src, 3 SECONDS, M))
- return
+ return TRUE
to_chat(src, SPAN_NOTICE("You wiggle into \the [M]'s ear."))
if(M.stat == CONSCIOUS)
@@ -48,7 +52,7 @@
if(istype(borer_hud))
for(var/obj/thing in borer_hud.borer_hud_elements)
thing.alpha = 255
- thing.invisibility = 0
+ thing.set_invisibility(INVISIBILITY_NONE)
//Update their traitor status.
if(host.mind && !neutered)
@@ -61,3 +65,4 @@
replace_brain()
else if(E) // If they're in normally, implant removal can get them out.
LAZYDISTINCTADD(E.implants, src)
+ return TRUE
diff --git a/mods/mobs/borers/mob/borer/borer_hud.dm b/mods/mobs/borers/mob/borer/borer_hud.dm
index 8bf393d507a..301d96256e0 100644
--- a/mods/mobs/borers/mob/borer/borer_hud.dm
+++ b/mods/mobs/borers/mob/borer/borer_hud.dm
@@ -14,10 +14,10 @@
. = ..()
/datum/hud/borer/FinalizeInstantiation()
- hud_intent_selector = new
- adding = list(hud_intent_selector)
- hud_inject_chemicals = new
- hud_leave_host = new
+ hud_intent_selector = new(null, mymob)
+ adding += hud_intent_selector
+ hud_inject_chemicals = new(null, mymob)
+ hud_leave_host = new(null, mymob)
borer_hud_elements = list(
hud_inject_chemicals,
hud_leave_host
@@ -25,7 +25,7 @@
if(isborer(mymob))
var/mob/living/simple_animal/borer/borer = mymob
if(!borer.neutered)
- hud_toggle_control = new
+ hud_toggle_control = new(null, mymob)
borer_hud_elements += hud_toggle_control
adding += borer_hud_elements
if(mymob)
@@ -33,9 +33,8 @@
if(istype(borer) && borer.host)
for(var/obj/thing in borer_hud_elements)
thing.alpha = 255
- thing.invisibility = 0
- if(mymob.client)
- mymob.client.screen |= adding
+ thing.set_invisibility(INVISIBILITY_NONE)
+ ..()
/mob/living/simple_animal/borer
hud_type = /datum/hud/borer
@@ -52,10 +51,8 @@
alpha = 0
invisibility = INVISIBILITY_MAXIMUM
-/obj/screen/borer/Click(location, control, params)
- if(!isborer(usr))
- return FALSE
- if(usr.stat == DEAD)
+/obj/screen/borer/handle_click(mob/user, params)
+ if(!isborer(user))
return FALSE
var/mob/living/simple_animal/borer/worm = usr
if(!worm.host)
@@ -67,12 +64,12 @@
icon_state = "seize_control"
screen_loc = "LEFT+3,TOP-1"
-/obj/screen/borer/toggle_host_control/Click(location, control, params)
+/obj/screen/borer/toggle_host_control/handle_click(mob/user, params)
. = ..()
if(!.)
return FALSE
- var/mob/living/simple_animal/borer/worm = usr
+ var/mob/living/simple_animal/borer/worm = user
if(!worm.can_use_borer_ability())
return
@@ -124,12 +121,12 @@
icon_state = "inject_chemicals"
screen_loc = "LEFT+2,TOP-1"
-/obj/screen/borer/inject_chemicals/Click(location, control, params)
+/obj/screen/borer/inject_chemicals/handle_click(mob/user, params)
. = ..()
if(!.)
return FALSE
- var/mob/living/simple_animal/borer/worm = usr
+ var/mob/living/simple_animal/borer/worm = user
if(!worm.can_use_borer_ability())
return
@@ -151,12 +148,12 @@
icon_state = "leave_host"
screen_loc = "LEFT+1,TOP-1"
-/obj/screen/borer/leave_host/Click(location, control, params)
+/obj/screen/borer/leave_host/handle_click(mob/user, params)
. = ..()
if(!.)
return FALSE
- var/mob/living/simple_animal/borer/worm = usr
+ var/mob/living/simple_animal/borer/worm = user
if(!worm.can_use_borer_ability())
return
diff --git a/mods/mobs/dionaea/_dionaea.dme b/mods/mobs/dionaea/_dionaea.dme
index 41aa2a72fb7..a43670132b3 100644
--- a/mods/mobs/dionaea/_dionaea.dme
+++ b/mods/mobs/dionaea/_dionaea.dme
@@ -20,7 +20,6 @@
#include "mob\nymph_emotes.dm"
#include "mob\nymph_gestalting.dm"
#include "mob\nymph_holder.dm"
-#include "mob\nymph_inventory.dm"
#include "mob\nymph_life.dm"
#include "mob\nymph_ui.dm"
#include "mob\nymph_update_icons.dm"
diff --git a/mods/mobs/dionaea/datums/seed.dm b/mods/mobs/dionaea/datums/seed.dm
index 5244715c2e5..4d0937897ac 100644
--- a/mods/mobs/dionaea/datums/seed.dm
+++ b/mods/mobs/dionaea/datums/seed.dm
@@ -25,3 +25,7 @@
/decl/hierarchy/supply_pack/hydroponics/exoticseeds/Initialize()
contains[/obj/item/seeds/diona] = 2
. = ..()
+
+/obj/structure/closet/crate/hydroponics/exotic/WillContain()
+ . = ..()
+ .[/obj/item/seeds/diona] = 2
\ No newline at end of file
diff --git a/mods/mobs/dionaea/icons/lunchbox_nymph.dmi b/mods/mobs/dionaea/icons/lunchbox_nymph.dmi
new file mode 100644
index 00000000000..500f939b9eb
Binary files /dev/null and b/mods/mobs/dionaea/icons/lunchbox_nymph.dmi differ
diff --git a/mods/mobs/dionaea/icons/ui.dmi b/mods/mobs/dionaea/icons/ui.dmi
index 55b53bed9f0..f4cd523bc52 100644
Binary files a/mods/mobs/dionaea/icons/ui.dmi and b/mods/mobs/dionaea/icons/ui.dmi differ
diff --git a/mods/mobs/dionaea/items/lunchbox.dm b/mods/mobs/dionaea/items/lunchbox.dm
index b1e906a69c3..7be30a9b699 100644
--- a/mods/mobs/dionaea/items/lunchbox.dm
+++ b/mods/mobs/dionaea/items/lunchbox.dm
@@ -1,7 +1,6 @@
/obj/item/storage/lunchbox/nymph
name = "\improper Diona nymph lunchbox"
- icon_state = "lunchbox_dionanymph"
- item_state = "toolbox_yellow"
+ icon = 'mods/mobs/dionaea/icons/lunchbox_nymph.dmi'
desc = "A little lunchbox. This one is an adorable Diona nymph on the side!"
/obj/item/storage/lunchbox/nymph/filled
diff --git a/mods/mobs/dionaea/items/roast.dm b/mods/mobs/dionaea/items/roast.dm
index 3df2242a39a..793bfe223bb 100644
--- a/mods/mobs/dionaea/items/roast.dm
+++ b/mods/mobs/dionaea/items/roast.dm
@@ -4,7 +4,7 @@
icon_state = "dionaroast"
trash = /obj/item/trash/plate
filling_color = "#75754b"
- center_of_mass = @"{'x':16,'y':7}"
+ center_of_mass = @'{"x":16,"y":7}'
nutriment_desc = list("a chorus of flavor" = 6)
nutriment_amt = 6
bitesize = 2
diff --git a/mods/mobs/dionaea/mob/_nymph.dm b/mods/mobs/dionaea/mob/_nymph.dm
index 63fede80c71..714fe5d7def 100644
--- a/mods/mobs/dionaea/mob/_nymph.dm
+++ b/mods/mobs/dionaea/mob/_nymph.dm
@@ -3,21 +3,13 @@
#define DIONA_SCREEN_LOC_INTENT "RIGHT-2,BOTTOM:5"
#define DIONA_SCREEN_LOC_HEALTH ui_alien_health
-/datum/extension/hattable/diona_nymph/wear_hat(mob/wearer, obj/item/clothing/head/new_hat)
- var/mob/living/carbon/alien/diona/doona = wearer
- if(istype(doona) && (!doona.holding_item || doona.holding_item != new_hat))
- . = ..()
- if(.)
- hat?.screen_loc = DIONA_SCREEN_LOC_HAT
-
/mob/living/carbon/alien/diona
name = "diona nymph"
desc = "It's a little skittery critter. Chirp."
icon = 'mods/mobs/dionaea/icons/nymph.dmi'
icon_state = ICON_STATE_WORLD
death_msg = "expires with a pitiful chirrup..."
- health = 60
- maxHealth = 60
+ mob_default_max_health = 60
available_maneuvers = list(/decl/maneuver/leap)
status_flags = NO_ANTAG
@@ -34,31 +26,19 @@
holder_type = /obj/item/holder/diona
possession_candidate = 1
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT
+ atom_flags = ATOM_FLAG_NO_CHEM_CHANGE
hud_type = /datum/hud/diona_nymph
ai = /datum/ai/nymph
z_flags = ZMM_MANGLE_PLANES
- var/obj/item/holding_item
var/tmp/flower_color
var/tmp/last_glow
/mob/living/carbon/alien/diona/get_jump_distance()
return 3
-/mob/living/carbon/alien/diona/Login()
- . = ..()
- if(client)
- if(holding_item)
- holding_item.screen_loc = DIONA_SCREEN_LOC_HELD
- client.screen |= holding_item
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- if(hattable?.hat)
- hattable.hat.screen_loc = DIONA_SCREEN_LOC_HAT
- client.screen |= hattable.hat
-
/mob/living/carbon/alien/diona/sterile
name = "sterile nymph"
@@ -70,21 +50,32 @@
set_extension(src, /datum/extension/base_icon_state, icon_state)
add_language(/decl/language/diona)
add_language(/decl/language/human/common, 0)
- set_extension(src, /datum/extension/hattable/diona_nymph, list(0, -8))
-
+ add_inventory_slot(new /datum/inventory_slot/head/simple)
+ add_held_item_slot(new /datum/inventory_slot/gripper/mouth/nymph)
if(prob(flower_chance))
flower_color = get_random_colour(1)
update_icon()
. = ..(mapload)
-/mob/living/carbon/alien/diona/show_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns)
+/mob/living/carbon/alien/diona/get_dexterity(var/silent)
+ return (DEXTERITY_EQUIP_ITEM|DEXTERITY_HOLD_ITEM)
+
+/mob/living/carbon/alien/diona/get_bodytype()
+ return GET_DECL(/decl/bodytype/diona)
+
+/decl/bodytype/diona
+ name = "nymph"
+ bodytype_flag = 0
+ bodytype_category = "diona nymph body"
+
+/decl/bodytype/diona/Initialize()
+ equip_adjust = list(
+ slot_head_str = list(
+ "[NORTH]" = list(0, -8),
+ "[SOUTH]" = list(0, -8),
+ "[EAST]" = list(0, -8),
+ "[WEST]" = list(0, -8)
+ )
+ )
. = ..()
- if(holding_item)
- to_chat(user, SPAN_NOTICE("It is holding [html_icon(holding_item)] \a [holding_item]."))
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- if(hattable?.hat)
- to_chat(user, SPAN_NOTICE("It is wearing [html_icon(hattable.hat)] \a [hattable.hat]."))
-
-/mob/living/carbon/alien/diona/get_dexterity(var/silent = FALSE)
- return DEXTERITY_NONE
diff --git a/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm b/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm
index 7fc8cf70600..edf94c76307 100644
--- a/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm
+++ b/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm
@@ -1,6 +1,6 @@
/obj/structure/diona_gestalt/attackby(var/obj/item/thing, var/mob/user)
. = ..()
- if(thing.force)
+ if(thing.force)
shed_atom(forcefully = TRUE)
/obj/structure/diona_gestalt/hitby()
@@ -20,4 +20,4 @@
shed_atom(forcefully = TRUE)
/obj/structure/diona_gestalt/proc/handle_member_click(var/mob/living/carbon/alien/diona/clicker)
- return
+ return FALSE
diff --git a/mods/mobs/dionaea/mob/nymph_attacks.dm b/mods/mobs/dionaea/mob/nymph_attacks.dm
index 35b301bda6e..ec4cbbfdcc6 100644
--- a/mods/mobs/dionaea/mob/nymph_attacks.dm
+++ b/mods/mobs/dionaea/mob/nymph_attacks.dm
@@ -1,7 +1,9 @@
/mob/living/carbon/alien/diona/UnarmedAttack(var/atom/A)
- setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ if(incapacitated())
+ return ..()
+ setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(istype(loc, /obj/structure/diona_gestalt))
var/obj/structure/diona_gestalt/gestalt = loc
return gestalt.handle_member_click(src, A)
@@ -28,64 +30,47 @@
qdel(pile)
S.forceMove(get_turf(G))
G.visible_message(SPAN_NOTICE("\A [S] falls out!"))
- return
+ return TRUE
// End superhacky stuff.
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- if(hattable?.wear_hat(src, A))
- return
-
- if((a_intent == I_DISARM || a_intent == I_HELP) && can_collect(A))
- collect(A)
- return
-
if(ismob(A))
if(src != A && !gestalt_with(A))
visible_message(SPAN_NOTICE("\The [src] butts its head into \the [A]."))
- return
-
- . = ..()
-
-/mob/living/carbon/alien/diona/RangedAttack(atom/A, var/params)
- if((a_intent == I_HURT || a_intent == I_GRAB) && holding_item)
- setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- visible_message(SPAN_DANGER("\The [src] spits \a [holding_item] at \the [A]!"))
- var/atom/movable/temp = holding_item
- try_unequip(holding_item)
- if(temp)
- temp.throw_at(A, 10, rand(3,5), src)
return TRUE
- . = ..()
+ return ..()
/mob/living/carbon/alien/diona/proc/handle_tray_interaction(var/obj/machinery/portable_atmospherics/hydroponics/tray)
if(incapacitated())
- return
+ return FALSE
- if(!tray.seed && istype(holding_item, /obj/item/seeds))
- var/atom/movable/temp = holding_item
- try_unequip(temp)
- if(temp)
- tray.plant_seed(src, temp)
- return
+ if(!tray.seed)
+ var/obj/item/seeds/seeds = get_active_hand()
+ if(istype(seeds))
+ if(try_unequip(seeds))
+ tray.plant_seed(src, seeds)
+ return TRUE
+ return FALSE
if(tray.dead)
if(tray.remove_dead(src, silent = TRUE))
reagents.add_reagent(/decl/material/liquid/nutriment/glucose, rand(10,20))
visible_message(SPAN_NOTICE("\The [src] chews up the dead plant, clearing \the [tray] out."), SPAN_NOTICE("You devour the dead plant, clearing \the [tray]."))
- return
+ return TRUE
+ return FALSE
if(tray.harvest)
if(tray.harvest(src))
visible_message(SPAN_NOTICE("\The [src] harvests from \the [tray]."), SPAN_NOTICE("You harvest the contents of \the [tray]."))
- return
+ return TRUE
+ return FALSE
if(tray.weedlevel || tray.pestlevel)
reagents.add_reagent(/decl/material/liquid/nutriment/glucose, (tray.weedlevel + tray.pestlevel))
tray.weedlevel = 0
tray.pestlevel = 0
visible_message(SPAN_NOTICE("\The [src] begins rooting through \the [tray], ripping out pests and weeds, and eating them noisily."),SPAN_NOTICE("You begin rooting through \the [tray], ripping out pests and weeds, and eating them noisily."))
- return
+ return TRUE
if(tray.nutrilevel < 10)
var/nutrition_cost = (10-tray.nutrilevel) * 5
@@ -95,7 +80,7 @@
adjust_nutrition(-((10-tray.nutrilevel) * 5))
else
to_chat(src, SPAN_NOTICE("You haven't eaten enough to refill \the [tray]'s nutrients."))
- return
+ return TRUE
if(tray.waterlevel < 100)
var/nutrition_cost = FLOOR((100-tray.nutrilevel)/10) * 5
@@ -104,6 +89,7 @@
tray.waterlevel = 100
else
to_chat(src, SPAN_NOTICE("You haven't eaten enough to refill \the [tray]'s water."))
- return
+ return TRUE
visible_message(SPAN_NOTICE("\The [src] rolls around in \the [tray] for a bit."),SPAN_NOTICE("You roll around in \the [tray] for a bit."))
+ return TRUE
diff --git a/mods/mobs/dionaea/mob/nymph_death.dm b/mods/mobs/dionaea/mob/nymph_death.dm
index b2c6c519217..b1bdc4ec30f 100644
--- a/mods/mobs/dionaea/mob/nymph_death.dm
+++ b/mods/mobs/dionaea/mob/nymph_death.dm
@@ -2,6 +2,4 @@
var/obj/structure/diona_gestalt/gestalt = loc
if(istype(gestalt))
gestalt.shed_atom(src, TRUE, FALSE)
- if(holding_item)
- try_unequip(holding_item)
return ..(gibbed,death_msg)
diff --git a/mods/mobs/dionaea/mob/nymph_holder.dm b/mods/mobs/dionaea/mob/nymph_holder.dm
index 0ac27fa04c0..1a06eb0d14b 100644
--- a/mods/mobs/dionaea/mob/nymph_holder.dm
+++ b/mods/mobs/dionaea/mob/nymph_holder.dm
@@ -1,5 +1,5 @@
/obj/item/holder/diona
- origin_tech = "{'magnets':3,'biotech':5}"
+ origin_tech = @'{"magnets":3,"biotech":5}'
slot_flags = SLOT_HEAD | SLOT_OVER_BODY | SLOT_HOLSTER
armor = list(
ARMOR_BIO = ARMOR_BIO_RESISTANT,
diff --git a/mods/mobs/dionaea/mob/nymph_inventory.dm b/mods/mobs/dionaea/mob/nymph_inventory.dm
deleted file mode 100644
index 9f443cc8aff..00000000000
--- a/mods/mobs/dionaea/mob/nymph_inventory.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-/mob/living/carbon/alien/diona/drop_from_inventory(var/obj/item/dropping_item)
- . = ..()
- if(dropping_item == holding_item)
- holding_item = null
-
-/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands. Use mouth.
- if(can_collect(W))
- collect(W)
- return TRUE
- W.forceMove(get_turf(src))
- return TRUE
-
-/mob/living/carbon/alien/diona/proc/can_collect(var/obj/item/collecting)
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- return (!holding_item && \
- istype(collecting) && \
- collecting != hattable?.hat && \
- collecting.loc != src && \
- !collecting.anchored && \
- collecting.simulated && \
- collecting.w_class <= can_pull_size \
- )
-
-/mob/living/carbon/alien/diona/proc/collect(var/obj/item/collecting)
- collecting.forceMove(src)
- holding_item = collecting
- visible_message(SPAN_NOTICE("\The [src] engulfs \the [holding_item]."))
-
- // This means dionaea can hoover up beakers as a kind of impromptu chem disposal
- // technique, so long as they're okay with the reagents reacting inside them.
- if(holding_item.reagents && holding_item.reagents.total_volume)
- holding_item.reagents.trans_to_mob(src, holding_item.reagents.total_volume, CHEM_INGEST)
-
- // It also means they can do the old school cartoon schtick of eating an entire sandwich
- // and spitting up an empty plate. Ptooie.
- if(istype(holding_item, /obj/item/chems/food))
- var/obj/item/chems/food/food = holding_item
- holding_item = null
- if(food.trash)
- holding_item = new food.trash(src)
- qdel(food)
-
- if(!QDELETED(holding_item))
- holding_item.equipped(src)
- holding_item.screen_loc = DIONA_SCREEN_LOC_HELD
-
-/mob/living/carbon/alien/diona/verb/drop_item_verb()
- set name = "Drop Held Item"
- set desc = "Drop the item you are currently holding inside."
- set category = "IC"
- set src = usr
- drop_item()
-
-/mob/living/carbon/alien/diona/drop_item()
- var/item = holding_item
- if(item && try_unequip(item))
- visible_message(SPAN_NOTICE("\The [src] regurgitates \the [item]."))
- return TRUE
- . = ..()
-
-// Makes it so that the held item's screen_loc isn't unset.
-/mob/living/carbon/alien/diona/item_should_have_screen_presence(obj/item/item, slot)
- return (item == holding_item) || ..()
\ No newline at end of file
diff --git a/mods/mobs/dionaea/mob/nymph_life.dm b/mods/mobs/dionaea/mob/nymph_life.dm
index d39dbadbd3b..4a13f9e580c 100644
--- a/mods/mobs/dionaea/mob/nymph_life.dm
+++ b/mods/mobs/dionaea/mob/nymph_life.dm
@@ -3,7 +3,7 @@
..()
- if(health <= 0 || stat == DEAD)
+ if(stat == DEAD)
return
var/turf/checking = get_turf(src)
@@ -25,11 +25,18 @@
set_nutrition(clamp(nutrition + FLOOR(radiation/100) + light_amount, 0, 500))
if(radiation >= 50 || light_amount > 2) //if there's enough light, heal
+ var/update_health = FALSE
if(getBruteLoss())
- adjustBruteLoss(-1)
+ update_health = TRUE
+ adjustBruteLoss(-1, do_update_health = FALSE)
if(getFireLoss())
- adjustFireLoss(-1)
+ update_health = TRUE
+ adjustFireLoss(-1, do_update_health = FALSE)
if(getToxLoss())
- adjustToxLoss(-1)
+ update_health = TRUE
+ adjustToxLoss(-1, do_update_health = FALSE)
if(getOxyLoss())
- adjustOxyLoss(-1)
+ update_health = TRUE
+ adjustOxyLoss(-1, do_update_health = FALSE)
+ if(update_health)
+ update_health()
\ No newline at end of file
diff --git a/mods/mobs/dionaea/mob/nymph_ui.dm b/mods/mobs/dionaea/mob/nymph_ui.dm
index 248a637f219..3d51b45a1c2 100644
--- a/mods/mobs/dionaea/mob/nymph_ui.dm
+++ b/mods/mobs/dionaea/mob/nymph_ui.dm
@@ -1,5 +1,5 @@
/obj/screen/intent/diona_nymph
- icon_state = "intent_devour"
+ icon_state = "intent_harm"
screen_loc = DIONA_SCREEN_LOC_INTENT
/obj/screen/intent/diona_nymph/on_update_icon()
@@ -10,26 +10,7 @@
intent = I_DISARM
icon_state = "intent_help"
-/obj/screen/diona_hat
- name = "equipped hat"
- screen_loc = DIONA_SCREEN_LOC_HAT
- icon_state = "hat"
-
-/obj/screen/diona_hat/Click()
- var/datum/extension/hattable/hattable = get_extension(usr, /datum/extension/hattable)
- hattable?.drop_hat(usr)
-
-/obj/screen/diona_held
- name = "held item"
- screen_loc = DIONA_SCREEN_LOC_HELD
- icon_state = "held"
-
-/obj/screen/diona_held/Click()
- var/mob/living/carbon/alien/diona/chirp = usr
- if(istype(chirp) && chirp.holding_item) chirp.try_unequip(chirp.holding_item)
-
/datum/hud/diona_nymph
- var/obj/screen/diona_hat/hat
var/obj/screen/diona_held/held
/datum/hud/diona_nymph/get_ui_style()
@@ -42,39 +23,17 @@
return 255
/datum/hud/diona_nymph/FinalizeInstantiation()
-
var/ui_style = get_ui_style()
var/ui_color = get_ui_color()
var/ui_alpha = get_ui_alpha()
- src.adding = list()
+ action_intent = new /obj/screen/intent/diona_nymph(null, mymob, ui_style, ui_color, ui_alpha)
+ mymob.healths = new /obj/screen/diona_health( null, mymob, ui_style, ui_color, ui_alpha)
src.other = list()
+ src.adding = list(mymob.healths, action_intent)
+ ..()
- hat = new
- hat.icon = ui_style
- hat.color = ui_color
- hat.alpha = ui_alpha
- adding += hat
-
- held = new
- held.icon = ui_style
- held.color = ui_color
- held.alpha = ui_alpha
- adding += held
-
- action_intent = new /obj/screen/intent/diona_nymph()
- action_intent.icon = ui_style
- action_intent.color = ui_color
- action_intent.alpha = ui_alpha
- adding += action_intent
-
- mymob.healths = new /obj/screen()
- mymob.healths.icon = ui_style
- mymob.healths.color = ui_color
- mymob.healths.alpha = ui_alpha
- mymob.healths.icon_state = "health0"
- mymob.healths.SetName("health")
- mymob.healths.screen_loc = DIONA_SCREEN_LOC_HEALTH
-
- mymob.client.screen = list(mymob.healths)
- mymob.client.screen += src.adding + src.other
+/obj/screen/diona_health
+ icon_state = "health0"
+ name = "health"
+ screen_loc = DIONA_SCREEN_LOC_HEALTH
diff --git a/mods/mobs/dionaea/mob/nymph_update_icons.dm b/mods/mobs/dionaea/mob/nymph_update_icons.dm
index 096d7a155f8..2f53e9309aa 100644
--- a/mods/mobs/dionaea/mob/nymph_update_icons.dm
+++ b/mods/mobs/dionaea/mob/nymph_update_icons.dm
@@ -6,7 +6,6 @@
else if(lying || stat == UNCONSCIOUS)
icon_state += "-sleeping"
else
-
add_overlay(emissive_overlay(icon = icon, icon_state = "[icon_state]-eyes"))
z_flags |= ZMM_MANGLE_PLANES
if(flower_color)
@@ -15,8 +14,3 @@
I.color = flower_color
flower.overlays += I
add_overlay(flower)
-
- var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable)
- var/image/I = hattable?.get_hat_overlay(src)
- if(I)
- add_overlay(I)
diff --git a/mods/species/ascent/datum/antagonist.dm b/mods/species/ascent/datum/antagonist.dm
index 1c135c50d63..caa5c48f1fd 100644
--- a/mods/species/ascent/datum/antagonist.dm
+++ b/mods/species/ascent/datum/antagonist.dm
@@ -7,7 +7,6 @@
and remove anything that might threaten your progeny."
welcome_text = "You are an alate of the Ascent, tasked with ridding this sector of whatever your matriarch directs you to, \
preparing it for the foundation of a new fortress-nest. Obey your gyne and bring prosperity to your nest-lineage."
- leader_welcome_text
antaghud_indicator = "hudhunter"
antag_indicator = "hudhunter"
hard_cap = 10
@@ -35,7 +34,7 @@
H.real_name = ascent_culture.get_random_name(H, H.gender)
H.name = H.real_name
-/decl/special_role/hunter/equip(var/mob/living/carbon/human/player)
+/decl/special_role/hunter/equip_role(var/mob/living/carbon/human/player)
if(player?.species.get_root_species_name(player) == SPECIES_MANTID_GYNE)
rig_type = /obj/item/rig/mantid/gyne
else
diff --git a/mods/species/ascent/datum/species.dm b/mods/species/ascent/datum/species.dm
index a9db8e2c5a9..2f1fac6c318 100644
--- a/mods/species/ascent/datum/species.dm
+++ b/mods/species/ascent/datum/species.dm
@@ -72,16 +72,6 @@
species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_MINOR_CUT
spawn_flags = SPECIES_IS_RESTRICTED
- heat_discomfort_strings = list(
- "You feel brittle and overheated.",
- "Your overheated carapace flexes uneasily.",
- "Overheated ichor trickles from your eyes."
- )
- cold_discomfort_strings = list(
- "Frost forms along your carapace.",
- "You hear a faint crackle of ice as you shift your freezing body.",
- "Your movements become sluggish under the weight of the chilly conditions."
- )
unarmed_attacks = list(
/decl/natural_attack/claws/strong/gloves,
/decl/natural_attack/bite/sharp
diff --git a/mods/species/ascent/datum/species_bodytypes.dm b/mods/species/ascent/datum/species_bodytypes.dm
index ba1062e138f..3dc80d67394 100644
--- a/mods/species/ascent/datum/species_bodytypes.dm
+++ b/mods/species/ascent/datum/species_bodytypes.dm
@@ -31,6 +31,17 @@
)
limb_mapping = list(BP_CHEST = list(BP_CHEST, BP_M_HAND))
+ heat_discomfort_strings = list(
+ "You feel brittle and overheated.",
+ "Your overheated carapace flexes uneasily.",
+ "Overheated ichor trickles from your eyes."
+ )
+ cold_discomfort_strings = list(
+ "Frost forms along your carapace.",
+ "You hear a faint crackle of ice as you shift your freezing body.",
+ "Your movements become sluggish under the weight of the chilly conditions."
+ )
+
/decl/bodytype/crystalline/mantid/alate
name = "alate"
bodytype_category = BODYTYPE_MANTID_SMALL
@@ -64,10 +75,10 @@
/decl/bodytype/crystalline/mantid/gyne/Initialize()
equip_adjust = list(
BP_L_HAND = list(
- "[NORTH]" = list("x" = -4, "y" = 12),
- "[EAST]" = list("x" = -4, "y" = 12),
- "[SOUTH]" = list("x" = -4, "y" = 12),
- "[WEST]" = list("x" = -4, "y" = 12)
+ "[NORTH]" = list(-4, 12),
+ "[EAST]" = list(-4, 12),
+ "[SOUTH]" = list(-4, 12),
+ "[WEST]" = list(-4, 12)
)
)
. = ..()
diff --git a/mods/species/ascent/effects/razorweb.dm b/mods/species/ascent/effects/razorweb.dm
index da38119bfa8..0908b3f816d 100644
--- a/mods/species/ascent/effects/razorweb.dm
+++ b/mods/species/ascent/effects/razorweb.dm
@@ -57,7 +57,7 @@
return INITIALIZE_HINT_QDEL
if(decays)
- addtimer(CALLBACK(src, /obj/effect/razorweb/proc/decay), 15 MINUTES)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/effect/razorweb, decay)), 15 MINUTES)
web = image(icon = icon, icon_state = "razorweb")
gleam = emissive_overlay(icon = icon, icon_state = "razorweb-gleam")
@@ -117,9 +117,11 @@
add_fingerprint(user)
return M
-/obj/effect/razorweb/Crossed(var/mob/living/L)
- . = ..()
- entangle(L)
+/obj/effect/razorweb/Crossed(var/atom/movable/AM)
+ ..()
+ if(!isliving(AM))
+ return
+ entangle(AM)
/obj/effect/razorweb/proc/entangle(var/mob/living/L, var/silent)
diff --git a/mods/species/ascent/icons/ui.dmi b/mods/species/ascent/icons/ui.dmi
index b85f1deeb96..57aec186fed 100644
Binary files a/mods/species/ascent/icons/ui.dmi and b/mods/species/ascent/icons/ui.dmi differ
diff --git a/mods/species/ascent/items/clothing.dm b/mods/species/ascent/items/clothing.dm
index 42f162c4829..44ab3515cb1 100644
--- a/mods/species/ascent/items/clothing.dm
+++ b/mods/species/ascent/items/clothing.dm
@@ -1,13 +1,13 @@
/decl/hierarchy/outfit/job/ascent
- name = "Ascent - Gyne"
- mask = /obj/item/clothing/mask/gas/ascent
- uniform = /obj/item/clothing/under/ascent
- id_type = /obj/item/card/id/ascent
- shoes = /obj/item/clothing/shoes/magboots/ascent
- l_ear = null
- pda_type = null
- pda_slot = 0
- flags = 0
+ name = "Ascent - Gyne"
+ mask = /obj/item/clothing/mask/gas/ascent
+ uniform = /obj/item/clothing/under/ascent
+ id_type = /obj/item/card/id/ascent
+ shoes = /obj/item/clothing/shoes/magboots/ascent
+ l_ear = null
+ pda_type = null
+ pda_slot = 0
+ outfit_flags = 0
/decl/hierarchy/outfit/job/ascent/attendant
name = "Ascent - Attendant"
diff --git a/mods/species/ascent/items/guns.dm b/mods/species/ascent/items/guns.dm
index 07e38ea6a9c..3ca058e0f93 100644
--- a/mods/species/ascent/items/guns.dm
+++ b/mods/species/ascent/items/guns.dm
@@ -42,6 +42,7 @@
/obj/item/gun/energy/particle/on_update_icon()
. = ..()
+ var/obj/item/cell/power_supply = get_cell()
var/datum/firemode/current_mode = firemodes[sel_mode]
set_overlays(list(
"[get_world_inventory_state()]-[istype(current_mode) ? current_mode.name : "lethal"]",
diff --git a/mods/species/ascent/items/id_control.dm b/mods/species/ascent/items/id_control.dm
index 3f5ad25c460..6b76ee444d3 100644
--- a/mods/species/ascent/items/id_control.dm
+++ b/mods/species/ascent/items/id_control.dm
@@ -44,8 +44,8 @@
return
var/datum/extension/access_provider/owner_access = get_or_create_extension(owner, /datum/extension/access_provider)
owner_access?.register_id(src)
- owner?.set_id_info(id_card)
- owner?.add_language(/decl/language/mantid/worldnet)
+ owner.set_id_info(id_card)
+ owner.add_language(/decl/language/mantid/worldnet)
/obj/item/organ/internal/controller/do_uninstall(in_place, detach, ignore_children)
if(owner)
@@ -61,10 +61,10 @@
id_card = new id_card(src)
. = ..()
-/obj/item/organ/internal/controller/GetIdCards()
+/obj/item/organ/internal/controller/GetIdCards(list/exceptions)
. = ..()
//Not using is_broken() because it should be able to function when CUT_AWAY is set
- if(damage < min_broken_damage)
+ if(id_card && damage < min_broken_damage && !is_type_in_list(id_card, exceptions))
LAZYDISTINCTADD(., id_card)
/obj/item/organ/internal/controller/GetAccess()
diff --git a/mods/species/ascent/items/rig.dm b/mods/species/ascent/items/rig.dm
index f4ee8cd4a8d..d4a99bb73bc 100644
--- a/mods/species/ascent/items/rig.dm
+++ b/mods/species/ascent/items/rig.dm
@@ -228,13 +228,14 @@
/obj/item/rig_module/maneuvering_jets
)
-/obj/item/rig/mantid/mob_can_equip(var/mob/M, var/slot, ignore_equipped = FALSE)
+/obj/item/rig/mantid/mob_can_equip(mob/user, slot, disable_warning = FALSE, force = FALSE, ignore_equipped = FALSE)
. = ..()
- if(. && slot == slot_back_str)
- var/mob/living/carbon/human/H = M
- if(!istype(H) || H.species.get_root_species_name(H) != mantid_caste)
- to_chat(H, "Your species cannot wear \the [src].")
- . = 0
+ if(!. || slot != slot_back_str || !mantid_caste)
+ return
+ var/decl/species/my_species = user?.get_species()
+ if(my_species?.get_root_species_name(user) != mantid_caste)
+ to_chat(user, SPAN_WARNING("Your species cannot wear \the [src]."))
+ return FALSE
/obj/item/clothing/head/helmet/space/rig/mantid
light_color = "#00ffff"
diff --git a/mods/species/ascent/machines/fabricator.dm b/mods/species/ascent/machines/fabricator.dm
index 61e77d244b2..917180f0848 100644
--- a/mods/species/ascent/machines/fabricator.dm
+++ b/mods/species/ascent/machines/fabricator.dm
@@ -13,7 +13,7 @@
name = "circuitboard (ascent nanofabricator)"
build_path = /obj/machinery/fabricator/ascent
board_type = "machine"
- origin_tech = "{'engineering':2,'programming':2}"
+ origin_tech = @'{"engineering":2,"programming":2}'
req_components = list(
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/manipulator = 1)
diff --git a/mods/species/ascent/machines/magnetotron.dm b/mods/species/ascent/machines/magnetotron.dm
index 8c49a67d233..dc12dbb0ac6 100644
--- a/mods/species/ascent/machines/magnetotron.dm
+++ b/mods/species/ascent/machines/magnetotron.dm
@@ -66,7 +66,7 @@
name = "circuitboard (Ascent magnetotron)"
build_path = /obj/machinery/ascent_magnetotron
board_type = "machine"
- origin_tech = "{'engineering':2,'magnets':4}"
+ origin_tech = @'{"engineering":2,"magnets":4}'
req_components = list(
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/manipulator = 1
diff --git a/mods/species/ascent/mobs/bodyparts.dm b/mods/species/ascent/mobs/bodyparts.dm
index c6a2748d392..3b04f648e38 100644
--- a/mods/species/ascent/mobs/bodyparts.dm
+++ b/mods/species/ascent/mobs/bodyparts.dm
@@ -20,7 +20,7 @@
. = ..()
if(.)
action.button_icon_state = "weave-web-[cooldown ? "off" : "on"]"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/external/groin/insectoid/mantid/attack_self(var/mob/user)
. = ..()
@@ -42,7 +42,7 @@
owner.visible_message(SPAN_WARNING("\The [owner] separates their jaws and begins to weave a web of crystalline filaments..."))
cooldown = TRUE
refresh_action_button()
- addtimer(CALLBACK(src, .proc/reset_cooldown), web_weave_time)
+ addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), web_weave_time)
if(do_after(owner, web_weave_time) && length(existing_webs) < max_webs)
playsound(user, 'mods/species/ascent/sounds/razorweb.ogg', 70, 0)
owner.visible_message(SPAN_DANGER("\The [owner] completes a razorweb!"))
@@ -64,7 +64,7 @@
. = ..()
if(.)
action.button_icon_state = "shot-web-[cooldown ? "off" : "on"]"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/external/head/insectoid/mantid/attack_self(var/mob/user)
. = ..()
@@ -81,7 +81,7 @@
owner.throw_mode_on()
cooldown = TRUE
refresh_action_button()
- addtimer(CALLBACK(src, .proc/reset_cooldown), cooldown_time)
+ addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), cooldown_time)
else
qdel(web)
diff --git a/mods/species/ascent/mobs/bodyparts_insectoid.dm b/mods/species/ascent/mobs/bodyparts_insectoid.dm
index 752029e59a6..e9783d3dd5d 100644
--- a/mods/species/ascent/mobs/bodyparts_insectoid.dm
+++ b/mods/species/ascent/mobs/bodyparts_insectoid.dm
@@ -4,6 +4,7 @@
requires_organ_tag = BP_M_HAND
ui_label = "M"
ui_loc = "CENTER,BOTTOM+1:14"
+ covering_slot_flags = SLOT_HAND_LEFT|SLOT_HAND_RIGHT // todo: generalize?
/obj/item/organ/external/hand/insectoid/midlimb
name = "central grasper"
@@ -21,12 +22,14 @@
requires_organ_tag = BP_L_HAND_UPPER
ui_label = "UL"
hand_sort_priority = 2
+ covering_slot_flags = SLOT_HAND_LEFT
/obj/item/organ/external/hand/insectoid/upper
name = "left raptorial"
- joint = "left upper wrist"
- amputation_point = "left upper wrist"
+ joint = "upper left wrist"
+ amputation_point = "upper left shoulder"
organ_tag = BP_L_HAND_UPPER
+ parent_organ = BP_CHEST
gripper_type = /datum/inventory_slot/gripper/upper_left_hand
/obj/item/organ/external/hand/insectoid/upper/get_manual_dexterity()
@@ -38,12 +41,14 @@
requires_organ_tag = BP_R_HAND_UPPER
ui_label = "UR"
hand_sort_priority = 2
+ covering_slot_flags = SLOT_HAND_RIGHT
/obj/item/organ/external/hand/right/insectoid/upper
name = "right raptorial"
- joint = "right upper wrist"
- amputation_point = "right upper wrist"
+ joint = "upper right wrist"
+ amputation_point = "upper right shoulder"
organ_tag = BP_R_HAND_UPPER
+ parent_organ = BP_CHEST
gripper_type = /datum/inventory_slot/gripper/upper_right_hand
/obj/item/organ/external/hand/right/insectoid/upper/get_manual_dexterity()
@@ -59,7 +64,7 @@
. = ..()
if(.)
action.button_icon_state = "egg-on"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/internal/egg_sac/insectoid/attack_self(var/mob/user)
. = ..()
diff --git a/mods/species/ascent/mobs/insectoid_egg.dm b/mods/species/ascent/mobs/insectoid_egg.dm
index dad0583a7fe..6076c3dff4b 100644
--- a/mods/species/ascent/mobs/insectoid_egg.dm
+++ b/mods/species/ascent/mobs/insectoid_egg.dm
@@ -12,7 +12,7 @@ var/global/default_gyne
name = "alien egg"
desc = "A semi-translucent alien egg."
health = 100
- maxhealth = 100
+ max_health = 100
icon = 'mods/species/ascent/icons/egg.dmi'
icon_state = "egg"
@@ -27,7 +27,7 @@ var/global/default_gyne
var/hatched = FALSE // Whether or not this egg has already hatched.
material = /decl/material/solid/gemstone/crystal
-
+
/obj/structure/insectoid_egg/Initialize()
. = ..()
START_PROCESSING(SSprocessing, src)
@@ -76,11 +76,11 @@ var/global/default_gyne
last_tick = world.time
var/turf/T = get_turf(src)
-
+
// Too high of temp will damage eggs.
if(T.temperature > (max_temperature * 1.5))
health = max(0, health - 5)
-
+
if(T.temperature < min_temperature || T.temperature > max_temperature)
return
@@ -102,9 +102,9 @@ var/global/default_gyne
hatching = TRUE
update_icon()
visible_message(SPAN_NOTICE("\icon[src] \The [src] trembles and cracks as it begins to hatch."))
- addtimer(CALLBACK(src, .proc/finish_hatching), 2.5 SECONDS)
-
-
+ addtimer(CALLBACK(src, PROC_REF(finish_hatching)), 2.5 SECONDS)
+
+
/obj/structure/insectoid_egg/proc/finish_hatching()
hatched = TRUE
hatching = FALSE
diff --git a/mods/species/ascent/mobs/nymph/_nymph.dm b/mods/species/ascent/mobs/nymph/_nymph.dm
index 1a4c737875d..2961ea4d14c 100644
--- a/mods/species/ascent/mobs/nymph/_nymph.dm
+++ b/mods/species/ascent/mobs/nymph/_nymph.dm
@@ -10,17 +10,16 @@
#define ANYMPH_TIME_MOLT 300 // How long to wait between molts.
/mob/living/carbon/alien/ascent_nymph
- name = SPECIES_MANTID_NYMPH
+ name = "mantid nymph"
desc = "It's a little alien skittery critter. Hiss."
icon = 'mods/species/ascent/icons/species/nymph.dmi'
icon_state = ICON_STATE_WORLD
death_msg = "expires with a pitiful hiss..."
- health = 60
- maxHealth = 60
+ mob_default_max_health = 60
available_maneuvers = list(/decl/maneuver/leap)
only_species_language = 1
- voice_name = SPECIES_MANTID_NYMPH
+ voice_name = "mantid nymph"
speak_emote = list("hisses", "chitters")
universal_understand = FALSE
universal_speak = FALSE
@@ -30,10 +29,9 @@
holder_type = /obj/item/holder/ascent_nymph
possession_candidate = 1
- atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT
+ atom_flags = ATOM_FLAG_NO_CHEM_CHANGE
hud_type = /datum/hud/ascent_nymph
- var/obj/item/holding_item
var/crystal_reserve = 1000
var/last_molt = 0
var/molt
@@ -41,31 +39,15 @@
/mob/living/carbon/alien/ascent_nymph/get_jump_distance()
return 3
-/mob/living/carbon/alien/ascent_nymph/Login()
- . = ..()
- if(client)
- if(holding_item)
- holding_item.screen_loc = ANYMPH_SCREEN_LOC_HELD
- client.screen |= holding_item
-
/mob/living/carbon/alien/ascent_nymph/Initialize(var/mapload)
update_icon()
. = ..(mapload)
+ add_inventory_slot(new /datum/inventory_slot/head/simple)
+ add_held_item_slot(new /datum/inventory_slot/gripper/mouth/nymph/ascent)
set_extension(src, /datum/extension/base_icon_state, icon_state)
-/mob/living/carbon/alien/ascent_nymph/show_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns)
- . = ..()
- if(holding_item)
- to_chat(user, SPAN_NOTICE("It is holding \icon[holding_item] \a [holding_item]."))
-
-/mob/living/carbon/alien/ascent_nymph/get_dexterity(var/silent = FALSE)
- return DEXTERITY_NONE
-
-/mob/living/carbon/alien/ascent_nymph/death(gibbed)
- if(holding_item)
- try_unequip(holding_item)
-
- return ..(gibbed,death_msg)
+/mob/living/carbon/alien/ascent_nymph/get_dexterity(var/silent)
+ return (DEXTERITY_EQUIP_ITEM|DEXTERITY_HOLD_ITEM)
/mob/living/carbon/alien/ascent_nymph/on_update_icon()
..()
diff --git a/mods/species/ascent/mobs/nymph/nymph_attacks.dm b/mods/species/ascent/mobs/nymph/nymph_attacks.dm
index a570c01209a..e2003850e72 100644
--- a/mods/species/ascent/mobs/nymph/nymph_attacks.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_attacks.dm
@@ -1,24 +1,11 @@
/mob/living/carbon/alien/ascent_nymph/UnarmedAttack(var/atom/A)
- setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
-
- if(a_intent == I_DISARM || a_intent == I_HELP)
- if(can_collect(A))
- collect(A)
- return
-
- if(ismob(A))
- visible_message(SPAN_NOTICE("\The [src] butts its head into \the [A]."))
- return
. = ..()
+ if(.)
+ return
-/mob/living/carbon/alien/ascent_nymph/RangedAttack(atom/A, var/params)
- if((a_intent == I_HURT || a_intent == I_GRAB) && holding_item)
+ if(ismob(A))
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- visible_message(SPAN_DANGER("\The [src] spits \a [holding_item] at \the [A]!"))
- var/atom/movable/temp = holding_item
- try_unequip(holding_item)
- if(temp)
- temp.throw_at(A, 10, rand(3,5), src)
+ visible_message(SPAN_NOTICE("\The [src] butts its head into \the [A]."))
return TRUE
- . = ..()
\ No newline at end of file
+ return FALSE
diff --git a/mods/species/ascent/mobs/nymph/nymph_holder.dm b/mods/species/ascent/mobs/nymph/nymph_holder.dm
index 4dbbc36a85a..ec430c06f8e 100644
--- a/mods/species/ascent/mobs/nymph/nymph_holder.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_holder.dm
@@ -1,5 +1,5 @@
/obj/item/holder/ascent_nymph
- origin_tech = "{'magnets':3,'biotech':5}"
+ origin_tech = @'{"magnets":3,"biotech":5}'
slot_flags = SLOT_HEAD | SLOT_OVER_BODY | SLOT_HOLSTER
armor = list(
ARMOR_BIO = ARMOR_BIO_RESISTANT
diff --git a/mods/species/ascent/mobs/nymph/nymph_inventory.dm b/mods/species/ascent/mobs/nymph/nymph_inventory.dm
index 78c7adc3481..dc5220830fe 100644
--- a/mods/species/ascent/mobs/nymph/nymph_inventory.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_inventory.dm
@@ -1,31 +1,3 @@
-/mob/living/carbon/alien/ascent_nymph/drop_from_inventory(var/obj/item/dropping_item)
- . = ..()
- if(dropping_item == holding_item)
- holding_item = null
-
-/mob/living/carbon/alien/ascent_nymph/put_in_hands(var/obj/item/W) // No hands. Use mouth.
- if(can_collect(W))
- collect(W)
- else
- W.forceMove(get_turf(src))
- return 1
-
-
-/mob/living/carbon/alien/ascent_nymph/hotkey_drop()
- if(holding_item)
- drop_item()
- else
- to_chat(usr, SPAN_WARNING("You have nothing to drop."))
-
-/mob/living/carbon/alien/ascent_nymph/proc/can_collect(var/obj/item/collecting)
- return (!holding_item && \
- istype(collecting) && \
- collecting.loc != src && \
- !collecting.anchored && \
- collecting.simulated && \
- collecting.w_class <= can_pull_size \
- )
-
/mob/living/carbon/alien/ascent_nymph/proc/contains_crystals(var/obj/item/W)
for(var/mat in W.matter)
if(mat == /decl/material/solid/sand)
@@ -37,51 +9,13 @@
else if(mat == /decl/material/solid/glass)
. += W.matter[mat]
-/mob/living/carbon/alien/ascent_nymph/proc/collect(var/obj/item/collecting)
- collecting.forceMove(src)
- holding_item = collecting
- visible_message(SPAN_NOTICE("\The [src] engulfs \the [holding_item]."))
-
- // This means nymph can hoover up beakers as a kind of impromptu chem disposal
- // technique, so long as they're okay with the reagents reacting inside them.
- if(holding_item.reagents && holding_item.reagents.total_volume)
- holding_item.reagents.trans_to_mob(src, holding_item.reagents.total_volume, CHEM_INGEST)
-
- // It also means they can do the old school cartoon schtick of eating an entire sandwich
- // and spitting up an empty plate. Ptooie.
- if(istype(holding_item, /obj/item/chems/food))
- var/obj/item/chems/food/food = holding_item
- holding_item = null
- if(food.trash) holding_item = new food.trash(src)
- qdel(food)
-
- var/crystals = contains_crystals(collecting)
- if(crystals)
- if(crystal_reserve < ANYMPH_MAX_CRYSTALS)
- crystal_reserve = min(ANYMPH_MAX_CRYSTALS, crystal_reserve + crystals)
- qdel(collecting)
- else
- to_chat(src, SPAN_WARNING("You've already filled yourself with as much crystalline matter as you can!"))
- return
-
- if(!QDELETED(holding_item))
- holding_item.equipped(src)
- holding_item.screen_loc = ANYMPH_SCREEN_LOC_HELD
-
-/mob/living/carbon/alien/ascent_nymph/verb/drop_item_verb()
- set name = "Drop Held Item"
- set desc = "Drop the item you are currently holding inside."
- set category = "IC"
- set src = usr
- drop_item()
-
-/mob/living/carbon/alien/ascent_nymph/drop_item()
- var/item = holding_item
- if(item && try_unequip(item))
- visible_message(SPAN_NOTICE("\The [src] regurgitates \the [item]."))
- return TRUE
+/datum/inventory_slot/gripper/mouth/nymph/ascent/equipped(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE, var/delete_old_item = TRUE)
+ var/mob/living/carbon/alien/ascent_nymph/nimp = user
+ var/crystals = istype(nimp) ? nimp.contains_crystals(prop) : 0
. = ..()
-
-// Makes it so that the held item's screen_loc isn't unset.
-/mob/living/carbon/alien/ascent_nymph/item_should_have_screen_presence(obj/item/item, slot)
- return (item == holding_item) || ..()
\ No newline at end of file
+ if(. && crystals)
+ nimp.crystal_reserve = min(ANYMPH_MAX_CRYSTALS, nimp.crystal_reserve + crystals)
+ if(nimp.crystal_reserve >= ANYMPH_MAX_CRYSTALS)
+ to_chat(src, SPAN_WARNING("You've filled yourself with as much crystalline matter as you can!"))
+ if(!QDELETED(prop))
+ qdel(prop)
diff --git a/mods/species/ascent/mobs/nymph/nymph_life.dm b/mods/species/ascent/mobs/nymph/nymph_life.dm
index 298f9e627f6..cd1a17f31af 100644
--- a/mods/species/ascent/mobs/nymph/nymph_life.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_life.dm
@@ -1,9 +1,28 @@
-/mob/living/carbon/alien/ascent_nymph/Life()
+/mob/living/carbon/alien/ascent_nymph/handle_regular_hud_updates()
. = ..()
- if(stat == DEAD)
+ if(!.)
return
-
+ var/datum/hud/ascent_nymph/nymph_hud = hud_used
+ if(!istype(nymph_hud))
+ return
+ if(nymph_hud.food)
+ switch(nutrition)
+ if(450 to INFINITY) nymph_hud.food.icon_state = "nutrition0"
+ if(350 to 450) nymph_hud.food.icon_state = "nutrition1"
+ if(250 to 350) nymph_hud.food.icon_state = "nutrition2"
+ if(150 to 250) nymph_hud.food.icon_state = "nutrition3"
+ else nymph_hud.food.icon_state = "nutrition4"
+ if(nymph_hud.drink)
+ switch(hydration)
+ if(450 to INFINITY) nymph_hud.drink.icon_state = "hydration0"
+ if(350 to 450) nymph_hud.drink.icon_state = "hydration1"
+ if(250 to 350) nymph_hud.drink.icon_state = "hydration2"
+ if(150 to 250) nymph_hud.drink.icon_state = "hydration3"
+ else nymph_hud.drink.icon_state = "hydration4"
+
+/mob/living/carbon/alien/ascent_nymph/handle_nutrition_and_hydration()
+ . = ..()
// Generate some crystals over time.
if(nutrition >= 300 && crystal_reserve < ANYMPH_MAX_CRYSTALS)
crystal_reserve = min(ANYMPH_MAX_CRYSTALS, crystal_reserve + 15)
@@ -16,31 +35,14 @@
adjust_nutrition(DEFAULT_HUNGER_FACTOR * -2)
else
adjust_nutrition(DEFAULT_HUNGER_FACTOR * -1)
-
if(hydration > 0)
adjust_hydration(DEFAULT_THIRST_FACTOR * -1)
- update_nymph_hud()
-
-/mob/living/carbon/alien/ascent_nymph/proc/update_nymph_hud()
- // Update the HUD.
- var/datum/hud/ascent_nymph/nymph_hud = hud_used
- if(istype(nymph_hud))
- if(nymph_hud.food)
- switch(nutrition)
- if(450 to INFINITY) nymph_hud.food.icon_state = "nutrition0"
- if(350 to 450) nymph_hud.food.icon_state = "nutrition1"
- if(250 to 350) nymph_hud.food.icon_state = "nutrition2"
- if(150 to 250) nymph_hud.food.icon_state = "nutrition3"
- else nymph_hud.food.icon_state = "nutrition4"
-
- if(nymph_hud.drink)
- switch(hydration)
- if(450 to INFINITY) nymph_hud.drink.icon_state = "hydration0"
- if(350 to 450) nymph_hud.drink.icon_state = "hydration1"
- if(250 to 350) nymph_hud.drink.icon_state = "hydration2"
- if(150 to 250) nymph_hud.drink.icon_state = "hydration3"
- else nymph_hud.drink.icon_state = "hydration4"
+/mob/living/carbon/alien/ascent_nymph/Stat()
+ . = ..()
+ if(client && statpanel("Status"))
+ stat("Nutrition", "[get_nutrition()]/[ANYMPH_NUTRITION_MOLT]")
+ stat("Crystal reserve", "[crystal_reserve]/[ANYMPH_CRYSTAL_MOLT]")
/mob/living/carbon/alien/ascent_nymph/proc/can_molt()
if(crystal_reserve < ANYMPH_CRYSTAL_MOLT)
@@ -61,7 +63,7 @@
molt = min(molt + 1, 5)
var/mob/living/carbon/alien/ascent_nymph/nymph = usr
nymph.visible_message("\icon[nymph] [nymph] begins to shimmy and shake out of its old skin.")
- if(molt == 5)
+ if(molt == 5)
if(do_after(nymph, 10 SECONDS, nymph, FALSE))
var/mob/living/carbon/human/H = new(get_turf(usr), SPECIES_MANTID_ALATE)
H.dna.lineage = nymph.dna.lineage
@@ -74,7 +76,7 @@
else
nymph.visible_message("\icon[nymph] [nymph] abruptly stops molting.")
return
-
+
if(do_after(nymph, 5 SECONDS, nymph, FALSE))
var/matrix/M = matrix()
M.Scale(1 + (molt / 10))
@@ -83,7 +85,7 @@
last_molt = world.time
nutrition = max(0, nutrition - ANYMPH_NUTRITION_MOLT)
crystal_reserve = max(0, crystal_reserve - ANYMPH_CRYSTAL_MOLT)
- new/obj/item/ascent_molt(get_turf(src))
+ new /obj/item/ascent_molt(get_turf(src))
else
nymph.visible_message("\icon[nymph] [nymph] abruptly stops molting.")
\ No newline at end of file
diff --git a/mods/species/ascent/mobs/nymph/nymph_ui.dm b/mods/species/ascent/mobs/nymph/nymph_ui.dm
index 968405cc6bd..7de72b0a1d4 100644
--- a/mods/species/ascent/mobs/nymph/nymph_ui.dm
+++ b/mods/species/ascent/mobs/nymph/nymph_ui.dm
@@ -1,5 +1,5 @@
/obj/screen/intent/ascent_nymph
- icon_state = "intent_devour"
+ icon_state = "intent_harm"
screen_loc = ANYMPH_SCREEN_LOC_INTENT
/obj/screen/intent/ascent_nymph/on_update_icon()
@@ -10,27 +10,17 @@
intent = I_DISARM
icon_state = "intent_help"
-/obj/screen/ascent_nymph_held
- name = "held item"
- screen_loc = ANYMPH_SCREEN_LOC_HELD
- icon_state = "held"
-
-/obj/screen/ascent_nymph_held/Click()
- var/mob/living/carbon/alien/ascent_nymph/nymph = usr
- if(istype(nymph) && nymph.holding_item) nymph.try_unequip(nymph.holding_item)
-
/obj/screen/ascent_nymph_molt
name = "molt"
icon = 'icons/obj/action_buttons/organs.dmi'
screen_loc = ANYMPH_SCREEN_LOC_MOLT
icon_state = "molt-on"
-/obj/screen/ascent_nymph_molt/Click()
- var/mob/living/carbon/alien/ascent_nymph/nymph = usr
+/obj/screen/ascent_nymph_molt/handle_click(mob/user, params)
+ var/mob/living/carbon/alien/ascent_nymph/nymph = user
if(istype(nymph)) nymph.molt()
/datum/hud/ascent_nymph
- var/obj/screen/ascent_nymph_held/held
var/obj/screen/ascent_nymph_molt/molt
var/obj/screen/food/food
var/obj/screen/drink/drink
@@ -45,53 +35,18 @@
return 255
/datum/hud/ascent_nymph/FinalizeInstantiation()
-
var/ui_style = get_ui_style()
var/ui_color = get_ui_color()
var/ui_alpha = get_ui_alpha()
-
- src.adding = list()
+ molt = new( null, mymob, ui_style, ui_color, ui_alpha)
+ food = new /obj/screen/food( null, mymob, ui_style, ui_color, ui_alpha)
+ drink = new /obj/screen/drink( null, mymob, ui_style, ui_color, ui_alpha)
+ action_intent = new /obj/screen/intent/ascent_nymph(null, mymob, ui_style, ui_color, ui_alpha)
+ mymob.healths = new /obj/screen/ascent_nymph_health(null, mymob, ui_style, ui_color, ui_alpha)
src.other = list()
+ src.adding = list(mymob.healths, molt, food, drink, action_intent)
+ ..()
- held = new
- held.icon = ui_style
- held.color = ui_color
- held.alpha = ui_alpha
- adding += held
-
- molt = new
- molt.icon = ui_style
- molt.color = ui_color
- molt.alpha = ui_alpha
- adding += molt
-
- food = new
- food.icon = 'icons/mob/status_hunger.dmi'
- food.SetName("nutrition")
- food.icon_state = "nutrition1"
- food.pixel_w = 8
- food.screen_loc = ui_nutrition_small
- adding += food
-
- drink = new
- drink.icon = 'icons/mob/status_hunger.dmi'
- drink.icon_state = "hydration1"
- drink.SetName("hydration")
- drink.screen_loc = ui_nutrition_small
- adding += drink
-
- action_intent = new /obj/screen/intent/ascent_nymph()
- action_intent.icon = ui_style
- action_intent.color = ui_color
- action_intent.alpha = ui_alpha
- adding += action_intent
-
- mymob.healths = new /obj/screen()
- mymob.healths.icon = ui_style
- mymob.healths.color = ui_color
- mymob.healths.alpha = ui_alpha
- mymob.healths.SetName("health")
- mymob.healths.screen_loc = ANYMPH_SCREEN_LOC_HEALTH
-
- mymob.client.screen = list(mymob.healths)
- mymob.client.screen += src.adding + src.other
\ No newline at end of file
+/obj/screen/ascent_nymph_health
+ name = "health"
+ screen_loc = ANYMPH_SCREEN_LOC_HEALTH
diff --git a/mods/species/bayliens/_bayliens.dme b/mods/species/bayliens/_bayliens.dme
index 92ad697aac1..1e053ec6723 100644
--- a/mods/species/bayliens/_bayliens.dme
+++ b/mods/species/bayliens/_bayliens.dme
@@ -44,6 +44,7 @@
#include "tajaran\datum\language.dm"
#include "tajaran\datum\species.dm"
#include "tajaran\datum\species_bodytypes.dm"
+#include "tajaran\machinery\suit_cycler.dm"
#include "tritonian\_tritonian.dm"
#include "tritonian\datum\species.dm"
#include "tritonian\datum\species_bodytypes.dm"
diff --git a/mods/species/bayliens/adherent/_adherent.dm b/mods/species/bayliens/adherent/_adherent.dm
index e626999d154..a5b9572567d 100644
--- a/mods/species/bayliens/adherent/_adherent.dm
+++ b/mods/species/bayliens/adherent/_adherent.dm
@@ -6,5 +6,6 @@
#define BP_JETS "maneuvering jets"
#define BP_COOLING_FINS "cooling fins"
-/mob/living/carbon/human/adherent/Initialize(mapload)
- . = ..(mapload, SPECIES_ADHERENT)
+/mob/living/carbon/human/adherent/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ species_name = SPECIES_ADHERENT
+ . = ..()
\ No newline at end of file
diff --git a/mods/species/bayliens/adherent/datum/species.dm b/mods/species/bayliens/adherent/datum/species.dm
index d378482d7cd..a0f8b934bd1 100644
--- a/mods/species/bayliens/adherent/datum/species.dm
+++ b/mods/species/bayliens/adherent/datum/species.dm
@@ -51,14 +51,6 @@
speech_sounds = list('mods/species/bayliens/adherent/sound/chime.ogg')
speech_chance = 25
- cold_level_1 = SYNTH_COLD_LEVEL_1
- cold_level_2 = SYNTH_COLD_LEVEL_2
- cold_level_3 = SYNTH_COLD_LEVEL_3
-
- heat_level_1 = SYNTH_HEAT_LEVEL_1
- heat_level_2 = SYNTH_HEAT_LEVEL_2
- heat_level_3 = SYNTH_HEAT_LEVEL_3
-
species_flags = SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_MINOR_CUT
spawn_flags = SPECIES_CAN_JOIN
diff --git a/mods/species/bayliens/adherent/datum/species_bodytypes.dm b/mods/species/bayliens/adherent/datum/species_bodytypes.dm
index aaf3e4badf8..10eb8741fb0 100644
--- a/mods/species/bayliens/adherent/datum/species_bodytypes.dm
+++ b/mods/species/bayliens/adherent/datum/species_bodytypes.dm
@@ -52,52 +52,52 @@
/decl/bodytype/crystalline/adherent/Initialize()
equip_adjust = list(
"[BP_L_HAND]" = list(
- "[NORTH]" = list("x" = 0, "y" = 14),
- "[EAST]" = list("x" = 0, "y" = 14),
- "[SOUTH]" = list("x" = 0, "y" = 14),
- "[WEST]" = list("x" = 0, "y" = 14)
+ "[NORTH]" = list(0, 14),
+ "[EAST]" = list(0, 14),
+ "[SOUTH]" = list(0, 14),
+ "[WEST]" = list(0, 14)
),
"[BP_R_HAND]" = list(
- "[NORTH]" = list("x" = 0, "y" = 14),
- "[EAST]" = list("x" = 0, "y" = 14),
- "[SOUTH]" = list("x" = 0, "y" = 14),
- "[WEST]" = list("x" = 0, "y" = 14)
+ "[NORTH]" = list(0, 14),
+ "[EAST]" = list(0, 14),
+ "[SOUTH]" = list(0, 14),
+ "[WEST]" = list(0, 14)
),
"[slot_back_str]" = list(
- "[NORTH]" = list("x" = 0, "y" = 14),
- "[EAST]" = list("x" = 0, "y" = 14),
- "[SOUTH]" = list("x" = 0, "y" = 14),
- "[WEST]" = list("x" = 0, "y" = 14)
+ "[NORTH]" = list(0, 14),
+ "[EAST]" = list(0, 14),
+ "[SOUTH]" = list(0, 14),
+ "[WEST]" = list(0, 14)
),
"[slot_belt_str]" = list(
- "[NORTH]" = list("x" = 0, "y" = 14),
- "[EAST]" = list("x" = 0, "y" = 14),
- "[SOUTH]" = list("x" = 0, "y" = 14),
- "[WEST]" = list("x" = 0, "y" = 14)
+ "[NORTH]" = list(0, 14),
+ "[EAST]" = list(0, 14),
+ "[SOUTH]" = list(0, 14),
+ "[WEST]" = list(0, 14)
),
"[slot_head_str]" = list(
- "[NORTH]" = list("x" = 0, "y" = 14),
- "[EAST]" = list("x" = 3, "y" = 14),
- "[SOUTH]" = list("x" = 0, "y" = 14),
- "[WEST]" = list("x" = -3, "y" = 14)
+ "[NORTH]" = list( 0, 14),
+ "[EAST]" = list( 3, 14),
+ "[SOUTH]" = list( 0, 14),
+ "[WEST]" = list(-3, 14)
),
"[slot_l_ear_str]" = list(
- "[NORTH]" = list("x" = 0, "y" = 14),
- "[EAST]" = list("x" = 0, "y" = 14),
- "[SOUTH]" = list("x" = 0, "y" = 14),
- "[WEST]" = list("x" = 0, "y" = 14)
+ "[NORTH]" = list(0, 14),
+ "[EAST]" = list(0, 14),
+ "[SOUTH]" = list(0, 14),
+ "[WEST]" = list(0, 14)
),
"[slot_r_ear_str]" = list(
- "[NORTH]" = list("x" = 0, "y" = 14),
- "[EAST]" = list("x" = 0, "y" = 14),
- "[SOUTH]" = list("x" = 0, "y" = 14),
- "[WEST]" = list("x" = 0, "y" = 14)
+ "[NORTH]" = list(0, 14),
+ "[EAST]" = list(0, 14),
+ "[SOUTH]" = list(0, 14),
+ "[WEST]" = list(0, 14)
)
)
. = ..()
diff --git a/mods/species/bayliens/adherent/organs/organs_internal.dm b/mods/species/bayliens/adherent/organs/organs_internal.dm
index c5c93eef5e2..5f7bbe5eddd 100644
--- a/mods/species/bayliens/adherent/organs/organs_internal.dm
+++ b/mods/species/bayliens/adherent/organs/organs_internal.dm
@@ -14,7 +14,7 @@
. = ..()
if(.)
action.button_icon_state = "adherent-brain"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/internal/brain/adherent/attack_self(var/mob/user)
. = ..()
@@ -64,7 +64,7 @@
. = ..()
if(.)
action.button_icon_state = "[base_action_state]-[active ? "on" : "off"]"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/internal/powered/attack_self(var/mob/user)
. = ..()
@@ -120,7 +120,7 @@
/obj/item/organ/internal/eyes/adherent/Initialize()
. = ..()
- verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color
+ verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb
/obj/item/organ/internal/cell/adherent
name = "piezoelectric core"
diff --git a/mods/species/bayliens/skrell/_skrell.dm b/mods/species/bayliens/skrell/_skrell.dm
index 9676bd37e6f..a1fc8f067ff 100644
--- a/mods/species/bayliens/skrell/_skrell.dm
+++ b/mods/species/bayliens/skrell/_skrell.dm
@@ -1,5 +1,6 @@
#define SPECIES_SKRELL "Skrell"
#define BODYTYPE_SKRELL "skrellian body"
-/mob/living/carbon/human/skrell/Initialize(mapload)
- . = ..(mapload, SPECIES_SKRELL)
\ No newline at end of file
+/mob/living/carbon/human/skrell/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ species_name = SPECIES_SKRELL
+ . = ..()
\ No newline at end of file
diff --git a/mods/species/bayliens/skrell/datum/blood.dm b/mods/species/bayliens/skrell/datum/blood.dm
index 4c85f62e13f..ba0767a0f37 100644
--- a/mods/species/bayliens/skrell/datum/blood.dm
+++ b/mods/species/bayliens/skrell/datum/blood.dm
@@ -41,18 +41,18 @@
random_weighting = 4
/obj/item/chems/ivbag/blood/skrell_yplus
- blood_type = "Y+"
+ label_text = "Y+"
/obj/item/chems/ivbag/blood/skrell_yminus
- blood_type = "Y-"
+ label_text = "Y-"
/obj/item/chems/ivbag/blood/skrell_zplus
- blood_type = "Z+"
+ label_text = "Z+"
/obj/item/chems/ivbag/blood/skrell_zminus
- blood_type = "Z-"
+ label_text = "Z-"
/obj/item/chems/ivbag/blood/skrell_yzplus
- blood_type = "YZ+"
+ label_text = "YZ+"
/obj/item/chems/ivbag/blood/skrell_yzminus
- blood_type = "YZ-"
+ label_text = "YZ-"
/obj/item/chems/ivbag/blood/skrell_noplus
- blood_type = "No+"
+ label_text = "No+"
/obj/item/chems/ivbag/blood/skrell_nominus
- blood_type = "No-"
+ label_text = "No-"
diff --git a/mods/species/bayliens/skrell/datum/species.dm b/mods/species/bayliens/skrell/datum/species.dm
index c3d7d37d38c..9885bf6b98d 100644
--- a/mods/species/bayliens/skrell/datum/species.dm
+++ b/mods/species/bayliens/skrell/datum/species.dm
@@ -21,7 +21,7 @@
interference in their customs and values."
meat_type = /obj/item/chems/food/fish/octopus/skrell
- bone_material = /decl/material/solid/bone/cartilage
+ bone_material = /decl/material/solid/organic/bone/cartilage
available_pronouns = list(
/decl/pronouns/skrell
)
@@ -56,18 +56,6 @@
/decl/blood_type/skrell/noplus,
/decl/blood_type/skrell/nominus
)
-
- cold_level_1 = 280 //Default 260 - Lower is better
- cold_level_2 = 220 //Default 200
- cold_level_3 = 130 //Default 120
-
- heat_level_1 = 420 //Default 360 - Higher is better
- heat_level_2 = 480 //Default 400
- heat_level_3 = 1100 //Default 1000
-
- cold_discomfort_level = 292 //Higher than perhaps it should be, to avoid big speed reduction at normal room temp
- heat_discomfort_level = 368
-
appearance_descriptors = list(
/datum/appearance_descriptor/height = 1,
/datum/appearance_descriptor/build = 0.8,
@@ -135,10 +123,10 @@
bloodDNA = list(blood_data["blood_DNA"] = blood_data["blood_type"])
else
bloodDNA = list()
- T.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, H.dir, 0, H.skin_colour + "25") // Coming (8c is the alpha value)
+ T.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, H.dir, 0, H.get_skin_colour() + "25") // Coming (8c is the alpha value)
if(istype(old_loc, /turf/simulated))
var/turf/simulated/old_turf = old_loc
- old_turf.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, 0, H.dir, H.skin_colour + "25") // Going (8c is the alpha value)
+ old_turf.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, 0, H.dir, H.get_skin_colour() + "25") // Going (8c is the alpha value)
/decl/species/skrell/check_background()
return TRUE
diff --git a/mods/species/bayliens/skrell/datum/species_bodytype.dm b/mods/species/bayliens/skrell/datum/species_bodytype.dm
index 7331059d594..2203188c040 100644
--- a/mods/species/bayliens/skrell/datum/species_bodytype.dm
+++ b/mods/species/bayliens/skrell/datum/species_bodytype.dm
@@ -24,3 +24,12 @@
BP_EYES = /obj/item/organ/internal/eyes/skrell
)
default_h_style = /decl/sprite_accessory/hair/skrell/short
+
+ cold_level_1 = 280 //Default 260 - Lower is better
+ cold_level_2 = 220 //Default 200
+ cold_level_3 = 130 //Default 120
+ heat_level_1 = 420 //Default 360 - Higher is better
+ heat_level_2 = 480 //Default 400
+ heat_level_3 = 1100 //Default 1000
+ cold_discomfort_level = 292 //Higher than perhaps it should be, to avoid big speed reduction at normal room temp
+ heat_discomfort_level = 368
diff --git a/mods/species/bayliens/skrell/gear/gear.dm b/mods/species/bayliens/skrell/gear/gear.dm
index 5ad58d02639..40788b67b9b 100644
--- a/mods/species/bayliens/skrell/gear/gear.dm
+++ b/mods/species/bayliens/skrell/gear/gear.dm
@@ -79,7 +79,6 @@
slowdown_held = 1
slowdown_worn = 1
removable_components = FALSE
- cell = /obj/item/cell/hyper
capacitor = /obj/item/stock_parts/capacitor/adv
load_type = /obj/item/magnetic_ammo/skrell
loaded = /obj/item/magnetic_ammo/skrell
@@ -95,7 +94,6 @@
item_state = "skrell_carbine"
slot_flags = SLOT_BACK|SLOT_LOWER_BODY
desc = "The Vuu'Xqu*ix T-3, known as 'VT-3' by SolGov. Rarely seen out in the wild by anyone outside of a Skrellian SDTF."
- accepts_cell_type = /obj/item/cell/high
self_recharge = 1
projectile_type=/obj/item/projectile/beam/pulse/skrell/single
charge_cost=120
@@ -110,6 +108,9 @@
list(mode_name="light", projectile_type=/obj/item/projectile/beam/pulse/skrell, charge_cost=40, burst=3, burst_delay=2)
)
+/obj/item/gun/energy/pulse_rifle/skrell/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value)
+ return ..(/obj/item/cell/high, /obj/item/cell, power_supply_extension_type, charge_value)
+
/obj/item/projectile/beam/pulse/skrell
icon_state = "pu_laser"
damage = 20
diff --git a/mods/species/bayliens/skrell/gear/gear_ears.dm b/mods/species/bayliens/skrell/gear/gear_ears.dm
index eb4d74885d9..1bb0085d26e 100644
--- a/mods/species/bayliens/skrell/gear/gear_ears.dm
+++ b/mods/species/bayliens/skrell/gear/gear_ears.dm
@@ -2,9 +2,9 @@
name = "skrell tentacle wear"
desc = "Some stuff worn by skrell to adorn their head tentacles."
-/obj/item/clothing/ears/skrell/mob_can_equip(mob/living/M, slot, disable_warning = 0, ignore_equipped = 0)
+/obj/item/clothing/ears/skrell/mob_can_equip(mob/user, slot, disable_warning = FALSE, force = FALSE, ignore_equipped = FALSE)
. = ..()
- if(. && M?.get_bodytype()?.name != BODYTYPE_SKRELL)
+ if(. && user?.get_bodytype()?.name != BODYTYPE_SKRELL)
return FALSE
/obj/item/clothing/ears/skrell/band
@@ -45,4 +45,4 @@
category = /decl/loadout_category/ears
whitelisted = list(SPECIES_SKRELL)
path = /obj/item/clothing/ears/skrell
- flags = GEAR_HAS_COLOR_SELECTION | GEAR_HAS_SUBTYPE_SELECTION
+ loadout_flags = GEAR_HAS_COLOR_SELECTION | GEAR_HAS_SUBTYPE_SELECTION
diff --git a/mods/species/bayliens/skrell/gear/gear_head.dm b/mods/species/bayliens/skrell/gear/gear_head.dm
index a1ec74c8f5f..09275049bed 100644
--- a/mods/species/bayliens/skrell/gear/gear_head.dm
+++ b/mods/species/bayliens/skrell/gear/gear_head.dm
@@ -12,9 +12,9 @@
ARMOR_RAD = ARMOR_RAD_SHIELDED
)
-/obj/item/clothing/head/helmet/space/void/skrell/mob_can_equip(mob/living/M, slot, disable_warning = 0, force = 0, ignore_equipped = 0)
+/obj/item/clothing/head/helmet/space/void/skrell/mob_can_equip(mob/user, slot, disable_warning = FALSE, force = FALSE, ignore_equipped = FALSE)
. = ..()
- if(. && M?.get_bodytype()?.name != BODYTYPE_SKRELL)
+ if(. && user?.get_bodytype()?.name != BODYTYPE_SKRELL)
return FALSE
/obj/item/clothing/head/helmet/space/void/skrell/black
@@ -25,7 +25,7 @@
desc = "A helmet built for use by a Skrell. This one appears to be fairly standard and reliable."
icon = 'mods/species/bayliens/skrell/icons/clothing/head/helmet_skrell.dmi'
-/obj/item/clothing/head/helmet/skrell/mob_can_equip(mob/living/M, slot, disable_warning = 0, force = 0, ignore_equipped = 0)
+/obj/item/clothing/head/helmet/skrell/mob_can_equip(mob/user, slot, disable_warning = FALSE, force = FALSE, ignore_equipped = FALSE)
. = ..()
- if(. && M?.get_bodytype()?.name != BODYTYPE_SKRELL)
+ if(. && user?.get_bodytype()?.name != BODYTYPE_SKRELL)
return FALSE
\ No newline at end of file
diff --git a/mods/species/bayliens/skrell/gear/gear_mask.dm b/mods/species/bayliens/skrell/gear/gear_mask.dm
index 42f4313d967..ff81e9d3d68 100644
--- a/mods/species/bayliens/skrell/gear/gear_mask.dm
+++ b/mods/species/bayliens/skrell/gear/gear_mask.dm
@@ -10,7 +10,7 @@
flags_inv = 0
body_parts_covered = 0
-/obj/item/clothing/mask/gas/skrell/mob_can_equip(mob/living/M, slot, disable_warning = 0, ignore_equipped = FALSE)
+/obj/item/clothing/mask/gas/skrell/mob_can_equip(mob/user, slot, disable_warning = FALSE, force = FALSE, ignore_equipped = FALSE)
. = ..()
- if(. && M?.get_bodytype()?.name != BODYTYPE_SKRELL)
- return FALSE
\ No newline at end of file
+ if(. && user?.get_bodytype()?.name != BODYTYPE_SKRELL)
+ return FALSE
diff --git a/mods/species/bayliens/skrell/icons/body/hair.dmi b/mods/species/bayliens/skrell/icons/body/hair.dmi
index f3d3cf7574e..9dad6dda88a 100644
Binary files a/mods/species/bayliens/skrell/icons/body/hair.dmi and b/mods/species/bayliens/skrell/icons/body/hair.dmi differ
diff --git a/mods/species/bayliens/tajaran/_tajaran.dm b/mods/species/bayliens/tajaran/_tajaran.dm
index 4c0b2a9ca43..78e6c821d4b 100644
--- a/mods/species/bayliens/tajaran/_tajaran.dm
+++ b/mods/species/bayliens/tajaran/_tajaran.dm
@@ -8,5 +8,5 @@
if(bodytype_equip_flags & BODY_FLAG_EXCLUDE)
bodytype_equip_flags |= BODY_FLAG_FELINE
-/mob/living/carbon/human/tajaran/Initialize(mapload)
- . = ..(mapload, SPECIES_TAJARA)
+/mob/living/carbon/human/tajaran/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ . = ..(species_name = SPECIES_TAJARA)
diff --git a/mods/species/bayliens/tajaran/datum/accessory.dm b/mods/species/bayliens/tajaran/datum/accessory.dm
index b85b331ddbc..d9f0ab3d3f6 100644
--- a/mods/species/bayliens/tajaran/datum/accessory.dm
+++ b/mods/species/bayliens/tajaran/datum/accessory.dm
@@ -4,7 +4,7 @@
icon_state = "hair_rattail"
species_allowed = list(SPECIES_TAJARA)
icon = 'mods/species/bayliens/tajaran/icons/hair.dmi'
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_hair_taj_rattail"
/decl/sprite_accessory/hair/taj/straight
@@ -132,7 +132,7 @@
icon_state = "facial_sideburns"
species_allowed = list(SPECIES_TAJARA)
icon = 'mods/species/bayliens/tajaran/icons/facial.dmi'
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_fhair_taj_sideburns"
/decl/sprite_accessory/facial_hair/taj/mutton
@@ -166,7 +166,7 @@
icon = 'mods/species/bayliens/tajaran/icons/markings.dmi'
species_allowed = list(SPECIES_TAJARA)
body_parts = list(BP_HEAD)
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_marking_taj_nose"
/decl/sprite_accessory/marking/tajaran/ears
diff --git a/mods/species/bayliens/tajaran/datum/blood.dm b/mods/species/bayliens/tajaran/datum/blood.dm
index d57e1bcdfc6..29282ccbd58 100644
--- a/mods/species/bayliens/tajaran/datum/blood.dm
+++ b/mods/species/bayliens/tajaran/datum/blood.dm
@@ -41,18 +41,18 @@
random_weighting = 4
/obj/item/chems/ivbag/blood/feline_mplus
- blood_type = "M+"
+ label_text = "M+"
/obj/item/chems/ivbag/blood/feline_mminus
- blood_type = "M-"
+ label_text = "M-"
/obj/item/chems/ivbag/blood/feline_rplus
- blood_type = "R+"
+ label_text = "R+"
/obj/item/chems/ivbag/blood/feline_mminus
- blood_type = "M-"
+ label_text = "M-"
/obj/item/chems/ivbag/blood/feline_mrplus
- blood_type = "MR+"
+ label_text = "MR+"
/obj/item/chems/ivbag/blood/feline_mrminus
- blood_type = "MR-"
+ label_text = "MR-"
/obj/item/chems/ivbag/blood/feline_oplus
- blood_type = "Of+"
+ label_text = "Of+"
/obj/item/chems/ivbag/blood/feline_oplus
- blood_type = "Of-"
+ label_text = "Of-"
diff --git a/mods/species/bayliens/tajaran/datum/species.dm b/mods/species/bayliens/tajaran/datum/species.dm
index 3732ac95872..5d78d437ebf 100644
--- a/mods/species/bayliens/tajaran/datum/species.dm
+++ b/mods/species/bayliens/tajaran/datum/species.dm
@@ -54,23 +54,6 @@
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
- cold_level_1 = 200
- cold_level_2 = 140
- cold_level_3 = 80
-
- heat_level_1 = 330
- heat_level_2 = 380
- heat_level_3 = 800
-
- heat_discomfort_level = 294
- cold_discomfort_level = 230
-
- heat_discomfort_strings = list(
- "Your fur prickles in the heat.",
- "You feel uncomfortably warm.",
- "Your overheated skin itches."
- )
-
available_cultural_info = list(
TAG_CULTURE = list(
/decl/cultural_info/culture/tajaran,
@@ -99,4 +82,4 @@
autohiss_exempt = list(LANGUAGE_TAJARA)
/decl/species/tajaran/handle_additional_hair_loss(var/mob/living/carbon/human/H, var/defer_body_update = TRUE)
- . = H && H.change_skin_color(rgb(189, 171, 143))
+ . = H?.set_skin_colour(rgb(189, 171, 143))
diff --git a/mods/species/bayliens/tajaran/datum/species_bodytypes.dm b/mods/species/bayliens/tajaran/datum/species_bodytypes.dm
index 575a8c9bbfe..bc1579552a6 100644
--- a/mods/species/bayliens/tajaran/datum/species_bodytypes.dm
+++ b/mods/species/bayliens/tajaran/datum/species_bodytypes.dm
@@ -24,21 +24,36 @@
eye_low_light_vision_adjustment_speed = 0.3
override_limb_types = list(
- BP_EYES = /obj/item/organ/internal/eyes,
BP_TAIL = /obj/item/organ/external/tail/cat
)
base_markings = list(/decl/sprite_accessory/marking/tajaran/ears = "#ae7d32")
+ cold_level_1 = 200
+ cold_level_2 = 140
+ cold_level_3 = 80
+
+ heat_level_1 = 330
+ heat_level_2 = 380
+ heat_level_3 = 800
+
+ heat_discomfort_level = 294
+ cold_discomfort_level = 230
+ heat_discomfort_strings = list(
+ "Your fur prickles in the heat.",
+ "You feel uncomfortably warm.",
+ "Your overheated skin itches."
+ )
+
/decl/bodytype/feline/Initialize()
equip_adjust = list(
- slot_glasses_str = list("[NORTH]" = list("x" = 0, "y" = 2), "[EAST]" = list("x" = 0, "y" = 2), "[SOUTH]" = list("x" = 0, "y" = 2), "[WEST]" = list("x" = 0, "y" = 2)),
- slot_wear_mask_str = list("[NORTH]" = list("x" = 0, "y" = 2), "[EAST]" = list("x" = 0, "y" = 2), "[SOUTH]" = list("x" = 0, "y" = 2), "[WEST]" = list("x" = 0, "y" = 2)),
- slot_head_str = list("[NORTH]" = list("x" = 0, "y" = 2), "[EAST]" = list("x" = 0, "y" = 2), "[SOUTH]" = list("x" = 0, "y" = 2), "[WEST]" = list("x" = 0, "y" = 2))
+ slot_glasses_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
+ slot_wear_mask_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2)),
+ slot_head_str = list("[NORTH]" = list(0, 2), "[EAST]" = list(0, 2), "[SOUTH]" = list( 0, 2), "[WEST]" = list(0, 2))
)
. = ..()
/obj/item/organ/external/tail/cat
- tail_animation = 'mods/species/bayliens/tajaran/icons/tail.dmi'
- tail = "tajtail"
+ tail_icon = 'mods/species/bayliens/tajaran/icons/tail.dmi'
+ tail = "tajtail"
tail_blend = ICON_MULTIPLY
diff --git a/mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi
new file mode 100644
index 00000000000..6b175ec87d6
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi
new file mode 100644
index 00000000000..f9ce4604f3a
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi
new file mode 100644
index 00000000000..34b9cedc5ab
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi
new file mode 100644
index 00000000000..b0a597cfecf
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi
new file mode 100644
index 00000000000..1565d9f8e89
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi
new file mode 100644
index 00000000000..9265508d9b1
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi
new file mode 100644
index 00000000000..235d2810121
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi
new file mode 100644
index 00000000000..e2e0245516a
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi
new file mode 100644
index 00000000000..d7828714306
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi
new file mode 100644
index 00000000000..963ade3c684
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi
new file mode 100644
index 00000000000..e50553d1005
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi
new file mode 100644
index 00000000000..ad6ad32daa1
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi
new file mode 100644
index 00000000000..1e95ce43f85
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi
new file mode 100644
index 00000000000..902a9487ac6
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi
new file mode 100644
index 00000000000..d7919da2414
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi
new file mode 100644
index 00000000000..4ec38b440b5
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi
new file mode 100644
index 00000000000..17f0769a4d2
Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/facial.dmi b/mods/species/bayliens/tajaran/icons/facial.dmi
index 40fc99054b3..befd9dc68b4 100644
Binary files a/mods/species/bayliens/tajaran/icons/facial.dmi and b/mods/species/bayliens/tajaran/icons/facial.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/hair.dmi b/mods/species/bayliens/tajaran/icons/hair.dmi
index 240dbf58064..88380247713 100644
Binary files a/mods/species/bayliens/tajaran/icons/hair.dmi and b/mods/species/bayliens/tajaran/icons/hair.dmi differ
diff --git a/mods/species/bayliens/tajaran/icons/tail.dmi b/mods/species/bayliens/tajaran/icons/tail.dmi
index 5d0e5e2bf02..b2c2cc83bd0 100644
Binary files a/mods/species/bayliens/tajaran/icons/tail.dmi and b/mods/species/bayliens/tajaran/icons/tail.dmi differ
diff --git a/mods/species/bayliens/tajaran/machinery/suit_cycler.dm b/mods/species/bayliens/tajaran/machinery/suit_cycler.dm
new file mode 100644
index 00000000000..8a705dad3fb
--- /dev/null
+++ b/mods/species/bayliens/tajaran/machinery/suit_cycler.dm
@@ -0,0 +1,71 @@
+/obj/machinery/suit_cycler/Initialize()
+ LAZYDISTINCTADD(available_bodytypes, BODYTYPE_FELINE)
+ . = ..()
+
+/obj/item/clothing/suit/space/void/merc/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi')
+
+/obj/item/clothing/suit/space/void/swat/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi')
+
+/obj/item/clothing/suit/space/void/engineering/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi')
+
+/obj/item/clothing/suit/space/void/mining/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi')
+
+/obj/item/clothing/suit/space/void/medical/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi')
+
+/obj/item/clothing/suit/space/void/security/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi')
+
+/obj/item/clothing/suit/space/void/atmos/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi')
+
+/obj/item/clothing/suit/space/void/engineering/alt/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi')
+
+/obj/item/clothing/suit/space/void/mining/alt/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi')
+
+/obj/item/clothing/suit/space/void/medical/alt/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi')
+
+/obj/item/clothing/suit/space/void/security/alt/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi')
+
+/obj/item/clothing/suit/space/void/atmos/alt/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi')
+
+/obj/item/clothing/suit/space/void/engineering/salvage/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi')
+
+/obj/item/clothing/suit/space/void/pilot/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi')
+
+/obj/item/clothing/suit/space/void/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi')
+
+/obj/item/clothing/suit/space/void/wizard/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi')
+
+/obj/item/clothing/suit/space/void/excavation/Initialize()
+ . = ..()
+ LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi')
diff --git a/mods/species/bayliens/unathi/_lizard.dm b/mods/species/bayliens/unathi/_lizard.dm
index 23cc3f59cff..fdbd758e8af 100644
--- a/mods/species/bayliens/unathi/_lizard.dm
+++ b/mods/species/bayliens/unathi/_lizard.dm
@@ -1,5 +1,6 @@
#define SPECIES_LIZARD "Unathi"
#define LANGUAGE_LIZARD "Sinta'unathi"
-/mob/living/carbon/human/lizard/Initialize(mapload)
- . = ..(mapload, SPECIES_LIZARD)
+/mob/living/carbon/human/lizard/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ species_name = SPECIES_LIZARD
+ . = ..()
diff --git a/mods/species/bayliens/unathi/datum/blood.dm b/mods/species/bayliens/unathi/datum/blood.dm
index 1406a0ce5d8..3934dba6199 100644
--- a/mods/species/bayliens/unathi/datum/blood.dm
+++ b/mods/species/bayliens/unathi/datum/blood.dm
@@ -41,18 +41,18 @@
random_weighting = 4
/obj/item/chems/ivbag/blood/reptile_splus
- blood_type = "S+"
+ label_text = "S+"
/obj/item/chems/ivbag/blood/reptile_sminus
- blood_type = "S-"
+ label_text = "S-"
/obj/item/chems/ivbag/blood/reptile_xplus
- blood_type = "X+"
+ label_text = "X+"
/obj/item/chems/ivbag/blood/reptile_xminus
- blood_type = "X-"
+ label_text = "X-"
/obj/item/chems/ivbag/blood/reptile_sxplus
- blood_type = "SX+"
+ label_text = "SX+"
/obj/item/chems/ivbag/blood/reptile_sxminus
- blood_type = "SX-"
+ label_text = "SX-"
/obj/item/chems/ivbag/blood/reptile_oplus
- blood_type = "Or+"
+ label_text = "Or+"
/obj/item/chems/ivbag/blood/reptile_ominus
- blood_type = "Or-"
+ label_text = "Or-"
diff --git a/mods/species/bayliens/unathi/datum/species.dm b/mods/species/bayliens/unathi/datum/species.dm
index 75019ab364e..664bf3ee73b 100644
--- a/mods/species/bayliens/unathi/datum/species.dm
+++ b/mods/species/bayliens/unathi/datum/species.dm
@@ -14,7 +14,7 @@
/decl/species/unathi
name = SPECIES_LIZARD
name_plural = SPECIES_LIZARD
- skin_material = /decl/material/solid/skin/lizard
+ skin_material = /decl/material/solid/organic/skin/lizard
available_bodytypes = list(
/decl/bodytype/lizard,
@@ -44,14 +44,6 @@
description = "A heavily reptillian species. They prefer warmer temperatures than most species and \
their native tongue is a heavy hissing laungage."
- cold_level_1 = 280 //Default 260 - Lower is better
- cold_level_2 = 220 //Default 200
- cold_level_3 = 130 //Default 120
-
- heat_level_1 = 420 //Default 360 - Higher is better
- heat_level_2 = 480 //Default 400
- heat_level_3 = 1100 //Default 1000
-
spawn_flags = SPECIES_CAN_JOIN | SPECIES_NO_ROBOTIC_INTERNAL_ORGANS
flesh_color = "#34af10"
@@ -71,20 +63,6 @@
)
move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
- heat_discomfort_level = 320
- heat_discomfort_strings = list(
- "You feel soothingly warm.",
- "You feel the heat sink into your bones.",
- "You feel warm enough to take a nap."
- )
-
- cold_discomfort_level = 292
- cold_discomfort_strings = list(
- "You feel chilly.",
- "You feel sluggish and cold.",
- "Your scales bristle against the cold."
- )
-
breathing_sound = 'mods/species/bayliens/unathi/sound/lizard_breathing.ogg'
appearance_descriptors = list(
diff --git a/mods/species/bayliens/unathi/datum/species_bodytypes.dm b/mods/species/bayliens/unathi/datum/species_bodytypes.dm
index ed5bef9bacc..7b2af8f5de2 100644
--- a/mods/species/bayliens/unathi/datum/species_bodytypes.dm
+++ b/mods/species/bayliens/unathi/datum/species_bodytypes.dm
@@ -27,6 +27,28 @@
default_h_style = /decl/sprite_accessory/hair/lizard/frills_long
+ cold_level_1 = 280 //Default 260 - Lower is better
+ cold_level_2 = 220 //Default 200
+ cold_level_3 = 130 //Default 120
+
+ heat_level_1 = 420 //Default 360 - Higher is better
+ heat_level_2 = 480 //Default 400
+ heat_level_3 = 1100 //Default 1000
+
+ heat_discomfort_level = 320
+ heat_discomfort_strings = list(
+ "You feel soothingly warm.",
+ "You feel the heat sink into your bones.",
+ "You feel warm enough to take a nap."
+ )
+
+ cold_discomfort_level = 292
+ cold_discomfort_strings = list(
+ "You feel chilly.",
+ "You feel sluggish and cold.",
+ "Your scales bristle against the cold."
+ )
+
/decl/bodytype/lizard/masculine
name = "masculine"
icon_base = 'mods/species/bayliens/unathi/icons/body_male.dmi'
@@ -35,5 +57,5 @@
uniform_state_modifier = null
/obj/item/organ/external/tail/lizard
- tail_animation = 'mods/species/bayliens/unathi/icons/tail.dmi'
- tail = "sogtail"
+ tail_icon = 'mods/species/bayliens/unathi/icons/tail.dmi'
+ tail = "sogtail"
diff --git a/mods/species/bayliens/unathi/datum/sprite_accessory.dm b/mods/species/bayliens/unathi/datum/sprite_accessory.dm
index 4c90af7d4f8..f8a71288a66 100644
--- a/mods/species/bayliens/unathi/datum/sprite_accessory.dm
+++ b/mods/species/bayliens/unathi/datum/sprite_accessory.dm
@@ -3,7 +3,7 @@
icon = 'mods/species/bayliens/unathi/icons/hair.dmi'
icon_state = "horns"
species_allowed = list(SPECIES_LIZARD)
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
flags = VERY_SHORT
uid = "acc_hair_una_horns"
@@ -90,10 +90,10 @@
// FACIAL
/decl/sprite_accessory/facial_hair/lizard
name = "Lizard Horn Chin"
- icon = 'mods/species/bayliens/unathi/icons/facial_hair.dmi'
+ icon = 'mods/species/bayliens/unathi/icons/facial.dmi'
icon_state = "facial_chinhorns"
species_allowed = list(SPECIES_LIZARD)
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_fhair_una_chinhorns"
/decl/sprite_accessory/facial_hair/lizard/hornadorns
diff --git a/mods/species/bayliens/unathi/icons/facial_hair.dmi b/mods/species/bayliens/unathi/icons/facial.dmi
similarity index 62%
rename from mods/species/bayliens/unathi/icons/facial_hair.dmi
rename to mods/species/bayliens/unathi/icons/facial.dmi
index b992eb874f3..11ac6ca7926 100644
Binary files a/mods/species/bayliens/unathi/icons/facial_hair.dmi and b/mods/species/bayliens/unathi/icons/facial.dmi differ
diff --git a/mods/species/bayliens/unathi/icons/hair.dmi b/mods/species/bayliens/unathi/icons/hair.dmi
index 6eac2a1c305..5422f582410 100644
Binary files a/mods/species/bayliens/unathi/icons/hair.dmi and b/mods/species/bayliens/unathi/icons/hair.dmi differ
diff --git a/mods/species/bayliens/unathi/icons/tail.dmi b/mods/species/bayliens/unathi/icons/tail.dmi
index 1f0b43285db..1b9f3c1599a 100644
Binary files a/mods/species/bayliens/unathi/icons/tail.dmi and b/mods/species/bayliens/unathi/icons/tail.dmi differ
diff --git a/mods/species/bayliens/unathi/organs/organs_internal.dm b/mods/species/bayliens/unathi/organs/organs_internal.dm
index 739fff2d887..1edd08ffc19 100644
--- a/mods/species/bayliens/unathi/organs/organs_internal.dm
+++ b/mods/species/bayliens/unathi/organs/organs_internal.dm
@@ -4,4 +4,4 @@
icon = 'mods/species/bayliens/unathi/icons/organs.dmi'
/obj/item/organ/internal/brain/lizard
- can_use_mmi = FALSE
+ can_use_brain_interface = FALSE
diff --git a/mods/species/neoavians/datum/accessory.dm b/mods/species/neoavians/datum/accessory.dm
index 7ae58e8078d..1ee748abae7 100644
--- a/mods/species/neoavians/datum/accessory.dm
+++ b/mods/species/neoavians/datum/accessory.dm
@@ -4,7 +4,7 @@
icon_state = "avian_default"
icon = 'mods/species/neoavians/icons/hair.dmi'
species_allowed = list(SPECIES_AVIAN)
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_hair_avian_plumage"
/decl/sprite_accessory/hair/avian/mohawk
@@ -45,7 +45,7 @@
/decl/sprite_accessory/hair/avian/alt
name = "Avian Plumage Alt"
icon_state = "avian_default_alt"
- blend = ICON_ADD
+ color_blend = ICON_ADD
uid = "acc_hair_avian_plumage_alt"
/decl/sprite_accessory/hair/avian/alt/ears
@@ -120,7 +120,7 @@
body_parts = list(BP_HEAD)
icon = 'mods/species/neoavians/icons/markings.dmi'
species_allowed = list(SPECIES_AVIAN)
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_marking_avian_beak"
/decl/sprite_accessory/marking/avian/avian
@@ -142,23 +142,23 @@
/decl/sprite_accessory/marking/avian/additive
name = "Beak, Additive (Head)"
icon_state = "beak-add"
- blend = ICON_ADD
+ color_blend = ICON_ADD
uid = "acc_marking_avian_beak_alt"
/decl/sprite_accessory/marking/avian/resomi
name = "Raptor Ears, Additive (Head)"
icon_state = "ears-add"
- blend = ICON_ADD
+ color_blend = ICON_ADD
uid = "acc_marking_avian_raptorears_alt"
/decl/sprite_accessory/marking/avian/wing_feathers/additive
name = "Wing Feathers, Additive (Left)"
icon_state = "wing_feathers-add"
- blend = ICON_ADD
+ color_blend = ICON_ADD
uid = "acc_marking_avian_wingfeathers_left_alt"
/decl/sprite_accessory/marking/avian/wing_feathers/right/additive
name = "Wing Feathers, Additive (Right)"
icon_state = "wing_feathers-add"
- blend = ICON_ADD
+ color_blend = ICON_ADD
uid = "acc_marking_avian_wingfeathers_right_alt"
diff --git a/mods/species/neoavians/datum/loadout.dm b/mods/species/neoavians/datum/loadout.dm
index 6dc0064b31d..94a95479370 100644
--- a/mods/species/neoavians/datum/loadout.dm
+++ b/mods/species/neoavians/datum/loadout.dm
@@ -28,5 +28,5 @@
/decl/loadout_option/avian/shoes
name = "footwraps"
path = /obj/item/clothing/shoes/avian/footwraps
- flags = GEAR_HAS_COLOR_SELECTION
+ loadout_flags = GEAR_HAS_COLOR_SELECTION
slot = slot_shoes_str
\ No newline at end of file
diff --git a/mods/species/neoavians/datum/species.dm b/mods/species/neoavians/datum/species.dm
index f16bf503d47..da30605c503 100644
--- a/mods/species/neoavians/datum/species.dm
+++ b/mods/species/neoavians/datum/species.dm
@@ -46,11 +46,6 @@
swap_flags = MONKEY|SIMPLE_ANIMAL
push_flags = MONKEY|SIMPLE_ANIMAL
- heat_discomfort_strings = list(
- "Your feathers prickle in the heat.",
- "You feel uncomfortably warm.",
- )
-
unarmed_attacks = list(
/decl/natural_attack/bite/sharp,
/decl/natural_attack/claws,
@@ -71,7 +66,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/avian, slot_shoes_str)
/decl/species/neoavian/get_holder_color(var/mob/living/carbon/human/H)
- return H.skin_colour
+ return H.get_skin_colour()
/decl/hierarchy/outfit/job/generic/assistant/avian
name = "Job - Avian Assistant"
diff --git a/mods/species/neoavians/datum/species_bodytypes.dm b/mods/species/neoavians/datum/species_bodytypes.dm
index 3ce77c99416..112dcd1517e 100644
--- a/mods/species/neoavians/datum/species_bodytypes.dm
+++ b/mods/species/neoavians/datum/species_bodytypes.dm
@@ -1,27 +1,32 @@
/decl/bodytype/avian
- name = "avian"
- bodytype_category = BODYTYPE_AVIAN
- icon_base = 'mods/species/neoavians/icons/body.dmi'
- blood_overlays = 'mods/species/neoavians/icons/blood_avian.dmi'
- limb_blend = ICON_MULTIPLY
- bodytype_flag = BODY_FLAG_AVIAN
- eye_icon = 'mods/species/neoavians/icons/eyes.dmi'
- appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
- base_color = "#252525"
- base_eye_color = "#f5c842"
- mob_size = MOB_SIZE_SMALL
- has_organ = list(
- BP_STOMACH = /obj/item/organ/internal/stomach,
- BP_HEART = /obj/item/organ/internal/heart,
- BP_LUNGS = /obj/item/organ/internal/lungs,
- BP_LIVER = /obj/item/organ/internal/liver,
- BP_KIDNEYS = /obj/item/organ/internal/kidneys,
- BP_BRAIN = /obj/item/organ/internal/brain,
- BP_EYES = /obj/item/organ/internal/eyes
+ name = "avian"
+ bodytype_category = BODYTYPE_AVIAN
+ icon_base = 'mods/species/neoavians/icons/body.dmi'
+ blood_overlays = 'mods/species/neoavians/icons/blood_avian.dmi'
+ limb_blend = ICON_MULTIPLY
+ bodytype_flag = BODY_FLAG_AVIAN
+ eye_icon = 'mods/species/neoavians/icons/eyes.dmi'
+ appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
+ base_color = "#252525"
+ base_eye_color = "#f5c842"
+ mob_size = MOB_SIZE_SMALL
+ has_organ = list(
+ BP_STOMACH = /obj/item/organ/internal/stomach,
+ BP_HEART = /obj/item/organ/internal/heart,
+ BP_LUNGS = /obj/item/organ/internal/lungs,
+ BP_LIVER = /obj/item/organ/internal/liver,
+ BP_KIDNEYS = /obj/item/organ/internal/kidneys,
+ BP_BRAIN = /obj/item/organ/internal/brain,
+ BP_EYES = /obj/item/organ/internal/eyes
+ )
+ override_limb_types = list(BP_TAIL = /obj/item/organ/external/tail/avian)
+ default_h_style = /decl/sprite_accessory/hair/avian
+ base_markings = list(/decl/sprite_accessory/marking/avian = "#454545")
+
+ heat_discomfort_strings = list(
+ "Your feathers prickle in the heat.",
+ "You feel uncomfortably warm.",
)
- override_limb_types = list(BP_TAIL = /obj/item/organ/external/tail/avian)
- default_h_style = /decl/sprite_accessory/hair/avian
- base_markings = list(/decl/sprite_accessory/marking/avian = "#454545")
var/tail = "tail_avian"
var/tail_icon = 'mods/species/neoavians/icons/tail.dmi'
@@ -29,46 +34,45 @@
var/tail_hair
var/tail_hair_blend
var/tail_states
- var/tail_animation
/decl/bodytype/avian/raptor
- name = "raptor"
- icon_base = 'mods/species/neoavians/icons/body_raptor.dmi'
- tail_icon = 'mods/species/neoavians/icons/tail.dmi'
- tail = "tail_raptor"
- tail_hair = "over"
- tail_hair_blend = ICON_MULTIPLY
+ name = "raptor"
+ icon_base = 'mods/species/neoavians/icons/body_raptor.dmi'
+ tail_icon = 'mods/species/neoavians/icons/tail.dmi'
+ tail = "tail_raptor"
+ tail_hair = "over"
+ tail_hair_blend = ICON_MULTIPLY
/decl/bodytype/avian/additive
- name = "avian, additive"
- icon_base = 'mods/species/neoavians/icons/body_add.dmi'
+ name = "avian, additive"
+ icon_base = 'mods/species/neoavians/icons/body_add.dmi'
health_hud_intensity = 3
- limb_blend = ICON_ADD
- tail_blend = ICON_ADD
- tail = "tail_avian_add"
+ limb_blend = ICON_ADD
+ tail_blend = ICON_ADD
+ tail = "tail_avian_add"
/decl/bodytype/avian/additive/raptor
- name = "raptor, additive"
- icon_base = 'mods/species/neoavians/icons/body_raptor_add.dmi'
- tail = "tail_raptor_add"
- tail_hair = "over"
- tail_hair_blend = ICON_ADD
+ name = "raptor, additive"
+ icon_base = 'mods/species/neoavians/icons/body_raptor_add.dmi'
+ tail = "tail_raptor_add"
+ tail_hair = "over"
+ tail_hair_blend = ICON_ADD
/decl/bodytype/avian/Initialize()
equip_adjust = list(
- slot_l_ear_str = list("[NORTH]" = list("x" = 1, "y" = -5), "[EAST]" = list("x" = -2, "y" = -5), "[SOUTH]" = list("x" = -1, "y" = -5), "[WEST]" = list("x" = 0, "y" = -5)),
- slot_r_ear_str = list("[NORTH]" = list("x" = 1, "y" = -5), "[EAST]" = list("x" = 0, "y" = -5), "[SOUTH]" = list("x" = -1, "y" = -5), "[WEST]" = list("x" = 2, "y" = -5)),
- BP_L_HAND = list("[NORTH]" = list("x" = 3, "y" = -3), "[EAST]" = list("x" = 1, "y" = -3), "[SOUTH]" = list("x" = -3, "y" = -3), "[WEST]" = list("x" = -5, "y" = -3)),
- BP_R_HAND = list("[NORTH]" = list("x" = -3, "y" = -3), "[EAST]" = list("x" = 5, "y" = -3), "[SOUTH]" = list("x" = 3, "y" = -3), "[WEST]" = list("x" = -1, "y" = -3)),
- slot_head_str = list("[NORTH]" = list("x" = 0, "y" = -5), "[EAST]" = list("x" = 1, "y" = -5), "[SOUTH]" = list("x" = 0, "y" = -5), "[WEST]" = list("x" = -1, "y" = -5)),
- slot_wear_mask_str = list("[NORTH]" = list("x" = 0, "y" = -6), "[EAST]" = list("x" = 2, "y" = -6), "[SOUTH]" = list("x" = 0, "y" = -6), "[WEST]" = list("x" = -2, "y" = -6)),
- slot_glasses_str = list("[NORTH]" = list("x" = 0, "y" = -6), "[EAST]" = list("x" = 1, "y" = -6), "[SOUTH]" = list("x" = 0, "y" = -6), "[WEST]" = list("x" = -1, "y" = -6)),
- slot_back_str = list("[NORTH]" = list("x" = 0, "y" = -6), "[EAST]" = list("x" = 3, "y" = -6), "[SOUTH]" = list("x" = 0, "y" = -6), "[WEST]" = list("x" = -3, "y" = -6)),
- slot_w_uniform_str = list("[NORTH]" = list("x" = 0, "y" = -6), "[EAST]" = list("x" = -1, "y" = -6), "[SOUTH]" = list("x" = 0, "y" = -6), "[WEST]" = list("x" = 1, "y" = -6)),
- slot_tie_str = list("[NORTH]" = list("x" = 0, "y" = -5), "[EAST]" = list("x" = 0, "y" = -5), "[SOUTH]" = list("x" = 0, "y" = -5), "[WEST]" = list("x" = 0, "y" = -5)),
- slot_wear_id_str = list("[NORTH]" = list("x" = 0, "y" = -6), "[EAST]" = list("x" = -1, "y" = -6), "[SOUTH]" = list("x" = 0, "y" = -6), "[WEST]" = list("x" = 1, "y" = -6)),
- slot_wear_suit_str = list("[NORTH]" = list("x" = 0, "y" = -6), "[EAST]" = list("x" = -1, "y" = -6), "[SOUTH]" = list("x" = 0, "y" = -6), "[WEST]" = list("x" = 1, "y" = -6)),
- slot_belt_str = list("[NORTH]" = list("x" = 0, "y" = -6), "[EAST]" = list("x" = -1, "y" = -6), "[SOUTH]" = list("x" = 0, "y" = -6), "[WEST]" = list("x" = 1, "y" = -6))
+ slot_l_ear_str = list("[NORTH]" = list( 1, -5), "[EAST]" = list(-2, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 0, -5)),
+ slot_r_ear_str = list("[NORTH]" = list( 1, -5), "[EAST]" = list( 0, -5), "[SOUTH]" = list(-1, -5), "[WEST]" = list( 2, -5)),
+ BP_L_HAND = list("[NORTH]" = list( 3, -3), "[EAST]" = list( 1, -3), "[SOUTH]" = list(-3, -3), "[WEST]" = list(-5, -3)),
+ BP_R_HAND = list("[NORTH]" = list(-3, -3), "[EAST]" = list( 5, -3), "[SOUTH]" = list( 3, -3), "[WEST]" = list(-1, -3)),
+ slot_head_str = list("[NORTH]" = list( 0, -5), "[EAST]" = list( 1, -5), "[SOUTH]" = list( 0, -5), "[WEST]" = list(-1, -5)),
+ slot_wear_mask_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 2, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-2, -6)),
+ slot_glasses_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-1, -6)),
+ slot_back_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list( 3, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list(-3, -6)),
+ slot_w_uniform_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
+ slot_tie_str = list("[NORTH]" = list( 0, -5), "[EAST]" = list( 0, -5), "[SOUTH]" = list( 0, -5), "[WEST]" = list( 0, -5)),
+ slot_wear_id_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
+ slot_wear_suit_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6)),
+ slot_belt_str = list("[NORTH]" = list( 0, -6), "[EAST]" = list(-1, -6), "[SOUTH]" = list( 0, -6), "[WEST]" = list( 1, -6))
)
. = ..()
@@ -77,11 +81,6 @@
var/decl/bodytype/avian/bird_bod = bodytype
return bird_bod.tail
-/obj/item/organ/external/tail/avian/get_tail_animation()
- if(istype(bodytype, /decl/bodytype/avian))
- var/decl/bodytype/avian/bird_bod = bodytype
- return bird_bod.tail_animation
-
/obj/item/organ/external/tail/avian/get_tail_icon()
if(istype(bodytype, /decl/bodytype/avian))
var/decl/bodytype/avian/bird_bod = bodytype
diff --git a/mods/species/neoavians/icons/body.dmi b/mods/species/neoavians/icons/body.dmi
index 5e9915ed184..08aaac908d8 100644
Binary files a/mods/species/neoavians/icons/body.dmi and b/mods/species/neoavians/icons/body.dmi differ
diff --git a/mods/species/neoavians/icons/body_raptor.dmi b/mods/species/neoavians/icons/body_raptor.dmi
index fd339fb8f3b..84035d0b3e3 100644
Binary files a/mods/species/neoavians/icons/body_raptor.dmi and b/mods/species/neoavians/icons/body_raptor.dmi differ
diff --git a/mods/species/neoavians/icons/hair.dmi b/mods/species/neoavians/icons/hair.dmi
index 0e9d333d6c8..df5a5f7010a 100644
Binary files a/mods/species/neoavians/icons/hair.dmi and b/mods/species/neoavians/icons/hair.dmi differ
diff --git a/mods/species/neoavians/icons/markings.dmi b/mods/species/neoavians/icons/markings.dmi
index 68489bb750f..1615c45bf74 100644
Binary files a/mods/species/neoavians/icons/markings.dmi and b/mods/species/neoavians/icons/markings.dmi differ
diff --git a/mods/species/neoavians/icons/tail.dmi b/mods/species/neoavians/icons/tail.dmi
index ffe826ed6b5..1edfc99e00a 100644
Binary files a/mods/species/neoavians/icons/tail.dmi and b/mods/species/neoavians/icons/tail.dmi differ
diff --git a/mods/species/neoavians/machinery/suit_cycler.dm b/mods/species/neoavians/machinery/suit_cycler.dm
index a213885dc5f..64d3e9951ba 100644
--- a/mods/species/neoavians/machinery/suit_cycler.dm
+++ b/mods/species/neoavians/machinery/suit_cycler.dm
@@ -1,6 +1,6 @@
/obj/machinery/suit_cycler/Initialize()
+ LAZYDISTINCTADD(available_bodytypes, BODYTYPE_AVIAN)
. = ..()
- available_bodytypes += BODYTYPE_AVIAN
//mining
diff --git a/mods/species/serpentid/datum/species.dm b/mods/species/serpentid/datum/species.dm
index d92dd8d2e47..75f206b6f3f 100644
--- a/mods/species/serpentid/datum/species.dm
+++ b/mods/species/serpentid/datum/species.dm
@@ -23,7 +23,7 @@
hidden_from_codex = TRUE
silent_steps = TRUE
age_descriptor = /datum/appearance_descriptor/age/serpentid
- skin_material = /decl/material/solid/skin/insect
+ skin_material = /decl/material/solid/organic/skin/insect
bone_material = null
speech_sounds = list('sound/voice/bug.ogg')
speech_chance = 2
@@ -55,9 +55,6 @@
strength = STR_HIGH
breath_pressure = 25
blood_volume = 840
- heat_level_1 = 410 //Default 360 - Higher is better
- heat_level_2 = 440 //Default 400
- heat_level_3 = 800 //Default 1000
species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_BLOCK | SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NEED_DIRECT_ABSORB
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
bump_flag = HEAVY
diff --git a/mods/species/serpentid/datum/species_bodytypes.dm b/mods/species/serpentid/datum/species_bodytypes.dm
index b40a1fdd08e..749fcf18bd5 100644
--- a/mods/species/serpentid/datum/species_bodytypes.dm
+++ b/mods/species/serpentid/datum/species_bodytypes.dm
@@ -48,17 +48,20 @@
BP_R_HAND = list(BP_R_HAND, BP_R_HAND_UPPER)
)
breathing_organ = BP_TRACH
+ heat_level_1 = 410 //Default 360 - Higher is better
+ heat_level_2 = 440 //Default 400
+ heat_level_3 = 800 //Default 1000
/decl/bodytype/serpentid/Initialize()
equip_adjust = list(
- BP_L_HAND_UPPER = list("[NORTH]" = list("x" = 0, "y" = 8), "[EAST]" = list("x" = 0, "y" = 8), "[SOUTH]" = list("x" = -0, "y" = 8), "[WEST]" = list("x" = 0, "y" = 8)),
- BP_R_HAND_UPPER = list("[NORTH]" = list("x" = 0, "y" = 8), "[EAST]" = list("x" = 0, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 0, "y" = 8)),
- BP_L_HAND = list("[NORTH]" = list("x" = 4, "y" = 0), "[EAST]" = list("x" = 0, "y" = 0), "[SOUTH]" = list("x" = -4, "y" = 0), "[WEST]" = list("x" = 0, "y" = 0)),
- BP_R_HAND = list("[NORTH]" = list("x" = -4, "y" = 0), "[EAST]" = list("x" = 0, "y" = 0), "[SOUTH]" = list("x" = 4, "y" = 0), "[WEST]" = list("x" = 0, "y" = 0)),
- slot_head_str = list("[NORTH]" = list("x" = 0, "y" = 7), "[EAST]" = list("x" = 0, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 0, "y" = 8)),
- slot_back_str = list("[NORTH]" = list("x" = 0, "y" = 7), "[EAST]" = list("x" = 0, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 0, "y" = 8)),
- slot_belt_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = 8, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = -8, "y" = 0)),
- slot_glasses_str = list("[NORTH]" = list("x" = 0, "y" = 10), "[EAST]" = list("x" = 0, "y" = 11), "[SOUTH]" = list("x" = 0, "y" = 11), "[WEST]" = list("x" = 0, "y" = 11))
+ BP_L_HAND_UPPER = list("[NORTH]" = list( 0, 8), "[EAST]" = list(0, 8), "[SOUTH]" = list(-0, 8), "[WEST]" = list( 0, 8)),
+ BP_R_HAND_UPPER = list("[NORTH]" = list( 0, 8), "[EAST]" = list(0, 8), "[SOUTH]" = list( 0, 8), "[WEST]" = list( 0, 8)),
+ BP_L_HAND = list("[NORTH]" = list( 4, 0), "[EAST]" = list(0, 0), "[SOUTH]" = list(-4, 0), "[WEST]" = list( 0, 0)),
+ BP_R_HAND = list("[NORTH]" = list(-4, 0), "[EAST]" = list(0, 0), "[SOUTH]" = list( 4, 0), "[WEST]" = list( 0, 0)),
+ slot_head_str = list("[NORTH]" = list( 0, 7), "[EAST]" = list(0, 8), "[SOUTH]" = list( 0, 8), "[WEST]" = list( 0, 8)),
+ slot_back_str = list("[NORTH]" = list( 0, 7), "[EAST]" = list(0, 8), "[SOUTH]" = list( 0, 8), "[WEST]" = list( 0, 8)),
+ slot_belt_str = list("[NORTH]" = list( 0, 0), "[EAST]" = list(8, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-8, 0)),
+ slot_glasses_str = list("[NORTH]" = list( 0, 10), "[EAST]" = list(0, 11), "[SOUTH]" = list( 0, 11), "[WEST]" = list( 0, 11))
)
. = ..()
diff --git a/mods/species/serpentid/mobs/bodyparts_serpentid.dm b/mods/species/serpentid/mobs/bodyparts_serpentid.dm
index f75c02d8631..26b976e41ab 100644
--- a/mods/species/serpentid/mobs/bodyparts_serpentid.dm
+++ b/mods/species/serpentid/mobs/bodyparts_serpentid.dm
@@ -7,16 +7,6 @@
/obj/item/organ/internal/eyes/insectoid/serpentid/get_innate_flash_protection()
return override_flash_protection
-/obj/item/organ/internal/eyes/insectoid/serpentid/get_special_overlay()
- var/icon/I = get_onhead_icon()
- if(I)
- var/image/eye_overlay = image(I)
- if(owner && owner.is_cloaked())
- eye_overlay.alpha = 100
- if(eyes_shielded)
- eye_overlay.color = "#aaaaaa"
- return eye_overlay
-
/obj/item/organ/internal/eyes/insectoid/serpentid/additional_flash_effects(var/intensity)
if(!eyes_shielded)
take_internal_damage(max(0, 4 * (intensity)))
@@ -28,7 +18,7 @@
. = ..()
if(.)
action.button_icon_state = "serpentid-shield-[eyes_shielded ? 1 : 0]"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/internal/eyes/insectoid/serpentid/attack_self(var/mob/user)
. = ..()
@@ -42,7 +32,7 @@
else
to_chat(owner, "Your protective lenses retract out of the way.")
override_flash_protection = FLASH_PROTECTION_VULNERABLE
- addtimer(CALLBACK(src, .proc/remove_shield), 1 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(remove_shield)), 1 SECONDS)
owner.update_icon()
refresh_action_button()
@@ -136,7 +126,7 @@
. = ..()
if(.)
action.button_icon_state = "serpentid-threat"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/external/chest/insectoid/serpentid/attack_self(var/mob/user)
. = ..()
@@ -158,18 +148,26 @@
playsound(owner.loc, 'sound/effects/angrybug.ogg', 60, 0)
owner.skin_state = SKIN_THREAT
owner.update_skin()
- addtimer(CALLBACK(owner, /mob/living/carbon/human/proc/reset_skin), 10 SECONDS, TIMER_UNIQUE)
+ addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob/living/carbon/human, reset_skin)), 10 SECONDS, TIMER_UNIQUE)
else if(owner.skin_state == SKIN_THREAT)
owner.reset_skin()
/obj/item/organ/external/head/insectoid/serpentid
name = "head"
-/obj/item/organ/external/head/insectoid/serpentid/get_eye_overlay()
- // todo: maybe this should use its own bodytype instead of mob root bodytype?
- var/obj/item/organ/internal/eyes/eyes = owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes)
- if(eyes)
- return eyes.get_special_overlay()
+/obj/item/organ/external/head/insectoid/serpentid/get_organ_eyes_overlay()
+ var/obj/item/organ/internal/eyes/eyes = get_eyes_organ()
+ var/icon/eyes_icon = eyes?.get_onhead_icon()
+ if(!eyes_icon)
+ return
+ var/image/eye_overlay = image(eyes_icon)
+ if(owner && owner.is_cloaked())
+ eye_overlay.alpha = 100
+ if(istype(eyes, /obj/item/organ/internal/eyes/insectoid/serpentid))
+ var/obj/item/organ/internal/eyes/insectoid/serpentid/snake_eyes = eyes
+ if(snake_eyes.eyes_shielded)
+ eye_overlay.color = "#aaaaaa"
+ return eye_overlay
/obj/item/organ/external/groin/insectoid/serpentid
name = "abdomen"
@@ -182,7 +180,7 @@
. = ..()
if(.)
action.button_icon_state = "serpentid-cloak-[owner && owner.is_cloaked_by(species) ? 1 : 0]"
- if(action.button) action.button.UpdateIcon()
+ action.button?.update_icon()
/obj/item/organ/external/groin/insectoid/serpentid/attack_self(var/mob/user)
. = ..()
diff --git a/mods/species/utility_frames/_utility_frames.dme b/mods/species/utility_frames/_utility_frames.dme
index 776d098bb5d..728a6e05d86 100644
--- a/mods/species/utility_frames/_utility_frames.dme
+++ b/mods/species/utility_frames/_utility_frames.dme
@@ -1,5 +1,6 @@
#ifndef MODPACK_UTILITY_FRAMES
#define MODPACK_UTILITY_FRAMES
+#include "../../content/shackles/_shackles.dme"
#include "_utility_frames.dm"
#include "species.dm"
#include "species_bodytypes.dm"
diff --git a/mods/species/utility_frames/markings.dm b/mods/species/utility_frames/markings.dm
index 24b8a68b72d..ade0c186443 100644
--- a/mods/species/utility_frames/markings.dm
+++ b/mods/species/utility_frames/markings.dm
@@ -4,7 +4,7 @@
body_parts = list(BP_CHEST)
species_allowed = list(SPECIES_FRAME)
icon = 'mods/species/utility_frames/icons/markings.dmi'
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_marking_frame_stripe"
/decl/sprite_accessory/marking/frame/head_stripe
diff --git a/mods/species/utility_frames/species.dm b/mods/species/utility_frames/species.dm
index 2d988a94fc4..5e3f44eacf4 100644
--- a/mods/species/utility_frames/species.dm
+++ b/mods/species/utility_frames/species.dm
@@ -15,7 +15,6 @@
description = "Simple AI-driven robots are used for many menial or repetitive tasks in human space."
cyborg_noun = null
base_prosthetics_model = null
-
blood_types = list(/decl/blood_type/coolant)
available_bodytypes = list(/decl/bodytype/prosthetic/utility_frame)
@@ -27,22 +26,12 @@
warning_low_pressure = 50
hazard_low_pressure = -1
flesh_color = COLOR_GUNMETAL
- cold_level_1 = SYNTH_COLD_LEVEL_1
- cold_level_2 = SYNTH_COLD_LEVEL_2
- cold_level_3 = SYNTH_COLD_LEVEL_3
- heat_level_1 = SYNTH_HEAT_LEVEL_1
- heat_level_2 = SYNTH_HEAT_LEVEL_2
- heat_level_3 = SYNTH_HEAT_LEVEL_3
body_temperature = null
passive_temp_gain = 5 // stabilize at ~80 C in a 20 C environment.
- heat_discomfort_level = 373.15
blood_volume = 0
preview_outfit = null
- heat_discomfort_strings = list(
- "You are dangerously close to overheating!"
- )
unarmed_attacks = list(
/decl/natural_attack/stomp,
/decl/natural_attack/kick,
diff --git a/mods/species/utility_frames/species_bodytypes.dm b/mods/species/utility_frames/species_bodytypes.dm
index 64c14b4ef75..c5dc14b5025 100644
--- a/mods/species/utility_frames/species_bodytypes.dm
+++ b/mods/species/utility_frames/species_bodytypes.dm
@@ -12,14 +12,14 @@
base_eye_color = "#00ccff"
material = /decl/material/solid/metal/steel
vital_organs = list(
- BP_POSIBRAIN,
+ BP_BRAIN,
BP_CELL
)
override_limb_types = list(BP_HEAD = /obj/item/organ/external/head/utility_frame)
has_organ = list(
- BP_POSIBRAIN = /obj/item/organ/internal/posibrain,
- BP_EYES = /obj/item/organ/internal/eyes,
- BP_CELL = /obj/item/organ/internal/cell
+ BP_BRAIN = /obj/item/organ/internal/brain/robotic,
+ BP_EYES = /obj/item/organ/internal/eyes,
+ BP_CELL = /obj/item/organ/internal/cell
)
base_markings = list(
/decl/sprite_accessory/marking/frame/plating = "#8888cc",
@@ -30,16 +30,16 @@
/decl/bodytype/prosthetic/utility_frame/Initialize()
equip_adjust = list(
"[slot_l_ear_str]" = list(
- "[NORTH]" = list("x" = 2, "y" = 0),
- "[EAST]" = list("x" = 0, "y" = 0),
- "[SOUTH]" = list("x" = -2, "y" = 0),
- "[WEST]" = list("x" = 0, "y" = 0)
+ "[NORTH]" = list( 2, 0),
+ "[EAST]" = list( 0, 0),
+ "[SOUTH]" = list(-2, 0),
+ "[WEST]" = list( 0, 0)
),
"[slot_r_ear_str]" = list(
- "[NORTH]" = list("x" = -2, "y" = 0),
- "[EAST]" = list("x" = 0, "y" = 0),
- "[SOUTH]" = list("x" = 2, "y" = 0),
- "[WEST]" = list("x" = 0, "y" = 0)
+ "[NORTH]" = list(-2, 0),
+ "[EAST]" = list( 0, 0),
+ "[SOUTH]" = list( 2, 0),
+ "[WEST]" = list( 0, 0)
)
)
. = ..()
diff --git a/mods/species/vox/_vox.dm b/mods/species/vox/_vox.dm
index 00a0d93c378..9562251d79d 100644
--- a/mods/species/vox/_vox.dm
+++ b/mods/species/vox/_vox.dm
@@ -10,10 +10,11 @@
credits_crew_names = list("THE VOX")
credits_topics = list("VOX RITUAL DUELS", "NECK MARKINGS", "ANCIENT SUPERCOMPUTERS")
-/mob/living/carbon/human/vox/Initialize(mapload, new_species)
- h_style = /decl/sprite_accessory/hair/vox/short
- hair_colour = COLOR_BEASTY_BROWN
- . = ..(mapload, SPECIES_VOX)
+/mob/living/carbon/human/vox/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype)
+ set_hairstyle(/decl/sprite_accessory/hair/vox/short, skip_update = TRUE)
+ set_hair_colour(COLOR_BEASTY_BROWN, skip_update = TRUE)
+ species_name = SPECIES_VOX
+ . = ..()
/datum/follow_holder/voxstack
sort_order = 14
diff --git a/mods/species/vox/datum/accessories.dm b/mods/species/vox/datum/accessories.dm
index b8fb567bbf6..5213b4d8612 100644
--- a/mods/species/vox/datum/accessories.dm
+++ b/mods/species/vox/datum/accessories.dm
@@ -70,7 +70,7 @@
body_flags_allowed = BODY_FLAG_VOX
bodytype_categories_allowed = list(BODYTYPE_VOX)
icon = 'mods/species/vox/icons/body/soldier/markings.dmi'
- blend = ICON_MULTIPLY
+ color_blend = ICON_MULTIPLY
uid = "acc_markings_vox_neck"
/decl/sprite_accessory/marking/vox/claws
diff --git a/mods/species/vox/datum/antagonism.dm b/mods/species/vox/datum/antagonism.dm
index 72ac21f2723..cc21ad6ea57 100644
--- a/mods/species/vox/datum/antagonism.dm
+++ b/mods/species/vox/datum/antagonism.dm
@@ -17,7 +17,7 @@
hands = list(/obj/item/gun/launcher/alien/spikethrower)
id_type = /obj/item/card/id/syndicate
-/decl/hierarchy/outfit/vox_raider/equip(mob/living/carbon/human/H, rank, assignment, equip_adjustments)
+/decl/hierarchy/outfit/vox_raider/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank)
uniform = pick(/obj/item/clothing/under/vox/vox_robes, /obj/item/clothing/under/vox/vox_casual)
glasses = pick(/obj/item/clothing/glasses/thermal, /obj/item/clothing/glasses/thermal/plain/eyepatch, /obj/item/clothing/glasses/thermal/plain/monocle)
holster = pick(/obj/item/clothing/accessory/storage/holster/armpit, /obj/item/clothing/accessory/storage/holster/waist, /obj/item/clothing/accessory/storage/holster/hip)
@@ -39,17 +39,17 @@
if(!istype(user) || !user.mind || !user.mind.assigned_special_role != raiders || user.species.name == SPECIES_VOX || !is_alien_whitelisted(user, SPECIES_VOX))
return ..()
- var/choice = input("Do you wish to become a Vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes")
+ var/choice = input("Do you wish to become a vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes")
if(choice != "Yes")
return ..()
var/decl/hierarchy/outfit/outfit = GET_DECL(/decl/hierarchy/outfit/vox_raider)
var/mob/living/carbon/human/vox/vox = new(get_turf(src), SPECIES_VOX)
- outfit.equip(vox)
+ outfit.equip_outfit(vox)
if(user.mind)
user.mind.transfer_to(vox)
qdel(user)
- addtimer(CALLBACK(src, .proc/do_post_voxifying, vox), 1)
+ addtimer(CALLBACK(src, PROC_REF(do_post_voxifying), vox), 1)
/obj/structure/mirror/raider/proc/do_post_voxifying(var/mob/living/carbon/human/vox)
var/newname = sanitize_safe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN)
diff --git a/mods/species/vox/datum/species.dm b/mods/species/vox/datum/species.dm
index ffc0cac1066..b8bd96cd14e 100644
--- a/mods/species/vox/datum/species.dm
+++ b/mods/species/vox/datum/species.dm
@@ -62,10 +62,6 @@
warning_low_pressure = 50
hazard_low_pressure = 0
- cold_level_1 = 80
- cold_level_2 = 50
- cold_level_3 = -1
-
age_descriptor = /datum/appearance_descriptor/age/vox
preview_outfit = /decl/hierarchy/outfit/vox_raider
diff --git a/mods/species/vox/datum/species_bodytypes.dm b/mods/species/vox/datum/species_bodytypes.dm
index 8852245711b..ae83e547319 100644
--- a/mods/species/vox/datum/species_bodytypes.dm
+++ b/mods/species/vox/datum/species_bodytypes.dm
@@ -1,123 +1,120 @@
/decl/bodytype/vox
- name = "soldier voxform"
+ name = "soldier voxform"
bodytype_category = BODYTYPE_VOX
- icon_base = 'mods/species/vox/icons/body/soldier/body.dmi'
- icon_deformed = 'mods/species/vox/icons/body/deformed_body.dmi'
- husk_icon = 'mods/species/vox/icons/body/husk.dmi'
- blood_overlays = 'mods/species/vox/icons/body/blood_overlays.dmi'
- eye_icon = 'mods/species/vox/icons/body/soldier/eyes.dmi'
- bodytype_flag = BODY_FLAG_VOX
- limb_blend = ICON_MULTIPLY
- eye_blend = ICON_MULTIPLY
- appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_SKIN_COLOR
- base_hair_color = "#160900"
- base_eye_color = "#d60093"
- base_color = "#526d29"
- body_flags = BODY_FLAG_NO_DNA
- default_h_style = /decl/sprite_accessory/hair/vox/short
+ icon_base = 'mods/species/vox/icons/body/soldier/body.dmi'
+ icon_deformed = 'mods/species/vox/icons/body/deformed_body.dmi'
+ husk_icon = 'mods/species/vox/icons/body/husk.dmi'
+ blood_overlays = 'mods/species/vox/icons/body/blood_overlays.dmi'
+ eye_icon = 'mods/species/vox/icons/body/soldier/eyes.dmi'
+ bodytype_flag = BODY_FLAG_VOX
+ limb_blend = ICON_MULTIPLY
+ eye_blend = ICON_MULTIPLY
+ appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_SKIN_COLOR
+ base_hair_color = "#160900"
+ base_eye_color = "#d60093"
+ base_color = "#526d29"
+ body_flags = BODY_FLAG_NO_DNA
+ default_h_style = /decl/sprite_accessory/hair/vox/short
+
+ cold_level_1 = 80
+ cold_level_2 = 50
+ cold_level_3 = -1
vital_organs = list(
BP_STACK,
BP_BRAIN
)
-
override_limb_types = list(
BP_GROIN = /obj/item/organ/external/groin/vox,
BP_TAIL = /obj/item/organ/external/tail/vox
)
-
has_organ = list(
- BP_STOMACH = /obj/item/organ/internal/stomach/vox,
- BP_HEART = /obj/item/organ/internal/heart/vox,
- BP_LUNGS = /obj/item/organ/internal/lungs/vox,
- BP_LIVER = /obj/item/organ/internal/liver/vox,
- BP_KIDNEYS = /obj/item/organ/internal/kidneys/vox,
- BP_BRAIN = /obj/item/organ/internal/brain,
- BP_EYES = /obj/item/organ/internal/eyes/vox,
- BP_STACK = /obj/item/organ/internal/voxstack,
+ BP_STOMACH = /obj/item/organ/internal/stomach/vox,
+ BP_HEART = /obj/item/organ/internal/heart/vox,
+ BP_LUNGS = /obj/item/organ/internal/lungs/vox,
+ BP_LIVER = /obj/item/organ/internal/liver/vox,
+ BP_KIDNEYS = /obj/item/organ/internal/kidneys/vox,
+ BP_BRAIN = /obj/item/organ/internal/brain,
+ BP_EYES = /obj/item/organ/internal/eyes/vox,
+ BP_STACK = /obj/item/organ/internal/voxstack,
BP_HINDTONGUE = /obj/item/organ/internal/hindtongue
)
-
base_markings = list(
- /decl/sprite_accessory/marking/vox/beak = "#bc7d3e",
+ /decl/sprite_accessory/marking/vox/beak = "#bc7d3e",
/decl/sprite_accessory/marking/vox/scutes = "#bc7d3e",
- /decl/sprite_accessory/marking/vox/crest = "#bc7d3e",
- /decl/sprite_accessory/marking/vox/claws = "#a0a654"
+ /decl/sprite_accessory/marking/vox/crest = "#bc7d3e",
+ /decl/sprite_accessory/marking/vox/claws = "#a0a654"
)
/decl/bodytype/vox/Initialize()
- if(!equip_adjust)
+ if(!length(equip_adjust))
equip_adjust = list(
- BP_L_HAND = list("[NORTH]" = list("x" = 0, "y" = -2), "[EAST]" = list("x" = 0, "y" = -2), "[SOUTH]" = list("x" = 0, "y" = -2), "[WEST]" = list("x" = 0, "y" = -2)),
- BP_R_HAND = list("[NORTH]" = list("x" = 0, "y" = -2), "[EAST]" = list("x" = 0, "y" = -2), "[SOUTH]" = list("x" = 0, "y" = -2), "[WEST]" = list("x" = 0, "y" = -2)),
- slot_head_str = list("[NORTH]" = list("x" = 0, "y" = -2), "[EAST]" = list("x" = 3, "y" = -2), "[SOUTH]" = list("x" = 0, "y" = -2), "[WEST]" = list("x" = -3, "y" = -2)),
- slot_wear_mask_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = 4, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = -4, "y" = 0)),
- slot_wear_suit_str = list("[NORTH]" = list("x" = 0, "y" = -1), "[EAST]" = list("x" = 0, "y" = -1), "[SOUTH]" = list("x" = 0, "y" = -1), "[WEST]" = list("x" = 0, "y" = -1)),
- slot_w_uniform_str = list("[NORTH]" = list("x" = 0, "y" = -1), "[EAST]" = list("x" = 0, "y" = -1), "[SOUTH]" = list("x" = 0, "y" = -1), "[WEST]" = list("x" = 0, "y" = -1)),
- slot_underpants_str = list("[NORTH]" = list("x" = 0, "y" = -1), "[EAST]" = list("x" = 0, "y" = -1), "[SOUTH]" = list("x" = 0, "y" = -1), "[WEST]" = list("x" = 0, "y" = -1)),
- slot_undershirt_str = list("[NORTH]" = list("x" = 0, "y" = -1), "[EAST]" = list("x" = 0, "y" = -1), "[SOUTH]" = list("x" = 0, "y" = -1), "[WEST]" = list("x" = 0, "y" = -1)),
- slot_back_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = 3, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = -3, "y" = 0))
+ BP_L_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)),
+ BP_R_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)),
+ slot_head_str = list("[NORTH]" = list(0, -2), "[EAST]" = list(3, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list(-3, -2)),
+ slot_wear_mask_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(4, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-4, 0)),
+ slot_wear_suit_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
+ slot_w_uniform_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
+ slot_underpants_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
+ slot_undershirt_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)),
+ slot_back_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(3, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-3, 0))
)
return ..()
/decl/bodytype/vox/servitor
- name = "servitor voxform"
- bodytype_category = BODYTYPE_HUMANOID
- icon_base = 'mods/species/vox/icons/body/servitor/body.dmi'
- icon_deformed = 'mods/species/vox/icons/body/deformed_body.dmi'
- husk_icon = 'mods/species/vox/icons/body/husk.dmi'
- blood_overlays = 'mods/species/vox/icons/body/blood_overlays.dmi'
- eye_icon = 'mods/species/vox/icons/body/servitor/eyes.dmi'
- base_markings = list(
+ name = "servitor voxform"
+ bodytype_category = BODYTYPE_HUMANOID
+ icon_base = 'mods/species/vox/icons/body/servitor/body.dmi'
+ icon_deformed = 'mods/species/vox/icons/body/deformed_body.dmi'
+ husk_icon = 'mods/species/vox/icons/body/husk.dmi'
+ blood_overlays = 'mods/species/vox/icons/body/blood_overlays.dmi'
+ eye_icon = 'mods/species/vox/icons/body/servitor/eyes.dmi'
+ base_markings = list(
/decl/sprite_accessory/marking/vox/beak/servitor = "#bc7d3e",
/decl/sprite_accessory/marking/vox/scutes/servitor = "#bc7d3e",
/decl/sprite_accessory/marking/vox/crest/servitor = "#bc7d3e",
/decl/sprite_accessory/marking/vox/claws/servitor = "#a0a654"
)
- default_h_style = /decl/sprite_accessory/hair/vox/short/servitor
+ default_h_style = /decl/sprite_accessory/hair/vox/short/servitor
override_limb_types = list(
BP_GROIN = /obj/item/organ/external/groin/vox,
BP_TAIL = /obj/item/organ/external/tail/vox/servitor
)
/decl/bodytype/vox/stanchion
- name = "stanchion voxform"
- blood_overlays = 'mods/species/vox/icons/body/stanchion/blood_overlays.dmi'
- damage_overlays = 'mods/species/vox/icons/body/stanchion/damage_overlays.dmi'
- icon_base = 'mods/species/vox/icons/body/stanchion/body.dmi'
- eye_icon = 'mods/species/vox/icons/body/stanchion/eyes.dmi'
- icon_template = 'mods/species/vox/icons/body/stanchion/template.dmi'
- base_markings = list(
+ name = "stanchion voxform"
+ bodytype_category = BODYTYPE_VOX_LARGE
+ blood_overlays = 'mods/species/vox/icons/body/stanchion/blood_overlays.dmi'
+ damage_overlays = 'mods/species/vox/icons/body/stanchion/damage_overlays.dmi'
+ icon_base = 'mods/species/vox/icons/body/stanchion/body.dmi'
+ eye_icon = 'mods/species/vox/icons/body/stanchion/eyes.dmi'
+ icon_template = 'mods/species/vox/icons/body/stanchion/template.dmi'
+ base_markings = list(
/decl/sprite_accessory/marking/vox/beak/stanchion = "#bc7d3e",
/decl/sprite_accessory/marking/vox/scutes/stanchion = "#bc7d3e",
/decl/sprite_accessory/marking/vox/crest/stanchion = "#bc7d3e",
/decl/sprite_accessory/marking/vox/claws/stanchion = "#a0a654"
)
- default_h_style = /decl/sprite_accessory/hair/vox/short/stanchion
+ default_h_style = /decl/sprite_accessory/hair/vox/short/stanchion
override_limb_types = list(
BP_GROIN = /obj/item/organ/external/groin/vox,
- BP_TAIL = /obj/item/organ/external/tail/vox/stanchion
+ // Commenting this out so that tail validation doesn't try to find a species using this bodytype.
+ //BP_TAIL = /obj/item/organ/external/tail/vox/stanchion
)
- bodytype_category = BODYTYPE_VOX_LARGE
/decl/bodytype/vox/servitor/alchemist
- name = "alchemist voxform"
- icon_base = 'mods/species/vox/icons/body/servitor/body_alchemist.dmi'
- eye_icon = 'mods/species/vox/icons/body/servitor/eyes_alchemist.dmi'
-
-/decl/bodytype/vox/servitor/Initialize()
- if(!equip_adjust)
- equip_adjust = list()
- return ..()
+ name = "alchemist voxform"
+ icon_base = 'mods/species/vox/icons/body/servitor/body_alchemist.dmi'
+ eye_icon = 'mods/species/vox/icons/body/servitor/eyes_alchemist.dmi'
/obj/item/organ/external/tail/vox
- tail = "voxtail"
- tail_icon = 'mods/species/vox/icons/body/soldier/tail.dmi'
+ tail = "voxtail"
+ tail_icon = 'mods/species/vox/icons/body/soldier/tail.dmi'
tail_blend = ICON_MULTIPLY
/obj/item/organ/external/tail/vox/servitor
- tail_icon = 'mods/species/vox/icons/body/servitor/tail.dmi'
+ tail_icon = 'mods/species/vox/icons/body/servitor/tail.dmi'
/obj/item/organ/external/tail/vox/stanchion
- tail_icon = 'mods/species/vox/icons/body/stanchion/tail.dmi'
+ tail_icon = 'mods/species/vox/icons/body/stanchion/tail.dmi'
diff --git a/mods/species/vox/datum/trader.dm b/mods/species/vox/datum/trader.dm
index ac8f83a8405..62ceb08a87e 100644
--- a/mods/species/vox/datum/trader.dm
+++ b/mods/species/vox/datum/trader.dm
@@ -3,42 +3,42 @@
origin = "UNREGISTERED VESSEL"
name_language = /decl/language/vox
compliment_increase = 0
- trade_flags = TRADER_GOODS
- var/hailed_vox = FALSE //Whether we have been hailed by a vox. negatives mean pariah, positives mean regular.
+ trade_flags = TRADER_GOODS | TRADER_BRIBABLE
blacklisted_trade_items = null
- speech = list(TRADER_HAIL_GENERIC = "SKREEE! We will trade good stuff, yes?",
- TRADER_HAIL_DENY = "Trade closed, GO AWAY!",
-
- TRADER_TRADE_COMPLETE = "Yes, kikikikikiki! You will not regret this trade!",
- TRADER_NO_MONEY = "Money? Vox no need money. GOODS! Give it GOODS!",
- TRADER_NOT_ENOUGH = "It wants MORE for that. Give it more.",
-
- TRADER_HOW_MUCH = "You give it something worth VALUE, yes?",
- TRADER_WHAT_WANT = "Vox wants",
-
- TRADER_COMPLEMENT_FAILURE = "No.",
- TRADER_COMPLEMENT_SUCCESS = "Kikikikiki! Trade is better than talk, yes?",
- TRADER_INSULT_GOOD = "Bah! Why does it have to deal with you?",
- TRADER_INSULT_BAD = "All you meats are the same! Fuck off!",
- )
+ speech = list(
+ TRADER_HAIL_GENERIC = "SKREEE! We will trade good stuff, yes?",
+ TRADER_HAIL_DENY = "Trade closed, GO AWAY!",
+ TRADER_TRADE_COMPLETE = "Yes, kikikikikiki! You will not regret this trade!",
+ TRADER_NO_MONEY = "Money? It does not need money. GOODS! Give it GOODS!",
+ TRADER_NOT_ENOUGH = "It wants MORE for that. Give it more.",
+ TRADER_HOW_MUCH = "You give it something worth VALUE, yes?",
+ TRADER_WHAT_WANT = "It wants",
+ TRADER_COMPLIMENT_DENY = "No.",
+ TRADER_COMPLIMENT_ACCEPT = "Kikikikiki! Trade is better than talk, yes?",
+ TRADER_INSULT_GOOD = "Bah! Why does it have to deal with you?",
+ TRADER_INSULT_BAD = "All you meat is the same! Fuck the off!",
+ TRADER_BRIBE_ACCEPT = "Skhhhhhk... fine. " + TRADER_TOKEN_TIME + " minutes, no more!",
+ TRADER_BRIBE_REFUSAL = "No! It is getting impatient with this meat!"
+ )
+ var/hailed_vox = FALSE //Whether we have been hailed by a vox. negatives mean pariah, positives mean regular.
var/list/visited_vox_speech = list(
- TRADER_HAIL_GENERIC = "SKREEEEE! You friend of Vox? You trade with, yes?",
+ TRADER_HAIL_GENERIC = "SKREEEEE! You friend of the Shoal? You trade with, yes?",
+ TRADER_HAIL_SILICON = "YOU KNOW THE SHOAL? Yes is good, yes yes, " + TRADER_TOKEN_MOB + ". Trade GOOD!",
TRADER_HAIL_DENY = "Trade gone now. Goodbye.",
-
TRADER_TRADE_COMPLETE = "Yes... this is a good trade for the Shoal!",
- TRADER_NO_MONEY = "You know as well as it that money is no good.",
- TRADER_NOT_ENOUGH = "Ech, you insult it with such a trade? Respect it, make it equal.",
-
+ TRADER_NO_MONEY = "You know as well as it that money is no good.",
+ TRADER_NOT_ENOUGH = "Ech, you insult it with such a trade? Respect it, make it equal.",
TRADER_HOW_MUCH = "Hmm.... VALUE. Something like that.",
TRADER_WHAT_WANT = "We need",
-
- TRADER_COMPLEMENT_FAILURE = "You know better than that!",
- TRADER_COMPLEMENT_SUCCESS = "You butter it up? Should know better than that.",
+ TRADER_COMPLIMENT_DENY = "You know better than that!",
+ TRADER_COMPLIMENT_ACCEPT = "You butter it up? Should know better than that.",
TRADER_INSULT_GOOD = "Where this come from? Is trade no good?",
- TRADER_INSULT_BAD = "If you say all this at home, you be dead!"
- )
+ TRADER_INSULT_BAD = "If you say all this at home, you be dead!",
+ TRADER_BRIBE_ACCEPT = "It can stay for " + TRADER_TOKEN_TIME + " minutes, for most beloved kin as you.",
+ TRADER_BRIBE_REFUSAL = "Krrkkrhkkhh! You ask too much! It must be moving on."
+ )
possible_wanted_items = list(
/obj/item/ = TRADER_SUBTYPES_ONLY,
/obj/item/stack/material = TRADER_SUBTYPES_ONLY,
@@ -55,17 +55,14 @@
/obj/item/robot_parts/robot_component = TRADER_BLACKLIST
)
- mob_transfer_message = "You are transported to the ORIGIN. When the transportation dizziness wears off, you find you are surrounded by cackling Vox..."
+ mob_transfer_message = "You are transported to " + TRADER_TOKEN_ORIGIN + ". When the transportation dizziness wears off, you find you are surrounded by cackling vox..."
-#define TRADER_HAIL_START "trade_hail_"
/datum/trader/ship/vox/New()
- speech[TRADER_HAIL_START + "silicon"] = "Hello metal thing! You trade metal for things?"
- speech[TRADER_HAIL_START + SPECIES_HUMAN] = "Hello hueman! Kiikikikiki! MOB trade with us, yes? Good!"
-
- visited_vox_speech[TRADER_HAIL_START + "silicon"] = "YOU KNOW VOX? Yes is good, yes yes, MOB. Trade GOOD!"
- visited_vox_speech[TRADER_HAIL_START + SPECIES_HUMAN] = "Friend of Vox is friend of all Vox! MOB you trade now!"
- visited_vox_speech[TRADER_HAIL_START + SPECIES_VOX] = "SKREEEE! May the Shoal make this trade good, MOB!"
-#undef TRADER_HAIL_START
+ speech[TRADER_HAIL_SILICON] = "Hello metal thing! You trade metal for things?"
+ speech[TRADER_HAIL_START + SPECIES_HUMAN] = "Hello hueman! Kiikikikiki! " + TRADER_TOKEN_MOB + " trade with us, yes? Good!"
+ visited_vox_speech[TRADER_HAIL_START + SPECIES_HUMAN] = "Friend of it is friend of all Shoal! " + TRADER_TOKEN_MOB + " you trade now!"
+ visited_vox_speech[TRADER_HAIL_START + SPECIES_VOX] = "SKREEEE! May the Shoal make this trade good, " + TRADER_TOKEN_MOB + "!"
+ ..()
/datum/trader/ship/vox/hail(var/mob/user)
if(ishuman(user))
@@ -87,3 +84,7 @@
. = ..()
if(!hailed_vox)
. *= 2
+
+/datum/trader/ship/clothingshop/New()
+ speech[TRADER_HAIL_START + SPECIES_VOX] = "Well hello, sir! I don't believe we have any clothes that fit you... but you can still look!"
+ ..()
diff --git a/mods/species/vox/gear/gear_head.dm b/mods/species/vox/gear/gear_head.dm
index dfc721177ac..24d6676478f 100644
--- a/mods/species/vox/gear/gear_head.dm
+++ b/mods/species/vox/gear/gear_head.dm
@@ -7,7 +7,6 @@
name = "alien helmet"
icon = 'mods/species/vox/icons/clothing/pressure_helmet.dmi'
desc = "A huge, armoured, pressurized helmet. Looks like an ancient human diving suit."
- light_overlay = "invis_light"
armor = list(
ARMOR_MELEE = ARMOR_MELEE_MAJOR,
ARMOR_BULLET = ARMOR_BALLISTIC_PISTOL,
@@ -29,7 +28,7 @@
color = "#486e6e"
var/lights_color = "#00ffff"
-/obj/item/clothing/head/helmet/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart)
+/obj/item/clothing/head/helmet/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay && lights_color && check_state_in_icon("[overlay.icon_state]-lights", overlay.icon))
var/image/I = emissive_overlay(overlay.icon, "[overlay.icon_state]-lights")
I.color = lights_color
diff --git a/mods/species/vox/gear/gear_suit.dm b/mods/species/vox/gear/gear_suit.dm
index c38932355dd..a02b8554285 100644
--- a/mods/species/vox/gear/gear_suit.dm
+++ b/mods/species/vox/gear/gear_suit.dm
@@ -43,7 +43,7 @@
desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down."
var/lights_color = "#00ffff"
-/obj/item/clothing/suit/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart)
+/obj/item/clothing/suit/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE)
if(overlay && lights_color && check_state_in_icon("[overlay.icon_state]-lights", overlay.icon))
var/image/I = emissive_overlay(overlay.icon, "[overlay.icon_state]-lights")
I.color = lights_color
diff --git a/mods/species/vox/gear/gear_under.dm b/mods/species/vox/gear/gear_under.dm
index 9b8c01a7779..6e7dd0fbd02 100644
--- a/mods/species/vox/gear/gear_under.dm
+++ b/mods/species/vox/gear/gear_under.dm
@@ -1,5 +1,4 @@
/obj/item/clothing/under/vox
- has_sensor = SUIT_NO_SENSORS
bodytype_equip_flags = BODY_FLAG_VOX
/obj/item/clothing/under/vox/vox_casual
diff --git a/mods/species/vox/gear/gun_slugsling.dm b/mods/species/vox/gear/gun_slugsling.dm
index ab78c43ec14..607e56f7b7d 100644
--- a/mods/species/vox/gear/gun_slugsling.dm
+++ b/mods/species/vox/gear/gun_slugsling.dm
@@ -5,7 +5,7 @@
throwforce = 6
icon = 'mods/species/vox/icons/gear/slugegg.dmi'
icon_state = "slugegg"
- material = /decl/material/solid/skin/insect
+ material = /decl/material/solid/organic/skin/insect
var/break_on_impact = 1 //There are two modes to the eggs.
//One breaks the egg on hit,
@@ -22,11 +22,9 @@
/obj/item/slugegg/HasProximity(var/atom/movable/AM)
. = ..()
if(. && isliving(AM))
- if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- if(H.get_bodytype().bodytype_flag & BODY_FLAG_VOX)
- return FALSE
var/mob/living/L = AM
+ if(L.get_bodytype()?.bodytype_flag & BODY_FLAG_VOX)
+ return FALSE
if(L.faction == SPECIES_VOX)
return FALSE
squish()
diff --git a/mods/species/vox/gear/gun_spikethrower.dm b/mods/species/vox/gear/gun_spikethrower.dm
index ddaafe9d62a..f14e2dd18c1 100644
--- a/mods/species/vox/gear/gun_spikethrower.dm
+++ b/mods/species/vox/gear/gun_spikethrower.dm
@@ -59,4 +59,4 @@
icon_state = "quill"
item_state = "quill"
throwforce = 5
- material = /decl/material/solid/leather/chitin
+ material = /decl/material/solid/organic/leather/chitin
diff --git a/mods/species/vox/icons/body/servitor/hair.dmi b/mods/species/vox/icons/body/servitor/hair.dmi
index f4e1011e013..999649b10e1 100644
Binary files a/mods/species/vox/icons/body/servitor/hair.dmi and b/mods/species/vox/icons/body/servitor/hair.dmi differ
diff --git a/mods/species/vox/icons/body/servitor/tail.dmi b/mods/species/vox/icons/body/servitor/tail.dmi
index 98dc812cb50..150e93dcfde 100644
Binary files a/mods/species/vox/icons/body/servitor/tail.dmi and b/mods/species/vox/icons/body/servitor/tail.dmi differ
diff --git a/mods/species/vox/icons/body/soldier/hair.dmi b/mods/species/vox/icons/body/soldier/hair.dmi
index 4316e8e33fb..7149c366b5c 100644
Binary files a/mods/species/vox/icons/body/soldier/hair.dmi and b/mods/species/vox/icons/body/soldier/hair.dmi differ
diff --git a/mods/species/vox/icons/body/soldier/tail.dmi b/mods/species/vox/icons/body/soldier/tail.dmi
index 02899554394..50532450e26 100644
Binary files a/mods/species/vox/icons/body/soldier/tail.dmi and b/mods/species/vox/icons/body/soldier/tail.dmi differ
diff --git a/mods/species/vox/icons/body/stanchion/hair.dmi b/mods/species/vox/icons/body/stanchion/hair.dmi
index d0f4f126680..cdbf92bc78f 100644
Binary files a/mods/species/vox/icons/body/stanchion/hair.dmi and b/mods/species/vox/icons/body/stanchion/hair.dmi differ
diff --git a/mods/species/vox/icons/body/stanchion/tail.dmi b/mods/species/vox/icons/body/stanchion/tail.dmi
index 6484eefea81..59a48d3ed38 100644
Binary files a/mods/species/vox/icons/body/stanchion/tail.dmi and b/mods/species/vox/icons/body/stanchion/tail.dmi differ
diff --git a/mods/species/vox/organs_vox.dm b/mods/species/vox/organs_vox.dm
index 97b020f9985..f3e11f2135d 100644
--- a/mods/species/vox/organs_vox.dm
+++ b/mods/species/vox/organs_vox.dm
@@ -26,53 +26,55 @@
name = "gizzard"
color = "#0033cc"
var/static/list/gains_nutriment_from_inedible_reagents = list(
- /decl/material/solid/wood = 3,
- /decl/material/liquid/cleaner = 1,
- /decl/material/liquid/foaming_agent = 1,
- /decl/material/liquid/surfactant = 1,
- /decl/material/liquid/paint = 1
+ /decl/material/solid/organic/wood = 3,
+ /decl/material/liquid/cleaner = 1,
+ /decl/material/liquid/foaming_agent = 1,
+ /decl/material/liquid/surfactant = 1,
+ /decl/material/liquid/paint = 1
)
var/static/list/can_digest_matter = list(
- /decl/material/solid/wood = TRUE,
- /decl/material/solid/wood/mahogany = TRUE,
- /decl/material/solid/wood/maple = TRUE,
- /decl/material/solid/wood/ebony = TRUE,
- /decl/material/solid/wood/walnut = TRUE,
- /decl/material/solid/leather = TRUE,
- /decl/material/solid/plastic = TRUE,
- /decl/material/solid/cardboard = TRUE,
- /decl/material/solid/cloth = TRUE,
- /decl/material/solid/slag = TRUE,
- /decl/material/solid/sodiumchloride = TRUE
+ /decl/material/solid/organic/wood = TRUE,
+ /decl/material/solid/organic/wood/mahogany = TRUE,
+ /decl/material/solid/organic/wood/maple = TRUE,
+ /decl/material/solid/organic/wood/ebony = TRUE,
+ /decl/material/solid/organic/wood/walnut = TRUE,
+ /decl/material/solid/organic/leather = TRUE,
+ /decl/material/solid/organic/plastic = TRUE,
+ /decl/material/solid/organic/cardboard = TRUE,
+ /decl/material/solid/organic/paper = TRUE,
+ /decl/material/solid/organic/cloth = TRUE,
+ /decl/material/solid/slag = TRUE,
+ /decl/material/solid/sodiumchloride = TRUE
)
var/static/list/can_process_matter = list(
- /decl/material/solid/glass = TRUE,
- /decl/material/solid/gemstone/diamond = TRUE,
- /decl/material/solid/stone/sandstone = TRUE,
- /decl/material/solid/stone/marble = TRUE,
- /decl/material/solid/metal/steel = TRUE,
- /decl/material/solid/metal/gold = TRUE,
- /decl/material/solid/metal/silver = TRUE,
- /decl/material/solid/metal/uranium = TRUE,
- /decl/material/solid/metal/iron = TRUE,
- /decl/material/solid/metal/platinum = TRUE,
- /decl/material/solid/metal/bronze = TRUE,
- /decl/material/solid/metal/titanium = TRUE,
- /decl/material/solid/metal/osmium = TRUE,
- /decl/material/solid/metal/copper = TRUE,
- /decl/material/solid/metal/aluminium = TRUE,
- /decl/material/solid/sand = TRUE,
- /decl/material/solid/graphite = TRUE,
- /decl/material/solid/pitchblende = TRUE,
- /decl/material/solid/hematite = TRUE,
- /decl/material/solid/quartz = TRUE,
- /decl/material/solid/pyrite = TRUE,
- /decl/material/solid/spodumene = TRUE,
- /decl/material/solid/cinnabar = TRUE,
- /decl/material/solid/phosphorite = TRUE,
- /decl/material/solid/potash = TRUE,
- /decl/material/solid/bauxite = TRUE,
- /decl/material/solid/rutile = TRUE
+ /decl/material/solid/glass = TRUE,
+ /decl/material/solid/gemstone/diamond = TRUE,
+ /decl/material/solid/stone/sandstone = TRUE,
+ /decl/material/solid/stone/marble = TRUE,
+ /decl/material/solid/metal/steel = TRUE,
+ /decl/material/solid/metal/gold = TRUE,
+ /decl/material/solid/metal/silver = TRUE,
+ /decl/material/solid/metal/uranium = TRUE,
+ /decl/material/solid/metal/iron = TRUE,
+ /decl/material/solid/metal/platinum = TRUE,
+ /decl/material/solid/metal/bronze = TRUE,
+ /decl/material/solid/metal/titanium = TRUE,
+ /decl/material/solid/metal/osmium = TRUE,
+ /decl/material/solid/metal/copper = TRUE,
+ /decl/material/solid/metal/aluminium = TRUE,
+ /decl/material/solid/sand = TRUE,
+ /decl/material/solid/clay = TRUE,
+ /decl/material/solid/graphite = TRUE,
+ /decl/material/solid/pitchblende = TRUE,
+ /decl/material/solid/hematite = TRUE,
+ /decl/material/solid/quartz = TRUE,
+ /decl/material/solid/pyrite = TRUE,
+ /decl/material/solid/spodumene = TRUE,
+ /decl/material/solid/cinnabar = TRUE,
+ /decl/material/solid/phosphorite = TRUE,
+ /decl/material/solid/potash = TRUE,
+ /decl/material/solid/bauxite = TRUE,
+ /decl/material/solid/rutile = TRUE
)
var/list/stored_matter = list()
@@ -153,10 +155,10 @@
icon_state = "cortical-stack"
organ_tag = BP_STACK
organ_properties = ORGAN_PROP_PROSTHETIC
- origin_tech = @"{'biotech':4,'materials':4,'magnets':2,'programming':3}"
+ origin_tech = @'{"biotech":4,"materials":4,"magnets":2,"programming":3}'
relative_size = 10
- var/ownerckey
+ var/stored_ckey
var/default_language
var/list/languages = list()
var/datum/mind/backup
@@ -172,7 +174,7 @@
var/user_vox = isspecies(user, SPECIES_VOX)
if (istype(backup))
- var/owner_viable = find_dead_player(ownerckey, TRUE)
+ var/owner_viable = find_dead_player(stored_ckey, TRUE)
if (user_vox)
to_chat(user, SPAN_NOTICE("The integrity light on [src] blinks [owner_viable ? "rapidly. It can be implanted." : "slowly. It is dormant."]"))
else
@@ -192,7 +194,7 @@
backup = owner.mind
default_language = owner.default_language
if(owner.ckey)
- ownerckey = owner.ckey
+ stored_ckey = owner.ckey
/obj/item/organ/internal/voxstack/proc/backup_inviable()
return (!istype(backup) || backup == owner.mind || (backup.current && backup.current.stat != DEAD))
@@ -210,7 +212,7 @@
set waitfor = FALSE
if(C && !backup_inviable())
prompting = TRUE
- var/response = alert(find_dead_player(ownerckey, 1), "Your neural backup has been placed into a new body. Do you wish to return to life as the mind of [backup.name]?", "Resleeving", "Yes", "No")
+ var/response = alert(find_dead_player(stored_ckey, 1), "Your neural backup has been placed into a new body. Do you wish to return to life as the mind of [backup.name]?", "Resleeving", "Yes", "No")
prompting = FALSE
if(src && response == "Yes" && owner == C)
overwrite()
diff --git a/mods/valsalia/icons/posters.dmi b/mods/valsalia/icons/posters.dmi
new file mode 100644
index 00000000000..cff06cdbabe
Binary files /dev/null and b/mods/valsalia/icons/posters.dmi differ
diff --git a/nano/images/ministation/ministation-1.png b/nano/images/ministation/ministation-1.png
index d6e7e854ae2..70fcdc99765 100644
Binary files a/nano/images/ministation/ministation-1.png and b/nano/images/ministation/ministation-1.png differ
diff --git a/nano/images/ministation/ministation-2.png b/nano/images/ministation/ministation-2.png
new file mode 100644
index 00000000000..9e33b0d8c85
Binary files /dev/null and b/nano/images/ministation/ministation-2.png differ
diff --git a/nano/images/ministation/ministation-3.png b/nano/images/ministation/ministation-3.png
new file mode 100644
index 00000000000..a2d90b864f0
Binary files /dev/null and b/nano/images/ministation/ministation-3.png differ
diff --git a/nano/images/ministation/ministation-4.png b/nano/images/ministation/ministation-4.png
new file mode 100644
index 00000000000..be5b779985e
Binary files /dev/null and b/nano/images/ministation/ministation-4.png differ
diff --git a/nano/templates/material_processing_extractor.tmpl b/nano/templates/material_processing_extractor.tmpl
new file mode 100644
index 00000000000..1cec6807f7f
--- /dev/null
+++ b/nano/templates/material_processing_extractor.tmpl
@@ -0,0 +1,99 @@
+
+
+
+ Power
+
+
+ {{if data.on}}
+ {{:helper.link("On", null, { 'toggle_power' : 1 }, null, 'selected')}}
+ {{else}}
+ {{:helper.link("Off", null, { 'toggle_power' : 1 }, null, null)}}
+ {{/if}}
+
+
+ Input
+
+
+ {{if data.can_configure == 1}}
+ {{:helper.link("Disable", null, { 'set_input' : 0 }, null, data.input_value == 0 ? 'selected' : null)}}
+ {{:helper.link("North", null, { 'set_input' : 1 }, null, data.input_value == 1 ? 'selected' : null)}}
+ {{:helper.link("South", null, { 'set_input' : 2 }, null, data.input_value == 2 ? 'selected' : null)}}
+ {{:helper.link("East", null, { 'set_input' : 4 }, null, data.input_value == 4 ? 'selected' : null)}}
+ {{:helper.link("West", null, { 'set_input' : 8 }, null, data.input_value == 8 ? 'selected' : null)}}
+ {{else}}
+ {{:data.input_label}}
+ {{/if}}
+
+
+ Output
+
+
+ {{if data.can_configure == 1}}
+ {{:helper.link("Disable", null, { 'set_output' : 0 }, null, data.output_value == 0 ? 'selected' : null)}}
+ {{:helper.link("North", null, { 'set_output' : 1 }, null, data.output_value == 1 ? 'selected' : null)}}
+ {{:helper.link("South", null, { 'set_output' : 2 }, null, data.output_value == 2 ? 'selected' : null)}}
+ {{:helper.link("East", null, { 'set_output' : 4 }, null, data.output_value == 4 ? 'selected' : null)}}
+ {{:helper.link("West", null, { 'set_output' : 8 }, null, data.output_value == 8 ? 'selected' : null)}}
+ {{else}}
+ {{:data.output_label}}
+ {{/if}}
+
+
+ {{if data.can_configure == 1}}
+ {{:helper.link("Hide", null, { 'toggle_configuration' : 1 }, null, null)}}
+ {{else}}
+ {{:helper.link("Configure", null, { 'toggle_configuration' : 1 }, null, null)}}
+ {{/if}}
+
+
+
+ {{if data.full}}
+
Internal liquid tank is full, please empty to resume processing
+ {{/if}}
+
+ {{for data.reagents}}
+
+
+ {{:value.label}}
+
+
+ {{if value.liquid}}
+ {{:helper.link("Dispense", null, { 'dispense' : value.index}, null, null)}}
+ {{else}}
+ {{:helper.link("Process", null, { 'dispense' : value.index}, null, null)}}
+ {{/if}}
+
+
+ {{empty}}
+ No materials loaded
+ {{/for}}
+
+
+
+ Dispensing:
+
+
+ {{:helper.link(data.dispense_amount + "U", null, { 'change_amount' : 1}, null, null)}}
+
+
+
+
+ Output Container:
+
+
+ {{if data.container}}
+ {{:helper.link(data.container, null, { 'eject' : 1}, null, null)}}
+ {{else}}
+ No container loaded
+ {{/if}}
+
+
+
+
+ Gas pressure:
+
+
+ {{:data.gas_pressure}} kPa
+
+
+
diff --git a/nebula.dme b/nebula.dme
index 52df73b1fcd..06839eed2c3 100644
--- a/nebula.dme
+++ b/nebula.dme
@@ -17,6 +17,7 @@
#include "code\world.dm"
#include "code\__datastructures\priority_queue.dm"
#include "code\__datastructures\stack.dm"
+#include "code\__defines\_byond_version_compat.dm"
#include "code\__defines\_compile_helpers.dm"
#include "code\__defines\_compile_options.dm"
#include "code\__defines\_planes+layers.dm"
@@ -35,7 +36,9 @@
#include "code\__defines\client.dm"
#include "code\__defines\colors.dm"
#include "code\__defines\computers.dm"
+#include "code\__defines\credits.dm"
#include "code\__defines\culture.dm"
+#include "code\__defines\damage.dm"
#include "code\__defines\damage_organs.dm"
#include "code\__defines\definition_helpers.dm"
#include "code\__defines\deity.dm"
@@ -43,6 +46,7 @@
#include "code\__defines\dna.dm"
#include "code\__defines\dview.dm"
#include "code\__defines\feedback.dm"
+#include "code\__defines\fires.dm"
#include "code\__defines\flags.dm"
#include "code\__defines\fluids.dm"
#include "code\__defines\gamemode.dm"
@@ -64,6 +68,7 @@
#include "code\__defines\math_physics.dm"
#include "code\__defines\maths.dm"
#include "code\__defines\MC.dm"
+#include "code\__defines\mech.dm"
#include "code\__defines\misc.dm"
#include "code\__defines\mob_status.dm"
#include "code\__defines\mobs.dm"
@@ -76,6 +81,7 @@
#include "code\__defines\proc_presets.dm"
#include "code\__defines\qdel.dm"
#include "code\__defines\radio.dm"
+#include "code\__defines\reactions.dm"
#include "code\__defines\research.dm"
#include "code\__defines\ruin_tags.dm"
#include "code\__defines\shields.dm"
@@ -83,9 +89,11 @@
#include "code\__defines\skills.dm"
#include "code\__defines\sound.dm"
#include "code\__defines\spaceman_dmm.dm"
+#include "code\__defines\spawn.dm"
#include "code\__defines\species.dm"
#include "code\__defines\status.dm"
#include "code\__defines\stress.dm"
+#include "code\__defines\structures.dm"
#include "code\__defines\subsystem-priority.dm"
#include "code\__defines\subsystems.dm"
#include "code\__defines\targeting.dm"
@@ -163,16 +171,13 @@
#include "code\_onclick\other_mobs.dm"
#include "code\_onclick\rig.dm"
#include "code\_onclick\hud\_defines.dm"
-#include "code\_onclick\hud\ability_screen_objects.dm"
#include "code\_onclick\hud\action.dm"
#include "code\_onclick\hud\ai.dm"
#include "code\_onclick\hud\ai_hud.dm"
-#include "code\_onclick\hud\ai_screen_objects.dm"
#include "code\_onclick\hud\animal.dm"
#include "code\_onclick\hud\deity.dm"
#include "code\_onclick\hud\fullscreen.dm"
#include "code\_onclick\hud\global_hud.dm"
-#include "code\_onclick\hud\gun_mode.dm"
#include "code\_onclick\hud\hud.dm"
#include "code\_onclick\hud\human.dm"
#include "code\_onclick\hud\other_mobs.dm"
@@ -180,12 +185,55 @@
#include "code\_onclick\hud\radial.dm"
#include "code\_onclick\hud\radial_persistent.dm"
#include "code\_onclick\hud\robot.dm"
-#include "code\_onclick\hud\screen_objects.dm"
#include "code\_onclick\hud\skybox.dm"
+#include "code\_onclick\hud\screen\_screen.dm"
+#include "code\_onclick\hud\screen\screen_abilities.dm"
+#include "code\_onclick\hud\screen\screen_action_button.dm"
+#include "code\_onclick\hud\screen\screen_ai_button.dm"
+#include "code\_onclick\hud\screen\screen_attack_selector.dm"
+#include "code\_onclick\hud\screen\screen_cataloguer.dm"
+#include "code\_onclick\hud\screen\screen_cinematic.dm"
+#include "code\_onclick\hud\screen\screen_click_catcher.dm"
+#include "code\_onclick\hud\screen\screen_constructs.dm"
+#include "code\_onclick\hud\screen\screen_credits.dm"
+#include "code\_onclick\hud\screen\screen_drop.dm"
+#include "code\_onclick\hud\screen\screen_equip.dm"
+#include "code\_onclick\hud\screen\screen_exosuit.dm"
+#include "code\_onclick\hud\screen\screen_fullscreen.dm"
+#include "code\_onclick\hud\screen\screen_global_hud.dm"
+#include "code\_onclick\hud\screen\screen_gun.dm"
+#include "code\_onclick\hud\screen\screen_holomap.dm"
+#include "code\_onclick\hud\screen\screen_intent.dm"
+#include "code\_onclick\hud\screen\screen_internal.dm"
+#include "code\_onclick\hud\screen\screen_inventory.dm"
+#include "code\_onclick\hud\screen\screen_lighting.dm"
+#include "code\_onclick\hud\screen\screen_maneuver.dm"
+#include "code\_onclick\hud\screen\screen_module.dm"
+#include "code\_onclick\hud\screen\screen_movement.dm"
+#include "code\_onclick\hud\screen\screen_needs.dm"
+#include "code\_onclick\hud\screen\screen_pai.dm"
+#include "code\_onclick\hud\screen\screen_radial.dm"
+#include "code\_onclick\hud\screen\screen_resist.dm"
+#include "code\_onclick\hud\screen\screen_robot_drop_grab.dm"
+#include "code\_onclick\hud\screen\screen_robot_intent.dm"
+#include "code\_onclick\hud\screen\screen_robot_inventory.dm"
+#include "code\_onclick\hud\screen\screen_robot_modules.dm"
+#include "code\_onclick\hud\screen\screen_robot_panel.dm"
+#include "code\_onclick\hud\screen\screen_robot_radio.dm"
+#include "code\_onclick\hud\screen\screen_robot_store.dm"
+#include "code\_onclick\hud\screen\screen_robot_warnings.dm"
+#include "code\_onclick\hud\screen\screen_setup.dm"
+#include "code\_onclick\hud\screen\screen_stamina.dm"
+#include "code\_onclick\hud\screen\screen_storage.dm"
+#include "code\_onclick\hud\screen\screen_swaphands.dm"
+#include "code\_onclick\hud\screen\screen_throw.dm"
+#include "code\_onclick\hud\screen\screen_toggle.dm"
+#include "code\_onclick\hud\screen\screen_up_hint.dm"
+#include "code\_onclick\hud\screen\screen_warnings.dm"
+#include "code\_onclick\hud\screen\screen_zone_selector.dm"
#include "code\controllers\admin.dm"
#include "code\controllers\autotransfer.dm"
#include "code\controllers\communications.dm"
-#include "code\controllers\configuration.dm"
#include "code\controllers\controller.dm"
#include "code\controllers\failsafe.dm"
#include "code\controllers\hooks-defs.dm"
@@ -208,6 +256,7 @@
#include "code\controllers\subsystems\ao.dm"
#include "code\controllers\subsystems\atoms.dm"
#include "code\controllers\subsystems\circuit_component.dm"
+#include "code\controllers\subsystems\configuration.dm"
#include "code\controllers\subsystems\daycycle.dm"
#include "code\controllers\subsystems\disposals.dm"
#include "code\controllers\subsystems\evac.dm"
@@ -317,13 +366,34 @@
#include "code\datums\communication\~defines.dm"
#include "code\datums\composite_sounds\_composite_sound.dm"
#include "code\datums\composite_sounds\machinery_sounds.dm"
+#include "code\datums\config\_config.dm"
+#include "code\datums\config\_config_categories.dm"
+#include "code\datums\config\config_enum.dm"
+#include "code\datums\config\config_list.dm"
+#include "code\datums\config\config_num.dm"
+#include "code\datums\config\config_num_client.dm"
+#include "code\datums\config\config_text.dm"
+#include "code\datums\config\config_toggle.dm"
+#include "code\datums\config\config_toggle_on.dm"
+#include "code\datums\config\config_types\config_admin.dm"
+#include "code\datums\config\config_types\config_client.dm"
+#include "code\datums\config\config_types\config_debug.dm"
+#include "code\datums\config\config_types\config_events.dm"
+#include "code\datums\config\config_types\config_game_option.dm"
+#include "code\datums\config\config_types\config_game_world.dm"
+#include "code\datums\config\config_types\config_health.dm"
+#include "code\datums\config\config_types\config_logging.dm"
+#include "code\datums\config\config_types\config_mode.dm"
+#include "code\datums\config\config_types\config_protected.dm"
+#include "code\datums\config\config_types\config_resources.dm"
+#include "code\datums\config\config_types\config_server.dm"
+#include "code\datums\config\config_types\config_voting.dm"
#include "code\datums\extensions\_defines.dm"
#include "code\datums\extensions\access_provider.dm"
#include "code\datums\extensions\deity_be_near.dm"
#include "code\datums\extensions\event_registration.dm"
#include "code\datums\extensions\extensions.dm"
#include "code\datums\extensions\fake_data.dm"
-#include "code\datums\extensions\hattable.dm"
#include "code\datums\extensions\interactive.dm"
#include "code\datums\extensions\label.dm"
#include "code\datums\extensions\local_network.dm"
@@ -343,6 +413,10 @@
#include "code\datums\extensions\assembly\assembly_damage.dm"
#include "code\datums\extensions\assembly\assembly_interaction.dm"
#include "code\datums\extensions\assembly\assembly_power.dm"
+#include "code\datums\extensions\cell\cell.dm"
+#include "code\datums\extensions\cell\cell_panel.dm"
+#include "code\datums\extensions\cell\cell_secured.dm"
+#include "code\datums\extensions\cell\cell_unremovable.dm"
#include "code\datums\extensions\eye\_eye.dm"
#include "code\datums\extensions\eye\blueprints.dm"
#include "code\datums\extensions\eye\freelook.dm"
@@ -815,7 +889,6 @@
#include "code\game\machinery\_machines_base\stock_parts\radio\stock_parts_radio.dm"
#include "code\game\machinery\_machines_base\stock_parts\radio\transmitter.dm"
#include "code\game\machinery\atmoalter\_atmos_connection.dm"
-#include "code\game\machinery\atmoalter\area_atmos_computer.dm"
#include "code\game\machinery\atmoalter\canister.dm"
#include "code\game\machinery\atmoalter\meter.dm"
#include "code\game\machinery\atmoalter\portable_atmospherics.dm"
@@ -829,9 +902,10 @@
#include "code\game\machinery\computer\ai_core.dm"
#include "code\game\machinery\computer\arcade.dm"
#include "code\game\machinery\computer\arcade_orion.dm"
+#include "code\game\machinery\computer\area_atmos.dm"
#include "code\game\machinery\computer\atmos_alert.dm"
-#include "code\game\machinery\computer\atmos_control.dm"
#include "code\game\machinery\computer\buildandrepair.dm"
+#include "code\game\machinery\computer\central_atmos.dm"
#include "code\game\machinery\computer\computer.dm"
#include "code\game\machinery\computer\guestpass.dm"
#include "code\game\machinery\computer\law.dm"
@@ -903,7 +977,10 @@
#include "code\game\objects\item_materials.dm"
#include "code\game\objects\item_mob_overlay.dm"
#include "code\game\objects\munition.dm"
+#include "code\game\objects\obj_edibility.dm"
#include "code\game\objects\objs.dm"
+#include "code\game\objects\objs_damage.dm"
+#include "code\game\objects\objs_interactions.dm"
#include "code\game\objects\topic.dm"
#include "code\game\objects\auras\aura.dm"
#include "code\game\objects\auras\blueforge_aura.dm"
@@ -916,6 +993,7 @@
#include "code\game\objects\compass\compass_holder.dm"
#include "code\game\objects\compass\compass_overmap.dm"
#include "code\game\objects\compass\compass_waypoint.dm"
+#include "code\game\objects\effects\_effect.dm"
#include "code\game\objects\effects\bump_teleporter.dm"
#include "code\game\objects\effects\cig_smoke.dm"
#include "code\game\objects\effects\effect_system.dm"
@@ -942,7 +1020,6 @@
#include "code\game\objects\effects\chem\foam.dm"
#include "code\game\objects\effects\chem\water.dm"
#include "code\game\objects\effects\decals\cleanable.dm"
-#include "code\game\objects\effects\decals\contraband.dm"
#include "code\game\objects\effects\decals\crayon.dm"
#include "code\game\objects\effects\decals\decal.dm"
#include "code\game\objects\effects\decals\misc.dm"
@@ -974,6 +1051,7 @@
#include "code\game\objects\items\glassjar.dm"
#include "code\game\objects\items\holosign_creator.dm"
#include "code\game\objects\items\instruments.dm"
+#include "code\game\objects\items\item_edibility.dm"
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\paper_fortune_teller.dm"
@@ -989,12 +1067,22 @@
#include "code\game\objects\items\trash.dm"
#include "code\game\objects\items\umbrella.dm"
#include "code\game\objects\items\books\_book.dm"
-#include "code\game\objects\items\books\skill_book.dm"
+#include "code\game\objects\items\books\fluff\_fluff.dm"
+#include "code\game\objects\items\books\fluff\science.dm"
#include "code\game\objects\items\books\manuals\_manual.dm"
#include "code\game\objects\items\books\manuals\engineering.dm"
#include "code\game\objects\items\books\manuals\manuals.dm"
#include "code\game\objects\items\books\manuals\medical.dm"
#include "code\game\objects\items\books\manuals\science.dm"
+#include "code\game\objects\items\books\skill\_skill.dm"
+#include "code\game\objects\items\books\skill\_skill_custom.dm"
+#include "code\game\objects\items\books\skill\engineering.dm"
+#include "code\game\objects\items\books\skill\general.dm"
+#include "code\game\objects\items\books\skill\medical.dm"
+#include "code\game\objects\items\books\skill\organizational.dm"
+#include "code\game\objects\items\books\skill\research.dm"
+#include "code\game\objects\items\books\skill\security.dm"
+#include "code\game\objects\items\books\skill\service.dm"
#include "code\game\objects\items\devices\aicard.dm"
#include "code\game\objects\items\devices\auto_cpr.dm"
#include "code\game\objects\items\devices\binoculars.dm"
@@ -1003,7 +1091,6 @@
#include "code\game\objects\items\devices\chameleonproj.dm"
#include "code\game\objects\items\devices\dociler.dm"
#include "code\game\objects\items\devices\flash.dm"
-#include "code\game\objects\items\devices\flashlight.dm"
#include "code\game\objects\items\devices\geiger.dm"
#include "code\game\objects\items\devices\gps.dm"
#include "code\game\objects\items\devices\hacktool.dm"
@@ -1052,6 +1139,16 @@
#include "code\game\objects\items\devices\scanners\price.dm"
#include "code\game\objects\items\devices\scanners\reagents.dm"
#include "code\game\objects\items\devices\scanners\xenobio.dm"
+#include "code\game\objects\items\flashlights\_flashlight.dm"
+#include "code\game\objects\items\flashlights\flare.dm"
+#include "code\game\objects\items\flashlights\floodlamp.dm"
+#include "code\game\objects\items\flashlights\glowstick.dm"
+#include "code\game\objects\items\flashlights\lamp.dm"
+#include "code\game\objects\items\flashlights\lavalamp.dm"
+#include "code\game\objects\items\flashlights\misc.dm"
+#include "code\game\objects\items\flashlights\party.dm"
+#include "code\game\objects\items\flashlights\penlight.dm"
+#include "code\game\objects\items\flashlights\slime.dm"
#include "code\game\objects\items\robot\robot_frame.dm"
#include "code\game\objects\items\robot\robot_items.dm"
#include "code\game\objects\items\robot\robot_parts.dm"
@@ -1066,7 +1163,7 @@
#include "code\game\objects\items\tools\power_tools.dm"
#include "code\game\objects\items\weapons\AI_modules.dm"
#include "code\game\objects\items\weapons\autopsy.dm"
-#include "code\game\objects\items\weapons\beachball.dm"
+#include "code\game\objects\items\weapons\balls.dm"
#include "code\game\objects\items\weapons\cane.dm"
#include "code\game\objects\items\weapons\cards_ids.dm"
#include "code\game\objects\items\weapons\cards_ids_syndicate.dm"
@@ -1369,6 +1466,7 @@
#include "code\game\objects\structures\signs\warning_signs.dm"
#include "code\game\objects\structures\stool_bed_chair_nest_sofa\bed.dm"
#include "code\game\objects\structures\stool_bed_chair_nest_sofa\chairs.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest_sofa\pew.dm"
#include "code\game\objects\structures\stool_bed_chair_nest_sofa\sofa.dm"
#include "code\game\objects\structures\stool_bed_chair_nest_sofa\stools.dm"
#include "code\game\objects\structures\stool_bed_chair_nest_sofa\wheelchair.dm"
@@ -1390,12 +1488,12 @@
#include "code\game\turfs\exterior\exterior_lava.dm"
#include "code\game\turfs\exterior\exterior_mud.dm"
#include "code\game\turfs\exterior\exterior_ocean.dm"
+#include "code\game\turfs\exterior\exterior_rock.dm"
#include "code\game\turfs\exterior\exterior_sand.dm"
#include "code\game\turfs\exterior\exterior_seafloor.dm"
#include "code\game\turfs\exterior\exterior_shrouded.dm"
#include "code\game\turfs\exterior\exterior_sky.dm"
#include "code\game\turfs\exterior\exterior_tar.dm"
-#include "code\game\turfs\exterior\exterior_volcanic.dm"
#include "code\game\turfs\exterior\exterior_wall.dm"
#include "code\game\turfs\exterior\exterior_wall_subtypes.dm"
#include "code\game\turfs\exterior\exterior_wall_xenoarch.dm"
@@ -1594,6 +1692,7 @@
#include "code\modules\atmospherics\components\unary\vent_scrubber.dm"
#include "code\modules\augment\active.dm"
#include "code\modules\augment\augment.dm"
+#include "code\modules\augment\helping_hands.dm"
#include "code\modules\augment\simple.dm"
#include "code\modules\augment\active\armblades.dm"
#include "code\modules\augment\active\circuit.dm"
@@ -1615,6 +1714,8 @@
#include "code\modules\awaymissions\pamphlet.dm"
#include "code\modules\awaymissions\trigger.dm"
#include "code\modules\blob\blob.dm"
+#include "code\modules\brain_interface\_brain_interface.dm"
+#include "code\modules\brain_interface\interface_radio.dm"
#include "code\modules\butchery\butchery.dm"
#include "code\modules\butchery\remains.dm"
#include "code\modules\chat_filter\_chat_filter.dm"
@@ -1806,6 +1907,7 @@
#include "code\modules\clothing\under\accessories\stethoscope.dm"
#include "code\modules\clothing\under\accessories\storage.dm"
#include "code\modules\clothing\under\accessories\ties.dm"
+#include "code\modules\clothing\under\accessories\vitals_sensor.dm"
#include "code\modules\clothing\under\jobs\civilian.dm"
#include "code\modules\clothing\under\jobs\engineering.dm"
#include "code\modules\clothing\under\jobs\medsci.dm"
@@ -1818,6 +1920,7 @@
#include "code\modules\codex\codex_mob.dm"
#include "code\modules\codex\codex_scannable.dm"
#include "code\modules\codex\categories\_category.dm"
+#include "code\modules\codex\categories\_materials.dm"
#include "code\modules\codex\categories\category_categories.dm"
#include "code\modules\codex\categories\category_cocktails.dm"
#include "code\modules\codex\categories\category_cultures.dm"
@@ -1840,6 +1943,7 @@
#include "code\modules\codex\entries\clothing.dm"
#include "code\modules\codex\entries\codex.dm"
#include "code\modules\codex\entries\engineering.dm"
+#include "code\modules\codex\entries\guides.dm"
#include "code\modules\codex\entries\guns.dm"
#include "code\modules\codex\entries\jukebox.dm"
#include "code\modules\codex\entries\machinery.dm"
@@ -2047,7 +2151,6 @@
#include "code\modules\fabrication\designs\textile\protective.dm"
#include "code\modules\fabrication\designs\textile\space.dm"
#include "code\modules\fabrication\designs\textile\storage.dm"
-#include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\recipes_microwave.dm"
#include "code\modules\games\boardgame.dm"
@@ -2070,6 +2173,15 @@
#include "code\modules\goals\definitions\personal_achievement.dm"
#include "code\modules\goals\definitions\personal_achievement_movement.dm"
#include "code\modules\goals\definitions\personal_achievement_specific_object.dm"
+#include "code\modules\hallucinations\_hallucination.dm"
+#include "code\modules\hallucinations\hallucination_fakeattack.dm"
+#include "code\modules\hallucinations\hallucination_gunfire.dm"
+#include "code\modules\hallucinations\hallucination_mirage.dm"
+#include "code\modules\hallucinations\hallucination_skitters.dm"
+#include "code\modules\hallucinations\hallucination_sound.dm"
+#include "code\modules\hallucinations\hallucination_spiderbabies.dm"
+#include "code\modules\hallucinations\hallucination_talking.dm"
+#include "code\modules\hallucinations\hallucination_telepathy.dm"
#include "code\modules\holidays\_holiday.dm"
#include "code\modules\holidays\holiday_hook.dm"
#include "code\modules\holidays\holiday_name.dm"
@@ -2272,7 +2384,6 @@
#include "code\modules\mechs\equipment\medical.dm"
#include "code\modules\mechs\equipment\utility.dm"
#include "code\modules\mechs\interface\_interface.dm"
-#include "code\modules\mechs\interface\screen_objects.dm"
#include "code\modules\mechs\premade\_premade.dm"
#include "code\modules\mechs\premade\combat.dm"
#include "code\modules\mechs\premade\exploration.dm"
@@ -2307,6 +2418,7 @@
#include "code\modules\mob\logout.dm"
#include "code\modules\mob\mob.dm"
#include "code\modules\mob\mob_defines.dm"
+#include "code\modules\mob\mob_eating.dm"
#include "code\modules\mob\mob_grabs.dm"
#include "code\modules\mob\mob_helpers.dm"
#include "code\modules\mob\mob_layering.dm"
@@ -2344,12 +2456,15 @@
#include "code\modules\mob\living\inventory.dm"
#include "code\modules\mob\living\life.dm"
#include "code\modules\mob\living\living.dm"
+#include "code\modules\mob\living\living_appearance.dm"
#include "code\modules\mob\living\living_attackhand.dm"
#include "code\modules\mob\living\living_bodytemp.dm"
#include "code\modules\mob\living\living_breath.dm"
#include "code\modules\mob\living\living_defense.dm"
#include "code\modules\mob\living\living_defines.dm"
+#include "code\modules\mob\living\living_dreams.dm"
#include "code\modules\mob\living\living_grabs.dm"
+#include "code\modules\mob\living\living_hallucinations.dm"
#include "code\modules\mob\living\living_maneuvers.dm"
#include "code\modules\mob\living\living_organs.dm"
#include "code\modules\mob\living\living_powers.dm"
@@ -2369,18 +2484,20 @@
#include "code\modules\mob\living\bot\mulebot.dm"
#include "code\modules\mob\living\bot\remotebot.dm"
#include "code\modules\mob\living\bot\secbot.dm"
+#include "code\modules\mob\living\brain\brain.dm"
+#include "code\modules\mob\living\brain\death.dm"
+#include "code\modules\mob\living\brain\say.dm"
#include "code\modules\mob\living\carbon\breathe.dm"
#include "code\modules\mob\living\carbon\carbon.dm"
#include "code\modules\mob\living\carbon\carbon_defense.dm"
#include "code\modules\mob\living\carbon\carbon_defines.dm"
+#include "code\modules\mob\living\carbon\carbon_eating.dm"
#include "code\modules\mob\living\carbon\carbon_grabs.dm"
#include "code\modules\mob\living\carbon\carbon_organs.dm"
#include "code\modules\mob\living\carbon\carbon_powers.dm"
#include "code\modules\mob\living\carbon\damage_procs.dm"
#include "code\modules\mob\living\carbon\give.dm"
-#include "code\modules\mob\living\carbon\hallucinations.dm"
#include "code\modules\mob\living\carbon\internals.dm"
-#include "code\modules\mob\living\carbon\life.dm"
#include "code\modules\mob\living\carbon\resist.dm"
#include "code\modules\mob\living\carbon\taste.dm"
#include "code\modules\mob\living\carbon\alien\alien.dm"
@@ -2389,17 +2506,10 @@
#include "code\modules\mob\living\carbon\alien\death.dm"
#include "code\modules\mob\living\carbon\alien\life.dm"
#include "code\modules\mob\living\carbon\alien\say.dm"
-#include "code\modules\mob\living\carbon\brain\brain.dm"
-#include "code\modules\mob\living\carbon\brain\death.dm"
-#include "code\modules\mob\living\carbon\brain\life.dm"
-#include "code\modules\mob\living\carbon\brain\login.dm"
-#include "code\modules\mob\living\carbon\brain\MMI.dm"
-#include "code\modules\mob\living\carbon\brain\robot.dm"
-#include "code\modules\mob\living\carbon\brain\say.dm"
-#include "code\modules\mob\living\carbon\human\appearance.dm"
#include "code\modules\mob\living\carbon\human\death.dm"
#include "code\modules\mob\living\carbon\human\examine.dm"
#include "code\modules\mob\living\carbon\human\human.dm"
+#include "code\modules\mob\living\carbon\human\human_appearance.dm"
#include "code\modules\mob\living\carbon\human\human_attackhand.dm"
#include "code\modules\mob\living\carbon\human\human_damage.dm"
#include "code\modules\mob\living\carbon\human\human_defense.dm"
@@ -2837,13 +2947,14 @@
#include "code\modules\organs\internal\_internal.dm"
#include "code\modules\organs\internal\appendix.dm"
#include "code\modules\organs\internal\brain.dm"
+#include "code\modules\organs\internal\brain_computer.dm"
+#include "code\modules\organs\internal\cell.dm"
#include "code\modules\organs\internal\eyes.dm"
#include "code\modules\organs\internal\heart.dm"
#include "code\modules\organs\internal\insectoid.dm"
#include "code\modules\organs\internal\kidneys.dm"
#include "code\modules\organs\internal\liver.dm"
#include "code\modules\organs\internal\lungs.dm"
-#include "code\modules\organs\internal\posibrain.dm"
#include "code\modules\organs\internal\stomach.dm"
#include "code\modules\organs\internal\voice.dm"
#include "code\modules\organs\internal\species\golem.dm"
@@ -2916,6 +3027,7 @@
#include "code\modules\paperwork\toner_cartridge.dm"
#include "code\modules\paperwork\pen\chameleon_pen.dm"
#include "code\modules\paperwork\pen\crayon.dm"
+#include "code\modules\paperwork\pen\crayon_edibility.dm"
#include "code\modules\paperwork\pen\fancy.dm"
#include "code\modules\paperwork\pen\multi_pen.dm"
#include "code\modules\paperwork\pen\pen.dm"
@@ -3092,6 +3204,7 @@
#include "code\modules\reagents\Chemistry-Machinery.dm"
#include "code\modules\reagents\Chemistry-Metabolism.dm"
#include "code\modules\reagents\cocktails.dm"
+#include "code\modules\reagents\reagent_container_edibility.dm"
#include "code\modules\reagents\reagent_containers.dm"
#include "code\modules\reagents\reagent_dispenser.dm"
#include "code\modules\reagents\chems\chems_blood.dm"
@@ -3120,6 +3233,7 @@
#include "code\modules\reagents\reactions\reaction_alcohol.dm"
#include "code\modules\reagents\reactions\reaction_alloys.dm"
#include "code\modules\reagents\reactions\reaction_cafe.dm"
+#include "code\modules\reagents\reactions\reaction_compounds.dm"
#include "code\modules\reagents\reactions\reaction_drinks.dm"
#include "code\modules\reagents\reactions\reaction_drinks_hidden.dm"
#include "code\modules\reagents\reactions\reaction_drugs.dm"
@@ -3132,13 +3246,18 @@
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
#include "code\modules\reagents\reagent_containers\borghydro.dm"
#include "code\modules\reagents\reagent_containers\condiment.dm"
+#include "code\modules\reagents\reagent_containers\condiment_edibility.dm"
#include "code\modules\reagents\reagent_containers\drinks.dm"
+#include "code\modules\reagents\reagent_containers\drinks_edibility.dm"
#include "code\modules\reagents\reagent_containers\dropper.dm"
#include "code\modules\reagents\reagent_containers\food.dm"
+#include "code\modules\reagents\reagent_containers\food_edibility.dm"
#include "code\modules\reagents\reagent_containers\glass.dm"
+#include "code\modules\reagents\reagent_containers\glass_edibility.dm"
#include "code\modules\reagents\reagent_containers\hypospray.dm"
#include "code\modules\reagents\reagent_containers\inhaler.dm"
#include "code\modules\reagents\reagent_containers\pill.dm"
+#include "code\modules\reagents\reagent_containers\pill_edibility.dm"
#include "code\modules\reagents\reagent_containers\spray.dm"
#include "code\modules\reagents\reagent_containers\syringes.dm"
#include "code\modules\reagents\reagent_containers\drinkingglass\drinkingglass.dm"
@@ -3155,6 +3274,7 @@
#include "code\modules\reagents\reagent_containers\food\baked_goods.dm"
#include "code\modules\reagents\reagent_containers\food\bread.dm"
#include "code\modules\reagents\reagent_containers\food\burgers.dm"
+#include "code\modules\reagents\reagent_containers\food\can_edibility.dm"
#include "code\modules\reagents\reagent_containers\food\canned.dm"
#include "code\modules\reagents\reagent_containers\food\dough.dm"
#include "code\modules\reagents\reagent_containers\food\eggs.dm"
@@ -3561,6 +3681,7 @@
#include "code\unit_tests\subsystem_tests.dm"
#include "code\unit_tests\test_obj.dm"
#include "code\unit_tests\time_tests.dm"
+#include "code\unit_tests\traders.dm"
#include "code\unit_tests\unique_tests.dm"
#include "code\unit_tests\unit_test.dm"
#include "code\unit_tests\uplink_tests.dm"
diff --git a/test/check-paths.sh b/test/check-paths.sh
index ed0186b5467..a775484c4da 100755
--- a/test/check-paths.sh
+++ b/test/check-paths.sh
@@ -32,12 +32,12 @@ exactly 2 "/mob text paths" '"/mob'
exactly 6 "/obj text paths" '"/obj'
exactly 8 "/turf text paths" '"/turf'
exactly 1 "world<< uses" 'world<<|world[[:space:]]<<'
-exactly 92 "'in world' uses" 'in world'
+exactly 94 "'in world' uses" 'in world'
exactly 1 "world.log<< uses" 'world.log<<|world.log[[:space:]]<<'
exactly 18 "<< uses" '(?> uses" '>>(?!>)' -P
exactly 0 "incorrect indentations" '^( {4,})' -P
-exactly 23 "text2path uses" 'text2path'
+exactly 24 "text2path uses" 'text2path'
exactly 4 "update_icon() override" '/update_icon\((.*)\)' -P
exactly 0 "goto uses" 'goto '
exactly 6 "atom/New uses" '^/(obj|atom|area|mob|turf).*/New\('
@@ -49,7 +49,7 @@ exactly 0 "static-marked globally scoped variables" -P '^(/|)var.*/static/.+'
exactly 1 "direct usage of decls_repository.get_decl()" 'decls_repository\.get_decl\('
exactly 21 "direct loc set" -P '(\t|;|\.)loc\s*=(?!=)'
exactly 0 "magic number mouse opacity set" -P 'mouse_opacity\s*=\s*[0-2]'
-exactly 1 "magic number density set" -P 'density\s*=\s*[01]'
+exactly 1 "magic number density set" -P '\bdensity\s*=\s*[01]'
exactly 0 "magic number anchored set" -P 'anchored\s*=\s*[01]'
exactly 7 "magic number opacity set" -P 'opacity\s*=\s*[01]'
diff --git a/tools/changelog/generate_cl.py b/tools/changelog/generate_cl.py
index e080f37b2ae..b76f9a50913 100644
--- a/tools/changelog/generate_cl.py
+++ b/tools/changelog/generate_cl.py
@@ -74,8 +74,9 @@
write_cl['delete-after'] = True
+yaml = yaml.YAML(typ='safe', pure=True)
with open(Path.cwd().joinpath("tools/changelog/tags.yml")) as file:
- tags = yaml.safe_load(file)
+ tags = yaml.load(file)
write_cl['changes'] = []
@@ -87,7 +88,6 @@
if write_cl['changes']:
with io.StringIO() as cl_contents:
- yaml = yaml.YAML()
yaml.indent(sequence=4, offset=2)
yaml.dump(write_cl, cl_contents)
cl_contents.seek(0)
diff --git a/tools/map_migrations/3558_lowercase_closets.txt b/tools/map_migrations/3558_lowercase_closets.txt
new file mode 100644
index 00000000000..85ffc1aabd0
--- /dev/null
+++ b/tools/map_migrations/3558_lowercase_closets.txt
@@ -0,0 +1,2 @@
+/obj/structure/closet/secure_closet/CMO : /obj/structure/closet/secure_closet/cmo{@OLD}
+/obj/structure/closet/secure_closet/RD : /obj/structure/closet/secure_closet/research_director{@OLD}
\ No newline at end of file
diff --git a/tools/map_migrations/3560_central_atmos_computer.txt b/tools/map_migrations/3560_central_atmos_computer.txt
new file mode 100644
index 00000000000..71179dbe712
--- /dev/null
+++ b/tools/map_migrations/3560_central_atmos_computer.txt
@@ -0,0 +1,2 @@
+/obj/machinery/computer/atmoscontrol/@SUBTYPES : /obj/machinery/computer/central_atmos/@SUBTYPES{@OLD}
+/obj/item/stock_parts/circuitboard/atmoscontrol : /obj/item/stock_parts/circuitboard/central_atmos{@OLD}
diff --git a/tools/map_migrations/3576_wallobj_migration.txt b/tools/map_migrations/3576_wallobj_migration.txt
new file mode 100644
index 00000000000..1f381b8483f
--- /dev/null
+++ b/tools/map_migrations/3576_wallobj_migration.txt
@@ -0,0 +1,33 @@
+# FIX WALLOBJ FACING DIRS
+/obj/item/radio/intercom/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD {@OLD;pixel_x=-22;dir=4}
+/obj/item/radio/intercom/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD {@OLD;pixel_x=22;dir=8}
+/obj/item/radio/intercom/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD {@OLD;pixel_y=-30;dir=1}
+/obj/item/radio/intercom/@SUBTYPES {pixel_x=@UNSET;pixel_y=@POSITIVE} : @OLD {@OLD;pixel_y=20;dir=@SKIP}
+/obj/structure/extinguisher_cabinet {pixel_x=@POSITIVE;pixel_y=@UNSET} : @OLD {@OLD;pixel_x=29;dir=8}
+/obj/structure/extinguisher_cabinet {pixel_x=@NEGATIVE;pixel_y=@UNSET} : @OLD {@OLD;pixel_x=-29;dir=4}
+/obj/structure/extinguisher_cabinet {pixel_y=@POSITIVE;pixel_x=@UNSET} : @OLD {@OLD;pixel_y=29;dir=@SKIP}
+/obj/structure/extinguisher_cabinet {pixel_y=@NEGATIVE;pixel_x=@UNSET} : @OLD {@OLD;pixel_y=-29;dir=1}
+/obj/machinery/button/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8}
+/obj/machinery/button/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4}
+/obj/machinery/button/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1}
+/obj/machinery/status_display/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=8}
+/obj/machinery/status_display/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=4}
+/obj/machinery/status_display/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1}
+/obj/machinery/newscaster/@SUBTYPES {pixel_x=@NEGATIVE;pixel_y=@UNSET} : @OLD{@OLD;dir=8}
+/obj/machinery/newscaster/@SUBTYPES {pixel_x=@POSITIVE;pixel_y=@UNSET} : @OLD{@OLD;dir=4}
+/obj/machinery/newscaster/@SUBTYPES {pixel_y=@NEGATIVE;pixel_x=@UNSET} : @OLD{@OLD;dir=1}
+/obj/structure/closet/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8}
+/obj/structure/closet/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4}
+/obj/structure/closet/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1}
+/obj/machinery/recharger/wallcharger/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8}
+/obj/machinery/recharger/wallcharger/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4}
+/obj/machinery/recharger/wallcharger/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1}
+/obj/machinery/embedded_controller/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8}
+/obj/machinery/embedded_controller/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4}
+/obj/machinery/embedded_controller/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1}
+/obj/machinery/airlock_sensor/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8}
+/obj/machinery/airlock_sensor/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4}
+/obj/machinery/airlock_sensor/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1}
+/obj/machinery/light_switch/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8}
+/obj/machinery/light_switch/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4}
+/obj/machinery/light_switch/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1}
\ No newline at end of file
diff --git a/tools/mapmerge2/update_paths.py b/tools/mapmerge2/update_paths.py
index 8c3039d8798..0e34bbd7765 100644
--- a/tools/mapmerge2/update_paths.py
+++ b/tools/mapmerge2/update_paths.py
@@ -91,6 +91,22 @@ def replace_def(match):
else:
return [match.group(0)]
else:
+ if old_path_props[filter_prop] == "@SET":
+ continue
+ if old_path_props[filter_prop] == "@NEGATIVE":
+ try:
+ if float(old_props[filter_prop]) < 0:
+ continue
+ return [match.group(0)]
+ except ValueError:
+ return [match.group(0)]
+ if old_path_props[filter_prop] == "@POSITIVE":
+ try:
+ if float(old_props[filter_prop]) > 0:
+ continue
+ return [match.group(0)]
+ except ValueError:
+ return [match.group(0)]
if old_props[filter_prop] != old_path_props[filter_prop] or old_path_props[filter_prop] == "@UNSET":
return [match.group(0)] #does not match current filter, skip the change.
if verbose:
diff --git a/~code/global_init.dm b/~code/global_init.dm
index 3dee544e61a..00301af2ca2 100644
--- a/~code/global_init.dm
+++ b/~code/global_init.dm
@@ -14,7 +14,7 @@
var/global_init = new /datum/global_init()
/datum/global_init/New()
- load_configuration()
+ SSconfiguration.load_all_configuration()
callHook("global_init")
qdel(src) //we're done