diff --git a/code/WorkInProgress/computer3/computers/communications.dm b/code/WorkInProgress/computer3/computers/communications.dm index 20c29aaec43..68a1020a750 100644 --- a/code/WorkInProgress/computer3/computers/communications.dm +++ b/code/WorkInProgress/computer3/computers/communications.dm @@ -317,6 +317,7 @@ if(STATE_CANCELSHUTTLE) dat = confirm_menu("cancel the shuttle","cancelshuttle2") if(STATE_MESSAGELIST) + dat += "\[ Back \]
" dat += "Messages:" for(var/i = 1; i<=messagetitle.len; i++) dat += "
[messagetitle[i]]" diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 18666b56217..fc32220b6d4 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -40,13 +40,14 @@ face_atom(A) // change direction to face what you clicked on - if(aiCamera.in_camera_mode) - aiCamera.camera_mode_off() - if(is_component_functioning("camera")) - aiCamera.captureimage(A, usr) - else - src << "Your camera isn't functional." - return + if(aiCamera) + if(aiCamera.in_camera_mode) + aiCamera.camera_mode_off() + if(is_component_functioning("camera")) + aiCamera.captureimage(A, usr) + else + src << "Your camera isn't functional." + return /* cyborg restrained() currently does nothing diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index a20997140f0..ab27aeb73df 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1114,11 +1114,28 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/autodrobe name = "Autodrobe Supply crate" contains = list(/obj/item/weapon/vending_refill/autodrobe, + /obj/item/weapon/vending_refill/autodrobe, /obj/item/weapon/vending_refill/autodrobe) cost = 15 containertype = /obj/structure/closet/crate containername = "autodrobe supply crate" group = "Operations" + +/datum/supply_packs/clothingvendor + name = "Clothing Vendor Supply crate" + contains = list(/obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/shoedispenser, + /obj/item/weapon/vending_refill/shoedispenser, + /obj/item/weapon/vending_refill/shoedispenser) + cost = 30 + containertype = /obj/structure/closet/crate + containername = "clothing vendor supply crate" + group = "Operations" /datum/supply_packs/mafia name = "Mafia Supply crate" diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 6567b2b2cc5..b733c8683a5 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -78,7 +78,7 @@ M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap." M.update_power_buttons() M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(M), slot_head) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 0194d34b2ef..efd37412bb7 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -163,7 +163,7 @@ del(wizard_mob.l_store) wizard_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(wizard_mob), slot_l_ear) - wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(wizard_mob), slot_w_uniform) + wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), slot_w_uniform) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head) diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index e1b104846bb..fc58c67087f 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -12,7 +12,7 @@ /datum/job/civilian/equip(var/mob/living/carbon/human/H) if(!H) return 0 - H.equip_or_collect(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) + H.equip_or_collect(new /obj/item/clothing/under/color/random(H), slot_w_uniform) H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes) if(H.backbag == 1) H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index ee889757029..eccb613f660 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -13,7 +13,7 @@ dir = 8 idle_power_usage = 250 active_power_usage = 500 - + /obj/machinery/sleep_console/power_change() if(stat & BROKEN) icon_state = "console-p" @@ -24,7 +24,7 @@ spawn(rand(0, 15)) src.icon_state = "console-p" stat |= NOPOWER - + /obj/machinery/sleep_console/New() ..() component_parts = list() @@ -35,8 +35,8 @@ RefreshParts() findsleeper() -/obj/machinery/sleep_console/RefreshParts() - +/obj/machinery/sleep_console/RefreshParts() + /obj/machinery/sleep_console/process() if(stat & (NOPOWER|BROKEN)) return @@ -67,16 +67,16 @@ src.connected = sleepernew return return - + /obj/machinery/sleep_console/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) if (istype(G, /obj/item/weapon/screwdriver)) default_deconstruction_screwdriver(user, "console-p", "console", G) - return - + return + if (istype(G, /obj/item/weapon/wrench)) if(panel_open) user << "Close the maintenance panel first." - return + return if(dir == 4) orient = "LEFT" dir = 8 @@ -84,11 +84,11 @@ orient = "RIGHT" dir = 4 playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - + if(exchange_parts(user, G)) return - default_deconstruction_crowbar(G) + default_deconstruction_crowbar(G) /obj/machinery/sleep_console/attack_ai(mob/user as mob) return src.attack_hand(user) @@ -102,7 +102,7 @@ if(stat & (NOPOWER|BROKEN)) return if (panel_open) - user << "Close the maintenance panel first." + user << "Close the maintenance panel first." return if (!src.connected) findsleeper() @@ -213,9 +213,9 @@ var/injection_chems = list() idle_power_usage = 1250 active_power_usage = 2500 - + l_color = "#7BF9FF" - + power_change() ..() if(!(stat & (BROKEN|NOPOWER))) @@ -249,8 +249,8 @@ injection_chems = possible_chems[I] efficiency = E - min_health = -E * 25 - + min_health = -E * 25 + /obj/machinery/sleeper/process() if(filtering > 0) if(beaker) @@ -285,21 +285,21 @@ else user << "\red The sleeper has a beaker already." return - + if (istype(G, /obj/item/weapon/screwdriver)) if(src.occupant) user << "The maintenance panel is locked." - return + return default_deconstruction_screwdriver(user, "sleeper-o", "sleeper-open", G) - return - + return + if (istype(G, /obj/item/weapon/wrench)) if(src.occupant) user << "The scanner is occupied." - return + return if(panel_open) user << "Close the maintenance panel first." - return + return if(dir == 4) orient = "LEFT" dir = 8 @@ -307,16 +307,16 @@ orient = "RIGHT" dir = 4 playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - + if(exchange_parts(user, G)) return - default_deconstruction_crowbar(G) - + default_deconstruction_crowbar(G) + if(istype(G, /obj/item/weapon/grab)) if(panel_open) user << "\blue Close the maintenance panel first." - return + return if(!ismob(G:affecting)) return if(src.occupant) @@ -374,7 +374,7 @@ qdel(src) return return - + /obj/machinery/sleeper/emp_act(severity) if(filtering) toggle_filter() @@ -396,9 +396,6 @@ M.AdjustParalysis(-4) M.AdjustWeakened(-4) M.AdjustStunned(-4) - M.Paralyse(1) - M.Weaken(1) - M.Stun(1) if (M:reagents.get_reagent_amount("inaprovaline") < 5) M:reagents.add_reagent("inaprovaline", 5) return @@ -512,7 +509,7 @@ return if(panel_open) user << "\blue Close the maintenance panel first." - return + return if(occupant) user << "\blue The sleeper is already occupied!" return diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 1d6d00a32a3..c108e02822c 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -265,7 +265,10 @@ to destroy them and players will be able to make replacements. /obj/machinery/vending/snack = "Getmore Chocolate Corp", /obj/machinery/vending/cola = "Robust Softdrinks", /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/autodrobe = "AutoDrobe") + /obj/machinery/vending/autodrobe = "AutoDrobe", + /obj/machinery/vending/hatdispenser = "Hatlord 9000", + /obj/machinery/vending/suitdispenser = "Suitlord 9000", + /obj/machinery/vending/shoedispenser = "Shoelord 9000") /obj/item/weapon/circuitboard/vendor/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 95e98055cff..62856dead99 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -718,15 +718,6 @@ /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 30,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 20,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 30, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 25) refill_canister = /obj/item/weapon/vending_refill/snack -/obj/machinery/vending/chinese - name = "Mr. Chang" - desc = "A self-serving chinese food machine, for all your chinese food needs." - product_slogans = "Taste 5000 years of culture!" - icon_state = "snack" - products = list(/obj/item/weapon/reagent_containers/food/snacks/chinese/chowmein = 5, /obj/item/weapon/reagent_containers/food/snacks/chinese/tao = 5, /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles = 5, - /obj/item/weapon/reagent_containers/food/snacks/chinese/rice = 5, /obj/item/weapon/reagent_containers/food/snacks/wingfangchu = 5) - prices = list(/obj/item/weapon/reagent_containers/food/snacks/chinese/chowmein = 50, /obj/item/weapon/reagent_containers/food/snacks/chinese/tao = 50, /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles = 50, - /obj/item/weapon/reagent_containers/food/snacks/chinese/rice = 50, /obj/item/weapon/reagent_containers/food/snacks/wingfangchu = 50) /obj/machinery/vending/snack/New() ..() @@ -738,6 +729,16 @@ component_parts += new /obj/item/weapon/vending_refill/snack(0) component_parts += new /obj/item/weapon/vending_refill/snack(0) +/obj/machinery/vending/chinese + name = "Mr. Chang" + desc = "A self-serving chinese food machine, for all your chinese food needs." + product_slogans = "Taste 5000 years of culture!" + icon_state = "snack" + products = list(/obj/item/weapon/reagent_containers/food/snacks/chinese/chowmein = 5, /obj/item/weapon/reagent_containers/food/snacks/chinese/tao = 5, /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles = 5, + /obj/item/weapon/reagent_containers/food/snacks/chinese/rice = 5, /obj/item/weapon/reagent_containers/food/snacks/wingfangchu = 5) + prices = list(/obj/item/weapon/reagent_containers/food/snacks/chinese/chowmein = 50, /obj/item/weapon/reagent_containers/food/snacks/chinese/tao = 50, /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles = 50, + /obj/item/weapon/reagent_containers/food/snacks/chinese/rice = 50, /obj/item/weapon/reagent_containers/food/snacks/wingfangchu = 50) + /obj/machinery/vending/cola name = "Robust Softdrinks" desc = "A softdrink vendor provided by Robust Industries, LLC." @@ -752,16 +753,6 @@ /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 20,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 20, /obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 20) refill_canister = /obj/item/weapon/vending_refill/cola -//This one's from bay12 -/obj/machinery/vending/cart - name = "PTech" - desc = "Cartridges for PDAs" - product_slogans = "Carts to go!" - icon_state = "cart" - icon_deny = "cart-deny" - products = list(/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/security = 10, - /obj/item/weapon/cartridge/janitor = 10,/obj/item/weapon/cartridge/signal/toxins = 10,/obj/item/device/pda/heads = 10, - /obj/item/weapon/cartridge/captain = 3,/obj/item/weapon/cartridge/quartermaster = 10) /obj/machinery/vending/cola/New() ..() @@ -773,6 +764,17 @@ component_parts += new /obj/item/weapon/vending_refill/cola(0) component_parts += new /obj/item/weapon/vending_refill/cola(0) +//This one's from bay12 +/obj/machinery/vending/cart + name = "PTech" + desc = "Cartridges for PDAs" + product_slogans = "Carts to go!" + icon_state = "cart" + icon_deny = "cart-deny" + products = list(/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/security = 10, + /obj/item/weapon/cartridge/janitor = 10,/obj/item/weapon/cartridge/signal/toxins = 10,/obj/item/device/pda/heads = 10, + /obj/item/weapon/cartridge/captain = 3,/obj/item/weapon/cartridge/quartermaster = 10) + /obj/machinery/vending/cigarette name = "Cigarette machine" //OCD had to be uppercase to look nice with the new formating desc = "If you want to get cancer, might as well do it in style" @@ -933,16 +935,6 @@ premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1) refill_canister = /obj/item/weapon/vending_refill/autodrobe -/obj/machinery/vending/cigarette/New() - ..() - component_parts = list() - var/obj/item/weapon/circuitboard/vendor/V = new(null) - V.set_type(type) - component_parts += V - component_parts += new /obj/item/weapon/vending_refill/cigarette(0) - component_parts += new /obj/item/weapon/vending_refill/cigarette(0) - component_parts += new /obj/item/weapon/vending_refill/cigarette(0) - /obj/machinery/vending/dinnerware name = "Dinnerware" desc = "A kitchen and restaurant equipment vendor" @@ -1036,6 +1028,7 @@ products = list(/obj/item/clothing/head/bowlerhat = 10,/obj/item/clothing/head/beaverhat = 10,/obj/item/clothing/head/boaterhat = 10,/obj/item/clothing/head/fedora = 10,/obj/item/clothing/head/fez = 10) contraband = list(/obj/item/clothing/head/bearpelt = 5) premium = list(/obj/item/clothing/head/soft/rainbow = 1) + refill_canister = /obj/item/weapon/vending_refill/hatdispenser /obj/machinery/vending/suitdispenser name = "Suitlord 9000" @@ -1043,10 +1036,11 @@ icon_state = "suits" product_ads = "Pre-Ironed, Pre-Washed, Pre-Wor-*BZZT*;Blood of your enemys washes right out!;Who are YOU wearing?;Look dapper! Look like an idiot!;Dont carry your size? How about you shave off some pounds you fat lazy- *BZZT*" products = list(/obj/item/clothing/under/color/black = 10,/obj/item/clothing/under/color/blue = 10,/obj/item/clothing/under/color/green = 10,/obj/item/clothing/under/color/grey = 10,/obj/item/clothing/under/color/pink = 10,/obj/item/clothing/under/color/red = 10, - /obj/item/clothing/under/color/white = 10, /obj/item/clothing/under/color/yellow = 10,/obj/item/clothing/under/lightblue = 10,/obj/item/clothing/under/aqua = 10,/obj/item/clothing/under/purple = 10,/obj/item/clothing/under/lightgreen = 10, - /obj/item/clothing/under/lightblue = 10,/obj/item/clothing/under/lightbrown = 10,/obj/item/clothing/under/brown = 10,/obj/item/clothing/under/yellowgreen = 10,/obj/item/clothing/under/darkblue = 10,/obj/item/clothing/under/lightred = 10, /obj/item/clothing/under/darkred = 10) + /obj/item/clothing/under/color/white = 10, /obj/item/clothing/under/color/yellow = 10,/obj/item/clothing/under/color/lightblue = 10,/obj/item/clothing/under/color/aqua = 10,/obj/item/clothing/under/color/purple = 10,/obj/item/clothing/under/color/lightgreen = 10, + /obj/item/clothing/under/color/lightblue = 10,/obj/item/clothing/under/color/lightbrown = 10,/obj/item/clothing/under/color/brown = 10,/obj/item/clothing/under/color/yellowgreen = 10,/obj/item/clothing/under/color/darkblue = 10,/obj/item/clothing/under/color/lightred = 10, /obj/item/clothing/under/color/darkred = 10) contraband = list(/obj/item/clothing/under/syndicate/tacticool = 5,/obj/item/clothing/under/color/orange = 5,/obj/item/clothing/under/psyche = 5) premium = list(/obj/item/clothing/under/rainbow = 1) + refill_canister = /obj/item/weapon/vending_refill/suitdispenser /obj/machinery/vending/shoedispenser name = "Shoelord 9000" @@ -1056,6 +1050,7 @@ products = list(/obj/item/clothing/shoes/black = 10,/obj/item/clothing/shoes/brown = 10,/obj/item/clothing/shoes/blue = 10,/obj/item/clothing/shoes/green = 10,/obj/item/clothing/shoes/yellow = 10,/obj/item/clothing/shoes/purple = 10,/obj/item/clothing/shoes/red = 10,/obj/item/clothing/shoes/white = 10) contraband = list(/obj/item/clothing/shoes/jackboots = 5,/obj/item/clothing/shoes/orange = 5) premium = list(/obj/item/clothing/shoes/rainbow = 1) + refill_canister = /obj/item/weapon/vending_refill/shoedispenser /obj/machinery/vending/syndicigs name = "Suspicious Cigarette Machine" diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm index ffb127e7eec..3270e9882a9 100644 --- a/code/game/objects/effects/decals/warning_stripes.dm +++ b/code/game/objects/effects/decals/warning_stripes.dm @@ -52,6 +52,59 @@ /obj/effect/decal/warning_stripes/New() . = ..() - loc.overlays += src - del src \ No newline at end of file + del src + +// Credit to Neinhaus for making these into individual decals. + +/obj/effect/decal/warning_stripes/arrow + icon_state = "4" + +/obj/effect/decal/warning_stripes/yellow + icon_state = "5" + +/obj/effect/decal/warning_stripes/yellow/partial + icon_state = "3" + +/obj/effect/decal/warning_stripes/yellow/hollow + icon_state = "6" + + +/obj/effect/decal/warning_stripes/red + icon_state = "8" + +/obj/effect/decal/warning_stripes/red/partial + icon_state = "7" + +/obj/effect/decal/warning_stripes/red/hollow + icon_state = "9" + + +/obj/effect/decal/warning_stripes/green + icon_state = "11" + +/obj/effect/decal/warning_stripes/green/partial + icon_state = "10" + +/obj/effect/decal/warning_stripes/green/hollow + icon_state = "12" + + +/obj/effect/decal/warning_stripes/white + icon_state = "14" + +/obj/effect/decal/warning_stripes/white/partial + icon_state = "13" + +/obj/effect/decal/warning_stripes/white/hollow + icon_state = "15" + + +/obj/effect/decal/warning_stripes/blue + icon_state = "17" + +/obj/effect/decal/warning_stripes/blue/partial + icon_state = "16" + +/obj/effect/decal/warning_stripes/blue/hollow + icon_state = "18" \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b284086a393..c52ab34827c 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -64,6 +64,7 @@ sleep(1) new /obj/item/clothing/mask/breath( src ) new /obj/item/weapon/tank/emergency_oxygen( src ) + new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src ) return /obj/item/weapon/storage/box/engineer/ @@ -73,6 +74,7 @@ sleep(1) new /obj/item/clothing/mask/breath( src ) new /obj/item/weapon/tank/emergency_oxygen/engi( src ) + new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src ) return diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 684c01bc226..f42ea800745 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -95,7 +95,8 @@ item_state = "syringe_kit" w_class = 3 max_w_class = 2 - storage_slots = 6 + max_combined_w_class = 20 + storage_slots = 12 req_access = list(access_captain) icon_locked = "medalbox+l" icon_closed = "medalbox" diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index c48e3dd6661..00cfb31e24a 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -145,7 +145,7 @@ w_class = 2.0 force = 4.0 distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) + volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) New() @@ -197,4 +197,23 @@ ..() if(air_contents.nitrogen < 10) usr << text("\red The meter on the [src.name] indicates you are almost out of air!") - //playsound(usr, 'sound/effects/alert.ogg', 50, 1) + //playsound(usr, 'sound/effects/alert.ogg', 50, 1) + + +/obj/item/weapon/tank/emergency_oxygen/vox + name = "vox specialized nitrogen tank" + desc = "A high-tech nitrogen tank designed specifically for Vox." + icon_state = "emergency_vox" + item_state = "emergency_vox" + icon_override = 'icons/mob/in-hand/tools.dmi' + volume = 25 + + + New() + ..() + src.air_contents.oxygen -= (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + src.air_contents.nitrogen = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + // + src.air_contents.update_values() + + return \ No newline at end of file diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index 3877094138f..84b688d5a4e 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -57,3 +57,18 @@ machine_name = "AutoDrobe" icon_state = "refill_costume" charges = 19// of 58 + +/obj/item/weapon/vending_refill/hatdispenser + machine_name = "hat" + icon_state = "refill_costume" + charges = 18// of 56 + +/obj/item/weapon/vending_refill/suitdispenser + machine_name = "suit" + icon_state = "refill_costume" + charges = 68// of 206 + +/obj/item/weapon/vending_refill/shoedispenser + machine_name = "shoe" + icon_state = "refill_costume" + charges = 30// of 91 \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 260b7961b13..13d501d461a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -312,7 +312,7 @@ var/id = null New() - new /obj/item/clothing/under/color/orange( src ) + new /obj/item/clothing/under/color/orange/prison( src ) new /obj/item/clothing/shoes/orange( src ) return diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index a3a768991d0..a5cfcf418ee 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -136,9 +136,9 @@ icon_closed = "orange" /obj/structure/closet/wardrobe/orange/New() - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/orange(src) + new /obj/item/clothing/under/color/orange/prison(src) + new /obj/item/clothing/under/color/orange/prison(src) + new /obj/item/clothing/under/color/orange/prison(src) new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/orange(src) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 37d9a2ed417..bdd8255e7f4 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1025,7 +1025,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(W, slot_wear_id) if("blue wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) @@ -1037,7 +1037,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) if("red wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) @@ -1049,7 +1049,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) if("marisa wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 3061098705a..220f70ac6e5 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -171,77 +171,6 @@ else src.DB_species_unlock("Slime People",45) return - if(href_list["KarmaBuy3"]) - var/karma=verify_karma() - switch(href_list["KarmaBuy3"]) - if("1") - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Tajaran Ambassador",30) - return - if("2") - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Unathi Ambassador",30) - return - if("3") - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Skrell Ambassador",30) - return - if("4") - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Diona Ambassador",30) - return - if("5") - if(!is_alien_whitelisted(usr,"Kidan")) - usr << "You need to have unlocked Kidan first!" - return - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Kidan Ambassador",30) - return - if("6") - if(!is_alien_whitelisted(usr,"Slime People")) - usr << "You need to have unlocked Slime People first!" - return - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Slime People Ambassador",30) - return - if("7") - if(!is_alien_whitelisted(usr,"Grey")) - usr << "You need to have unlocked Grey first!" - return - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Grey Ambassador",30) - return - if("8") - if(!is_alien_whitelisted(usr,"Vox")) - usr << "You need to have unlocked Vox first!" - return - if(karma <30) - usr << "You do not have enough karma!" - return - else - src.DB_job_unlock("Vox Ambassador",30) - return switch(href_list["_src_"]) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 09f5db93afe..47d9875c2a9 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -31,7 +31,7 @@ process_med_hud(M,1) /obj/item/clothing/glasses/hud/health_advanced/process_hud(var/mob/M) - process_sec_hud(M,1) + process_med_hud(M,1) /obj/item/clothing/glasses/hud/security diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index f5376520f8b..aa667436c46 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -7,7 +7,7 @@ var/slowdown_active = 2 action_button_name = "Toggle Magboots" icon_action_button = "action_magboots" - species_restricted = list("Skrell","Human","Unathi","Tajaran","Machine","Slime People","Kidan","Grey","Diona") //Vox get their own booties doubt they'd fix on talons anyway. + species_restricted = null /obj/item/clothing/shoes/magboots/attack_self(mob/user) if(src.magpulse) diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 5b7aa5362ca..7bf3efb8b97 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -1,3 +1,15 @@ +/obj/item/clothing/under/color + desc = "A standard issue colored jumpsuit. Variety is the spice of life!" + +/obj/item/clothing/under/color/random/New() + ..() + var/list/excluded = list(/obj/item/clothing/under/color/random, /obj/item/clothing/under/color, /obj/item/clothing/under/color/blackf, /obj/item/clothing/under/color/blue/dodgeball, /obj/item/clothing/under/color/orange/prison, /obj/item/clothing/under/color/red/dodgeball) + var/obj/item/clothing/under/color/C = pick(typesof(/obj/item/clothing/under/color) - excluded) + name = initial(C.name) + icon_state = initial(C.icon_state) + item_state = initial(C.item_state) + _color = initial(C._color) + /obj/item/clothing/under/color/black name = "black jumpsuit" icon_state = "black" @@ -31,6 +43,7 @@ /obj/item/clothing/under/color/grey name = "grey jumpsuit" + desc = "A tasteful grey jumpsuit that reminds you of the good old days." icon_state = "grey" item_state = "gy_suit" _color = "grey" @@ -38,6 +51,14 @@ species_fit = list("Vox") /obj/item/clothing/under/color/orange + name = "orange jumpsuit" + desc = "Don't wear this near paranoid security officers" + icon_state = "orange" + item_state = "o_suit" + _color = "orange" + flags = FPRINT | TABLEPASS | ONESIZEFITSALL + +/obj/item/clothing/under/color/orange/prison name = "orange jumpsuit" desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "orange" @@ -49,6 +70,7 @@ /obj/item/clothing/under/color/pink name = "pink jumpsuit" + desc = "Just looking at this makes you feel fabulous." icon_state = "pink" item_state = "p_suit" _color = "pink" @@ -84,78 +106,78 @@ icon_state = "psyche" _color = "psyche" -/obj/item/clothing/under/lightblue +/obj/item/clothing/under/color/lightblue name = "lightblue" desc = "lightblue" icon_state = "lightblue" _color = "lightblue" -/obj/item/clothing/under/aqua +/obj/item/clothing/under/color/aqua name = "aqua" desc = "aqua" icon_state = "aqua" _color = "aqua" flags = FPRINT | TABLEPASS | ONESIZEFITSALL -/obj/item/clothing/under/purple +/obj/item/clothing/under/color/purple name = "purple" desc = "purple" icon_state = "purple" item_state = "p_suit" _color = "purple" -/obj/item/clothing/under/lightpurple +/obj/item/clothing/under/color/lightpurple name = "lightpurple" desc = "lightpurple" icon_state = "lightpurple" _color = "lightpurple" -/obj/item/clothing/under/lightgreen +/obj/item/clothing/under/color/lightgreen name = "lightgreen" desc = "lightgreen" icon_state = "lightgreen" _color = "lightgreen" -/obj/item/clothing/under/lightblue +/obj/item/clothing/under/color/lightblue name = "lightblue" desc = "lightblue" icon_state = "lightblue" _color = "lightblue" -/obj/item/clothing/under/lightbrown +/obj/item/clothing/under/color/lightbrown name = "lightbrown" desc = "lightbrown" icon_state = "lightbrown" _color = "lightbrown" flags = FPRINT | TABLEPASS | ONESIZEFITSALL -/obj/item/clothing/under/brown +/obj/item/clothing/under/color/brown name = "brown" desc = "brown" icon_state = "brown" _color = "brown" flags = FPRINT | TABLEPASS -/obj/item/clothing/under/yellowgreen +/obj/item/clothing/under/color/yellowgreen name = "yellowgreen" desc = "yellowgreen" icon_state = "yellowgreen" _color = "yellowgreen" -/obj/item/clothing/under/darkblue +/obj/item/clothing/under/color/darkblue name = "darkblue" desc = "darkblue" icon_state = "darkblue" _color = "darkblue" flags = FPRINT | TABLEPASS | ONESIZEFITSALL -/obj/item/clothing/under/lightred +/obj/item/clothing/under/color/lightred name = "lightred" desc = "lightred" icon_state = "lightred" _color = "lightred" -/obj/item/clothing/under/darkred +/obj/item/clothing/under/color/darkred name = "darkred" desc = "darkred" icon_state = "darkred" diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index 8eaf1c3ee7b..431e1a0d89d 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -1,10 +1,9 @@ /proc/EquipRacialItems(mob/living/carbon/human/M) if(M.species.name == "Vox" || M.species.name == "Vox Armalis") - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(M), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(M), slot_back) - M << "\blue You are now running on nitrogen internals from the [M.back] in your suit storage. Your species finds oxygen toxic, so you must breathe nitrogen only." - M.internal = M.back + M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/vox(M), slot_l_hand) + M << "\blue You are now running on nitrogen internals from your [M.l_hand]. Your species finds oxygen toxic, so you must breathe nitrogen only." + M.internal = M.l_hand if (M.internals) M.internals.icon_state = "internal1" diff --git a/code/modules/mob/living/carbon/_defines.dm b/code/modules/mob/living/carbon/_defines.dm index 10285db54df..aa8fa28c131 100644 --- a/code/modules/mob/living/carbon/_defines.dm +++ b/code/modules/mob/living/carbon/_defines.dm @@ -1,9 +1,9 @@ //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_MAX_OXYLOSS 3 //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_MAX_OXYLOSS ( (last_tick_duration) /5) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 100HP to get through, so (1/3)*last_tick_duration per second. Breaths however only happen every 4 ticks. #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_2 3 //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 #define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 046fad8d152..3353b07b6dd 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -377,7 +377,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc var/datum/gas_mixture/breath // HACK NEED CHANGING LATER - if(health < config.health_threshold_crit && !reagents.has_reagent("inaprovaline")) + if(health < config.health_threshold_crit) losebreath++ if(losebreath>0) //Suffocating so do not take a breath @@ -487,6 +487,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return 0 if(!breath || (breath.total_moles() == 0) || suiciding) + if(reagents.has_reagent("inaprovaline")) + return if(suiciding) adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster failed_last_breath = 1 @@ -1672,7 +1674,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc proc/handle_decay() var/decaytime = world.time - timeofdeath - + if(species.flags & IS_SYNTHETIC) return @@ -1687,7 +1689,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(decaytime > 18000 && decaytime <= 27000)//45 minutes for decaylevel4 -- skeleton decaylevel = 3 - + if(decaytime > 27000) decaylevel = 4 makeSkeleton() @@ -1697,7 +1699,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc for(var/mob/living/carbon/human/H in range(decaylevel, src)) if(prob(5)) if(airborne_can_reach(get_turf(src), get_turf(H))) - if(istype(loc,/obj/item/bodybag)) + if(istype(loc,/obj/item/bodybag)) return var/obj/item/clothing/mask/M = H.wear_mask if(M && (M.flags & MASKCOVERSMOUTH)) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 8e0373536db..385a38fcf5a 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -24,7 +24,8 @@ "Cat" = "cat", "Mouse" = "mouse", "Monkey" = "monkey", - "Corgi" = "corgi" + "Corgi" = "corgi", + "Fox" = "fox" ) var/global/list/possible_say_verbs = list( @@ -33,7 +34,7 @@ "Beep" = list("beeps","beeps loudly","boops"), "Chirp" = list("chirps","chirrups","cheeps"), "Feline" = list("purrs","yowls","meows"), - "Canine" = list("barks","growls","whines") + "Canine" = list("yaps","barks","growls") ) diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 940c8b155ef..54aac02d952 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -146,7 +146,7 @@ owner.drip(10) if(prob(4)) spawn owner.emote("me", 1, "gasps for air!") - owner.losebreath += 15 + owner.losebreath += 5 /datum/organ/internal/lungs/robotic damagelevel = 0.8 diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index b2147e6a047..0c6668406d3 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -70,19 +70,18 @@ /obj/item/weapon/reagent_containers/hypospray/autoinjector name = "emergency autoinjector" - desc = "A potent mix of pain killers and muscle stimulants." + desc = "A rapid and safe way to stabilize patients in critical condition for personnel without advanced medical knowledge." icon_state = "autoinjector" item_state = "autoinjector" - amount_per_transfer_from_this = 5 - possible_transfer_amounts = list(5) - volume = 5 + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(10) + volume = 10 var/emagged = 0 /obj/item/weapon/reagent_containers/hypospray/autoinjector/New() ..() reagents.remove_reagent("doctorsdelight", 30) - reagents.add_reagent("tramadol", 4) - reagents.add_reagent("hyperzine", 1) + reagents.add_reagent("inaprovaline", 10) update_icon() return diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 13a90e1ab2d..04d60ab38aa 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -42,7 +42,7 @@ user.visible_message("\red [user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s throat wth \the [tool]!" ) affected.createwound(CUT, 60) - target.losebreath += 10 + target.losebreath += 4 /datum/surgery_step/face/mend_vocal allowed_tools = list( @@ -70,7 +70,7 @@ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!", \ "\red Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!") - target.losebreath += 10 + target.losebreath += 4 /datum/surgery_step/face/fix_face allowed_tools = list( diff --git a/code/unused/computer3/computers/communications.dm b/code/unused/computer3/computers/communications.dm index 23b2540ade3..d0ca19b73ec 100644 --- a/code/unused/computer3/computers/communications.dm +++ b/code/unused/computer3/computers/communications.dm @@ -317,6 +317,7 @@ if(STATE_CANCELSHUTTLE) dat = confirm_menu("cancel the shuttle","cancelshuttle2") if(STATE_MESSAGELIST) + dat += "\[ Back \]
" dat += "Messages:" for(var/i = 1; i<=messagetitle.len; i++) dat += "
[messagetitle[i]]" diff --git a/icons/effects/warning_stripes.dmi b/icons/effects/warning_stripes.dmi index a0cf5e32447..4970e39db5f 100644 Binary files a/icons/effects/warning_stripes.dmi and b/icons/effects/warning_stripes.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 213f492add0..17e22407296 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/in-hand/tools.dmi b/icons/mob/in-hand/tools.dmi index 963efda7050..3daff54c89e 100644 Binary files a/icons/mob/in-hand/tools.dmi and b/icons/mob/in-hand/tools.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index ad78a5a08aa..2e5468640ea 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi index 4edcf7d8665..954088bfa7a 100644 Binary files a/icons/mob/pai.dmi and b/icons/mob/pai.dmi differ diff --git a/icons/obj/tank.dmi b/icons/obj/tank.dmi index 6c7175948fe..7ae00b2092f 100644 Binary files a/icons/obj/tank.dmi and b/icons/obj/tank.dmi differ diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 9050acacb72..382f08b3a9b 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -897,7 +897,7 @@ "arm" = (/obj/machinery/door_control{desc = "A remote control switch for the brig foyer."; id = "BrigFoyer"; name = "Brig Foyer Doors"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = -35; range = 10},/obj/machinery/door_control{desc = "A remote control switch for the brig doors leading to cells 1-4."; id = "BrigEast"; name = "Brig Cells 1-4 Hallway Doors"; normaldoorcontrol = 1; pixel_x = 5; pixel_y = -25; range = 10},/obj/machinery/door_control{desc = "A remote control switch for the brig doors leading to cells 5 and 6."; id = "BrigWest"; name = "Brig Cells 5-6 Hallway Doors"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = -25; range = 20},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = 30; pixel_y = 0},/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/lobby) "arn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C) "aro" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C) -"arp" = (/obj/machinery/door/window/brigdoor{dir = 2; name = "Secure Door"; req_access_txt = "61"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{pixel_x = 28},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/security/prison/cell_block/C) +"arp" = (/obj/machinery/door/window/brigdoor{dir = 2; name = "Secure Door"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{pixel_x = 28},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/security/prison/cell_block/C) "arq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C) "arr" = (/obj/item/weapon/storage/secure/safe{pixel_x = -23},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "ars" = (/obj/structure/stool,/turf/simulated/floor/carpet,/area/security/detectives_office) @@ -909,10 +909,10 @@ "ary" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "arz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall/r_wall,/area) "arA" = (/obj/machinery/light{dir = 1},/obj/structure/closet/wardrobe/grey,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) -"arB" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) +"arB" = (/obj/machinery/camera{c_tag = "Locker Room"; network = list("SS13")},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/closet/wardrobe/black,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) "arC" = (/obj/structure/closet/wardrobe/xenos,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) "arD" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) -"arE" = (/obj/machinery/washing_machine,/obj/machinery/camera{c_tag = "Locker Room"; network = list("SS13")},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) +"arE" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) "arF" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) "arG" = (/obj/machinery/washing_machine,/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/crew_quarters/locker) "arH" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor{dir = 1; req_access_txt = "63"},/turf/simulated/floor,/area/security/prisonershuttle) @@ -10246,7 +10246,7 @@ "dPb" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/research_outpost/power) "dPc" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/research_outpost/power) "dPd" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/research_outpost/power) -"dPe" = (/turf/simulated/floor,/area/research_outpost/longtermstorage) +"dPe" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/simulated/floor,/area/research_outpost/longtermstorage) "dPf" = (/turf/simulated/mineral,/area/research_outpost/power) "dPg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "dPh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) @@ -12546,6 +12546,7 @@ "eHn" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/dirt,/obj/machinery/light,/turf/simulated/floor,/area/engiestation) "eHo" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/engiestation) "eHp" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor,/area/engiestation) +"eHq" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless/asteroid,/area/research_outpost/power) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12633,7 +12634,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaaaaafoaabaiNaiOaiOaiOaiOaiPaiQaiRaiSaiSaiSaiSaiTaaaafoaaaafpamaanGanGanGamaaaaaaaaaiaaqaoqaoraaJaaJamLamLaaqaaqaaqaaqaosaotaaqaaqaaqaouaovaowaouaaqaaqaaqaoxaoyaaqaozaoAaaqaoBaoyaaqaaqaaqaoCaoDaaqaaJaoEaoFaoGaoHaaqamwaokaoIaaiaaiaaiaoJaoKaoLaaiaoMaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafpaabaoNaoOaoOaoOaoOaoPaoQaoRaoSaoSaoSaoSaoTaabafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZaaaalZalZalZalZalZalZalZalZalZaaaalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaafoaabajrajrajrajrajraabaoUaabajrajrajrajrajraabafoaaaafXaoVaoWanGanGamaaaaaaaaaiaoXaoYaoZaiZapbamLapcaaqapdapeapfapgaphapiapjapkaplapmapnapoappapqapiaprapsaptapuapvapwapxapsaaqapyapzapAapBaaqapCapDapEapFapGapHamwaokapIapJapKapLapMapMapNaaiapOaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafpaabapPapPapPapPapPaabapQaabapPapPapPapPapPaabafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZaaaalZalZalZalZalZalZalZalZalZaaaalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaafoaaaaabaabaabaabaabaaaapRapSapSapSapSapSapTaabafoaaaafpamaapUapVapWapXaaaaaaaaiapYapZaqaaqbaaJaqcamLaaqaqdaqeaqfaqgaqhaqiaqjaqkaqlaqmaqnaqoaqkaqpaqqaqraqsaqtaquaqvaqwaqxaqyaqzaqAaqBaqCaqDaaqaqEaqFaqFaqGaqFaqHamwaokanAanAanAanAaqIanAaqJaqKaqLaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaaaaaaaaafoaaaaaaaaaaabaaaaaaaabapQaaaaaaaaaaabaaaaaaaaaafoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaafoafoafoafoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqMaaaafoaaaafpaqNaqOaqPaqPamaaaaaaaaaiapYaqQaqRaqSaaJaqTaqUaaqaqVaqWaqXaqYaqZaraarbarcardarearfargarhariaraarjaqyarkarlarmarkaqxaqyaaqarnaroarparqaaqarrarsaqFaqGaqFartamwaruarvarwarxarwarvaryacfarzaaqaaiarBarAarDarCarEarFarGarFarFaaiaaaaaaaaaafpaabaooaooaooaooaooaabapQaabaooaooaooaooaooaabafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaafoafoafoafoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqMaaaafoaaaafpaqNaqOaqPaqPamaaaaaaaaaiapYaqQaqRaqSaaJaqTaqUaaqaqVaqWaqXaqYaqZaraarbarcardarearfargarhariaraarjaqyarkarlarmarkaqxaqyaaqarnaroarparqaaqarrarsaqFaqGaqFartamwaruarvarwarxarwarvaryacfarzaaqaaiarEarAarDarCarBarFarGarFarFaaiaaaaaaaaaafpaabaooaooaooaooaooaabapQaabaooaooaooaooaooaabafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqMaaaaaaaaaafpamaaqPaqPaqPamaaaaaaaaaiaaiabnaaiaaiafjaaiarHaaiaaqaaqaaqarIarJaaqaaqaaqaaqarKarLaaqaaqaaqaaiarMarNarOarParQarRaqxarSaaqarTarUarVadEabIarXarYarZadzaqFasaamwasbascasdaseasfasganAaaiashasiaaiasjaskaslasmasmasmasmasmasnaaiaaaaaaaaaafpaabaoNaoOaoOaoOaoOaoPaoQaoRaoSaoSaoSaoSaoTaabafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaiaaiaaiaaaaaaaaaaaaaaaaqMaaaaaaaaaafoamaaqPaqPaqPamaaaiaaiaaiasoaspasqasrassastasuaaiasvapeapfapgaphapiaswapkasxasyaszasAasBasCapiasDasEasFasGasHasHasIasJaaqasKasLasMasNaaqasOasPasQaqGaqFasRamwasbaqIascascascasSasTasUasVasWaaiasXasYahwataatbatcatdatdateaaiaaaaaaaaaafpaabapPapPapPapPapPaabapQaabapPapPapPapPapPaabafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanFanFanFanFanFanFanFanFanFanFanFanFanFanFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiatfatgathatiatjaaiaaaaaaaaaaaaaaaaqMaaaaaaaabafpamaaqPaqPaqPatkamIatlamKatmatnatoatpatqatoatraaiaqdatsattatuatvatwatxatyatzatAatBatCatDatEatFatGatHatHatIatHatHatJatKatLatMatNatOatPaaqatQatRatSatTatUatVamwasbatWatXatXatXatYatZauaaubaucaaiaudaueaufataataataataataataaaiaaaaaaaaaamFaaaaaaaaaaabaaaaaaaaaapQaaaaaaaaaaabaaaaaaaaaafoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZalZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -13635,7 +13636,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMKdMLdMMdMNdMOdMPdMQaabaabdKkdKkdJadJadKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdMRdMRdMSaabdJQaaaaabaabaabaabaabdJadJLdJLdJLdJLdJLdMTdMUdJLdKEdKEdMVdMWdMXdMadMYdMZdNadNbdNcdNddMadNedNfdNgdNhdNidNjdNkdKLdNldNmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJbdJbdJbdJbdJbaaadJbdJbdJbdJbdJbaaadJbdJbdJbdJbdJbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadNndMjdNodNpdNqdMmdNrdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdMRdMRdMRaaaaaadJQdNsdNsdNsdNsdNsdNsdNsdKbdNtdNudNvdNwdNxdNydNzdNAdNBdNCdNDdNEdMadNFdNGdNHdNIdNJdNKdNLdNMdNNdNOdNOdNOdNPdNQdNRdNSdNTdNTdNUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJbdJbdJbdJbdJbaaadJbdJbdJbdJbdJbaaadJbdJbdJbdJbdJbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabdNVdNWdNXdNrdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdMRaaaaaadJQdNsdNsdNsdNsdNsdNsdNsdNYdNZdOadObdOcdOddOedOfdOgdOhdOidOjdOkdOldOmdOndOodOpdOqdOrdOsdOtdOudNOdZqdOwdOxdOydNOdOzdNmdNmdNmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJbdJbdJbdJbdJbaaaaaaaaaaaaaaaaaaaaadJbdJbdJbdJbdJbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabdOAdOBdOCdODdNrdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkaaaaaaaaaaaadJQdNsdNsdNsdNsdNsdNsdNsdOEdOFdNudOGdOHdOIdOJdOKdOLdOMdJLdONdOOdOPdOQdORdSFdOTdSDdOVdMadOWdOXdOYdOZdOZdPadPbdPcdPddPDdPfdPfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabdOAdOBdOCdODdNrdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkaaaaaaaaaaaadJQdNsdNsdNsdNsdNsdNsdNsdOEdOFdNudOGdOHdOIdOJdOKdOLdOMdJLdONdOOdOPdOQdORdSFdOTdSDdOVdMadOWdOXdOYdOZdOZdPadPbdPcdPdeHqdPfdPfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabdPgdPhdPidNrdPjdPkdNrdNrdNrdNrdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkaaaaaaaaaaaaaaaaaadJQdNsdNsdNsdNsdNsdNsdNsdPldOFdNudOGdOHdPmdPndOKdPodPpdJLdPqdPrdMadPsdMadMadMadMadPtdMadPudPvdNOdPwdPxdPydPzdPAdPBdPCdPDdPDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdPEdPFdPGdPHdPIdPJdKPdMPdPKdNrdPLdPMdNrdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkaaaaaaaaaaaaaaaaaadJQdNsdNsdNsdNsdNsdNsdNsdKbdOFdNudTRdOHdPNdPOdOKdPQdPRdJLdPSdPTdTTdPVeGHdPXdPYdMadPZdQadQbdQcdQddQedQfdQgdQhdQidPBdPfdPfdPfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQjdQkdPFdQldQmdQndQodQpdPKdQqdPMdQrdPLdNrdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkaaaaaaaaaaaaaaaaaadQsdQtdQudQvdQwdQxdQudQydQzdQAdQBdKbdQCdQDdJLdJLdJLdJLdJLdQEdQFdQGdPVdQHdPXdQIdMadQJdQKdQLdQMdQNdQOdQPdSGdQRdQSdQTdQUdJLdQVdKzdJAdJAdJAdJAdJAdJAdJBdQWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa