Adds the silicate sprayer.

Sprite is a modified version of TG's airlock painter.
This commit is contained in:
PJB3005
2015-10-26 01:51:31 +01:00
parent 1c71d5264b
commit 8496e4f26a
23 changed files with 38321 additions and 38095 deletions

View File

@@ -99,6 +99,10 @@
#define isvehicle(A) (istype(A, /obj/structure/bed/chair/vehicle))
#define issilicatesprayer(A) (istype(A, /obj/item/device/silicate_sprayer))
#define iswindow(A) (istype(A, /obj/structure/window))
//Macros for antags
#define isvampire(H) ((H.mind in ticker.mode.vampires) || H.mind.vampire)

View File

@@ -228,6 +228,14 @@ var/list/all_supply_groups = list("Supplies","Clothing","Security","Hospitality"
containername = "fuel tank crate"
group = "Supplies"
/datum/supply_packs/silicatetank
name = "Silicate tank crate"
contains = list(/obj/structure/reagent_dispensers/silicate)
cost = 8
containertype = /obj/structure/largecrate
containername = "silicate tank crate"
group = "Supplies"
/datum/supply_packs/mining
name = "Mining Equipment"
contains = list(/obj/item/weapon/pickaxe/drill,

View File

@@ -43,6 +43,7 @@
new /obj/item/device/analyzer(), \
new /obj/item/device/t_scanner(), \
new /obj/item/weapon/pickaxe/shovel/spade(), \
new /obj/item/device/silicate_sprayer/empty(), \
),
"Containers"=list(
new /obj/item/weapon/reagent_containers/glass/beaker(), \

View File

@@ -1609,6 +1609,7 @@ var/global/num_vending_terminals = 1
/obj/item/device/t_scanner = 5,
/obj/item/weapon/screwdriver = 5,
/obj/item/weapon/solder = 3,
/obj/item/device/silicate_sprayer = 2
)
contraband = list(
/obj/item/weapon/weldingtool/hugetank = 2,

View File

@@ -0,0 +1,164 @@
// Silicate sprayer, load it with silicate, and you can fix damaged windows with it!
// No not the OS, nobody can fix that trainwreck.
#define SILICATE_PER_DAMAGE 0.05 // Units of silicate used to repair 1 point of damage.
#define MAX_WINDOW_HEALTH_MULTIPLIER 2 // How many times of the original health you can add to a window with the advanced silicate sprayer.
#define SILICATE_PER_REINFORCE 0.1 // Silicate used to reinforce 1 unit of health on a window.
#define MODE_REPAIR 0
#define MODE_REINFORCE 1
/obj/item/device/silicate_sprayer
name = "\improper Silicate Sprayer"
desc = "Used to repair damaged windows with silicate."
icon = 'icons/obj/device.dmi'
icon_state = "silicate sprayer"
w_class = 2
origin_tech = "engineering=2"
var/start_filled = TRUE
var/max_silicate = 50
var/silicate_per_state = 5 // Used in the calculation for the icon states for the meter.
// Empty for in the autolathe.
/obj/item/device/silicate_sprayer/empty
start_filled = FALSE
/obj/item/device/silicate_sprayer/New()
. = ..()
create_reagents(max_silicate)
if(start_filled)
reagents.add_reagent("silicate", max_silicate)
update_icon()
/obj/item/device/silicate_sprayer/proc/get_amount()
return reagents.get_reagent_amount("silicate")
/obj/item/device/silicate_sprayer/examine(var/mob/user)
. = ..()
user << "<span class='notice'>It contains [get_amount()]/[max_silicate] units of silicate!</span>"
/obj/item/device/silicate_sprayer/proc/remove_silicate(var/amount = 0)
reagents.remove_reagent("silicate", amount)
update_icon()
/obj/item/device/silicate_sprayer/update_icon()
overlays.Cut()
var/amount = get_amount()
if(!amount)
return
var/i = 0
// Floor if above 50%, else we Ceil.
if(amount >= max_silicate / 2)
i = Floor(amount / silicate_per_state, 1)
else
i = Ceiling(amount / silicate_per_state, 1)
overlays += "silicate sprayer [i]"
/obj/item/device/silicate_sprayer/on_reagent_change()
update_icon()
/obj/item/device/silicate_sprayer/preattack(var/atom/A, var/mob/user)
if(get_dist(A, user) > 1) // I purposely don't use proximity_flag so you can get to windows without needing adjacency. (window behind another window for example.)
return
if(!iswindow(A)) // We can only fix windows.
return
var/obj/structure/window/W = A
var/diff = initial(W.health) - W.health
if(!diff) // Not damaged.
user << "<span class='notice'>\The [W] is already in perfect condition!</span>"
return 1
diff = min(diff, get_amount() / SILICATE_PER_DAMAGE)
W.health += diff
W.healthcheck(user, FALSE)
user.visible_message("<span class='notice'>[user] repairs \the [W] with their [name]!</span>", "<span class='notice'>You repair \the [W] with your [name].</span>")
playsound(get_turf(src), 'sound/effects/refill.ogg', 10, 1, -6)
remove_silicate(diff * SILICATE_PER_DAMAGE)
return 1
// Advanced subtype that can reinforce windows!
/obj/item/device/silicate_sprayer/advanced
name = "\improper Advanced Silicate Sprayer"
desc = "An advanced tool used to repair and reinforce windows."
icon_state = "silicate sprayer advanced"
max_silicate = 100
silicate_per_state = 10
origin_tech = "materials=3;engineering=4"
var/mode = MODE_REPAIR
/obj/item/device/silicate_sprayer/advanced/empty
start_filled = FALSE
/obj/item/device/silicate_sprayer/advanced/attack_self(var/mob/user)
mode = !mode
user << "<span class='notice'>\The [src] is now set to [mode == MODE_REINFORCE ? "reinforce" : "repair"] windows.</span>"
update_icon()
return 1
/obj/item/device/silicate_sprayer/advanced/update_icon()
. = ..()
if(mode == MODE_REINFORCE)
overlays += "silicate sprayer reinforce"
/obj/item/device/silicate_sprayer/advanced/examine(var/mob/user)
. = ..()
user << "<span class='notice'>It is set to [mode == MODE_REINFORCE ? "reinforce" : "repair"] windows.</span>"
/obj/item/device/silicate_sprayer/advanced/preattack(var/atom/A, var/mob/user)
if(get_dist(A, user) > 1) // I purposely don't use proximity_flag so you can get to windows without needing adjacency. (window behind another window for example.)
return
if(!iswindow(A))
return
var/obj/structure/window/W = A
var/initial_health = initial(W.health)
if(mode == MODE_REPAIR || W.health < initial_health) // Call the parent to repair, always repair if it's damaged.
return ..()
var/extra_health = W.health - initial_health
if(W.health >= initial_health * MAX_WINDOW_HEALTH_MULTIPLIER)
user << "<span class='notice'>You can't reinforce \the [W] any further!</span>"
return 1
var/repair_amt = min(get_amount() / SILICATE_PER_REINFORCE, (initial_health * MAX_WINDOW_HEALTH_MULTIPLIER) - (initial_health + extra_health))
W.health += repair_amt
W.healthcheck(user, FALSE)
user.visible_message("<span class='notice'>[user] reinforced \the [W] with their [name]!</span>", "<span class='notice'>You reinforce \the [W] with your [name].</span>")
playsound(get_turf(src), 'sound/effects/refill.ogg', 10, 1, -6)
remove_silicate(repair_amt * SILICATE_PER_REINFORCE)
return 1
#undef MODE_REPAIR
#undef MODE_REINFORCE

View File

@@ -45,7 +45,8 @@
"/obj/item/weapon/rcd_ammo",
"/obj/item/weapon/reagent_containers/glass/fuelcan",
"/obj/item/device/lightreplacer",
"/obj/item/device/device_analyser"
"/obj/item/device/device_analyser",
"/obj/item/device/silicate_sprayer"
)
/obj/item/weapon/storage/belt/utility/complete/New()
@@ -109,7 +110,8 @@
"/obj/item/blueprints",
"/obj/item/device/lightreplacer",
"/obj/item/device/device_analyser",
"/obj/item/weapon/rcl"
"/obj/item/weapon/rcl",
"/obj/item/device/silicate_sprayer"
)
/obj/item/weapon/storage/belt/utility/chief/New()

View File

@@ -89,13 +89,12 @@
damage_overlay.icon = icon('icons/obj/structures.dmi')
damage_overlay.dir = src.dir
overlays.Cut()
if(health < initial(health))
var/damage_fraction = Clamp(round((initial(health) - health) / initial(health) * 5) + 1, 1, 5) //gives a number, 1-5, based on damagedness
damage_overlay.icon_state = "[cracked_base][damage_fraction]"
overlays += damage_overlay
else
damage_overlay.icon_state = ""
overlays += damage_overlay
/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)

View File

@@ -205,6 +205,7 @@
src.modules += new /obj/item/taperoll/engineering(src)
src.modules += new /obj/item/device/rcd/tile_painter(src)
src.modules += new /obj/item/device/material_synth/robot(src)
src.modules += new /obj/item/device/silicate_sprayer(src)
sensor_augs = list("Mesons", "Disable")
var/obj/item/stack/cable_coil/W = new /obj/item/stack/cable_coil(src)

View File

@@ -787,41 +787,12 @@
holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
return
/* silicate
name = "Silicate"
id = "silicate"
description = "A compound that can be used to reinforce glass."
reagent_state = LIQUID
color = "#C7FFFF" // rgb: 199, 255, 255
reaction_obj(var/obj/O, var/volume)
src = null
if(istype(O,/obj/structure/window))
if(O:silicate <= 200)
O:silicate += volume
O:health += volume * 3
if(!O:silicateIcon)
var/icon/I = icon(O.icon,O.icon_state,O.dir)
var/r = (volume / 100) + 1
var/g = (volume / 70) + 1
var/b = (volume / 50) + 1
I.SetIntensity(r,g,b)
O.icon = I
O:silicateIcon = I
else
var/icon/I = O:silicateIcon
var/r = (volume / 100) + 1
var/g = (volume / 70) + 1
var/b = (volume / 50) + 1
I.SetIntensity(r,g,b)
O.icon = I
O:silicateIcon = I
return*/
/datum/reagent/silicate
name = "Silicate"
id = "silicate"
description = "A compound that can be used to repair and reinforce glass."
reagent_state = LIQUID
color = "#C7FFFF" // rgb: 199, 255, 255
/datum/reagent/oxygen
name = "Oxygen"

View File

@@ -99,15 +99,13 @@ datum
empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
holder.clear_reagents()
return
/*
silicate
name = "Silicate"
id = "silicate"
result = "silicate"
required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
result_amount = 3
*/
phalanximine
name = "Phalanximine"

View File

@@ -277,7 +277,7 @@
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
del(src)
qdel(src)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
@@ -301,3 +301,31 @@
/obj/structure/reagent_dispensers/corn_oil_tank/New()
. = ..()
reagents.add_reagent("cornoil", 1000)
/obj/structure/reagent_dispensers/silicate
name = "\improper Silicate Tank"
desc = "A tank filled with silicate."
icon = 'icons/obj/objects.dmi'
icon_state = "silicate tank"
amount_per_transfer_from_this = 50
/obj/structure/reagent_dispensers/silicate/New()
. = ..()
reagents.add_reagent("silicate", 1000)
/obj/structure/reagent_dispensers/silicate/attackby(var/obj/item/W, var/mob/user)
. = ..()
if(.)
return
if(issilicatesprayer(W))
var/obj/item/device/silicate_sprayer/S = W
if(S.get_amount() >= S.max_silicate) // Already filled.
user << "<span class='notice'>\The [S] is already full!</span>"
return
reagents.trans_to(S, S.max_silicate)
S.update_icon()
user << "<span class='notice'>Sprayer refilled.</span>"
playsound(get_turf(src), 'sound/effects/refill.ogg', 50, 1, -6)
return 1

View File

@@ -112,3 +112,13 @@
materials = list (MAT_IRON = 3000, MAT_GLASS = 1500, MAT_DIAMOND = 1000, MAT_URANIUM = 3000)
category = "Engineering"
build_path = /obj/item/device/material_synth
/datum/design/adv_silicate_sprayer
name = "Advanced Silicate Sprayer"
desc = "An advanced tool to repair and reinforce windows."
id = "adv_silicate_sprayer"
req_tech = list("engineering" = 3, "materials" = 2)
build_type = PROTOLATHE
materials = list(MAT_IRON = 700, MAT_GLASS = 50, MAT_SILVER = 50)
build_path = /obj/item/device/silicate_sprayer/advanced/empty
category = "Engineering"

View File

@@ -0,0 +1,6 @@
author: PJB3005
delete-after: true
changes:
- rscadd: "Added the silicate sprayer, a tool for engineers to repair damaged windows, it requires silicate, however there are now silicate tanks around the station for this purpose."
- rscadd: "You can find a silicate sprayer in the nearest YouTool and autolathe."
- rscadd: "There is also an <i>advanced</i> version that has the ability to reinforce windows, ask R&D (nicely)!"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 94 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -446,7 +446,7 @@
"aiD" = (/obj/structure/closet/secure_closet/chemical,/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"aiE" = (/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"aiF" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/item/stack/sheet/mineral/plasma{layer = 2.9},/obj/machinery/camera{c_tag = "Chemestry"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"aiG" = (/obj/structure/table,/obj/item/stack/sheet/glass/glass{amount = 50},/turf/simulated/floor{icon_state = "floorgrime"},/area/storage/primary)
"aiG" = (/obj/structure/reagent_dispensers/silicate,/turf/simulated/floor{icon_state = "floorgrime"},/area/storage/primary)
"aiH" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/storage/primary)
"aiI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/storage/primary)
"aiJ" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/storage/primary)
@@ -481,7 +481,7 @@
"ajm" = (/obj/effect/decal/cleanable/blood/oil/streak,/obj/machinery/light/small{dir = 8; flickering = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2{icon_state = "disposal"; name = "Disposals Medical"})
"ajn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/decal/warning_stripes{tag = "icon-warning (NORTHWEST)"; icon_state = "warning"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fsmaint2{icon_state = "disposal"; name = "Disposals Medical"})
"ajo" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"ajp" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor{icon_state = "floorgrime"},/area/storage/primary)
"ajp" = (/obj/structure/table,/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor{icon_state = "floorgrime"},/area/storage/primary)
"ajq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/storage/primary)
"ajr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/storage/primary)
"ajs" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_x = -30; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/medbay)
@@ -1503,7 +1503,7 @@
"aCU" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/power/battery/smes,/turf/simulated/floor,/area/engine/locker{name = "\improper Engineering Foyer"})
"aCV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 1; icon_state = "caution"},/area/engineering/engine)
"aCW" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 30},/turf/simulated/floor{dir = 1; icon_state = "caution"},/area/engineering/engine)
"aCX" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/engineering/engine)
"aCX" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/obj/item/device/silicate_sprayer,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/engineering/engine)
"aCY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/engineering/ce)
"aCZ" = (/obj/structure/table,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/scanning_module,/obj/item/weapon/stock_parts/scanning_module,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/storage/belt/utility,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/science/lab)
"aDa" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
@@ -1825,7 +1825,7 @@
"aJe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/engineering/mechanics)
"aJf" = (/turf/simulated/wall/r_wall,/area/engineering/mechanics)
"aJg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/secure_closet/engineering_mechanic,/turf/simulated/floor{icon_state = "dark vault stripe"; dir = 4},/area/engineering/mechanics)
"aJh" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/stack/sheet/metal{amount = 50; pixel_x = -5; pixel_y = 5},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/clothing/gloves/black,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor,/area/storage/primary)
"aJh" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)"},/obj/structure/reagent_dispensers/silicate,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/storage/primary)
"aJi" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/storage/primary)
"aJj" = (/obj/machinery/suit_storage_unit/engie,/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/engine/locker{name = "\improper Engineering Foyer"})
"aJk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/locker{name = "\improper Engineering Foyer"})
@@ -2457,7 +2457,7 @@
"aVm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aVn" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aVo" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aVp" = (/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aVp" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/stack/sheet/metal{amount = 50; pixel_x = -5; pixel_y = 5},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/clothing/gloves/black,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/silicate_sprayer,/turf/simulated/floor,/area/storage/primary)
"aVq" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint2)
"aVr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/engine/reactor_gas{icon_state = "atmos"; name = "Atmospherics Security"})
"aVs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/reactor_gas{icon_state = "atmos"; name = "Atmospherics Security"})
@@ -3018,7 +3018,7 @@
"bgb" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor,/area/security/lobby)
"bgc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/crate/medical,/turf/simulated/floor,/area/supply/storage)
"bgd" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/light,/obj/structure/closet/emcloset,/obj/structure/disposalpipe/junction{icon_state = "pipe-y"; dir = 1},/turf/simulated/floor,/area/hallway/primary/aft{name = "\improper Central Civillian Hallway"})
"bge" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)"},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/storage/primary)
"bge" = (/obj/structure/reagent_dispensers/silicate,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"bgf" = (/obj/machinery/power/apc{dir = 4; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/storage/primary)
"bgg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/reagent_dispensers/watertank,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/storage/primary)
"bgh" = (/obj/machinery/suit_storage_unit/engie,/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/engine/locker{name = "\improper Engineering Foyer"})
@@ -7398,8 +7398,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaaaaagjagjagjabxagkabxagjagjagjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxabxabxaDPalWaDPaiWaDPabxabxabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLafLafLafLafLafLafLafLafLafLafLahLaglaolaoZagoaegaenaenagqagragsadgapaaeRagtaguagvafVagwagxagyapcapbagBagCagDacOacOacOacOagEafGabmabmabmagiabtadRagHabxabxabxagIabxabxaaaagIabxabxabxagIaaaaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxabxabxabxabxabxabxabxagJagKagKagMagLagMagNagNagOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaabHaalWbHaaiWbHaaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLagPagQagRagSagTagUagVagWagXagYafLapdapiaphapUahcahdaheaheahfahgapXahiapYahjahkahkafSahmahnahoahpaqAaqmahsahoahoahtahuahvahwahxafGabmabTabmahyahzahAahBahDahCahFahEahCahCahFahEahCahCahFahEahCahFahGabxaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaaaaahHahHahHaaaafKaaaahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLahIahJahJahJahJahJahJahJahJahKafLahLahMahNahOacrahPahQahRahRacfahTahRahUaeRagsahVahWahXahYahoahZaqBaiEaicaaiahoaieaifaifaigahxafGabmaihaihaiiaijaikaihabxabxaaaagIabxaaaabxagIabxabxaaaagIabxabxabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaaaaaaaabxabxabxagkaaaaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLailaimahJahJahJahJahJainaioaipafLahLahMaiqairaisaisaisaisahlaiuaitahRaiwaixaiyaizaiAaiBaiCahoaiDaibaiEaiEaiFahoaiGaiHaiIaiJahxafGabmaiKaiLaiMaiNaiOaihaaaaaaaeIaiPaeKaaaaeIaiPaeKabxaeIaiPaeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaagjagjagjagjabxagkabxagjagjagjagjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxabxabxabxabxabxabxabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLajCajBajDaiRaiSaiTahJahJahJaipafLadGabUaqEaiXaiYaiZajEajbagpajdafUajfajgajhajiabwajjadgajkahoajlaqHaqGajoakrahoajpajqajrakZahxafGabmajtagFajvajwajxajyaaaaaaaeIaiPaeKabxaeIaiPaeKabxaeIaiPaeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaaaaaaaabxabxabxagkaaaaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLailaimahJahJahJahJahJainaioaipafLahLahMaiqairaisaisaisaisahlaiuaitahRaiwaixaiyaizaiAaiBaiCahoaiDaibaiEaiEaiFahoajpaiHaiIaiJahxafGabmaiKaiLaiMaiNaiOaihaaaaaaaeIaiPaeKaaaaeIaiPaeKabxaeIaiPaeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaagjagjagjagjabxagkabxagjagjagjagjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxabxabxabxabxabxabxabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLajCajBajDaiRaiSaiTahJahJahJaipafLadGabUaqEaiXaiYaiZajEajbagpajdafUajfajgajhajiabwajjadgajkahoajlaqHaqGajoakrahoaiGajqajrakZahxafGabmajtagFajvajwajxajyaaaaaaaeIaiPaeKabxaeIaiPaeKabxaeIaiPaeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxabxabxabxabxabxabxagJagKagKagKagMagLagMagNagNagNagOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLakoajAalEalfalKalfamxambakUajFafLahLahMaqIajJajJajKajLajMajNaksajPajQajRajSajTabPajUajVajWahoajXajcajZajeajXahoakbargaqJarNaruarOakhakiakjakkaklakmaihaaaaaaaeIaknaeKaaaaeIaiPaeKaaaaeIaknaeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaahHahHahHahHaaaafKaaaahHahHahHahHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLajzahJahJakpaiSakqahKafLamCafLafLahLahMajOaktajJakuakvaisahRahRakwakxakzahrakyakBakCakDakDakEakFakAakHakGahoahoakJaqFahxakJahxakLakMakIakOakPakQakRajyaaaaaaaaaaaaaaaaaaaeIaknaeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaaaaaaaaaaaaabxabxaaaagkabxabxabxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafLafLakSakTakUakVakWakXajFakYanHakYalaahLahMalbaktajJalcaGQaleaofalgcCTalialjalkallalmalhalnaloalpalqalralsaltabmacCaluarQalwalxalyalzalAaihalBaILalDaqgaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7434,8 +7434,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMAaGUaDSaFHaFIaFJaFKaDQaDQaFLaCtaCtaCtaCtaCtaCtaCtaCyaFMaFNasLaFgaFhaFhaFiarFaEIaFOaCyaFParnaFRaFSaFTaFTaFTaFTaFTaFTaFTaFTaFSaFUaFVaFWaFXaFYaGaaGaaFZaGbaGcaVIaVFaVFaHObhwbhwaIKaHOaHNaHMaClaJYaJXaDFaHJaHKaHLabxaHIabxabxaaaabxaHIaaaaaaaHIabxaaaaoJaHFaESaHFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxabxaHQaDSaDQaGiaMYbbhbbgbbjbbibbFbbkbbGbbGbbIbbHbbNbbJbbPbbOaGwaGxaGyaGzaGAaGBaGvaGCayOaGEaGFaGFaGGaGFaGFaGFaGFaGHaGIaGFaGFaGGaGJaGFaGKaxkbbZbbYbccbcbaHGbcdbcFaIIbcMaFCaFCaFCaFCaFCaClaClaClaFvaFFaFxaGfaGgaGdaaaabxaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaESaClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCsaGVaGXaGXaGXbcUatTatUaHaaHbbdobdObdMbedaTIbdMbeCbeIbeEaHkaHlaHmaHlaHlaHnaHoaHpatoaHraHsaHsaHtaHsaHsaHuaHvaHwaHxaHyaHyaHvaHyaHzaHAaqhaHCaERaHEaEQbcgaHHaEnaDObeTaDHaDDaCUalCaCSaUqaBMaBKaBJaBIaBIaBIaBIaETaaaabxaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaESaClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCsaHRaGXaUjbgjbfoaRhaUCaVhaGXaHWaHXaHYbgcaISaITaHYaIbaIcaIdaIeaIfaLuaIeaIhaIiaIjaIkaVyaImaInaPfaIpaPaaIraIsaItaIuaPeaIpaPbaIxbgdaIzaIAbgeaICbggbgfahtbghbgiaGeaGeaGecDncDncDncDpcDoaBIcDrcDqcDqcDqcDucDtaHJabxaHIaaaaaaabxabxabxaaaaaaaaaabxaaaaaaabxcDsaClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCsaCsaGXaVBbgjbgjbgjaPgaVXaGXaIPaIQaHYbglaISaITaHYaHYaIUaHYaIUaIUaHYaHYaHYaHYaHYaIVaIWaIXaIYaIZaJaaJbaIraIsaItaIuaLiaLjaKDaLkaJfaJfaJfaJfaJfaJhaJiahtaJjaJkaJlaJlaJmaJScDvcDvcDwcDxaBIcDycDzcDAcDBcDDcDCaHJaEuaEuaEuaEuaEucDEabxaaaaaaaaaabxaaaaaaabxaESaHFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCsaHRaGXaUjbgjbfoaRhaUCaVhaGXaHWaHXaHYbgcaISaITaHYaIbaIcaIdaIeaIfaLuaIeaIhaIiaIjaIkaVyaImaInaPfaIpaPaaIraIsaItaIuaPeaIpaPbaIxbgdaIzaIAaJhaICbggbgfahtbghbgiaGeaGeaGecDncDncDncDpcDoaBIcDrcDqcDqcDqcDucDtaHJabxaHIaaaaaaabxabxabxaaaaaaaaaabxaaaaaaabxcDsaClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCsaCsaGXaVBbgjbgjbgjaPgaVXaGXaIPaIQaHYbglaISaITaHYaHYaIUaHYaIUaIUaHYaHYaHYaHYaHYaIVaIWaIXaIYaIZaJaaJbaIraIsaItaIuaLiaLjaKDaLkaJfaJfaJfaJfaJfaVpaJiahtaJjaJkaJlaJlaJmaJScDvcDvcDwcDxaBIcDycDzcDAcDBcDDcDCaHJaEuaEuaEuaEuaEucDEabxaaaaaaaaaabxaaaaaaabxaESaHFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboobooaGXbgXaWyaGXaGXaGXaJnaPraHYaJpaISaJqaJraHYaJsaJtaJtaJuaJvaVNbhpaJyaJzaJAaJBaJCaJDaWcaJFaJGaIraIsaItaIuaLnaLmaLlaLNaLMaLKaLLaLIaJfaJPaJQahtaJRaJScEOaVFcENcENaJTcDLcDMcDocDKcDJcDIcDHcDIcDGcDFaHJaaaabxaaaaaaabxabxabxaaaaaaaHIabxaaaaaaaHFaEScDcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabooboobooaHXaKaaKbaKcaZmaHYaJpbhqbjabizbjqbjfbjBbjxbjJbjJbjJbjKaKkaKmaWraKoaQJaMnaKraKsaMjaIraKuaKvaKwaMiaPsaLPaLPaPRaMmaIyaXiaJfaKGaMkaKGaKGaXQaJWaGecEPcEPcEPaFCaFCcDPcDQcDNcDOaBIaBIaBIaBIaETaaaabxaaaaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaESaClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKKaKLaKMaaaaaaaaaaaaaaaaHXaKNbkmbjWbjWbjWbkobknbkObkrbkObkPaKVaKWaKXaKXaKXaKlaKlaKYaKraKZaLaaLbaLcbllblpbloaIsaLeaLfaJJaJIaJHaJeaJdaJcaIyaJgaJfaLoaLpaLqaKGaJUaJWaJVaKJaKJaKJaFCaFCaClaClaClaFvaFFaFxcDdaGgcDeaaaabxabxaaaaaaaaaaaaaaaaaaaaaabxaaaaaaabxaEScDcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7511,7 +7511,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaUzaUAaUBaUBaUAcqtcEUcETaQAaQAaQAaQAaQAaRQaRQaRQaRQaRQaTCaTDaTEaTFaRVaSgaTGaTHcquaRVbCaaTKaTLaTMaTNaTOaTocGMaTQaTRaTSbeLbxZaTSaTVaVtcGOaTvaaaaaaaaaaaaaaaaaaaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaQIaRaaRaaRaaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPuaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPuaPuaPuaPuaPuaPuaPuaPuaPuaaaaaaaaaaPuaPuaPuaPuaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcERaTyaTyaTyaTycqvaUBcEQawbaUdaUdaUeaUeaUfaUfaUgaUgawbaUhaTDaTEaUiaRVaRVbdjaRVaRVaRVaUkaUlaUmaUncFhcqEaTocGPaUrbcCaUtaUuaUubpcbiUcGQcqFaTvaUyaUyaUyaUyaaaaaaaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaQIaRaaRaaRaaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPuaPuaPuaPvaPuaPuaaaaPvaPvaPvaaaaaaaaaaaaaaaaaaaPuaPuaPuaPuaPuaPuaPuaPuaPuaaaaaaaaaaPuaPuaPuaPuaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcERaaaaaaaaaaTycEVaUDaUEaUFaUGaUHaUIaUIaUIaUIaUIaUIaUJaUKaULaUMaUNaUOaUPaUQaURaURaUSaUTaUUaUVaUWcEAcqGcGUcGTcqHaTRaUZbfcbfcaUZaTVcGVcGWaVaaVbaVcaVdaVeaaaaPvaPvaPvaPvaPvaPvaPvaPvaPvaQIaQIaRaaRaaRaaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPuaPuaPuaPvaPvaPvaPvaPvaPvaPvaPvaPvaaaaaaaaaaaaaaaaaaaaaaPuaPuaPuaPuaPuaPuaPuaPuaaaaaaaaaaaaaaaaPuaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaVfaVfaVfaVfaVfaVfaVfaVgaVgaVgbdVaVgaVgaVgaVgaVgaVgaVgaViaVjaTEaVkaVlaVmaVnaVoaVpaVqaRXaRXaRXaRXaVraVsaTocGXaTraTraTSbfbbfbaTSaTvcGYcGZaTvaTvaTvaTvaVxaaaaQIaQIaQIaPvaPvaPvaPvaQIaQIaRaaRaaRaaRaaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaaaaaaaaaaPuaPuaPuaaaaaaaaaaPuaPuaPuaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPtaPtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaVfaVfaVfaVfaVfaVfaVfaVgaVgaVgbdVaVgaVgaVgaVgaVgaVgaVgaViaVjaTEaVkaVlaVmaVnaVobgeaVqaRXaRXaRXaRXaVraVsaTocGXaTraTraTSbfbbfbaTSaTvcGYcGZaTvaTvaTvaTvaVxaaaaQIaQIaQIaPvaPvaPvaPvaQIaQIaRaaRaaRaaRaaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaaaaaaaaaaPuaPuaPuaaaaaaaaaaPuaPuaPuaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPtaPtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaVfbeKaXdaVfaXdbeKaVfaWJbkwbidaVDaVEcDTbkxbkycDUbkVaVgaVKaVLaVMcsoaVgbjuaVgaVgaVOaVOaVPaVOaVQaToaVRaVSaVTcHaaVVaTrbhVbhVbhVbhVaTvcHbaVYaVZaWaaWbbhXaVxaaabaqbaqaWdaQIaQIaQIaQIaRaaRaaRaaRaaRaaRaaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaaaaaaaaaaPuaPuaPuaPuaPuaaaaaaaaaaPuaPuaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPtaPtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWeaWeaWeaWeaWeaVfaVfaVfbflaWgaWhaWibflaVfbhEaWJaWJaWkaWlaWmaWnaWoaWmbgnaVgaTCaTDaTEaVkaVgcDSaWqcsOaVOcFAaXraVOaWuaToaWvaWwaWxcFjaWzaWzaWzaWzaWzaWzaTvcHdaWBaWCaWDaWEaWFaWGaWHaRaaRaaRaaRaaRaaRaaRaaRaaRaaRaaQIaQIaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaaaaaaaPuaPuaPuaPuaPuaPuaaaaaaaaaaPuaPuaPuaPuaaaaaaaaaaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWeaXbaWRaWKaWebeKbflaWLaWMaWNaVfaWOaWPaVfaWIaWJaWJaWSaWTaWUaWoaWoaWoaWVaVgaTCaTDaTEaVkaWWaWXaWYaWZaXaaWjaXcaWtcsPaToaXfaXgaXhcsRaWzaXjaXkaXlaXmaUyaUycHeaXoaUyaUyaUyaUyaUyblcaRaaRaaRaaRaaRaaRaaRaaQIaQIaQIaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPvaPuaPuaaaaPuaPuaPuaPuaPuaPuaPuaaaaaaaPuaPuaaaaaaaaaaaaaaaaPuaPuaPuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

File diff suppressed because it is too large Load Diff

12
maptools/1prepare_map.sh Executable file
View File

@@ -0,0 +1,12 @@
export MAPFILE_TG=tgstation.dmm
export MAPFILE_EFF=defficiency.dmm
export MAPFILE_TAX=taxistation.dmm
export MAPFILE_MS=metaclub.dmm
cd ../maps
cp $MAPFILE_TG $MAPFILE_TG.backup
cp $MAPFILE_EFF $MAPFILE_EFF.backup
cp $MAPFILE_TAX $MAPFILE_TAX.backup
cp $MAPFILE_MS $MAPFILE_MS.backup

11
maptools/2clean_map.sh Executable file
View File

@@ -0,0 +1,11 @@
export MAPFILE_TG=tgstation.dmm
export MAPFILE_EFF=defficiency.dmm
export MAPFILE_TAX=taxistation.dmm
export MAPFILE_MS=metaclub.dmm
java -jar MapPatcher.jar -clean ../maps/$MAPFILE_TG.backup ../maps/$MAPFILE_TG ../maps/$MAPFILE_TG
java -jar MapPatcher.jar -clean ../maps/$MAPFILE_EFF.backup ../maps/$MAPFILE_EFF ../maps/$MAPFILE_EFF
java -jar MapPatcher.jar -clean ../maps/$MAPFILE_TAX.backup ../maps/$MAPFILE_TAX ../maps/$MAPFILE_TAX
java -jar MapPatcher.jar -clean ../maps/$MAPFILE_MS.backup ../maps/$MAPFILE_MS ../maps/$MAPFILE_MS
read -n1 -r -p "Press any key to continue..." key

View File

@@ -12,6 +12,6 @@ The easiest way to do merging is to install the merge driver. For this, open `vg
[merge "merge-dmm"]
name = mapmerge driver
driver = ./tools/mapmerge/mapmerge.sh %O %A %B
driver = ./maptools/mapmerge.sh %O %A %B
After this, merging maps should happen automagically unless there are conflicts(a tile that both you and someone else changed). If there are conflicts, you will unfortunately still be stuck with opening both versions in a map editor, and manually resolving the issues.

View File

@@ -598,6 +598,7 @@
#include "code\game\objects\items\devices\pipe_painter.dm"
#include "code\game\objects\items\devices\powersink.dm"
#include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\silicate sprayer.dm"
#include "code\game\objects\items\devices\taperecorder.dm"
#include "code\game\objects\items\devices\traitordevices.dm"
#include "code\game\objects\items\devices\transfer_valve.dm"