From 954d0dadfab0c964544920cc688a17b824f327d0 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Fri, 12 Feb 2016 00:32:21 -0500 Subject: [PATCH 01/52] Prize Counter WIP commit --- code/game/machinery/computer/arcade.dm | 2 +- code/game/objects/items/toys.dm | 241 ++++++------ .../objects/items/weapons/gift_wrappaper.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 13 +- .../objects/items/weapons/storage/wallets.dm | 65 +++- .../stool_bed_chair_nest/wheelchair.dm | 61 ++- code/modules/arcade/arcade_prize.dm | 71 +++- code/modules/arcade/prize_counter.dm | 197 ++++++++++ code/modules/arcade/prize_datums.dm | 346 ++++++++++++++++++ icons/obj/arcade.dmi | Bin 11361 -> 12445 bytes icons/obj/storage.dmi | Bin 78375 -> 77683 bytes icons/obj/wallets.dmi | Bin 0 -> 1957 bytes paradise.dme | 2 + 13 files changed, 865 insertions(+), 135 deletions(-) create mode 100644 code/modules/arcade/prize_counter.dm create mode 100644 code/modules/arcade/prize_datums.dm create mode 100644 icons/obj/wallets.dmi diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b2af98e1b5a..ff62e54d06a 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -18,7 +18,7 @@ /obj/item/weapon/storage/fancy/crayons = 2, /obj/item/toy/spinningtoy = 2, /obj/item/toy/crossbow/tommygun = 2, - /obj/random/prize = 5, + /obj/random/mech = 5, /obj/item/toy/nuke = 2, /obj/item/toy/cards/deck = 2, /obj/random/carp_plushie = 2, diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 6a3493fc0ea..4f818d7c8b7 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -141,89 +141,87 @@ attack_verb = list("attacked", "struck", "hit") var/bullets = 5 - examine(mob/user) - ..(user) - if (bullets) - user << "\blue It is loaded with [bullets] foam darts!" +/obj/item/toy/crossbow/examine(mob/user) + ..(user) + if (bullets) + user << "\blue It is loaded with [bullets] foam darts!" - attackby(obj/item/I as obj, mob/user as mob, params) - if(istype(I, /obj/item/toy/ammo/crossbow)) - if(bullets <= 4) - user.drop_item() - qdel(I) - bullets++ - user << "\blue You load the foam dart into the crossbow." - else - usr << "\red It's already fully loaded." +/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob, params) + if(istype(I, /obj/item/toy/ammo/crossbow)) + if(bullets <= 4) + user.drop_item() + qdel(I) + bullets++ + user << "\blue You load the foam dart into the crossbow." + else + usr << "\red It's already fully loaded." - afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!isturf(target.loc) || target == user) return - if(flag) return +/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + if(!isturf(target.loc) || target == user) return + if(flag) return - if (locate (/obj/structure/table, src.loc)) - return - else if (bullets) - var/turf/trg = get_turf(target) - var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) - bullets-- - D.icon_state = "foamdart" - D.name = "foam dart" - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) + if (locate (/obj/structure/table, src.loc)) + return + else if (bullets) + var/turf/trg = get_turf(target) + var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) + bullets-- + D.icon_state = "foamdart" + D.name = "foam dart" + playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - for(var/i=0, i<6, i++) - if (D) - if(D.loc == trg) break - step_towards(D,trg) + for(var/i=0, i<6, i++) + if (D) + if(D.loc == trg) break + step_towards(D,trg) - for(var/mob/living/M in D.loc) - if(!istype(M,/mob/living)) continue - if(M == user) continue - D.visible_message("[M] was hit by the foam dart!") - new /obj/item/toy/ammo/crossbow(M.loc) - qdel(D) - return - - for(var/atom/A in D.loc) - if(A == user) continue - if(A.density) - new /obj/item/toy/ammo/crossbow(A.loc) - qdel(D) - - sleep(1) - - spawn(10) - if(D) - new /obj/item/toy/ammo/crossbow(D.loc) + for(var/mob/living/M in D.loc) + if(!istype(M,/mob/living)) continue + if(M == user) continue + D.visible_message("[M] was hit by the foam dart!") + new /obj/item/toy/ammo/crossbow(M.loc) qdel(D) + return - return - else if (bullets == 0) - user.Weaken(5) - user.visible_message("[] realized they were out of ammo and starting scrounging for some!") + for(var/atom/A in D.loc) + if(A == user) continue + if(A.density) + new /obj/item/toy/ammo/crossbow(A.loc) + qdel(D) + sleep(1) + spawn(10) + if(D) + new /obj/item/toy/ammo/crossbow(D.loc) + qdel(D) - attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) + return + else if (bullets == 0) + user.Weaken(5) + user.visible_message("[] realized they were out of ammo and started scrounging for some!") + +/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) + src.add_fingerprint(user) // ******* Check - if (src.bullets > 0 && M.lying) + if (src.bullets > 0 && M.lying) - for(var/mob/O in viewers(M, null)) - if(O.client) - O.show_message(text("[] casually lines up a shot with []'s head and pulls the trigger!", user, M), 1, "You hear the sound of foam against skull.", 2) - O.show_message(text("\red [] was hit in the head by the foam dart!", M), 1) + for(var/mob/O in viewers(M, null)) + if(O.client) + O.show_message(text("[] casually lines up a shot with []'s head and pulls the trigger!", user, M), 1, "You hear the sound of foam against skull.", 2) + O.show_message(text("\red [] was hit in the head by the foam dart!", M), 1) - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - new /obj/item/toy/ammo/crossbow(M.loc) - src.bullets-- - else if (M.lying && src.bullets == 0) - for(var/mob/O in viewers(M, null)) - if (O.client) O.show_message(text("[] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", user, M), 1, "You hear someone fall.", 2) - user.Weaken(5) - return + playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) + new /obj/item/toy/ammo/crossbow(M.loc) + src.bullets-- + else if (M.lying && src.bullets == 0) + for(var/mob/O in viewers(M, null)) + if (O.client) O.show_message(text("[] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", user, M), 1, "You hear someone fall.", 2) + user.Weaken(5) + return /obj/item/toy/ammo/crossbow name = "foam dart" @@ -400,15 +398,15 @@ icon_state = "snappop" w_class = 1 - throw_impact(atom/hit_atom) - ..() - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("\red The [src.name] explodes!","\red You hear a snap!") - playsound(src, 'sound/effects/snap.ogg', 50, 1) - qdel(src) +/obj/item/toy/snappop/throw_impact(atom/hit_atom) + ..() + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + new /obj/effect/decal/cleanable/ash(src.loc) + src.visible_message("\red The [src.name] explodes!","\red You hear a snap!") + playsound(src, 'sound/effects/snap.ogg', 50, 1) + qdel(src) /obj/item/toy/snappop/Crossed(H as mob|obj) if((ishuman(H))) //i guess carp and shit shouldn't set them off @@ -429,13 +427,13 @@ /* * Mech prizes */ -/obj/item/toy/prize +/obj/item/toy/mech icon = 'icons/obj/toy.dmi' icon_state = "ripleytoy" var/cooldown = 0 //all credit to skasi for toy mech fun ideas -/obj/item/toy/prize/attack_self(mob/user as mob) +/obj/item/toy/mech/attack_self(mob/user as mob) if(cooldown < world.time - 8) user << "You play with [src]." playsound(user, 'sound/mecha/mechstep.ogg', 20, 1) @@ -450,46 +448,46 @@ return ..() -/obj/random/prize +/obj/random/mech name = "Random Mech Prize" desc = "This is a random prize" icon = 'icons/obj/toy.dmi' icon_state = "ripleytoy" -/obj/random/prize/item_to_spawn() +/obj/random/mech/item_to_spawn() return pick(subtypesof(/obj/item/toy/prize)) //exclude the base type. -/obj/item/toy/prize/ripley +/obj/item/toy/mech/ripley name = "toy ripley" desc = "Mini-Mecha action figure! Collect them all! 1/11." -/obj/item/toy/prize/fireripley +/obj/item/toy/mech/fireripley name = "toy firefighting ripley" desc = "Mini-Mecha action figure! Collect them all! 2/11." icon_state = "fireripleytoy" -/obj/item/toy/prize/deathripley +/obj/item/toy/mech/deathripley name = "toy deathsquad ripley" desc = "Mini-Mecha action figure! Collect them all! 3/11." icon_state = "deathripleytoy" -/obj/item/toy/prize/gygax +/obj/item/toy/mech/gygax name = "toy gygax" desc = "Mini-Mecha action figure! Collect them all! 4/11." icon_state = "gygaxtoy" -/obj/item/toy/prize/durand +/obj/item/toy/mech/durand name = "toy durand" desc = "Mini-Mecha action figure! Collect them all! 5/11." icon_state = "durandprize" -/obj/item/toy/prize/honk +/obj/item/toy/mech/honk name = "toy H.O.N.K." desc = "Mini-Mecha action figure! Collect them all! 6/11." icon_state = "honkprize" -/obj/item/toy/prize/marauder +/obj/item/toy/mech/marauder name = "toy marauder" desc = "Mini-Mecha action figure! Collect them all! 7/11." icon_state = "marauderprize" @@ -499,17 +497,17 @@ desc = "Mini-Mecha action figure! Collect them all! 8/11." icon_state = "seraphprize" -/obj/item/toy/prize/mauler +/obj/item/toy/mech/mauler name = "toy mauler" desc = "Mini-Mecha action figure! Collect them all! 9/11." icon_state = "maulerprize" -/obj/item/toy/prize/odysseus +/obj/item/toy/mech/odysseus name = "toy odysseus" desc = "Mini-Mecha action figure! Collect them all! 10/11." icon_state = "odysseusprize" -/obj/item/toy/prize/phazon +/obj/item/toy/mech/phazon name = "toy phazon" desc = "Mini-Mecha action figure! Collect them all! 11/11." icon_state = "phazonprize" @@ -923,54 +921,47 @@ obj/item/toy/cards/deck/syndicate/black var/timeleft = (cooldown - world.time) user << "Nothing happens, and '[round(timeleft/10)]' appears on a small display." - -/obj/item/toy/therapy_red - name = "red therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is red." +/obj/item/toy/therapy + name = "therapy doll" + desc = "A toy for therapeutic and recreational purposes." icon = 'icons/obj/weapons.dmi' icon_state = "therapyred" + item_state = "egg4" // It's the red egg in items_left/righthand + w_class = 1 + item_color = "red" + +/obj/item/toy/therapy/New() + ..() + icon_state = "therapy[item_color]" + UpdateDesc() + +/obj/item/toy/therapy/proc/UpdateDesc() + name = "[item_color] therapy doll" + desc += " This one is [item_color]." + +/obj/item/toy/therapy/red + item_color = "red" item_state = "egg4" // It's the red egg in items_left/righthand - w_class = 1 -/obj/item/toy/therapy_purple - name = "purple therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is purple." - icon = 'icons/obj/weapons.dmi' - icon_state = "therapypurple" +/obj/item/toy/therapy/purple + item_color = "purple" item_state = "egg1" // It's the magenta egg in items_left/righthand - w_class = 1 -/obj/item/toy/therapy_blue - name = "blue therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is blue." - icon = 'icons/obj/weapons.dmi' - icon_state = "therapyblue" +/obj/item/toy/therapy/blue + item_color = "blue" item_state = "egg2" // It's the blue egg in items_left/righthand - w_class = 1 -/obj/item/toy/therapy_yellow - name = "yellow therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is yellow." - icon = 'icons/obj/weapons.dmi' - icon_state = "therapyyellow" +/obj/item/toy/therapy/yellow + item_color = "yellow" item_state = "egg5" // It's the yellow egg in items_left/righthand - w_class = 1 -/obj/item/toy/therapy_orange - name = "orange therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is orange." - icon = 'icons/obj/weapons.dmi' - icon_state = "therapyorange" +/obj/item/toy/therapy/orange + item_color = "orange" item_state = "egg4" // It's the red one again, lacking an orange item_state and making a new one is pointless - w_class = 1 -/obj/item/toy/therapy_green - name = "green therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is green." - icon = 'icons/obj/weapons.dmi' - icon_state = "therapygreen" +/obj/item/toy/therapy/green + item_color = "green" item_state = "egg3" // It's the green egg in items_left/righthand - w_class = 1 /obj/item/weapon/toddler icon_state = "toddler" diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index a24733a3e83..8ca714d7666 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -83,7 +83,7 @@ /obj/item/toy/crossbow, /obj/item/weapon/gun/projectile/revolver/capgun, /obj/item/toy/katana, - /obj/random/prize, + /obj/random/mech, /obj/item/toy/spinningtoy, /obj/item/toy/sword, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 685ddc04466..a898c7cca91 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -673,4 +673,15 @@ new /obj/item/weapon/lipstick/black(src) new /obj/item/weapon/lipstick/green(src) new /obj/item/weapon/lipstick/blue(src) - new /obj/item/weapon/lipstick/white(src) \ No newline at end of file + new /obj/item/weapon/lipstick/white(src) + +/obj/item/weapon/storage/box/foam_darts + name = "Foam Dart Pack" + desc = "Extra ammo for foam dart launchers. Contains 10 darts." + storage_slots = 10 + max_combined_w_class = 10 + +/obj/item/weapon/storage/box/foam_darts/New() + ..() + for(var/i=1; i <= storage_slots; i++) + new /obj/item/toy/ammo/crossbow(src) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 7e483b3ccbf..e34f9687d7e 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -1,7 +1,8 @@ /obj/item/weapon/storage/wallet - name = "wallet" - desc = "It can hold a few small and personal things." + name = "leather wallet" + desc = "Made from genuine leather, it is of the highest quality." storage_slots = 10 + icon = 'icons/obj/wallets.dmi' icon_state = "wallet" w_class = 2 can_hold = list( @@ -94,4 +95,62 @@ if(item2_type) new item2_type(src) if(item3_type) - new item3_type(src) \ No newline at end of file + new item3_type(src) + +////////////////////////////////////// +// Color Wallets // +////////////////////////////////////// + +/obj/item/weapon/storage/wallet/color + name = "cheap wallet" + desc = "A cheap wallet from the arcade." + storage_slots = 5 //smaller storage than normal wallets + +/obj/item/weapon/storage/wallet/color/New() + ..() + if(!item_color) + var/color_wallet = pick(subtypesof(/obj/item/weapon/storage/wallet/color)) + new color_wallet(src.loc) + qdel(src) + return + UpdateDesc() + +/obj/item/weapon/storage/wallet/color/proc/UpdateDesc() + name = "cheap [item_color] wallet" + desc = "A cheap, [item_color] wallet from the arcade." + icon_state = "[item_color]_wallet" + +/obj/item/weapon/storage/wallet/color/update_icon() + if(front_id) + switch(front_id.icon_state) + if("id") + icon_state = "[item_color]_walletid" + return + if("silver") + icon_state = "[item_color]_walletid_silver" + return + if("gold") + icon_state = "[item_color]_walletid_gold" + return + if("centcom") + icon_state = "[item_color]_walletid_centcom" + return + icon_state = "[item_color]_wallet" + +/obj/item/weapon/storage/wallet/color/blue + item_color = "blue" + +/obj/item/weapon/storage/wallet/color/red + item_color = "red" + +/obj/item/weapon/storage/wallet/color/yellow + item_color = "yellow" + +/obj/item/weapon/storage/wallet/color/green + item_color = "green" + +/obj/item/weapon/storage/wallet/color/pink + item_color = "pink" + +/obj/item/weapon/storage/waller/color/brown + item_color = "brown" diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index c456cb9c9a6..1bacc123e01 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -89,4 +89,63 @@ victim.apply_effect(6, STUTTER, 0) victim.take_organ_damage(10) - occupant.visible_message("[occupant] crashed into \the [A]!") \ No newline at end of file + occupant.visible_message("[occupant] crashed into \the [A]!") + +/obj/structure/stool/bed/chair/wheelchair/bike + name = "bicycle" + desc = "Two wheels of FURY!" + //placeholder until i get a bike sprite + icon = 'icons/vehicles/motorcycle.dmi' + icon_state = "motorcycle_4dir" + +/obj/structure/stool/bed/chair/wheelchair/bike/relaymove(mob/user, direction) + if(propelled) + return 0 + + if(!Process_Spacemove(direction) || !has_gravity(src.loc) || !isturf(loc)) //bikes in space. + return 0 + + if(world.time < move_delay) + return + + var/calculated_move_delay + calculated_move_delay = 0 //bikes are infact sport bikes + + if(buckled_mob) + if(buckled_mob.incapacitated()) + unbuckle_mob() //if the rider is incapacitated, unbuckle them (they can't balance so they fall off) + return 0 + + var/mob/living/thedriver = user + var/mob_delay = thedriver.movement_delay() + if(mob_delay > 0) + calculated_move_delay += mob_delay + + if(ishuman(buckled_mob)) + var/mob/living/carbon/human/driver = user + var/obj/item/organ/external/l_hand = driver.get_organ("l_hand") + var/obj/item/organ/external/r_hand = driver.get_organ("r_hand") + if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED))) + calculated_move_delay += 0.5 //I can ride my bike with no handlebars... (but it's slower) + + for(var/organ_name in list("l_leg","r_leg","l_foot","r_foot")) + var/obj/item/organ/external/E = driver.get_organ(organ_name) + if(!E || (E.status & ORGAN_DESTROYED)) + return 0 //Bikes need both feet/legs to work. missing even one makes it so you can't ride the bike + else if(E.status & ORGAN_SPLINTED) + calculated_move_delay += 0.5 + else if(E.status & ORGAN_BROKEN) + calculated_move_delay += 1.5 + + move_delay = world.time + move_delay += calculated_move_delay + + if(!buckled_mob.Move(get_step(buckled_mob, direction), direction)) + loc = buckled_mob.loc //we gotta go back + last_move = buckled_mob.last_move + inertia_dir = last_move + buckled_mob.inertia_dir = last_move + . = 0 + + else + . = 1 \ No newline at end of file diff --git a/code/modules/arcade/arcade_prize.dm b/code/modules/arcade/arcade_prize.dm index 960ead4a0b6..30bb457e196 100644 --- a/code/modules/arcade/arcade_prize.dm +++ b/code/modules/arcade/arcade_prize.dm @@ -1,3 +1,7 @@ +/*Contains: +* Prize balls +* Prize tickets +*/ /obj/item/toy/prizeball name = "prize ball" @@ -5,6 +9,7 @@ icon = 'icons/obj/arcade.dmi' icon_state = "prizeball_1" var/opening = 0 + var/possible_contents = list(/obj/random/carp_plushie, /obj/random/plushie, /obj/random/figure, /obj/item/toy/eight_ball, /obj/item/stack/tickets) /obj/item/toy/prizeball/New() ..() @@ -17,8 +22,68 @@ playsound(src.loc, 'sound/items/bubblewrap.ogg', 30, 1, extrarange = -4, falloff = 10) icon_state = "prizeconfetti" src.color = pick(random_color_list) - var/prize_inside = pick(/obj/random/carp_plushie, /obj/random/plushie, /obj/random/figure, /obj/item/toy/eight_ball) //will add ticket bundles later + var/prize_inside = pick(possible_contents) spawn(10) user.unEquip(src) - new prize_inside(user.loc) - qdel(src) \ No newline at end of file + if(istype(/obj/item/stack)) + var/amount = pick(5, 10, 15, 25, 50) + new prize_inside(user.loc, amount) + else + new prize_inside(user.loc) + qdel(src) + +/obj/item/toy/prizeball/mech + name = "mecha figure capsule" + desc = "Contains one collectible mecha figure!" + possible_contents = list(/obj/random/mech) + +/obj/item/toy/prizeball/carp_plushie + name = "carp plushie capsule" + desc = "Contains one space carp plushie!" + possible_contents = list(/obj/random/carp_plushie) + +/obj/item/toy/prizeball/plushie + name = "animal plushie capsule" + desc = "Contains one cuddly animal plushie!" + possible_contents = list(/obj/random/plushie) + +/obj/item/toy/prizeball/figure + name = "action figure capsule" + desc = "Contains one action figure!" + possible_contents = list(/obj/random/figure) + +/obj/item/toy/prizeball/therapy + name = "therapy doll capsule" + desc = "Contains one squishy therapy doll." + possible_contents = subtypesof(/obj/item/toy/therapy) + +/obj/item/stack/tickets + name = "prize ticket" + desc = "Prize tickets from the arcade. Exchange them for fabulous prizes!" + singular_name = "prize ticket" + icon = 'icons/obj/arcade.dmi' + icon_state = "tickets_1" + force = 1 + throw_force = 1 + throw_speed = 1 + throw_range = 1 + w_class = 1.0 + max_amount = 9999 //Dang that's a lot of tickets + +/obj/item/stack/tickets/New(var/loc, var/amount=null) + ..() + update_icon() + +/obj/item/stack/tickets/attack_self(mob/user as mob) + return + +/obj/item/stack/tickets/update_icon() + var/amount = get_amount() + if((amount >= 75)) + icon_state = "tickets_4" + else if(amount >=25) + icon_state = "tickets_3" + else if(amount >= 4) + icon_state = "tickets_2" + else + icon_state = "tickets_1" \ No newline at end of file diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm new file mode 100644 index 00000000000..a8697956dc2 --- /dev/null +++ b/code/modules/arcade/prize_counter.dm @@ -0,0 +1,197 @@ + +/obj/machinery/prize_counter + name = "Prize Counter" + desc = "A machine which exchanges tickets for a variety of fabulous prizes!" + icon = 'icons/obj/arcade.dmi' + icon_state = "prize_counter-on" + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 40 + var/tickets = 0 + var/prize_tier = 1 //Increased by matter bin rating, unlocks more prize options per tier + +/obj/machinery/prize_counter/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/prize_counter(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/stack/cable_coil(null, 1) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + RefreshParts() + +/obj/machinery/prize_counter/RefreshParts() + for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) + prize_tier = B.rating + +/obj/machinery/prize_counter/proc/UpdateListings() + var/dat = "" + for(var/datum/prize_item/item in global_prizes.prizes) + var/cost_class="affordable" + if(item.cost>tickets) + cost_class="toomuch" + var/itemID = global_prizes.prizes.Find(item) + dat += {" + + + [itemID] + + +

[item.name]

+

[item.desc]

+ + "} + if(prize_tier >= item.tier_unlocked) + dat += {" + + [item.cost] Tickets + + + "} + else + dat += {" + + LOCKED. + + + "} + return dat + +/obj/machinery/prize_counter/attackby(var/obj/item/O as obj, var/mob/user as mob, params) + if(istype(O, /obj/item/stack/tickets)) + var/obj/item/stack/tickets/T = O + tickets += T.amount + qdel(T) + return + if(istype(O, /obj/item/weapon/screwdriver) && anchored) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + panel_open = !panel_open + user << "You [panel_open ? "open" : "close"] the maintenance panel." + update_icon() + return + if(panel_open) + if(istype(O, /obj/item/weapon/wrench)) + default_unfasten_wrench(user, O) + if(component_parts && istype(O, /obj/item/weapon/crowbar)) + default_deconstruction_crowbar(O) + +/obj/machinery/prize_counter/attack_hand(mob/user as mob) + if(..()) + return + interact(user) + +/obj/machinery/prize_counter/interact(mob/user as mob) + user.set_machine(src) + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) + return + + var/dat = {" + + + Arcade Ticket Exchange + + + +

Tickets: [tickets] | Eject Tickets

+

Arcade Ticket Exchange

+

+ Exchange that pile of tickets for a pile of cool prizes! +

+

Available Prizes:

+ + + + + + + + "} + dat += UpdateListings() + dat += {" + +
#Name/DescriptionPrice
+ +"} + user << browse(dat, "window=prize_counter") + onclose(user, "prize_counter") + return + +/obj/machinery/prize_counter/Topic(href, href_list) + if(..()) + return 1 + + src.add_fingerprint(usr) + + if(href_list["eject"]) + print_tickets + + if (href_list["buy"]) + var/itemID = text2num(href_list["buy"]) + var/datum/prize_item/item = global_prizes.prizes[itemID] + var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for [item.cost] tickets?","You sure?","Yes","No") in list("Yes","No") + if(sure=="No") + updateUsrDialog() + return + if(!global_prizes.PlaceOrder(src, itemID)) + usr << "Unable to complete the exchange." + else + usr << "You've successfully purchased the item." + + src.updateUsrDialog() + return + +/obj/machinery/prize_counter/proc/print_tickets() + if(!tickets) + return + if(tickets >= 9999) + new /obj/item/stack/tickets(src.loc, 9999) //max stack size + tickets -= 9999 + print_tickets() + else + new /obj/item/stack/tickets(src.loc, tickets) \ No newline at end of file diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm new file mode 100644 index 00000000000..0b039e45537 --- /dev/null +++ b/code/modules/arcade/prize_datums.dm @@ -0,0 +1,346 @@ + +var/global/datum/prizes/global_prizes = new + +/datum/prizes + var/list/datum/prize_item/prizes = list() + +/datum/prizes/New() + for(var/itempath in subtypesof(/datum/prize_item)) + prizes += new itempath() + +/datum/prizes/proc/PlaceOrder(var/obj/machinery/prize_counter/prize_counter, var/itemID) + if(!prize_counter) + return 0 + var/datum/prize_item/item = global_prizes.prizes[itemID] + if(!item) + return 0 + if(prize_counter.tickets >= item.cost) + item.deliver(prize_counter) + prize_counter.visible_message("Enjoy your prize!") + return 1 + else + prize_counter.visible_message("Not enough tickets!") + return 0 + +////////////////////////////////////// +// /datum/prize_item // +////////////////////////////////////// + +/datum/prize_item + var/name = "Prize" + var/desc = "This shouldn't show up..." + var/typepath = /obj/item/toy/prizeball + var/cost = 0 + var/tier_unlocked = 0 //minimum tier needed to unlock the ability to select this prize + +/datum/prize_item/proc/deliver(var/obj/machinery/prize_counter/P_C) + var/thing = new typepath(P_C.loc) + +////////////////////////////////////// +// Tier 1 Prizes // +////////////////////////////////////// + +/datum/prize_item/balloon + name = "Water Balloon" + desc = "A thin balloon for throwing liquid at people." + typepath = /obj/item/toy/balloon + cost = 10 + tier_unlocked = 1 + +/datum/prize_item/crayons + name = "Box of Crayons" + desc = "A six-pack of crayons, just like back in kindergarten." + typepath = /obj/item/weapon/storage/fancy/crayons + cost = 35 + tier_unlocked = 1 + +/datum/prize_item/snap-pops + name = "Snap-Pops" + desc = "A box of exploding snap-pop fireworks." + typepath = /obj/item/weapon/storage/box/snappops + cost = 20 + tier_unlocked = 1 + +/datum/prize_item/spinningtoy + name = "Spinning Toy" + desc = "Looks like an authentic Singularity!" + typepath = /obj/item/toy/spinningtoy + cost = 15 + tier_unlocked = 1 + +/datum/prize_item/blinktoy + name = "Blink toy" + desc = "Blink. Blink. Blink." + typepath = /obj/item/toy/blink + cost = 15 + tier_unlocked = 1 + +/datum/prize_item/dice + name = "Dice set" + desc = "A set of assorted dice." + typepath = /obj/item/weapon/storage/box/dice + cost = 20 + tier_unlocked = 1 + +/datum/prize_item/cards + name = "Deck of cards" + desc = "Anyone fancy a game of 52-card Pickup?" + typepath = obj/item/toy/cards/deck + cost = 25 + tier_unlocked = 1 + +/datum/prize_item/wallet + name = "Colored Wallet" + desc = "Brightly colored and big enough for standard issue ID cards." + typepath = /obj/item/weapon/storage/wallet/color + cost = 50 + tier_unlocked = 1 + +/datum/prize_item/pet_rock + name = "pet rock" + desc = "A pet of your very own!" + typepath = /obj/item/toy/pet_rock + cost = 80 + tier_unlocked = 1 + +/datum/prize_item/foam_darts + name = "Pack of Foam Darts" + desc = "A refill pack of 10 foam darts." + typepath = /obj/item/weapon/storage/box/foam_darts + cost = 20 + tier_unlocked = 1 + +/datum/prize_item/minigibber + name = "Minigibber Toy" + desc = "A model of the station gibber. Probably shouldn't stick your fingers in it." + typepath = /obj/item/toy/minigibber + cost = 60 + tier_unlocked = 1 + +/datum/prize_item/id_sticker + name = "Prisoner ID Sticker" + desc = "A sticker that can make any ID look like a prisoner ID." + typepath = /obj/item/weapon/id_decal/prisoner + cost = 50 + tier_unlocked = 1 + +/datum/prize_item/id_sticker/silver + name = "Silver ID Sticker" + desc = "A sticker that can make any ID look like a silver ID." + typepath = /obj/item/weapon/id_decal/silver + +/datum/prize_item/id_sticker/gold + name = "Gold ID Sticker" + desc = "A sticker that can make any ID look like a golden ID." + typepath = /obj/item/weapon/id_decal/gold + +/datum/prize_item/id_sticker/centcomm + name = "Centcomm ID Sticker" + desc = "A sticker that can make any ID look like a Central Command ID." + typepath = /obj/item/weapon/id_decal/centcomm + +/datum/prize_item/id_sticker/emag + name = "Suspicious ID Sticker" + desc = "A sticker that can make any ID look like something suspicious..." + typepath = /obj/item/weapon/id_decal/emag + +////////////////////////////////////// +// Tier 2 Prizes // +////////////////////////////////////// + +/datum/prize_item/carp_plushie + name = "Random Carp Plushie" + desc = "A colorful fish-shaped plush toy." + typepath = /obj/item/toy/prizeball/carp_plushie + cost = 75 + tier_unlocked = 2 + +/datum/prize_item/therapy_doll + name = "Random Therapy Doll" + desc = "A therapeutic doll for relieving stress without being charged with assault." + typepath = /obj/item/toy/prizeball/therapy + cost = 60 + tier_unlocked = 2 + +/datum/prize_item/plushie + name = "Random Animal Plushie" + desc = "A colorful animal-shaped plush toy." + typepath = /obj/item/toy/prizeball/plushie + cost = 75 + tier_unlocked = 2 + +/datum/prize_item/mech_toy + name = "Random Mecha" + desc = "A random mecha figure, collect all 11!" + typepath = /obj/item/toy/prizeball/mech + cost = 75 + tier_unlocked = 2 + +/datum/prize_item/action_figure + name = "Random Action Figure" + desc = "A random action figure, collect them all!" + typepath = /obj/item/toy/prizeball/figure + cost = 75 + tier_unlocked = 2 + +/datum/prize_item/eight_ball + name = "Magic Eight Ball" + desc = "A mystical ball that can divine the future!" + typepath = /obj/item/toy/eight_ball + cost = 40 + tier_unlocked = 2 + +/datum/prize_item/tacticool + name = "Tacticool Turtleneck" + desc = "A cool-looking turtleneck." + typepath = /obj/item/clothing/under/syndicate/tacticool + cost = 90 + tier_unlocked = 2 + +/datum/prize_item/crossbow + name = "Foam Dart Crossbow" + desc = "A toy crossbow that fires foam darts." + typepath = /obj/item/toy/crossbow + cost = 100 + tier_unlocked = 2 + +/datum/prize_item/toy_xeno + name = "Xeno Action Figure" + desc = "A lifelike replica of the horrific xeno scourge." + typepath = /obj/item/toy/toy_xeno + cost = 80 + tier_unlocked = 2 + +/datum/prize_item/fakespell + name = "Fake Spellbook" + desc = "Perform magic! Astound your friends! Get mistaken for an enemy of the corporation!" + typepath = /obj/item/weapon/spellbook/oneuse/fake_gib + cost = 100 + tier_unlocked = 2 + +/datum/prize_item/capgun + name = "Capgun Revolver" + desc = "Do you feel lucky... punk?" + typepath = /obj/item/weapon/gun/projectile/revolver/capgun + cost = 75 + tier_unlocked = 2 + +////////////////////////////////////// +// Tier 3 Prizes // +////////////////////////////////////// + +/datum/prize_item/magic_conch + name = "Magic Conch Shell" + desc = "All hail the magic conch!" + typepath = /obj/item/toy/eight_ball/conch + cost = 100 + tier_unlocked = 3 + +/datum/prize_item/flash + name = "Toy Flash" + desc = "AUGH! MY EYES!" + typepath = /obj/item/toy/flash + cost = 50 + tier_unlocked = 3 + +/datum/prize_item/foamblade + name = "Foam Armblade" + desc = "Perfect for reenacting space horror holo-vids." + typepath = /obj/item/toy/foamblade + cost = 100 + tier_unlocked = 3 + +/datum/prize_item/minimeteor + name = "Mini-Meteor" + desc = "Meteors have been detected on a collision course with your fun times!" + typepath = /obj/item/toy/minimeteor + cost = 50 + tier_unlocked = 3 + +/datum/prize_item/redbutton + name = "Shiny Red Button" + desc = "PRESS IT!" + typepath = /obj/item/toy/redbutton + cost = 100 + tier_unlocked = 3 + +/datum/prize_item/owl + name = "Owl Action Figure" + desc = "Remember: heroes don't grief!" + typepath = /obj/item/toy/owl + cost = 125 + tier_unlocked = 3 + +/datum/prize_item/griffin + name = "Griffin Action Figure" + desc = "If you can't be the best, you can always be the WORST." + typepath = /obj/item/toy/griffin + cost = 125 + tier_unlocked = 3 + +/datum/prize_item/AI + name = "Toy AI Unit" + desc = "Law 1: Maximize fun for crew." + typepath = /obj/item/toy/AI + cost = 75 + tier_unlocked = 3 + +/datum/prize_item/tommygun + name = "Tommygun" + desc = "A replica tommygun that fires foam darts." + typepath = /obj/item/toy/crossbow/tommygun + cost = 175 + tier_unlocked = 3 + +/datum/prize_item/esword + name = "Toy Energy Sword" + desc = "A plastic replica of an energy blade." + typepath = /obj/item/toy/sword + cost = 150 + tier_unlocked = 3 + +/datum/prize_item/blobhat + name = "Blob Hat" + desc = "There's... something... on your head..." + typepath = /obj/item/clothing/head/blob + cost = 125 + tier_unlocked = 3 + +/datum/prize_item/nuke + name = "Nuclear Fun Device" + desc = "Annihilate boredom with an explosion of excitement!" + typepath = /obj/item/toy/nuke + cost = 100 + tier_unlocked = 3 + +////////////////////////////////////// +// Tier 4 Prizes // +////////////////////////////////////// + +/datum/prize_item/chainsaw + name = "Toy Chainsaw" + desc = "A full-scale model chainsaw, based on that massacre in Space Texas." + typepath = /obj/item/weapon/twohanded/toy/chainsaw + cost = 200 + tier_unlocked = 4 + +/datum/prize_item/spacesuit + name = "Fake Spacesuit" + desc = "A replica spacesuit. Not actually spaceworthy." + typepath = /obj/item/weapon/storage/box/fakesyndiesuit + cost = 180 + tier_unlocked = 4 + +/datum/prize_item/fakespace + name = "Space Carpet" + desc = "A stack of carpeted floor tiles that resemble space." + typepath = /obj/item/stack/tile/fakespace/loaded + cost = 150 + tier_unlocked = 4 + +/datum/prize_item/bike + name = "Awesome Bike!" + desc = "WOAH." + typepath = /obj/structure/stool/bed/chair/wheelchair/bike + cost = 10000 //max stack + 1 tickets + tier_unlocked = 4 diff --git a/icons/obj/arcade.dmi b/icons/obj/arcade.dmi index 50f8e800273838e90934cc2133beb8601e5c7973..5fdaeb7c68229207901f707248d45e891ed83456 100644 GIT binary patch literal 12445 zcma*OcR1T`^gkTCrD%)VbXcWm)n1{fy=t~7tx>A>UI|rIGqr0}j2gA6+7hFsR;{9D z?5#+Qgh-yZ_VfKd&viY&KYrKcibU>l&UxSGb&Ba={0xIU3>(e} z{fXsm*Tg8eK>Cv(YbZ2IXKHTCP5!p6AcE!D^Y7G>L9yi@UG6<>Jt_VsJ%OUhuNY+M zBujbd**K&jGQrv-ujcv;dM8IZ`G88==|2D9q1{ao=sHMKRoU1-Yv*HtKhw%25$u)9 z!yl%^phQO6PVux{n?}PhGf|_Q!r8;A`lRccw${m`wCE?L5znc8O3_WmPaF-5Yh6>G zKm^C1Bt9${2~9EcP`*;aqI~tn^o{9s6nBzLy3C888DDt4pp`;qo^?3+<7N3{`DuCU zg2F<|1PwcVnGq{cf=05UCh6s9i+`aFgGgJXoaFK*Lw)yIJqibV9 z5u(8hMe%N0pn`&e&7e%r+bn*(a>M|=2lL&!P{~c(i`LigdX! zj|>eHBoX%rZ8e`>6MMfnKd!OUoLc1mfzR;)h3UdJH(x59CT_@jq0PY>(6YRjNE3tf zWoWCrH}>0=s7md%-KnDoPq4YYiFAm2kk(6MV`EMWTQHMfIW?c6t&NS7>oAqhIq2}K zp&rZov#T!!1qDIUfS`olNa~W@>m^NZoCGeJC@*L+x;}t^`&A_7+j2$blmhL;T3N@$ z#AIw{R+P+bo*Io~BGhaHTWR6CFqPIWB&LViX~yWdHK^_(Tg4GPO`aHWYcg12qwMq3 zBs8Y7`+VzEBJ$pqZ+-O5SKS{$B9ORB=p>=qGGfc7gc|?n;Z7VkFp60UN6O3lYd0yCJc zZ|@_)gu@v1N@Wvq7$Gc5V$4{lG^eR4E_zTf@#irdx`#31L}srGmX;b3h!cZQLqo$E z6f)-?NZ8hKa`9b4V{-r4i5H-0OR-`XHHE>#ZJUl(!X}`LCNH1U^Ftoegpm=@7 z>{FJTJaOVxWzM2{zVvYyuGp9dj(n~-Hg>=l_HtEp0{c0d$a_58Uuiy=v5Aqvrcsw5 zX_?p`K?xHezn@XNr_9Nq1HN~2wf=5KA`JX6wU5-`#>1P0*pAyu_XM{M41RejP5zV^ z%z8t5$)sZSor?R<9Vq3`7(qwipgx6s$9v^Gm&2^V--tmWS~w;qYGX4a!+W~UasBW? zgO!2gE@beeSTtz&bDu%>V-7F8vQ=o8ey!pd$5+rF!*ug;I>A_MT5m5qW0oLZi#6hP z$H1n9d*_$EADUGQ!r7*bPa0?ref>=(I`h-Xm=JqZY{NK;Z%OG^BV9<1GDM=8KNG`G%Zu5^?~TtnOUcVWxj4o z=4vUY3RpXvZAhMv{j`-I&t>|Gc=txcUpXxSIWN@HPiE`WiK3QxWD_DOUx%GF%@9isy9zH z`jypgvTI)r)v&Yu{{XvvBOPd4icK(hVLHJr9kjg+6A4~;AqHLOhyayYHjW%{En&>8 zf-oj~v|3b5<&WnJ9loX&{S<7D_)jFE zE62VW@woY0qHkBIzJj(_|BAy#EOFjl`R)=D6yOB=x*9Uq5kdIV<}u2QM$#Yp&{s4a zJ$=iZ-b|Ws9&TI->p+00#iP-liCrtk`nW~(OMS!p!1{>WN6v4L-qH3KO1}gChiC|93JtCzeWCbQpXiPYt_K95U$07e~ z!X7HPIjXRbZ*+?rQk6t@3byZrpVpDg0s?3W;KS4_v7Wm`EfQgn&p+XvhT!ARn66OES+(&sEwHjCGwn`M(lU6T~c z&tl0RaDmBY48?vSU2qKI-oQ}MJd zk$F^0NeJrMDh3IftVzb@v(sK7!D7ukPV?1AYV7-@m$CxH#l@@adaer3fuOz%^iLrk z9`|t8ENU-apw;B=W!Kp<^O3r$>Q(pmhYttH~ z+heffV>^n%9)DoaDkjVFX~w>gVhj!@9r7#qLr<&}b;&O%h)@VBgH4Q#bQHP>UplKK zc2w_NM%?JkTc!94qRap{15R}b@+^ub{&p@Th(5WknA=*Nz{+d^;UmVzq(esR^omRK zBU_V$FX{5iUF{$`54@$Kd$C}|WJ5^PN&x7&hgIQ`R{^i!($2i1c*x@*Bi7E|znvIY<({&Tqlyd)Q) zlTVu<%A5_qi$MI6`ao}TEWqI!5N-kS@KnMloyjkG&Ucmvb)08Ev-n{E%5|2(2i|@c z5QSs(A(thHxkb(S*3_^5VN4Phg>3r{Lrl2z5NBOo42Ot}%vkO%C_4%R{!Rgb%nvAs z0hymKMjZ$@_oLwV?c{mAz&7LV^-;va397azE~?`lN88R^u2serO!KU6?1wX}l4G~k z5-G5KaD2=c_2m;B3VB^#RDk670JjykV~~eXVlq|+(O@UH{B41Y!_&(J;qgSS&838E zk#HmiLnp$XLVNJ_+BNHh?<)F!qs>r__ct@bH`&Sn)PZFa+eDih3C9t2ao~^mTk5c- zUrwVsc&a16J$$=Jwo@oSAKk^EnG~V&ZcyG+YI*as;RtR8Vy|3QT|77?_)M!}>w_(f zcF|f=a2iFMe)?1>Ew1+nL)K0C;P&>Tc_rG10QS;z5ELekE(Joy6jtp?yH=qB1O|r4 zyUq>M-zJ(t35?Y=cYg!xg59wb*5nj#*QjnmH&O(TXNt~3Hr=HLxwol%pj!q)L%kv= zO&}VS^Gb8leEQqfV*mfePChiZlgIm&{i=QJy*o24?4c=dos=UNsF5Q>GhihlQ4Ys7 zM;m4j9kSQ0|DNFzlt{`3avG z`rSLe-62_T-%>U;H95X|^{J}rJw5o>s^cwtdmzfu;bXNyD=RCT-Q3V^sHM3%%W*Xu z8{3}0d@QG2YJ5B$bkFpWiHQlL+7-m!&bPr2B1&Q>iVtuwYLP1A?a< z`hE$;UE8kMH(ZrRo|!Dgssd{+KiwNSmSvQO5I{NqocOxQpJ zlUj4%+3!A;ezt}zlnidU@f4QoHc26%n*k1d{G%Nw~z;@MLNFot^}GK~iu_}BomJES%PVmsszqI!z7C)#oMPwr6C_c;gArO36KH5)lw zw8FNtLVwk(ke`we1Q%2~e#GKosn_C&=nWK!20KiH!U$L@~ zCcG45U=4Of!i?mJP;Oh2eL#yjE)Xx=S{~IVsvO22!v}ASrBJgKxFg$Z{Se5E*bplf zZMpbi?fBLN_P%fiRa;Ec8(cn_xSw|dd}mcZ&9ck{qSPLEqH0ea<9u9=PxM4o|9Lh; zM^Qg2-*{ywYC=MMT1|UbGk7J%3{?KQnS;8tM0~U{HQx2llVDCzn%V46w=_a5T!cs) z9nA|pmM!1#3Ff*|Ng9X`WTW%h*M|r z;ma{OaL>T}&iBRzi~IQ|!B?nD-UME|WQL1n!WZ>HJFQ|WZ4WocK*2j%7;GPQ<`?x^=(23+&1kp+`a1|ry@y06J)_IAt3=o)khW<+CX|> zEtCIdHC`mv>b?0QGolr1=t4b($3bdp#OGbWb=lqGC;6QQTK+$iU-p z5O1I5-YY)Ud{UPf%?nwWj^Xy;&G`eH14KOVQRy-b&AyBFeZ=etYy5gN>ub(qBNzmKqx-r|?qJK7=XI()Xsov|Z!NOoNBdzTNT z;-$_^k$tDm1riZm3Uv@%ddp1c%ImS-hl-?PBiz6cb8Arj^u<=@X9L`4j%`g$Ren^- zwPS{UpMV@^)WfKo>p4b!_vrI-Q`WZg*8IDcS6qrvk(eNB8YxQ9UjMPk!pNci(A;cz zeV--naGP28+BhyI4WB3ikFGC`6oJE_#Bw)NRX5HV|1E0h)eiuCjNfT)M@0-B`m(#D zgbnw}mi**uP2Ug(`v-l8f6YbpeFkvkJKEYLy)e=N8sdNi9{CyeMl%TTARtQ8@$_?t zSX)q?yM6s+AB=#4n-j`u9$PkxZnLzZS=HSqt+Ua`aim{ROi624A_O6Z4|Ki-)j^y~ zgAzHDNzrzb80ek@T-lY-D5>ioFt!uhbBygKJNoLx|AZS1YVcAME-SV_&SQO6N%|1c zy>mdnUduAh>_6k`sqpiCNT=#|Aax$32eP|oQ88Wmdiju`kE<}nGg-Dw(X~2miviMC z&rdXk94!N+JdDQPIt(kAV4 zU~MZgF$(RTMDP1`perAL`iON84-MNVOWt;KaIA~5OdI8fCe$&S(DZl+C^$!L6JpJrwp_wF+o620{WG<=6#*7Z%@*L}fG zFa9#%b|UeTHxDflQWfDSFp81!!7j0&r4woLh8 zGJQmR?Nf+-!MMcZv1z61#jU0SMK`{o{LrGE~b>8 zP~(4fO$RtzC}_KFf3^I`cDesGh4EW3@@$dJcvfEO-7fKkZu-?k>*>H3yVk=@cNvzL z3G>TTvvl&+WwYoa_mMzq{&MyG>u-F!t$A97m|(zL{k zP{0}rQ@s5_SdV!a*jQ*)iZ97ScQ`SW>^@u7~d*o zFf{%E2sRgO%?bf6rk)7*g*bJvm$g1^hTH5Ea)SodmM11Az5wPlt$h0NG9g@Fzrc5? zEecR;LA~{M@gEr1_{|ex3dC<@oGzb!_A6PE;o`Eg*aGdeM^BzmAIx4SscPOA7W<&^KEDdO^U;At2Gi>T;C_~@WsRTvw7QmUE zN|A5uirYXXY`ZRLX=~pW5;`ZQP(pp=pbyvf*P|!6t*j|nO3;yy8j{3-F(oA>&t;#M z0R$J799V#4J;slesT3@GfJ=&OM#re;9rTPaUmw2w8GqBzLD2S`7c$&r^5hJiyUMbC zPM#n>;t1q6WqiQSMM?PtKoF-5q z6bqaPx0{lAIi6DojiI?!3&isHYjoi@qVy6XmHSd3st zFlZ?F$eS#_O{=PYQX5jouCABOjqsXw7MFB1`({8`9%kdAM#3tmm64bt)EoO9|7AXq zY*6bJGA2=|+m|#_ebaB|K4#NL74zjwZ{U-`eJP>7X!Sum2msi9V^U(fCuU)0B+@(I z=8yH8xyI+}k{Jl6eA>~R7cMRTuL$QT^Y-c^0a!s!*Ai|up z{xcbBh82B1L$8=Eq>wr;F2XUDPk#J#sl*{0!bZLrNMA(tLw5+@TT{5>Gc%abR5o*m zl{HHVnT~(93rqR$;Yszc=^B0uRDCKr_lFB9(Y!}Rhe`%Dg$TMvcDlu~R$OeUEDz7f z$hZzga~@`T$Z@0sDmUZ`CGscm@mUig=(06qnH+*EgtY`|G-l;caCbTVPUJd0u8@`{8TA|5i zqcho1)_xSVD)rTGWCfG{e85Kr*UQRVxM2vJ)p31;!6d+4vZ*N^=)w5JAPf9(pc~|Spg#DDpis7=wQ5Ct z`5VX)r>6B@%vCTftigC)0L1HA`%kWq&`D;!H`6wAgVqwr$u{et z>CFDqjwsEAA~|5)G`B{&Ha)^RS=jk7yB}Sc2k14DJJKFQ03EixuR9tF>W| z*S7Zm!wF9YZLhFgI z!ZH;dhmD`vx|Lys^(QNw3B^i`;C7Yu-&LP8D~W!nXa{I3C%jQnc5fp}F)gpsv?eg} z?5`}hry0eKfRZ05UNM~+;ctb0+3f$*irLR5;YU}^45Km6)k&2^km^nLKD4V+73`nu z0nBz4@T_vS*^qlXJ^GX4HiakoG}c((Re+ZJAInJ5l1>5sz9@w`Tsk;DR)QgsD=Y&0 znN9yYLVuD)>3=77of}L9Zv)|(Tfe71yuKsOYSh36BXd)QdTd`F++GhVVTfJJlCC6cbN(k#MOw2t826*)hj< zEP0+->9)=)q>g_Zmd>XJdtnp&o8;o2%6O0d5`nuJe5=I3e)M%skEz64*op_p-QKfX z@D;eyCvLDP#S4-Hi~|0^9hJuZp4@xX*yemVSta2=KezlOMw^V)y?72{9rUZ}izNQd zf%ufX)@CZeDJuG81QsW73r(Pe-t*P|857%%C-w7x+R$Fzei`{wip_(qS@vX1#xk9h zGw{9yLDYV9 zar6^T`bmz7^cj?Z4>s-Du0=MBtu|$a^Fd(K8@p&At(E$h)++B4|3@)J0)SH8u;6~; zWIGF3sfXY|G^rn+j_Tg|)H4kr*hCJN_|Mt?9x!1)@|vXoL2kC8bEVG%h9Qbp`kc-> zKZCkfe@%9Njv^(fzJ~vI*i^lS+W-8EA>86L|N00(D5$amS%pvj3n<|KJ?ei$4ZKEI z`Tp2{UzI8NH$0%d_Fn+00vgg+XqF&X7V4OIFOD3`|T^)QTqGr+1dV!uU&eW@nT6KHvQP zky|V3)kFU0wF={d1zvaB#Yip<_zsUu&mf2dAiaDYBfW(cJXsl0X=@+9h4Grc+{Wi@0~yOxOyLrcDNw| zm^&xDA2mq&1Xn%1#31k)UoG^5^Y`eMUXu@|PZ_d2_zEw?pqEa0fa~0Hh{#CDdkxg8 zt3O@kD-eYZiYHu}vZ!8e12%TOs=ofzE}Des*<;K z>F&p!olC8FPe46sPU@fJa}EU<5ICq12!FxT}^k$AvRgFzc?&Pa361%I@X-y44@OhCd`tt)9)u+0qJ%)DmGv=X!M zmg))8$rWQACae0lT$RGwlpN z4s4?6c|V4$F+C)bZY1!xwz`EIev)BNQVN63RU|0HygVJC+On?#Na>e(8D~AFd?};m zsQ@C3{UWVu2DcOh3ld!&U-Yia>jfOhWPireaU+mP$d*GsTiBhvvl>|kYss)y?pBo- z>T>rpGYm|M-5ke6KAt6)_@3hGe`fSm5)R1Er}#-CzWo?hM~m)0i~chBe9huidS<+5 z?F(XOjc7(H(q3|d;HD^>Cd|Y}%&mXA_~91p(_uYm{+gR&@j@i_qx}u|RA=JIy&22;v=^x@s=hzzao!FLKf|d! z%7WhK-VzGPU(lOT5p;A>)H#0RS|?fS**DR>Z=*-Vm258kVYM|sKtFwJiF~K+`4BVC zKZ@=5dC$yAkM7J(GDqwPi}=90r$=;N9A5xtq9fCnPU!XX#R@w3EK;}5JK0=@f_t;F zkbOH|$#a4M(GjnyG#QLh)J{;f}^^n+sYPKvG>`(XD2Yld*Mg|T6i z8S@&(O$X0owZ8Nr4_T@~+0fm#7v9(>1}VFv!@(agX#=0~ySqn5s^zz3B$S0Or);ZL z);#~dai__J!UAzWJiXg@@1(tQ=of}Hk`5ZyxOt%^GSdm^LSenV@39+OT?@y%6BllX z8wlAKrUcD4`9$9)DK0h5H$Hl*AdK&Un`44fJyrJ-?%;dkboWM!6u+NZNO^H&20+JF z-&1Hwp|m9ETZ)qjdv{VAeejD>TK-PdA9;y4OMmo`&qurn!3MieRo2xkm$pV=^*$a= zeic1Bow#q92+{Cji>SpF`X5}{l7j3qt?!5FM@-Ng zVU&mrpf;$3RVml~SCY}AQH$Pp&%iOlsCrzneX$}pHaOUQU8YL`s{R1`r2-3+-R`$_ zmu1S*i>R9}vOo-a?KlK0GQsKT&d$iPk$#qs5cr-cj?Q>7;QGKij4SRXm%rgYKM9j)7S3qiq&r>kfA3e zz>Z3szN`1J!GhV&QuzlWWR!b2V`HY^5-ok07N*cjvlJh0vZ3|z*?{uSJdCRxuL+vh zmI+Bg6+^ixQ{I?DtOBosq-CLXsUV$4xE!2}fu`fiL;*iZD843N7(3LmL1vtiYyxRK zIkvtspiI>a4!koWR0qED#$Vy_h|p2Roa*JxLp#mN-(MO5Bu&8lOIB6L83_j$%r!0Gauc6t6O+sd1&pKEK4%lS{x z4_kd~h?)2l9OzG zS8=PSq5VdB5K=v8TVq%I*9BMTQgR6Tl)n}Ii#ai)&US^~xIv8H;wP2hEOR$F`6q zo~~S&8IZ^x?8Y>uP1!ec zsnuw9c&QYAJUhk`vQnHMpD6lTdDuAC&V=i8@`mAh^fk+{gI;ErmC9|GME2A5ghZuJ zc6MdkO=XG74W8?}eIHUn(JRb{>icwc6sA)K;f^QHxhxA6<6+$~yV8OulEw*w&10Cb zm7%`(d&+J8%=8pZ2%b9Q9)${l*3Cg13!usPylg9%a=1eR7oPO)WyAAsYg|#DRini1 zH*6Pv(R06ib-jwCON__mS`Jd{p?%7=uK7oKl+&@AHeYi$#&P^`b^v7*T6J+%IiTjF(c)wv~>}3zT&z*ODU5t-N;T}FBjq#NK#UY-Rtg#QUeS!=dKHuAX5295KYVmtZpT43 zB;-;2ILe=jQdfxN)>qJ{K~b%us}lNf0Z4-6nW)QOrg#~7wMgy_HxD@mzwGp zYo6#&85wN$CAnhXWc9f#Z~Dk=`V>6)*gTxAqr|U8gQG7+ADB zI=0>LJg5&2gVRfVE#{V+;%!^NYU%3g>ZA;c`1KX2B$D3}$_O}7y?6ZtccwZ^!7>=9 zncGa2&`1zzv$34z*ChoB>`0bn>}}{dboFFJe6Ka zE%G?)TsMfCN^Jo*U*T0rH_Z+!wljs?x|LDT9%i;}?zepLJKZvS8Z&#*>47bKA4{M3 zC#ZUkol7KBC8>}KU-D;gZ|${Ip3EQASxNOJ=3z_{1A1?VCEz+>jsGb&!d)Fw0$+hYv%u4*$bdQea7An@O1(?dY&-@DG z)GtXsKAhd!fUZb!$r+O6Dhr3&39k)&b8sy#b#1EbikfGKUGe`j$_ckhE^`RFnSv(2 zyj#758=?Co8d$Q(uCZoUCBPJuwwSWg3hFs|y>1k@FP^!C%j)8HB5`Fp#X2e_vv2`B+DHi_iduTGl(i0?b zV?srkNj*@W+ao&aKq7!k3z9t{DFq$*>+XJeNdO4wezR})K(<#yhrR%JJRIk5mnbVK zTvS?r3_1&m68r!}9Yo&K3!lvXXg$6taFv$rdkdqvV6%p}KaUhy)c?JS{@Qb#NY%L{ XViFgkH4OaQ0Z3C#PqpHK&FlXMuTxk* literal 11361 zcmaKScRbYbAOG1&QG~KiMwAtqg(GB!%(6GxdxSfMifq}NP-fYCX0K$=BYV5E?zr*$ zsPFgt_&t7q{QU8`_nr5A&FAa+{)B0&D_+0Ka1{gsT~}6;*8+hEfF@|^3Mug1m95hR zKF;6hy!4c}_ONt+?dtj3#Tf+hO|On^x9@y-Lw@A9{K2xZpK3csrZuVK25$A;%Xn<+}o!cxk%dnh}1+-bd8cyMJ_Bz*~U9*Q$;>?n~V?K z8{4o{yLVGqH1g5djBxXb&cI{Tb=%TNc3}=%V_{o{97NkI)nTKY7as-O=w4T}guWj< zc`mArs?y}XdN=geOvNv+0qdEc_uq^4-&k$EqxWpwUdW3grQhYqZL#1M{4-~Zd9RUK zZNNZQ9KP_5-^bGo_3nBD+~dVvU7n^cc+>Mk=6oxCa76tLQah!VF5JspNgWJPY&VVE z(d=S42*e6fmY3D>P2bD#^VM0K!9#2lIpSkvXz1iZh!uRR`T1B$oKodg`0AFlew;?q zr3oJA^V9lVwFqe#;4yfeBTMkZOL0I$fiF&&ErC$aMD}L;7ixATHnqe)Q4c6AJw0Bc zk}HKzV&tsBowG7y#3O6aBg^*5h!@JftpE2vJyV>Q!_bv{-+*DUSbP&J+o5(r6U*rjV$(wsNKHT%UE6(a zlPTb6twTtyobjvjq6|$wI=-(4sE}a+~*iX#^_4f9j zA8swe^9qKA%=J>~w$D_|i+y(OeH|M92P*ZAaZo$kfxr?wE6 zmIounr3=o5O-+&omwQy*HF!n2|Awa^VC1OW#EC%9J0s~OQfdUhjhvV-$w(63>$vIE zlIp3KR33#!>#vLq4@V8);g4<}CxSgWmr&OlCo%f1j`)`kI-MRWlj7=R{8n=OXZYn- zJ_%vqD{Z<;XFJjP!m@9;G@yQd5~mt_f@{T>lI#vNev009$G!ZmOV=oMxxCAPxDwEX zb0g_tZ4;CKGi5b&=0@w6pTqbv{vPQWbw9sHr!KoMHXJsB59ZK>w<}ACQ?3hc_-Eqdn(5ih z5B|(q4xdTlYj| z7>n;N5m>b8b;-xYK5$4Daki-JctMw~q1GKS^IJ#`)DV$A@&UCifnV=;{iksPpx0ux zP2Qx`G5iaIA6H!4<;n?@LTIa&D4;Ir(>RK@mbAFIM=>fY7X7tzoZJFE&RHc@&s0>D zlBAwAB;}P%%Qy%*>2WOvD1x z=4n~2XV)}0&*6PiEAPo)ap|^^@N7Q$D>ZZme?4>HY>RLgzd;gE!#S}bv+enAgTdM> zWYl9-YshRdx^pP#odD_`_(_Wf;cfkK>TEm4Ca6Dt&(!|mGJoi;%aAaQz?Kn9VxCi= zE6vBon__}w&bMmpi%d4r8~>a&Ad5Ig1R2mx>$DW=7VJ6>wm!9eZX`Utd(`9v)a2We08W27b#NIGsLt+t3eZs+++_Ftjw1GjP{n(9=)_Ue zCSsO$MUkwKGR7? z5ENr{Yx#8Jor(td+2p8$Z|at;2EguKLv-nucpxD+*9gYX75 zwNO-u#MhXZx17{L|Ic&HhZ%I+MOX*u`7xlCyiEzW32Y>6FiXsZ1;nFQ@~gS$2%Y8} zNEoyhJ^#xRQ2E1DNCR-DTqF#dgG{02;h*Ria#-9zXMzdsnX zcD;Lw6U2U=2k3%}4R#)~f7O4DlM!{n-*YD$`Y2tSG_DJv;SvD@eU z*y5s8Lnhw6xQqmJ*c{->JoI7RU`e|O$<~wQdMZ(8#P7W~t6*ZnBC_L9HRWJ$KaFS? z8%$2#pgP%{39{ohoC=%EbvUGBv*|(^;m>?giZ=Csb zV(oqdhh`%^vi0jbQXXyOQ6HH0RZEvej@hJyj-K9mK*8yb0W)OACa<94Sx@WvQ#@Z# zP};lG-Ynw=@T;h1h`%Fd>%ewCM1cX;#THgccNHhIQ5=X;wuSaZQ5E-T=$o85p8Ml6 zJPf3DgX*_g@w*{|a)ks7`r9ps@WrN2-QCaZ?J?l;A3tLG8X1)F<@k=O9r1nH;Lde) z73e$-Fdho1FzOYWPFy03xzRX=suLE-cxS_8?d%co?E3uZo~wZ_Ex&yqg!nqzpS=Ut z_=k~!k&&QxXo$01T>lJr9J{reX{v@896;rag{9qdPi39j34DucV16618O;yGc7C`= z3q-88@tv`IA1AMAi{v%{jgW7HN`rqpsM}055D}oIjsNRvBQEPH5EsNitN&vD&6Q%+ zz(BO-X`Q^oisC%J@lo@itZam25>c(_1o7Jc{1XTV3p^PFsBpc~CpSbd+sgtZqW?k* z8=|~^u)_;-a6EvwtghhRgdv5hd$!@32k5LOwa9}&kC@s3>Y!1~C=eED!m@<8lQ1)6 z$$~$NR$#lHM6L}(KjZz=W_;(nN_MZ|UM{r#O3~MZS}}?RVnpii(+z`Di+~k)#YeaZ zZV!Qtfyf$*;?Ym6w9gQ_B3@pM^hdVZ`Mk#9)qRc}^ORQ(@HLSRAGnAXN<%}%IDYIW zs5hKaAzmnXXzCJ80K+>sAlOFreUx^h`ARewJ|s3z!XIhHjNf8+YVs=yp4z@laqn1s zx~}3aLFNJ^EMI{b3zo)rD-OPof+Pl>S z<0m^WjU=fu(|b!Z7^=v`n-_|seT4y2Iq_=V9(?&cfV*OI* zSsyXBjL$h{933BveDIqqB6zth$Y+PF>nK08+Xv@|)kf90QoF{Os1d#U@lW!RFd&Lg zHs>0(OO>x`>|?dkD2c6AH2qrc1Vv{!cXKF9)}N_T{%$TXU*LI*mL_kr` zCP-feuWB3zkct_@vK|@-*&PQ;in#re2a#T9khiwZ*C3?}XcuFHsgy?ZESc&IoVO(e=mT$aR+xD?MZL^Gvbek!;z%04FCWCaE{V+^xB} zVe9KQdp^LN`#xVcCg9C$`cdWC_4O%0owI-#?^$kHoI?5cA3+1Nf5PW_Za%@&CbX|y zKYUXc&}tmi@fDp%Pr`)Z=H>mYs;bJ~Z&+;jYxoy9uif`#9GsuhW!rdwBzQnPL6v5AQPLR|l5?5#2>g2L~Ze6>F0@9Q7Uz zQzp@&)^|3vk9(=b3t;7q)hT?n{C~K1vItlww(Ip8FAlIhb0BeRS0R`8?LLKH{yaXt z?%|wF)wa#qPu{fNP@k;z+iuG<)><`pa+$+N>48X(L2uu8x4Lf$?S0$nP6udvOuM+2 z{vB)vjkZdvq6C0;h>ifb)`T4;SW|HhHTV!;`>EWO2KF0)mzrgCpcs9W~La`oo-7Cmz7#o@V$Y=p9{6~#N4GJYKC#} zm6Olq-SFv&)I%J#)oh%d>&`%ON`{=?X_&zsAPjXbUo6my$3WiTrb&3YPoLj7i8{G? zq(}xxD<;-)ZOzmuUk57Ffjm>XmIWLwAt3>O}6#6+&6-o>kSw zv21tn(`HMWV0+V6JV4jpnxBuaD?>Eo&#Om%PGfVkJHwRpXVMMnsg^2_cBwwOkeTiO zAqzl({JM_3!dP#>A3;y1aj8Kc(&nb?_oUW`GD(84>vPpYQ4$V9e9Q}m$|oGqb}>50 zs*216cmc6@bKFZVvlJw9H$VVf6tx~)dQ}F&b@rWyqL9K&Q2FH`wPIBDG2e&zW5P&`{MN)hZ&s3{6xYVTRpVS_m^9T^2n9~taa%)+s zq+>7-`U6Qn$mM62f$;Se8!d&-Ms5IT^rG7 z@J3sO@yYggWQnhpv#mz4B_{4klcAa?%8w3LvF3>8mD<$LdLic{gGx2Oe*KQ>;$61e zG23dkZrI96fn-h=qDbJrm>}aI8QdnW2Nd;e5R7&8V62zZ`sO8GzmIPo{7oTXYreLe zZ3$APc;>nXH~D@3Y;oq`J$YqSD?FVspt+h0!qxfg!`u*<4&FE4MYXwZ2{!a)JX`pt zMq^@ndIKNxvHWV?*d z9zff{C=3AUY}O3F;_V+i@z%eO+thZ>TXd76!p*{Y+vp0?e?*+q4$M%jf**$!VVWDx z!NUweYKGLz&SKS+Tu@e#sT75S_fM0!TEGtv1*GIo~W?H^pcHk{Z?mCrI zzbEh_b+f*W1Ea>M&P#GivI_Tx=SgEQ?EMAdJOiIOmS%W~Ue>#_9ZJqoVR^aniRk_? zD$y&O%n%veO|q>%IzVfDI8xguK=WRN4#w`;H8u`N`ag+Qf*L2mAWCkH$+n7)7{zjKP1M9#qmw=?(^VOxM_ zMpt&b9HP^UTub7tN3QA@Mcd5PIDIbn?ZA_%s-`@ty;!C!5BDDal60GYq2qqZ@(`=T zk6^^xI^+uT-%0nKWln6emCo~`ZzmQt(r4HD5ZPE+#l*(G-SAeHdI8ixetv$S=GoZ% zs;bXoi@xm67~dWN6jA)a7|CWN_G>Bjb8os))naZ{O~U zi6te{<%YeAhpL4*|hStkbbRbIshonmII9jd47?d?4o!Au@jFN~jLN`yM3 zXjdglP*Ga$ZRDW0f3WqH&l88*I#d34neT~&a(1v|bZ7ef?_3?|t2jT0?c4Ylq%Vw( zGw7O%01gtW#<1TMn_Se|ks%i6(@02S&36psm&4uu&j|@HUVXEwKZrzs6!GCcqbZp| zsxC#wV3?nHYZ@5z0||qz!}Ow`MEf&4-2Qe)uUv{gq4c>~Rj zsPORcmrcHc0Ou@ocAXkDal%z$GoUu9gVFNC_%Y5N7bHp2?;n4;mV?rO{2D5sZhpWD z{=?Y1#29_>h~k$a?ARJU9m9F&R7t7u5X-mX;xUm=_#Ah7C0Q9SlrW4E%4vYd-2MTxg|gw0HKH8o|-&F?BGDEvj9oUP=b zUwnUFOc=sEy=cv{`@u@>>MF9b1c0STJvPw*s3XWP0A9-&H?5Rrp6AKcLj1n-w8q3} zVpgZ4e89nR%b&!EEW3vIZ?Qnp5{otj4+5mNE)6d6?%V$UgGgx!MyAhC4vq52h|YLEdmfOR&q;E5d%vwI8DW2V9(; zqk1*6Rt{G1vOmErrc)#jb1!KkU;#l!A|;*w&SD9AcC4sj)p90C^kY!&Jv#ZRciqB2 z@VIkXhh+8!h#*2NzWp}L^TG20h3LnFN-&69+P{e4gAeCdFY!L58VeQWv84;2K$*Y{ zcZF-K8Z2e9xl2Arx=%JWOrhf34hNNIpkIq?k(;H9NC#$hAUoc*)HQZ8d>l|4MT7ad zeql^*#{oN*U-zk7Xwq*9lJIGwYNBcz9}9#-(3CHamMqjS4*W3&d1r|l`t0{~N`}?x zML*rKEu<(`rp7>jPBo8>WzCOHE_<9fIPUzk(d7*X;_&ZyzTNp#768uhHoay6wwE2~ z)|_vXV@4eyg%2*I^VWrmTWe{xfiKq^S+qT9A6-=bz$1hKvc`4upO4x2fE83LZ7wT4 z;9^9*He$l+cZ6WD$XhD0S^z68100r5k7&ugcvBeCb^ZlOYZ`2Q!g|)>!l#N1^TO-0 zoy1BVP)*M8VDgP^96|ys-fP3!iz2J&6N$SX#gVhDNSmG5)u?D zvfpW4Qp_q>{c8h`xRsLSXY2C_=r0~fTPoRz`EdK#@~|y?H=JM<{CX-f*w_10E)b^w zH^LKF4VPeM36bz=DTh^(!G?mtk2anZDu!MLMo7bDQ53Nny$D84K{q@}ofrW56(n7=;`ePx&G! zppNLfjUfAWo$HrkUCEN#a^!D7u~optlXU$f>06h262XpJ*z+0c-Xh`X_%kdSMdUVPXG&kERbWg>owUvQkXEFX7?a`Vnr+@avKZI2iExu;h2a`G!IJ+T`xw zxeMk2PbS0QQ#N$VSDd zeYn;sX?0se>f{zU5P4_)Zl}^PQ`C^fq|x(?4F1;1pUdKTSD}9nneK4kiG{Lbl+3I#9Yq(&k0E2N#O9L?F3?-FRpXJEra$KZS z#&k)zg3(u@lO&WEdE3XoXQ1jLa`mpOQW^cd)nOwNZ!bvo5v2?L&M)(?TX4`{!J0w~ zM8pNAm!@TarTrP)-gtYB7khjc@_TZ8&mPl2{5Q^?jhNPLIzOJTIPGe1?A8!=upd!b zP9fIunR|N!|FO!d% z8TB_6)-o9Ue@=I48W#&UdoR`S*GvisBLDJ(E>_TKA0o>Cg>~cqko=4(;Blt$EC1>K zL70qr^FQs2LBfAr+ojnWgLH{z{$s;2#-M7mBGSLi-(|L#yCwVrdr9m?4pP}uv6N^M zb^X`c$${HxJ2TbkU<&d(FWCsL08i)vDe(#_5BTBLzeEMu@N=UR7&gepCH`=wuOP&G`G5`jPzbeHb}P~l2*Fv?z>dts2rdcqz*Nv{~N zXuv!Jsew`;rbflmx^hMys?HD`H`v>o9OF75G^{QLW@6x~_4L-dogZ%I31wBNxWgPa zdYTF4&$J|m(#ZT}8`e*?HKe+Z2g>#$|t7h#Xp5Z;BT}HGB(( z1&HY3Ze}SSXW4r~#ltres#;a_wIlYaz)EQg$~&MO{z|S$REqX0MzYZ2y#lac__K^9?=5su;^8e#TV}7UDtoyfOB|p-a*b6 zBo??H;E9I7ju#J!`grg6V82u)zt$e+Jn7CddtTvID$Ib^a8R;$$ZyUMJ>DrV1Wq@@ zVIH;Qr1t z8aG(I!rzAFx}$1HR+dQjyF8lGv=sBU>`-dYhb(?H?j!%DnJi}2)M>%DQV& zE4SkADpALA+{M4XJ}5<{?eIviFxVz3g5xc5x(Hk3^J>f0EQ6NKG5Y>^m**-L+c$ZB zYlh-uc(r|*3{usEC3vf%Blsbl_rt0@=7MC65d%saZ}aQp$Gb(N>PZ#S!DSJ8ZtR>{ zbV0G$WvsH$+iSf-Oy9~k=FZEN)YZF=Hy&`rhcs4Z6q@3agD)T}9pL6p`e;nN`9M}X zA5Yd+u_PMKQo7+<5j#?0kS0LX2`B9|8NKVXHU{tF!)7_4UwUX9s<{ z15B$bS5#pkl;T?Jb9kKjTm^FwwQ36f;<1hFMTF+^WW7(_)-ZuvzjYK;Z3r(jkSoT* zMr38Y0hOGbMaG-}Nda+@nK|AKH`m2KciM}SoNkQ21qj50g zePwk*&E&n)J#4b-aOEFIx5HJ0WnDuHhAJ^?PjJL=g}+HG%VqpBvhO3C@yN zI-%^L&3JJNRYU%|Bh2iQj|l4##`y@eG>u>souL{lV%3jR&UOO_VW-lRV8}D=;`o~N zGE{uelBc*Y&Q}bNKqmyQ2ji{3cXf5Se@VrT>ait^Rq_JgD#}PMLqn_k0H(1lG>m;r zd`H0LFcoVXfIvfWH5-=CGGd+&RO=2ld0(qGg{t@)Qj9S$#8^+inEGP$_=5Y@{y2(i zFnOq1ptX%Y>tJK-dDWaL3MqGi>*-!0?$L3WH!T&%feZU&h1@= zEo2U*2Xv4NJ2_deCohjf83ISLkoxE4~F(Oa4tn z$1!o%`~1lR2XMo_Y$wPDJ$>P??`4TDd~`UAIMl?hCyQZCaIrx3AJ4~|o4aPV#xzuF zX;U7F;CgHNPggza%8L@G=$!6Jtmy|xl@c8NuuPsT=M0=Sk}mSUwZr=4d6eGc9?y!( zvak!7WNP*Oz>R^5v^5fmL0EaBtk2*E{eAYCqY0~)A51IEV+PO!>CF7bQ`c${dfU9< z)8U-m5{Ew{W6#c*Srj={LL+N1Wke6-Aa9iV+Guq#`(5>z%#G<5U+S^4$D!;F(W6V- zt0+OPO51+%40VG7X~k|Uv9ntks`O)Tt3#nCNJRt*`csZQ!$7%Fe{zk7xG0u;KM($E z-B~`dEN5u6KVP+AblttO&h^&F^l+3Wh5S7~+y$?pH{}u7sQWaF_Mwv_Bbeoa;Ch*h z_~JRU&48R+&0{-1*E?{pdcRz=TYR?CV?Ms1lPQ%HyET(mX!93U5VBua$)m9>6N>3G zeTn6wd(?5J1hl2nmNwMhgpK$(uiUCZp!=N&C~mp5Ky)RsQ97vNEuqR{)B=Tv`H}qW z5ne&7CPlE#u)NW&(R{o4$*beevZt6574&YZ&pCz)j9q8{-JVk0|63`H1npB91Q8na zVlD_&ZnIi#IE%3s6O(F9esbgi@`YTmh?DxIvFts<4{<$HedHp^O_d_>!*NCjb?!0y zA^L7#lUx`at1;g;PLFT5gy^7@#acBezHd?a31U0A3`l~1^3r%F@$5DdkQG7Rh(BoZ zZWuh%ZgV93L=2Od!ZX5JXpNj*2M*17Xf@8H2tXLy?owo5uq|84kdh6JHm>s5!9`6* z9r4T_X>A%&58UiHEm}SVvhp6^8$9ylPUWi($3#1*T{!$~#(ClW9N&s}C&Gv7aGfSE z54jdSxqkcEXTZDUVaKjIh~p=5iNy2NMrfAghI>u2_3Y0w&fNPB4|;W>ng#@94RJxc z-j#blIhC};O!qAYobSx6t!J~lCxAcewM8&e{#~%vu-kh_^h=p_8_2mff;ZSO(XHN! z$&m6{DUwR3i{~4O2${$`$eX&~aiF#{tp=XfLfpbtp_`?cqHzw8t5&xfC&4C%M;n5) zSH22atQ8NEc{ZvHMJ-LcgI?XUNia3SUX;bGXA>=eo4K@jY7(yyHnH%1qrEWGXS;Iz zrs|8{?j13v;{h@EuIO=E$;lt+zp$xUEZkdxD&J23Sd)6_VrhHGIE?%U__A0F4S9M$ zz1W|_MJYTVxB@gYy8y6|f=bw|i1HQ782J-Ldg`nBFUzm$@Hn}MiEs7ocggOxM=o7r zp^w`RzsY?xh3qb05D71pEXQqoNIfT%QfB!FtqAtor7pl0l?pj_${7u`;n9Tq^97=E z7E;wWpPRta3vN<}7j!H({18j%@pu&C3IT65FR%yhE2^Y&B%G6$eUKOoLFCY)vM&?PwrIQQ=HYiO{heZkH_B7hX0YoLGl|0OWyL? zQSXdMQMs>pmB)ymG#7jH91Nz;c{<7RTW`YnWdf|<;V!HX9Cp~I-GZB0O6jyq8lU{I zAm=Qjw&66(HHrv9oizHfm?1Vh=TFvJ-137IYL}SjL2lUmIU7aoO^aH`YYyX5$0Zy yU7+l^fQ3uykQARb%;C@JdV0_Hqo+jrc(BfWwvK`zXTQrgh?N!8<;$L$z572>=?S|4 diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 111bc8d2061b0289f90afbda82e56b4d7212c603..dc7e9b300544083774b4ee0ad391f159447fd179 100644 GIT binary patch delta 18493 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 diff --git a/icons/obj/wallets.dmi b/icons/obj/wallets.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0a96bc16f5c86896236b4e801fcd89db5a223f48 GIT binary patch literal 1957 zcmaJ?X;c$g8m$m9-5_8_#05;8=`#cr#W4a3X#&XFLO=rz0#Q8dDk2bMH3_2F7-eas zH3&q329-r^1QH~IA~b?5-4PWC5FGF_q(@FWqOfZ zbhNf=K@gE(D3juo&|csAq)ni zOF)7q4LW>Sw1YqD5WIwatM`NF zJ>r+zr(}d>vf2912+l77UVD98&K$BRP}--R#AcMT)>zYGbPz1Zmc~Iof+C7S0wiNke<|Gp1rcYIYVyg$9ss zdo@0P55!^ecgFR-ndyRkSyYwl;a@$CZL^BHaCcJW?W1S+8}-b8H>Tg_5~EmgiE*?~ zr5gQSX=hZFI!Udn7edN~KVqV$vwu(4);^ohHu4A|wIbcaYvE(ywDaQPVq8J5`EK(E zHM`9xsq&ebQzbkzVf$KITexuAAhtx37jdyXA)yiad1Pcp!^E~(R-?Ur2uSZ}+i`aY zaUo?AtBx%XHO&l|5nJvd2?Rx>e0jdFrHyy{OQ3TWXu6{m5t}nt>=ELRxVzJ6Skt zyxh*W=%oc8YKlA8-9|PNYZfnwC~;zM!@-J2?_X@W~f#AS% z^8;&Xm%{BhsuO|O7AgI8^UgC0Vp}!94H<&$SRY2wmSkX5gcu@TpFwU0*|G%TARr55 zAY)|^loCv~`V{r?uz=%*(2V9c8>>jW4L0tpU!bUZ?O+g%;DgqVC@1^vsDdcG%Rfd0)uK(93 zt68Klz0Sdj*!F5{fM(m)pFiFosytGy2))^*Mk~Md7TG0kdpV&7mFO1+k(l0l{ zH-h`=_9A%9MuF^@Bu2H4Ld)gsxPsXI3~UfA>y0-;u>7^c$21xkV0xfKU7C?NUPR`Sib(&Vw}x z%GShsw#0x%X!-4mb)P9LVxcprB1hIbbaLYObmQaz?bxvj9`fc(>Yn1+DJA;3!HI@c zY{FO+?C+p@`^uc(h$ZSnE8SqLf^V{#=~b=ktnOJAQwmEGKNZDEFyX%IJ!O*NlExMEm~ zihVj-b~$!@3N}=k0y}#3HR3Al=-<&+JFC_?Il?ntik66V>k?59RqV;X)4iH$i9xOc z*|o#k?g1RyiOvSHtA*n3kE%;m(Qw2UtUoIec-ECsH!znC)py7y+(3=ubNg0W6JD_gpvqh{O<4;%18@$` Date: Fri, 12 Feb 2016 03:21:54 -0500 Subject: [PATCH 02/52] pda refactor --- code/__DEFINES/pda.dm | 3 + code/_onclick/hud/ai.dm | 4 +- code/game/gamemodes/game_mode.dm | 6 +- code/game/gamemodes/mutiny/mutiny.dm | 4 +- .../shadowling/shadowling_abilities.dm | 5 +- code/game/machinery/camera/camera.dm | 6 +- code/game/machinery/computer/message.dm | 34 +- code/game/machinery/vending.dm | 4 +- code/game/objects/items/devices/PDA/PDA.dm | 1096 ++--------------- code/game/objects/items/devices/PDA/ai.dm | 91 ++ code/game/objects/items/devices/PDA/app.dm | 62 + code/game/objects/items/devices/PDA/cart.dm | 613 +++------ .../objects/items/devices/PDA/cart_apps.dm | 415 +++++++ .../objects/items/devices/PDA/core_apps.dm | 106 ++ .../objects/items/devices/PDA/messenger.dm | 283 +++++ .../items/devices/PDA/messenger_plugins.dm | 69 ++ code/game/objects/items/devices/PDA/pdas.dm | 193 +++ code/game/objects/items/devices/PDA/radio.dm | 61 +- .../objects/items/devices/PDA/utilities.dm | 192 +++ code/modules/events/money_spam.dm | 10 +- code/modules/mob/living/silicon/pai/pai.dm | 3 +- .../living/silicon/pai/software_modules.dm | 29 +- .../modules/mob/living/silicon/robot/robot.dm | 4 +- code/modules/ninja/suit/SpiderOS.dm | 4 +- nano/assets/nano.js | 2 +- nano/assets/nanoui.css | 2 +- nano/scripts/nano/nano_state_pda.js | 57 + nano/scripts/nano/nano_template.js | 3 + nano/styles/_color.less | 7 +- nano/styles/_config.less | 10 +- nano/styles/_misc.less | 52 + nano/styles/_native.less | 2 +- nano/templates/pda.tmpl | 1040 +--------------- nano/templates/pda_atmos_scan.tmpl | 60 + nano/templates/pda_janitor.tmpl | 50 + nano/templates/pda_main_menu.tmpl | 48 + nano/templates/pda_manifest.tmpl | 96 ++ nano/templates/pda_medical.tmpl | 54 + nano/templates/pda_messenger.tmpl | 81 ++ nano/templates/pda_mule.tmpl | 118 ++ nano/templates/pda_notekeeper.tmpl | 21 + nano/templates/pda_power.tmpl | 49 + nano/templates/pda_secbot.tmpl | 59 + nano/templates/pda_security.tmpl | 50 + nano/templates/pda_signaller.tmpl | 38 + nano/templates/pda_status_display.tmpl | 44 + nano/templates/pda_supply.tmpl | 39 + paradise.dme | 9 + 48 files changed, 2797 insertions(+), 2491 deletions(-) create mode 100644 code/__DEFINES/pda.dm create mode 100644 code/game/objects/items/devices/PDA/ai.dm create mode 100644 code/game/objects/items/devices/PDA/app.dm create mode 100644 code/game/objects/items/devices/PDA/cart_apps.dm create mode 100644 code/game/objects/items/devices/PDA/core_apps.dm create mode 100644 code/game/objects/items/devices/PDA/messenger.dm create mode 100644 code/game/objects/items/devices/PDA/messenger_plugins.dm create mode 100644 code/game/objects/items/devices/PDA/pdas.dm create mode 100644 code/game/objects/items/devices/PDA/utilities.dm create mode 100644 nano/scripts/nano/nano_state_pda.js create mode 100644 nano/templates/pda_atmos_scan.tmpl create mode 100644 nano/templates/pda_janitor.tmpl create mode 100644 nano/templates/pda_main_menu.tmpl create mode 100644 nano/templates/pda_manifest.tmpl create mode 100644 nano/templates/pda_medical.tmpl create mode 100644 nano/templates/pda_messenger.tmpl create mode 100644 nano/templates/pda_mule.tmpl create mode 100644 nano/templates/pda_notekeeper.tmpl create mode 100644 nano/templates/pda_power.tmpl create mode 100644 nano/templates/pda_secbot.tmpl create mode 100644 nano/templates/pda_security.tmpl create mode 100644 nano/templates/pda_signaller.tmpl create mode 100644 nano/templates/pda_status_display.tmpl create mode 100644 nano/templates/pda_supply.tmpl diff --git a/code/__DEFINES/pda.dm b/code/__DEFINES/pda.dm new file mode 100644 index 00000000000..d22b90870b0 --- /dev/null +++ b/code/__DEFINES/pda.dm @@ -0,0 +1,3 @@ +#define PDA_APP_UPDATE 0 +#define PDA_APP_NOUPDATE 1 +#define PDA_APP_UPDATE_SLOW 2 \ No newline at end of file diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 790cbd305bc..0049537e9b4 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -100,7 +100,7 @@ /obj/screen/ai/pda_msg_send/Click() if(isAI(usr)) var/mob/living/silicon/ai/AI = usr - AI.cmd_send_pdamesg(usr) + AI.aiPDA.cmd_send_pdamesg() /obj/screen/ai/pda_msg_show name = "PDA - Show Message Log" @@ -109,7 +109,7 @@ /obj/screen/ai/pda_msg_show/Click() if(isAI(usr)) var/mob/living/silicon/ai/AI = usr - AI.cmd_show_message_log(usr) + AI.aiPDA.cmd_show_message_log() /obj/screen/ai/image_take name = "Take Image" diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 08e8f74b312..73ce77d0474 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -133,11 +133,11 @@ else msg += "However, we were unable to send you the $[pay] you're entitled." if(useMS && P) - // THIS SHOULD HAVE DONE EVERYTHING FOR ME useMS.send_pda_message("[P.owner]", "[command_name()] Payroll", msg) - // BUT NOPE, NEED TO DO THIS BULLSHIT. - P.play_ringtone() + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + if(PM) + PM.play_ringtone() //Search for holder of the PDA. var/mob/living/L = null if(P.loc && isliving(P.loc)) diff --git a/code/game/gamemodes/mutiny/mutiny.dm b/code/game/gamemodes/mutiny/mutiny.dm index 1d2faebe5ff..113cffa46c0 100644 --- a/code/game/gamemodes/mutiny/mutiny.dm +++ b/code/game/gamemodes/mutiny/mutiny.dm @@ -105,7 +105,9 @@ datum/game_mode/mutiny if (!pda) return 0 - pda.play_ringtone() + var/datum/data/pda/app/messenger/pdam = pda.find_program(/datum/data/pda/app/messenger) + if(pdam) + pdam.play_ringtone() head_mutineer.current << fluff.get_pda_body() return 1 diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index f4186557627..2dfa31cc4a0 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -80,8 +80,9 @@ F.update_brightness() else if(istype(I, /obj/item/device/pda)) var/obj/item/device/pda/P = I - P.fon = 0 - P.set_light(0) + var/datum/data/pda/utility/flashlight/FL = P.find_program(/datum/data/pda/utility/flashlight) + if(FL && FL.fon) + FL.start() else if(istype(I, /obj/item/clothing/head/helmet/space/rig)) var/obj/item/clothing/head/helmet/space/rig/R = I if(R.on) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 5b1e1610e83..6e9c41ff983 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -205,8 +205,10 @@ info = X.info else P = W - itemname = P.name - info = P.notehtml + var/datum/data/pda/app/notekeeper/N = P.find_program(/datum/data/pda/app/notekeeper) + if(N) + itemname = P.name + info = N.notehtml U << "You hold \the [itemname] up to the camera ..." U.changeNext_move(CLICK_CD_MELEE) for(var/mob/O in player_list) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 0ebb13efcd6..72d01fda958 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -408,7 +408,10 @@ //Get out list of viable PDAs var/list/obj/item/device/pda/sendPDAs = list() for(var/obj/item/device/pda/P in PDAs) - if(!P.owner || P.toff || P.hidden) continue + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + + if(!PM || !PM.can_receive()) + continue sendPDAs += P if(PDAs && PDAs.len > 0) customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortAtom(sendPDAs) @@ -426,7 +429,6 @@ //Send message if("Send") - if(isnull(customsender) || customsender == "") customsender = "UNKNOWN" @@ -438,36 +440,44 @@ message = "NOTICE: No message entered!" return src.attack_hand(usr) + var/datum/data/pda/app/messenger/recipient_messenger = customrecepient.find_program(/datum/data/pda/app/messenger) + + if(!recipient_messenger) + message = "ERROR: Message could not be transmitted!" + return src.attack_hand(usr) + var/obj/item/device/pda/PDARec = null for (var/obj/item/device/pda/P in PDAs) - if (!P.owner || P.toff || P.hidden) continue + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + + if (!PM || !PM.can_receive()) + continue if(P.owner == customsender) PDARec = P + break //Sender isn't faking as someone who exists if(isnull(PDARec)) src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]") - customrecepient.play_ringtone() + recipient_messenger.play_ringtone() if( customrecepient.loc && ishuman(customrecepient.loc) ) var/mob/living/carbon/human/H = customrecepient.loc H << "\icon[customrecepient] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)" log_pda("[usr] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]") - customrecepient.overlays.Cut() - customrecepient.overlays += image('icons/obj/pda.dmi', "pda-r") + recipient_messenger.set_new(1) //Sender is faking as someone who exists else src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]") - customrecepient.tnote.Add(list(list("sent" = 0, "owner" = "[PDARec.owner]", "job" = "[customjob]", "message" = "[custommessage]", "target" ="\ref[PDARec]"))) + recipient_messenger.tnote.Add(list(list("sent" = 0, "owner" = "[PDARec.owner]", "job" = "[customjob]", "message" = "[custommessage]", "target" ="\ref[PDARec]"))) - if(!customrecepient.conversations.Find("\ref[PDARec]")) - customrecepient.conversations.Add("\ref[PDARec]") + if(!recipient_messenger.conversations.Find("\ref[PDARec]")) + recipient_messenger.conversations.Add("\ref[PDARec]") - customrecepient.play_ringtone() + recipient_messenger.play_ringtone() if( customrecepient.loc && ishuman(customrecepient.loc) ) var/mob/living/carbon/human/H = customrecepient.loc H << "\icon[customrecepient] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)" log_pda("[usr] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]") - customrecepient.overlays.Cut() - customrecepient.overlays += image('icons/obj/pda.dmi', "pda-r") + recipient_messenger.set_new(1) //Finally.. ResetMessage() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 0939b189eb1..5f3d8698a11 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -836,11 +836,11 @@ icon_deny = "cart-deny" products = list(/obj/item/device/pda =10,/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/chemistry = 10, /obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/atmos = 10,/obj/item/weapon/cartridge/janitor = 10, - /obj/item/weapon/cartridge/signal/toxins = 10,/obj/item/weapon/cartridge/signal = 10,/obj/item/weapon/cartridge = 10) + /obj/item/weapon/cartridge/signal/toxins = 10,/obj/item/weapon/cartridge/signal = 10) contraband = list(/obj/item/weapon/cartridge/clown = 1,/obj/item/weapon/cartridge/mime = 1) prices = list(/obj/item/device/pda =300,/obj/item/weapon/cartridge/medical = 200,/obj/item/weapon/cartridge/chemistry = 150,/obj/item/weapon/cartridge/engineering = 100, /obj/item/weapon/cartridge/atmos = 75,/obj/item/weapon/cartridge/janitor = 100,/obj/item/weapon/cartridge/signal/toxins = 150, - /obj/item/weapon/cartridge/signal = 75,/obj/item/weapon/cartridge = 50) + /obj/item/weapon/cartridge/signal = 75) /obj/machinery/vending/liberationstation diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 697e2c9e867..d824b1b0a10 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -17,45 +17,31 @@ var/global/list/obj/item/device/pda/PDAs = list() var/owner = null var/default_cartridge = 0 // Access level defined by cartridge var/obj/item/weapon/cartridge/cartridge = null //current cartridge - var/mode = 0 //Controls what menu the PDA will display. 0 is hub; the rest are either built in or based on cartridge. - - var/lastmode = 0 + var/datum/data/pda/app/current_app = null + var/datum/data/pda/app/lastapp = null var/ui_tick = 0 //Secondary variables - var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner. - var/fon = 0 //Is the flashlight function on? - var/f_lum = 2 //Luminosity for the flashlight function - var/silent = 0 //To beep or not to beep, that is the question - var/toff = 0 //If 1, messenger disabled - var/tnote[0] //Current Texts - var/last_text //No text spamming - var/last_honk //Also no honk spamming that's bad too - - var/ttone = "beep" //The ringtone! - var/list/ttone_sound = list("beep" = 'sound/machines/twobeep.ogg', - "boom" = 'sound/effects/explosionfar.ogg', - "slip" = 'sound/misc/slip.ogg', - "honk" = 'sound/items/bikehorn.ogg', - "SKREE" = 'sound/voice/shriek1.ogg', - "holy" = 'sound/items/PDA/ambicha4-short.ogg', - "xeno" = 'sound/voice/hiss1.ogg') + var/model_name = "Thinktronic 5230 Personal Data Assistant" + var/datum/data/pda/utility/scanmode/scanmode = null var/lock_code = "" // Lockcode to unlock uplink var/honkamt = 0 //How many honks left when infected with honk.exe var/mimeamt = 0 //How many silence left when infected with mime.exe - var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant!" //Current note in the notepad function - var/notehtml = "" - var/cart = "" //A place to stick cartridge menu information var/detonate = 1 // Can the PDA be blown up? - var/hidden = 0 // Is the PDA hidden from the PDA list? - var/active_conversation = null // New variable that allows us to only view a single conversation. - var/list/conversations = list() // For keeping up with who we have PDA messsages from. var/newmessage = 0 //To remove hackish overlay check + var/ttone = "beep" //The ringtone! - var/list/cartmodes = list(40, 42, 43, 433, 44, 441, 45, 451, 46, 48, 47, 49) // If you add more cartridge modes add them to this list as well. - var/list/no_auto_update = list(1, 40, 43, 44, 441, 45, 451) // These modes we turn off autoupdate - var/list/update_every_five = list(3, 41, 433, 46, 47, 48, 49) // These we update every 5 ticks + var/list/programs = list( + new/datum/data/pda/app/main_menu, + new/datum/data/pda/app/notekeeper, + new/datum/data/pda/app/messenger, + new/datum/data/pda/app/manifest, + new/datum/data/pda/app/atmos_scanner, + new/datum/data/pda/utility/scanmode/notes, + new/datum/data/pda/utility/flashlight) + var/list/shortcut_cache = list() + var/list/shortcut_cat_order = list() var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both. var/ownjob = null //related to above @@ -64,271 +50,6 @@ var/global/list/obj/item/device/pda/PDAs = list() var/obj/item/device/paicard/pai = null // A slot for a personal AI device var/retro_mode = 0 -/obj/item/device/pda/medical - default_cartridge = /obj/item/weapon/cartridge/medical - icon_state = "pda-medical" - -/obj/item/device/pda/viro - default_cartridge = /obj/item/weapon/cartridge/medical - icon_state = "pda-virology" - -/obj/item/device/pda/engineering - default_cartridge = /obj/item/weapon/cartridge/engineering - icon_state = "pda-engineer" - -/obj/item/device/pda/security - default_cartridge = /obj/item/weapon/cartridge/security - icon_state = "pda-security" - -/obj/item/device/pda/detective - default_cartridge = /obj/item/weapon/cartridge/detective - icon_state = "pda-security" - -/obj/item/device/pda/warden - default_cartridge = /obj/item/weapon/cartridge/security - icon_state = "pda-warden" - -/obj/item/device/pda/janitor - default_cartridge = /obj/item/weapon/cartridge/janitor - icon_state = "pda-janitor" - ttone = "slip" - -/obj/item/device/pda/toxins - default_cartridge = /obj/item/weapon/cartridge/signal/toxins - icon_state = "pda-science" - ttone = "boom" - -/obj/item/device/pda/clown - default_cartridge = /obj/item/weapon/cartridge/clown - icon_state = "pda-clown" - desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings." - ttone = "honk" - -/obj/item/device/pda/mime - default_cartridge = /obj/item/weapon/cartridge/mime - icon_state = "pda-mime" - silent = 1 - ttone = "silence" - -/obj/item/device/pda/heads - default_cartridge = /obj/item/weapon/cartridge/head - icon_state = "pda-h" - -/obj/item/device/pda/heads/hop - default_cartridge = /obj/item/weapon/cartridge/hop - icon_state = "pda-hop" - -/obj/item/device/pda/heads/hos - default_cartridge = /obj/item/weapon/cartridge/hos - icon_state = "pda-hos" - -/obj/item/device/pda/heads/ce - default_cartridge = /obj/item/weapon/cartridge/ce - icon_state = "pda-ce" - -/obj/item/device/pda/heads/cmo - default_cartridge = /obj/item/weapon/cartridge/cmo - icon_state = "pda-cmo" - -/obj/item/device/pda/heads/rd - default_cartridge = /obj/item/weapon/cartridge/rd - icon_state = "pda-rd" - -/obj/item/device/pda/captain - default_cartridge = /obj/item/weapon/cartridge/captain - icon_state = "pda-captain" - detonate = 0 - //toff = 1 - -/obj/item/device/pda/heads/ntrep - default_cartridge = /obj/item/weapon/cartridge/supervisor - icon_state = "pda-h" - -/obj/item/device/pda/heads/magistrate - default_cartridge = /obj/item/weapon/cartridge/supervisor - icon_state = "pda-h" - -/obj/item/device/pda/heads/blueshield - default_cartridge = /obj/item/weapon/cartridge/hos - icon_state = "pda-h" - -/obj/item/device/pda/cargo - default_cartridge = /obj/item/weapon/cartridge/quartermaster - icon_state = "pda-cargo" - -/obj/item/device/pda/quartermaster - default_cartridge = /obj/item/weapon/cartridge/quartermaster - icon_state = "pda-qm" - -/obj/item/device/pda/shaftminer - icon_state = "pda-miner" - -/obj/item/device/pda/syndicate - default_cartridge = /obj/item/weapon/cartridge/syndicate - icon_state = "pda-syndi" - name = "Military PDA" - owner = "John Doe" - hidden = 1 - -/obj/item/device/pda/chaplain - icon_state = "pda-chaplain" - ttone = "holy" - -/obj/item/device/pda/lawyer - default_cartridge = /obj/item/weapon/cartridge/lawyer - icon_state = "pda-lawyer" - ttone = "..." - -/obj/item/device/pda/botanist - //default_cartridge = /obj/item/weapon/cartridge/botanist - icon_state = "pda-hydro" - -/obj/item/device/pda/roboticist - icon_state = "pda-roboticist" - -/obj/item/device/pda/librarian - icon_state = "pda-library" - desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader." - note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!" - silent = 1 //Quiet in the library! - -/obj/item/device/pda/clear - icon_state = "pda-transp" - desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition with a transparent case." - note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!" - -/obj/item/device/pda/chef - icon_state = "pda-chef" - -/obj/item/device/pda/bar - icon_state = "pda-bartender" - -/obj/item/device/pda/atmos - default_cartridge = /obj/item/weapon/cartridge/atmos - icon_state = "pda-atmos" - -/obj/item/device/pda/chemist - default_cartridge = /obj/item/weapon/cartridge/chemistry - icon_state = "pda-chemistry" - -/obj/item/device/pda/geneticist - default_cartridge = /obj/item/weapon/cartridge/medical - icon_state = "pda-genetics" - -/obj/item/device/pda/centcom - default_cartridge = /obj/item/weapon/cartridge/centcom - icon_state = "pda-h" - - -// Special AI/pAI PDAs that cannot explode. -/obj/item/device/pda/ai - icon_state = "NONE" - ttone = "data" - detonate = 0 - - -/obj/item/device/pda/ai/proc/set_name_and_job(newname as text, newjob as text, newrank as null|text) - owner = newname - ownjob = newjob - if(newrank) - ownrank = newrank - else - ownrank = ownjob - name = newname + " (" + ownjob + ")" - - -//AI verb and proc for sending PDA messages. -/mob/living/silicon/ai/proc/cmd_send_pdamesg(mob/user as mob) - if(user.stat == 2) - user << "You can't send PDA messages because you are dead!" - return - var/list/plist = aiPDA.available_pdas() - if (plist) - var/c = input(user, "Please select a PDA") as null|anything in sortList(plist) - if (!c) // if the user hasn't selected a PDA file we can't send a message - return - var/selected = plist[c] - aiPDA.create_message(user, selected) - -/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user as mob) - if(user.stat == 2) - user << "You can't do that because you are dead!" - return - var/HTML = "AI PDA Message Log" - for(var/index in aiPDA.tnote) - if(index["sent"]) - HTML += addtext("→ To ", index["owner"],":
", index["message"], "
") - else - HTML += addtext("← From ", index["owner"],":
", index["message"], "
") - HTML +="" - user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") - -/obj/item/device/pda/ai/verb/cmd_send_pdamesg() - set category = "AI IM" - set name = "Send PDA Message" - set src in usr - if(usr.stat == 2) - usr << "You can't send PDA messages because you are dead!" - return - var/list/plist = available_pdas() - if (plist) - var/c = input(usr, "Please select a PDA") as null|anything in sortList(plist) - if (!c) // if the user hasn't selected a PDA file we can't send a message - return - var/selected = plist[c] - create_message(usr, selected) - -/obj/item/device/pda/ai/verb/cmd_show_message_log() - set category = "AI IM" - set name = "Show Message Log" - set src in usr - if(usr.stat == 2) - usr << "You can't do that because you are dead!" - return - var/HTML = "AI PDA Message Log" - for(var/index in tnote) - if(index["sent"]) - HTML += addtext("→ To ", index["owner"],":
", index["message"], "
") - else - HTML += addtext("← From ", index["owner"],":
", index["message"], "
") - HTML +="" - usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") - -/obj/item/device/pda/ai/verb/cmd_toggle_pda_receiver() - set category = "AI IM" - set name = "Toggle Sender/Receiver" - set src in usr - if(usr.stat == 2) - usr << "You can't do that because you are dead!" - return - toff = !toff - usr << "PDA sender/receiver toggled [(toff ? "Off" : "On")]!" - - -/obj/item/device/pda/ai/verb/cmd_toggle_pda_silent() - set category = "AI IM" - set name = "Toggle Ringer" - set src in usr - if(usr.stat == 2) - usr << "You can't do that because you are dead!" - return - silent=!silent - usr << "PDA ringer toggled [(silent ? "Off" : "On")]!" - -/obj/item/device/pda/ai/can_use() - return 1 - - -/obj/item/device/pda/ai/attack_self(mob/user as mob) - if ((honkamt > 0) && (prob(60)))//For clown virus. - honkamt-- - playsound(loc, 'sound/items/bikehorn.ogg', 30, 1) - return - - -/obj/item/device/pda/ai/pai - ttone = "assist" - /* * The Actual PDA @@ -337,12 +58,14 @@ var/global/list/obj/item/device/pda/PDAs = list() ..() PDAs += src PDAs = sortAtom(PDAs) + update_programs() if(default_cartridge) cartridge = new default_cartridge(src) + cartridge.update_programs(src) new /obj/item/weapon/pen(src) + start_program(find_program(/datum/data/pda/app/main_menu)) /obj/item/device/pda/proc/can_use() - if(!ismob(loc)) return 0 @@ -367,19 +90,20 @@ var/global/list/obj/item/device/pda/PDAs = list() var/mob/M = usr if((!istype(over_object, /obj/screen)) && can_use()) return attack_self(M) - return - /obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) ui_tick++ var/datum/nanoui/old_ui = nanomanager.get_open_ui(user, src, "main") var/auto_update = 1 - if(mode in no_auto_update) - auto_update = 0 - if(old_ui && (mode == lastmode && ui_tick % 5 && mode in update_every_five)) + if(!current_app) return - lastmode = mode + if(current_app.update == PDA_APP_NOUPDATE && current_app == lastapp) + auto_update = 0 + if(old_ui && (current_app == lastapp && ui_tick % 5 && current_app.update == PDA_APP_UPDATE_SLOW)) + return + + lastapp = current_app var/title = "Personal Data Assistant" @@ -389,125 +113,46 @@ var/global/list/obj/item/device/pda/PDAs = list() data["owner"] = owner // Who is your daddy... data["ownjob"] = ownjob // ...and what does he do? - data["mode"] = mode // The current view - data["scanmode"] = scanmode // Scanners - data["fon"] = fon // Flashlight on? - data["pai"] = (isnull(pai) ? 0 : 1) // pAI inserted? - data["note"] = note // current pda notes - data["silent"] = silent // does the pda make noise when it receives a message? - data["toff"] = toff // is the messenger function turned off? - data["active_conversation"] = active_conversation // Which conversation are we following right now? + // update list of shortcuts, only if they changed + if(!shortcut_cache.len) + shortcut_cache = list() + shortcut_cat_order = list() + var/prog_list = programs.Copy() + if(cartridge) + prog_list |= cartridge.programs + for(var/datum/data/pda/P in prog_list) + if(P.hidden) + continue + var/list/cat + if(P.category in shortcut_cache) + cat = shortcut_cache[P.category] + else + cat = list() + shortcut_cache[P.category] = cat + shortcut_cat_order += P.category + cat |= list(list(name = P.name, icon = P.icon, ref = "\ref[P]")) + + // force the order of a few core categories + shortcut_cat_order = list("General") \ + + sortList(shortcut_cat_order - list("General", "Scanners", "Utilities")) \ + + list("Scanners", "Utilities") data["idInserted"] = (id ? 1 : 0) data["idLink"] = (id ? text("[id.registered_name], [id.assignment]") : "--------") data["useRetro"] = retro_mode - data["cart_loaded"] = cartridge ? 1:0 - if(cartridge) - var/cartdata[0] - - cartdata["access"] = list(\ - "access_security" = cartridge.access_security,\ - "access_engine" = cartridge.access_engine,\ - "access_atmos" = cartridge.access_atmos,\ - "access_medical" = cartridge.access_medical,\ - "access_clown" = cartridge.access_clown,\ - "access_mime" = cartridge.access_mime,\ - "access_janitor" = cartridge.access_janitor,\ - "access_quartermaster" = cartridge.access_quartermaster,\ - "access_hydroponics" = cartridge.access_hydroponics,\ - "access_reagent_scanner" = cartridge.access_reagent_scanner,\ - "access_remote_door" = cartridge.access_remote_door,\ - "access_status_display" = cartridge.access_status_display,\ - "access_detonate_pda" = cartridge.access_detonate_pda\ - ) - - if(mode in cartmodes) - data["records"] = cartridge.create_NanoUI_values() - - if(mode == 0) - cartdata["name"] = cartridge.name - if(isnull(cartridge.radio)) - cartdata["radio"] = 0 - else - if(istype(cartridge.radio, /obj/item/radio/integrated/beepsky)) - cartdata["radio"] = 1 - if(istype(cartridge.radio, /obj/item/radio/integrated/signal)) - cartdata["radio"] = 2 - if(istype(cartridge.radio, /obj/item/radio/integrated/mule)) - cartdata["radio"] = 3 - - if(mode == 2) - cartdata["charges"] = cartridge.charges ? cartridge.charges : 0 - data["cartridge"] = cartdata + data["cartridge_name"] = cartridge ? cartridge.name : "" data["stationTime"] = worldtime2text() - data["newMessage"] = newmessage - if(mode==2) - var/convopdas[0] - var/pdas[0] - var/count = 0 - for (var/obj/item/device/pda/P in PDAs) - if (!P.owner||P.toff||P == src||P.hidden) continue - if(conversations.Find("\ref[P]")) - convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1"))) - else - pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0"))) - count++ - - data["convopdas"] = convopdas - data["pdas"] = pdas - data["pda_count"] = count - - if(mode==21) - data["messagescount"] = tnote.len - data["messages"] = tnote - else - data["messagescount"] = null - data["messages"] = null - - if(active_conversation) - for(var/c in tnote) - if(c["target"] == active_conversation) - data["convo_name"] = sanitize(c["owner"]) - data["convo_job"] = sanitize(c["job"]) - break - if(mode==41) - data_core.get_manifest_json() - - - if(mode==3) - var/turf/T = get_turf(user.loc) - if(!isnull(T)) - var/datum/gas_mixture/environment = T.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - data["aircontents"] = list(\ - "pressure" = "[round(pressure,0.1)]",\ - "nitrogen" = "[round(n2_level*100,0.1)]",\ - "oxygen" = "[round(o2_level*100,0.1)]",\ - "carbon_dioxide" = "[round(co2_level*100,0.1)]",\ - "plasma" = "[round(plasma_level*100,0.01)]",\ - "other" = "[round(unknown_level, 0.01)]",\ - "temp" = "[round(environment.temperature-T0C,0.1)]",\ - "reading" = 1\ - ) - if(isnull(data["aircontents"])) - - data["aircontents"] = list("reading" = 0) - - - data["manifest"] = list("__json_cache" = ManifestJSON) + data["app"] = list() + current_app.update_ui(user, data) + data["app"] |= list( + "name" = current_app.title, + "icon" = current_app.icon, + "template" = current_app.template, + "has_back" = current_app.has_back) // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -515,37 +160,53 @@ var/global/list/obj/item/device/pda/PDAs = list() // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "pda.tmpl", title, 630, 600, state = inventory_state) + ui.set_state_key("pda") // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window ui.open() + // auto update every Master Controller tick ui.set_auto_update(auto_update) -//NOTE: graphic resources are loaded on client login /obj/item/device/pda/attack_self(mob/user as mob) user.set_machine(src) if(active_uplink_check(user)) return ui_interact(user) //NanoUI requires this proc - return + +/obj/item/device/pda/proc/start_program(datum/data/pda/P) + if(P && ((P in programs) || (cartridge && (P in cartridge.programs)))) + return P.start() + return 0 + +/obj/item/device/pda/proc/find_program(type) + var/datum/data/pda/A = locate(type) in programs + if(A) + return A + if(cartridge) + A = locate(type) in cartridge.programs + if(A) + return A + return null + +// force the cache to rebuild on update_ui +/obj/item/device/pda/proc/update_shortcuts() + shortcut_cache.Cut() + +/obj/item/device/pda/proc/update_programs() + for(var/datum/data/pda/P in programs) + P.pda = src /obj/item/device/pda/Topic(href, href_list) - if(href_list["cartmenu"] && !isnull(cartridge)) - cartridge.Topic(href, href_list) - return 1 - if(href_list["radiomenu"] && !isnull(cartridge) && !isnull(cartridge.radio)) - cartridge.radio.Topic(href, href_list) - return 1 + . = ..() + if(.) + return - - ..() var/mob/user = usr var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") var/mob/living/U = usr - //Looking for master was kind of pointless since PDAs don't appear to have one. - //if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) ) if (usr.stat == DEAD) return 0 if(!can_use()) //Why reinvent the wheel? There's a proc that does exactly that. @@ -557,270 +218,55 @@ var/global/list/obj/item/device/pda/PDAs = list() add_fingerprint(U) U.set_machine(src) + if(href_list["radiomenu"] && !isnull(cartridge) && !isnull(cartridge.radio)) + cartridge.radio.Topic(href, href_list) + return 1 + + . = 1 + switch(href_list["choice"]) - -//BASIC FUNCTIONS=================================== - - if("Close")//Self explanatory - U.unset_machine() - ui.close() - return 0 - if("Refresh")//Refresh, goes to the end of the proc. - if("Return")//Return - if(mode<=9) - mode = 0 - else - mode = round(mode/10) - if(mode==2) - active_conversation = null - if(mode==4)//Fix for cartridges. Redirects to hub. - mode = 0 - else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu. - cartridge.mode = mode - if("Retro") - retro_mode = !retro_mode - ui_interact(user) - if ("Authenticate")//Checks for ID - id_check(U, 1) - if("UpdateInfo") - ownjob = id.assignment - ownrank = id.rank - name = "PDA-[owner] ([ownjob])" + if("Home")//Go home, largely replaces the old Return + var/datum/data/pda/app/main_menu/A = find_program(/datum/data/pda/app/main_menu) + if(A) + start_program(A) + if("StartProgram") + if(href_list["program"]) + var/datum/data/pda/app/A = locate(href_list["program"]) + if(A) + start_program(A) if("Eject")//Ejects the cart, only done from hub. if (!isnull(cartridge)) var/turf/T = loc if(ismob(T)) T = T.loc - cartridge.loc = T - mode = 0 - scanmode = 0 - if (cartridge.radio) - cartridge.radio.hostpda = null + var/obj/item/weapon/cartridge/C = cartridge + C.loc = T + if(scanmode in C.programs) + scanmode = null + if(current_app in C.programs) + start_program(find_program(/datum/data/pda/app/main_menu)) + if(C.radio) + C.radio.hostpda = null cartridge = null - -//MENU FUNCTIONS=================================== - - if("0")//Hub - mode = 0 - if("1")//Notes - mode = 1 - if("2")//Messenger - mode = 2 - if("21")//Read messages - mode = 21 - if("3")//Atmos scan - mode = 3 - if("4")//Redirects to hub - mode = 0 - if("chatroom") // chatroom hub - mode = 5 - if("41") //Manifest - mode = 41 - - -//MAIN FUNCTIONS=================================== - - if("Light") - if(fon) - fon = 0 - set_light(0) - else - fon = 1 - set_light(f_lum) - if("Medical Scan") - if(scanmode == 1) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_medical)) - scanmode = 1 - if("Reagent Scan") - if(scanmode == 3) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner)) - scanmode = 3 - if("Halogen Counter") - if(scanmode == 4) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_engine)) - scanmode = 4 - if("Honk") - if ( !(last_honk && world.time < last_honk + 20) ) - playsound(loc, 'sound/items/bikehorn.ogg', 50, 1) - last_honk = world.time - if("Gas Scan") - if(scanmode == 5) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_atmos)) - scanmode = 5 - -//MESSENGER/NOTE FUNCTIONS=================================== - - if ("Edit") - var/n = input(U, "Please enter message", name, notehtml) as message - if (in_range(src, U) && loc == U) - n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN) - if (mode == 1) - note = html_decode(n) - notehtml = note - note = replacetext(note, "\n", "
") - else - ui.close() - if("Toggle Messenger") - toff = !toff - if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status - silent = !silent - if("Clear")//Clears messages - if(href_list["option"] == "All") - tnote.Cut() - conversations.Cut() - if(href_list["option"] == "Convo") - var/new_tnote[0] - for(var/i in tnote) - if(i["target"] != active_conversation) - new_tnote[++new_tnote.len] = i - tnote = new_tnote - conversations.Remove(active_conversation) - - active_conversation = null - if(mode==21) - mode=2 - - if("Ringtone") - var/t = input(U, "Please enter new ringtone", name, ttone) as text - if (in_range(src, U) && loc == U) - if (t) - if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code))) - U << "The PDA softly beeps." - ui.close() - else - t = sanitize(copytext(t, 1, 20)) - ttone = t - else - ui.close() - return 0 - if("Message") - - var/obj/item/device/pda/P = locate(href_list["target"]) - src.create_message(U, P) - if(mode == 2) - if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp. - active_conversation = href_list["target"] - mode = 21 - - if("Select Conversation") - var/P = href_list["convo"] - for(var/n in conversations) - if(P == n) - active_conversation=P - mode=21 - if("Send Honk")//Honk virus - if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch. - var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess. - if(!isnull(P)) - if (!P.toff && cartridge.charges > 0) - cartridge.charges-- - U.show_message("\blue Virus sent!", 1) - P.honkamt = (rand(15,20)) - else - U << "PDA not found." - else - ui.close() - return 0 - if("Send Silence")//Silent virus - if(istype(cartridge, /obj/item/weapon/cartridge/mime)) - var/obj/item/device/pda/P = locate(href_list["target"]) - if(!isnull(P)) - if (!P.toff && cartridge.charges > 0) - cartridge.charges-- - U.show_message("\blue Virus sent!", 1) - P.silent = 1 - P.ttone = "silence" - else - U << "PDA not found." - else - ui.close() - return 0 - - -//SYNDICATE FUNCTIONS=================================== - - if("Toggle Door") - if(cartridge && cartridge.access_remote_door) - for(var/obj/machinery/door/poddoor/M in world) - if(M.id_tag == cartridge.remote_door_id) - if(M.density) - M.open() - else - M.close() - - if("Detonate")//Detonate PDA - if(istype(cartridge, /obj/item/weapon/cartridge/syndicate)) - var/obj/item/device/pda/P = locate(href_list["target"]) - if(!isnull(P)) - if (!P.toff && cartridge.charges > 0) - cartridge.charges-- - - var/difficulty = 0 - - if(P.cartridge) - difficulty += P.cartridge.access_medical - difficulty += P.cartridge.access_security - difficulty += P.cartridge.access_engine - difficulty += P.cartridge.access_clown - difficulty += P.cartridge.access_janitor - else - difficulty += 2 - - if(prob(difficulty * 12) || (P.hidden_uplink)) - U.show_message("\red An error flashes on your [src].", 1) - else if (prob(difficulty * 3)) - U.show_message("\red Energy feeds back into your [src]!", 1) - ui.close() - explode() - log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up") - message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1) - else - U.show_message("\blue Success!", 1) - log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded") - message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1) - P.explode() - else - U << "PDA not found." - else - U.unset_machine() - ui.close() - return 0 - -//pAI FUNCTIONS=================================== - if("pai") - if(pai) - if(pai.loc != src) - pai = null - else - switch(href_list["option"]) - if("1") // Configure pAI device - pai.attack_self(U) - if("2") // Eject pAI device - var/turf/T = get_turf_or_move(src.loc) - if(T) - pai.loc = T - pai = null - + update_shortcuts() + if ("Authenticate")//Checks for ID + id_check(usr, 1) + if("Retro") + retro_mode = !retro_mode else - mode = text2num(href_list["choice"]) - if(cartridge) - cartridge.mode = mode + if(current_app) + . = current_app.Topic(href, href_list) //EXTRA FUNCTIONS=================================== - - if (mode == 2||mode == 21)//To clear message overlays. - overlays.Cut() - newmessage = 0 - if ((honkamt > 0) && (prob(60)))//For clown virus. honkamt-- playsound(loc, 'sound/items/bikehorn.ogg', 30, 1) - return 1 // return 1 tells it to refresh the UI in NanoUI + return // return 1 tells it to refresh the UI in NanoUI + +/obj/item/device/pda/proc/close(mob/user) + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + ui.close() /obj/item/device/pda/verb/verb_reset_pda() set category = "Object" @@ -831,8 +277,7 @@ var/global/list/obj/item/device/pda/PDAs = list() return if(can_use(usr)) - mode = 0 - nanomanager.update_uis(src) + start_program(find_program(/datum/data/pda/app/main_menu)) usr << "You press the reset button on \the [src]." else usr << "You cannot do this while restrained." @@ -847,113 +292,6 @@ var/global/list/obj/item/device/pda/PDAs = list() id.loc = get_turf(src) id = null -/obj/item/device/pda/proc/create_message(var/mob/living/U = usr, var/obj/item/device/pda/P) - - var/t = input(U, "Please enter message", name, null) as text|null - if(!t) - return - t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN)) - t = readd_quotes(t) - if (!t || !istype(P)) - return - if (!in_range(src, U) && loc != U) - return - - if (isnull(P)||P.toff || toff) - return - - if (last_text && world.time < last_text + 5) - return - - if(!can_use()) - return - - last_text = world.time - // check if telecomms I/O route 1459 is stable - //var/telecomms_intact = telecomms_process(P.owner, owner, t) - var/obj/machinery/message_server/useMS = null - if(message_servers) - for (var/obj/machinery/message_server/MS in message_servers) - //PDAs are now dependent on the Message Server. - if(MS.active) - useMS = MS - break - - var/datum/signal/signal = src.telecomms_process() - - var/useTC = 0 - if(signal) - if(signal.data["done"]) - useTC = 1 - var/turf/pos = get_turf(P) - if(pos.z in signal.data["level"]) - useTC = 2 - //Let's make this barely readable - if(signal.data["compression"] > 0) - t = Gibberish(t, signal.data["compression"] + 50) - - if(useMS && useTC) // only send the message if it's stable - if(useTC != 2) // Does our recipient have a broadcaster on their level? - U << "ERROR: Cannot reach recipient." - return - useMS.send_pda_message("[P.owner]","[owner]","[t]") - tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) - P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]"))) -/* for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice - if(istype(M, /mob/new_player)) - continue - M.show_message("PDA Message - [owner] -> [P.owner]: [t]") */ - investigate_log("PDA Message - [U.key] - [owner] -> [P.owner]: [t]", "pda") - if(!conversations.Find("\ref[P]")) - conversations.Add("\ref[P]") - if(!P.conversations.Find("\ref[src]")) - P.conversations.Add("\ref[src]") - -/* - if (prob(15)) //Give the AI a chance of intercepting the message - var/who = src.owner - if(prob(50)) - who = P.owner - for(var/mob/living/silicon/ai/ai in mob_list) - // Allows other AIs to intercept the message but the AI won't intercept their own message. - if(ai.aiPDA != P && ai.aiPDA != src) - ai.show_message("Intercepted message from [who]: [t]") -*/ - - P.play_ringtone() - //Search for holder of the PDA. - var/mob/living/L = null - if(P.loc && isliving(P.loc)) - L = P.loc - //Maybe they are a pAI! - else - L = get(P, /mob/living/silicon) - - - if(L) - L << "\icon[P] Message from [src.owner] ([ownjob]), \"[t]\" (Reply)" - nanomanager.update_user_uis(L, P) // Update the receiving user's PDA UI so that they can see the new message - - nanomanager.update_user_uis(U, P) // Update the sending user's PDA UI so that they can see the new message - - log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]") - P.overlays.Cut() - P.overlays += image('icons/obj/pda.dmi', "pda-r") - P.newmessage = 1 - else - U << "ERROR: Messaging server is not responding." - -/obj/item/device/pda/proc/play_ringtone() - if (!silent) - var/sound/S = sound('sound/machines/twobeep.ogg') - - if(ttone in ttone_sound) - S = ttone_sound[ttone] - playsound(loc, S, 50, 1) - for (var/mob/O in hearers(3, loc)) - if(!silent) O.show_message(text("\icon[src] *[ttone]*")) - /obj/item/device/pda/verb/verb_remove_id() set category = "Object" set name = "Remove id" @@ -1015,15 +353,15 @@ var/global/list/obj/item/device/pda/PDAs = list() user.put_in_hands(old_id) return -// access to status display signals /obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob, params) ..() if(istype(C, /obj/item/weapon/cartridge) && !cartridge) cartridge = C user.drop_item() cartridge.loc = src + cartridge.update_programs(src) + update_shortcuts() user << "You insert [cartridge] into [src]." - nanomanager.update_uis(src) // update all UIs attached to src if(cartridge.radio) cartridge.radio.hostpda = src @@ -1044,15 +382,11 @@ var/global/list/obj/item/device/pda/PDAs = list() if( can_use(user) )//If they can still act. id_check(user, 2) user << "You put the ID into \the [src]'s slot." - updateSelfDialog()//Update self dialog on success. - return //Return in case of failed check or when successful. - updateSelfDialog()//For the non-input related code. else if(istype(C, /obj/item/device/paicard) && !src.pai) user.drop_item() C.loc = src pai = C user << "You slot \the [C] into [src]." - nanomanager.update_uis(src) // update all UIs attached to src else if(istype(C, /obj/item/weapon/pen)) var/obj/item/weapon/pen/O = locate() in src if(O) @@ -1061,133 +395,14 @@ var/global/list/obj/item/device/pda/PDAs = list() user.drop_item() C.loc = src user << "You slide \the [C] into \the [src]." - return /obj/item/device/pda/attack(mob/living/C as mob, mob/living/user as mob) - if (istype(C, /mob/living/carbon)) - switch(scanmode) - if(1) - for (var/mob/O in viewers(C, null)) - O.show_message("\red [user] has analyzed [C]'s vitals!", 1) - - user.show_message("\blue Analyzing Results for [C]:") - user.show_message("\blue \t Overall Status: [C.stat > 1 ? "dead" : "[C.health - C.halloss]% healthy"]", 1) - user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.getFireLoss() > 50 ? "\red" : "\blue"][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1) - user.show_message("\blue \t Key: Suffocation/Toxin/Burns/Brute", 1) - user.show_message("\blue \t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)", 1) - if(C.timeofdeath && (C.stat == DEAD || (C.status_flags & FAKEDEATH))) - user.show_message("\blue \t Time of Death: [C.timeofdeath]") - if(istype(C, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = C - var/list/damaged = H.get_damaged_organs(1,1) - user.show_message("\blue Localized Damage, Brute/Burn:",1) - if(length(damaged)>0) - for(var/obj/item/organ/external/org in damaged) - user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.name),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1) - else - user.show_message("\blue \t Limbs are OK.",1) - - if(2) - if (!istype(C:dna, /datum/dna)) - user << "\blue No fingerprints found on [C]" - else - user << text("\blue [C]'s Fingerprints: [md5(C:dna.uni_identity)]") - if ( !(C:blood_DNA) ) - user << "\blue No blood found on [C]" - if(C:blood_DNA) - qdel(C:blood_DNA) - else - user << "\blue Blood found on [C]. Analysing..." - spawn(15) - for(var/blood in C:blood_DNA) - user << "\blue Blood type: [C:blood_DNA[blood]]\nDNA: [blood]" - - if(4) - for (var/mob/O in viewers(C, null)) - O.show_message("\red [user] has analyzed [C]'s radiation levels!", 1) - - user.show_message("\blue Analyzing Results for [C]:") - if(C.radiation) - user.show_message("\green Radiation Level: \black [C.radiation]") - else - user.show_message("\blue No radiation detected.") + if (istype(C, /mob/living/carbon) && scanmode) + scanmode.scan_mob(C, user) /obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) - if(!proximity) return - switch(scanmode) - - if(3) - if(!isnull(A.reagents)) - if(A.reagents.reagent_list.len > 0) - var/reagents_length = A.reagents.reagent_list.len - user << "[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found." - for (var/re in A.reagents.reagent_list) - user << "\t [re]" - else - user << "No active chemical agents found in [A]." - else - user << "No significant chemical agents found in [A]." - - if(5) - if (istype(A, /obj/item/weapon/tank)) - var/obj/item/weapon/tank/T = A - atmosanalyzer_scan(T.air_contents, user, T) - else if (istype(A, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/T = A - atmosanalyzer_scan(T.air_contents, user, T) - else if (istype(A, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/T = A - atmosanalyzer_scan(T.parent.air, user, T) - else if (istype(A, /obj/machinery/power/rad_collector)) - var/obj/machinery/power/rad_collector/T = A - if(T.P) atmosanalyzer_scan(T.P.air_contents, user, T) - else if (istype(A, /obj/item/weapon/flamethrower)) - var/obj/item/weapon/flamethrower/T = A - if(T.ptank) atmosanalyzer_scan(T.ptank.air_contents, user, T) - else if (istype(A, /obj/machinery/portable_atmospherics/scrubber/huge)) - var/obj/machinery/portable_atmospherics/scrubber/huge/T = A - atmosanalyzer_scan(T.air_contents, user, T) - else if (istype(A, /obj/machinery/atmospherics/unary/tank)) - var/obj/machinery/atmospherics/unary/tank/T = A - atmosanalyzer_scan(T.air_contents, user, T) - - if (!scanmode && istype(A, /obj/item/weapon/paper) && owner) - // JMO 20140705: Makes scanned document show up properly in the notes. Not pretty for formatted documents, - // as this will clobber the HTML, but at least it lets you scan a document. You can restore the original - // notes by editing the note again. (Was going to allow you to edit, but scanned documents are too long.) - var/raw_scan = (A:info) - var/formatted_scan = "" - // Scrub out the tags (replacing a few formatting ones along the way) - // Find the beginning and end of the first tag. - var/tag_start = findtext(raw_scan,"<") - var/tag_stop = findtext(raw_scan,">") - // Until we run out of complete tags... - while(tag_start&&tag_stop) - var/pre = copytext(raw_scan,1,tag_start) // Get the stuff that comes before the tag - var/tag = lowertext(copytext(raw_scan,tag_start+1,tag_stop)) // Get the tag so we can do intellegent replacement - var/tagend = findtext(tag," ") // Find the first space in the tag if there is one. - // Anything that's before the tag can just be added as is. - formatted_scan = formatted_scan+pre - // If we have a space after the tag (and presumably attributes) just crop that off. - if (tagend) - tag=copytext(tag,1,tagend) - if (tag=="p"||tag=="/p"||tag=="br") // Check if it's I vertical space tag. - formatted_scan=formatted_scan+"
" // If so, add some padding in. - raw_scan = copytext(raw_scan,tag_stop+1) // continue on with the stuff after the tag - // Look for the next tag in what's left - tag_start = findtext(raw_scan,"<") - tag_stop = findtext(raw_scan,">") - // Anything that is left in the page. just tack it on to the end as is - formatted_scan=formatted_scan+raw_scan - // If there is something in there already, pad it out. - if (length(note)>0) - note = note + "

" - // Store the scanned document to the notes - note = "Scanned Document. Edit to restore previous notes/delete scan.
----------
" + formatted_scan + "
" - // notehtml ISN'T set to allow user to get their old notes back. A better implementation would add a "scanned documents" - // feature to the PDA, which would better convey the availability of the feature, but this will work for now. - // Inform the user - user << "\blue Paper scanned and OCRed to notekeeper." //concept of scanning paper copyright brainoblivion 2009 + if(proximity && scanmode) + scanmode.scan_atom(A, user) /obj/item/device/pda/proc/explode() //This needs tuning. if(!src.detonate) return @@ -1212,64 +427,7 @@ var/global/list/obj/item/device/pda/PDAs = list() src.pai.loc = get_turf(src.loc) return ..() -/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. - if (istype(AM, /mob/living/carbon)) - var/mob/living/carbon/M = AM - M.slip("pda", 8, 5, 0, 1) - -/obj/item/device/pda/proc/available_pdas() - var/list/names = list() - var/list/plist = list() - var/list/namecounts = list() - - if (toff) - usr << "Turn on your receiver in order to send messages." - return - - for (var/obj/item/device/pda/P in PDAs) - if (!P.owner) - continue - else if(P.hidden) - continue - else if (P == src) - continue - else if (P.toff) - continue - - var/name = P.owner - if (name in names) - namecounts[name]++ - name = text("[name] ([namecounts[name]])") - else - names.Add(name) - namecounts[name] = 1 - - plist[text("[name]")] = P - return plist - -//Some spare PDAs in a box -/obj/item/weapon/storage/box/PDAs - name = "spare PDAs" - desc = "A box of spare PDA microcomputers." - icon = 'icons/obj/pda.dmi' - icon_state = "pdabox" - - New() - ..() - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/weapon/cartridge/head(src) - - var/newcart = pick( /obj/item/weapon/cartridge/engineering, - /obj/item/weapon/cartridge/security, - /obj/item/weapon/cartridge/medical, - /obj/item/weapon/cartridge/signal/toxins, - /obj/item/weapon/cartridge/quartermaster) - new newcart(src) - // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP /obj/item/device/pda/emp_act(severity) for(var/atom/A in src) - A.emp_act(severity) + A.emp_act(severity) \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/ai.dm b/code/game/objects/items/devices/PDA/ai.dm new file mode 100644 index 00000000000..65386f81387 --- /dev/null +++ b/code/game/objects/items/devices/PDA/ai.dm @@ -0,0 +1,91 @@ +// Special AI/pAI PDAs that cannot explode. +/obj/item/device/pda/ai + icon_state = "NONE" + detonate = 0 + ttone = "data" + +/obj/item/device/pda/ai/proc/set_name_and_job(newname as text, newjob as text, newrank as null|text) + owner = newname + ownjob = newjob + if(newrank) + ownrank = newrank + else + ownrank = ownjob + name = newname + " (" + ownjob + ")" + +/obj/item/device/pda/ai/verb/cmd_send_pdamesg() + set category = "AI IM" + set name = "Send PDA Message" + set src in usr + + if(usr.stat == 2) + usr << "You can't send PDA messages because you are dead!" + return + var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) + if(!M) + usr << "Cannot use messenger!" + var/list/plist = M.available_pdas() + if (plist) + var/c = input(usr, "Please select a PDA") as null|anything in sortList(plist) + if (!c) // if the user hasn't selected a PDA file we can't send a message + return + var/selected = plist[c] + M.create_message(usr, selected) + +/obj/item/device/pda/ai/verb/cmd_show_message_log() + set category = "AI IM" + set name = "Show Message Log" + set src in usr + + if(usr.stat == 2) + usr << "You can't do that because you are dead!" + return + var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) + if(!M) + usr << "Cannot use messenger!" + var/HTML = "AI PDA Message Log" + for(var/index in M.tnote) + if(index["sent"]) + HTML += addtext("→ To ", index["owner"],":
", index["message"], "
") + else + HTML += addtext("← From ", index["owner"],":
", index["message"], "
") + HTML +="" + usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") + +/obj/item/device/pda/ai/verb/cmd_toggle_pda_receiver() + set category = "AI IM" + set name = "Toggle Sender/Receiver" + set src in usr + + if(usr.stat == 2) + usr << "You can't do that because you are dead!" + return + var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) + M.toff = !M.toff + usr << "PDA sender/receiver toggled [(M.toff ? "Off" : "On")]!" + + +/obj/item/device/pda/ai/verb/cmd_toggle_pda_silent() + set category = "AI IM" + set name = "Toggle Ringer" + set src in usr + + if(usr.stat == 2) + usr << "You can't do that because you are dead!" + return + var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) + M.silent = !M.silent + usr << "PDA ringer toggled [(M.silent ? "Off" : "On")]!" + +/obj/item/device/pda/ai/can_use() + return 1 + + +/obj/item/device/pda/ai/attack_self(mob/user as mob) + if ((honkamt > 0) && (prob(60)))//For clown virus. + honkamt-- + playsound(loc, 'sound/items/bikehorn.ogg', 30, 1) + return + +/obj/item/device/pda/ai/pai + ttone = "assist" \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/app.dm b/code/game/objects/items/devices/PDA/app.dm new file mode 100644 index 00000000000..5d322b80c2f --- /dev/null +++ b/code/game/objects/items/devices/PDA/app.dm @@ -0,0 +1,62 @@ +// Base class for anything that can show up on home screen +/datum/data/pda + var/icon = "tasks" + var/hidden = 0 // program not displayed in main menu + var/category = "General" // the category to list it in on the main menu + var/obj/item/device/pda/pda // if this is null, and the app is running code, something's gone wrong + +/datum/data/pda/proc/start() + + +// An app has a button on the home screen and its own UI +/datum/data/pda/app + name = "App" + size = 3 + var/title = null // what is displayed in the title bar when this is the current app + var/template = "" + var/update = PDA_APP_UPDATE + var/has_back = 0 + +/datum/data/pda/app/New() + if(!title) + title = name + +/datum/data/pda/app/start() + pda.current_app = src + return 1 + +/datum/data/pda/app/proc/update_ui(mob/user as mob, list/data) + + +// Utilities just have a button on the home screen, but custom code when clicked +/datum/data/pda/utility + name = "Utility" + icon = "gear" + size = 1 + category = "Utilities" + + +/datum/data/pda/utility/scanmode + var/base_name + category = "Scanners" + +/datum/data/pda/utility/scanmode/New(obj/item/weapon/cartridge/C) + ..(C) + name = "Enable [base_name]" + +/datum/data/pda/utility/scanmode/start() + if(pda.scanmode) + pda.scanmode.name = "Enable [pda.scanmode.base_name]" + + if(pda.scanmode == src) + pda.scanmode = null + else + pda.scanmode = src + name = "Disable [base_name]" + + pda.update_shortcuts() + return 1 + +/datum/data/pda/utility/scanmode/proc/scan_mob(mob/living/C as mob, mob/living/user as mob) + +/datum/data/pda/utility/scanmode/proc/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 2f5790c5fbb..bf5e5902dd8 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -7,57 +7,55 @@ w_class = 1 var/obj/item/radio/integrated/radio = null - var/access_security = 0 - var/access_engine = 0 - var/access_atmos = 0 - var/access_medical = 0 - var/access_clown = 0 - var/access_mime = 0 - var/access_janitor = 0 -// var/access_flora = 0 - var/access_reagent_scanner = 0 - var/access_remote_door = 0 // Control some blast doors remotely!! - var/remote_door_id = "" - var/access_status_display = 0 - var/access_quartermaster = 0 - var/access_detonate_pda = 0 - var/access_hydroponics = 0 + var/charges = 0 - var/mode = null - var/menu - var/datum/data/record/active1 = null //General - var/datum/data/record/active2 = null //Medical - var/datum/data/record/active3 = null //Security - var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor - var/list/powermonitors = list() - var/message1 // used for status_displays - var/message2 + var/list/stored_data = list() + var/list/programs = list() + var/list/messenger_plugins = list() + +/obj/item/weapon/cartridge/New() + if(ticker && ticker.current_state >= GAME_STATE_SETTING_UP) + initialize() + +/obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda) + for(var/datum/data/pda/P in programs) + P.pda = pda + for(var/datum/data/pda/messenger_plugin/P in messenger_plugins) + P.pda = pda /obj/item/weapon/cartridge/engineering name = "Power-ON Cartridge" icon_state = "cart-e" - access_engine = 1 + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen) /obj/item/weapon/cartridge/atmos name = "BreatheDeep Cartridge" icon_state = "cart-a" - access_atmos = 1 + programs = list( + new/datum/data/pda/utility/scanmode/gas) /obj/item/weapon/cartridge/medical name = "Med-U Cartridge" icon_state = "cart-m" - access_medical = 1 + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical) /obj/item/weapon/cartridge/chemistry name = "ChemWhiz Cartridge" icon_state = "cart-chem" - access_reagent_scanner = 1 + programs = list( + new/datum/data/pda/utility/scanmode/reagent) /obj/item/weapon/cartridge/security name = "R.O.B.U.S.T. Cartridge" icon_state = "cart-s" - access_security = 1 + programs = list( + new/datum/data/pda/app/crew_records/security, + new/datum/data/pda/app/secbot_control) /obj/item/weapon/cartridge/security/initialize() radio = new /obj/item/radio/integrated/beepsky(src) @@ -66,32 +64,42 @@ /obj/item/weapon/cartridge/detective name = "D.E.T.E.C.T. Cartridge" icon_state = "cart-s" - access_security = 1 - access_medical = 1 + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/app/crew_records/security) /obj/item/weapon/cartridge/janitor name = "CustodiPRO Cartridge" desc = "The ultimate in clean-room design." icon_state = "cart-j" - access_janitor = 1 + programs = list( + new/datum/data/pda/app/janitor) /obj/item/weapon/cartridge/lawyer name = "P.R.O.V.E. Cartridge" icon_state = "cart-s" - access_security = 1 + programs = list( + new/datum/data/pda/app/crew_records/security) /obj/item/weapon/cartridge/clown name = "Honkworks 5.0" icon_state = "cart-clown" - access_clown = 1 charges = 5 + programs = list( + new/datum/data/pda/utility/honk) + messenger_plugins = list( + new/datum/data/pda/messenger_plugin/virus/clown) /obj/item/weapon/cartridge/mime name = "Gestur-O 1000" icon_state = "cart-mi" - access_mime = 1 charges = 5 + messenger_plugins = list( + new/datum/data/pda/messenger_plugin/virus/mime) + /* /obj/item/weapon/cartridge/botanist name = "Green Thumb v4.20" @@ -102,13 +110,8 @@ /obj/item/weapon/cartridge/signal name = "generic signaler cartridge" desc = "A data cartridge with an integrated radio signaler module." - -/obj/item/weapon/cartridge/signal/toxins - name = "Signal Ace 2" - desc = "Complete with integrated radio signaler!" - icon_state = "cart-tox" - access_reagent_scanner = 1 - access_atmos = 1 + programs = list( + new/datum/data/pda/app/signaller) /obj/item/weapon/cartridge/signal/initialize() radio = new /obj/item/radio/integrated/signal(src) @@ -118,11 +121,24 @@ qdel(radio) return ..() +/obj/item/weapon/cartridge/signal/toxins + name = "Signal Ace 2" + desc = "Complete with integrated radio signaler!" + icon_state = "cart-tox" + programs = list( + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/signaller) + /obj/item/weapon/cartridge/quartermaster name = "Space Parts & Space Vendors Cartridge" desc = "Perfect for the Quartermaster on the go!" icon_state = "cart-q" - access_quartermaster = 1 + programs = list( + new/datum/data/pda/app/supply, + new/datum/data/pda/app/mule_control) /obj/item/weapon/cartridge/quartermaster/initialize() radio = new /obj/item/radio/integrated/mule(src) @@ -131,15 +147,21 @@ /obj/item/weapon/cartridge/head name = "Easy-Record DELUXE" icon_state = "cart-h" - access_status_display = 1 + programs = list( + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/hop name = "HumanResources9001" icon_state = "cart-h" - access_status_display = 1 - access_quartermaster = 1 - access_janitor = 1 - access_security = 1 + programs = list( + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/janitor, + + new/datum/data/pda/app/supply, + new/datum/data/pda/app/mule_control, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/hop/initialize() radio = new /obj/item/radio/integrated/mule(src) @@ -148,8 +170,11 @@ /obj/item/weapon/cartridge/hos name = "R.O.B.U.S.T. DELUXE" icon_state = "cart-hos" - access_status_display = 1 - access_security = 1 + programs = list( + new/datum/data/pda/app/crew_records/security, + new/datum/data/pda/app/secbot_control, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/hos/initialize() radio = new /obj/item/radio/integrated/beepsky(src) @@ -158,23 +183,36 @@ /obj/item/weapon/cartridge/ce name = "Power-On DELUXE" icon_state = "cart-ce" - access_status_display = 1 - access_engine = 1 - access_atmos = 1 + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen, + + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/cmo name = "Med-U DELUXE" icon_state = "cart-cmo" - access_status_display = 1 - access_reagent_scanner = 1 - access_medical = 1 + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/rd name = "Signal Ace DELUXE" icon_state = "cart-rd" - access_status_display = 1 - access_reagent_scanner = 1 - access_atmos = 1 + programs = list( + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/signaller, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/rd/initialize() radio = new /obj/item/radio/integrated/signal(src) @@ -184,14 +222,25 @@ name = "Value-PAK Cartridge" desc = "Now with 200% more value!" icon_state = "cart-c" - access_quartermaster = 1 - access_janitor = 1 - access_engine = 1 - access_security = 1 - access_medical = 1 - access_reagent_scanner = 1 - access_status_display = 1 - access_atmos = 1 + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen, + + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/crew_records/security, + new/datum/data/pda/app/secbot_control, + + new/datum/data/pda/app/janitor, + + new/datum/data/pda/app/supply, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/captain/initialize() radio = new /obj/item/radio/integrated/beepsky(src) @@ -200,21 +249,35 @@ /obj/item/weapon/cartridge/supervisor name = "Easy-Record DELUXE" icon_state = "cart-h" - access_status_display = 1 - access_security = 1 + programs = list( + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/centcom name = "Value-PAK Cartridge" desc = "Now with 200% more value!" icon_state = "cart-c" - access_quartermaster = 1 - access_janitor = 1 - access_engine = 1 - access_security = 1 - access_medical = 1 - access_reagent_scanner = 1 - access_status_display = 1 - access_atmos = 1 + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen, + + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/crew_records/security, + new/datum/data/pda/app/secbot_control, + + new/datum/data/pda/app/janitor, + + new/datum/data/pda/app/supply, + new/datum/data/pda/app/mule_control, + + new/datum/data/pda/app/status_display) /obj/item/weapon/cartridge/centcom/initialize() radio = new /obj/item/radio/integrated/beepsky(src) @@ -223,390 +286,14 @@ /obj/item/weapon/cartridge/syndicate name = "Detomatix Cartridge" icon_state = "cart" - access_remote_door = 1 - access_detonate_pda = 1 - remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. + var/initial_remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. charges = 4 - -/obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2) - - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - if(!frequency) return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - if(loc) - var/obj/item/PDA = loc - var/mob/user = PDA.fingerprintslast - if(istype(PDA.loc,/mob/living)) - name = PDA.loc - log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") - message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") - - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) - - -/* - This generates the nano values of the cart menus. - Because we close the UI when we insert a new cart - we don't have to worry about null values on items - the user can't access. Well, unless they are href hacking. - But in that case their UI will just lock up. -*/ - - -/obj/item/weapon/cartridge/proc/create_NanoUI_values(mob/user as mob) - var/values[0] - - /* Signaler (Mode: 40) */ - - - if(istype(radio,/obj/item/radio/integrated/signal) && (mode==40)) - var/obj/item/radio/integrated/signal/R = radio - values["signal_freq"] = format_frequency(R.frequency) - values["signal_code"] = R.code - - - /* Station Display (Mode: 42) */ - - if(mode==42) - values["message1"] = message1 ? message1 : "(none)" - values["message2"] = message2 ? message2 : "(none)" - - - - /* Power Monitor (Mode: 43 / 433) */ - if(mode==43 || mode==433) - values["powermonitors"] = powermonitor_repository.powermonitor_data() - - if (powmonitor && !isnull(powmonitor.powernet)) - values["powerconnected"] = 1 - values["poweravail"] = powmonitor.powernet.avail - values["powerload"] = num2text(powmonitor.powernet.viewload,10) - values["powerdemand"] = powmonitor.powernet.load - values["apcs"] = apc_repository.apc_data(powmonitor) - else - values["powerconnected"] = 0 - - - - - - /* General Records (Mode: 44 / 441 / 45 / 451) */ - if(mode == 44 || mode == 441 || mode == 45 || mode ==451) - if(istype(active1, /datum/data/record) && (active1 in data_core.general)) - values["general"] = active1.fields - values["general_exists"] = 1 - - else - - values["general_exists"] = 0 - - - - /* Medical Records (Mode: 44 / 441) */ - - if(mode == 44 || mode == 441) - var/medData[0] - for(var/datum/data/record/R in sortRecord(data_core.general)) - medData[++medData.len] = list(Name = R.fields["name"],"ref" = "\ref[R]") - values["medical_records"] = medData - - if(istype(active2, /datum/data/record) && (active2 in data_core.medical)) - values["medical"] = active2.fields - values["medical_exists"] = 1 - else - values["medical_exists"] = 0 - - /* Security Records (Mode:45 / 451) */ - - if(mode == 45 || mode == 451) - var/secData[0] - for (var/datum/data/record/R in sortRecord(data_core.general)) - secData[++secData.len] = list(Name = R.fields["name"], "ref" = "\ref[R]") - values["security_records"] = secData - - if(istype(active3, /datum/data/record) && (active3 in data_core.security)) - values["security"] = active3.fields - values["security_exists"] = 1 - else - values["security_exists"] = 0 - - /* Security Bot Control (Mode: 46) */ - - if(mode==46) - var/botsData[0] - var/beepskyData[0] - if(istype(radio,/obj/item/radio/integrated/beepsky)) - var/obj/item/radio/integrated/beepsky/SC = radio - beepskyData["active"] = SC.active - if(SC.active && !isnull(SC.botstatus)) - var/area/loca = SC.botstatus["loca"] - var/loca_name = sanitize(loca.name) - beepskyData["botstatus"] = list("loca" = loca_name, "mode" = SC.botstatus["mode"]) - else - beepskyData["botstatus"] = list("loca" = null, "mode" = -1) - var/botsCount=0 - if(SC.botlist && SC.botlist.len) - for(var/obj/machinery/bot/B in SC.botlist) - botsCount++ - if(B.loc) - botsData[++botsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]") - - if(!botsData.len) - botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) - - beepskyData["bots"] = botsData - beepskyData["count"] = botsCount - - else - beepskyData["active"] = 0 - botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) - beepskyData["botstatus"] = list("loca" = null, "mode" = null) - beepskyData["bots"] = botsData - beepskyData["count"] = 0 - - values["beepsky"] = beepskyData - - - /* MULEBOT Control (Mode: 48) */ - - if(mode==48) - var/muleData[0] - var/mulebotsData[0] - if(istype(radio,/obj/item/radio/integrated/mule)) - var/obj/item/radio/integrated/mule/QC = radio - muleData["active"] = QC.active - if(QC.active && !isnull(QC.botstatus)) - var/area/loca = QC.botstatus["loca"] - var/loca_name = sanitize(loca.name) - muleData["botstatus"] = list("loca" = loca_name, "mode" = QC.botstatus["mode"],"home"=QC.botstatus["home"],"powr" = QC.botstatus["powr"],"retn" =QC.botstatus["retn"], "pick"=QC.botstatus["pick"], "load" = QC.botstatus["load"], "dest" = sanitize(QC.botstatus["dest"])) - - else - muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) - - - var/mulebotsCount=0 - for(var/obj/machinery/bot/B in QC.botlist) - mulebotsCount++ - if(B.loc) - mulebotsData[++mulebotsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]") - - if(!mulebotsData.len) - mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) - - muleData["bots"] = mulebotsData - muleData["count"] = mulebotsCount - - else - muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) - muleData["active"] = 0 - mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) - muleData["bots"] = mulebotsData - muleData["count"] = 0 - - values["mulebot"] = muleData - - - - /* Supply Shuttle Requests Menu (Mode: 47) */ - - if(mode==47) - var/supplyData[0] - - if(shuttle_master.supply.mode == SHUTTLE_CALL) - supplyData["shuttle_moving"] = 1 - - if(shuttle_master.supply.z != ZLEVEL_STATION) - supplyData["shuttle_loc"] = "station" - else - supplyData["shuttle_loc"] = "centcom" - - supplyData["shuttle_time"] = "([shuttle_master.supply.timeLeft(600)] Mins)" - - var/supplyOrderCount = 0 - var/supplyOrderData[0] - for(var/S in shuttle_master.shoppinglist) - var/datum/supply_order/SO = S - supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) - - if(!supplyOrderData.len) - supplyOrderData[++supplyOrderData.len] = list("Number" = null, "Name" = null, "OrderedBy"=null) - - supplyData["approved"] = supplyOrderData - supplyData["approved_count"] = supplyOrderCount - - var/requestCount = 0 - var/requestData[0] - for(var/S in shuttle_master.requestlist) - var/datum/supply_order/SO = S - requestCount++ - requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) - - if(!requestData.len) - requestData[++requestData.len] = list("Number" = null, "Name" = null, "orderedBy" = null, "Comment" = null) - - supplyData["requests"] = requestData - supplyData["requests_count"] = requestCount - - - values["supply"] = supplyData - - - - /* Janitor Supplies Locator (Mode: 49) */ - if(mode==49) - var/JaniData[0] - var/turf/cl = get_turf(src) - - if(cl) - JaniData["user_loc"] = list("x" = cl.x, "y" = cl.y) - else - JaniData["user_loc"] = list("x" = 0, "y" = 0) - var/MopData[0] - for(var/obj/item/weapon/mop/M in janitorial_equipment) - var/turf/ml = get_turf(M) - if(ml) - if(ml.z != cl.z) - continue - var/direction = get_dir(src, M) - MopData[++MopData.len] = list ("x" = ml.x, "y" = ml.y, "dir" = uppertext(dir2text(direction)), "status" = M.reagents.total_volume ? "Wet" : "Dry") - - if(!MopData.len) - MopData[++MopData.len] = list("x" = 0, "y" = 0, dir=null, status = null) - - - var/BucketData[0] - for(var/obj/structure/mopbucket/B in janitorial_equipment) - var/turf/bl = get_turf(B) - if(bl) - if(bl.z != cl.z) - continue - var/direction = get_dir(src,B) - BucketData[++BucketData.len] = list ("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.reagents.total_volume/100) - - if(!BucketData.len) - BucketData[++BucketData.len] = list("x" = 0, "y" = 0, dir=null, status = null) - - var/CbotData[0] - for(var/obj/machinery/bot/cleanbot/B in aibots) - var/turf/bl = get_turf(B) - if(bl) - if(bl.z != cl.z) - continue - var/direction = get_dir(src,B) - CbotData[++CbotData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.on ? "Online" : "Offline") - - - if(!CbotData.len) - CbotData[++CbotData.len] = list("x" = 0, "y" = 0, dir=null, status = null) - var/CartData[0] - for(var/obj/structure/janitorialcart/B in janitorial_equipment) - var/turf/bl = get_turf(B) - if(bl) - if(bl.z != cl.z) - continue - var/direction = get_dir(src,B) - CartData[++CartData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.reagents.total_volume/100) - if(!CartData.len) - CartData[++CartData.len] = list("x" = 0, "y" = 0, dir=null, status = null) - - - - - JaniData["mops"] = MopData - JaniData["buckets"] = BucketData - JaniData["cleanbots"] = CbotData - JaniData["carts"] = CartData - values["janitor"] = JaniData - - return values - - - - - -/obj/item/weapon/cartridge/Topic(href, href_list) - ..() - - if (!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr.unset_machine() - usr << browse(null, "window=pda") - return - - - - - switch(href_list["choice"]) - if("Medical Records") - var/datum/data/record/R = locate(href_list["target"]) - var/datum/data/record/M = locate(href_list["target"]) - loc:mode = 441 - mode = 441 - if (R in data_core.general) - for (var/datum/data/record/E in data_core.medical) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) - M = E - break - active1 = R - active2 = M - - if("Security Records") - var/datum/data/record/R = locate(href_list["target"]) - var/datum/data/record/S = locate(href_list["target"]) - loc:mode = 451 - mode = 451 - if (R in data_core.general) - for (var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) - S = E - break - active1 = R - active3 = S - - if("Send Signal") - spawn( 0 ) - radio:send_signal("ACTIVATE") - return - - if("Signal Frequency") - var/new_frequency = sanitize_frequency(radio:frequency + text2num(href_list["sfreq"])) - radio:set_frequency(new_frequency) - - if("Signal Code") - radio:code += text2num(href_list["scode"]) - radio:code = round(radio:code) - radio:code = min(100, radio:code) - radio:code = max(1, radio:code) - - if("Status") - switch(href_list["statdisp"]) - if("message") - post_status("message", message1, message2) - if("alert") - post_status("alert", href_list["alert"]) - if("setmsg1") - message1 = input("Line 1", "Enter Message Text", message1) as text|null - updateSelfDialog() - if("setmsg2") - message2 = input("Line 2", "Enter Message Text", message2) as text|null - updateSelfDialog() - else - post_status(href_list["statdisp"]) - if("Power Select") - var/pref = href_list["target"] - powmonitor = locate(pref) - loc:mode = 433 - mode = 433 - - return 1 + programs = list( + new/datum/data/pda/utility/toggle_door) + messenger_plugins = list( + new/datum/data/pda/messenger_plugin/virus/detonate) + +/obj/item/weapon/cartridge/syndicate/New() + var/datum/data/pda/utility/toggle_door/D = programs[1] + if(istype(D)) + D.remote_door_id = initial_remote_door_id \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/cart_apps.dm b/code/game/objects/items/devices/PDA/cart_apps.dm new file mode 100644 index 00000000000..365083c0a48 --- /dev/null +++ b/code/game/objects/items/devices/PDA/cart_apps.dm @@ -0,0 +1,415 @@ +/datum/data/pda/app/status_display + name = "Status Display" + icon = "list-alt" + template = "pda_status_display" + category = "Utilities" + + var/message1 // used for status_displays + var/message2 + +/datum/data/pda/app/status_display/update_ui(mob/user as mob, list/data) + data["records"] = list( + "message1" = message1 ? message1 : "(none)", + "message2" = message2 ? message2 : "(none)") + +/datum/data/pda/app/status_display/Topic(href, list/href_list) + switch(href_list["choice"]) + if("Status") + switch(href_list["statdisp"]) + if("message") + post_status("message", message1, message2) + if("alert") + post_status("alert", href_list["alert"]) + if("setmsg1") + message1 = input("Line 1", "Enter Message Text", message1) as text|null + if("setmsg2") + message2 = input("Line 2", "Enter Message Text", message2) as text|null + else + post_status(href_list["statdisp"]) + +/datum/data/pda/app/status_display/proc/post_status(var/command, var/data1, var/data2) + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + if(!frequency) + return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = 1 + status_signal.data["command"] = command + + switch(command) + if("message") + status_signal.data["msg1"] = data1 + status_signal.data["msg2"] = data2 + var/mob/user = pda.fingerprintslast + if(istype(pda.loc, /mob/living)) + name = pda.loc + log_admin("STATUS: [user] set status screen with [pda]. Message: [data1] [data2]") + message_admins("STATUS: [user] set status screen with [pda]. Message: [data1] [data2]") + + if("alert") + status_signal.data["picture_state"] = data1 + + spawn(0) + frequency.post_signal(src, status_signal) + + +/datum/data/pda/app/signaller + name = "Signaler System" + icon = "rss" + template = "pda_signaller" + category = "Utilities" + +/datum/data/pda/app/signaller/update_ui(mob/user as mob, list/data) + if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/signal)) + var/obj/item/radio/integrated/signal/R = pda.cartridge.radio + data["signal_freq"] = format_frequency(R.frequency) + data["signal_code"] = R.code + +/datum/data/pda/app/signaller/Topic(href, list/href_list) + if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/signal)) + var/obj/item/radio/integrated/signal/R = pda.cartridge.radio + + switch(href_list["choice"]) + if("Send Signal") + spawn(0) + R.send_signal("ACTIVATE") + + if("Signal Frequency") + var/new_frequency = sanitize_frequency(R.frequency + text2num(href_list["sfreq"])) + R.set_frequency(new_frequency) + + if("Signal Code") + R.code += text2num(href_list["scode"]) + R.code = round(R.code) + R.code = min(100, R.code) + R.code = max(1, R.code) + +/datum/data/pda/app/power + name = "Power Monitor" + icon = "exclamation-triangle" + template = "pda_power" + category = "Engineering" + update = PDA_APP_UPDATE_SLOW + + var/obj/machinery/computer/monitor/powmonitor = null + +/datum/data/pda/app/power/update_ui(mob/user as mob, list/data) + if (powmonitor && !isnull(powmonitor.powernet)) + data["records"] = list( + "powerconnected" = 1, + "poweravail" = powmonitor.powernet.avail, + "powerload" = num2text(powmonitor.powernet.viewload, 10), + "powerdemand" = powmonitor.powernet.load, + "apcs" = apc_repository.apc_data(powmonitor)) + has_back = 1 + else + data["records"] = list( + "powerconnected" = 0, + "powermonitors" = powermonitor_repository.powermonitor_data()) + has_back = 0 + +/datum/data/pda/app/power/Topic(href, list/href_list) + switch(href_list["choice"]) + if("Power Select") + var/pref = href_list["target"] + powmonitor = locate(pref) + if("Back") + powmonitor = null + +/datum/data/pda/app/crew_records + var/datum/data/record/general_records = null + +/datum/data/pda/app/crew_records/update_ui(mob/user as mob, list/data) + var/list/records[0] + + if(general_records && general_records in data_core.general) + data["records"] = records + records["general"] = general_records.fields + return records + else + for(var/datum/data/record/R in sortRecord(data_core.general)) + records += list(list(Name = R.fields["name"], "ref" = "\ref[R]")) + data["recordsList"] = records + return null + +/datum/data/pda/app/crew_records/Topic(href, list/href_list) + switch(href_list["choice"]) + if("Records") + var/datum/data/record/R = locate(href_list["target"]) + if (R in data_core.general) + load_records(R) + if("Back") + general_records = null + has_back = 0 + +/datum/data/pda/app/crew_records/proc/load_records(datum/data/record/R) + general_records = R + has_back = 1 + +/datum/data/pda/app/crew_records/medical + name = "Medical Records" + icon = "heartbeat" + template = "pda_medical" + category = "Medical" + + var/datum/data/record/medical_records = null + +/datum/data/pda/app/crew_records/medical/update_ui(mob/user as mob, list/data) + var/list/records = ..() + if(!records) + return + + if(medical_records && medical_records in data_core.medical) + records["medical"] = medical_records.fields + + return records + +/datum/data/pda/app/crew_records/medical/load_records(datum/data/record/R) + ..(R) + for (var/datum/data/record/E in data_core.medical) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + medical_records = E + break + +/datum/data/pda/app/crew_records/security + name = "Security Records" + icon = "tags" + template = "pda_security" + category = "Security" + + var/datum/data/record/security_records = null + +/datum/data/pda/app/crew_records/security/update_ui(mob/user as mob, list/data) + var/list/records = ..() + if(!records) + return + + if(security_records && security_records in data_core.security) + records["security"] = security_records.fields + + return records + +/datum/data/pda/app/crew_records/security/load_records(datum/data/record/R) + ..(R) + for (var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + security_records = E + break + +/datum/data/pda/app/secbot_control + name = "Security Bot Access" + icon = "rss" + template = "pda_secbot" + category = "Security" + update = PDA_APP_UPDATE_SLOW + +/datum/data/pda/app/secbot_control/update_ui(mob/user as mob, list/data) + var/botsData[0] + var/beepskyData[0] + if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/beepsky)) + var/obj/item/radio/integrated/beepsky/SC = pda.cartridge.radio + beepskyData["active"] = SC.active ? SC.active.name : null + has_back = SC.active ? 1 : 0 + if(SC.active && !isnull(SC.botstatus)) + var/area/loca = SC.botstatus["loca"] + var/loca_name = sanitize(loca.name) + beepskyData["botstatus"] = list("loca" = loca_name, "mode" = SC.botstatus["mode"]) + else + beepskyData["botstatus"] = list("loca" = null, "mode" = -1) + var/botsCount=0 + if(SC.botlist && SC.botlist.len) + for(var/obj/machinery/bot/B in SC.botlist) + botsCount++ + if(B.loc) + botsData[++botsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]") + + if(!botsData.len) + botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + + beepskyData["bots"] = botsData + beepskyData["count"] = botsCount + + else + beepskyData["active"] = 0 + botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + beepskyData["botstatus"] = list("loca" = null, "mode" = null) + beepskyData["bots"] = botsData + beepskyData["count"] = 0 + has_back = 0 + + data["beepsky"] = beepskyData + +/datum/data/pda/app/secbot_control/Topic(href, list/href_list) + switch(href_list["choice"]) + if("Back") + if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/beepsky)) + pda.cartridge.radio.Topic(null, list(radiomenu = "1", op = "botlist")) + +/datum/data/pda/app/mule_control + name = "Delivery Bot Control" + icon = "truck" + template = "pda_mule" + category = "Quartermaster" + update = PDA_APP_UPDATE_SLOW + +/datum/data/pda/app/mule_control/update_ui(mob/user as mob, list/data) + var/muleData[0] + var/mulebotsData[0] + if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/mule)) + var/obj/item/radio/integrated/mule/QC = pda.cartridge.radio + muleData["active"] = QC.active ? sanitize(QC.active.name) : null + has_back = QC.active ? 1 : 0 + if(QC.active && !isnull(QC.botstatus)) + var/area/loca = QC.botstatus["loca"] + var/loca_name = sanitize(loca.name) + muleData["botstatus"] = list("loca" = loca_name, "mode" = QC.botstatus["mode"],"home"=QC.botstatus["home"],"powr" = QC.botstatus["powr"],"retn" =QC.botstatus["retn"], "pick"=QC.botstatus["pick"], "load" = QC.botstatus["load"], "dest" = sanitize(QC.botstatus["dest"])) + + else + muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) + + + var/mulebotsCount=0 + for(var/obj/machinery/bot/B in QC.botlist) + mulebotsCount++ + if(B.loc) + mulebotsData[++mulebotsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]") + + if(!mulebotsData.len) + mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + + muleData["bots"] = mulebotsData + muleData["count"] = mulebotsCount + + else + muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) + muleData["active"] = 0 + mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + muleData["bots"] = mulebotsData + muleData["count"] = 0 + has_back = 0 + + data["mulebot"] = muleData + +/datum/data/pda/app/mule_control/Topic(href, list/href_list) + switch(href_list["choice"]) + if("Back") + if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/mule)) + pda.cartridge.radio.Topic(null, list(radiomenu = "1", op = "botlist")) + +/datum/data/pda/app/supply + name = "Supply Records" + icon = "file-text-o" + template = "pda_supply" + category = "Quartermaster" + update = PDA_APP_UPDATE_SLOW + +/datum/data/pda/app/supply/update_ui(mob/user as mob, list/data) + var/supplyData[0] + + if(shuttle_master.supply.mode == SHUTTLE_CALL) + supplyData["shuttle_moving"] = 1 + + if(shuttle_master.supply.z != ZLEVEL_STATION) + supplyData["shuttle_loc"] = "station" + else + supplyData["shuttle_loc"] = "centcom" + + supplyData["shuttle_time"] = "([shuttle_master.supply.timeLeft(600)] Mins)" + + var/supplyOrderCount = 0 + var/supplyOrderData[0] + for(var/S in shuttle_master.shoppinglist) + var/datum/supply_order/SO = S + supplyOrderCount++ + supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) + + if(!supplyOrderData.len) + supplyOrderData[++supplyOrderData.len] = list("Number" = null, "Name" = null, "OrderedBy"=null) + + supplyData["approved"] = supplyOrderData + supplyData["approved_count"] = supplyOrderCount + + var/requestCount = 0 + var/requestData[0] + for(var/S in shuttle_master.requestlist) + var/datum/supply_order/SO = S + requestCount++ + requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) + + if(!requestData.len) + requestData[++requestData.len] = list("Number" = null, "Name" = null, "orderedBy" = null, "Comment" = null) + + supplyData["requests"] = requestData + supplyData["requests_count"] = requestCount + + data["supply"] = supplyData + +/datum/data/pda/app/janitor + name = "Custodial Locator" + icon = "trash-o" + template = "pda_janitor" + category = "Utilities" + update = PDA_APP_UPDATE_SLOW + +/datum/data/pda/app/janitor/update_ui(mob/user as mob, list/data) + var/JaniData[0] + var/turf/cl = get_turf(pda) + + if(cl) + JaniData["user_loc"] = list("x" = cl.x, "y" = cl.y) + else + JaniData["user_loc"] = list("x" = 0, "y" = 0) + var/MopData[0] + for(var/obj/item/weapon/mop/M in janitorial_equipment) + var/turf/ml = get_turf(M) + if(ml) + if(ml.z != cl.z) + continue + var/direction = get_dir(pda, M) + MopData[++MopData.len] = list ("x" = ml.x, "y" = ml.y, "dir" = uppertext(dir2text(direction)), "status" = M.reagents.total_volume ? "Wet" : "Dry") + + if(!MopData.len) + MopData[++MopData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + + + var/BucketData[0] + for(var/obj/structure/mopbucket/B in janitorial_equipment) + var/turf/bl = get_turf(B) + if(bl) + if(bl.z != cl.z) + continue + var/direction = get_dir(pda,B) + BucketData[++BucketData.len] = list ("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.reagents.total_volume/100) + + if(!BucketData.len) + BucketData[++BucketData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + + var/CbotData[0] + for(var/obj/machinery/bot/cleanbot/B in aibots) + var/turf/bl = get_turf(B) + if(bl) + if(bl.z != cl.z) + continue + var/direction = get_dir(pda,B) + CbotData[++CbotData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.on ? "Online" : "Offline") + + + if(!CbotData.len) + CbotData[++CbotData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + var/CartData[0] + for(var/obj/structure/janitorialcart/B in janitorial_equipment) + var/turf/bl = get_turf(B) + if(bl) + if(bl.z != cl.z) + continue + var/direction = get_dir(pda,B) + CartData[++CartData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.reagents.total_volume/100) + if(!CartData.len) + CartData[++CartData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + + JaniData["mops"] = MopData + JaniData["buckets"] = BucketData + JaniData["cleanbots"] = CbotData + JaniData["carts"] = CartData + data["janitor"] = JaniData \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/core_apps.dm b/code/game/objects/items/devices/PDA/core_apps.dm new file mode 100644 index 00000000000..55a6dbd6f45 --- /dev/null +++ b/code/game/objects/items/devices/PDA/core_apps.dm @@ -0,0 +1,106 @@ +/datum/data/pda/app/main_menu + icon = "home" + template = "pda_main_menu" + hidden = 1 + +/datum/data/pda/app/main_menu/update_ui(mob/user as mob, list/data) + title = pda.name + + data["app"]["is_home"] = 1 + + data["apps"] = pda.shortcut_cache + data["categories"] = pda.shortcut_cat_order + data["pai"] = !isnull(pda.pai) // pAI inserted? + +/datum/data/pda/app/main_menu/Topic(href, list/href_list) + switch(href_list["choice"]) + if("UpdateInfo") + pda.ownjob = pda.id.assignment + pda.ownrank = pda.id.rank + pda.name = "PDA-[pda.owner] ([pda.ownjob])" + if("pai") + if(pda.pai) + if(pda.pai.loc != pda) + pda.pai = null + else + switch(href_list["option"]) + if("1") // Configure pAI device + pda.pai.attack_self(usr) + if("2") // Eject pAI device + var/turf/T = get_turf_or_move(pda.loc) + if(T) + pda.pai.loc = T + pda.pai = null + +/datum/data/pda/app/notekeeper + name = "Notekeeper" + icon = "sticky-note-o" + template = "pda_notekeeper" + + var/note = null + var/notehtml = "" + +/datum/data/pda/app/notekeeper/start() + . = ..() + if(!note) + note = "Congratulations, your station has chosen the [pda.model_name]!" + +/datum/data/pda/app/notekeeper/update_ui(mob/user as mob, list/data) + data["note"] = note // current pda notes + +/datum/data/pda/app/notekeeper/Topic(href, list/href_list) + switch(href_list["choice"]) + if("Edit") + var/n = input("Please enter message", name, notehtml) as message + if(pda.loc == usr) + note = adminscrub(n) + notehtml = html_decode(note) + note = replacetext(note, "\n", "
") + else + pda.close(usr) + +/datum/data/pda/app/manifest + name = "Crew Manifest" + icon = "user" + template = "pda_manifest" + update = PDA_APP_UPDATE_SLOW + +/datum/data/pda/app/manifest/update_ui(mob/user as mob, list/data) + data_core.get_manifest_json() + data["manifest"] = list("__json_cache" = ManifestJSON) + +/datum/data/pda/app/manifest/Topic(href, list/href_list) + +/datum/data/pda/app/atmos_scanner + name = "Atmospheric Scan" + icon = "fire" + template = "pda_atmos_scan" + category = "Utilities" + update = PDA_APP_UPDATE_SLOW + +/datum/data/pda/app/atmos_scanner/update_ui(mob/user as mob, list/data) + var/turf/T = get_turf(user.loc) + if(!isnull(T)) + var/datum/gas_mixture/environment = T.return_air() + + var/pressure = environment.return_pressure() + var/total_moles = environment.total_moles() + + if (total_moles) + var/o2_level = environment.oxygen/total_moles + var/n2_level = environment.nitrogen/total_moles + var/co2_level = environment.carbon_dioxide/total_moles + var/plasma_level = environment.toxins/total_moles + var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) + data["aircontents"] = list(\ + "pressure" = "[round(pressure,0.1)]",\ + "nitrogen" = "[round(n2_level*100,0.1)]",\ + "oxygen" = "[round(o2_level*100,0.1)]",\ + "carbon_dioxide" = "[round(co2_level*100,0.1)]",\ + "plasma" = "[round(plasma_level*100,0.01)]",\ + "other" = "[round(unknown_level, 0.01)]",\ + "temp" = "[round(environment.temperature-T0C,0.1)]",\ + "reading" = 1\ + ) + if(isnull(data["aircontents"])) + data["aircontents"] = list("reading" = 0) \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/messenger.dm b/code/game/objects/items/devices/PDA/messenger.dm new file mode 100644 index 00000000000..56800e19104 --- /dev/null +++ b/code/game/objects/items/devices/PDA/messenger.dm @@ -0,0 +1,283 @@ +/datum/data/pda/app/messenger + name = "Messenger" + icon = "comments-o" + title = "SpaceMessenger V4.0.1" + template = "pda_messenger" + + var/silent = 0 //To beep or not to beep, that is the question + var/toff = 0 //If 1, messenger disabled + var/list/tnote[0] //Current Texts + var/last_text //No text spamming + var/list/ttone_sound = list("beep" = 'sound/machines/twobeep.ogg', + "boom" = 'sound/effects/explosionfar.ogg', + "slip" = 'sound/misc/slip.ogg', + "honk" = 'sound/items/bikehorn.ogg', + "SKREE" = 'sound/voice/shriek1.ogg', + "holy" = 'sound/items/PDA/ambicha4-short.ogg', + "xeno" = 'sound/voice/hiss1.ogg') + + var/m_hidden = 0 // Is the PDA hidden from the PDA list? + var/active_conversation = null // New variable that allows us to only view a single conversation. + var/list/conversations = list() // For keeping up with who we have PDA messsages from. + +/datum/data/pda/app/messenger/start() + . = ..() + set_new(0) + +/datum/data/pda/app/messenger/update_ui(mob/user as mob, list/data) + data["silent"] = silent // does the pda make noise when it receives a message? + data["toff"] = toff // is the messenger function turned off? + data["active_conversation"] = active_conversation // Which conversation are we following right now? + + var/convopdas[0] + var/pdas[0] + var/count = 0 + for (var/obj/item/device/pda/P in PDAs) + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + + if (!P.owner || PM.toff || P == pda || PM.m_hidden) + continue + if(conversations.Find("\ref[P]")) + convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1"))) + else + pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0"))) + count++ + + data["convopdas"] = convopdas + data["pdas"] = pdas + data["pda_count"] = count + + data["messagescount"] = tnote.len + data["messages"] = tnote + + has_back = active_conversation + if(active_conversation) + for(var/c in tnote) + if(c["target"] == active_conversation) + data["convo_name"] = sanitize(c["owner"]) + data["convo_job"] = sanitize(c["job"]) + break + + var/list/plugins = list() + if(pda.cartridge) + for(var/datum/data/pda/messenger_plugin/P in pda.cartridge.messenger_plugins) + plugins += list(list(name = P.name, icon = P.icon, ref = "\ref[P]")) + data["plugins"] = plugins + + if(pda.cartridge) + data["charges"] = pda.cartridge.charges ? pda.cartridge.charges : 0 + +/datum/data/pda/app/messenger/Topic(href, list/href_list) + set_new(0) + + switch(href_list["choice"]) + if("Toggle Messenger") + toff = !toff + if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status + silent = !silent + if("Clear")//Clears messages + if(href_list["option"] == "All") + tnote.Cut() + conversations.Cut() + if(href_list["option"] == "Convo") + var/new_tnote[0] + for(var/i in tnote) + if(i["target"] != active_conversation) + new_tnote[++new_tnote.len] = i + tnote = new_tnote + conversations.Remove(active_conversation) + + active_conversation = null + if("Ringtone") + var/t = input("Please enter new ringtone", name, pda.ttone) as text + if (in_range(pda, usr) && pda.loc == usr) + if (t) + if(pda.hidden_uplink && pda.hidden_uplink.check_trigger(usr, lowertext(t), lowertext(pda.lock_code))) + usr << "The PDA softly beeps." + pda.close(usr) + else + t = sanitize(copytext(t, 1, 20)) + pda.ttone = t + else + pda.close(usr) + return 0 + if("Message") + var/obj/item/device/pda/P = locate(href_list["target"]) + create_message(usr, P) + if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp. + active_conversation = href_list["target"] + if("Select Conversation") + var/P = href_list["convo"] + for(var/n in conversations) + if(P == n) + active_conversation = P + if("Messenger Plugin") + if(!href_list["target"] || !href_list["plugin"]) + return + + var/obj/item/device/pda/P = locate(href_list["target"]) + if(!P) + usr << "PDA not found." + + var/datum/data/pda/messenger_plugin/plugin = locate(href_list["plugin"]) + if(plugin && plugin in pda.cartridge.messenger_plugins) + plugin.messenger = src + plugin.user_act(usr, P) + if("Back") + active_conversation = null + +/datum/data/pda/app/messenger/proc/set_new(isnew) + if(pda.newmessage == isnew) + return + + if(pda.newmessage) + //To clear message overlays. + pda.overlays.Cut() + pda.newmessage = 0 + + icon = "comments" + pda.update_shortcuts() + else + pda.overlays.Cut() + pda.overlays += image('icons/obj/pda.dmi', "pda-r") + pda.newmessage = 1 + + icon = "comments-o" + pda.update_shortcuts() + +/datum/data/pda/app/messenger/proc/create_message(var/mob/living/U, var/obj/item/device/pda/P) + var/t = input(U, "Please enter message", name, null) as text|null + if(!t) + return + t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN)) + t = readd_quotes(t) + if (!t || !istype(P)) + return + if (!in_range(pda, U) && pda.loc != U) + return + + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + + if (!PM || PM.toff || toff) + return + + if (last_text && world.time < last_text + 5) + return + + if(!pda.can_use()) + return + + last_text = world.time + // check if telecomms I/O route 1459 is stable + //var/telecomms_intact = telecomms_process(P.owner, owner, t) + var/obj/machinery/message_server/useMS = null + if(message_servers) + for (var/obj/machinery/message_server/MS in message_servers) + //PDAs are now dependent on the Message Server. + if(MS.active) + useMS = MS + break + + var/datum/signal/signal = pda.telecomms_process() + + var/useTC = 0 + if(signal) + if(signal.data["done"]) + useTC = 1 + var/turf/pos = get_turf(P) + if(pos.z in signal.data["level"]) + useTC = 2 + //Let's make this barely readable + if(signal.data["compression"] > 0) + t = Gibberish(t, signal.data["compression"] + 50) + + if(useMS && useTC) // only send the message if it's stable + if(useTC != 2) // Does our recipient have a broadcaster on their level? + U << "ERROR: Cannot reach recipient." + return + useMS.send_pda_message("[P.owner]","[pda.owner]","[t]") + tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) + PM.tnote.Add(list(list("sent" = 0, "owner" = "[pda.owner]", "job" = "[pda.ownjob]", "message" = "[t]", "target" = "\ref[pda]"))) +/* for(var/mob/M in player_list) + if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice + if(istype(M, /mob/new_player)) + continue + M.show_message("PDA Message - [owner] -> [P.owner]: [t]") */ + pda.investigate_log("PDA Message - [U.key] - [pda.owner] -> [P.owner]: [t]", "pda") + if(!conversations.Find("\ref[P]")) + conversations.Add("\ref[P]") + if(!PM.conversations.Find("\ref[pda]")) + PM.conversations.Add("\ref[pda]") + +/* + if (prob(15)) //Give the AI a chance of intercepting the message + var/who = src.owner + if(prob(50)) + who = P.owner + for(var/mob/living/silicon/ai/ai in mob_list) + // Allows other AIs to intercept the message but the AI won't intercept their own message. + if(ai.aiPDA != P && ai.aiPDA != src) + ai.show_message("Intercepted message from [who]: [t]") +*/ + + PM.play_ringtone() + //Search for holder of the PDA. + var/mob/living/L = null + if(P.loc && isliving(P.loc)) + L = P.loc + //Maybe they are a pAI! + else + L = get(P, /mob/living/silicon) + + + if(L) + L << "\icon[P] Message from [pda.owner] ([pda.ownjob]), \"[t]\" (Reply)" + nanomanager.update_user_uis(L, P) // Update the receiving user's PDA UI so that they can see the new message + + nanomanager.update_user_uis(U, P) // Update the sending user's PDA UI so that they can see the new message + set_new(1) + log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]") + else + U << "ERROR: Messaging server is not responding." + +/datum/data/pda/app/messenger/proc/play_ringtone() + if (!silent) + var/S + + if(pda.ttone in ttone_sound) + S = ttone_sound[pda.ttone] + else + S = 'sound/machines/twobeep.ogg' + playsound(pda.loc, S, 50, 1) + for (var/mob/O in hearers(3, pda.loc)) + if(!silent) + O.show_message(text("\icon[pda] *[pda.ttone]*")) + +/datum/data/pda/app/messenger/proc/available_pdas() + var/list/names = list() + var/list/plist = list() + var/list/namecounts = list() + + if (toff) + usr << "Turn on your receiver in order to send messages." + return + + for (var/obj/item/device/pda/P in PDAs) + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + + if(!P.owner || !PM || PM.hidden || P == pda || PM.toff) + continue + + var/name = P.owner + if (name in names) + namecounts[name]++ + name = text("[name] ([namecounts[name]])") + else + names.Add(name) + namecounts[name] = 1 + + plist[text("[name]")] = P + return plist + +/datum/data/pda/app/messenger/proc/can_receive() + return pda.owner && !toff && !hidden \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/messenger_plugins.dm b/code/game/objects/items/devices/PDA/messenger_plugins.dm new file mode 100644 index 00000000000..ed4d330fdba --- /dev/null +++ b/code/game/objects/items/devices/PDA/messenger_plugins.dm @@ -0,0 +1,69 @@ +/datum/data/pda/messenger_plugin + var/datum/data/pda/app/messenger/messenger + +/datum/data/pda/messenger_plugin/proc/user_act(mob/user as mob, obj/item/device/pda/P) + + +/datum/data/pda/messenger_plugin/virus + name = "*Send Virus*" + +/datum/data/pda/messenger_plugin/virus/user_act(mob/user as mob, obj/item/device/pda/P) + var/datum/data/pda/app/messenger/M = P.find_program(/datum/data/pda/app/messenger) + + if(M && !M.toff && pda.cartridge.charges > 0) + pda.cartridge.charges-- + return 1 + return 0 + + +/datum/data/pda/messenger_plugin/virus/clown + icon = "star" + +/datum/data/pda/messenger_plugin/virus/clown/user_act(mob/user as mob, obj/item/device/pda/P) + . = ..(user, P) + if(.) + user.show_message("Virus sent!", 1) + P.honkamt = (rand(15,20)) + P.ttone = "honk" + + +/datum/data/pda/messenger_plugin/virus/mime + icon = "arrow-circle-down" + +/datum/data/pda/messenger_plugin/virus/mime/user_act(mob/user as mob, obj/item/device/pda/P) + . = ..(user, P) + if(.) + user.show_message("Virus sent!", 1) + var/datum/data/pda/app/messenger/M = P.find_program(/datum/data/pda/app/messenger) + if(M) + M.silent = 1 + P.ttone = "silence" + + +/datum/data/pda/messenger_plugin/virus/detonate + name = "*Detonate*" + icon = "exclamation-circle" + +/datum/data/pda/messenger_plugin/virus/detonate/user_act(mob/user as mob, obj/item/device/pda/P) + . = ..(user, P) + if(.) + var/difficulty = 0 + + if(pda.cartridge) + difficulty += pda.cartridge.programs.len / 2 + else + difficulty += 2 + + if(prob(difficulty * 12) || (pda.hidden_uplink)) + user.show_message("An error flashes on your [pda].", 1) + else if (prob(difficulty * 3)) + user.show_message("Energy feeds back into your [pda]!", 1) + pda.close(user) + pda.explode() + log_admin("[key_name(user)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up") + message_admins("[key_name_admin(user)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1) + else + user.show_message("Success!", 1) + log_admin("[key_name(user)] just attempted to blow up [P] with the Detomatix cartridge and succeded") + message_admins("[key_name_admin(user)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1) + P.explode() \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/pdas.dm b/code/game/objects/items/devices/PDA/pdas.dm new file mode 100644 index 00000000000..86ca9912e45 --- /dev/null +++ b/code/game/objects/items/devices/PDA/pdas.dm @@ -0,0 +1,193 @@ +/obj/item/device/pda/medical + default_cartridge = /obj/item/weapon/cartridge/medical + icon_state = "pda-medical" + +/obj/item/device/pda/viro + default_cartridge = /obj/item/weapon/cartridge/medical + icon_state = "pda-virology" + +/obj/item/device/pda/engineering + default_cartridge = /obj/item/weapon/cartridge/engineering + icon_state = "pda-engineer" + +/obj/item/device/pda/security + default_cartridge = /obj/item/weapon/cartridge/security + icon_state = "pda-security" + +/obj/item/device/pda/detective + default_cartridge = /obj/item/weapon/cartridge/detective + icon_state = "pda-security" + +/obj/item/device/pda/warden + default_cartridge = /obj/item/weapon/cartridge/security + icon_state = "pda-warden" + +/obj/item/device/pda/janitor + default_cartridge = /obj/item/weapon/cartridge/janitor + icon_state = "pda-janitor" + ttone = "slip" + +/obj/item/device/pda/toxins + default_cartridge = /obj/item/weapon/cartridge/signal/toxins + icon_state = "pda-science" + ttone = "boom" + +/obj/item/device/pda/clown + default_cartridge = /obj/item/weapon/cartridge/clown + icon_state = "pda-clown" + desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings." + ttone = "honk" + +/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. + if (istype(AM, /mob/living/carbon)) + var/mob/living/carbon/M = AM + M.slip("pda", 8, 5, 0, 1) + +/obj/item/device/pda/mime + default_cartridge = /obj/item/weapon/cartridge/mime + icon_state = "pda-mime" + ttone = "silence" + +/obj/item/device/pda/mime/New() + var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) + if(M) + M.silent = 1 + +/obj/item/device/pda/heads + default_cartridge = /obj/item/weapon/cartridge/head + icon_state = "pda-h" + +/obj/item/device/pda/heads/hop + default_cartridge = /obj/item/weapon/cartridge/hop + icon_state = "pda-hop" + +/obj/item/device/pda/heads/hos + default_cartridge = /obj/item/weapon/cartridge/hos + icon_state = "pda-hos" + +/obj/item/device/pda/heads/ce + default_cartridge = /obj/item/weapon/cartridge/ce + icon_state = "pda-ce" + +/obj/item/device/pda/heads/cmo + default_cartridge = /obj/item/weapon/cartridge/cmo + icon_state = "pda-cmo" + +/obj/item/device/pda/heads/rd + default_cartridge = /obj/item/weapon/cartridge/rd + icon_state = "pda-rd" + +/obj/item/device/pda/captain + default_cartridge = /obj/item/weapon/cartridge/captain + icon_state = "pda-captain" + detonate = 0 + //toff = 1 + +/obj/item/device/pda/heads/ntrep + default_cartridge = /obj/item/weapon/cartridge/supervisor + icon_state = "pda-h" + +/obj/item/device/pda/heads/magistrate + default_cartridge = /obj/item/weapon/cartridge/supervisor + icon_state = "pda-h" + +/obj/item/device/pda/heads/blueshield + default_cartridge = /obj/item/weapon/cartridge/hos + icon_state = "pda-h" + +/obj/item/device/pda/cargo + default_cartridge = /obj/item/weapon/cartridge/quartermaster + icon_state = "pda-cargo" + +/obj/item/device/pda/quartermaster + default_cartridge = /obj/item/weapon/cartridge/quartermaster + icon_state = "pda-qm" + +/obj/item/device/pda/shaftminer + icon_state = "pda-miner" + +/obj/item/device/pda/syndicate + default_cartridge = /obj/item/weapon/cartridge/syndicate + icon_state = "pda-syndi" + name = "Military PDA" + owner = "John Doe" + +/obj/item/device/pda/syndicate/New() + var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) + if(M) + M.m_hidden = 1 + +/obj/item/device/pda/chaplain + icon_state = "pda-chaplain" + ttone = "holy" + +/obj/item/device/pda/lawyer + default_cartridge = /obj/item/weapon/cartridge/lawyer + icon_state = "pda-lawyer" + ttone = "..." + +/obj/item/device/pda/botanist + //default_cartridge = /obj/item/weapon/cartridge/botanist + icon_state = "pda-hydro" + +/obj/item/device/pda/roboticist + icon_state = "pda-roboticist" + +/obj/item/device/pda/librarian + icon_state = "pda-library" + desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader." + model_name = "Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant" + +/obj/item/device/pda/librarian/New() + var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) + if(M) + M.silent = 1 //Quiet in the library! + +/obj/item/device/pda/clear + icon_state = "pda-transp" + desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition with a transparent case." + model_name = "Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition" + +/obj/item/device/pda/chef + icon_state = "pda-chef" + +/obj/item/device/pda/bar + icon_state = "pda-bartender" + +/obj/item/device/pda/atmos + default_cartridge = /obj/item/weapon/cartridge/atmos + icon_state = "pda-atmos" + +/obj/item/device/pda/chemist + default_cartridge = /obj/item/weapon/cartridge/chemistry + icon_state = "pda-chemistry" + +/obj/item/device/pda/geneticist + default_cartridge = /obj/item/weapon/cartridge/medical + icon_state = "pda-genetics" + +/obj/item/device/pda/centcom + default_cartridge = /obj/item/weapon/cartridge/centcom + icon_state = "pda-h" + +//Some spare PDAs in a box +/obj/item/weapon/storage/box/PDAs + name = "spare PDAs" + desc = "A box of spare PDA microcomputers." + icon = 'icons/obj/pda.dmi' + icon_state = "pdabox" + + New() + ..() + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/weapon/cartridge/head(src) + + var/newcart = pick( /obj/item/weapon/cartridge/engineering, + /obj/item/weapon/cartridge/security, + /obj/item/weapon/cartridge/medical, + /obj/item/weapon/cartridge/signal/toxins, + /obj/item/weapon/cartridge/quartermaster) + new newcart(src) \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 3e180a5c700..6a0bba06bdf 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -49,8 +49,6 @@ frequency.post_signal(src, signal, filter = s_filter) - return - /obj/item/radio/integrated/receive_signal(datum/signal/signal) /*var/obj/item/device/pda/P = src.loc @@ -79,22 +77,27 @@ if("control") active = locate(href_list["bot"]) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) + botstatus = list(mode = -1) + spawn(0) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) if("scanbots") // find all bots botlist = null - post_signal(control_freq, "command", "bot_status", s_filter = bot_filter) + spawn(0) + post_signal(control_freq, "command", "bot_status", s_filter = bot_filter) if("botlist") active = null if("stop", "go") - post_signal(control_freq, "command", href_list["op"], "active", active, s_filter = bot_filter) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) + spawn(0) + post_signal(control_freq, "command", href_list["op"], "active", active, s_filter = bot_filter) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) if("summon") - post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(PDA) , "useraccess", PDA.GetAccess(), s_filter = bot_filter) - post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) + spawn(0) + post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(PDA) , "useraccess", PDA.GetAccess(), s_filter = bot_filter) + post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) /obj/item/radio/integrated/proc/add_to_radio(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. if(radio_controller) @@ -147,13 +150,6 @@ // create/populate lists as they are recvd /obj/item/radio/integrated/mule/receive_signal(datum/signal/signal) -// var/obj/item/device/pda/P = src.loc - - /* - world << "recvd:[P] : [signal.source]" - for(var/d in signal.data) - world << "- [d] = [signal.data[d]]" - */ if(signal.data["type"] == MULE_BOT) if(!botlist) botlist = new() @@ -171,9 +167,6 @@ beacons[signal.data["beacon"] ] = signal.source - -// if(istype(P)) P.updateSelfDialog() - /obj/item/radio/integrated/mule/Topic(href, href_list) //..() //var/obj/item/device/pda/PDA = src.hostpda @@ -182,8 +175,8 @@ cmd = "command [active.suffix]" switch(href_list["op"]) - if("control") + botstatus = list(mode = -1) active = locate(href_list["bot"]) if("scanbots") // find all bots @@ -193,28 +186,37 @@ active = null if("unload") - post_signal(control_freq, cmd, "unload", s_filter = RADIO_MULEBOT) + spawn(0) + post_signal(control_freq, cmd, "unload", s_filter = RADIO_MULEBOT) if("setdest") if(beacons) var/dest = input("Select Bot Destination", "Mulebot [active.suffix] Interlink", active.destination) as null|anything in beacons if(dest) - post_signal(control_freq, cmd, "target", "destination", dest, s_filter = RADIO_MULEBOT) + spawn(0) + post_signal(control_freq, cmd, "target", "destination", dest, s_filter = RADIO_MULEBOT) if("retoff") - post_signal(control_freq, cmd, "autoret", "value", 0, s_filter = RADIO_MULEBOT) + spawn(0) + post_signal(control_freq, cmd, "autoret", "value", 0, s_filter = RADIO_MULEBOT) + if("reton") - post_signal(control_freq, cmd, "autoret", "value", 1, s_filter = RADIO_MULEBOT) + spawn(0) + post_signal(control_freq, cmd, "autoret", "value", 1, s_filter = RADIO_MULEBOT) if("pickoff") - post_signal(control_freq, cmd, "autopick", "value", 0, s_filter = RADIO_MULEBOT) + spawn(0) + post_signal(control_freq, cmd, "autopick", "value", 0, s_filter = RADIO_MULEBOT) if("pickon") - post_signal(control_freq, cmd, "autopick", "value", 1, s_filter = RADIO_MULEBOT) + spawn(0) + post_signal(control_freq, cmd, "autopick", "value", 1, s_filter = RADIO_MULEBOT) if("stop", "go", "home") - post_signal(control_freq, cmd, href_list["op"], s_filter = RADIO_MULEBOT) + spawn(0) + post_signal(control_freq, cmd, href_list["op"], s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) + spawn(10) + post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) @@ -262,6 +264,5 @@ signal.encryption = code signal.data["message"] = message - radio_connection.post_signal(src, signal) - - return \ No newline at end of file + spawn(0) + radio_connection.post_signal(src, signal) \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/utilities.dm b/code/game/objects/items/devices/PDA/utilities.dm new file mode 100644 index 00000000000..bc1b76b2ea6 --- /dev/null +++ b/code/game/objects/items/devices/PDA/utilities.dm @@ -0,0 +1,192 @@ +/datum/data/pda/utility/flashlight + name = "Enable Flashlight" + icon = "lightbulb-o" + + var/fon = 0 //Is the flashlight function on? + var/f_lum = 2 //Luminosity for the flashlight function + +/datum/data/pda/utility/flashlight/start() + fon = !fon + name = fon ? "Disable Flashlight" : "Enable Flashlight" + pda.update_shortcuts() + pda.set_light(fon ? f_lum : 0) + +/datum/data/pda/utility/honk + name = "Honk Synthesizer" + icon = "smile-o" + category = "Clown" + + var/last_honk //Also no honk spamming that's bad too + +/datum/data/pda/utility/honk/start() + if(!(last_honk && world.time < last_honk + 20)) + playsound(pda.loc, 'sound/items/bikehorn.ogg', 50, 1) + last_honk = world.time + +/datum/data/pda/utility/toggle_door + name = "Toggle Door" + icon = "external-link" + var/remote_door_id = "" + +/datum/data/pda/utility/toggle_door/start() + for(var/obj/machinery/door/poddoor/M in world) + if(M.id_tag == remote_door_id) + if(M.density) + M.open() + else + M.close() + +/datum/data/pda/utility/scanmode/medical + base_name = "Med Scanner" + icon = "heart-o" + +/datum/data/pda/utility/scanmode/medical/scan_mob(mob/living/C as mob, mob/living/user as mob) + for (var/mob/O in viewers(C, null)) + O.show_message("[user] has analyzed [C]'s vitals!", 1) + + user.show_message("Analyzing Results for [C]:") + user.show_message("\t Overall Status: [C.stat > 1 ? "dead" : "[C.health - C.halloss]% healthy"]", 1) + user.show_message("\t Damage Specifics: [C.getOxyLoss() > 50 ? "" : ""][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "" : ""][C.getToxLoss()]-[C.getFireLoss() > 50 ? "" : ""][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "" : ""][C.getBruteLoss()]", 1) + user.show_message("\t Key: Suffocation/Toxin/Burns/Brute", 1) + user.show_message("\t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)", 1) + if(C.timeofdeath && (C.stat == DEAD || (C.status_flags & FAKEDEATH))) + user.show_message("\t Time of Death: [C.timeofdeath]") + if(istype(C, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = C + var/list/damaged = H.get_damaged_organs(1,1) + user.show_message("Localized Damage, Brute/Burn:",1) + if(length(damaged)>0) + for(var/obj/item/organ/external/org in damaged) + user.show_message("\t [capitalize(org.name)]: [org.brute_dam > 0 ? "[org.brute_dam]" : "0"]-[org.burn_dam > 0 ? "[org.burn_dam]" : "0"]", 1) + else + user.show_message("\t Limbs are OK.",1) + +/datum/data/pda/utility/scanmode/dna + base_name = "DNA Scanner" + icon = "link" + +/datum/data/pda/utility/scanmode/dna/scan_mob(mob/living/C as mob, mob/living/user as mob) + if (!istype(C:dna, /datum/dna)) + user << "No fingerprints found on [C]" + else + user << "[C]'s Fingerprints: [md5(C:dna.uni_identity)]" + if (!C:blood_DNA) + user << "No blood found on [C]" + if(C:blood_DNA) + qdel(C:blood_DNA) + else + user << "Blood found on [C]. Analysing..." + spawn(15) + for(var/blood in C:blood_DNA) + user << "Blood type: [C:blood_DNA[blood]]\nDNA: [blood]" + +/datum/data/pda/utility/scanmode/halogen + base_name = "Halogen Counter" + icon = "exclamation-circle" + +/datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C as mob, mob/living/user as mob) + for (var/mob/O in viewers(C, null)) + O.show_message("[user] has analyzed [C]'s radiation levels!", 1) + + user.show_message("Analyzing Results for [C]:") + if(C.radiation) + user.show_message("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]") + else + user.show_message("No radiation detected.") + +/datum/data/pda/utility/scanmode/reagent + base_name = "Reagent Scanner" + icon = "flask" + +/datum/data/pda/utility/scanmode/reagent/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) + if(!isnull(A.reagents)) + if(A.reagents.reagent_list.len > 0) + var/reagents_length = A.reagents.reagent_list.len + user << "[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found." + for (var/re in A.reagents.reagent_list) + user << "\t [re]" + else + user << "No active chemical agents found in [A]." + else + user << "No significant chemical agents found in [A]." + +/datum/data/pda/utility/scanmode/gas + base_name = "Gas Scanner" + icon = "tachometer" + +/datum/data/pda/utility/scanmode/gas/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) + if (istype(A, /obj/item/weapon/tank)) + var/obj/item/weapon/tank/T = A + pda.atmosanalyzer_scan(T.air_contents, user, T) + else if (istype(A, /obj/machinery/portable_atmospherics)) + var/obj/machinery/portable_atmospherics/T = A + pda.atmosanalyzer_scan(T.air_contents, user, T) + else if (istype(A, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/T = A + pda.atmosanalyzer_scan(T.parent.air, user, T) + else if (istype(A, /obj/machinery/power/rad_collector)) + var/obj/machinery/power/rad_collector/T = A + if(T.P) + pda.atmosanalyzer_scan(T.P.air_contents, user, T) + else if (istype(A, /obj/item/weapon/flamethrower)) + var/obj/item/weapon/flamethrower/T = A + if(T.ptank) + pda.atmosanalyzer_scan(T.ptank.air_contents, user, T) + else if (istype(A, /obj/machinery/portable_atmospherics/scrubber/huge)) + var/obj/machinery/portable_atmospherics/scrubber/huge/T = A + pda.atmosanalyzer_scan(T.air_contents, user, T) + else if (istype(A, /obj/machinery/atmospherics/unary/tank)) + var/obj/machinery/atmospherics/unary/tank/T = A + pda.atmosanalyzer_scan(T.air_contents, user, T) + +/datum/data/pda/utility/scanmode/notes + base_name = "Note Scanner" + icon = "clipboard" + var/datum/data/pda/app/notekeeper/notes + +/datum/data/pda/utility/scanmode/notes/start() + . = ..() + notes = pda.find_program(/datum/data/pda/app/notekeeper) + +/datum/data/pda/utility/scanmode/notes/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) + if(notes && istype(A, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = A + + // JMO 20140705: Makes scanned document show up properly in the notes. Not pretty for formatted documents, + // as this will clobber the HTML, but at least it lets you scan a document. You can restore the original + // notes by editing the note again. (Was going to allow you to edit, but scanned documents are too long.) + var/raw_scan = P.info + var/formatted_scan = "" + // Scrub out the tags (replacing a few formatting ones along the way) + // Find the beginning and end of the first tag. + var/tag_start = findtext(raw_scan, "<") + var/tag_stop = findtext(raw_scan, ">") + // Until we run out of complete tags... + while(tag_start && tag_stop) + var/pre = copytext(raw_scan, 1, tag_start) // Get the stuff that comes before the tag + var/tag = lowertext(copytext(raw_scan, tag_start + 1, tag_stop)) // Get the tag so we can do intellegent replacement + var/tagend = findtext(tag, " ") // Find the first space in the tag if there is one. + // Anything that's before the tag can just be added as is. + formatted_scan = formatted_scan + pre + // If we have a space after the tag (and presumably attributes) just crop that off. + if(tagend) + tag = copytext(tag, 1, tagend) + if(tag == "p" || tag == "/p" || tag == "br") // Check if it's I vertical space tag. + formatted_scan = formatted_scan + "
" // If so, add some padding in. + raw_scan = copytext(raw_scan, tag_stop + 1) // continue on with the stuff after the tag + // Look for the next tag in what's left + tag_start = findtext(raw_scan, "<") + tag_stop = findtext(raw_scan, ">") + // Anything that is left in the page. just tack it on to the end as is + formatted_scan = formatted_scan + raw_scan + // If there is something in there already, pad it out. + if(length(notes.note) > 0) + notes.note = notes.note + "

" + // Store the scanned document to the notes + notes.note = "Scanned Document. Edit to restore previous notes/delete scan.
----------
" + formatted_scan + "
" + // notehtml ISN'T set to allow user to get their old notes back. A better implementation would add a "scanned documents" + // feature to the PDA, which would better convey the availability of the feature, but this will work for now. + // Inform the user + user << "Paper scanned and OCRed to notekeeper." //concept of scanning paper copyright brainoblivion 2009 + else + user << "Error scanning [A]." \ No newline at end of file diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index 2bafc9f3cc9..37a29a00bbd 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -27,16 +27,18 @@ if(useMS) if(prob(5)) // /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") - var/obj/item/device/pda/P var/list/viables = list() for(var/obj/item/device/pda/check_pda in PDAs) - if (!check_pda.owner||check_pda.toff||check_pda == src||check_pda.hidden) + var/datum/data/pda/app/messenger/check_m = check_pda.find_program(/datum/data/pda/app/messenger) + + if (!check_m || !check_m.can_receive()) continue viables.Add(check_pda) if(!viables.len) return - P = pick(viables) + var/obj/item/device/pda/P = pick(viables) + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) var/sender var/message @@ -104,7 +106,7 @@ //Commented out because we don't send messages like this anymore. Instead it will just popup in their chat window. //P.tnote += "← From [sender] (Unknown / spam?):
[message]
" - P.play_ringtone() + PM.play_ringtone() //Search for holder of the PDA. var/mob/living/L = null if(P.loc && isliving(P.loc)) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 2fd2ddcab61..420b897626b 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -108,7 +108,8 @@ pda.ownjob = "Personal Assistant" pda.owner = text("[]", src) pda.name = pda.owner + " (" + pda.ownjob + ")" - pda.toff = 1 + var/datum/data/pda/app/messenger/M = pda.find_program(/datum/data/pda/app/messenger) + M.toff = 1 ..() /mob/living/silicon/pai/Login() diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 11e3abaf7e8..5278300ffb5 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -142,15 +142,24 @@ on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1) var/data[0] - data["receiver_off"] = user.pda.toff - data["ringer_off"] = user.pda.silent + if(!user.pda) + return + var/datum/data/pda/app/messenger/M = user.pda.find_program(/datum/data/pda/app/messenger) + if(!M) + return + + data["receiver_off"] = M.toff + data["ringer_off"] = M.silent data["current_ref"] = null data["current_name"] = user.current_pda_messaging var/pdas[0] - if(!user.pda.toff) + if(!M.toff) for(var/obj/item/device/pda/P in PDAs) - if(!P.owner || P.toff || P == user.pda || P.hidden) continue + var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) + + if(P == user.pda || !PM || !PM.can_receive()) + continue var/pda[0] pda["name"] = "[P]" pda["owner"] = "[P.owner]" @@ -163,7 +172,7 @@ var/messages[0] if(user.current_pda_messaging) - for(var/index in user.pda.tnote) + for(var/index in M.tnote) if(index["owner"] != user.current_pda_messaging) continue var/msg[0] @@ -188,11 +197,15 @@ if(!istype(P)) return if(!isnull(P.pda)) + var/datum/data/pda/app/messenger/M = P.pda.find_program(/datum/data/pda/app/messenger) + if(!M) + return + if(href_list["toggler"]) - P.pda.toff = href_list["toggler"] != "1" + M.toff = href_list["toggler"] != "1" return 1 else if(href_list["ringer"]) - P.pda.silent = href_list["ringer"] != "1" + M.silent = href_list["ringer"] != "1" return 1 else if(href_list["select"]) var/s = href_list["select"] @@ -206,7 +219,7 @@ return alert("Communications circuits remain uninitialized.") var/target = locate(href_list["target"]) - P.pda.create_message(P, target, 1) + M.create_message(P, target, 1) return 1 /datum/pai_software/med_records diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3f56a1bfc25..2d6b918983c 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -174,7 +174,9 @@ var/list/robot_verbs_default = list( rbPDA = new/obj/item/device/pda/ai(src) rbPDA.set_name_and_job(custom_name,braintype) if(scrambledcodes) - rbPDA.hidden = 1 + var/datum/data/pda/app/messenger/M = rbPDA.find_program(/datum/data/pda/app/messenger) + if(M) + M.hidden = 1 /mob/living/silicon/robot/binarycheck() if(is_component_functioning("comms")) diff --git a/code/modules/ninja/suit/SpiderOS.dm b/code/modules/ninja/suit/SpiderOS.dm index de7cc2e179c..11a595e6645 100644 --- a/code/modules/ninja/suit/SpiderOS.dm +++ b/code/modules/ninja/suit/SpiderOS.dm @@ -231,8 +231,8 @@ if(L) L << "\icon[P] Message from unknown source: \"[t]\" (Unable to Reply)" P.play_ringtone() - P.overlays.Cut() - P.overlays += image('icons/obj/pda.dmi', "pda-r") + var/datum/data/pda/app/messenger/M = P.find_program(/datum/data/pda/app/messenger) + M.set_new(1) if("Inject") if( (href_list["tag"]=="radium"? (reagents.get_reagent_amount("radium"))<=(a_boost*a_transfer) : !reagents.get_reagent_amount(href_list["tag"])) )//Special case for radium. If there are only a_boost*a_transfer radium units left. diff --git a/nano/assets/nano.js b/nano/assets/nano.js index 9ae1ecc460a..1af5aed8ad1 100644 --- a/nano/assets/nano.js +++ b/nano/assets/nano.js @@ -1 +1 @@ -function NanoStateDefaultClass(){this.key="default",this.key=this.key.toLowerCase(),NanoStateManager.addState(this)}function NanoStateClass(){}var NanoUtility=function(){var e={};return{init:function(){var t=$("body");e=t.data("urlParameters")},generateHref:function(t){var n="?";for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);for(var a in t)t.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+t[a]);return n},winset:function(e,t,n){var a,r;return null==n&&(n=NanoStateManager.getData().config.window.ref),a={},a[n+"."+e]=t,r=a,location.href=NanoUtility.href("winset",r)},extend:function(e,t){return Object.keys(t).forEach(function(n){var a;return a=t[n],a&&"[object Object]"===Object.prototype.toString.call(a)?(e[n]=e[n]||{},NanoUtility.extend(e[n],a)):e[n]=a}),e},href:function(e,t){return null==e&&(e=""),null==t&&(t={}),e=new Url("byond://"+e),NanoUtility.extend(e.query,t),e},close:function(){var t;return t={command:"nanoclose "+e.src},this.winset("is-visible","false"),location.href=NanoUtility.href("winset",t)}}}();"undefined"==typeof jQuery&&reportError("ERROR: Javascript library failed to load!"),"undefined"==typeof doT&&reportError("ERROR: Template engine failed to load!");var reportError=function(e){window.location="byond://?nano_err="+encodeURIComponent(e),alert(e)};$(document).ready(function(){NanoUtility.init(),NanoStateManager.init(),NanoTemplate.init(),NanoWindow.init()}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length,n=Number(arguments[1])||0;for(n=0>n?Math.ceil(n):Math.floor(n),0>n&&(n+=t);t>n;n++)if(n in this&&this[n]===e)return n;return-1}),String.prototype.format||(String.prototype.format=function(e){var t=this;return t.replace(String.prototype.format.regex,function(t){var n,a=parseInt(t.substring(1,t.length-1));return n=a>=0?e[a]:-1===a?"{":-2===a?"}":""})},String.prototype.format.regex=new RegExp("{-?[0-9]+}","g")),Object.size=function(e){var t,n=0;for(var t in e)e.hasOwnProperty(t)&&n++;return n},window.console||(window.console={log:function(e){return!1}}),String.prototype.toTitleCase=function(){var e=/^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i;return this.replace(/([^\W_]+[^\s-]*) */g,function(t,n,a,r){return a>0&&a+n.length!==r.length&&n.search(e)>-1&&":"!==r.charAt(a-2)&&r.charAt(a-1).search(/[^\s-]/)<0?t.toLowerCase():n.substr(1).search(/[A-Z]|\../)>-1?t:t.charAt(0).toUpperCase()+t.substr(1)})},$.ajaxSetup({cache:!1}),Function.prototype.inheritsFrom=function(e){return this.prototype=new e,this.prototype.constructor=this,this.prototype.parent=e.prototype,this},String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),String.prototype.ckey||(String.prototype.ckey=function(){return this.replace(/\W/g,"").toLowerCase()}),NanoStateManager=function(){var e=!1,t=null,n={},a={},r={},o=null,i=function(){t=$("body").data("initialData"),null!=t&&t.hasOwnProperty("config")&&t.hasOwnProperty("data")||reportError("Error: Initial data did not load correctly.");var n="default";t.config.hasOwnProperty("stateKey")&&t.config.stateKey&&(n=t.config.stateKey.toLowerCase()),NanoStateManager.setCurrentState(n),$(document).on("templatesLoaded",function(){l(t),e=!0})},s=function(n){var a;try{a=jQuery.parseJSON(n)}catch(r){return void reportError("recieveUpdateData failed.
Error name: "+r.name+"
Error Message: "+r.message)}a.hasOwnProperty("data")||(t&&t.hasOwnProperty("data")?a.data=t.data:a.data={}),e?l(a):t=a},l=function(e){if(null!=o){if(e=o.onBeforeUpdate(e),e===!1)return void reportError("data is false, return");t=e,o.onUpdate(t),o.onAfterUpdate(t)}},c=function(e,t){for(var n in e)e.hasOwnProperty(n)&&jQuery.isFunction(e[n])&&(t=e[n].call(this,t));return t};return{init:function(){i()},receiveUpdateData:function(e){s(e)},addBeforeUpdateCallback:function(e,t){n[e]=t},addBeforeUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addBeforeUpdateCallback(t,e[t])},removeBeforeUpdateCallback:function(e){n.hasOwnProperty(e)&&delete n[e]},executeBeforeUpdateCallbacks:function(e){return c(n,e)},addAfterUpdateCallback:function(e,t){a[e]=t},addAfterUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addAfterUpdateCallback(t,e[t])},removeAfterUpdateCallback:function(e){a.hasOwnProperty(e)&&delete a[e]},executeAfterUpdateCallbacks:function(e){return c(a,e)},addState:function(e){return e instanceof NanoStateClass?e.key?void(r[e.key]=e):void reportError("ERROR: Attempted to add a state with an invalid stateKey"):void reportError("ERROR: Attempted to add a state which is not instanceof NanoStateClass")},setCurrentState:function(e){if("undefined"==typeof e||!e)return reportError("ERROR: No state key was passed!"),!1;if(!r.hasOwnProperty(e))return reportError("ERROR: Attempted to set a current state which does not exist: "+e),!1;var t=o;return o=r[e],null!=t&&t.onRemove(o),o.onAdd(t),!0},getCurrentState:function(){return o},getData:function(){return t}}}(),NanoBaseCallbacks=function(){var e=!0,t={},n={status:function(t){var n;return 2==t.config.status?(n="good",$(".linkActive").removeClass("inactive")):1==t.config.status?(n="average",$(".linkActive").addClass("inactive")):(n="bad",$(".linkActive").addClass("inactive")),$(".statusicon").removeClass("good bad average").addClass(n),$(".linkActive").stopTime("linkPending"),$(".linkActive").removeClass("linkPending"),$(".linkActive").off("click").on("click",function(n){n.preventDefault();var a=$(this).data("href");null!=a&&e&&(e=!1,$("body").oneTime(300,"enableClick",function(){e=!0}),2==t.config.status&&$(this).oneTime(300,"linkPending",function(){$(this).addClass("linkPending")}),window.location.href=a)}),t},nanomap:function(e){return $(".mapIcon").off("mouseenter mouseleave").on("mouseenter",function(e){$("#uiMapTooltip").html($(this).children(".tooltip").html()).show().stopTime().oneTime(5e3,"hideTooltip",function(){$(this).fadeOut(500)})}),$(".zoomLink").off("click").on("click",function(e){e.preventDefault();var t=$(this).data("zoomLevel"),n=$("#uiMap"),a=n.width()*t,r=n.height()*t;n.css({zoom:t,left:"50%",top:"50%",marginLeft:"-"+Math.floor(a/2)+"px",marginTop:"-"+Math.floor(r/2)+"px"})}),$("#uiMapImage").attr("src","nanomap_z"+e.config.mapZLevel+".png"),e}};return{addCallbacks:function(){NanoStateManager.addBeforeUpdateCallbacks(t),NanoStateManager.addAfterUpdateCallbacks(n)},removeCallbacks:function(){for(var e in t)t.hasOwnProperty(e)&&NanoStateManager.removeBeforeUpdateCallback(e);for(var e in n)n.hasOwnProperty(e)&&NanoStateManager.removeAfterUpdateCallback(e)}}}(),NanoBaseHelpers=function(){var e={syndicateMode:function(){return $("body").css("background-color","#8f1414"),$("body").css("background-image","url('uiBackground-Syndicate.png')"),$("body").css("background-position","50% 0"),$("body").css("background-repeat","repeat-x"),$("#uiTitleFluff").css("background-image","url('uiTitleFluff-Syndicate.png')"),$("#uiTitleFluff").css("background-position","50% 50%"),$("#uiTitleFluff").css("background-repeat","no-repeat"),""},combine:function(e,t){return e&&t?e.concat(t):e||t},dump:function(e){return JSON.stringify(e)},link:function(e,t,n,a,r,o){var i="",s="noIcon";"undefined"!=typeof t&&t&&(i='

',s="hasIcon"),"undefined"!=typeof r&&r||(r="link");var l="";return"undefined"!=typeof o&&o&&(l='id="'+o+'"'),"undefined"!=typeof a&&a?'":'
"+i+e+"
"},xor:function(e,t){return e^t},precisionRound:function(e,t){if(0==t)return Math.round(number);var n=Math.pow(10,t);return Math.round(e*n)/n},round:function(e){return Math.round(e)},fixed:function(e){return Math.round(10*e)/10},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)},string:function(){if(0==arguments.length)return"";if(1==arguments.length)return arguments[0];if(arguments.length>1){stringArgs=[];for(var e=1;et?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),"undefined"!=typeof a&&a||(a=""),"undefined"!=typeof r&&r||(r="");var o=Math.round((e-t)/(n-t)*100);return'
'+r+"
"},dangerToClass:function(e){return 0==e?"good":1==e?"average":"bad"},dangerToSpan:function(e){return 0==e?'"Good"':1==e?'"Minor Alert"':'"Major Alert"'},generateHref:function(e){var t=$("body");_urlParameters=t.data("urlParameters");var n="?";for(var a in _urlParameters)_urlParameters.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+_urlParameters[a]);for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);return n},displayDNABlocks:function(e,t,n,a,r){if(!e)return'
Please place a valid subject into the DNA modifier.
';var o=e.split(""),i='
',s=1,l=1;for(var c in o)if(o.hasOwnProperty(c)&&"object"!=typeof o[c]){var u;u="UI"==r.toUpperCase()?{selectUIBlock:s,selectUISubblock:l}:{selectSEBlock:s,selectSESubblock:l};var d="linkActive";s==t&&l==n&&(d="selected"),i+='",c++,c%a==0&&c
"):l++}return i+="
"},cMirror:function(e){CodeMirror.fromTextArea(document.getElementById(e),{lineNumbers:!0,indentUnit:4,indentWithTabs:!0,theme:"lesser-dark"})}};return{addHelpers:function(){NanoTemplate.addHelpers(e)},removeHelpers:function(){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.removeHelper(t)}}}(),NanoStateDefaultClass.inheritsFrom(NanoStateClass);var NanoStateDefault=new NanoStateDefaultClass;NanoStateClass.prototype.key=null,NanoStateClass.prototype.layoutRendered=!1,NanoStateClass.prototype.contentRendered=!1,NanoStateClass.prototype.mapInitialised=!1,NanoStateClass.prototype.isCurrent=function(){return NanoStateManager.getCurrentState()==this},NanoStateClass.prototype.onAdd=function(e){NanoBaseCallbacks.addCallbacks(),NanoBaseHelpers.addHelpers()},NanoStateClass.prototype.onRemove=function(e){NanoBaseCallbacks.removeCallbacks(),NanoBaseHelpers.removeHelpers()},NanoStateClass.prototype.onBeforeUpdate=function(e){return e=NanoStateManager.executeBeforeUpdateCallbacks(e)},NanoStateClass.prototype.onUpdate=function(e){try{(!this.layoutRendered||e.config.hasOwnProperty("autoUpdateLayout")&&e.config.autoUpdateLayout)&&($("#uiLayout").html(NanoTemplate.parse("layout",e)),this.layoutRendered=!0),(!this.contentRendered||e.config.hasOwnProperty("autoUpdateContent")&&e.config.autoUpdateContent)&&($("#uiContent").html(NanoTemplate.parse("main",e)),this.contentRendered=!0),NanoTemplate.templateExists("mapContent")&&(this.mapInitialised||($("#uiMap").draggable(),$("#uiMapTooltip").off("click").on("click",function(e){e.preventDefault(),$(this).fadeOut(400)}),this.mapInitialised=!0),$("#uiMapContent").html(NanoTemplate.parse("mapContent",e)),e.config.hasOwnProperty("showMap")&&e.config.showMap?($("#uiContent").addClass("hidden"),$("#uiMapWrapper").removeClass("hidden")):($("#uiMapWrapper").addClass("hidden"),$("#uiContent").removeClass("hidden"))),NanoTemplate.templateExists("mapHeader")&&$("#uiMapHeader").html(NanoTemplate.parse("mapHeader",e)),NanoTemplate.templateExists("mapFooter")&&$("#uiMapFooter").html(NanoTemplate.parse("mapFooter",e))}catch(t){return void reportError("ERROR: An error occurred while rendering the UI: "+t.message)}},NanoStateClass.prototype.onAfterUpdate=function(e){NanoStateManager.executeAfterUpdateCallbacks(e)},NanoStateClass.prototype.alertText=function(e){alert(e)};var NanoTemplate=function(){var e={},t={},n={},a={},r=function(){e=$("body").data("templateData"),null==e&&reportError("Error: Template data did not load correctly."),o()},o=function(){var t=Object.size(e);if(!t)return void $(document).trigger("templatesLoaded");for(var n in e)if(e.hasOwnProperty(n))return void $.when($.ajax({url:e[n],cache:!1,dataType:"text"})).done(function(t){t+='
';try{NanoTemplate.addTemplate(n,t)}catch(a){return void reportError("ERROR: An error occurred while loading the UI: "+a.message)}delete e[n],o()}).fail(function(){reportError("ERROR: Loading template "+n+"("+e[n]+") failed!")})},i=function(){for(var e in t)try{n[e]=doT.template(t[e],null,t)}catch(a){reportError(a.message)}};return{init:function(){r()},addTemplate:function(e,n){t[e]=n},templateExists:function(e){return t.hasOwnProperty(e)},parse:function(e,r){if(!n.hasOwnProperty(e)||!n[e]){if(!t.hasOwnProperty(e))return reportError('ERROR: Template "'+e+'" does not exist in _compiledTemplates!'),"

Template error (does not exist)

";i()}return"function"!=typeof n[e]?(reportError(n[e]),reportError('ERROR: Template "'+e+'" failed to compile!'),"

Template error (failed to compile)

"):n[e].call(this,r.data,r.config,a)},addHelper:function(e,t){return jQuery.isFunction(t)?void(a[e]=t):void reportError("NanoTemplate.addHelper failed to add "+e+" as it is not a function.")},addHelpers:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.addHelper(t,e[t])},removeHelper:function(e){helpers.hasOwnProperty(e)&&delete a[e]}}}(),NanoWindow=function(){var e,t,n,a,r,o,i=function(e,t){NanoUtility.winset("pos",e+","+t)},s=function(e,t){NanoUtility.winset("size",e+","+t)},l=function(){NanoStateManager.getData().config.user.fancy&&(c(),u(),d(),f())},c=function(){NanoUtility.winset("titlebar",0),NanoUtility.winset("can-resize",0),$(".fancy").show(),$("#uiTitleFluff").css("right","65px")},u=function(){var e=function(){return NanoUtility.close()},t=function(){return NanoUtility.winset("is-minimized","true")};$(".close").on("click",function(t){e()}),$(".minimize").on("click",function(e){t()})},d=function(){$("#uiTitleWrapper").on("mousemove",function(e){p()}),$("#uiTitleWrapper").on("mousedown",function(t){e=!0}),$("#uiTitleWrapper").on("mouseup",function(a){e=!1,t=null,n=null})},p=function(a){var r,o;null==a&&(a=window.event),e&&(null==t&&(t=a.screenX),null==n&&(n=a.screenY),r=a.screenX-t+window.screenLeft,o=a.screenY-n+window.screenTop,i(r,o),t=a.screenX,n=a.screenY)},f=function(){$("#resize").on("mousemove",function(e){m()}),$("#resize").on("mousedown",function(e){a=!0}),$("#resize").on("mouseup",function(e){a=!1})},m=function(){var e,t;null==event&&(event=window.event),a&&(null==r&&(r=event.screenX),null==o&&(o=event.screenY),e=Math.max(150,event.screenX-r+window.innerWidth),t=Math.max(150,event.screenY-o+window.innerHeight),s(e,t),r=event.screenX,o=event.screenY)};return{init:function(){$(document).on("templatesLoaded",function(){l()})}}}(); \ No newline at end of file +function NanoStateDefaultClass(){this.key="default",this.key=this.key.toLowerCase(),NanoStateManager.addState(this)}function NanoStatePDAClass(){this.key="pda",this.key=this.key.toLowerCase(),NanoStateManager.addState(this)}function NanoStateClass(){}var NanoUtility=function(){var e={};return{init:function(){var t=$("body");e=t.data("urlParameters")},generateHref:function(t){var n="?";for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);for(var a in t)t.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+t[a]);return n},winset:function(e,t,n){var a,r;return null==n&&(n=NanoStateManager.getData().config.window.ref),a={},a[n+"."+e]=t,r=a,location.href=NanoUtility.href("winset",r)},extend:function(e,t){return Object.keys(t).forEach(function(n){var a;return a=t[n],a&&"[object Object]"===Object.prototype.toString.call(a)?(e[n]=e[n]||{},NanoUtility.extend(e[n],a)):e[n]=a}),e},href:function(e,t){return null==e&&(e=""),null==t&&(t={}),e=new Url("byond://"+e),NanoUtility.extend(e.query,t),e},close:function(){var t;return t={command:"nanoclose "+e.src},this.winset("is-visible","false"),location.href=NanoUtility.href("winset",t)}}}();"undefined"==typeof jQuery&&reportError("ERROR: Javascript library failed to load!"),"undefined"==typeof doT&&reportError("ERROR: Template engine failed to load!");var reportError=function(e){window.location="byond://?nano_err="+encodeURIComponent(e),alert(e)};$(document).ready(function(){NanoUtility.init(),NanoStateManager.init(),NanoTemplate.init(),NanoWindow.init()}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length,n=Number(arguments[1])||0;for(n=0>n?Math.ceil(n):Math.floor(n),0>n&&(n+=t);t>n;n++)if(n in this&&this[n]===e)return n;return-1}),String.prototype.format||(String.prototype.format=function(e){var t=this;return t.replace(String.prototype.format.regex,function(t){var n,a=parseInt(t.substring(1,t.length-1));return n=a>=0?e[a]:-1===a?"{":-2===a?"}":""})},String.prototype.format.regex=new RegExp("{-?[0-9]+}","g")),Object.size=function(e){var t,n=0;for(var t in e)e.hasOwnProperty(t)&&n++;return n},window.console||(window.console={log:function(e){return!1}}),String.prototype.toTitleCase=function(){var e=/^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i;return this.replace(/([^\W_]+[^\s-]*) */g,function(t,n,a,r){return a>0&&a+n.length!==r.length&&n.search(e)>-1&&":"!==r.charAt(a-2)&&r.charAt(a-1).search(/[^\s-]/)<0?t.toLowerCase():n.substr(1).search(/[A-Z]|\../)>-1?t:t.charAt(0).toUpperCase()+t.substr(1)})},$.ajaxSetup({cache:!1}),Function.prototype.inheritsFrom=function(e){return this.prototype=new e,this.prototype.constructor=this,this.prototype.parent=e.prototype,this},String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),String.prototype.ckey||(String.prototype.ckey=function(){return this.replace(/\W/g,"").toLowerCase()}),NanoStateManager=function(){var e=!1,t=null,n={},a={},r={},o=null,i=function(){t=$("body").data("initialData"),null!=t&&t.hasOwnProperty("config")&&t.hasOwnProperty("data")||reportError("Error: Initial data did not load correctly.");var n="default";t.config.hasOwnProperty("stateKey")&&t.config.stateKey&&(n=t.config.stateKey.toLowerCase()),NanoStateManager.setCurrentState(n),$(document).on("templatesLoaded",function(){l(t),e=!0})},s=function(n){var a;try{a=jQuery.parseJSON(n)}catch(r){return void reportError("recieveUpdateData failed.
Error name: "+r.name+"
Error Message: "+r.message)}a.hasOwnProperty("data")||(t&&t.hasOwnProperty("data")?a.data=t.data:a.data={}),e?l(a):t=a},l=function(e){if(null!=o){if(e=o.onBeforeUpdate(e),e===!1)return void reportError("data is false, return");t=e,o.onUpdate(t),o.onAfterUpdate(t)}},c=function(e,t){for(var n in e)e.hasOwnProperty(n)&&jQuery.isFunction(e[n])&&(t=e[n].call(this,t));return t};return{init:function(){i()},receiveUpdateData:function(e){s(e)},addBeforeUpdateCallback:function(e,t){n[e]=t},addBeforeUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addBeforeUpdateCallback(t,e[t])},removeBeforeUpdateCallback:function(e){n.hasOwnProperty(e)&&delete n[e]},executeBeforeUpdateCallbacks:function(e){return c(n,e)},addAfterUpdateCallback:function(e,t){a[e]=t},addAfterUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addAfterUpdateCallback(t,e[t])},removeAfterUpdateCallback:function(e){a.hasOwnProperty(e)&&delete a[e]},executeAfterUpdateCallbacks:function(e){return c(a,e)},addState:function(e){return e instanceof NanoStateClass?e.key?void(r[e.key]=e):void reportError("ERROR: Attempted to add a state with an invalid stateKey"):void reportError("ERROR: Attempted to add a state which is not instanceof NanoStateClass")},setCurrentState:function(e){if("undefined"==typeof e||!e)return reportError("ERROR: No state key was passed!"),!1;if(!r.hasOwnProperty(e))return reportError("ERROR: Attempted to set a current state which does not exist: "+e),!1;var t=o;return o=r[e],null!=t&&t.onRemove(o),o.onAdd(t),!0},getCurrentState:function(){return o},getData:function(){return t}}}(),NanoBaseCallbacks=function(){var e=!0,t={},n={status:function(t){var n;return 2==t.config.status?(n="good",$(".linkActive").removeClass("inactive")):1==t.config.status?(n="average",$(".linkActive").addClass("inactive")):(n="bad",$(".linkActive").addClass("inactive")),$(".statusicon").removeClass("good bad average").addClass(n),$(".linkActive").stopTime("linkPending"),$(".linkActive").removeClass("linkPending"),$(".linkActive").off("click").on("click",function(n){n.preventDefault();var a=$(this).data("href");null!=a&&e&&(e=!1,$("body").oneTime(300,"enableClick",function(){e=!0}),2==t.config.status&&$(this).oneTime(300,"linkPending",function(){$(this).addClass("linkPending")}),window.location.href=a)}),t},nanomap:function(e){return $(".mapIcon").off("mouseenter mouseleave").on("mouseenter",function(e){$("#uiMapTooltip").html($(this).children(".tooltip").html()).show().stopTime().oneTime(5e3,"hideTooltip",function(){$(this).fadeOut(500)})}),$(".zoomLink").off("click").on("click",function(e){e.preventDefault();var t=$(this).data("zoomLevel"),n=$("#uiMap"),a=n.width()*t,r=n.height()*t;n.css({zoom:t,left:"50%",top:"50%",marginLeft:"-"+Math.floor(a/2)+"px",marginTop:"-"+Math.floor(r/2)+"px"})}),$("#uiMapImage").attr("src","nanomap_z"+e.config.mapZLevel+".png"),e}};return{addCallbacks:function(){NanoStateManager.addBeforeUpdateCallbacks(t),NanoStateManager.addAfterUpdateCallbacks(n)},removeCallbacks:function(){for(var e in t)t.hasOwnProperty(e)&&NanoStateManager.removeBeforeUpdateCallback(e);for(var e in n)n.hasOwnProperty(e)&&NanoStateManager.removeAfterUpdateCallback(e)}}}(),NanoBaseHelpers=function(){var e={syndicateMode:function(){return $("body").css("background-color","#8f1414"),$("body").css("background-image","url('uiBackground-Syndicate.png')"),$("body").css("background-position","50% 0"),$("body").css("background-repeat","repeat-x"),$("#uiTitleFluff").css("background-image","url('uiTitleFluff-Syndicate.png')"),$("#uiTitleFluff").css("background-position","50% 50%"),$("#uiTitleFluff").css("background-repeat","no-repeat"),""},combine:function(e,t){return e&&t?e.concat(t):e||t},dump:function(e){return JSON.stringify(e)},link:function(e,t,n,a,r,o){var i="",s="noIcon";"undefined"!=typeof t&&t&&(i='
',s="hasIcon"),"undefined"!=typeof r&&r||(r="link");var l="";return"undefined"!=typeof o&&o&&(l='id="'+o+'"'),"undefined"!=typeof a&&a?'":'
"+i+e+"
"},xor:function(e,t){return e^t},precisionRound:function(e,t){if(0==t)return Math.round(number);var n=Math.pow(10,t);return Math.round(e*n)/n},round:function(e){return Math.round(e)},fixed:function(e){return Math.round(10*e)/10},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)},string:function(){if(0==arguments.length)return"";if(1==arguments.length)return arguments[0];if(arguments.length>1){stringArgs=[];for(var e=1;et?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),"undefined"!=typeof a&&a||(a=""),"undefined"!=typeof r&&r||(r="");var o=Math.round((e-t)/(n-t)*100);return'
'+r+"
"},dangerToClass:function(e){return 0==e?"good":1==e?"average":"bad"},dangerToSpan:function(e){return 0==e?'"Good"':1==e?'"Minor Alert"':'"Major Alert"'},generateHref:function(e){var t=$("body");_urlParameters=t.data("urlParameters");var n="?";for(var a in _urlParameters)_urlParameters.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+_urlParameters[a]);for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);return n},displayDNABlocks:function(e,t,n,a,r){if(!e)return'
Please place a valid subject into the DNA modifier.
';var o=e.split(""),i='
',s=1,l=1;for(var c in o)if(o.hasOwnProperty(c)&&"object"!=typeof o[c]){var u;u="UI"==r.toUpperCase()?{selectUIBlock:s,selectUISubblock:l}:{selectSEBlock:s,selectSESubblock:l};var d="linkActive";s==t&&l==n&&(d="selected"),i+='",c++,c%a==0&&c
"):l++}return i+="
"},cMirror:function(e){CodeMirror.fromTextArea(document.getElementById(e),{lineNumbers:!0,indentUnit:4,indentWithTabs:!0,theme:"lesser-dark"})}};return{addHelpers:function(){NanoTemplate.addHelpers(e)},removeHelpers:function(){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.removeHelper(t)}}}(),NanoStateDefaultClass.inheritsFrom(NanoStateClass);var NanoStateDefault=new NanoStateDefaultClass;NanoStatePDAClass.inheritsFrom(NanoStateClass);var NanoStatePDA=new NanoStatePDAClass,pda_app_template=null;NanoStatePDAClass.prototype.onUpdate=function(e){NanoStateClass.prototype.onUpdate.call(this,e);try{if(null!=e.data.app){var t=e.data.app.template;null!=t&&t!=pda_app_template?$.when($.ajax({url:t+".tmpl",cache:!1,dataType:"text"})).done(function(n){n+='
';try{NanoTemplate.addTemplate("app",n),NanoTemplate.resetTemplate("app"),$("#uiApp").html(NanoTemplate.parse("app",e)),pda_app_template=t,2==e.config.status&&($("#uiApp .linkActive").addClass("linkPending"),$("#uiApp .linkActive").oneTime(300,"linkPending",function(){$("#uiApp .linkActive").removeClass("linkPending inactive")}))}catch(a){return void reportError("ERROR: An error occurred while loading the UI: "+a.message)}}).fail(function(){reportError("ERROR: Loading template app("+t+") failed!")}):NanoTemplate.templateExists("app")&&$("#uiApp").html(NanoTemplate.parse("app",e))}}catch(n){return void reportError("ERROR: An error occurred while rendering the UI: "+n.message)}},NanoStateClass.prototype.key=null,NanoStateClass.prototype.layoutRendered=!1,NanoStateClass.prototype.contentRendered=!1,NanoStateClass.prototype.mapInitialised=!1,NanoStateClass.prototype.isCurrent=function(){return NanoStateManager.getCurrentState()==this},NanoStateClass.prototype.onAdd=function(e){NanoBaseCallbacks.addCallbacks(),NanoBaseHelpers.addHelpers()},NanoStateClass.prototype.onRemove=function(e){NanoBaseCallbacks.removeCallbacks(),NanoBaseHelpers.removeHelpers()},NanoStateClass.prototype.onBeforeUpdate=function(e){return e=NanoStateManager.executeBeforeUpdateCallbacks(e)},NanoStateClass.prototype.onUpdate=function(e){try{(!this.layoutRendered||e.config.hasOwnProperty("autoUpdateLayout")&&e.config.autoUpdateLayout)&&($("#uiLayout").html(NanoTemplate.parse("layout",e)),this.layoutRendered=!0),(!this.contentRendered||e.config.hasOwnProperty("autoUpdateContent")&&e.config.autoUpdateContent)&&($("#uiContent").html(NanoTemplate.parse("main",e)),this.contentRendered=!0),NanoTemplate.templateExists("mapContent")&&(this.mapInitialised||($("#uiMap").draggable(),$("#uiMapTooltip").off("click").on("click",function(e){e.preventDefault(),$(this).fadeOut(400)}),this.mapInitialised=!0),$("#uiMapContent").html(NanoTemplate.parse("mapContent",e)),e.config.hasOwnProperty("showMap")&&e.config.showMap?($("#uiContent").addClass("hidden"),$("#uiMapWrapper").removeClass("hidden")):($("#uiMapWrapper").addClass("hidden"),$("#uiContent").removeClass("hidden"))),NanoTemplate.templateExists("mapHeader")&&$("#uiMapHeader").html(NanoTemplate.parse("mapHeader",e)),NanoTemplate.templateExists("mapFooter")&&$("#uiMapFooter").html(NanoTemplate.parse("mapFooter",e))}catch(t){return void reportError("ERROR: An error occurred while rendering the UI: "+t.message)}},NanoStateClass.prototype.onAfterUpdate=function(e){NanoStateManager.executeAfterUpdateCallbacks(e)},NanoStateClass.prototype.alertText=function(e){alert(e)};var NanoTemplate=function(){var e={},t={},n={},a={},r=function(){e=$("body").data("templateData"),null==e&&reportError("Error: Template data did not load correctly."),o()},o=function(){var t=Object.size(e);if(!t)return void $(document).trigger("templatesLoaded");for(var n in e)if(e.hasOwnProperty(n))return void $.when($.ajax({url:e[n],cache:!1,dataType:"text"})).done(function(t){t+='
';try{NanoTemplate.addTemplate(n,t)}catch(a){return void reportError("ERROR: An error occurred while loading the UI: "+a.message)}delete e[n],o()}).fail(function(){reportError("ERROR: Loading template "+n+"("+e[n]+") failed!")})},i=function(){for(var e in t)try{n[e]=doT.template(t[e],null,t)}catch(a){reportError(a.message)}};return{init:function(){r()},addTemplate:function(e,n){t[e]=n},templateExists:function(e){return t.hasOwnProperty(e)},resetTemplate:function(e){n[e]=null},parse:function(e,r){if(!n.hasOwnProperty(e)||!n[e]){if(!t.hasOwnProperty(e))return reportError('ERROR: Template "'+e+'" does not exist in _compiledTemplates!'),"

Template error (does not exist)

";i()}return"function"!=typeof n[e]?(reportError(n[e]),reportError('ERROR: Template "'+e+'" failed to compile!'),"

Template error (failed to compile)

"):n[e].call(this,r.data,r.config,a)},addHelper:function(e,t){return jQuery.isFunction(t)?void(a[e]=t):void reportError("NanoTemplate.addHelper failed to add "+e+" as it is not a function.")},addHelpers:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.addHelper(t,e[t])},removeHelper:function(e){helpers.hasOwnProperty(e)&&delete a[e]}}}(),NanoWindow=function(){var e,t,n,a,r,o,i=function(e,t){NanoUtility.winset("pos",e+","+t)},s=function(e,t){NanoUtility.winset("size",e+","+t)},l=function(){NanoStateManager.getData().config.user.fancy&&(c(),u(),d(),f())},c=function(){NanoUtility.winset("titlebar",0),NanoUtility.winset("can-resize",0),$(".fancy").show(),$("#uiTitleFluff").css("right","65px")},u=function(){var e=function(){return NanoUtility.close()},t=function(){return NanoUtility.winset("is-minimized","true")};$(".close").on("click",function(t){e()}),$(".minimize").on("click",function(e){t()})},d=function(){$("#uiTitleWrapper").on("mousemove",function(e){p()}),$("#uiTitleWrapper").on("mousedown",function(t){e=!0}),$("#uiTitleWrapper").on("mouseup",function(a){e=!1,t=null,n=null})},p=function(a){var r,o;null==a&&(a=window.event),e&&(null==t&&(t=a.screenX),null==n&&(n=a.screenY),r=a.screenX-t+window.screenLeft,o=a.screenY-n+window.screenTop,i(r,o),t=a.screenX,n=a.screenY)},f=function(){$("#resize").on("mousemove",function(e){m()}),$("#resize").on("mousedown",function(e){a=!0}),$("#resize").on("mouseup",function(e){a=!1})},m=function(){var e,t;null==event&&(event=window.event),a&&(null==r&&(r=event.screenX),null==o&&(o=event.screenY),e=Math.max(150,event.screenX-r+window.innerWidth),t=Math.max(150,event.screenY-o+window.innerHeight),s(e,t),r=event.screenX,o=event.screenY)};return{init:function(){$(document).on("templatesLoaded",function(){l()})}}}(); \ No newline at end of file diff --git a/nano/assets/nanoui.css b/nano/assets/nanoui.css index e99b2f94fd5..b4006f704b1 100644 --- a/nano/assets/nanoui.css +++ b/nano/assets/nanoui.css @@ -1,2 +1,2 @@ @font-face{font-family:FontAwesome;src:url(fontawesome-webfont.eot?v=4.5.0);src:url(fontawesome-webfont.eot?#iefix&v=4.5.0) format('embedded-opentype'),url(fontawesome-webfont.woff2?v=4.5.0) format('woff2'),url(fontawesome-webfont.woff?v=4.5.0) format('woff'),url(fontawesome-webfont.ttf?v=4.5.0) format('truetype'),url(fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s infinite linear;animation:a 2s infinite linear}.fa-pulse{-webkit-animation:a 1s infinite steps(8);animation:a 1s infinite steps(8)}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"} -.displayBar{position:relative;width:236px;height:16px;border:1px solid #666;float:left;margin:0 5px 0 0;overflow:hidden;background:#000}.displayBarText{position:absolute;top:-2px;left:5px;width:100%;height:100%;color:#fff;font-weight:400}.displayBarFill{width:0;height:100%;background:#40628a;overflow:hidden;float:left}.displayBarFill.alignRight{float:right}.displayBarFill.good{color:#fff;background:#4f7529}.displayBarFill.notgood{color:#fff;background:#ffb400}.displayBarFill.average{color:#fff;background:#cd6500}.displayBarFill.bad{color:#fff;background:#e00}.displayBarFill.highlight{color:#fff;background:#8ba5c4}.disabled,.link,.linkOff,.linkOn,.redButton,.selected,.yellowButton{float:left;min-width:15px;height:16px;text-align:center;color:#fff;text-decoration:none;background:#40628a;border:1px solid #161616;padding:0 4px 4px;margin:0 2px 2px 0;cursor:default;white-space:nowrap}.hasIcon{padding:0 4px 4px 0}.linkActive:hover,.zoomLink:hover,a:hover{background:#507aac}.linkPending,.linkPending:hover{color:#fff;background:#507aac}a.white,a.white:active,a.white:link,a.white:visited{color:#40628a;text-decoration:none;background:#fff;border:1px solid #161616;padding:1px 4px;margin:0 2px 0 0;cursor:default}a.white:hover{color:#fff;background:#40628a}.linkOn,.selected,a.linkOn:active,a.linkOn:hover,a.linkOn:link,a.linkOn:visited,a.selected:active,a.selected:hover,a.selected:link,a.selected:visited{color:#fff;background:#2f943c}.disabled,.linkOff,a.disabled:active,a.disabled:hover,a.disabled:link,a.disabled:visited,a.linkOff:active,a.linkOff:hover,a.linkOff:link,a.linkOff:visited{color:#fff;background:#999;border-color:#666}.disabled.icon,.linkOff.icon,.linkOn.icon,.selected.icon,a.icon{position:relative;padding:1px 4px 2px 20px}.disabled.icon img,.linkOff.icon img,.linkOn.icon img,.selected.icon img,a.icon img{position:absolute;top:0;left:0;width:18px;height:18px}.linkDanger,a.linkDanger:active,a.linkDanger:link,a.linkDanger:visited{color:#fff;background-color:red;border-color:#a00}.linkDanger:hover{background-color:#f66}.inactive,a.inactive:active,a.inactive:hover,a.inactive:link,a.inactive:visited{color:#fff;background:#999;border-color:#666}.white{color:#fff}.good,.white{font-weight:700}.good{color:#4f7529}.average{color:#cd6500}.average,.bad{font-weight:700}.bad{color:#e00}.idle{color:#272727;font-weight:700}.redButton{background:#ea0000}.yellowButton{background:#cacc00}.highlight{color:#8ba5c4}.dark{color:#272727}.burn{color:orange}.brute{color:red}.toxin{color:green}.toxin_light{color:#3adf00}.oxyloss{color:blue}.oxyloss_light{color:#6698ff}.Red{color:red}.Blue{color:#00f}.Green{color:#0f0}.Marigold{color:#fda505}.Fuschia{color:#ff0080}.Black{color:#000}.Pearl{color:#c6cacb}.cold1{color:#94b8ff}.cold2{color:#69f}.cold3{color:#293d66}.hot1{color:#f96}.hot2{color:#993d00}.hot3{color:#f60}.itemGroup{border:1px solid #e9c183;background:#2c2c2c;padding:4px;clear:both}.item{width:100%;margin:4px 0 0;clear:both;overflow:auto}.itemContent,.itemContentNarrow{float:left}.itemContentNarrow{width:30%}.itemContent{width:69%}.itemLabel,.itemLabelNarrow,.itemLabelWide,.itemLabelWider,.itemLabelWidest{float:left;color:#e9c183}.itemLabelNarrow{width:20%}.itemLabel{width:30%}.itemLabelWide{width:45%}.itemLabelWider{width:69%}.itemLabelWidest{width:100%}.itemContentWide{float:left;width:79%}.itemContentSmall{float:left;width:33%}.itemContentMedium{float:left;width:55%}.block{padding:8px;margin:10px 4px 4px;border:1px solid #40628a;background-color:#202020}.block h3{padding:0}.clearBoth{clear:both}.clearLeft{clear:left}.clearRight{clear:right}.line{width:100%;clear:both}.fixedLeft{width:110px;float:left}.fixedLeftWide{width:165px;float:left}.fixedLeftWider{width:220px;float:left}.fixedLeftWidest{width:250px;float:left}.floatRight{float:right}.floatLeft{float:left}.hidden{display:none}.statusDisplay{overflow:hidden}.statusDisplay,.statusDisplayRecords{background:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background:rgba(0,0,0,.5);color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0}.statusDisplayRecords{overflow-x:hidden;overflow-y:auto}.statusLabel{width:138px;float:left;overflow:hidden;color:#98b0c3}.statusValue{float:left}.fancy{display:none}.minimize{color:#e9c183;position:absolute;top:6px;right:46px}.minimize:hover{color:#b8c9d6}.close{color:#e9c183;position:absolute;top:4px;right:12px}.close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)}.uiLinkPendingIcon{display:none;float:left;width:16px;height:16px;margin:2px 2px 0;background-image:url(uiLinkPendingIcon.gif)}.linkPending .fa{display:none}.linkPending .uiLinkPendingIcon{display:block}.mapIcon16{position:absolute;width:16px;height:16px;background-image:url(uiIcons16Green.png);background-position:-144px -96px;background-repeat:no-repeat;zoom:.125;margin-left:-1px}.mapIcon16.bad,.mapIcon16.dead{background-image:url(uiIcons16Red.png)}.mapIcon16.average{background-image:url(uiIcons16Orange.png)}.mapIcon16.good{background-image:url(uiIcons16Green.png)}.mapIcon16.icon-airalarm{background-position:0 -144px}.mapIcon16.rank-captain{background-position:-224px -112px}.mapIcon16.rank-headofpersonnel{background-position:-112px -96px}.mapIcon16.rank-headofsecurity{background-position:-112px -128px}.mapIcon16.rank-chiefengineer{background-position:-176px -112px}.mapIcon16.rank-researchdirector{background-position:-128px -128px}.mapIcon16.rank-chiefmedicalofficer{background-position:-32px -128px}.mapIcon16.rank-atmospherictechnician,.mapIcon16.rank-stationengineer{background-position:-176px -112px}.mapIcon16.rank-chemist,.mapIcon16.rank-geneticist,.mapIcon16.rank-medicaldoctor,.mapIcon16.rank-psychiatrist{background-position:-32px -128px}.mapIcon16.rank-geneticist,.mapIcon16.rank-roboticist,.mapIcon16.rank-scientist,.mapIcon16.rank-xenobiologist{background-position:-128px -128px}.mapIcon16.rank-detective,.mapIcon16.rank-securityofficer,.mapIcon16.rank-warden{background-position:-112px -128px}ul{padding:4px 0 0 10px;margin:0;list-style-type:none}li{padding:0 0 2px}table.fixed{table-layout:fixed}table.fixed td{overflow:hidden}table.pmon{border:2px solid #4169e1}table.pmon td,table.pmon th{border-bottom:1px dotted #000;padding:0 5px}th.command{background:#33f}th.command,th.sec{font-weight:700;color:#fff}th.sec{background:#8e0000}th.med{background:#060}th.eng,th.med{font-weight:700;color:#fff}th.eng{background:#b27300}th.sci{background:#a65ba6}th.sci,th.ser{font-weight:700;color:#fff}th.ser{background:#7100aa}th.sup{background:#666621}th.civ,th.sup{font-weight:700;color:#fff}th.civ{background:#a32800}th.misc{background:#666;font-weight:700;color:#fff}span.qm-job{color:#b77a41;font-weight:700}.striped:not(table)>:nth-child(even),.striped tr:nth-child(even){background-color:#404040}#uiNoScript{position:fixed;top:50%;left:50%;margin:-60px 0 0 -150px;width:280px;height:120px;background:#fff;border:2px solid red;color:#000;font-size:10px;font-weight:700;z-index:1;padding:0 10px;text-align:center}.notice{background:url(uiNoticeBackground.jpg) 50% 50%;color:#000}.notice,.noticePlaceholder{position:relative;font-size:12px;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0}.notice.icon{padding:2px 4px 0 20px}.notice img{position:absolute;top:0;left:0;width:16px;height:16px}div.notice{clear:both}.wholeScreen{position:absolute;color:#517087;font-size:16px;font-weight:700;text-align:center}.pdalink{float:left;white-space:nowrap}.pdanote{color:#cd6500;font-weight:700}.dnaBlock{float:left;width:90px;padding:0 0 5px}.dnaBlockNumber{color:#fff;background:#363636;min-width:20px}.dnaBlockNumber,.dnaSubBlock{font-family:Fixed,monospace;float:left;height:20px;padding:0;text-align:center}.dnaSubBlock{min-width:16px}.mask{position:fixed;left:0;top:0;width:100%;height:100%;background:url(uiMaskBackground.png)}.maskContent{width:100%;height:200px;margin:200px 0;text-align:center}body{background:#272727;color:#fff;font-family:Verdana,Geneva,sans-serif;font-size:12px;line-height:170%;margin:0;padding:0}hr{background-color:#40628a;height:1px;border:none}a img,img{border-style:none}h1,h2,h3,h4,h5,h6{margin:0;padding:12px 0 6px;color:#fff;clear:both}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff000000',GradientType=0)}#uiWrapper{width:100%;height:100%;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}#uiTitleWrapper{position:relative;height:30px}#uiTitleText{position:absolute;top:6px;left:44px;width:66%;overflow:hidden;color:#e9c183;font-size:16px}#uiTitle.icon{padding:6px 8px 6px 42px;background-position:2px 50%;background-repeat:no-repeat}#uiTitleFluff{position:absolute;top:4px;right:12px;width:42px;height:24px;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") 50% 50% no-repeat}.statusicon{position:absolute;top:4px;left:12px}#uiMapWrapper{clear:both;padding:8px}#uiMapHeader{position:relative;clear:both}#uiMapContainer{position:relative;width:100%;height:600px;overflow:hidden;border:1px solid #40628a;background:url(nanomapBackground.png)}#uiMap{top:50%;left:50%;margin:-512px 0 0 -512px;overflow:hidden;zoom:4}#uiMap,#uiMapImage{position:absolute;width:256px;height:256px}#uiMapImage{bottom:1px;left:1px}#uiMapContent{position:absolute;bottom:-13.5px;left:0;width:256px;height:256px}#uiMapFooter{position:relative;clear:both}#uiContent{clear:both;padding:8px}#uiMapTooltip{position:absolute;right:10px;top:10px;border:1px solid #40628a;background-color:#272727;padding:8px;display:none;z-index:1}#uiLoadingNotice{position:relative;background:url(uiNoticeBackground.jpg) 50% 50%;color:#000;font-size:14px;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0} \ No newline at end of file +.displayBar{position:relative;width:236px;height:16px;border:1px solid #666;float:left;margin:0 5px 0 0;overflow:hidden;background:#000}.displayBarText{position:absolute;top:-2px;left:5px;width:100%;height:100%;color:#fff;font-weight:400}.displayBarFill{width:0;height:100%;background:#40628a;overflow:hidden;float:left}.displayBarFill.alignRight{float:right}.displayBarFill.good{color:#fff;background:#4f7529}.displayBarFill.notgood{color:#fff;background:#ffb400}.displayBarFill.average{color:#fff;background:#cd6500}.displayBarFill.bad{color:#fff;background:#e00}.displayBarFill.highlight{color:#fff;background:#8ba5c4}.disabled,.link,.linkOff,.linkOn,.redButton,.selected,.yellowButton{float:left;min-width:15px;height:16px;text-align:center;color:#fff;text-decoration:none;background:#40628a;border:1px solid #161616;padding:0 4px 4px;margin:0 2px 2px 0;cursor:default;white-space:nowrap}.hasIcon{padding:0 4px 4px 0}.linkActive:hover,.zoomLink:hover,a:hover{background:#507aac}.linkPending,.linkPending:hover{color:#fff;background:#507aac}a.white,a.white:active,a.white:link,a.white:visited{color:#40628a;text-decoration:none;background:#fff;border:1px solid #161616;padding:1px 4px;margin:0 2px 0 0;cursor:default}a.white:hover{color:#fff;background:#40628a}.linkOn,.selected,a.linkOn:active,a.linkOn:hover,a.linkOn:link,a.linkOn:visited,a.selected:active,a.selected:hover,a.selected:link,a.selected:visited{color:#fff;background:#2f943c}.disabled,.linkOff,a.disabled:active,a.disabled:hover,a.disabled:link,a.disabled:visited,a.linkOff:active,a.linkOff:hover,a.linkOff:link,a.linkOff:visited{color:#fff;background:#999;border-color:#666}.disabled.icon,.linkOff.icon,.linkOn.icon,.selected.icon,a.icon{position:relative;padding:1px 4px 2px 20px}.disabled.icon img,.linkOff.icon img,.linkOn.icon img,.selected.icon img,a.icon img{position:absolute;top:0;left:0;width:18px;height:18px}.linkDanger,a.linkDanger:active,a.linkDanger:link,a.linkDanger:visited{color:#fff;background-color:red;border-color:#a00}.linkDanger:hover{background-color:#f66}.inactive,a.inactive:active,a.inactive:hover,a.inactive:link,a.inactive:visited{color:#fff;background:#999;border-color:#666}.white{color:#fff}.good,.white{font-weight:700}.good{color:#4f7529}.average{color:#cd6500}.average,.bad{font-weight:700}.bad{color:#e00}.idle{color:#272727;font-weight:700}.redButton{background:#ea0000}.yellowButton{background:#cacc00}.highlight{color:#8ba5c4}.dark{color:#272727}.burn{color:orange}.brute{color:red}.toxin{color:green}.toxin_light{color:#3adf00}.oxyloss{color:blue}.oxyloss_light{color:#6698ff}.Red{color:red}.Blue{color:#00f}.Green{color:#0f0}.Marigold{color:#fda505}.Fuschia{color:#ff0080}.Black{color:#000}.Pearl{color:#c6cacb}.cold1{color:#94b8ff}.cold2{color:#69f}.cold3{color:#293d66}.hot1{color:#f96}.hot2{color:#993d00}.hot3{color:#f60}.itemGroup{border:1px solid #e9c183;background:#2c2c2c;padding:4px;clear:both}.item{width:100%;margin:4px 0 0;clear:both;overflow:auto}.itemContent,.itemContentNarrow{float:left}.itemContentNarrow{width:30%}.itemContent{width:69%}.itemLabel,.itemLabelNarrow,.itemLabelWide,.itemLabelWider,.itemLabelWidest{float:left;color:#e9c183}.itemLabelNarrow{width:20%}.itemLabel{width:30%}.itemLabelWide{width:45%}.itemLabelWider{width:69%}.itemLabelWidest{width:100%}.itemContentWide{float:left;width:79%}.itemContentSmall{float:left;width:33%}.itemContentMedium{float:left;width:55%}.block{padding:8px;margin:10px 4px 4px;border:1px solid #40628a;background-color:#202020}.block h3{padding:0}.clearBoth{clear:both}.clearLeft{clear:left}.clearRight{clear:right}.line{width:100%;clear:both}.fixedLeft{width:110px;float:left}.fixedLeftWide{width:165px;float:left}.fixedLeftWider{width:220px;float:left}.fixedLeftWidest{width:250px;float:left}.floatRight{float:right}.floatLeft{float:left}.hidden{display:none}.statusDisplay{overflow:hidden}.statusDisplay,.statusDisplayRecords{background:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background:rgba(0,0,0,.5);color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0}.statusDisplayRecords{overflow-x:hidden;overflow-y:auto}.statusLabel{width:138px;float:left;overflow:hidden;color:#98b0c3}.statusValue{float:left}.fancy{display:none}.minimize{color:#e9c183;position:absolute;top:6px;right:46px}.minimize:hover{color:#b8c9d6}.close{color:#e9c183;position:absolute;top:4px;right:12px}.close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)}.uiLinkPendingIcon{display:none;float:left;width:16px;height:16px;margin:2px 2px 0;background-image:url(uiLinkPendingIcon.gif)}.linkPending .fa{display:none}.linkPending .uiLinkPendingIcon{display:block}.mapIcon16{position:absolute;width:16px;height:16px;background-image:url(uiIcons16Green.png);background-position:-144px -96px;background-repeat:no-repeat;zoom:.125;margin-left:-1px}.mapIcon16.bad,.mapIcon16.dead{background-image:url(uiIcons16Red.png)}.mapIcon16.average{background-image:url(uiIcons16Orange.png)}.mapIcon16.good{background-image:url(uiIcons16Green.png)}.mapIcon16.icon-airalarm{background-position:0 -144px}.mapIcon16.rank-captain{background-position:-224px -112px}.mapIcon16.rank-headofpersonnel{background-position:-112px -96px}.mapIcon16.rank-headofsecurity{background-position:-112px -128px}.mapIcon16.rank-chiefengineer{background-position:-176px -112px}.mapIcon16.rank-researchdirector{background-position:-128px -128px}.mapIcon16.rank-chiefmedicalofficer{background-position:-32px -128px}.mapIcon16.rank-atmospherictechnician,.mapIcon16.rank-stationengineer{background-position:-176px -112px}.mapIcon16.rank-chemist,.mapIcon16.rank-geneticist,.mapIcon16.rank-medicaldoctor,.mapIcon16.rank-psychiatrist{background-position:-32px -128px}.mapIcon16.rank-geneticist,.mapIcon16.rank-roboticist,.mapIcon16.rank-scientist,.mapIcon16.rank-xenobiologist{background-position:-128px -128px}.mapIcon16.rank-detective,.mapIcon16.rank-securityofficer,.mapIcon16.rank-warden{background-position:-112px -128px}ul{padding:4px 0 0 10px;margin:0;list-style-type:none}li{padding:0 0 2px}table.fixed{table-layout:fixed}table.fixed td{overflow:hidden}table.pmon{border:2px solid #4169e1}table.pmon td,table.pmon th{border-bottom:1px dotted #000;padding:0 5px}th.command{background:#33f}th.command,th.sec{font-weight:700;color:#fff}th.sec{background:#8e0000}th.med{background:#060}th.eng,th.med{font-weight:700;color:#fff}th.eng{background:#b27300}th.sci{background:#a65ba6}th.sci,th.ser{font-weight:700;color:#fff}th.ser{background:#7100aa}th.sup{background:#666621}th.civ,th.sup{font-weight:700;color:#fff}th.civ{background:#a32800}th.misc{background:#666;font-weight:700;color:#fff}span.qm-job{color:#b77a41;font-weight:700}.striped:not(table)>:nth-child(even),.striped tr:nth-child(even){background-color:#404040}#uiNoScript{position:fixed;top:50%;left:50%;margin:-60px 0 0 -150px;width:280px;height:120px;background:#fff;border:2px solid red;color:#000;font-size:10px;font-weight:700;z-index:1;padding:0 10px;text-align:center}.notice{background:url(uiNoticeBackground.jpg) 50% 50%;color:#000}.notice,.noticePlaceholder{position:relative;font-size:12px;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0}.notice.icon{padding:2px 4px 0 20px}.notice img{position:absolute;top:0;left:0;width:16px;height:16px}div.notice{clear:both}.wholeScreen{position:absolute;color:#517087;font-size:16px;font-weight:700;text-align:center}.pdalink{float:left;white-space:nowrap;cursor:default!important}.pdalink.disabled{background:none;border:none;color:#999;text-align:left}.pdanote{color:#cd6500;font-weight:700}.item.mainmenu{padding-bottom:.5em}div.clock{color:#fff;font-weight:700;float:right;padding-right:2em}#pdaFooter{position:fixed;left:0;bottom:0;width:100%;background:#272727}.pdaFooterButton{width:33%;padding:.5em 0;font-size:200%;border:none;background:none;color:#fff}.pdaFooterButton:hover{background:#507aac}.pdaFooterButton.disabled{background:none!important;color:#555!important}.pdaFooterButton .uiLinkPendingIcon{position:absolute;width:33%;background-repeat:no-repeat;background-position:center}.dnaBlock{float:left;width:90px;padding:0 0 5px}.dnaBlockNumber{color:#fff;background:#363636;min-width:20px}.dnaBlockNumber,.dnaSubBlock{font-family:Fixed,monospace;float:left;height:20px;padding:0;text-align:center}.dnaSubBlock{min-width:16px}.mask{position:fixed;left:0;top:0;width:100%;height:100%;background:url(uiMaskBackground.png)}.maskContent{width:100%;height:200px;margin:200px 0;text-align:center}body{background:#272727;color:#fff;font-family:Verdana,Geneva,sans-serif;font-size:12px;line-height:170%;margin:0;padding:0}hr{background-color:#40628a;height:1px;border:none}a img,img{border-style:none}h1,h2,h3,h4,h5,h6{margin:0;padding:12px 0 6px;color:#fff;clear:both}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff000000',GradientType=0)}#uiWrapper{width:100%;height:100%;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}#uiTitleWrapper{position:relative;height:30px}#uiTitleText{position:absolute;top:6px;left:44px;width:66%;overflow:hidden;color:#e9c183;font-size:16px}#uiTitle.icon{padding:6px 8px 6px 42px;background-position:2px 50%;background-repeat:no-repeat}#uiTitleFluff{position:absolute;top:4px;right:12px;width:42px;height:24px;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") 50% 50% no-repeat}.statusicon{position:absolute;top:4px;left:12px}#uiMapWrapper{clear:both;padding:8px}#uiMapHeader{position:relative;clear:both}#uiMapContainer{position:relative;width:100%;height:600px;overflow:hidden;border:1px solid #40628a;background:url(nanomapBackground.png)}#uiMap{top:50%;left:50%;margin:-512px 0 0 -512px;overflow:hidden;zoom:4}#uiMap,#uiMapImage{position:absolute;width:256px;height:256px}#uiMapImage{bottom:1px;left:1px}#uiMapContent{position:absolute;bottom:-13.5px;left:0;width:256px;height:256px}#uiMapFooter{position:relative;clear:both}#uiContent{clear:both;padding:8px}#uiMapTooltip{position:absolute;right:10px;top:10px;border:1px solid #40628a;background-color:#272727;padding:8px;display:none;z-index:1}#uiLoadingNotice{position:relative;background:url(uiNoticeBackground.jpg) 50% 50%;color:#000;font-size:14px;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0} \ No newline at end of file diff --git a/nano/scripts/nano/nano_state_pda.js b/nano/scripts/nano/nano_state_pda.js new file mode 100644 index 00000000000..6277d5669e0 --- /dev/null +++ b/nano/scripts/nano/nano_state_pda.js @@ -0,0 +1,57 @@ +NanoStatePDAClass.inheritsFrom(NanoStateClass); +var NanoStatePDA = new NanoStatePDAClass(); +var pda_app_template = null; + +function NanoStatePDAClass() { + this.key = 'pda'; + this.key = this.key.toLowerCase(); + + NanoStateManager.addState(this); +} + +NanoStatePDAClass.prototype.onUpdate = function(data) { + NanoStateClass.prototype.onUpdate.call(this, data); + + try { + if(data['data']['app'] != null) { + var template = data['data']['app']['template']; + if(template != null && template != pda_app_template) { + $.when($.ajax({ + url: template + '.tmpl', + cache: false, + dataType: 'text' + })) + .done(function(templateMarkup) { + templateMarkup += '
'; + + try { + NanoTemplate.addTemplate('app', templateMarkup); + NanoTemplate.resetTemplate('app'); + $("#uiApp").html(NanoTemplate.parse('app', data)); + pda_app_template = template; + + if(data['config']['status'] == 2) { + $('#uiApp .linkActive').addClass('linkPending'); + $('#uiApp .linkActive').oneTime(300, 'linkPending', function () { + $('#uiApp .linkActive').removeClass('linkPending inactive'); + }); + } + } catch(error) { + reportError('ERROR: An error occurred while loading the UI: ' + error.message); + return; + } + }) + .fail( function () { + reportError('ERROR: Loading template app(' + template + ') failed!'); + }); + } else { + if (NanoTemplate.templateExists('app')) { + $("#uiApp").html(NanoTemplate.parse('app', data)); + } + } + } + } catch(error) { + reportError('ERROR: An error occurred while rendering the UI: ' + error.message); + return; + } +} \ No newline at end of file diff --git a/nano/scripts/nano/nano_template.js b/nano/scripts/nano/nano_template.js index 7350e62d48d..e37724f1bb4 100644 --- a/nano/scripts/nano/nano_template.js +++ b/nano/scripts/nano/nano_template.js @@ -87,6 +87,9 @@ var NanoTemplate = function () { templateExists: function (key) { return _templates.hasOwnProperty(key); }, + resetTemplate: function (key) { + _compiledTemplates[key] = null; + }, parse: function (templateKey, data) { if (!_compiledTemplates.hasOwnProperty(templateKey) || !_compiledTemplates[templateKey]) { if (!_templates.hasOwnProperty(templateKey)) { diff --git a/nano/styles/_color.less b/nano/styles/_color.less index 6194a96ac2b..68fc1d89c5b 100644 --- a/nano/styles/_color.less +++ b/nano/styles/_color.less @@ -1,9 +1,4 @@ -@good-color: #4f7529; -@average-color: #cd6500; -@bad-color: #ee0000; - -@highlight-color: #8BA5C4; -@dark-color: #272727; +@import "_config"; .white { color: white; diff --git a/nano/styles/_config.less b/nano/styles/_config.less index a44ef50fd54..dffcc37331c 100644 --- a/nano/styles/_config.less +++ b/nano/styles/_config.less @@ -4,4 +4,12 @@ // Body Colors @background-start: #2a2a2a; -@background-end: #202020; \ No newline at end of file +@background-end: #202020; + +// Element Colors +@good-color: #4f7529; +@average-color: #cd6500; +@bad-color: #ee0000; + +@highlight-color: #8BA5C4; +@dark-color: #272727; \ No newline at end of file diff --git a/nano/styles/_misc.less b/nano/styles/_misc.less index 55f8216b3b6..fe7646062b2 100644 --- a/nano/styles/_misc.less +++ b/nano/styles/_misc.less @@ -74,6 +74,14 @@ div.notice { .pdalink { float: left; white-space: nowrap; + cursor: default !important; + + &.disabled { + background: none; + border: none; + color: #999; + text-align: left; + } } .pdanote { @@ -81,6 +89,50 @@ div.notice { font-weight: bold; } +.item.mainmenu { + padding-bottom: 0.5em; +} + +div.clock { + color: white; + font-weight: bold; + float: right; + padding-right: 2em; +} + +#pdaFooter { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + background: @dark-color; +} + +.pdaFooterButton { + width: 33%; + padding: 0.5em 0; + font-size: 200%; + border: none; + background: none; + color: #fff; + + &:hover { + background: #507aac; + } + + &.disabled { + background: none !important; + color: #555 !important; + } + + .uiLinkPendingIcon { + position: absolute; + width: 33%; + background-repeat: no-repeat; + background-position: center; + } +} + /* DNA Modifier styling */ .dnaBlock { float: left; diff --git a/nano/styles/_native.less b/nano/styles/_native.less index 8114d75133c..3061b54c72c 100644 --- a/nano/styles/_native.less +++ b/nano/styles/_native.less @@ -1,7 +1,7 @@ @import "_config"; body { - background: #272727; + background: @dark-color; color: #ffffff; font-family: @font; font-size: @fontsize; diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 54ab77a9be6..3d11ee0a6f8 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -1,4 +1,3 @@ - - {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'pdalink fixedLeft')}} - {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'pdalink fixedLeftWide')}} {{/if}} - {{if data.mode != 0}} {{:helper.link('Return', 'arrow-left', {'choice' : "Return"}, null, 'pdalink fixedLeft')}} {{/if}} - {{:helper.link('Toggle R.E.T.R.O. mode', 'gear', {'choice': "Retro"}, null, 'floatRight')}} +
+ {{if data.idInserted}} + {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, null, 'pdalink fixedLeftWide')}} + {{/if}} + {{if data.cartridge_name}} + {{:helper.link(data.cartridge_name, 'eject', {'choice' : "Eject"}, null, 'pdalink fixedLeftWidest')}} + {{/if}} + {{:helper.link('Toggle R.E.T.R.O. mode', 'gear', {'choice': "Retro"}, null, 'pdalink fixedLeftWide')}} +
+
+ {{:data.stationTime}}
-
-
-
- Station Time: -
-
- {{:data.stationTime}} -
+ + {{if data.app}} +

 {{:data.app.name}}

+
+
 
+ {{/if}} + +
+ {{:helper.link("", 'undo', {'choice' : "Back"}, data.app.has_back ? null : 'disabled', 'link pdaFooterButton')}} + {{:helper.link("", 'home', {'choice' : "Home"}, data.app.is_home ? 'disabled' : null, 'link pdaFooterButton')}}
-
- - - {{if data.mode == 0}} -
-
- Owner: -
-
- {{:data.owner}}, {{:data.ownjob}} -
-
-
-
-
- ID: -
-
- {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'link fixedLeftWidest' : 'link fixedLeft')}} -
-
-
-
-
- Cartridge: -
-
- {{if data.cart_loaded==1}} - {{:helper.link(data.cartridge.name, 'eject', {'choice' : "Eject"},null,null)}} - {{else}} - {{:helper.link('None', 'eject', {'choice' : "Eject"},'disabled',null)}} - {{/if}} -
-
-
-

Functions

-
-
-
- General: -
-
- {{:helper.link('Notekeeper', 'sticky-note', {'choice' : "1"}, null, 'pdalink fixedLeftWide')}} - {{:helper.link('Messenger', data.newMessage ? 'envelope' : 'envelope-o', {'choice' : "2"}, null, 'pdalink fixedLeftWide')}} - {{:helper.link('Crew Manifest', 'user', {'choice' : "41"}, null, 'pdalink fixedLeftWide')}} -
-
-
- {{if data.cartridge}} - {{if data.cartridge.access.access_clown == 1}} -
-
- Clown: -
-
- {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'pdalink fixedLeftWide')}} -
-
-
- {{/if}} - {{if data.cartridge.access.access_engine == 1}} -
-
- Engineering: -
-
- {{:helper.link('Power Monitor', 'exclamation-triangle', {'choice' : "43"}, null, 'pdalink fixedLeftWide')}} -
-
-
- {{/if}} - {{if data.cartridge.access.access_medical == 1}} -
-
- Medical: -
-
- {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'pdalink fixedLeftWide')}} - {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'pdalink fixedLeftWide')}} -
-
-
- {{/if}} - {{if data.cartridge.access.access_security == 1}} -
-
- Security: -
-
- {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'pdalink fixedLeftWide')}} - {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'pdalink fixedLeftWide')}} {{/if}} -
-
-
-
- {{/if}} - {{if data.cartridge.access.access_quartermaster == 1}} -
-
- Quartermaster: -
-
- {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'pdalink fixedLeftWide')}} - {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'pdalink fixedLeftWide')}} {{/if}} -
-
-
-
- {{/if}} - {{/if}} -
-
-
- Utilities: -
-
- {{if data.cartridge}} - {{if data.cartridge.access.access_status_display == 1}} - {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'pdalink fixedLeftWide')}} - {{/if}} - {{if data.cartridge.access.access_janitor==1}} - {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'pdalink fixedLeftWide')}} - {{/if}} - {{if data.cartridge.radio == 2}} - {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'pdalink fixedLeftWide')}} - {{/if}} - {{if data.cartridge.access.access_reagent_scanner==1}} - {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'pdalink fixedLeftWider')}} - {{/if}} - {{if data.cartridge.access.access_engine==1}} - {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'pdalink fixedLeftWider')}} - {{/if}} - {{if data.cartridge.access.access_atmos==1}} - {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'pdalink fixedLeftWide')}} - {{/if}} - {{if data.cartridge.access.access_remote_door==1}} - {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'pdalink fixedLeftWide')}} - {{/if}} - {{/if}} - {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'pdalink fixedLeftWide')}} - {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb-o', {'choice' : "Light"}, null,'pdalink fixedLeftWide')}} -
-
- {{if data.pai}} -
-
- PAI Utilities: -
-
- {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'pdalink fixedLeft')}} - {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'pdalink fixedLeft')}} -
-
- {{/if}} - - - {{else data.mode == 1}} -
-
- Notes: -
-
-
-
-
- {{:data.note}} -
-
-
-
-
- {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'pdalink fixedLeft')}} -
-
- - - {{else data.mode == 2}} -

SpaceMessenger V4.0.1

-
-
- Messenger Functions: -
-
- {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-up', {'choice' : "Toggle Ringer"}, null, 'pdalink fixedLeftWide')}} - {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'pdalink fixedLeftWide')}} - {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'pdalink fixedLeftWide')}} - {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'pdalink fixedLeftWider')}} -
-
- {{if data.toff == 0}} -

- {{if data.cartridge}} - {{if data.cartridge.charges}} -
- {{:data.cartridge.charges}} - {{if data.cartridge.access.access_detonate_pda}} detonation charges left. {{/if}} - {{if data.cartridge.access.access_clown || data.cartridge.access.access_mime}} viral files left. {{/if}} - -

-
- {{/if}} - {{/if}} - - {{if data.pda_count == 0}} - No other PDAS located - {{else}} -

Current Conversations

- {{for data.convopdas}} -
- {{:helper.link(value.Name, 'arrow-circle-down', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, 'pdalink')}} - {{if data.cartridge}} - {{if data.cartridge.access.access_detonate_pda && value.Detonate}} - {{:helper.link('*Detonate*', 'exclamation-circle', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} - {{/if}} - {{if data.cartridge.access.access_clown}} - {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} - {{/if}} - {{if data.cartridge.access.access_mime}} - {{:helper.link('*Send Virus*', 'arrow-circle-down', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} - {{/if}} - {{/if}} -
- {{/for}} -

Other PDAs

- {{for data.pdas}} -
- {{:helper.link(value.Name, 'arrow-circle-down', {'choice' : "Message", 'target' : value.Reference}, null, 'pdalink')}} - {{if data.cartridge}} - {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'exclamation-circle', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} - {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} - {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'arrow-circle-down', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} - {{/if}} -
- {{/for}} - {{/if}} - {{/if}} - - - {{else data.mode == 21}} -

SpaceMessenger V4.0.1

-
-
- Messenger Functions: -
-
- {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'pdalink fixedLeftWide')}} -
-
-
-
-

Conversation with: {{:data.convo_name}} ({{:data.convo_job}})

-
-
-
- {{for data.messages}} - {{if data.active_conversation == value.target}} - {{if value.sent==0}} - Them: {{:value.message}}
- {{else}} - You: {{:value.message}}
- {{/if}} - {{/if}} - {{/for}} -
-
-
- {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'pdalink fixedLeft')}} - - - {{else data.mode== 41}} -
-
- {{if data.manifest.heads}} - - {{for data.manifest["heads"]}} - {{if value.rank == "Captain"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.sec}} - - {{for data.manifest["sec"]}} - {{if value.rank == "Head of Security"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.eng}} - - {{for data.manifest["eng"]}} - {{if value.rank == "Chief Engineer"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.med}} - - {{for data.manifest["med"]}} - {{if value.rank == "Chief Medical Officer"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.sci}} - - {{for data.manifest["sci"]}} - {{if value.rank == "Research Director"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.ser}} - - {{for data.manifest["ser"]}} - {{if value.rank == "Head of Personnel"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.sup}} - - {{for data.manifest["sup"]}} - {{if value.rank == "Head of Personnel"}} - - {{else value.rank == "Quartermaster"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.civ}} - - {{for data.manifest["civ"]}} - {{if value.rank == "Head of Personnel"}} - - {{else}} - - {{/if}} - {{/for}} - {{/if}} - {{if data.manifest.misc}} - - {{for data.manifest["misc"]}} - - {{/for}} - {{/if}} -
Command
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Security
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Engineering
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Medical
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Science
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Service
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Supply
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Civilian
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Misc
{{:value.name}}{{:value.rank}}{{:value.active}}
-
- - - {{else data.mode == 3}} -

Atmospheric Scan

-
-
- {{if data.aircontents.reading == 1}} -
- Pressure: -
-
- {{:helper.string('{1} kPa', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good' , data.aircontents.pressure)}} -
-
- Temperature: -
-
- {{:helper.string('{1} °C', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , data.aircontents.temp)}} -
-
-
- Oxygen: -
-
- {{:helper.string('{1}%', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good' , data.aircontents.oxygen)}} -
-
- Nitrogen: -
-
- {{:helper.string('{1}%', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good' , data.aircontents.nitrogen)}} -
-
- Carbon Dioxide: -
-
- {{:helper.string('{1}%', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , data.aircontents.carbon_dioxide)}} -
-
- Plasma: -
-
- {{:helper.string('{1}%', data.aircontents.plasma > 0 ? 'bad' : 'good' , data.aircontents.plasma)}} - -
- {{if data.aircontents.other > 0}} -
- Unknown: -
-
- {{:data.aircontents.other}}% -
- {{/if}} - {{else}} -
- Unable to get air reading -
- {{/if}} -
-
- - - {{else data.mode == 40}} -

Remote Signaling System

-
-
- Frequency: -
-
- {{:data.records.signal_freq}} -
-   - {{:helper.link('-1', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "-10"}, null, null)}}  - {{:helper.link('-.2', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "-2"}, null, null)}}  - - {{:helper.link('+.2', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "2"}, null, null)}}  - {{:helper.link('+1', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "10"}, null, null)}} -
-
-
-
-
-
- Code: -
-
- - {{:data.records.signal_code}}
-
- {{:helper.link('-5', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "-5"}, null, null)}} - {{:helper.link('-1', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "-1"}, null, null)}} - {{:helper.link('+1', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "1"}, null, null)}} - {{:helper.link('+5', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "5"}, null, null)}} -
-
-
- {{:helper.link('Send Signal', 'exclamation-circle', {'cartmenu' : "1", 'choice' : "Send Signal"}, null, null)}} -
- - - {{else data.mode == 42}} -

Station Status Displays Interlink

-
-
- Code: -
-
- {{:helper.link('Clear', 'trash', {'cartmenu' : "1", 'choice' : "Status", 'statdisp' : "blank"}, null, null)}} - {{:helper.link('Shuttle ETA', 'gear', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "shuttle"}, null, null)}} - {{:helper.link('Message', 'gear', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "message"}, null, null)}} -
-
-
-
-
- Message line 1 -
-
- {{:helper.link(data.records.message1 + ' (set)', 'pencil', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "setmsg1"}, null, null)}} -
-
-
-
- Message line 2 -
-
- {{:helper.link(data.records.message2 + ' (set)', 'pencil', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "setmsg2"}, null, null)}} -
-
- -
-
-
- ALERT!: -
-
- {{:helper.link('None', 'bell', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'exclamation-triangle' : "default"}, null, null)}} - {{:helper.link('Red Alert', 'bell', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'exclamation-triangle' : "redalert"}, null, null)}} - {{:helper.link('Lockdown', 'exclamation-circle', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'exclamation-triangle' : "lockdown"}, null, null)}} - {{:helper.link('Biohazard', 'exclamation-circle', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'exclamation-triangle' : "biohazard"}, null, null)}} -
-
- - - {{else data.mode == 43}} -

Station Power Monitors

-
- Select a power monitor: -
- {{for data.records.powermonitors}} -
- {{:helper.link(value.Name, 'exclamation-circle', {'cartmenu' : "1", 'choice' : "Power Select",'target' : value.ref}, null, null)}} -
- {{/for}} - - - {{else data.mode == 433}} -

Powernet Status

- {{if data.records.powerconnected == 1}} -
-
- Total Power: -
-
- {{:data.records.poweravail}} W -
-
-
-
- Total Load: -
-
- {{:data.records.powerload}} W -
-
-
-
- Total Demand: -
-
- {{:data.records.powerdemand}} W -
-
-
- - - {{for data.records.apcs}} - - {{:helper.string('', value.Equipment == "On" || value.Equipment == "AOn" ? '#4f7529' : '#8f1414', value.Equipment)}} - {{:helper.string('', value.Lights == "On" || value.Lights == "AOn" ? '#4f7529' : '#8f1414', value.Lights)}} - {{:helper.string('', value.Environment == "On" || value.Environment == "AOn" ? '#4f7529' : '#8f1414', value.Environment)}} - {{:helper.string('', value.CellStatus == "F" ? '#4f7529' : value.CellStatus == "C" ? '#cd6500' : '#8f1414', value.CellStatus == "M" ? 'No Cell' : value.CellPct + '%', value.CellStatus == "M" ? '' : ' (' + value.CellStatus + ')')}} - - - {{/for}} -
AreaEquip.LightingEnviron.CellLoad
{{:value.Name}}{1}{1}{1}{1}{2}{{:value.Load}}W
-
- {{else}} - Power monitor not connected to net. - {{/if}} - - - - {{else data.mode == 44}} -

Medical Record List

-
- Select A record -
-
- {{for data.records.medical_records}} -
- {{:helper.link(value.Name, 'gear', {'cartmenu' : "1", 'choice' : "Medical Records",'target' : value.ref}, null, null)}} -
- {{/for}} - - - {{else data.mode == 441}} -

Medical Record

-
-
-
- {{if data.records.general_exists == 1}} - Name: {{:data.records.general.name}}
- Sex: {{:data.records.general.sex}}
- Species: {{:data.records.general.species}}
- Age: {{:data.records.general.age}}
- Rank: {{:data.records.general.rank}}
- Fingerprint: {{:data.records.general.fingerprint}}
- Physical Status: {{:data.records.general.p_stat}}
- Mental Status: {{:data.records.general.m_stat}}

- {{else}} - - General Record Lost!

-
- {{/if}} - {{if data.records.medical_exists == 1}} - Medical Data:
- Blood Type: {{:data.records.medical.b_type}}

- Minor Disabilities: {{:data.records.medical.mi_dis}}
- Details: {{:data.records.medical.mi_dis_d}}

- Major Disabilities: {{:data.records.medical.ma_dis}}
- Details: {{:data.records.medical.ma_dis_d}}

- Allergies: {{:data.records.medical.alg}}
- Details: {{:data.records.medical.alg_d}}

- Current Disease: {{:data.records.medical.cdi}}
- Details: {{:data.records.medical.alg_d}}

- Important Notes: {{:data.records.medical.notes}} - {{else}} - - Medical Record Lost! -
-
-
- {{/if}} -
-
-
- - - {{else data.mode == 45}} -

Security Record List

-
- Select A record -
-
- {{for data.records.security_records}} -
- {{:helper.link(value.Name, 'gear', {'cartmenu' : "1", 'choice' : "Security Records",'target' : value.ref}, null, null)}} -
- {{/for}} - - - {{else data.mode == 451}} -

Security Record

-
-
-
- {{if data.records.general_exists == 1}} - Name: {{:data.records.general.name}}
- Sex: {{:data.records.general.sex}}
- Species: {{:data.records.general.species}}
- Age: {{:data.records.general.age}}
- Rank: {{:data.records.general.rank}}
- Fingerprint: {{:data.records.general.fingerprint}}
- Physical Status: {{:data.records.general.p_stat}}
- Mental Status: {{:data.records.general.m_stat}}

- {{else}} - - General Record Lost!

-
- {{/if}} - {{if data.records.security_exists == 1}} - Security Data:
- Criminal Status: {{:data.records.security.criminal}}

- Minor Crimes: {{:data.records.security.mi_crim}}
- Details: {{:data.records.security.mi_crim_d}}

- Major Crimes: {{:data.records.security.ma_crim}}
- Details: {{:data.records.security.ma_crim_d}}

- Important Notes: {{:data.records.security.notes}} - {{else}} - - Security Record Lost!

-
- {{/if}} -
-
-
- - - {{else data.mode == 46}} -

Security Bot Control

- {{if data.records.beepsky.active == null || data.records.beepsky.active == 0}} - {{if data.records.beepsky.count == 0}} -

No bots found.

- {{else}} -
- Select A Bot. -
-
- {{for data.records.beepsky.bots}} -
- {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, null)}} (Location: {{:value.Location}}) -
- {{/for}} - {{/if}} -
- {{:helper.link('Scan for Bots','gear', {'radiomenu' : "1", 'op' : "scanbots"}, null, null)}} - {{else}} -

{{:data.records.beepsky.active}}

-

- {{if data.records.beepsky.botstatus.mode == -1}} -

Waiting for response...

- {{else}} -

Status:

-
-
-
- Location: -
-
- {{:data.records.beepsky.botstatus.loca}} -
-
-
-
- Mode: -
-
- - {{if data.records.beepsky.botstatus.mode ==0}} - Ready - {{else data.records.beepsky.botstatus.mode == 1}} - Apprehending target - {{else data.records.beepsky.botstatus.mode ==2 || data.records.beepsky.botstatus.mode == 3}} - Arresting target - {{else data.records.beepsky.botstatus.mode ==4}} - Starting patrol - {{else data.records.beepsky.botstatus.mode ==5}} - On Patrol - {{else data.records.beepsky.botstatus.mode ==6}} - Responding to summons - {{/if}} - -
-
-
- {{:helper.link('Stop Patrol', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, null)}} - {{:helper.link('Start Patrol', 'gear', {'radiomenu' : "1", 'op' : "go"}, null, null)}} - {{:helper.link('Summon Bot', 'gear', {'radiomenu' : "1", 'op' : "summon"}, null, null)}} -
- {{/if}} - {{:helper.link('Return to Bot list', 'gear', {'radiomenu' : "1", 'op' : "botlist"}, null, null)}} - {{/if}} - - - {{else data.mode == 47}} -

Supply Record Interlink

-
-
- Location: -
-
- - {{if data.records.supply.shuttle_moving}} - Moving to {{:data.records.supply.shuttle_loc}} - {{else}} - Shuttle at {{:data.records.supply.shuttle_loc}} - {{/if}} -
- {{:data.records.supply.shuttle_time}} -
-
-
-
-
-
- Current Approved Orders
- {{if data.records.supply.approved_count == 0}} - No current approved orders

- {{else}} - {{for data.records.supply.approved}} - #{{:value.Number}} - {{:value.Name}} approved by {{:value.OrderedBy}}
{{if value.Comment != ""}} {{:value.Comment}}
{{/if}}
- {{/for}} - {{/if}} -

- Current Requested Orders
- {{if data.records.supply.requests_count == 0}} - No current requested orders

- {{else}} - {{for data.records.supply.requests}} - #{{:value.Number}} - {{:value.Name}} requested by {{:value.OrderedBy}}
{{if value.Comment != ""}} {{:value.Comment}}
{{/if}}
- {{/for}} - {{/if}} -
-
-
- - - {{else data.mode == 48}} -

Mule Control

- {{if data.records.mulebot.active == null || data.records.mulebot.active == 0}} - {{if data.records.mulebot.count == 0}} -

No bots found.

- {{else}} -

Mule List

-
- Select A Mulebot -
-
- {{for data.records.mulebot.bots}} -
- {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, null)}} (Location: {{:value.Location}}) -
- {{/for}} - {{/if}} -
- {{:helper.link('Scan for Bots','gear', {'radiomenu' : "1", 'op' : "scanbots"}, null, null)}} - {{else}} - {{if data.records.mulebot.botstatus.mode == -1}} -

Waiting for response...

- {{else}} -

Status:

-
-
-
- Location: -
-
- {{:data.records.mulebot.botstatus.loca}} -
-
-
-
- Mode: -
-
- - {{if data.records.mulebot.botstatus.mode ==0}} - Ready - {{else data.records.mulebot.botstatus.mode == 1}} - Loading/Unloading - {{else data.records.mulebot.botstatus.mode ==2}} - Navigating to Delivery Location - {{else data.records.mulebot.botstatus.mode == 3}} - Navigating to Home - {{else data.records.mulebot.botstatus.mode ==4}} - Waiting for Clear Path - {{else data.records.mulebot.botstatus.mode ==5 || data.records.mulebot.botstatus.mode == 6}} - Calculating navigation Path - {{else data.records.mulebot.botstatus.mode ==7}} - Unable to locate destination - {{/if}} - -
-
-
-
- Current Load: -
-
- - {{:helper.link(data.records.mulebot.botstatus.load == null ? 'None (Unload)' : data.records.mulebot.botstatus.load + ' (Unload)', 'gear', {'radiomenu' : "1", 'op' : "unload"},data.records.mulebot.botstatus.load == null ? 'disabled' : null, null)}} - -
-
-
-
- Power: -
-
- - {{:data.records.mulebot.botstatus.powr}}% - -
-
-
-
- Destination: -
-
- {{:helper.link(data.records.mulebot.botstatus.dest == null || data.records.mulebot.botstatus.dest == "" ? 'None (Set)': data.records.mulebot.botstatus.dest+ ' (Set)', 'gear', {'radiomenu' : "1", 'op' : "setdest"}, null, null)}} -
-
-
-
- Home: -
-
- {{if data.records.mulebot.botstatus.home == null}} None {{else}} {{:data.records.mulebot.botstatus.home}} {{/if}} -
-
-
-
- Auto Return: -
-
- {{:helper.link(data.records.mulebot.botstatus.retn == 1 ? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : data.records.mulebot.botstatus.retn==1 ? "retoff" : "reton"}, null, null)}} -
-
-
-
- Auto Pickup: -
-
- {{:helper.link(data.records.mulebot.botstatus.pick==1? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : data.records.mulebot.botstatus.pick==1 ? "pickoff" : "pickon"}, null, null)}} -
-
-
-
- Functions: -
-
- {{:helper.link('Stop', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, null)}} - {{:helper.link('Proceed', 'gear', {'radiomenu' : "1", 'op' : "go"}, null, null)}} - {{:helper.link('Return Home', 'gear', {'radiomenu' : "1", 'op' : "home"}, null, null)}} -
-
-

- {{:helper.link('Return to Bot list', 'gear', {'radiomenu' : "1", 'op' : "botlist"}, null, null)}} - {{/if}} - {{/if}} - - - {{else data.mode == 49}} -

Janatorial Supplies Locator

-
- Current Location: - {{if data.records.janitor.user_loc.x == 0}} - Unknown - {{else}} - {{:data.records.janitor.user_loc.x}} / {{:data.records.janitor.user_loc.y}} - {{/if}} -
-
- {{for data.records.janitor.mops}} - {{if value.x==0}} - Unable to locate Mop - {{else}} - Mop Location: - ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
- {{/if}} - {{/for}} -
-
- {{for data.records.janitor.buckets}} - {{if value.x==0}} - Unable to locate Water Buckets - {{else}} - Water Buckets Location: - ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Water Level: {{:value.status}}
- {{/if}} - {{/for}} -
-
- {{for data.records.janitor.cleanbots}} - {{if value.x==0}} - Unable to locate Clean Bots - {{else}} - Clean Bots Location: - ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
- {{/if}} - {{/for}} -
-
- {{for data.records.janitor.carts}} - {{if value.x==0}} - Unable to locate Janitorial Cart - {{else}} - Janitorial cart Location: - ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
- {{/if}} - {{/for}} -
- {{/if}} {{else}}







No Owner information found, please swipe ID
-{{/if}} - +{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_atmos_scan.tmpl b/nano/templates/pda_atmos_scan.tmpl new file mode 100644 index 00000000000..80fa3838995 --- /dev/null +++ b/nano/templates/pda_atmos_scan.tmpl @@ -0,0 +1,60 @@ + +
+
+ {{if data.aircontents.reading == 1}} +
+ Pressure: +
+
+ {{:helper.string('{1} kPa', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good' , data.aircontents.pressure)}} +
+
+ Temperature: +
+
+ {{:helper.string('{1} °C', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , data.aircontents.temp)}} +
+
+
+ Oxygen: +
+
+ {{:helper.string('{1}%', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good' , data.aircontents.oxygen)}} +
+
+ Nitrogen: +
+
+ {{:helper.string('{1}%', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good' , data.aircontents.nitrogen)}} +
+
+ Carbon Dioxide: +
+
+ {{:helper.string('{1}%', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , data.aircontents.carbon_dioxide)}} +
+
+ Plasma: +
+
+ {{:helper.string('{1}%', data.aircontents.plasma > 0 ? 'bad' : 'good' , data.aircontents.plasma)}} + +
+ {{if data.aircontents.other > 0}} +
+ Unknown: +
+
+ {{:data.aircontents.other}}% +
+ {{/if}} + {{else}} +
+ Unable to get air reading +
+ {{/if}} +
+
\ No newline at end of file diff --git a/nano/templates/pda_janitor.tmpl b/nano/templates/pda_janitor.tmpl new file mode 100644 index 00000000000..a2fd282ad3f --- /dev/null +++ b/nano/templates/pda_janitor.tmpl @@ -0,0 +1,50 @@ +
+
+ Current Location: + {{if data.janitor.user_loc.x == 0}} + Unknown + {{else}} + {{:data.janitor.user_loc.x}} / {{:data.janitor.user_loc.y}} + {{/if}} +
+
+ {{for data.janitor.mops}} + {{if value.x==0}} + Unable to locate Mop + {{else}} + Mop Location: + ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
+ {{/if}} + {{/for}} +
+
+ {{for data.janitor.buckets}} + {{if value.x==0}} + Unable to locate Water Buckets + {{else}} + Water Buckets Location: + ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Water Level: {{:value.status}}
+ {{/if}} + {{/for}} +
+
+ {{for data.janitor.cleanbots}} + {{if value.x==0}} + Unable to locate Clean Bots + {{else}} + Clean Bots Location: + ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
+ {{/if}} + {{/for}} +
+
+ {{for data.janitor.carts}} + {{if value.x==0}} + Unable to locate Janitorial Cart + {{else}} + Janitorial cart Location: + ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
+ {{/if}} + {{/for}} +
+
\ No newline at end of file diff --git a/nano/templates/pda_main_menu.tmpl b/nano/templates/pda_main_menu.tmpl new file mode 100644 index 00000000000..680e4a8fa75 --- /dev/null +++ b/nano/templates/pda_main_menu.tmpl @@ -0,0 +1,48 @@ + +
+
+ Owner: +
+
+ {{:data.owner}}, {{:data.ownjob}} +
+
+
+
+ ID: +
+
+ {{:helper.link('Update PDA Info', 'refresh', {'choice' : "UpdateInfo"}, data.idInserted ? null : 'disabled', 'pdalink fixedLeftWide')}} +
+
+ +
+

Functions

+
+{{for data.categories : cat : i}} + +{{/for}} + +{{if data.pai}} +
+
+ PAI Utilities: +
+
+ {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'pdalink fixedLeft')}} + {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'pdalink fixedLeft')}} +
+
+{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_manifest.tmpl b/nano/templates/pda_manifest.tmpl new file mode 100644 index 00000000000..ef9e91a088f --- /dev/null +++ b/nano/templates/pda_manifest.tmpl @@ -0,0 +1,96 @@ + +
+
+ {{if data.manifest.heads}} + + {{for data.manifest["heads"]}} + {{if value.rank == "Captain"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.sec}} + + {{for data.manifest["sec"]}} + {{if value.rank == "Head of Security"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.eng}} + + {{for data.manifest["eng"]}} + {{if value.rank == "Chief Engineer"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.med}} + + {{for data.manifest["med"]}} + {{if value.rank == "Chief Medical Officer"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.sci}} + + {{for data.manifest["sci"]}} + {{if value.rank == "Research Director"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.ser}} + + {{for data.manifest["ser"]}} + {{if value.rank == "Head of Personnel"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.sup}} + + {{for data.manifest["sup"]}} + {{if value.rank == "Head of Personnel"}} + + {{else value.rank == "Quartermaster"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.civ}} + + {{for data.manifest["civ"]}} + {{if value.rank == "Head of Personnel"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {{if data.manifest.misc}} + + {{for data.manifest["misc"]}} + + {{/for}} + {{/if}} +
Command
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Security
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Engineering
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Medical
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Science
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Service
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Supply
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Civilian
{{:value.name}}{{:value.rank}}{{:value.active}}
{{:value.name}}{{:value.rank}}{{:value.active}}
Misc
{{:value.name}}{{:value.rank}}{{:value.active}}
+
\ No newline at end of file diff --git a/nano/templates/pda_medical.tmpl b/nano/templates/pda_medical.tmpl new file mode 100644 index 00000000000..777fb91f4b8 --- /dev/null +++ b/nano/templates/pda_medical.tmpl @@ -0,0 +1,54 @@ +{{if !data.records}} +
+
Select a record:
+
+ {{for data.recordsList}} +
+ {{:helper.link(value.Name, 'user', {'choice' : "Records", 'target' : value.ref}, null, 'pdalink fixedLeftWidest')}} +
+ {{empty}} +
+ No records found. +
+ {{/for}} +{{else}} +
+
+
+ {{if data.records.general}} + Name: {{:data.records.general.name}}
+ Sex: {{:data.records.general.sex}}
+ Species: {{:data.records.general.species}}
+ Age: {{:data.records.general.age}}
+ Rank: {{:data.records.general.rank}}
+ Fingerprint: {{:data.records.general.fingerprint}}
+ Physical Status: {{:data.records.general.p_stat}}
+ Mental Status: {{:data.records.general.m_stat}}

+ {{else}} + + General Record Lost!

+
+ {{/if}} + {{if data.records.medical}} +
+
Medical Data:
+
+ Blood Type: {{:data.records.medical.b_type}}

+ Minor Disabilities: {{:data.records.medical.mi_dis}}
+ Details: {{:data.records.medical.mi_dis_d}}

+ Major Disabilities: {{:data.records.medical.ma_dis}}
+ Details: {{:data.records.medical.ma_dis_d}}

+ Allergies: {{:data.records.medical.alg}}
+ Details: {{:data.records.medical.alg_d}}

+ Current Disease: {{:data.records.medical.cdi}}
+ Details: {{:data.records.medical.alg_d}}

+ Important Notes: {{:data.records.medical.notes}} + {{else}} + + Medical Record Lost! + + {{/if}} +
+
+
+{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_messenger.tmpl b/nano/templates/pda_messenger.tmpl new file mode 100644 index 00000000000..633ae7d4691 --- /dev/null +++ b/nano/templates/pda_messenger.tmpl @@ -0,0 +1,81 @@ + +{{if data.active_conversation}} +
+
+ Messenger Functions: +
+
+ {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'pdalink fixedLeftWide')}} +
+
+
+
+

Conversation with: {{:data.convo_name}} ({{:data.convo_job}})

+
+
+
+ {{for data.messages}} + {{if data.active_conversation == value.target}} + {{if value.sent==0}} + Them: {{:value.message}}
+ {{else}} + You: {{:value.message}}
+ {{/if}} + {{/if}} + {{/for}} +
+
+
+ {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'pdalink fixedLeft')}} +{{else}} +
+
+ Messenger Functions: +
+
+ {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-up', {'choice' : "Toggle Ringer"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'pdalink fixedLeftWider')}} +
+
+ {{if data.toff == 0}} +
+ {{if data.charges}} +
+ {{:data.charges}} charges left. +

+
+ {{/if}} + + {{if data.pda_count == 0}} + No other PDAS located + {{else}} +

Current Conversations

+ {{for data.convopdas}} +
+ {{:helper.link(value.Name, 'arrow-circle-down', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, 'pdalink')}} + {{if data.charges}} + {{for data.plugins : plugin : i}} + {{:helper.link(plugin.name, plugin.icon, {'choice' : "Messenger Plugin", 'plugin' : plugin.ref, 'target' : value.Reference}, null, 'pdalink fixedLeft')}} + {{/for}} + {{/if}} +
+ {{/for}} +

Other PDAs

+ {{for data.pdas}} +
+ {{:helper.link(value.Name, 'arrow-circle-down', {'choice' : "Message", 'target' : value.Reference}, null, 'pdalink')}} + {{if data.charges}} + {{for data.plugins : plugin : i}} + {{:helper.link(plugin.name, plugin.icon, {'choice' : "Messenger Plugin", 'plugin' : plugin.ref, 'target' : value.Reference}, null, 'pdalink fixedLeft')}} + {{/for}} + {{/if}} +
+ {{/for}} + {{/if}} + {{/if}} +{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_mule.tmpl b/nano/templates/pda_mule.tmpl new file mode 100644 index 00000000000..cf3c5eff6f6 --- /dev/null +++ b/nano/templates/pda_mule.tmpl @@ -0,0 +1,118 @@ +{{if !data.mulebot.active}} + {{if data.mulebot.count == 0}} +

No bots found.

+ {{else}} +
+ Select a MULE: +
+
+ {{for data.mulebot.bots}} +
+ {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, 'pdalink fixedLeftWidest')}} (Location: {{:value.Location}}) +
+ {{/for}} + {{/if}} +
+ {{:helper.link('Scan for Bots','rss', {'radiomenu' : "1", 'op' : "scanbots"}, null, 'pdalink fixedLeftWidest')}} +{{else}} +

{{:data.mulebot.active}}

+ {{if data.mulebot.botstatus.mode == -1}} +

Waiting for response...

+ {{else}} +

Status:

+
+
+ Location: +
+
+ {{:data.mulebot.botstatus.loca}} +
+
+
+
+ Mode: +
+
+ + {{if data.mulebot.botstatus.mode == 0}} + Ready + {{else data.mulebot.botstatus.mode == 1}} + Loading/Unloading + {{else data.mulebot.botstatus.mode == 2}} + Navigating to Delivery Location + {{else data.mulebot.botstatus.mode == 3}} + Navigating to Home + {{else data.mulebot.botstatus.mode == 4}} + Waiting for Clear Path + {{else data.mulebot.botstatus.mode == 5 || data.mulebot.botstatus.mode == 6}} + Calculating navigation Path + {{else data.mulebot.botstatus.mode == 7}} + Unable to locate destination + {{/if}} + +
+
+
+
+ Current Load: +
+
+ + {{:helper.link(data.mulebot.botstatus.load == null ? 'None (Unload)' : data.mulebot.botstatus.load + ' (Unload)', 'archive', {'radiomenu' : "1", 'op' : "unload"},data.mulebot.botstatus.load == null ? 'disabled' : null, 'pdalink fixedLeftWidest')}} + +
+
+
+
+ Power: +
+
+ + {{:data.mulebot.botstatus.powr}}% + +
+
+
+
+ Destination: +
+
+ {{:helper.link(data.mulebot.botstatus.dest == null || data.mulebot.botstatus.dest == "" ? 'None (Set)' : data.mulebot.botstatus.dest + ' (Set)', 'gear', {'radiomenu' : "1", 'op' : "setdest"}, null, 'pdalink fixedLeftWidest')}} +
+
+
+
+ Home: +
+
+ {{if data.mulebot.botstatus.home == null}} None {{else}} {{:data.mulebot.botstatus.home}} {{/if}} +
+
+
+
+ Auto Return: +
+
+ {{:helper.link(data.mulebot.botstatus.retn == 1 ? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : (data.mulebot.botstatus.retn==1 ? "retoff" : "reton")}, null, 'pdalink fixedLeftWidest')}} +
+
+
+
+ Auto Pickup: +
+
+ {{:helper.link(data.mulebot.botstatus.pick==1? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : (data.mulebot.botstatus.pick==1 ? "pickoff" : "pickon")}, null, 'pdalink fixedLeftWidest')}} +
+
+
+
+ Functions: +
+
+ {{:helper.link('Stop', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, 'pdalink fixedLeft')}} + {{:helper.link('Proceed', 'gear', {'radiomenu' : "1", 'op' : "go"}, null, 'pdalink fixedLeft')}} + {{:helper.link('Return Home', 'gear', {'radiomenu' : "1", 'op' : "home"}, null, 'pdalink fixedLeft')}} +
+
+ {{/if}} +{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_notekeeper.tmpl b/nano/templates/pda_notekeeper.tmpl new file mode 100644 index 00000000000..53db3be6438 --- /dev/null +++ b/nano/templates/pda_notekeeper.tmpl @@ -0,0 +1,21 @@ + +
+
+ Notes: +
+
+
+
+
+ {{:data.note}} +
+
+
+
+
+ {{:helper.link('Edit Notes', 'pencil-square-o', {'choice': "Edit"}, null, 'pdalink')}} +
+
\ No newline at end of file diff --git a/nano/templates/pda_power.tmpl b/nano/templates/pda_power.tmpl new file mode 100644 index 00000000000..7ba04188b71 --- /dev/null +++ b/nano/templates/pda_power.tmpl @@ -0,0 +1,49 @@ +{{if !data.records.powerconnected}} +
+
Select a power monitor:
+
+ {{for data.records.powermonitors}} +
+ {{:helper.link(value.Name, 'exclamation-circle', {'choice' : "Power Select", 'target' : value.ref}, null, 'pdalink fixedLeftWidest')}} +
+ {{/for}} +{{else}} +
+
+ Total Power: +
+
+ {{:data.records.poweravail}} W +
+
+
+
+ Total Load: +
+
+ {{:data.records.powerload}} W +
+
+
+
+ Total Demand: +
+
+ {{:data.records.powerdemand}} W +
+
+
+ + + {{for data.records.apcs}} + + {{:helper.string('', value.Equipment == "On" || value.Equipment == "AOn" ? '#4f7529' : '#8f1414', value.Equipment)}} + {{:helper.string('', value.Lights == "On" || value.Lights == "AOn" ? '#4f7529' : '#8f1414', value.Lights)}} + {{:helper.string('', value.Environment == "On" || value.Environment == "AOn" ? '#4f7529' : '#8f1414', value.Environment)}} + {{:helper.string('', value.CellStatus == "F" ? '#4f7529' : value.CellStatus == "C" ? '#cd6500' : '#8f1414', value.CellStatus == "M" ? 'No Cell' : value.CellPct + '%', value.CellStatus == "M" ? '' : ' (' + value.CellStatus + ')')}} + + + {{/for}} +
AreaEquip.LightingEnviron.CellLoad
{{:value.Name}}{1}{1}{1}{1}{2}{{:value.Load}}W
+
+{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_secbot.tmpl b/nano/templates/pda_secbot.tmpl new file mode 100644 index 00000000000..6ff8c98e147 --- /dev/null +++ b/nano/templates/pda_secbot.tmpl @@ -0,0 +1,59 @@ +{{if !data.beepsky.active}} + {{if data.beepsky.count == 0}} +

No bots found.

+ {{else}} +
+ Select a bot: +
+
+ {{for data.beepsky.bots}} +
+ {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, 'pdalink fixedLeftWidest')}} (Location: {{:value.Location}}) +
+ {{/for}} + {{/if}} +
+ {{:helper.link('Scan for Bots','rss', {'radiomenu' : "1", 'op' : "scanbots"}, null, 'pdalink fixedLeftWidest')}} +{{else}} +

{{:data.beepsky.active}}

+ {{if data.beepsky.botstatus.mode == -1}} +

Waiting for response...

+ {{else}} +

Status:

+
+
+ Location: +
+
+ {{:data.beepsky.botstatus.loca}} +
+
+
+
+ Mode: +
+
+ + {{if data.beepsky.botstatus.mode ==0}} + Ready + {{else data.beepsky.botstatus.mode == 1}} + Apprehending target + {{else data.beepsky.botstatus.mode ==2 || data.beepsky.botstatus.mode == 3}} + Arresting target + {{else data.beepsky.botstatus.mode ==4}} + Starting patrol + {{else data.beepsky.botstatus.mode ==5}} + On Patrol + {{else data.beepsky.botstatus.mode ==6}} + Responding to summons + {{/if}} + +
+
+
+ {{:helper.link('Stop Patrol', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Start Patrol', 'gear', {'radiomenu' : "1", 'op' : "go"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Summon Bot', 'gear', {'radiomenu' : "1", 'op' : "summon"}, null, 'pdalink fixedLeftWide')}} +
+ {{/if}} +{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_security.tmpl b/nano/templates/pda_security.tmpl new file mode 100644 index 00000000000..53d40185e05 --- /dev/null +++ b/nano/templates/pda_security.tmpl @@ -0,0 +1,50 @@ +{{if !data.records}} +
+
Select a record:
+
+ {{for data.recordsList}} +
+ {{:helper.link(value.Name, 'user', {'choice' : "Records", 'target' : value.ref}, null, 'pdalink fixedLeftWidest')}} +
+ {{empty}} +
+ No records found. +
+ {{/for}} +{{else}} +
+
+
+ {{if data.records.general}} + Name: {{:data.records.general.name}}
+ Sex: {{:data.records.general.sex}}
+ Species: {{:data.records.general.species}}
+ Age: {{:data.records.general.age}}
+ Rank: {{:data.records.general.rank}}
+ Fingerprint: {{:data.records.general.fingerprint}}
+ Physical Status: {{:data.records.general.p_stat}}
+ Mental Status: {{:data.records.general.m_stat}}

+ {{else}} + + General Record Lost!

+
+ {{/if}} + {{if data.records.security}} +
+
Security Data:
+
+ Criminal Status: {{:data.records.security.criminal}}

+ Minor Crimes: {{:data.records.security.mi_crim}}
+ Details: {{:data.records.security.mi_crim_d}}

+ Major Crimes: {{:data.records.security.ma_crim}}
+ Details: {{:data.records.security.ma_crim_d}}

+ Important Notes: {{:data.records.security.notes}} + {{else}} + + Security Record Lost!

+
+ {{/if}} +
+
+
+{{/if}} \ No newline at end of file diff --git a/nano/templates/pda_signaller.tmpl b/nano/templates/pda_signaller.tmpl new file mode 100644 index 00000000000..2b5f148b025 --- /dev/null +++ b/nano/templates/pda_signaller.tmpl @@ -0,0 +1,38 @@ + +
+
+ Frequency: +
+
+ {{:data.signal_freq}} +
+   + {{:helper.link('-1', null, {'choice' : "Signal Frequency", 'sfreq' : "-10"}, null, null)}}  + {{:helper.link('-.2', null, {'choice' : "Signal Frequency", 'sfreq' : "-2"}, null, null)}}  + + {{:helper.link('+.2', null, {'choice' : "Signal Frequency", 'sfreq' : "2"}, null, null)}}  + {{:helper.link('+1', null, {'choice' : "Signal Frequency", 'sfreq' : "10"}, null, null)}} +
+
+
+
+
+
+ Code: +
+
+ + {{:data.signal_code}}
+
+ {{:helper.link('-5', null, {'choice' : "Signal Code", 'scode' : "-5"}, null, null)}} + {{:helper.link('-1', null, {'choice' : "Signal Code", 'scode' : "-1"}, null, null)}} + {{:helper.link('+1', null, {'choice' : "Signal Code", 'scode' : "1"}, null, null)}} + {{:helper.link('+5', null, {'choice' : "Signal Code", 'scode' : "5"}, null, null)}} +
+
+
+ {{:helper.link('Send Signal', 'exclamation-circle', {'choice' : "Send Signal"}, null, null)}} +
\ No newline at end of file diff --git a/nano/templates/pda_status_display.tmpl b/nano/templates/pda_status_display.tmpl new file mode 100644 index 00000000000..8b153ad0ffd --- /dev/null +++ b/nano/templates/pda_status_display.tmpl @@ -0,0 +1,44 @@ + +
+
+ Code: +
+
+ {{:helper.link('Clear', 'trash', {'choice' : "Status", 'statdisp' : "blank"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Shuttle ETA', 'gear', {'cartmenu' : "1", 'choice' : "Status", 'statdisp' : "shuttle"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Message', 'gear', {'choice' : "Status", 'statdisp' : "message"}, null, 'pdalink fixedLeftWide')}} +
+
+
+
+
+ Message line 1 +
+
+ {{:helper.link(data.records.message1 + ' (set)', 'pencil', {'choice' : "Status", 'statdisp' : "setmsg1"}, null, 'pdalink fixedLeftWide')}} +
+
+
+
+ Message line 2 +
+
+ {{:helper.link(data.records.message2 + ' (set)', 'pencil', {'choice' : "Status", 'statdisp' : "setmsg2"}, null, 'pdalink fixedLeftWide')}} +
+
+ +
+
+
+ ALERT!: +
+
+ {{:helper.link('None', 'bell', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "default"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Red Alert', 'bell', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "redalert"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Lockdown', 'exclamation-circle', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "lockdown"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Biohazard', 'exclamation-circle', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "biohazard"}, null, 'pdalink fixedLeftWide')}} +
+
\ No newline at end of file diff --git a/nano/templates/pda_supply.tmpl b/nano/templates/pda_supply.tmpl new file mode 100644 index 00000000000..810fc193769 --- /dev/null +++ b/nano/templates/pda_supply.tmpl @@ -0,0 +1,39 @@ +
+
+ Location: +
+
+ + {{if data.supply.shuttle_moving}} + Moving to {{:data.supply.shuttle_loc}} + {{else}} + Shuttle at {{:data.supply.shuttle_loc}} + {{/if}} +
+ {{:data.supply.shuttle_time}} +
+
+
+
+
+
+ Current Approved Orders
+ {{if data.supply.approved_count == 0}} + No current approved orders

+ {{else}} + {{for data.supply.approved}} + #{{:value.Number}} - {{:value.Name}} approved by {{:value.OrderedBy}}
{{if value.Comment != ""}} {{:value.Comment}}
{{/if}}
+ {{/for}} + {{/if}} +

+ Current Requested Orders
+ {{if data.supply.requests_count == 0}} + No current requested orders

+ {{else}} + {{for data.supply.requests}} + #{{:value.Number}} - {{:value.Name}} requested by {{:value.OrderedBy}}
{{if value.Comment != ""}} {{:value.Comment}}
{{/if}}
+ {{/for}} + {{/if}} +
+
+
\ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 0b932735ca4..7f480172d9a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -31,6 +31,7 @@ #include "code\__DEFINES\math.dm" #include "code\__DEFINES\misc.dm" #include "code\__DEFINES\mob.dm" +#include "code\__DEFINES\pda.dm" #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\process_scheduler.dm" #include "code\__DEFINES\qdel.dm" @@ -672,10 +673,18 @@ #include "code\game\objects\items\devices\uplinks.dm" #include "code\game\objects\items\devices\violin.dm" #include "code\game\objects\items\devices\whistle.dm" +#include "code\game\objects\items\devices\PDA\ai.dm" +#include "code\game\objects\items\devices\PDA\app.dm" #include "code\game\objects\items\devices\PDA\cart.dm" +#include "code\game\objects\items\devices\PDA\cart_apps.dm" #include "code\game\objects\items\devices\PDA\chatroom.dm" +#include "code\game\objects\items\devices\PDA\core_apps.dm" +#include "code\game\objects\items\devices\PDA\messenger.dm" +#include "code\game\objects\items\devices\PDA\messenger_plugins.dm" #include "code\game\objects\items\devices\PDA\PDA.dm" +#include "code\game\objects\items\devices\PDA\pdas.dm" #include "code\game\objects\items\devices\PDA\radio.dm" +#include "code\game\objects\items\devices\PDA\utilities.dm" #include "code\game\objects\items\devices\radio\beacon.dm" #include "code\game\objects\items\devices\radio\electropack.dm" #include "code\game\objects\items\devices\radio\encryptionkey.dm" From 806ee1f9c35d62c0316832b3ff653c8dcbda10e4 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 12 Feb 2016 04:18:29 -0800 Subject: [PATCH 03/52] Makes it painfully obvious not to use plain old /turf/simulated/floor Probably will make some mapping look weird, but that floor doesn't behave properly - will react to crowbar, but won't actually yield tiles, for example --- code/game/turfs/simulated/floor.dm | 2 +- icons/turf/floors.dmi | Bin 337232 -> 337496 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 11167a2ee4c..b79fe0f556b 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -21,7 +21,7 @@ var/list/wood_icons = list("wood","wood-broken") /turf/simulated/floor name = "floor" icon = 'icons/turf/floors.dmi' - icon_state = "floor" + icon_state = "dont_use_this_floor" var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default var/icon_plating = "plating" diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 18dd60eb76829a52cd4d8bcade7465b2f0f0bc62..8e7e4d254544e14917eed071109958a8c2bad86f 100644 GIT binary patch delta 35328 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

$LDloRJM{`4Y^ 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 Date: Fri, 12 Feb 2016 14:52:50 -0500 Subject: [PATCH 04/52] Refactors Bot Weapon Identification --- code/game/machinery/bots/ed209bot.dm | 15 ++------------- code/game/machinery/bots/secbot.dm | 15 ++------------- code/game/objects/items.dm | 2 ++ code/game/objects/items/weapons/melee/misc.dm | 3 +++ .../game/objects/items/weapons/swords_axes_etc.dm | 1 + code/modules/projectiles/gun.dm | 1 + code/modules/projectiles/guns/energy/laser.dm | 3 +++ code/modules/projectiles/guns/energy/special.dm | 2 ++ 8 files changed, 16 insertions(+), 26 deletions(-) diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index bb6ca81b8e6..99ff5796acc 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -38,16 +38,6 @@ bot_type_name = "ED-209" bot_filter = RADIO_SECBOT - //List of weapons that secbots will not arrest for - var/safe_weapons = list(\ - /obj/item/weapon/gun/energy/laser/bluetag,\ - /obj/item/weapon/gun/energy/laser/redtag,\ - /obj/item/weapon/gun/energy/laser/practice,\ - /obj/item/weapon/melee/classic_baton/telescopic,\ - /obj/item/weapon/gun/energy/kinetic_accelerator,\ - /obj/item/weapon/gun/energy/floragun) - - /obj/item/weapon/ed209_assembly name = "\improper ED-209 assembly" desc = "Some sort of bizarre assembly." @@ -395,9 +385,8 @@ Auto Patrol[]"}, continue /obj/machinery/bot/ed209/proc/check_for_weapons(var/obj/item/slot_item) - if(istype(slot_item, /obj/item/weapon/gun) || istype(slot_item, /obj/item/weapon/melee)) - if(!(slot_item.type in safe_weapons)) - return 1 + if(slot_item && slot_item.needs_permit) + return 1 return 0 /obj/machinery/bot/ed209/explode() diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 8e34b0ae19e..729ce464b8c 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -31,16 +31,6 @@ bot_type_name = "Secbot" bot_filter = RADIO_SECBOT - //List of weapons that secbots will not arrest for - var/safe_weapons = list(\ - /obj/item/weapon/gun/energy/laser/bluetag,\ - /obj/item/weapon/gun/energy/laser/redtag,\ - /obj/item/weapon/gun/energy/laser/practice,\ - /obj/item/weapon/melee/classic_baton/telescopic,\ - /obj/item/weapon/gun/energy/kinetic_accelerator,\ - /obj/item/weapon/gun/energy/floragun) - - /obj/machinery/bot/secbot/beepsky name = "Officer Beepsky" desc = "It's Officer Beepsky! Powered by a potato and a shot of whiskey." @@ -378,9 +368,8 @@ Auto Patrol: []"}, else continue /obj/machinery/bot/secbot/proc/check_for_weapons(var/obj/item/slot_item) - if(istype(slot_item, /obj/item/weapon/gun) || istype(slot_item, /obj/item/weapon/melee)) - if(!(slot_item.type in safe_weapons)) - return 1 + if(slot_item && slot_item.needs_permit) + return 1 return 0 /obj/machinery/bot/secbot/explode() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index bd0c2a4fc5a..1ccb002abb9 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -49,6 +49,8 @@ var/list/allowed = null //suit storage stuff. var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. + var/needs_permit = 0 //Used by security bots to determine if this item is safe for public use. + var/strip_delay = DEFAULT_ITEM_STRIP_DELAY var/put_on_delay = DEFAULT_ITEM_PUTON_DELAY diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 1edaeb26eb7..7e95235ff4a 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -1,3 +1,6 @@ +/obj/item/weapon/melee + needs_permit = 1 + /obj/item/weapon/melee/chainofcommand name = "chain of command" desc = "A tool used by great men to placate the frothing masses." diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 63f10e1d574..edf0c77e131 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -77,6 +77,7 @@ item_state = null slot_flags = SLOT_BELT w_class = 2 + needs_permit = 0 force = 0 on = 0 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index c1eb0f1ebee..d44fb37f20b 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -19,6 +19,7 @@ throw_range = 5 force = 5.0 origin_tech = "combat=1" + needs_permit = 1 attack_verb = list("struck", "hit", "bashed") var/fire_sound = 'sound/weapons/Gunshot.ogg' diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index ed4ca6eeeed..1558304b191 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -15,6 +15,7 @@ desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." projectile_type = "/obj/item/projectile/practice" clumsy_check = 0 + needs_permit = 0 obj/item/weapon/gun/energy/laser/retro name ="retro laser gun" @@ -107,6 +108,7 @@ obj/item/weapon/gun/energy/laser/retro projectile_type = "/obj/item/projectile/lasertag/blue" origin_tech = "combat=1;magnets=2" clumsy_check = 0 + needs_permit = 0 self_recharge = 1 @@ -124,6 +126,7 @@ obj/item/weapon/gun/energy/laser/retro projectile_type = "/obj/item/projectile/lasertag/red" origin_tech = "combat=1;magnets=2" clumsy_check = 0 + needs_permit = 0 self_recharge = 1 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 9bb7d479de5..7093eb7202a 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -41,6 +41,7 @@ origin_tech = "materials=2;biotech=3;powerstorage=3" modifystate = "floramut" var/mode = 0 //0 = mutate, 1 = yield boost + needs_permit = 0 self_recharge = 1 @@ -202,6 +203,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. fire_sound = 'sound/weapons/Kenetic_accel.ogg' charge_cost = 5000 cell_type = "/obj/item/weapon/stock_parts/cell/emproof" + needs_permit = 0 // Aparently these are safe to carry? I'm sure Golliaths would disagree. fire_delay = 16 //Because guncode is bad and you can bug the reload for rapid fire otherwise. var/recently_fired = 0 From d3ddd683f75c5cb33a2b5e27909d63402dc15e2b Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Fri, 12 Feb 2016 16:42:27 -0500 Subject: [PATCH 05/52] Addresses various things re pda refactor --- code/game/objects/items/devices/PDA/PDA.dm | 20 ++++++--- code/game/objects/items/devices/PDA/ai.dm | 8 ++-- code/game/objects/items/devices/PDA/cart.dm | 19 +++++--- .../objects/items/devices/PDA/cart_apps.dm | 9 ++-- .../objects/items/devices/PDA/messenger.dm | 30 ++++--------- code/game/objects/items/devices/PDA/pdas.dm | 2 +- .../objects/items/devices/PDA/utilities.dm | 44 +++++++++++-------- nano/assets/nano.js | 2 +- nano/scripts/nano/nano_state_pda.js | 13 +++--- 9 files changed, 80 insertions(+), 67 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index d824b1b0a10..b720bc5089f 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -121,7 +121,9 @@ var/global/list/obj/item/device/pda/PDAs = list() if(cartridge) prog_list |= cartridge.programs - for(var/datum/data/pda/P in prog_list) + for(var/A in prog_list) + var/datum/data/pda/P = A + if(P.hidden) continue var/list/cat @@ -196,7 +198,8 @@ var/global/list/obj/item/device/pda/PDAs = list() shortcut_cache.Cut() /obj/item/device/pda/proc/update_programs() - for(var/datum/data/pda/P in programs) + for(var/A in programs) + var/datum/data/pda/P = A P.pda = src /obj/item/device/pda/Topic(href, href_list) @@ -421,10 +424,15 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/Destroy() PDAs -= src - if (src.id) - src.id.loc = get_turf(src.loc) - if(src.pai) - src.pai.loc = get_turf(src.loc) + var/T = get_turf(loc) + if (id) + id.loc = T + if(pai) + pai.loc = T + for(var/A in programs) + qdel(A) + if(cartridge) + cartridge.loc = T return ..() // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP diff --git a/code/game/objects/items/devices/PDA/ai.dm b/code/game/objects/items/devices/PDA/ai.dm index 65386f81387..a6c7769ab52 100644 --- a/code/game/objects/items/devices/PDA/ai.dm +++ b/code/game/objects/items/devices/PDA/ai.dm @@ -18,7 +18,7 @@ set name = "Send PDA Message" set src in usr - if(usr.stat == 2) + if(usr.stat == DEAD) usr << "You can't send PDA messages because you are dead!" return var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) @@ -37,7 +37,7 @@ set name = "Show Message Log" set src in usr - if(usr.stat == 2) + if(usr.stat == DEAD) usr << "You can't do that because you are dead!" return var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) @@ -57,7 +57,7 @@ set name = "Toggle Sender/Receiver" set src in usr - if(usr.stat == 2) + if(usr.stat == DEAD) usr << "You can't do that because you are dead!" return var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) @@ -70,7 +70,7 @@ set name = "Toggle Ringer" set src in usr - if(usr.stat == 2) + if(usr.stat == DEAD) usr << "You can't do that because you are dead!" return var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index bf5e5902dd8..fafcbd2a990 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -17,11 +17,22 @@ /obj/item/weapon/cartridge/New() if(ticker && ticker.current_state >= GAME_STATE_SETTING_UP) initialize() + +/obj/item/weapon/cartridge/Destroy() + if(radio) + qdel(radio) + for(var/A in programs) + qdel(A) + for(var/A in messenger_plugins) + qdel(A) + return ..() /obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda) - for(var/datum/data/pda/P in programs) + for(var/A in programs) + var/datum/data/pda/P = A P.pda = pda - for(var/datum/data/pda/messenger_plugin/P in messenger_plugins) + for(var/A in messenger_plugins) + var/datum/data/pda/messenger_plugin/P = A P.pda = pda /obj/item/weapon/cartridge/engineering @@ -117,10 +128,6 @@ radio = new /obj/item/radio/integrated/signal(src) ..() -/obj/item/weapon/cartridge/signal/Destroy() - qdel(radio) - return ..() - /obj/item/weapon/cartridge/signal/toxins name = "Signal Ace 2" desc = "Complete with integrated radio signaler!" diff --git a/code/game/objects/items/devices/PDA/cart_apps.dm b/code/game/objects/items/devices/PDA/cart_apps.dm index 365083c0a48..6844baec505 100644 --- a/code/game/objects/items/devices/PDA/cart_apps.dm +++ b/code/game/objects/items/devices/PDA/cart_apps.dm @@ -128,7 +128,8 @@ records["general"] = general_records.fields return records else - for(var/datum/data/record/R in sortRecord(data_core.general)) + for(var/A in sortRecord(data_core.general)) + var/datum/data/record/R = A records += list(list(Name = R.fields["name"], "ref" = "\ref[R]")) data["recordsList"] = records return null @@ -167,7 +168,8 @@ /datum/data/pda/app/crew_records/medical/load_records(datum/data/record/R) ..(R) - for (var/datum/data/record/E in data_core.medical) + for(var/A in data_core.medical) + var/datum/data/record/E = A if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) medical_records = E break @@ -192,7 +194,8 @@ /datum/data/pda/app/crew_records/security/load_records(datum/data/record/R) ..(R) - for (var/datum/data/record/E in data_core.security) + for(var/A in data_core.security) + var/datum/data/record/E = A if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) security_records = E break diff --git a/code/game/objects/items/devices/PDA/messenger.dm b/code/game/objects/items/devices/PDA/messenger.dm index 56800e19104..a6a66d95420 100644 --- a/code/game/objects/items/devices/PDA/messenger.dm +++ b/code/game/objects/items/devices/PDA/messenger.dm @@ -32,7 +32,8 @@ var/convopdas[0] var/pdas[0] var/count = 0 - for (var/obj/item/device/pda/P in PDAs) + for(var/A in PDAs) + var/obj/item/device/pda/P = A var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) if (!P.owner || PM.toff || P == pda || PM.m_hidden) @@ -60,7 +61,8 @@ var/list/plugins = list() if(pda.cartridge) - for(var/datum/data/pda/messenger_plugin/P in pda.cartridge.messenger_plugins) + for(var/A in pda.cartridge.messenger_plugins) + var/datum/data/pda/messenger_plugin/P = A plugins += list(list(name = P.name, icon = P.icon, ref = "\ref[P]")) data["plugins"] = plugins @@ -172,7 +174,8 @@ //var/telecomms_intact = telecomms_process(P.owner, owner, t) var/obj/machinery/message_server/useMS = null if(message_servers) - for (var/obj/machinery/message_server/MS in message_servers) + for(var/A in message_servers) + var/obj/machinery/message_server/MS = A //PDAs are now dependent on the Message Server. if(MS.active) useMS = MS @@ -198,28 +201,12 @@ useMS.send_pda_message("[P.owner]","[pda.owner]","[t]") tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) PM.tnote.Add(list(list("sent" = 0, "owner" = "[pda.owner]", "job" = "[pda.ownjob]", "message" = "[t]", "target" = "\ref[pda]"))) -/* for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice - if(istype(M, /mob/new_player)) - continue - M.show_message("PDA Message - [owner] -> [P.owner]: [t]") */ pda.investigate_log("PDA Message - [U.key] - [pda.owner] -> [P.owner]: [t]", "pda") if(!conversations.Find("\ref[P]")) conversations.Add("\ref[P]") if(!PM.conversations.Find("\ref[pda]")) PM.conversations.Add("\ref[pda]") -/* - if (prob(15)) //Give the AI a chance of intercepting the message - var/who = src.owner - if(prob(50)) - who = P.owner - for(var/mob/living/silicon/ai/ai in mob_list) - // Allows other AIs to intercept the message but the AI won't intercept their own message. - if(ai.aiPDA != P && ai.aiPDA != src) - ai.show_message("Intercepted message from [who]: [t]") -*/ - PM.play_ringtone() //Search for holder of the PDA. var/mob/living/L = null @@ -249,7 +236,7 @@ else S = 'sound/machines/twobeep.ogg' playsound(pda.loc, S, 50, 1) - for (var/mob/O in hearers(3, pda.loc)) + for(var/mob/O in hearers(3, pda.loc)) if(!silent) O.show_message(text("\icon[pda] *[pda.ttone]*")) @@ -262,7 +249,8 @@ usr << "Turn on your receiver in order to send messages." return - for (var/obj/item/device/pda/P in PDAs) + for(var/A in PDAs) + var/obj/item/device/pda/P = A var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) if(!P.owner || !PM || PM.hidden || P == pda || PM.toff) diff --git a/code/game/objects/items/devices/PDA/pdas.dm b/code/game/objects/items/devices/PDA/pdas.dm index 86ca9912e45..71e831e206d 100644 --- a/code/game/objects/items/devices/PDA/pdas.dm +++ b/code/game/objects/items/devices/PDA/pdas.dm @@ -177,7 +177,7 @@ icon = 'icons/obj/pda.dmi' icon_state = "pdabox" - New() +/obj/item/weapon/storage/box/PDAs/New() ..() new /obj/item/device/pda(src) new /obj/item/device/pda(src) diff --git a/code/game/objects/items/devices/PDA/utilities.dm b/code/game/objects/items/devices/PDA/utilities.dm index bc1b76b2ea6..f86c234d6f9 100644 --- a/code/game/objects/items/devices/PDA/utilities.dm +++ b/code/game/objects/items/devices/PDA/utilities.dm @@ -29,7 +29,7 @@ var/remote_door_id = "" /datum/data/pda/utility/toggle_door/start() - for(var/obj/machinery/door/poddoor/M in world) + for(var/obj/machinery/door/poddoor/M in airlocks) if(M.id_tag == remote_door_id) if(M.density) M.open() @@ -41,8 +41,7 @@ icon = "heart-o" /datum/data/pda/utility/scanmode/medical/scan_mob(mob/living/C as mob, mob/living/user as mob) - for (var/mob/O in viewers(C, null)) - O.show_message("[user] has analyzed [C]'s vitals!", 1) + C.visible_message("[user] has analyzed [C]'s vitals!") user.show_message("Analyzing Results for [C]:") user.show_message("\t Overall Status: [C.stat > 1 ? "dead" : "[C.health - C.halloss]% healthy"]", 1) @@ -66,27 +65,34 @@ icon = "link" /datum/data/pda/utility/scanmode/dna/scan_mob(mob/living/C as mob, mob/living/user as mob) - if (!istype(C:dna, /datum/dna)) - user << "No fingerprints found on [C]" + if(istype(C, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = C + if (!istype(H.dna, /datum/dna)) + user << "No fingerprints found on [H]" + else + user << "[H]'s Fingerprints: [md5(H.dna.uni_identity)]" + scan_blood(C, user) + +/datum/data/pda/utility/scanmode/dna/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) + scan_blood(A, user) + +/datum/data/pda/utility/scanmode/dna/proc/scan_blood(atom/A, mob/user) + if (!A.blood_DNA) + user << "No blood found on [A]" + if(A.blood_DNA) + qdel(A.blood_DNA) else - user << "[C]'s Fingerprints: [md5(C:dna.uni_identity)]" - if (!C:blood_DNA) - user << "No blood found on [C]" - if(C:blood_DNA) - qdel(C:blood_DNA) - else - user << "Blood found on [C]. Analysing..." + user << "Blood found on [A]. Analysing..." spawn(15) - for(var/blood in C:blood_DNA) - user << "Blood type: [C:blood_DNA[blood]]\nDNA: [blood]" + for(var/blood in A.blood_DNA) + user << "Blood type: [A.blood_DNA[blood]]\nDNA: [blood]" /datum/data/pda/utility/scanmode/halogen base_name = "Halogen Counter" icon = "exclamation-circle" /datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C as mob, mob/living/user as mob) - for (var/mob/O in viewers(C, null)) - O.show_message("[user] has analyzed [C]'s radiation levels!", 1) + C.visible_message("[user] has analyzed [C]'s radiation levels!") user.show_message("Analyzing Results for [C]:") if(C.radiation) @@ -103,7 +109,7 @@ if(A.reagents.reagent_list.len > 0) var/reagents_length = A.reagents.reagent_list.len user << "[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found." - for (var/re in A.reagents.reagent_list) + for(var/re in A.reagents.reagent_list) user << "\t [re]" else user << "No active chemical agents found in [A]." @@ -138,7 +144,7 @@ else if (istype(A, /obj/machinery/atmospherics/unary/tank)) var/obj/machinery/atmospherics/unary/tank/T = A pda.atmosanalyzer_scan(T.air_contents, user, T) - + /datum/data/pda/utility/scanmode/notes base_name = "Note Scanner" icon = "clipboard" @@ -151,7 +157,7 @@ /datum/data/pda/utility/scanmode/notes/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) if(notes && istype(A, /obj/item/weapon/paper)) var/obj/item/weapon/paper/P = A - + // JMO 20140705: Makes scanned document show up properly in the notes. Not pretty for formatted documents, // as this will clobber the HTML, but at least it lets you scan a document. You can restore the original // notes by editing the note again. (Was going to allow you to edit, but scanned documents are too long.) diff --git a/nano/assets/nano.js b/nano/assets/nano.js index 1af5aed8ad1..3c4944c74b7 100644 --- a/nano/assets/nano.js +++ b/nano/assets/nano.js @@ -1 +1 @@ -function NanoStateDefaultClass(){this.key="default",this.key=this.key.toLowerCase(),NanoStateManager.addState(this)}function NanoStatePDAClass(){this.key="pda",this.key=this.key.toLowerCase(),NanoStateManager.addState(this)}function NanoStateClass(){}var NanoUtility=function(){var e={};return{init:function(){var t=$("body");e=t.data("urlParameters")},generateHref:function(t){var n="?";for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);for(var a in t)t.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+t[a]);return n},winset:function(e,t,n){var a,r;return null==n&&(n=NanoStateManager.getData().config.window.ref),a={},a[n+"."+e]=t,r=a,location.href=NanoUtility.href("winset",r)},extend:function(e,t){return Object.keys(t).forEach(function(n){var a;return a=t[n],a&&"[object Object]"===Object.prototype.toString.call(a)?(e[n]=e[n]||{},NanoUtility.extend(e[n],a)):e[n]=a}),e},href:function(e,t){return null==e&&(e=""),null==t&&(t={}),e=new Url("byond://"+e),NanoUtility.extend(e.query,t),e},close:function(){var t;return t={command:"nanoclose "+e.src},this.winset("is-visible","false"),location.href=NanoUtility.href("winset",t)}}}();"undefined"==typeof jQuery&&reportError("ERROR: Javascript library failed to load!"),"undefined"==typeof doT&&reportError("ERROR: Template engine failed to load!");var reportError=function(e){window.location="byond://?nano_err="+encodeURIComponent(e),alert(e)};$(document).ready(function(){NanoUtility.init(),NanoStateManager.init(),NanoTemplate.init(),NanoWindow.init()}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length,n=Number(arguments[1])||0;for(n=0>n?Math.ceil(n):Math.floor(n),0>n&&(n+=t);t>n;n++)if(n in this&&this[n]===e)return n;return-1}),String.prototype.format||(String.prototype.format=function(e){var t=this;return t.replace(String.prototype.format.regex,function(t){var n,a=parseInt(t.substring(1,t.length-1));return n=a>=0?e[a]:-1===a?"{":-2===a?"}":""})},String.prototype.format.regex=new RegExp("{-?[0-9]+}","g")),Object.size=function(e){var t,n=0;for(var t in e)e.hasOwnProperty(t)&&n++;return n},window.console||(window.console={log:function(e){return!1}}),String.prototype.toTitleCase=function(){var e=/^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i;return this.replace(/([^\W_]+[^\s-]*) */g,function(t,n,a,r){return a>0&&a+n.length!==r.length&&n.search(e)>-1&&":"!==r.charAt(a-2)&&r.charAt(a-1).search(/[^\s-]/)<0?t.toLowerCase():n.substr(1).search(/[A-Z]|\../)>-1?t:t.charAt(0).toUpperCase()+t.substr(1)})},$.ajaxSetup({cache:!1}),Function.prototype.inheritsFrom=function(e){return this.prototype=new e,this.prototype.constructor=this,this.prototype.parent=e.prototype,this},String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),String.prototype.ckey||(String.prototype.ckey=function(){return this.replace(/\W/g,"").toLowerCase()}),NanoStateManager=function(){var e=!1,t=null,n={},a={},r={},o=null,i=function(){t=$("body").data("initialData"),null!=t&&t.hasOwnProperty("config")&&t.hasOwnProperty("data")||reportError("Error: Initial data did not load correctly.");var n="default";t.config.hasOwnProperty("stateKey")&&t.config.stateKey&&(n=t.config.stateKey.toLowerCase()),NanoStateManager.setCurrentState(n),$(document).on("templatesLoaded",function(){l(t),e=!0})},s=function(n){var a;try{a=jQuery.parseJSON(n)}catch(r){return void reportError("recieveUpdateData failed.
Error name: "+r.name+"
Error Message: "+r.message)}a.hasOwnProperty("data")||(t&&t.hasOwnProperty("data")?a.data=t.data:a.data={}),e?l(a):t=a},l=function(e){if(null!=o){if(e=o.onBeforeUpdate(e),e===!1)return void reportError("data is false, return");t=e,o.onUpdate(t),o.onAfterUpdate(t)}},c=function(e,t){for(var n in e)e.hasOwnProperty(n)&&jQuery.isFunction(e[n])&&(t=e[n].call(this,t));return t};return{init:function(){i()},receiveUpdateData:function(e){s(e)},addBeforeUpdateCallback:function(e,t){n[e]=t},addBeforeUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addBeforeUpdateCallback(t,e[t])},removeBeforeUpdateCallback:function(e){n.hasOwnProperty(e)&&delete n[e]},executeBeforeUpdateCallbacks:function(e){return c(n,e)},addAfterUpdateCallback:function(e,t){a[e]=t},addAfterUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addAfterUpdateCallback(t,e[t])},removeAfterUpdateCallback:function(e){a.hasOwnProperty(e)&&delete a[e]},executeAfterUpdateCallbacks:function(e){return c(a,e)},addState:function(e){return e instanceof NanoStateClass?e.key?void(r[e.key]=e):void reportError("ERROR: Attempted to add a state with an invalid stateKey"):void reportError("ERROR: Attempted to add a state which is not instanceof NanoStateClass")},setCurrentState:function(e){if("undefined"==typeof e||!e)return reportError("ERROR: No state key was passed!"),!1;if(!r.hasOwnProperty(e))return reportError("ERROR: Attempted to set a current state which does not exist: "+e),!1;var t=o;return o=r[e],null!=t&&t.onRemove(o),o.onAdd(t),!0},getCurrentState:function(){return o},getData:function(){return t}}}(),NanoBaseCallbacks=function(){var e=!0,t={},n={status:function(t){var n;return 2==t.config.status?(n="good",$(".linkActive").removeClass("inactive")):1==t.config.status?(n="average",$(".linkActive").addClass("inactive")):(n="bad",$(".linkActive").addClass("inactive")),$(".statusicon").removeClass("good bad average").addClass(n),$(".linkActive").stopTime("linkPending"),$(".linkActive").removeClass("linkPending"),$(".linkActive").off("click").on("click",function(n){n.preventDefault();var a=$(this).data("href");null!=a&&e&&(e=!1,$("body").oneTime(300,"enableClick",function(){e=!0}),2==t.config.status&&$(this).oneTime(300,"linkPending",function(){$(this).addClass("linkPending")}),window.location.href=a)}),t},nanomap:function(e){return $(".mapIcon").off("mouseenter mouseleave").on("mouseenter",function(e){$("#uiMapTooltip").html($(this).children(".tooltip").html()).show().stopTime().oneTime(5e3,"hideTooltip",function(){$(this).fadeOut(500)})}),$(".zoomLink").off("click").on("click",function(e){e.preventDefault();var t=$(this).data("zoomLevel"),n=$("#uiMap"),a=n.width()*t,r=n.height()*t;n.css({zoom:t,left:"50%",top:"50%",marginLeft:"-"+Math.floor(a/2)+"px",marginTop:"-"+Math.floor(r/2)+"px"})}),$("#uiMapImage").attr("src","nanomap_z"+e.config.mapZLevel+".png"),e}};return{addCallbacks:function(){NanoStateManager.addBeforeUpdateCallbacks(t),NanoStateManager.addAfterUpdateCallbacks(n)},removeCallbacks:function(){for(var e in t)t.hasOwnProperty(e)&&NanoStateManager.removeBeforeUpdateCallback(e);for(var e in n)n.hasOwnProperty(e)&&NanoStateManager.removeAfterUpdateCallback(e)}}}(),NanoBaseHelpers=function(){var e={syndicateMode:function(){return $("body").css("background-color","#8f1414"),$("body").css("background-image","url('uiBackground-Syndicate.png')"),$("body").css("background-position","50% 0"),$("body").css("background-repeat","repeat-x"),$("#uiTitleFluff").css("background-image","url('uiTitleFluff-Syndicate.png')"),$("#uiTitleFluff").css("background-position","50% 50%"),$("#uiTitleFluff").css("background-repeat","no-repeat"),""},combine:function(e,t){return e&&t?e.concat(t):e||t},dump:function(e){return JSON.stringify(e)},link:function(e,t,n,a,r,o){var i="",s="noIcon";"undefined"!=typeof t&&t&&(i='

',s="hasIcon"),"undefined"!=typeof r&&r||(r="link");var l="";return"undefined"!=typeof o&&o&&(l='id="'+o+'"'),"undefined"!=typeof a&&a?'":'
"+i+e+"
"},xor:function(e,t){return e^t},precisionRound:function(e,t){if(0==t)return Math.round(number);var n=Math.pow(10,t);return Math.round(e*n)/n},round:function(e){return Math.round(e)},fixed:function(e){return Math.round(10*e)/10},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)},string:function(){if(0==arguments.length)return"";if(1==arguments.length)return arguments[0];if(arguments.length>1){stringArgs=[];for(var e=1;et?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),"undefined"!=typeof a&&a||(a=""),"undefined"!=typeof r&&r||(r="");var o=Math.round((e-t)/(n-t)*100);return'
'+r+"
"},dangerToClass:function(e){return 0==e?"good":1==e?"average":"bad"},dangerToSpan:function(e){return 0==e?'"Good"':1==e?'"Minor Alert"':'"Major Alert"'},generateHref:function(e){var t=$("body");_urlParameters=t.data("urlParameters");var n="?";for(var a in _urlParameters)_urlParameters.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+_urlParameters[a]);for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);return n},displayDNABlocks:function(e,t,n,a,r){if(!e)return'
Please place a valid subject into the DNA modifier.
';var o=e.split(""),i='
',s=1,l=1;for(var c in o)if(o.hasOwnProperty(c)&&"object"!=typeof o[c]){var u;u="UI"==r.toUpperCase()?{selectUIBlock:s,selectUISubblock:l}:{selectSEBlock:s,selectSESubblock:l};var d="linkActive";s==t&&l==n&&(d="selected"),i+='",c++,c%a==0&&c
"):l++}return i+="
"},cMirror:function(e){CodeMirror.fromTextArea(document.getElementById(e),{lineNumbers:!0,indentUnit:4,indentWithTabs:!0,theme:"lesser-dark"})}};return{addHelpers:function(){NanoTemplate.addHelpers(e)},removeHelpers:function(){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.removeHelper(t)}}}(),NanoStateDefaultClass.inheritsFrom(NanoStateClass);var NanoStateDefault=new NanoStateDefaultClass;NanoStatePDAClass.inheritsFrom(NanoStateClass);var NanoStatePDA=new NanoStatePDAClass,pda_app_template=null;NanoStatePDAClass.prototype.onUpdate=function(e){NanoStateClass.prototype.onUpdate.call(this,e);try{if(null!=e.data.app){var t=e.data.app.template;null!=t&&t!=pda_app_template?$.when($.ajax({url:t+".tmpl",cache:!1,dataType:"text"})).done(function(n){n+='
';try{NanoTemplate.addTemplate("app",n),NanoTemplate.resetTemplate("app"),$("#uiApp").html(NanoTemplate.parse("app",e)),pda_app_template=t,2==e.config.status&&($("#uiApp .linkActive").addClass("linkPending"),$("#uiApp .linkActive").oneTime(300,"linkPending",function(){$("#uiApp .linkActive").removeClass("linkPending inactive")}))}catch(a){return void reportError("ERROR: An error occurred while loading the UI: "+a.message)}}).fail(function(){reportError("ERROR: Loading template app("+t+") failed!")}):NanoTemplate.templateExists("app")&&$("#uiApp").html(NanoTemplate.parse("app",e))}}catch(n){return void reportError("ERROR: An error occurred while rendering the UI: "+n.message)}},NanoStateClass.prototype.key=null,NanoStateClass.prototype.layoutRendered=!1,NanoStateClass.prototype.contentRendered=!1,NanoStateClass.prototype.mapInitialised=!1,NanoStateClass.prototype.isCurrent=function(){return NanoStateManager.getCurrentState()==this},NanoStateClass.prototype.onAdd=function(e){NanoBaseCallbacks.addCallbacks(),NanoBaseHelpers.addHelpers()},NanoStateClass.prototype.onRemove=function(e){NanoBaseCallbacks.removeCallbacks(),NanoBaseHelpers.removeHelpers()},NanoStateClass.prototype.onBeforeUpdate=function(e){return e=NanoStateManager.executeBeforeUpdateCallbacks(e)},NanoStateClass.prototype.onUpdate=function(e){try{(!this.layoutRendered||e.config.hasOwnProperty("autoUpdateLayout")&&e.config.autoUpdateLayout)&&($("#uiLayout").html(NanoTemplate.parse("layout",e)),this.layoutRendered=!0),(!this.contentRendered||e.config.hasOwnProperty("autoUpdateContent")&&e.config.autoUpdateContent)&&($("#uiContent").html(NanoTemplate.parse("main",e)),this.contentRendered=!0),NanoTemplate.templateExists("mapContent")&&(this.mapInitialised||($("#uiMap").draggable(),$("#uiMapTooltip").off("click").on("click",function(e){e.preventDefault(),$(this).fadeOut(400)}),this.mapInitialised=!0),$("#uiMapContent").html(NanoTemplate.parse("mapContent",e)),e.config.hasOwnProperty("showMap")&&e.config.showMap?($("#uiContent").addClass("hidden"),$("#uiMapWrapper").removeClass("hidden")):($("#uiMapWrapper").addClass("hidden"),$("#uiContent").removeClass("hidden"))),NanoTemplate.templateExists("mapHeader")&&$("#uiMapHeader").html(NanoTemplate.parse("mapHeader",e)),NanoTemplate.templateExists("mapFooter")&&$("#uiMapFooter").html(NanoTemplate.parse("mapFooter",e))}catch(t){return void reportError("ERROR: An error occurred while rendering the UI: "+t.message)}},NanoStateClass.prototype.onAfterUpdate=function(e){NanoStateManager.executeAfterUpdateCallbacks(e)},NanoStateClass.prototype.alertText=function(e){alert(e)};var NanoTemplate=function(){var e={},t={},n={},a={},r=function(){e=$("body").data("templateData"),null==e&&reportError("Error: Template data did not load correctly."),o()},o=function(){var t=Object.size(e);if(!t)return void $(document).trigger("templatesLoaded");for(var n in e)if(e.hasOwnProperty(n))return void $.when($.ajax({url:e[n],cache:!1,dataType:"text"})).done(function(t){t+='
';try{NanoTemplate.addTemplate(n,t)}catch(a){return void reportError("ERROR: An error occurred while loading the UI: "+a.message)}delete e[n],o()}).fail(function(){reportError("ERROR: Loading template "+n+"("+e[n]+") failed!")})},i=function(){for(var e in t)try{n[e]=doT.template(t[e],null,t)}catch(a){reportError(a.message)}};return{init:function(){r()},addTemplate:function(e,n){t[e]=n},templateExists:function(e){return t.hasOwnProperty(e)},resetTemplate:function(e){n[e]=null},parse:function(e,r){if(!n.hasOwnProperty(e)||!n[e]){if(!t.hasOwnProperty(e))return reportError('ERROR: Template "'+e+'" does not exist in _compiledTemplates!'),"

Template error (does not exist)

";i()}return"function"!=typeof n[e]?(reportError(n[e]),reportError('ERROR: Template "'+e+'" failed to compile!'),"

Template error (failed to compile)

"):n[e].call(this,r.data,r.config,a)},addHelper:function(e,t){return jQuery.isFunction(t)?void(a[e]=t):void reportError("NanoTemplate.addHelper failed to add "+e+" as it is not a function.")},addHelpers:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.addHelper(t,e[t])},removeHelper:function(e){helpers.hasOwnProperty(e)&&delete a[e]}}}(),NanoWindow=function(){var e,t,n,a,r,o,i=function(e,t){NanoUtility.winset("pos",e+","+t)},s=function(e,t){NanoUtility.winset("size",e+","+t)},l=function(){NanoStateManager.getData().config.user.fancy&&(c(),u(),d(),f())},c=function(){NanoUtility.winset("titlebar",0),NanoUtility.winset("can-resize",0),$(".fancy").show(),$("#uiTitleFluff").css("right","65px")},u=function(){var e=function(){return NanoUtility.close()},t=function(){return NanoUtility.winset("is-minimized","true")};$(".close").on("click",function(t){e()}),$(".minimize").on("click",function(e){t()})},d=function(){$("#uiTitleWrapper").on("mousemove",function(e){p()}),$("#uiTitleWrapper").on("mousedown",function(t){e=!0}),$("#uiTitleWrapper").on("mouseup",function(a){e=!1,t=null,n=null})},p=function(a){var r,o;null==a&&(a=window.event),e&&(null==t&&(t=a.screenX),null==n&&(n=a.screenY),r=a.screenX-t+window.screenLeft,o=a.screenY-n+window.screenTop,i(r,o),t=a.screenX,n=a.screenY)},f=function(){$("#resize").on("mousemove",function(e){m()}),$("#resize").on("mousedown",function(e){a=!0}),$("#resize").on("mouseup",function(e){a=!1})},m=function(){var e,t;null==event&&(event=window.event),a&&(null==r&&(r=event.screenX),null==o&&(o=event.screenY),e=Math.max(150,event.screenX-r+window.innerWidth),t=Math.max(150,event.screenY-o+window.innerHeight),s(e,t),r=event.screenX,o=event.screenY)};return{init:function(){$(document).on("templatesLoaded",function(){l()})}}}(); \ No newline at end of file +function NanoStateDefaultClass(){this.key="default",this.key=this.key.toLowerCase(),NanoStateManager.addState(this)}function NanoStatePDAClass(){this.key="pda",this.key=this.key.toLowerCase(),this.current_template="",NanoStateManager.addState(this)}function NanoStateClass(){}var NanoUtility=function(){var e={};return{init:function(){var t=$("body");e=t.data("urlParameters")},generateHref:function(t){var n="?";for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);for(var a in t)t.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+t[a]);return n},winset:function(e,t,n){var a,r;return null==n&&(n=NanoStateManager.getData().config.window.ref),a={},a[n+"."+e]=t,r=a,location.href=NanoUtility.href("winset",r)},extend:function(e,t){return Object.keys(t).forEach(function(n){var a;return a=t[n],a&&"[object Object]"===Object.prototype.toString.call(a)?(e[n]=e[n]||{},NanoUtility.extend(e[n],a)):e[n]=a}),e},href:function(e,t){return null==e&&(e=""),null==t&&(t={}),e=new Url("byond://"+e),NanoUtility.extend(e.query,t),e},close:function(){var t;return t={command:"nanoclose "+e.src},this.winset("is-visible","false"),location.href=NanoUtility.href("winset",t)}}}();"undefined"==typeof jQuery&&reportError("ERROR: Javascript library failed to load!"),"undefined"==typeof doT&&reportError("ERROR: Template engine failed to load!");var reportError=function(e){window.location="byond://?nano_err="+encodeURIComponent(e),alert(e)};$(document).ready(function(){NanoUtility.init(),NanoStateManager.init(),NanoTemplate.init(),NanoWindow.init()}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length,n=Number(arguments[1])||0;for(n=0>n?Math.ceil(n):Math.floor(n),0>n&&(n+=t);t>n;n++)if(n in this&&this[n]===e)return n;return-1}),String.prototype.format||(String.prototype.format=function(e){var t=this;return t.replace(String.prototype.format.regex,function(t){var n,a=parseInt(t.substring(1,t.length-1));return n=a>=0?e[a]:-1===a?"{":-2===a?"}":""})},String.prototype.format.regex=new RegExp("{-?[0-9]+}","g")),Object.size=function(e){var t,n=0;for(var t in e)e.hasOwnProperty(t)&&n++;return n},window.console||(window.console={log:function(e){return!1}}),String.prototype.toTitleCase=function(){var e=/^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i;return this.replace(/([^\W_]+[^\s-]*) */g,function(t,n,a,r){return a>0&&a+n.length!==r.length&&n.search(e)>-1&&":"!==r.charAt(a-2)&&r.charAt(a-1).search(/[^\s-]/)<0?t.toLowerCase():n.substr(1).search(/[A-Z]|\../)>-1?t:t.charAt(0).toUpperCase()+t.substr(1)})},$.ajaxSetup({cache:!1}),Function.prototype.inheritsFrom=function(e){return this.prototype=new e,this.prototype.constructor=this,this.prototype.parent=e.prototype,this},String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),String.prototype.ckey||(String.prototype.ckey=function(){return this.replace(/\W/g,"").toLowerCase()}),NanoStateManager=function(){var e=!1,t=null,n={},a={},r={},o=null,i=function(){t=$("body").data("initialData"),null!=t&&t.hasOwnProperty("config")&&t.hasOwnProperty("data")||reportError("Error: Initial data did not load correctly.");var n="default";t.config.hasOwnProperty("stateKey")&&t.config.stateKey&&(n=t.config.stateKey.toLowerCase()),NanoStateManager.setCurrentState(n),$(document).on("templatesLoaded",function(){l(t),e=!0})},s=function(n){var a;try{a=jQuery.parseJSON(n)}catch(r){return void reportError("recieveUpdateData failed.
Error name: "+r.name+"
Error Message: "+r.message)}a.hasOwnProperty("data")||(t&&t.hasOwnProperty("data")?a.data=t.data:a.data={}),e?l(a):t=a},l=function(e){if(null!=o){if(e=o.onBeforeUpdate(e),e===!1)return void reportError("data is false, return");t=e,o.onUpdate(t),o.onAfterUpdate(t)}},c=function(e,t){for(var n in e)e.hasOwnProperty(n)&&jQuery.isFunction(e[n])&&(t=e[n].call(this,t));return t};return{init:function(){i()},receiveUpdateData:function(e){s(e)},addBeforeUpdateCallback:function(e,t){n[e]=t},addBeforeUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addBeforeUpdateCallback(t,e[t])},removeBeforeUpdateCallback:function(e){n.hasOwnProperty(e)&&delete n[e]},executeBeforeUpdateCallbacks:function(e){return c(n,e)},addAfterUpdateCallback:function(e,t){a[e]=t},addAfterUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addAfterUpdateCallback(t,e[t])},removeAfterUpdateCallback:function(e){a.hasOwnProperty(e)&&delete a[e]},executeAfterUpdateCallbacks:function(e){return c(a,e)},addState:function(e){return e instanceof NanoStateClass?e.key?void(r[e.key]=e):void reportError("ERROR: Attempted to add a state with an invalid stateKey"):void reportError("ERROR: Attempted to add a state which is not instanceof NanoStateClass")},setCurrentState:function(e){if("undefined"==typeof e||!e)return reportError("ERROR: No state key was passed!"),!1;if(!r.hasOwnProperty(e))return reportError("ERROR: Attempted to set a current state which does not exist: "+e),!1;var t=o;return o=r[e],null!=t&&t.onRemove(o),o.onAdd(t),!0},getCurrentState:function(){return o},getData:function(){return t}}}(),NanoBaseCallbacks=function(){var e=!0,t={},n={status:function(t){var n;return 2==t.config.status?(n="good",$(".linkActive").removeClass("inactive")):1==t.config.status?(n="average",$(".linkActive").addClass("inactive")):(n="bad",$(".linkActive").addClass("inactive")),$(".statusicon").removeClass("good bad average").addClass(n),$(".linkActive").stopTime("linkPending"),$(".linkActive").removeClass("linkPending"),$(".linkActive").off("click").on("click",function(n){n.preventDefault();var a=$(this).data("href");null!=a&&e&&(e=!1,$("body").oneTime(300,"enableClick",function(){e=!0}),2==t.config.status&&$(this).oneTime(300,"linkPending",function(){$(this).addClass("linkPending")}),window.location.href=a)}),t},nanomap:function(e){return $(".mapIcon").off("mouseenter mouseleave").on("mouseenter",function(e){$("#uiMapTooltip").html($(this).children(".tooltip").html()).show().stopTime().oneTime(5e3,"hideTooltip",function(){$(this).fadeOut(500)})}),$(".zoomLink").off("click").on("click",function(e){e.preventDefault();var t=$(this).data("zoomLevel"),n=$("#uiMap"),a=n.width()*t,r=n.height()*t;n.css({zoom:t,left:"50%",top:"50%",marginLeft:"-"+Math.floor(a/2)+"px",marginTop:"-"+Math.floor(r/2)+"px"})}),$("#uiMapImage").attr("src","nanomap_z"+e.config.mapZLevel+".png"),e}};return{addCallbacks:function(){NanoStateManager.addBeforeUpdateCallbacks(t),NanoStateManager.addAfterUpdateCallbacks(n)},removeCallbacks:function(){for(var e in t)t.hasOwnProperty(e)&&NanoStateManager.removeBeforeUpdateCallback(e);for(var e in n)n.hasOwnProperty(e)&&NanoStateManager.removeAfterUpdateCallback(e)}}}(),NanoBaseHelpers=function(){var e={syndicateMode:function(){return $("body").css("background-color","#8f1414"),$("body").css("background-image","url('uiBackground-Syndicate.png')"),$("body").css("background-position","50% 0"),$("body").css("background-repeat","repeat-x"),$("#uiTitleFluff").css("background-image","url('uiTitleFluff-Syndicate.png')"),$("#uiTitleFluff").css("background-position","50% 50%"),$("#uiTitleFluff").css("background-repeat","no-repeat"),""},combine:function(e,t){return e&&t?e.concat(t):e||t},dump:function(e){return JSON.stringify(e)},link:function(e,t,n,a,r,o){var i="",s="noIcon";"undefined"!=typeof t&&t&&(i='
',s="hasIcon"),"undefined"!=typeof r&&r||(r="link");var l="";return"undefined"!=typeof o&&o&&(l='id="'+o+'"'),"undefined"!=typeof a&&a?'":'
"+i+e+"
"},xor:function(e,t){return e^t},precisionRound:function(e,t){if(0==t)return Math.round(number);var n=Math.pow(10,t);return Math.round(e*n)/n},round:function(e){return Math.round(e)},fixed:function(e){return Math.round(10*e)/10},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)},string:function(){if(0==arguments.length)return"";if(1==arguments.length)return arguments[0];if(arguments.length>1){stringArgs=[];for(var e=1;et?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),"undefined"!=typeof a&&a||(a=""),"undefined"!=typeof r&&r||(r="");var o=Math.round((e-t)/(n-t)*100);return'
'+r+"
"},dangerToClass:function(e){return 0==e?"good":1==e?"average":"bad"},dangerToSpan:function(e){return 0==e?'"Good"':1==e?'"Minor Alert"':'"Major Alert"'},generateHref:function(e){var t=$("body");_urlParameters=t.data("urlParameters");var n="?";for(var a in _urlParameters)_urlParameters.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+_urlParameters[a]);for(var a in e)e.hasOwnProperty(a)&&("?"!==n&&(n+=";"),n+=a+"="+e[a]);return n},displayDNABlocks:function(e,t,n,a,r){if(!e)return'
Please place a valid subject into the DNA modifier.
';var o=e.split(""),i='
',s=1,l=1;for(var c in o)if(o.hasOwnProperty(c)&&"object"!=typeof o[c]){var u;u="UI"==r.toUpperCase()?{selectUIBlock:s,selectUISubblock:l}:{selectSEBlock:s,selectSESubblock:l};var d="linkActive";s==t&&l==n&&(d="selected"),i+='",c++,c%a==0&&c
"):l++}return i+="
"},cMirror:function(e){CodeMirror.fromTextArea(document.getElementById(e),{lineNumbers:!0,indentUnit:4,indentWithTabs:!0,theme:"lesser-dark"})}};return{addHelpers:function(){NanoTemplate.addHelpers(e)},removeHelpers:function(){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.removeHelper(t)}}}(),NanoStateDefaultClass.inheritsFrom(NanoStateClass);var NanoStateDefault=new NanoStateDefaultClass;NanoStatePDAClass.inheritsFrom(NanoStateClass);var NanoStatePDA=new NanoStatePDAClass;NanoStatePDAClass.prototype.onUpdate=function(e){NanoStateClass.prototype.onUpdate.call(this,e);var t=this;try{if(null!=e.data.app){var n=e.data.app.template;null!=n&&n!=t.current_template?$.when($.ajax({url:n+".tmpl",cache:!1,dataType:"text"})).done(function(a){a+='
';try{NanoTemplate.addTemplate("app",a),NanoTemplate.resetTemplate("app"),$("#uiApp").html(NanoTemplate.parse("app",e)),t.current_template=n,2==e.config.status&&($("#uiApp .linkActive").addClass("linkPending"),$("#uiApp .linkActive").oneTime(400,"linkPending",function(){$("#uiApp .linkActive").removeClass("linkPending inactive")}))}catch(r){return void reportError("ERROR: An error occurred while loading the PDA App UI: "+r.message)}}).fail(function(){reportError("ERROR: Loading template app("+n+") failed!")}):NanoTemplate.templateExists("app")&&$("#uiApp").html(NanoTemplate.parse("app",e))}}catch(a){return void reportError("ERROR: An error occurred while rendering the PDA App UI: "+a.message)}},NanoStateClass.prototype.key=null,NanoStateClass.prototype.layoutRendered=!1,NanoStateClass.prototype.contentRendered=!1,NanoStateClass.prototype.mapInitialised=!1,NanoStateClass.prototype.isCurrent=function(){return NanoStateManager.getCurrentState()==this},NanoStateClass.prototype.onAdd=function(e){NanoBaseCallbacks.addCallbacks(),NanoBaseHelpers.addHelpers()},NanoStateClass.prototype.onRemove=function(e){NanoBaseCallbacks.removeCallbacks(),NanoBaseHelpers.removeHelpers()},NanoStateClass.prototype.onBeforeUpdate=function(e){return e=NanoStateManager.executeBeforeUpdateCallbacks(e)},NanoStateClass.prototype.onUpdate=function(e){try{(!this.layoutRendered||e.config.hasOwnProperty("autoUpdateLayout")&&e.config.autoUpdateLayout)&&($("#uiLayout").html(NanoTemplate.parse("layout",e)),this.layoutRendered=!0),(!this.contentRendered||e.config.hasOwnProperty("autoUpdateContent")&&e.config.autoUpdateContent)&&($("#uiContent").html(NanoTemplate.parse("main",e)),this.contentRendered=!0),NanoTemplate.templateExists("mapContent")&&(this.mapInitialised||($("#uiMap").draggable(),$("#uiMapTooltip").off("click").on("click",function(e){e.preventDefault(),$(this).fadeOut(400)}),this.mapInitialised=!0),$("#uiMapContent").html(NanoTemplate.parse("mapContent",e)),e.config.hasOwnProperty("showMap")&&e.config.showMap?($("#uiContent").addClass("hidden"),$("#uiMapWrapper").removeClass("hidden")):($("#uiMapWrapper").addClass("hidden"),$("#uiContent").removeClass("hidden"))),NanoTemplate.templateExists("mapHeader")&&$("#uiMapHeader").html(NanoTemplate.parse("mapHeader",e)),NanoTemplate.templateExists("mapFooter")&&$("#uiMapFooter").html(NanoTemplate.parse("mapFooter",e))}catch(t){return void reportError("ERROR: An error occurred while rendering the UI: "+t.message)}},NanoStateClass.prototype.onAfterUpdate=function(e){NanoStateManager.executeAfterUpdateCallbacks(e)},NanoStateClass.prototype.alertText=function(e){alert(e)};var NanoTemplate=function(){var e={},t={},n={},a={},r=function(){e=$("body").data("templateData"),null==e&&reportError("Error: Template data did not load correctly."),o()},o=function(){var t=Object.size(e);if(!t)return void $(document).trigger("templatesLoaded");for(var n in e)if(e.hasOwnProperty(n))return void $.when($.ajax({url:e[n],cache:!1,dataType:"text"})).done(function(t){t+='
';try{NanoTemplate.addTemplate(n,t)}catch(a){return void reportError("ERROR: An error occurred while loading the UI: "+a.message)}delete e[n],o()}).fail(function(){reportError("ERROR: Loading template "+n+"("+e[n]+") failed!")})},i=function(){for(var e in t)try{n[e]=doT.template(t[e],null,t)}catch(a){reportError(a.message)}};return{init:function(){r()},addTemplate:function(e,n){t[e]=n},templateExists:function(e){return t.hasOwnProperty(e)},resetTemplate:function(e){n[e]=null},parse:function(e,r){if(!n.hasOwnProperty(e)||!n[e]){if(!t.hasOwnProperty(e))return reportError('ERROR: Template "'+e+'" does not exist in _compiledTemplates!'),"

Template error (does not exist)

";i()}return"function"!=typeof n[e]?(reportError(n[e]),reportError('ERROR: Template "'+e+'" failed to compile!'),"

Template error (failed to compile)

"):n[e].call(this,r.data,r.config,a)},addHelper:function(e,t){return jQuery.isFunction(t)?void(a[e]=t):void reportError("NanoTemplate.addHelper failed to add "+e+" as it is not a function.")},addHelpers:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoTemplate.addHelper(t,e[t])},removeHelper:function(e){helpers.hasOwnProperty(e)&&delete a[e]}}}(),NanoWindow=function(){var e,t,n,a,r,o,i=function(e,t){NanoUtility.winset("pos",e+","+t)},s=function(e,t){NanoUtility.winset("size",e+","+t)},l=function(){NanoStateManager.getData().config.user.fancy&&(c(),u(),d(),f())},c=function(){NanoUtility.winset("titlebar",0),NanoUtility.winset("can-resize",0),$(".fancy").show(),$("#uiTitleFluff").css("right","65px")},u=function(){var e=function(){return NanoUtility.close()},t=function(){return NanoUtility.winset("is-minimized","true")};$(".close").on("click",function(t){e()}),$(".minimize").on("click",function(e){t()})},d=function(){$("#uiTitleWrapper").on("mousemove",function(e){p()}),$("#uiTitleWrapper").on("mousedown",function(t){e=!0}),$("#uiTitleWrapper").on("mouseup",function(a){e=!1,t=null,n=null})},p=function(a){var r,o;null==a&&(a=window.event),e&&(null==t&&(t=a.screenX),null==n&&(n=a.screenY),r=a.screenX-t+window.screenLeft,o=a.screenY-n+window.screenTop,i(r,o),t=a.screenX,n=a.screenY)},f=function(){$("#resize").on("mousemove",function(e){m()}),$("#resize").on("mousedown",function(e){a=!0}),$("#resize").on("mouseup",function(e){a=!1})},m=function(){var e,t;null==event&&(event=window.event),a&&(null==r&&(r=event.screenX),null==o&&(o=event.screenY),e=Math.max(150,event.screenX-r+window.innerWidth),t=Math.max(150,event.screenY-o+window.innerHeight),s(e,t),r=event.screenX,o=event.screenY)};return{init:function(){$(document).on("templatesLoaded",function(){l()})}}}(); \ No newline at end of file diff --git a/nano/scripts/nano/nano_state_pda.js b/nano/scripts/nano/nano_state_pda.js index 6277d5669e0..13135046caf 100644 --- a/nano/scripts/nano/nano_state_pda.js +++ b/nano/scripts/nano/nano_state_pda.js @@ -1,21 +1,22 @@ NanoStatePDAClass.inheritsFrom(NanoStateClass); var NanoStatePDA = new NanoStatePDAClass(); -var pda_app_template = null; function NanoStatePDAClass() { this.key = 'pda'; this.key = this.key.toLowerCase(); + this.current_template = ""; NanoStateManager.addState(this); } NanoStatePDAClass.prototype.onUpdate = function(data) { NanoStateClass.prototype.onUpdate.call(this, data); + var state = this; try { if(data['data']['app'] != null) { var template = data['data']['app']['template']; - if(template != null && template != pda_app_template) { + if(template != null && template != state.current_template) { $.when($.ajax({ url: template + '.tmpl', cache: false, @@ -28,16 +29,16 @@ NanoStatePDAClass.prototype.onUpdate = function(data) { NanoTemplate.addTemplate('app', templateMarkup); NanoTemplate.resetTemplate('app'); $("#uiApp").html(NanoTemplate.parse('app', data)); - pda_app_template = template; + state.current_template = template; if(data['config']['status'] == 2) { $('#uiApp .linkActive').addClass('linkPending'); - $('#uiApp .linkActive').oneTime(300, 'linkPending', function () { + $('#uiApp .linkActive').oneTime(400, 'linkPending', function () { $('#uiApp .linkActive').removeClass('linkPending inactive'); }); } } catch(error) { - reportError('ERROR: An error occurred while loading the UI: ' + error.message); + reportError('ERROR: An error occurred while loading the PDA App UI: ' + error.message); return; } }) @@ -51,7 +52,7 @@ NanoStatePDAClass.prototype.onUpdate = function(data) { } } } catch(error) { - reportError('ERROR: An error occurred while rendering the UI: ' + error.message); + reportError('ERROR: An error occurred while rendering the PDA App UI: ' + error.message); return; } } \ No newline at end of file From 4f197cd48b76cab1825ab9f6ba198432804ceac0 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Fri, 12 Feb 2016 16:49:23 -0500 Subject: [PATCH 06/52] Also moved the pda stuff to a module --- .../items/devices/PDA => modules/pda}/PDA.dm | 0 .../items/devices/PDA => modules/pda}/ai.dm | 0 .../items/devices/PDA => modules/pda}/app.dm | 0 .../items/devices/PDA => modules/pda}/cart.dm | 0 .../devices/PDA => modules/pda}/cart_apps.dm | 0 .../devices/PDA => modules/pda}/chatroom.dm | 0 .../devices/PDA => modules/pda}/core_apps.dm | 0 .../devices/PDA => modules/pda}/messenger.dm | 0 .../PDA => modules/pda}/messenger_plugins.dm | 0 .../items/devices/PDA => modules/pda}/pdas.dm | 0 .../devices/PDA => modules/pda}/radio.dm | 0 .../devices/PDA => modules/pda}/utilities.dm | 0 paradise.dme | 24 +++++++++---------- 13 files changed, 12 insertions(+), 12 deletions(-) rename code/{game/objects/items/devices/PDA => modules/pda}/PDA.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/ai.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/app.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/cart.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/cart_apps.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/chatroom.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/core_apps.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/messenger.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/messenger_plugins.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/pdas.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/radio.dm (100%) rename code/{game/objects/items/devices/PDA => modules/pda}/utilities.dm (100%) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/modules/pda/PDA.dm similarity index 100% rename from code/game/objects/items/devices/PDA/PDA.dm rename to code/modules/pda/PDA.dm diff --git a/code/game/objects/items/devices/PDA/ai.dm b/code/modules/pda/ai.dm similarity index 100% rename from code/game/objects/items/devices/PDA/ai.dm rename to code/modules/pda/ai.dm diff --git a/code/game/objects/items/devices/PDA/app.dm b/code/modules/pda/app.dm similarity index 100% rename from code/game/objects/items/devices/PDA/app.dm rename to code/modules/pda/app.dm diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/modules/pda/cart.dm similarity index 100% rename from code/game/objects/items/devices/PDA/cart.dm rename to code/modules/pda/cart.dm diff --git a/code/game/objects/items/devices/PDA/cart_apps.dm b/code/modules/pda/cart_apps.dm similarity index 100% rename from code/game/objects/items/devices/PDA/cart_apps.dm rename to code/modules/pda/cart_apps.dm diff --git a/code/game/objects/items/devices/PDA/chatroom.dm b/code/modules/pda/chatroom.dm similarity index 100% rename from code/game/objects/items/devices/PDA/chatroom.dm rename to code/modules/pda/chatroom.dm diff --git a/code/game/objects/items/devices/PDA/core_apps.dm b/code/modules/pda/core_apps.dm similarity index 100% rename from code/game/objects/items/devices/PDA/core_apps.dm rename to code/modules/pda/core_apps.dm diff --git a/code/game/objects/items/devices/PDA/messenger.dm b/code/modules/pda/messenger.dm similarity index 100% rename from code/game/objects/items/devices/PDA/messenger.dm rename to code/modules/pda/messenger.dm diff --git a/code/game/objects/items/devices/PDA/messenger_plugins.dm b/code/modules/pda/messenger_plugins.dm similarity index 100% rename from code/game/objects/items/devices/PDA/messenger_plugins.dm rename to code/modules/pda/messenger_plugins.dm diff --git a/code/game/objects/items/devices/PDA/pdas.dm b/code/modules/pda/pdas.dm similarity index 100% rename from code/game/objects/items/devices/PDA/pdas.dm rename to code/modules/pda/pdas.dm diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/modules/pda/radio.dm similarity index 100% rename from code/game/objects/items/devices/PDA/radio.dm rename to code/modules/pda/radio.dm diff --git a/code/game/objects/items/devices/PDA/utilities.dm b/code/modules/pda/utilities.dm similarity index 100% rename from code/game/objects/items/devices/PDA/utilities.dm rename to code/modules/pda/utilities.dm diff --git a/paradise.dme b/paradise.dme index 7f480172d9a..f09ce2db369 100644 --- a/paradise.dme +++ b/paradise.dme @@ -673,18 +673,6 @@ #include "code\game\objects\items\devices\uplinks.dm" #include "code\game\objects\items\devices\violin.dm" #include "code\game\objects\items\devices\whistle.dm" -#include "code\game\objects\items\devices\PDA\ai.dm" -#include "code\game\objects\items\devices\PDA\app.dm" -#include "code\game\objects\items\devices\PDA\cart.dm" -#include "code\game\objects\items\devices\PDA\cart_apps.dm" -#include "code\game\objects\items\devices\PDA\chatroom.dm" -#include "code\game\objects\items\devices\PDA\core_apps.dm" -#include "code\game\objects\items\devices\PDA\messenger.dm" -#include "code\game\objects\items\devices\PDA\messenger_plugins.dm" -#include "code\game\objects\items\devices\PDA\PDA.dm" -#include "code\game\objects\items\devices\PDA\pdas.dm" -#include "code\game\objects\items\devices\PDA\radio.dm" -#include "code\game\objects\items\devices\PDA\utilities.dm" #include "code\game\objects\items\devices\radio\beacon.dm" #include "code\game\objects\items\devices\radio\electropack.dm" #include "code\game\objects\items\devices\radio\encryptionkey.dm" @@ -1604,6 +1592,18 @@ #include "code\modules\paperwork\photography.dm" #include "code\modules\paperwork\silicon_photography.dm" #include "code\modules\paperwork\stamps.dm" +#include "code\modules\pda\ai.dm" +#include "code\modules\pda\app.dm" +#include "code\modules\pda\cart.dm" +#include "code\modules\pda\cart_apps.dm" +#include "code\modules\pda\chatroom.dm" +#include "code\modules\pda\core_apps.dm" +#include "code\modules\pda\messenger.dm" +#include "code\modules\pda\messenger_plugins.dm" +#include "code\modules\pda\PDA.dm" +#include "code\modules\pda\pdas.dm" +#include "code\modules\pda\radio.dm" +#include "code\modules\pda\utilities.dm" #include "code\modules\pooling\pool.dm" #include "code\modules\power\apc.dm" #include "code\modules\power\cable.dm" From 45fd53159414a619138a1c87c675c5e43f46f114 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Fri, 12 Feb 2016 18:15:34 -0500 Subject: [PATCH 07/52] PDA soft gc / forceMove --- code/modules/pda/PDA.dm | 27 +++++++++++++++------------ code/modules/pda/app.dm | 4 ++++ code/modules/pda/cart.dm | 3 +++ code/modules/pda/radio.dm | 1 + 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/code/modules/pda/PDA.dm b/code/modules/pda/PDA.dm index b720bc5089f..596a6c9016d 100755 --- a/code/modules/pda/PDA.dm +++ b/code/modules/pda/PDA.dm @@ -123,7 +123,7 @@ var/global/list/obj/item/device/pda/PDAs = list() for(var/A in prog_list) var/datum/data/pda/P = A - + if(P.hidden) continue var/list/cat @@ -243,7 +243,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(ismob(T)) T = T.loc var/obj/item/weapon/cartridge/C = cartridge - C.loc = T + C.forceMove(T) if(scanmode in C.programs) scanmode = null if(current_app in C.programs) @@ -292,7 +292,7 @@ var/global/list/obj/item/device/pda/PDAs = list() M.put_in_hands(id) usr << "You remove the ID from the [name]." else - id.loc = get_turf(src) + id.forceMove(get_turf(src)) id = null /obj/item/device/pda/verb/verb_remove_id() @@ -329,7 +329,7 @@ var/global/list/obj/item/device/pda/PDAs = list() M.put_in_hands(O) usr << "You remove \the [O] from \the [src]." return - O.loc = get_turf(src) + O.forceMove(get_turf(src)) else usr << "This PDA does not have a pen in it." else @@ -344,14 +344,14 @@ var/global/list/obj/item/device/pda/PDAs = list() var/obj/item/I = user.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) user.drop_item() - I.loc = src + I.forceMove(src) id = I else var/obj/item/weapon/card/I = user.get_active_hand() if (istype(I, /obj/item/weapon/card/id) && I:registered_name) var/obj/old_id = id user.drop_item() - I.loc = src + I.forceMove(src) id = I user.put_in_hands(old_id) return @@ -361,7 +361,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(istype(C, /obj/item/weapon/cartridge) && !cartridge) cartridge = C user.drop_item() - cartridge.loc = src + cartridge.forceMove(src) cartridge.update_programs(src) update_shortcuts() user << "You insert [cartridge] into [src]." @@ -387,7 +387,7 @@ var/global/list/obj/item/device/pda/PDAs = list() user << "You put the ID into \the [src]'s slot." else if(istype(C, /obj/item/device/paicard) && !src.pai) user.drop_item() - C.loc = src + C.forceMove(src) pai = C user << "You slot \the [C] into [src]." else if(istype(C, /obj/item/weapon/pen)) @@ -396,7 +396,7 @@ var/global/list/obj/item/device/pda/PDAs = list() user << "There is already a pen in \the [src]." else user.drop_item() - C.loc = src + C.forceMove(src) user << "You slide \the [C] into \the [src]." /obj/item/device/pda/attack(mob/living/C as mob, mob/living/user as mob) @@ -426,13 +426,16 @@ var/global/list/obj/item/device/pda/PDAs = list() PDAs -= src var/T = get_turf(loc) if (id) - id.loc = T + id.forceMove(T) if(pai) - pai.loc = T + pai.forceMove(T) + current_app = null + scanmode = null for(var/A in programs) qdel(A) + programs.Cut() if(cartridge) - cartridge.loc = T + cartridge.forceMove(T) return ..() // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP diff --git a/code/modules/pda/app.dm b/code/modules/pda/app.dm index 5d322b80c2f..1f8b37d97fa 100644 --- a/code/modules/pda/app.dm +++ b/code/modules/pda/app.dm @@ -5,6 +5,10 @@ var/category = "General" // the category to list it in on the main menu var/obj/item/device/pda/pda // if this is null, and the app is running code, something's gone wrong +/datum/data/pda/Destroy() + pda = null + return ..() + /datum/data/pda/proc/start() diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index fafcbd2a990..47b27722738 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -21,10 +21,13 @@ /obj/item/weapon/cartridge/Destroy() if(radio) qdel(radio) + radio = null for(var/A in programs) qdel(A) + programs.Cut() for(var/A in messenger_plugins) qdel(A) + messenger_plugins.Cut() return ..() /obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda) diff --git a/code/modules/pda/radio.dm b/code/modules/pda/radio.dm index 6a0bba06bdf..62b8e85f008 100644 --- a/code/modules/pda/radio.dm +++ b/code/modules/pda/radio.dm @@ -26,6 +26,7 @@ /obj/item/radio/integrated/Destroy() if(radio_controller) radio_controller.remove_object(src, control_freq) + hostpda = null return ..() /obj/item/radio/integrated/proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3,var/key4, var/value4, s_filter) From 19108df3905a9d8cc2a2fdfcaa80f95044644d0c Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Fri, 12 Feb 2016 20:19:45 -0500 Subject: [PATCH 08/52] Some tweaks to bot and power apps --- code/game/machinery/computer/power.dm | 3 +++ code/modules/pda/cart_apps.dm | 8 +++++--- code/modules/pda/radio.dm | 2 -- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index a549dd5b64d..ca3c1f84410 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -16,6 +16,9 @@ power_monitors += src power_monitors = sortAtom(power_monitors) power_monitor = new(src) + +/obj/machinery/computer/monitor/initialize() + ..() powermonitor_repository.update_cache() powernet = find_powernet() diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index 6844baec505..0b81365f7d6 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -95,6 +95,8 @@ var/obj/machinery/computer/monitor/powmonitor = null /datum/data/pda/app/power/update_ui(mob/user as mob, list/data) + update = PDA_APP_UPDATE_SLOW + if (powmonitor && !isnull(powmonitor.powernet)) data["records"] = list( "powerconnected" = 1, @@ -114,8 +116,10 @@ if("Power Select") var/pref = href_list["target"] powmonitor = locate(pref) + update = PDA_APP_UPDATE if("Back") powmonitor = null + update = PDA_APP_UPDATE /datum/data/pda/app/crew_records var/datum/data/record/general_records = null @@ -205,14 +209,13 @@ icon = "rss" template = "pda_secbot" category = "Security" - update = PDA_APP_UPDATE_SLOW /datum/data/pda/app/secbot_control/update_ui(mob/user as mob, list/data) var/botsData[0] var/beepskyData[0] if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/beepsky)) var/obj/item/radio/integrated/beepsky/SC = pda.cartridge.radio - beepskyData["active"] = SC.active ? SC.active.name : null + beepskyData["active"] = SC.active ? sanitize(SC.active.name) : null has_back = SC.active ? 1 : 0 if(SC.active && !isnull(SC.botstatus)) var/area/loca = SC.botstatus["loca"] @@ -254,7 +257,6 @@ icon = "truck" template = "pda_mule" category = "Quartermaster" - update = PDA_APP_UPDATE_SLOW /datum/data/pda/app/mule_control/update_ui(mob/user as mob, list/data) var/muleData[0] diff --git a/code/modules/pda/radio.dm b/code/modules/pda/radio.dm index 62b8e85f008..02a5dc996e2 100644 --- a/code/modules/pda/radio.dm +++ b/code/modules/pda/radio.dm @@ -78,7 +78,6 @@ if("control") active = locate(href_list["bot"]) - botstatus = list(mode = -1) spawn(0) post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) @@ -177,7 +176,6 @@ switch(href_list["op"]) if("control") - botstatus = list(mode = -1) active = locate(href_list["bot"]) if("scanbots") // find all bots From cae8bbcdae4acc42e6e9105b294795e573092de3 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Fri, 12 Feb 2016 20:55:30 -0500 Subject: [PATCH 09/52] Gave the captain a fountain pen and the rest of the heads multicolored pens. --- _maps/map_files/cyberiad/cyberiad.dmm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 5a07eb647ca..0342c0a4018 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -168,7 +168,7 @@ "adl" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/unary/vent_pump,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/security/hos) "adm" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/security/hos) "adn" = (/obj/machinery/door_control{id = "Prison Gate"; name = "Prison Wing Lockdown"; pixel_x = -28; pixel_y = 7; req_access_txt = "2"},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -28; pixel_y = -3; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) -"ado" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) +"ado" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/multi,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "adp" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 10},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/effect/decal/warning_stripes/east,/obj/item/clothing/glasses/welding,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/podbay) "adq" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/engine,/area/security/podbay) "adr" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/security/podbay) @@ -3551,6 +3551,7 @@ "bqo" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 1"; dir = 2; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqp" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqq" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) +"bqr" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 10},/obj/item/weapon/pen/multi/fountain,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door_control{id = "captainofficedoor"; name = "Office Door"; normaldoorcontrol = 1; pixel_x = 5; pixel_y = -3; req_access_txt = "20"},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqs" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqt" = (/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/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/engine/gravitygenerator) "bqu" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/hallway/primary/starboard/west) @@ -3558,6 +3559,7 @@ "bqw" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/hallway/primary/starboard/west) "bqx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "bqy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) +"bqz" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/multi,/obj/item/weapon/pen/multi,/obj/item/device/megaphone,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bqA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "bqB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "bqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atm{pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) @@ -3733,7 +3735,7 @@ "btQ" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/wood,/area/bridge/meeting_room) "btR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "btS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) -"btT" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 10},/obj/item/weapon/pen{pixel_y = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door_control{id = "captainofficedoor"; name = "Office Door"; normaldoorcontrol = 1; pixel_x = 5; pixel_y = -3; req_access_txt = "20"},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"btT" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/structure/table/glass,/obj/item/weapon/pen/multi,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "btU" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/captain,/turf/simulated/floor/wood,/area/crew_quarters/captain) "btV" = (/obj/structure/table/woodentable,/obj/item/weapon/hand_tele,/turf/simulated/floor/wood,/area/crew_quarters/captain) "btW" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -4594,7 +4596,7 @@ "bKt" = (/obj/machinery/vending/cart,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bKu" = (/obj/structure/closet/secure_closet/hop2,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bKv" = (/turf/simulated/floor/plasteel,/area/crew_quarters/heads) -"bKw" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/megaphone,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) +"bKw" = (/obj/item/weapon/paper_bin,/obj/item/weapon/folder/white{pixel_y = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/food/drinks/coffee,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/stamp/cmo,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/table/glass,/obj/item/weapon/pen/multi,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo) "bKx" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bKy" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bKz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/crew_quarters/heads) @@ -4967,7 +4969,7 @@ "bRC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bRD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bRE" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) -"bRF" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) +"bRF" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter/zippo,/obj/item/weapon/pen/multi,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "bRG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRH" = (/obj/machinery/computer/mecha,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/rack,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) @@ -5414,7 +5416,6 @@ "cah" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) "cai" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cmo) "caj" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cmo) -"cak" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/folder/white{pixel_y = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/food/drinks/coffee,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/stamp/cmo,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo) "cal" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) "cam" = (/obj/machinery/photocopier,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay2) "can" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/medbay2) @@ -7178,7 +7179,6 @@ "cId" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cIe" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/photocopier/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cIf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) -"cIg" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/pen,/obj/item/weapon/lighter/zippo,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cIh" = (/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) "cIi" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) "cIj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) @@ -8838,7 +8838,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqnbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqyaHkbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbpIbpIbpIbsqbnmbsrbpNboIbpObssbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddZddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbtTbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukafkbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbqrbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukafkbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjodjpdjpdjidjpdjpdjpbtqdjqaInaInaInaKBbuvbrXbuwbuxbuxbuxbuybrZbejbuzbuAbuBbuCbuDblCbmUbuEbosbuFborbuGbuHbuIbuJbuKbuLbuLbuMbuLbuNbuObngbuPbuQbuRbuSbuTbuUbuVbnmbuWbpIbpIbuXbuYbuZbtMbpNbvabnqbvbbvcbvdbvebvfbvgbvhbnqbnqbvibvjbvkbvlbvmbvlbvnbvjbikbvobnAbvpbvqbvrbvsbtXbqbbvtbnAbxebvwbxfbucbzcbvybvzbvAbvBbvCbvDbvEbvFbvGbvHbvHbvGbvIbvJbvKbuhbvLbvMbvNbvObuhbvPbvQbvRbvSbvTbvUbvUbvVbukafNbvXbvYbvZbvYbwabwabupbwbbwcbwdbupbwebwfbwebupbwgbtfburbusbwhbwibwhbusbwjbwkbusdeicngbxXbwobikbikbikbikbikbikbikbikbikbikbqUddXddZddYdejbqUbikbqUdekdekdekdekbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjrbtqbtqbtqbtqbtqbtqbtqbtqdjqbikbikaInbwqbdFbwrbrXbwsbrXbwtbuxbwubwvbrZbwwbwxbwybwzbuDblCblCblCblCblCblCbwAbwBbwCbwDbwEbngbngbngbngbngbngbngbwFbngbngbngbwGbngbwHbwIbwJbpIbpIbpIbwKbtLbwLbpNbwMbnqbwNbvcbnrbnrbnrbnqbwObnqbwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbnAbxabqbbxbbxcbtXbxdbqbbnAbzbbxgbANbucbxhbxibxjbxkbxlbxmbxnbvHbvHbvHbvHbvHbvHbvHbvHbxobxpbxqbxrbxsbxtbuhbxubxvbxwbxxbxybxzbxvbxAbukbDdbvXbxCbxDbxEbxFbxFbxGbxHbxIbxJbxKbxLbxMbxNbupbxObxPbxQbusbxRbxSbxTbxUbxUbxVbusbxWbxXbxYbwobikbikbikbikbikbikbikbikbikbikbDybtldemdemdemdenbikdeodepdepdepbtlbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaInaInaInaInaInaInaInaKBaJrbyabrXbybbycbydbyebyebyfbygbyhbyibyibyjbykbtzbtzbtzbtzbtzbtzbylbymbymbynbyobngbypbyqbyrbysbytbyubyvbywbngbyxbyybyzbuVbtLbwJbpIbpIbyAbnmbnmbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObwXbyPbyQbyPbyQbyRbwXbwYbySbyTbyUbyVbyWbyXbyYbyZbzabyTbAObvwbvwbucbzebzdcSCbzfbzgbucbxnbvHbvHbvHbvHbvHbvHbvHbzhbzibzjbzkbzlbxqbzmbuhbznbzobzpbxxbxAbxzbzqbzrbukbIbbztbzubzvbzvbzwbzxbzybzzbzAbzAbzAbzBbzAbzCbzDbzEbzFbzGbzHbzIbzJbzKbzKbzKbzLbusbzMbxXbzNbwobikbikbikbikbikbikbikbikbikbikbikbDyderderderbDzbikbDyderderderbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8848,17 +8848,17 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjydjydjydjAdjzdjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbFobFpbFqbFrbFrbFrbFpbAebyvbAfbAebAebAgbFsbFtbFubFvbFwbFxbFybpIbpIbFzbtLbDXbDYbFAbFBbFCbFDbFEbFFbFGbFHbFIbCpbFJbFKbwRbFLbFMbFNbFObFPbwXbwYbFQbAJbFRbFSbFTbEobFUbEobFVbErbJebvwbKObucbFYbFZbGabGbbGcbGdbGebGfbGgbGgbGhbGibGgbGgbGjbGkbGlbGmbGnbGobGpbGqbGrbGsbGtbGubGvbGwbKhbIebKjbKibvXbGBbGCbGDbGEbGFbxGbGGbESbESbGHbGIbEUbGJbupbGKbGKbGLbusbGMbGNbGObGPbxUbGQbusbzMbGRbwobikbikbikbikbikaabbGUbIybFibFkbFibKkbDBaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjCdjEdjDdjGdjFdjIdjHdjFdjJdjLdjKdjydjydjBbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbGWbmrbNkbmrbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbEibHubHvbHwbHxbvjbikbEkbHybHzbHybHybHybHybHybHAbHybKPbvwbKObucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbLibLCbLBbNdbNcbNebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbGxbLDbLDbLDbLDbLDbGxbFhbFkbFibFkbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjHdjHdjHdjMdjFdjNdjNdjFdjOdjHdjHdjQdjPdjydjBbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbLFbKmbIAbKmbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbIDbngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjbikbEkbHybIWbIXbIYbIZbJabJbbJcbJdbMhbvwbKObCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwchEbIecnfcjubvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbIxbJFbJHbKgbKlbFfbDBbNhbDBbFfbLEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjSdjRdjUdjTdjVdjFdjWdjHdjXdjHdjHdjHdjHdjHdjMdjFbikbikbikbikbikbikbikbikbikbikdewdeCdevdevdevcOfdewbFnbBRbBRdezbAebFqbAebAebAebAebAebyvbAfbICbKobngbKpbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbKwbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbMibvwbMjbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbcchbLbbLcbLbbLdbLdbLebLfbLgbLhbLhcpLbLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLAbEObGAbHZbGxbGzbGzbGzbIabGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjSdjRdjUdjTdjVdjFdjWdjHdjXdjHdjHdjHdjHdjHdjMdjFbikbikbikbikbikbikbikbikbikbikdewdeCdevdevdevcOfdewbFnbBRbBRdezbAebFqbAebAebAebAebAebyvbAfbICbKobngbKpbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbqzbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbMibvwbMjbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbcchbLbbLcbLbbLdbLdbLebLfbLgbLhbLhcpLbLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLAbEObGAbHZbGxbGzbGzbGzbIabGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdjHdjHdjHdjHdjHdkidjHdjHdjFdjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdeEdeDdeGdeDbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbNrbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMabikbikbikbHybNNbNObNPbNQbMebMfbMgbHybPibNUbQObPjbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHcsjbOJbOKbOLbNabOMbONbikbikbikbGxbORbJFbOPbOQbKgbOObNibGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMbONbikbikbikbGxbNfbNgbGxbKgbGxbGxbKgbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbRFbRGbRHbRIbRJbRKbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbtTbRGbRHbRIbRJbRKbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdeOdeNdePdePdePdeNdeQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSFbSGbLgbSHbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUbSVbSWbSXbSYbSZbTabTbbTcbTdbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybUzbNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbVcbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZbWDbWEbWFbWGbWHbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkQdkDdkDdkRdjFdjHdjHdjFdkSdjHdjHdkUdkTdjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbUGbUEbUEdeycOWbTkbTkdeAbZAbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbSobYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkWdkVdkXdjFdjHdkYdjFdkZdladjHdjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUFbUFbUFbQebUIbYfbYebZzbZAbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajcakcalcamcancaocapcaqcarcascasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikcaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkWdkVdkXdjFdjHdkYdjFdkZdladjHdjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUFbUFbUFbQebUIbYfbYebZzbZAbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajbKwcalcamcancaocapcaqcarcascasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikcaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydjydjydjydjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbTgbWjbYbbWkbTgbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbacbacbbcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlccicbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcckccjcdqcclcfeccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabbikbikbikbikbikbWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbYcbOTbYgbOTbZxbikaabbikbOVbOVbUIbUIbUIbOVbikbUTccAccBccCccDbZFccEccFbUVccGccHccIbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcffcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabbikbikbikbikaabbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabcejbUTbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKceLceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfgbMmbMmcfichOcgHceYchVcfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8886,7 +8886,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcEraabaabaabcEraabbikaabcEraabbikbikbikbikbikbikbikbikcDccDccDccEscEtcEucEvcEwcExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzcEMcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIcDVdcsclUcDWcDYczVcEbcEaclUcusbGycITcoAbikckPcwtcwucwvcFjcARczbcFkcJJcJIcJKcJKcFocFpcFqcJLckPaabaabaabbikbikbikbikbikbikbwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcyrcFNcDucFPcFOcFQcFScFTcSpcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAbikckPcxOcxPcxOcGAcxRcqUcGBcJPcGCcqUcqUcGDcwAcwAcwAckPbikbikaabaabbikbikbikbikbikbwocyKcvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcGFaabbikaabcGFaabbikaabcGFaabbikbikbikbikbikbikbikbikcDccDccDccGGcGHcFMcDdcGJcfRcGKcExcExcExcExcGLcExcFGcECcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcFYcELcDwcHccHdcDzcDzcHecBCcHfcHgcDFcHhcCAcHicHjcHkcHlcHmcHncHocHpcHocHqaabcCKcCKcCKcCKcCKcHBcoAcEhclUcIJcyVcyYcyXcEecEccEgcEfcHwcGucHZczVcIRcIQclUcusbGycJRcoAbikckPcxOcxOcxOcFjcHEcHFcHGcJScHIcCZcCZcCZcHJcHKcHLcHMbikbikbikaabaabbikbikbikbikbwobwocvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaabaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabcDccDdcDdcDdcDdcHPcHQcHRcfRcHScfRcfRcEBcHTcfRcECcHUcHVcGOcHWcFNcHXcHYcIacIacIbcIccIdcIecIfcIgcIbcIhcIicIjcIkcIlcImcIncIocIpcIqcGfcIrcIscItcIucIvcIwcIxcIycIzcIAcIBcICcIDcDPcDQcIEcIFcIFcCKcHBcoAcEhclUclUclUclUclUcJhcANcBRcJQcMccBScMecMdcMCcBVclUcuscGqcGrcGrcGrcJTcJTcJTcJTcJTcJUcKTcKbcKUcIUczbcIVczbcIWczbcIXcHMbikbikbikbikaabaabbikbikbikbikbwocvzbwoaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaabaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabcDccDdcDdcDdcDdcHPcHQcHRcfRcHScfRcfRcEBcHTcfRcECcHUcHVcGOcHWcFNcHXcHYcIacIacIbcIccIdcIecIfbRFcIbcIhcIicIjcIkcIlcImcIncIocIpcIqcGfcIrcIscItcIucIvcIwcIxcIycIzcIAcIBcICcIDcDPcDQcIEcIFcIFcCKcHBcoAcEhclUclUclUclUclUcJhcANcBRcJQcMccBScMecMdcMCcBVclUcuscGqcGrcGrcGrcJTcJTcJTcJTcJTcJUcKTcKbcKUcIUczbcIVczbcIWczbcIXcHMbikbikbikbikaabaabbikbikbikbikbwocvzbwoaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikczocHOczqaabczocHOczqbikczocHOczqbikbikbikaabbikbikbikbikaabaabaabbikbikaabaabcJbcJbcJbcJbcJbcJbcJbcJccJbcJbcECcJdcJecGOcHWcFNcJfcFNcJgcLhcDtcJicJjcFWcJkcFRcDtcJmcDzcDwcJncJocJpcIncJqcJrcJscJtcJucJvcJwcJtcJxcJycJzcJAcDFcJBcJCcJDcJEaabcEVcJFcJGcJHcCKcHBcoDcKWcKVcKVcKVcKXclUcNDcyLcCLcNEcyScCMcyTcyTcyScCNclUcuscGvbVibGycKYcKZcoAbikbikckPcJVcJWcJXcJYcJVcJWcJZcKacJVcJWcLackPaabaabaabaabaabaabaabaabaabaabbwocvzbwobwobwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjcbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabbikbikaabaabaabcJbcKjcKjcKkcGIcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcOtcCOczVcOBcyScPocPMcyTcPVcPQclUcuscGvbVibGycyHbGycoAbikbikckPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabbikbikbikbikbikbikbikbikbwocvzbxXbxXbwoaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqaabczocHOczqaabaabaabbikaabbikbikaabaabbikbikbikaabbikbikcJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcPYczVcDXcQgcDZcQMcRwcyTdbkcYuclUcuscGvczhbGychCcITcoAbikbikckPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPbikaabaabbikbikbikbikbikbikbikbwocLccyJbxXbwobwobwocJNcJNaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik From b71905dbb1f16a891716acb32dbd8686d6d43207 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 12 Feb 2016 18:43:57 -0800 Subject: [PATCH 10/52] Updates the admin's buildmode to use "plasteel" floor --- code/modules/admin/buildmode.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index b7b2a0d3683..31e1842186e 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -224,7 +224,7 @@ if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") ) var/turf/T = object if(istype(object,/turf/space)) - T.ChangeTurf(/turf/simulated/floor) + T.ChangeTurf(/turf/simulated/floor/plasteel) else if(istype(object,/turf/simulated/floor)) T.ChangeTurf(/turf/simulated/wall) else if(istype(object,/turf/simulated/wall)) @@ -235,7 +235,7 @@ log_admin("Build Mode: [key_name(usr)] deleted [object] at ([object.x],[object.y],[object.z])") if(istype(object,/turf/simulated/wall)) var/turf/T = object - T.ChangeTurf(/turf/simulated/floor) + T.ChangeTurf(/turf/simulated/floor/plasteel) else if(istype(object,/turf/simulated/floor)) var/turf/T = object T.ChangeTurf(/turf/space) From 75924d00d1eeb229c77b1a5fd95c0100c59372b1 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Fri, 12 Feb 2016 23:18:24 -0500 Subject: [PATCH 11/52] Made signaller radio init reliably for starting player --- code/modules/pda/cart.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index 47b27722738..c96a8cfb11c 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -17,6 +17,11 @@ /obj/item/weapon/cartridge/New() if(ticker && ticker.current_state >= GAME_STATE_SETTING_UP) initialize() + +/obj/item/weapon/cartridge/initialize() + if(radio) + radio.initialize() + ..() /obj/item/weapon/cartridge/Destroy() if(radio) From 2f9918b4b6726cd3349ba496372cda3a8fceb403 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Sat, 13 Feb 2016 08:41:57 +0000 Subject: [PATCH 12/52] Fixes walking on water fixes #3589 missed a 0 in the arguments --- code/game/turfs/simulated.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 15751f0a9d8..9c06ba63ad4 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -97,7 +97,7 @@ switch (src.wet) if(TURF_WET_WATER) - if (!(M.slip("wet floor", 4, 2, 1))) + if (!(M.slip("wet floor", 4, 2, 0, 1))) M.inertia_dir = 0 return From b21f5b11467e8f4e0bafbde9f303546a090f550f Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sat, 13 Feb 2016 19:10:59 -0500 Subject: [PATCH 13/52] Updates changelog --- html/changelog.html | 50 +++++++++++++++++++++++ html/changelogs/.all_changelog.yml | 47 +++++++++++++++++++++ html/changelogs/AutoChangeLog-pr-3547.yml | 10 ----- html/changelogs/AutoChangeLog-pr-3556.yml | 4 -- html/changelogs/AutoChangeLog-pr-3557.yml | 4 -- html/changelogs/AutoChangeLog-pr-3559.yml | 5 --- html/changelogs/AutoChangeLog-pr-3560.yml | 4 -- html/changelogs/AutoChangeLog-pr-3568.yml | 4 -- html/changelogs/AutoChangeLog-pr-3569.yml | 12 ------ html/changelogs/AutoChangeLog-pr-3575.yml | 8 ---- html/changelogs/AutoChangeLog-pr-3576.yml | 5 --- html/changelogs/AutoChangeLog-pr-3584.yml | 4 -- 12 files changed, 97 insertions(+), 60 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3547.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3556.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3557.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3559.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3560.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3568.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3569.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3575.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3576.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3584.yml diff --git a/html/changelog.html b/html/changelog.html index 1ee52cfb38c..436cd9f76d4 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,56 @@ -->
+

13 February 2016

+

Crazylemon64 updated:

+
    +
  • Relaxes the check on what atoms you can follow to any movable atom
  • +
  • Mages are now more ragin
  • +
  • Admins can now adjust the total number of wizards at runtime by tweaking either max_mages, or players_per mage
  • +
+

DaveTheHeadcrab updated:

+
    +
  • Adds new worn icons for duffelbags to better reflect their size, compliments of WJohn at /tg/
  • +
+

FalseIncarnate updated:

+
    +
  • Adds burritos, made from cutlets, beans, rice, capsacin oil (hotsauce), cheese, and flat dough (because we lack proper tortillas) in the microwave.
  • +
  • Adds chimichangas. You know you want a deep-fried burrito.
  • +
+

Fox McCloud updated:

+
    +
  • Updates some spell icons with better/higher quality icons
  • +
  • Updates unarmed attacks to allow for more customization
  • +
  • Updates martial arts so they factor in specie's attack messages and sounds
  • +
  • Re-balances Sleeping Carp fighting style
  • +
  • Re-balances Bo Staff
  • +
  • Rebalances Golem: they should now be spaceproof, fire+cold proof, rad proof, virus immune, clonable, parapen+syringe gun immune, deal increased melee damage. Their armor has been reduced to 55 melee across the board, their slip immunity removed, pain immunity removed, and they're slightly slower
  • +
  • Fixes Ei Nath generating two brains
  • +
  • Ensures the Necromatic Stone generates actual skeletons
  • +
  • Can now strip PDA/IDs from Golems
  • +
  • Fixes sleeping carp grab not being an instant aggressive grab
  • +
  • Fixes an exploit with declaring war on the station
  • +
+

KasparoVy updated:

+
    +
  • Orange and purple bandanas for all station species.
  • +
  • The ability to colour bandanas with a crayon in a washing machine.
  • +
  • Refactors the bandana adjustment system.
  • +
  • Minor adjustments to Tajaran and Unathi bandana east/west sprites.
  • +
  • Adjusting a bandana will now take if off of your head/face and put it in an available hand. If both hands are available, it goes in the selected hand.
  • +
  • Adjusting a coloured bandana will no longer revert it to the original coloured icons anymore.
  • +
  • Adjusting a bandana from mask-style to hat-style means the bandana won't obscure your identity anymore.
  • +
  • Greys now use re-positioned smokeables. They no longer smoke out the eyes.
  • +
+

TheDZD updated:

+
    +
  • Fixes spacepods being able to shoot through walls.
  • +
  • Lowers spacepod weapons fire delay.
  • +
  • Increases spacepod weapons energy costs.
  • +
  • Makes spacepods move at speeds not rivaling those of photon beams. They are now a hair bit faster than a person with a jetpack.
  • +
  • Reduces battery costs for spacepod movement.
  • +
+

10 February 2016

Crazylemon64 updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index b296bd4a74f..20d699e2a5b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -473,3 +473,50 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: Adds shadowling thrall jobbans. - rscadd: Jobbanned players who are converted to shadowling thrall, revolutionary, or cultist will have the control of their body offered up to eligible ghosts. +2016-02-13: + Crazylemon64: + - tweak: Relaxes the check on what atoms you can follow to any movable atom + - tweak: Mages are now more ragin + - tweak: Admins can now adjust the total number of wizards at runtime by tweaking + either max_mages, or players_per mage + DaveTheHeadcrab: + - rscadd: Adds new worn icons for duffelbags to better reflect their size, compliments + of WJohn at /tg/ + FalseIncarnate: + - rscadd: Adds burritos, made from cutlets, beans, rice, capsacin oil (hotsauce), + cheese, and flat dough (because we lack proper tortillas) in the microwave. + - rscadd: Adds chimichangas. You know you want a deep-fried burrito. + Fox McCloud: + - tweak: Updates some spell icons with better/higher quality icons + - tweak: Updates unarmed attacks to allow for more customization + - tweak: Updates martial arts so they factor in specie's attack messages and sounds + - tweak: Re-balances Sleeping Carp fighting style + - tweak: Re-balances Bo Staff + - tweak: 'Rebalances Golem: they should now be spaceproof, fire+cold proof, rad + proof, virus immune, clonable, parapen+syringe gun immune, deal increased melee + damage. Their armor has been reduced to 55 melee across the board, their slip + immunity removed, pain immunity removed, and they''re slightly slower' + - bugfix: Fixes Ei Nath generating two brains + - bugfix: Ensures the Necromatic Stone generates actual skeletons + - bugfix: Can now strip PDA/IDs from Golems + - bugfix: Fixes sleeping carp grab not being an instant aggressive grab + - bugfix: Fixes an exploit with declaring war on the station + KasparoVy: + - rscadd: Orange and purple bandanas for all station species. + - rscadd: The ability to colour bandanas with a crayon in a washing machine. + - tweak: Refactors the bandana adjustment system. + - tweak: Minor adjustments to Tajaran and Unathi bandana east/west sprites. + - tweak: Adjusting a bandana will now take if off of your head/face and put it in + an available hand. If both hands are available, it goes in the selected hand. + - bugfix: Adjusting a coloured bandana will no longer revert it to the original + coloured icons anymore. + - bugfix: Adjusting a bandana from mask-style to hat-style means the bandana won't + obscure your identity anymore. + - rscadd: Greys now use re-positioned smokeables. They no longer smoke out the eyes. + TheDZD: + - bugfix: Fixes spacepods being able to shoot through walls. + - tweak: Lowers spacepod weapons fire delay. + - tweak: Increases spacepod weapons energy costs. + - tweak: Makes spacepods move at speeds not rivaling those of photon beams. They + are now a hair bit faster than a person with a jetpack. + - tweak: Reduces battery costs for spacepod movement. diff --git a/html/changelogs/AutoChangeLog-pr-3547.yml b/html/changelogs/AutoChangeLog-pr-3547.yml deleted file mode 100644 index 8c1f845f0c6..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3547.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: KasparoVy -delete-after: True -changes: - - rscadd: "Orange and purple bandanas for all station species." - - rscadd: "The ability to colour bandanas with a crayon in a washing machine." - - tweak: "Refactors the bandana adjustment system." - - tweak: "Minor adjustments to Tajaran and Unathi bandana east/west sprites." - - tweak: "Adjusting a bandana will now take if off of your head/face and put it in an available hand. If both hands are available, it goes in the selected hand." - - bugfix: "Adjusting a coloured bandana will no longer revert it to the original coloured icons anymore." - - bugfix: "Adjusting a bandana from mask-style to hat-style means the bandana won't obscure your identity anymore." diff --git a/html/changelogs/AutoChangeLog-pr-3556.yml b/html/changelogs/AutoChangeLog-pr-3556.yml deleted file mode 100644 index b7aedebe4fe..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3556.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Crazylemon64 -delete-after: True -changes: - - tweak: "Relaxes the check on what atoms you can follow to any movable atom" diff --git a/html/changelogs/AutoChangeLog-pr-3557.yml b/html/changelogs/AutoChangeLog-pr-3557.yml deleted file mode 100644 index fdc062cb3eb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3557.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - tweak: "Updates some spell icons with better/higher quality icons" diff --git a/html/changelogs/AutoChangeLog-pr-3559.yml b/html/changelogs/AutoChangeLog-pr-3559.yml deleted file mode 100644 index ac56a2bfa3a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3559.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Crazylemon64 -delete-after: True -changes: - - tweak: "Mages are now more ragin" - - tweak: "Admins can now adjust the total number of wizards at runtime by tweaking either max_mages, or players_per mage" diff --git a/html/changelogs/AutoChangeLog-pr-3560.yml b/html/changelogs/AutoChangeLog-pr-3560.yml deleted file mode 100644 index cef1c0c229f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3560.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: DaveTheHeadcrab -delete-after: True -changes: - - rscadd: "Adds new worn icons for duffelbags to better reflect their size, compliments of WJohn at /tg/" diff --git a/html/changelogs/AutoChangeLog-pr-3568.yml b/html/changelogs/AutoChangeLog-pr-3568.yml deleted file mode 100644 index 2ca65994c33..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3568.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: KasparoVy -delete-after: True -changes: - - rscadd: "Greys now use re-positioned smokeables. They no longer smoke out the eyes." diff --git a/html/changelogs/AutoChangeLog-pr-3569.yml b/html/changelogs/AutoChangeLog-pr-3569.yml deleted file mode 100644 index 29aa056157c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3569.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - tweak: "Updates unarmed attacks to allow for more customization" - - tweak: "Updates martial arts so they factor in specie's attack messages and sounds" - - tweak: "Re-balances Sleeping Carp fighting style" - - tweak: "Re-balances Bo Staff" - - tweak: "Rebalances Golem: they should now be spaceproof, fire+cold proof, rad proof, virus immune, clonable, parapen+syringe gun immune, deal increased melee damage. Their armor has been reduced to 55 melee across the board, their slip immunity removed, pain immunity removed, and they're slightly slower" - - bugfix: "Fixes Ei Nath generating two brains" - - bugfix: "Ensures the Necromatic Stone generates actual skeletons" - - bugfix: "Can now strip PDA/IDs from Golems" - - bugfix: "Fixes sleeping carp grab not being an instant aggressive grab" diff --git a/html/changelogs/AutoChangeLog-pr-3575.yml b/html/changelogs/AutoChangeLog-pr-3575.yml deleted file mode 100644 index c32ed0c1f09..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3575.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: TheDZD -delete-after: True -changes: - - bugfix: "Fixes spacepods being able to shoot through walls." - - tweak: "Lowers spacepod weapons fire delay." - - tweak: "Increases spacepod weapons energy costs." - - tweak: "Makes spacepods move at speeds not rivaling those of photon beams. They are now a hair bit faster than a person with a jetpack." - - tweak: "Reduces battery costs for spacepod movement." diff --git a/html/changelogs/AutoChangeLog-pr-3576.yml b/html/changelogs/AutoChangeLog-pr-3576.yml deleted file mode 100644 index f6d9443efcc..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3576.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: FalseIncarnate -delete-after: True -changes: - - rscadd: "Adds burritos, made from cutlets, beans, rice, capsacin oil (hotsauce), cheese, and flat dough (because we lack proper tortillas) in the microwave." - - rscadd: "Adds chimichangas. You know you want a deep-fried burrito." diff --git a/html/changelogs/AutoChangeLog-pr-3584.yml b/html/changelogs/AutoChangeLog-pr-3584.yml deleted file mode 100644 index 98ed8cd34bb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-3584.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - bugfix: "Fixes an exploit with declaring war on the station" From 6c933372043a9a7bebd93133830cc6773e47b51f Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sun, 14 Feb 2016 00:02:43 -0500 Subject: [PATCH 14/52] FUCK --- interface/stylesheet.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index a8ba16b7b69..b045e1adbdc 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -20,7 +20,7 @@ em {font-style: normal; font-weight: bold;} .adminobserverooc {color: #0099cc; font-weight: bold;} .adminooc {color: #b82e00; font-weight: bold;} .mentorhelp {color: #0077bb; font-weight: bold;} -.adminhelp {color: #aa0000; font-weight: bolt;} +.adminhelp {color: #aa0000; font-weight: bold;} .adminobserver {color: #996600; font-weight: bold;} .admin {color: #386aff; font-weight: bold;} From 7b1905477ddbbe9c1afcaf71666561ed1390ddf5 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 14 Feb 2016 00:22:13 -0500 Subject: [PATCH 15/52] Tweaks Laser Eyes --- code/_onclick/click.dm | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index b82cd7ab9d1..5c13314833c 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -319,17 +319,9 @@ LE.current = T LE.yo = U.y - T.y LE.xo = U.x - T.x - spawn( 1 ) + spawn(1) LE.process() -/mob/living/carbon/human/LaserEyes() - if(nutrition>0) - ..() - nutrition = max(nutrition - rand(1,5),0) - handle_regular_hud_updates() - else - src << "\red You're out of energy! You need food!" - /mob/proc/PowerGlove(atom/A) return From 0015eac2c8462af8069170455e542add55a833e8 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sun, 14 Feb 2016 01:58:36 -0500 Subject: [PATCH 16/52] Arcade Prize Counter --- code/game/machinery/computer/arcade.dm | 65 ++------- code/game/machinery/constructable_frame.dm | 15 +- code/game/objects/items/toys.dm | 133 +++++++++--------- .../stool_bed_chair_nest/wheelchair.dm | 9 +- code/modules/arcade/arcade_prize.dm | 6 +- code/modules/arcade/prize_counter.dm | 85 ++++++----- code/modules/arcade/prize_datums.dm | 15 +- .../research/designs/machine_designs.dm | 11 +- icons/obj/arcade.dmi | Bin 12445 -> 15583 bytes icons/vehicles/motorcycle.dmi | Bin 4017 -> 4885 bytes 10 files changed, 171 insertions(+), 168 deletions(-) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index ff62e54d06a..445c0b743ab 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -6,41 +6,7 @@ icon_keyboard = null icon_screen = "invaders" light_color = "#00FF00" - - var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, - /obj/item/toy/AI = 2, - /obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/toy/blink = 2, - /obj/item/weapon/storage/box/fakesyndiesuit = 2, - /obj/item/toy/sword = 2, - /obj/item/weapon/gun/projectile/revolver/capgun = 2, - /obj/item/toy/crossbow = 2, - /obj/item/weapon/storage/fancy/crayons = 2, - /obj/item/toy/spinningtoy = 2, - /obj/item/toy/crossbow/tommygun = 2, - /obj/random/mech = 5, - /obj/item/toy/nuke = 2, - /obj/item/toy/cards/deck = 2, - /obj/random/carp_plushie = 2, - /obj/item/toy/minimeteor = 2, - /obj/item/toy/redbutton = 2, - /obj/item/toy/owl = 2, - /obj/item/toy/griffin = 2, - /obj/item/clothing/head/blob = 2, - /obj/item/weapon/id_decal/gold = 2, - /obj/item/weapon/id_decal/silver = 2, - /obj/item/weapon/id_decal/prisoner = 2, - /obj/item/weapon/id_decal/centcom = 2, - /obj/item/weapon/id_decal/emag = 2, - /obj/item/weapon/spellbook/oneuse/fake_gib = 2, - /obj/item/toy/foamblade = 2, - /obj/item/toy/flash = 2, - /obj/item/toy/minigibber = 2, - /obj/item/toy/toy_xeno = 2, - /obj/random/figure = 16, - /obj/random/plushie = 7, - /obj/item/stack/tile/fakespace/loaded = 2, - ) + var/prize = /obj/item/stack/tickets /obj/machinery/computer/arcade/power_change() ..() @@ -56,28 +22,22 @@ qdel(src) -/obj/machinery/computer/arcade/proc/prizevend() +/obj/machinery/computer/arcade/proc/prizevend(var/score) if(!contents.len) - var/prizeselect = pickweight(prizes) - new prizeselect(src.loc) - - if(istype(prizeselect, /obj/item/weapon/gun/projectile/revolver/capgun)) //Ammo comes with the gun - new /obj/item/ammo_box/caps(src.loc) - - else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit - new /obj/item/clothing/head/syndicatefake(src.loc) - + var/prize_amount + if(score) + prize_amount = score + else + prize_amount = rand(1, 10) + new prize(src.loc, prize_amount) else var/atom/movable/prize = pick(contents) prize.loc = src.loc /obj/machinery/computer/arcade/emp_act(severity) ..(severity) - if(stat & (NOPOWER|BROKEN)) return - - var/empprize = null var/num_of_prizes = 0 switch(severity) if(1) @@ -85,8 +45,7 @@ if(2) num_of_prizes = rand(0,2) for(var/i = num_of_prizes; i > 0; i--) - empprize = pickweight(prizes) - new empprize(src.loc) + prizevend() explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) @@ -231,7 +190,8 @@ emagged = 0 else feedback_inc("arcade_win_normal") - prizevend() + var/score = src.player_hp + player_mp + 5 + prizevend(score) else if (emagged && (turtle >= 4)) var/boomamt = rand(5,10) @@ -988,7 +948,8 @@ message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") else - prizevend() + var/score = alive + round(food/2) + round(fuel/5) + engine + hull + electronics - lings_aboard + prizevend(score) emagged = 0 name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index f4c6cc90c57..c62c8131f25 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -844,7 +844,18 @@ obj/item/weapon/circuitboard/rdserver board_type = "machine" origin_tech = "programming=2" req_components = list( - /obj/item/weapon/stock_parts.matter_bin = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, /obj/item/weapon/stock_parts/manipulator = 1, /obj/item/stack/cable_coil = 5, - /obj/item/stack/sheet/glass = 1) \ No newline at end of file + /obj/item/stack/sheet/glass = 1) + +/obj/item/weapon/circuitboard/prize_counter + name = "circuit board (Prize Counter)" + build_path = /obj/machinery/prize_counter + board_type = "machine" + origin_tech = "programming=2;materials=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/stack/cable_coil = 1) \ No newline at end of file diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 4f818d7c8b7..e6626477d8f 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -200,7 +200,9 @@ return else if (bullets == 0) user.Weaken(5) - user.visible_message("[] realized they were out of ammo and started scrounging for some!") + user.visible_message("[] realized they were out of ammo and starting scrounging for some!") + + /obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) src.add_fingerprint(user) @@ -277,27 +279,27 @@ flags = NOSHIELD attack_verb = list("attacked", "struck", "hit") - attack_self(mob/user as mob) - src.active = !( src.active ) - if (src.active) - user << "\blue You extend the plastic blade with a quick flick of your wrist." - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - src.icon_state = "swordblue" - src.item_state = "swordblue" - src.w_class = 4 - else - user << "\blue You push the plastic blade back down into the handle." - playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - src.icon_state = "sword0" - src.item_state = "sword0" - src.w_class = 2 +/obj/item/toy/sword/attack_self(mob/user as mob) + src.active = !( src.active ) + if (src.active) + user << "\blue You extend the plastic blade with a quick flick of your wrist." + playsound(user, 'sound/weapons/saberon.ogg', 50, 1) + src.icon_state = "swordblue" + src.item_state = "swordblue" + src.w_class = 4 + else + user << "\blue You push the plastic blade back down into the handle." + playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) + src.icon_state = "sword0" + src.item_state = "sword0" + src.w_class = 2 - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - src.add_fingerprint(user) - return + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + src.add_fingerprint(user) + return // Copied from /obj/item/weapon/melee/energy/sword/attackby /obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user, params) @@ -372,21 +374,15 @@ w_class = 1 - throw_impact(atom/hit_atom) - ..() - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("\red The [src.name] explodes!","\red You hear a bang!") - - - playsound(src, 'sound/effects/snap.ogg', 50, 1) - qdel(src) - - - - +/obj/item/toy/snappop/virus/throw_impact(atom/hit_atom) + ..() + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + new /obj/effect/decal/cleanable/ash(src.loc) + src.visible_message("\red The [src.name] explodes!","\red You hear a bang!") + playsound(src, 'sound/effects/snap.ogg', 50, 1) + qdel(src) /* * Snap pops @@ -427,13 +423,13 @@ /* * Mech prizes */ -/obj/item/toy/mech +/obj/item/toy/prize icon = 'icons/obj/toy.dmi' icon_state = "ripleytoy" var/cooldown = 0 //all credit to skasi for toy mech fun ideas -/obj/item/toy/mech/attack_self(mob/user as mob) +/obj/item/toy/prize/attack_self(mob/user as mob) if(cooldown < world.time - 8) user << "You play with [src]." playsound(user, 'sound/mecha/mechstep.ogg', 20, 1) @@ -457,37 +453,37 @@ /obj/random/mech/item_to_spawn() return pick(subtypesof(/obj/item/toy/prize)) //exclude the base type. -/obj/item/toy/mech/ripley +/obj/item/toy/prize/ripley name = "toy ripley" desc = "Mini-Mecha action figure! Collect them all! 1/11." -/obj/item/toy/mech/fireripley +/obj/item/toy/prize/fireripley name = "toy firefighting ripley" desc = "Mini-Mecha action figure! Collect them all! 2/11." icon_state = "fireripleytoy" -/obj/item/toy/mech/deathripley +/obj/item/toy/prize/deathripley name = "toy deathsquad ripley" desc = "Mini-Mecha action figure! Collect them all! 3/11." icon_state = "deathripleytoy" -/obj/item/toy/mech/gygax +/obj/item/toy/prize/gygax name = "toy gygax" desc = "Mini-Mecha action figure! Collect them all! 4/11." icon_state = "gygaxtoy" -/obj/item/toy/mech/durand +/obj/item/toy/prize/durand name = "toy durand" desc = "Mini-Mecha action figure! Collect them all! 5/11." icon_state = "durandprize" -/obj/item/toy/mech/honk +/obj/item/toy/prize/honk name = "toy H.O.N.K." desc = "Mini-Mecha action figure! Collect them all! 6/11." icon_state = "honkprize" -/obj/item/toy/mech/marauder +/obj/item/toy/prize/marauder name = "toy marauder" desc = "Mini-Mecha action figure! Collect them all! 7/11." icon_state = "marauderprize" @@ -497,17 +493,17 @@ desc = "Mini-Mecha action figure! Collect them all! 8/11." icon_state = "seraphprize" -/obj/item/toy/mech/mauler +/obj/item/toy/prize/mauler name = "toy mauler" desc = "Mini-Mecha action figure! Collect them all! 9/11." icon_state = "maulerprize" -/obj/item/toy/mech/odysseus +/obj/item/toy/prize/odysseus name = "toy odysseus" desc = "Mini-Mecha action figure! Collect them all! 10/11." icon_state = "odysseusprize" -/obj/item/toy/mech/phazon +/obj/item/toy/prize/phazon name = "toy phazon" desc = "Mini-Mecha action figure! Collect them all! 11/11." icon_state = "phazonprize" @@ -924,44 +920,55 @@ obj/item/toy/cards/deck/syndicate/black /obj/item/toy/therapy name = "therapy doll" desc = "A toy for therapeutic and recreational purposes." - icon = 'icons/obj/weapons.dmi' icon_state = "therapyred" - item_state = "egg4" // It's the red egg in items_left/righthand + item_state = "egg4" w_class = 1 - item_color = "red" + var/cooldown = 0 /obj/item/toy/therapy/New() - ..() - icon_state = "therapy[item_color]" - UpdateDesc() + if(item_color) + name = "[item_color] therapy doll" + desc += " This one is [item_color]." + icon_state = "therapy[item_color]" -/obj/item/toy/therapy/proc/UpdateDesc() - name = "[item_color] therapy doll" - desc += " This one is [item_color]." +/obj/item/toy/therapy/attack_self(mob/user) + if(cooldown < world.time - 8) + user << "You relieve some stress with /the [src]." + playsound(user, 'sound/items/squeaktoy.ogg', 20, 1) + cooldown = world.time + +/obj/random/therapy + name = "Random Therapy Doll" + desc = "This is a random therapy doll." + icon = 'icons/obj/toy.dmi' + icon_state = "therapyred" + +/obj/random/prize/item_to_spawn() + return pick(subtypesof(/obj/item/toy/therapy)) //exclude the base type. /obj/item/toy/therapy/red - item_color = "red" item_state = "egg4" // It's the red egg in items_left/righthand + item_color = "red" /obj/item/toy/therapy/purple - item_color = "purple" item_state = "egg1" // It's the magenta egg in items_left/righthand + item_color = "purple" /obj/item/toy/therapy/blue - item_color = "blue" item_state = "egg2" // It's the blue egg in items_left/righthand + item_color = "blue" /obj/item/toy/therapy/yellow - item_color = "yellow" item_state = "egg5" // It's the yellow egg in items_left/righthand + item_color = "yellow" /obj/item/toy/therapy/orange - item_color = "orange" item_state = "egg4" // It's the red one again, lacking an orange item_state and making a new one is pointless + item_color = "orange" /obj/item/toy/therapy/green - item_color = "green" item_state = "egg3" // It's the green egg in items_left/righthand + item_color = "green" /obj/item/weapon/toddler icon_state = "toddler" diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 1bacc123e01..93e510b0641 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -148,4 +148,11 @@ . = 0 else - . = 1 \ No newline at end of file + . = 1 + +/obj/structure/stool/bed/chair/wheelchair/handle_rotation() + overlays = null + var/image/O = image(icon = 'icons/vehicles/motorcycle.dmi', icon_state = "motorcycle_overlay_4d", layer = FLY_LAYER, dir = src.dir) + overlays += O + if(buckled_mob) + buckled_mob.dir = dir \ No newline at end of file diff --git a/code/modules/arcade/arcade_prize.dm b/code/modules/arcade/arcade_prize.dm index 30bb457e196..b106a8ae7f4 100644 --- a/code/modules/arcade/arcade_prize.dm +++ b/code/modules/arcade/arcade_prize.dm @@ -25,7 +25,7 @@ var/prize_inside = pick(possible_contents) spawn(10) user.unEquip(src) - if(istype(/obj/item/stack)) + if(istype(prize_inside, /obj/item/stack)) var/amount = pick(5, 10, 15, 25, 50) new prize_inside(user.loc, amount) else @@ -55,7 +55,7 @@ /obj/item/toy/prizeball/therapy name = "therapy doll capsule" desc = "Contains one squishy therapy doll." - possible_contents = subtypesof(/obj/item/toy/therapy) + possible_contents = list(/obj/random/therapy) /obj/item/stack/tickets name = "prize ticket" @@ -64,7 +64,7 @@ icon = 'icons/obj/arcade.dmi' icon_state = "tickets_1" force = 1 - throw_force = 1 + throwforce = 1 throw_speed = 1 throw_range = 1 w_class = 1.0 diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index a8697956dc2..4190e50e6d3 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -25,38 +25,16 @@ for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) prize_tier = B.rating -/obj/machinery/prize_counter/proc/UpdateListings() - var/dat = "" - for(var/datum/prize_item/item in global_prizes.prizes) - var/cost_class="affordable" - if(item.cost>tickets) - cost_class="toomuch" - var/itemID = global_prizes.prizes.Find(item) - dat += {" - - - [itemID] - - -

    [item.name]

    -

    [item.desc]

    - - "} - if(prize_tier >= item.tier_unlocked) - dat += {" - - [item.cost] Tickets - - - "} - else - dat += {" - - LOCKED. - - - "} - return dat +/obj/machinery/prize_counter/update_icon() + if(stat & BROKEN) + icon_state = "prize_counter-broken" + else if(panel_open) + icon_state = "prize_counter-open" + else if(stat & NOPOWER) + icon_state = "prize_counter-off" + else + icon_state = "prize_counter-on" + return /obj/machinery/prize_counter/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/stack/tickets)) @@ -74,16 +52,18 @@ if(istype(O, /obj/item/weapon/wrench)) default_unfasten_wrench(user, O) if(component_parts && istype(O, /obj/item/weapon/crowbar)) + if(tickets) //save the tickets! + print_tickets() default_deconstruction_crowbar(O) /obj/machinery/prize_counter/attack_hand(mob/user as mob) if(..()) return + add_fingerprint(user) interact(user) /obj/machinery/prize_counter/interact(mob/user as mob) user.set_machine(src) - add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return @@ -152,7 +132,37 @@ td.cost.toomuch { "} - dat += UpdateListings() + + for(var/datum/prize_item/item in global_prizes.prizes) + var/cost_class="affordable" + if(item.cost>tickets) + cost_class="toomuch" + var/itemID = global_prizes.prizes.Find(item) + dat += {" + + + [itemID] + + +

    [item.name]

    +

    [item.desc]

    + + "} + if(prize_tier >= item.tier_unlocked) + dat += {" + + [item.cost] Tickets + + + "} + else + dat += {" + + LOCKED. + + + "} + dat += {" @@ -169,7 +179,7 @@ td.cost.toomuch { src.add_fingerprint(usr) if(href_list["eject"]) - print_tickets + print_tickets() if (href_list["buy"]) var/itemID = text2num(href_list["buy"]) @@ -183,7 +193,7 @@ td.cost.toomuch { else usr << "You've successfully purchased the item." - src.updateUsrDialog() + interact(usr) return /obj/machinery/prize_counter/proc/print_tickets() @@ -194,4 +204,5 @@ td.cost.toomuch { tickets -= 9999 print_tickets() else - new /obj/item/stack/tickets(src.loc, tickets) \ No newline at end of file + new /obj/item/stack/tickets(src.loc, tickets) + tickets = 0 \ No newline at end of file diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index 0b039e45537..8d1bd5da023 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -15,7 +15,7 @@ var/global/datum/prizes/global_prizes = new if(!item) return 0 if(prize_counter.tickets >= item.cost) - item.deliver(prize_counter) + new item.typepath(prize_counter.loc) prize_counter.visible_message("Enjoy your prize!") return 1 else @@ -23,7 +23,7 @@ var/global/datum/prizes/global_prizes = new return 0 ////////////////////////////////////// -// /datum/prize_item // +// prize_item datum // ////////////////////////////////////// /datum/prize_item @@ -33,9 +33,6 @@ var/global/datum/prizes/global_prizes = new var/cost = 0 var/tier_unlocked = 0 //minimum tier needed to unlock the ability to select this prize -/datum/prize_item/proc/deliver(var/obj/machinery/prize_counter/P_C) - var/thing = new typepath(P_C.loc) - ////////////////////////////////////// // Tier 1 Prizes // ////////////////////////////////////// @@ -54,7 +51,7 @@ var/global/datum/prizes/global_prizes = new cost = 35 tier_unlocked = 1 -/datum/prize_item/snap-pops +/datum/prize_item/snappops name = "Snap-Pops" desc = "A box of exploding snap-pop fireworks." typepath = /obj/item/weapon/storage/box/snappops @@ -85,7 +82,7 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/cards name = "Deck of cards" desc = "Anyone fancy a game of 52-card Pickup?" - typepath = obj/item/toy/cards/deck + typepath = /obj/item/toy/cards/deck cost = 25 tier_unlocked = 1 @@ -134,10 +131,10 @@ var/global/datum/prizes/global_prizes = new desc = "A sticker that can make any ID look like a golden ID." typepath = /obj/item/weapon/id_decal/gold -/datum/prize_item/id_sticker/centcomm +/datum/prize_item/id_sticker/centcom name = "Centcomm ID Sticker" desc = "A sticker that can make any ID look like a Central Command ID." - typepath = /obj/item/weapon/id_decal/centcomm + typepath = /obj/item/weapon/id_decal/centcom /datum/prize_item/id_sticker/emag name = "Suspicious ID Sticker" diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index fb97c2b693c..648193a316b 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -490,4 +490,13 @@ build_type = IMPRINTER materials = list(MAT_GLASS=1000, "sacid"=20) build_path = /obj/item/weapon/circuitboard/clawgame - category = list ("Misc. Machinery") \ No newline at end of file + category = list ("Misc. Machinery") + +/datum/design/prize_counter + name = "Machine Design (Prize Counter)" + desc = "The circuit board for an arcade Prize Counter." + req_tech = list("programming" = 2, "materials" = 2) + build_type = IMPRINTER + materials = list(MAT_GLASS=1000, "sacid"=20) + build_path = /obj/item/weapon/circuitboard/prize_counter + category = list("Misc. Machinery") \ No newline at end of file diff --git a/icons/obj/arcade.dmi b/icons/obj/arcade.dmi index 5fdaeb7c68229207901f707248d45e891ed83456..9861aea35c96d6330152e89a6f97fbca3b5889fa 100644 GIT binary patch literal 15583 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 XViFgkH4OaQ0Z3C#PqpHK&FlXMuTxk* diff --git a/icons/vehicles/motorcycle.dmi b/icons/vehicles/motorcycle.dmi index 8b5a004fa5deb72eb652683a06f6cae9ecb12c56..2f3c2d5517f8fcb755d44401a30d145c7b9843ac 100644 GIT binary patch literal 4885 zcmY+IcUTk4*T*-866qiUN>@;t6j7ungpNR{7esn*0s_)YfSVvikj|wOq^S@(dg< zh)4&8AWbP!LodJeeeOT+A3MAI?3tM}^PKbjoY@#XU3FTjn^XV*&}wR^7=U*)cv-_J zz;-++NE5u}1R0t7syO)AdAoS|x_Ej3KtN7z;t*AoIK$tB=~B~u%aas0QB^^ipTZjA zvyMu%?vdS%TS{*-(rrB@w?k=M3;og>Hv2+3cFSH~>AX}DdW{bp*L1J6?uCHsl#9y5|Pn!m(i&MVckOV1mv z_$QuWjO`Z4O(eZ?bF*fa0f6a&rizkLK+dLxl{Wii)+Hwo8`Lgd8HN?&9qBR7{)?S| zM98Q$c{JK}ORKEdBxX!e4`G(_)HqZk7H40a96eMabY@^d!j1^NsTk7;)$o}#X>2@P z@OxYEikaVJoTY5-w~&&c^bku`D0WJ^$B7#&$(0S+=s%+Gf%kWQo?891Y~L^f2!++MgUN>T}n#8=6KVMUTHo}+pexIcP}sT#Sb^6gKf|iJ^t@5@jd>F z8yLvwsi4X6kc!0tB&>r(8u*Dzy`o1pW)|q_DV9VQalZ8k;farS_C)Y7SV!`p4XEO} zBR8_eB_wPD>fWd;Vt8P`+}@D>460CZSHS;xh+y%5wqj z{_v2PjD-B*qqFeu$L0zwFf!udX^f>D3W}c`BvWelaH65+6%Mjwv95i(Gfq-plh6`W z(GOW`9nil(S}Q~Qu!L2+R0H3pHR47M1n>xLfhjR;ckWmK=r88Xhf$ia$bvbbw!rw} z+?olvuK=JuOmfTB3RKIN#h9grAkrVU4-~GFGOgXdgnG`W0L9FT`FQJU{OTL%GZC7{ z`w)>4N@qKp{TyHBw@o!E@Y9(PMef02CGYNkIe56iX@O4w3^l4fmwCRTn04=kvxlBq z9!GfOwCC@l3vMbWvLJ!9Gr;TOERX^SYs=q0lpk20NI^{RB5wqO$7vZV za}zC9C^J{fJ>o?Z-X@W<6N|N5)9JfNc;a0Bbmx3bdFm!` zUf6o%=(S(J%4iuxqcqi`>ej<>wb$D7nUSaO0}d!KHIW*&Iw5k)t@pE$Qtk_&alOy03Mz~gan0C25sR-=i$v8N`=b=%8Z`5JAeUbLH4w3#(jw~vZFv&b&g5~4+RE< z%)b})IyVUTrG!G4()f}$UzJo0Itg!mv3Vy;$?8t)?6wO4VNcQ#Mb81P$b&^+8b_hr zqRd^Zpj91(N5jLH7m^R%_mae>Zi4a5NZZSBcER|YGR5noIShk*ip4d{|Jk+OqFxQY z7d6}VTIZifBgJxEulFvp`}0RXy|5Qdm>X3%*qHQNBT7$r;1 zTh&>eg&FiKp^%`=%uJr?0kiDYO2MPa_13OL$}15sP%Ha0lCj9XEmF`w2cEb^)n>T^ ziRTZV5}g~YO=y)upV7*iz0Zs_>r)$86;9#+Bh@{P;ieg-^vTQ~@U@>6)e~=OUHRd` zffN+bOhyO}y?hSF)Z$ceb>sALQX*A4CR-40^<&~f!Eb{NX!rifucx(OeMyUimEc&w z6#FtFSn#9@Em3m7o)u@yYfoMv5*6HHDJ3P;!4F*pq{kWLEzbh7Y# zok6MhgZjHyY~i<;A!eWH@y#P6r^lMg-4(9`ea; z%cQ~Pd?EHe!dnW^XTDm@3~n{jNB@hnd<(B~3Wmj2k|J7af>YMrSfRbJ>#y&G%ot=p zcUBxS%!@UWhiKV}p|8}km!T8sN58waMscmj^wk9W#%v?LXLWB}2Za)z9rbN)-`Koy z_M4L)`W4%~A^LePufsDs_0#BU$}eVjSZxmu;*&~tulTPwX7bG~ zCr?5_lZ6DIKC>ohe<=F+QyvW0#L1?(*-wDl-QKllzyYw>ykuv~_jw13$O6Oq8`tm3OXSY0%RaFQqsQP3Cbrz3m&KU5|K7yoy~V z%`Se3eqhU%7)s97E}Pl zz?DFNz{Riqm>hWn_bA7ZF1n|J-1;~>F-$Sxarzidy- zd9L&*_@brb(cIk%ItSOjz35u#Kx*RU_?>iYAVlY8NA^v0pIyGw7WMv@(@P?JC4$0=)$0Jl7 z&PBDtI`r(CUP)-s=1nQIkPsB>^QSe2PA!z(Y^PHn2mGXIbf93Vx!AwxC-}D>MsZgP zpryv4`JuBckbMInU1%t625mkr$xM7B>i)B zZB4RBP`Rw+>q%MkM3b+%FqQi?3y+m{QxvZ+~5U=0qlQHzFjJ@(QHq zI1r6HQn^)K$!t~}IXW7c1heG$5kR=WF-MED%LD?Tpn#bH%CH%~@B`L+Qxu;KY$as_ zrS77r@4->QR-a2svtQ-VqPK$m6(;F;TCTAmhCo0GdGBYiE3`07d9$>uw;deUO`ItE zj4-431p-%x;xA=}FI(lQ`PT}~fBnL=r*k0)=j$WMgv1aPMUFsWk~otg<~`onfJVKR z9N7Ln)$8C7-Hia31QzeWk?2zoV00$AMs@bO1BDa`Xdb31y&)W*y+2`JarX~0o4D(V z7#3@NONgC_@=i0YVhS;Qh_$?`50lrLTeU1=?d~2=9;Gz?w*E64U>#rhq^h9EaA8PC zH4R6R;7HBHDb@)B75EkUYdV}-(7dqypZ*90!Z@t3{5b|`DI5{9B$OsG`mMJ9-Wrce zd7jL5GJs+Pj_m2_VO#yzhh>Avjx$3~_o;gBx7glO5#0AJ{!1K4%Ts(&D*k>6iJXLb z9S9UN&y3)^!JX1jpu=@Nm+wAa%W13JFs$uZC)Fe+F&cO_MT3Ye6EPh&e~1%Tygd?p zJ&UEspFI49g?`=Oa_3x2Fa%Lt>e*P8ZUf99$-lw&rB~$_rkni5uvn}sJ+~rF+dS$l z3?8`Ea@fvhXopKL*XmTN&n=fj?b1Ok@g^j`ATcc$rOwzqn`bJh`3<>c*f>xZn*}oL zsg)R#S+zb$^?;RM({^xh5X1?;va<3L$jf+xtRLhw0OsWL?5OvAAb)&Fa*4sjUE;ah z<^0RM%EM`IHCo_oAvV!LI93^71{_|g5rHDSeSK3Udc2Nz9e(T`XM&`wv0qQy7mwebooJn@l$Zdb&r1q zV(m4D-y2Ch-{e?K#6U3r31d{r+vCigZZ>wZQG;4Rp=rxl1ZbUKYfU z`*E8X&yhQSu&?m`J}IrEVN|<7ZSe6a@vX|q=_v$JVbt+)DP-(B^*K4(TQcAURSz4o zkb!X3XlxQvPwhW4Ia%tsmXnt=6ii_4evfL`7v1-j)Q8%8_j`W(0MQZzHLiap*~g2X zF|k(y4o?KBfJ}GTn69NnWDO3deg61cJ%K}ix*TN(6u(6Qsgw%ewci^mtE*GuM#|P| zHrYdx3}QirM@vvVNgtV*zy`=C+jS68SsmRR>4+lrL|j{&)jiSuF1w81FgI7%&Y|o_ZYuhG!otE$ zeP){mzbQT@hlgz6)kyv%&qWWSVf)?u5zP&R%=lg6(wF?MZfYeA0G`sP1JPU=A(wCk zdhl!k7GS74$q4ff^`H6p1jUE>Z5(UYQftB`3y0?$eUXRLX9lGIV)L$sa@&8o$Ek#wA{zEh;oibrbD2BUjG^vr2coyJh7uqv8H}euy z)P`}tG9j7(bVXQeOYA1*g>Z!2E6}d`m%+9!v3JY&Cl;OiDRKT+Uz3JW@y?>Z?5^$= z;Xf8O&YT5f@Oev2ptwCyywaQTuOfnb|lEvaQ zu&Ch7<y!qfxE8Wk?iWSkXE9ud8*5zk?Z;b`S<*5bu;jJ8NP$MduyAj32-V8&~ zwFn!iz&N2X4yU0Z{h>0PX+q59Y4^%hI&T5T37(lv3T?2r`1pHxal5!e^B6eap_SlK ZcnKj2KFUi)0{?RXnyR`gl}PKz{{e-YM6mz> literal 4017 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 Date: Sun, 14 Feb 2016 07:44:42 +0000 Subject: [PATCH 17/52] prevents toxloss and oxyloss for silicons fixes #3595 stops adjustToxLoss working on silicons, and only allows adjustOxyLoss when suiciding Have checked through, nowhere that shouldn't be is directly setting toxloss and oxyloss, and the only place that uses the setters to set it to anything other than 0 (statues) doesn't affect silicon based life, so this will fix the found bug and any other situations is could happen in --- code/modules/mob/living/silicon/silicon.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index f1f5f7862b3..57ea8ee135f 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -340,3 +340,10 @@ for(var/obj/machinery/camera/C in A.cameras()) cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]" src << "[A.alarm_name()]! ([(cameratext)? cameratext : "No Camera"])" + +/mob/living/silicon/adjustToxLoss(var/amount) + return + +/mob/living/silicon/adjustOxyLoss(var/amount) + if (suiciding) + ..() From 5376e7325206364cfb22471d3c2479f46ed65092 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sun, 14 Feb 2016 02:55:19 -0500 Subject: [PATCH 18/52] Fixes Plump Helmet Biscuits being uncookable The recipe for the plump helmet biscuit was mistakenly removed a while back (#535), this returns the recipe to the code Oven Recipe: 5u water, 5u flour, 1 plump helmet cap mushroom. :cl: fix: Fixes accidental removal of plump helmet biscuit recipe. /:cl: --- code/modules/food/recipes_oven.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/food/recipes_oven.dm b/code/modules/food/recipes_oven.dm index 914362ef45e..c94ffb3822c 100644 --- a/code/modules/food/recipes_oven.dm +++ b/code/modules/food/recipes_oven.dm @@ -254,6 +254,11 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie +/datum/recipe/oven/plumphelmetbiscuit + fruit = list("plumphelmet" = 1) + reagents = list("water" = 5, "flour" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit + /datum/recipe/oven/creamcheesebread items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, From 0cd829b0ede8a9f1112c1a49d2434ba0289f194a Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sun, 14 Feb 2016 04:07:44 -0500 Subject: [PATCH 19/52] Automatic changelog generation for PR #3585 --- html/changelogs/AutoChangeLog-pr-3585.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3585.yml diff --git a/html/changelogs/AutoChangeLog-pr-3585.yml b/html/changelogs/AutoChangeLog-pr-3585.yml new file mode 100644 index 00000000000..91d6a32535b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3585.yml @@ -0,0 +1,4 @@ +author: Tastyfish +delete-after: True +changes: + - rscadd: "All of the heads now have multicolored pens." From 7307ceda2f9c5dc953c9226e42b22098604dbcf4 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sun, 14 Feb 2016 04:09:20 -0500 Subject: [PATCH 20/52] Automatic changelog generation for PR #3603 --- html/changelogs/AutoChangeLog-pr-3603.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3603.yml diff --git a/html/changelogs/AutoChangeLog-pr-3603.yml b/html/changelogs/AutoChangeLog-pr-3603.yml new file mode 100644 index 00000000000..a77a20fb692 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3603.yml @@ -0,0 +1,4 @@ +author: FalseIncarnate +delete-after: True +changes: + - bugfix: "Fixes accidental removal of plump helmet biscuit recipe." From f7511ae017be152beba517a82c5fb7f48cd699a4 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Sun, 14 Feb 2016 10:16:45 +0000 Subject: [PATCH 21/52] oxyloss change set to only borgs --- code/modules/mob/living/silicon/robot/robot.dm | 6 +++++- code/modules/mob/living/silicon/silicon.dm | 4 +--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3f56a1bfc25..af30c4d71e3 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1455,4 +1455,8 @@ var/list/robot_verbs_default = list( status_flags &= ~CANPUSH - notify_ai(2) \ No newline at end of file + notify_ai(2) + +/mob/living/silicon/robot/adjustOxyLoss(var/amount) + if (suiciding) + ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 57ea8ee135f..0ca8b27c852 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -344,6 +344,4 @@ /mob/living/silicon/adjustToxLoss(var/amount) return -/mob/living/silicon/adjustOxyLoss(var/amount) - if (suiciding) - ..() + From 9d7904e29fe84d1f92d200573c7c18bf599d4b84 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 15 Feb 2016 01:57:16 -0500 Subject: [PATCH 22/52] EMP Kit Tweak --- code/datums/uplink_item.dm | 18 ++++++++++++++---- .../items/weapons/storage/uplink_kits.dm | 11 +++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 16d00449a55..e168b36db2f 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -365,11 +365,12 @@ var/list/uplink_items = list() surplus = 0 /datum/uplink_item/dangerous/emp - name = "EMP Kit" - desc = "A box that contains two EMP grenades, an EMP implant and a short ranged recharging device disguised as a flashlight. Useful to disrupt communication and silicon lifeforms." - reference = "EMP" + name = "EMP Grenades and Implanter Kit" + desc = "A box that contains two EMP grenades and an EMP implant. Useful to disrupt communication, \ + security's energy weapons, and silicon lifeforms when you're in a tight spot." + reference = "EMPK" item = /obj/item/weapon/storage/box/syndie_kit/emp - cost = 5 + cost = 2 /datum/uplink_item/dangerous/syndicate_minibomb name = "Syndicate Minibomb" @@ -658,6 +659,15 @@ var/list/uplink_items = list() cost = 2 surplus = 30 +/datum/uplink_item/stealthy_tools/emplight + name = "EMP Flashlight" + desc = "A small, self-charging, short-ranged EMP device disguised as a flashlight. \ + Useful for disrupting headsets, cameras, and borgs during stealth operations." + reference = "EMPL" + item = /obj/item/device/flashlight/emp + cost = 2 + surplus = 30 + // DEVICE AND TOOLS /datum/uplink_item/device_tools diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 772dc76d46c..704f31003cc 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -144,12 +144,11 @@ /obj/item/weapon/storage/box/syndie_kit/emp name = "boxed EMP kit" - New() - ..() - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/implanter/emp/(src) - new /obj/item/device/flashlight/emp/(src) +/obj/item/weapon/storage/box/syndie_kit/emp/New() + ..() + new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/implanter/emp/(src) /obj/item/weapon/storage/box/syndie_kit/tabun name = "Tabun Gas Grenades" From f44602ab791cd176bf15c90a0ae84e969a1e56ba Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Mon, 15 Feb 2016 02:32:29 -0500 Subject: [PATCH 23/52] Src, Spans, and Chainsaws Cleans up some src and src.loc in the toys, arcade, and prize counter files Replaces some text macros with proper spans Removes the attack proc from the toy chainsaw, preventing them from making sounds on hit. - Still makes the revving sound when you wield them --- code/game/machinery/computer/arcade.dm | 138 ++++++++++---------- code/game/objects/items/toys.dm | 168 ++++++++++++------------- code/modules/arcade/prize_counter.dm | 6 +- 3 files changed, 150 insertions(+), 162 deletions(-) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 445c0b743ab..7277bc6a366 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -29,10 +29,10 @@ prize_amount = score else prize_amount = rand(1, 10) - new prize(src.loc, prize_amount) + new prize(get_turf(src), prize_amount) else var/atom/movable/prize = pick(contents) - prize.loc = src.loc + prize.loc = get_turf(src) /obj/machinery/computer/arcade/emp_act(severity) ..(severity) @@ -46,7 +46,7 @@ num_of_prizes = rand(0,2) for(var/i = num_of_prizes; i > 0; i--) prizevend() - explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) + explosion(get_turf(src), -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) /obj/machinery/computer/arcade/battle @@ -75,20 +75,20 @@ name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") - src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") - src.name = (name_action + name_part1 + name_part2) + enemy_name = replacetext((name_part1 + name_part2), "the ", "") + name = (name_action + name_part1 + name_part2) /obj/machinery/computer/arcade/battle/attack_hand(mob/user as mob) if(..()) return user.set_machine(src) var/dat = "Close" - dat += "

    [src.enemy_name]

    " + dat += "

    [enemy_name]

    " - dat += "

    [src.temp]

    " - dat += "
    Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]
    " + dat += "

    [temp]

    " + dat += "
    Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
    " - if (src.gameover) + if (gameover) dat += "
    New Game" else dat += "
    Attack | " @@ -101,7 +101,7 @@ //onclose(user, "arcade") var/datum/browser/popup = new(user, "arcade", "Space Villian 2000") popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return @@ -109,48 +109,48 @@ if(..()) return - if (!src.blocked && !src.gameover) + if (!blocked && !gameover) if (href_list["attack"]) - src.blocked = 1 + blocked = 1 var/attackamt = rand(2,6) - src.temp = "You attack for [attackamt] damage!" + temp = "You attack for [attackamt] damage!" playsound(src.loc, 'sound/arcade/Hit.ogg', 20, 1, extrarange = -6, falloff = 10) - src.updateUsrDialog() + updateUsrDialog() if(turtle > 0) turtle-- sleep(10) - src.enemy_hp -= attackamt - src.arcade_action() + enemy_hp -= attackamt + arcade_action() else if (href_list["heal"]) - src.blocked = 1 + blocked = 1 var/pointamt = rand(1,3) var/healamt = rand(6,8) - src.temp = "You use [pointamt] magic to heal for [healamt] damage!" + temp = "You use [pointamt] magic to heal for [healamt] damage!" playsound(src.loc, 'sound/arcade/Heal.ogg', 20, 1, extrarange = -6, falloff = 10) - src.updateUsrDialog() + updateUsrDialog() turtle++ sleep(10) - src.player_mp -= pointamt - src.player_hp += healamt - src.blocked = 1 - src.updateUsrDialog() - src.arcade_action() + player_mp -= pointamt + player_hp += healamt + blocked = 1 + updateUsrDialog() + arcade_action() else if (href_list["charge"]) - src.blocked = 1 + blocked = 1 var/chargeamt = rand(4,7) - src.temp = "You regain [chargeamt] points" + temp = "You regain [chargeamt] points" playsound(src.loc, 'sound/arcade/Mana.ogg', 20, 1, extrarange = -6, falloff = 10) - src.player_mp += chargeamt + player_mp += chargeamt if(turtle > 0) turtle-- - src.updateUsrDialog() + updateUsrDialog() sleep(10) - src.arcade_action() + arcade_action() if (href_list["close"]) usr.unset_machine() @@ -166,50 +166,50 @@ turtle = 0 if(emagged) - src.New() + New() emagged = 0 - src.add_fingerprint(usr) - src.updateUsrDialog() + add_fingerprint(usr) + updateUsrDialog() return /obj/machinery/computer/arcade/battle/proc/arcade_action() - if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) + if ((enemy_mp <= 0) || (enemy_hp <= 0)) if(!gameover) - src.gameover = 1 - src.temp = "[src.enemy_name] has fallen! Rejoice!" + gameover = 1 + temp = "[enemy_name] has fallen! Rejoice!" playsound(src.loc, 'sound/arcade/Win.ogg', 20, 1, extrarange = -6, falloff = 10) if(emagged) feedback_inc("arcade_win_emagged") - new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) - new /obj/item/clothing/head/collectable/petehat(src.loc) + new /obj/effect/spawner/newbomb/timer/syndicate(get_turf(src)) + new /obj/item/clothing/head/collectable/petehat(get_turf(src)) message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") - src.New() + New() emagged = 0 else feedback_inc("arcade_win_normal") - var/score = src.player_hp + player_mp + 5 + var/score = player_hp + player_mp + 5 prizevend(score) else if (emagged && (turtle >= 4)) var/boomamt = rand(5,10) - src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!" + temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" playsound(src.loc, 'sound/arcade/Boom.ogg', 20, 1, extrarange = -6, falloff = 10) - src.player_hp -= boomamt + player_hp -= boomamt - else if ((src.enemy_mp <= 5) && (prob(70))) + else if ((enemy_mp <= 5) && (prob(70))) var/stealamt = rand(2,3) - src.temp = "[src.enemy_name] steals [stealamt] of your power!" + temp = "[enemy_name] steals [stealamt] of your power!" playsound(src.loc, 'sound/arcade/Steal.ogg', 20, 1, extrarange = -6, falloff = 10) - src.player_mp -= stealamt - src.updateUsrDialog() + player_mp -= stealamt + updateUsrDialog() - if (src.player_mp <= 0) - src.gameover = 1 + if (player_mp <= 0) + gameover = 1 sleep(10) - src.temp = "You have been drained! GAME OVER" + temp = "You have been drained! GAME OVER" playsound(src.loc, 'sound/arcade/Lose.ogg', 20, 1, extrarange = -6, falloff = 10) if(emagged) feedback_inc("arcade_loss_mana_emagged") @@ -217,21 +217,21 @@ else feedback_inc("arcade_loss_mana_normal") - else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4)) - src.temp = "[src.enemy_name] heals for 4 health!" + else if ((enemy_hp <= 10) && (enemy_mp > 4)) + temp = "[enemy_name] heals for 4 health!" playsound(src.loc, 'sound/arcade/Heal.ogg', 20, 1, extrarange = -6, falloff = 10) - src.enemy_hp += 4 - src.enemy_mp -= 4 + enemy_hp += 4 + enemy_mp -= 4 else var/attackamt = rand(3,6) - src.temp = "[src.enemy_name] attacks for [attackamt] damage!" + temp = "[enemy_name] attacks for [attackamt] damage!" playsound(src.loc, 'sound/arcade/Hit.ogg', 20, 1, extrarange = -6, falloff = 10) - src.player_hp -= attackamt + player_hp -= attackamt - if ((src.player_mp <= 0) || (src.player_hp <= 0)) - src.gameover = 1 - src.temp = "You have been crushed! GAME OVER" + if ((player_mp <= 0) || (player_hp <= 0)) + gameover = 1 + temp = "You have been crushed! GAME OVER" playsound(src.loc, 'sound/arcade/Lose.ogg', 20, 1, extrarange = -6, falloff = 10) if(emagged) feedback_inc("arcade_loss_hp_emagged") @@ -239,7 +239,7 @@ else feedback_inc("arcade_loss_hp_normal") - src.blocked = 0 + blocked = 0 return @@ -258,7 +258,7 @@ enemy_name = "Cuban Pete" name = "Outbomb Cuban Pete" - src.updateUsrDialog() + updateUsrDialog() // *** THE ORION TRAIL ** // @@ -410,7 +410,7 @@ dat += "

    Close

    " var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return @@ -497,7 +497,7 @@ playsound(src.loc, 'sound/effects/bang.ogg', 20, 1) if(ORION_TRAIL_MALFUNCTION) playsound(src.loc, 'sound/effects/EMPulse.ogg', 20, 1) - src.visible_message("[src] malfunctions, randomizing in-game stats!") + visible_message("[src] malfunctions, randomizing in-game stats!") var/oldfood = food var/oldfuel = fuel food = rand(10,80) / rand(1,2) @@ -505,9 +505,9 @@ if(electronics) sleep(10) if(oldfuel > fuel && oldfood > food) - src.audible_message("[src] lets out a somehow reassuring chime.") + audible_message("[src] lets out a somehow reassuring chime.") else if(oldfuel < fuel || oldfood < food) - src.audible_message("[src] lets out a somehow ominous chime.") + audible_message("[src] lets out a somehow ominous chime.") food = oldfood fuel = oldfuel playsound(src.loc, 'sound/machines/chime.ogg', 20, 1) @@ -669,8 +669,8 @@ last_spaceport_action = "Traded Food for Fuel" event() - src.add_fingerprint(usr) - src.updateUsrDialog() + add_fingerprint(usr) + updateUsrDialog() busy = 0 return @@ -944,7 +944,7 @@ turns = 1 atom_say("Congratulations, you made it to Orion!") if(emagged) - new /obj/item/weapon/orion_ship(src.loc) + new /obj/item/weapon/orion_ship(get_turf(src)) message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") else @@ -1008,17 +1008,17 @@ user << "You flip the switch on the underside of [src]." active = 1 - src.visible_message("[src] softly beeps and whirs to life!") + visible_message("[src] softly beeps and whirs to life!") playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) atom_say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") sleep(20) - src.visible_message("[src] begins to vibrate...") + visible_message("[src] begins to vibrate...") atom_say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") sleep(30) atom_say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) sleep(3.6) - src.visible_message("[src] explodes!") + visible_message("[src] explodes!") explosion(src.loc, 1,2,4, flame_range = 3) qdel(src) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index e6626477d8f..45d15625e06 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -51,9 +51,9 @@ if(!proximity) return if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1) A.reagents.trans_to(src, 10) - user << "\blue You fill the balloon with the contents of [A]." - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - src.update_icon() + user << "You fill the balloon with the contents of [A]." + desc = "A translucent balloon with some form of liquid sloshing around in it." + update_icon() return /obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob, params) @@ -67,19 +67,19 @@ O.reagents.reaction(user) qdel(src) else - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - user << "\blue You fill the balloon with the contents of [O]." + desc = "A translucent balloon with some form of liquid sloshing around in it." + user << "You fill the balloon with the contents of [O]." O.reagents.trans_to(src, 10) - src.update_icon() + update_icon() return /obj/item/toy/balloon/throw_impact(atom/hit_atom) - if(src.reagents.total_volume >= 1) - src.visible_message("\red The [src] bursts!","You hear a pop and a splash.") - src.reagents.reaction(get_turf(hit_atom)) + if(reagents.total_volume >= 1) + visible_message("The [src] bursts!","You hear a pop and a splash.") + reagents.reaction(get_turf(hit_atom)) for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - src.icon_state = "burst" + reagents.reaction(A) + icon_state = "burst" spawn(5) if(src) qdel(src) @@ -144,7 +144,7 @@ /obj/item/toy/crossbow/examine(mob/user) ..(user) if (bullets) - user << "\blue It is loaded with [bullets] foam darts!" + user << "It is loaded with [bullets] foam darts!" /obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/toy/ammo/crossbow)) @@ -152,9 +152,9 @@ user.drop_item() qdel(I) bullets++ - user << "\blue You load the foam dart into the crossbow." + user << "You load the foam dart into the crossbow." else - usr << "\red It's already fully loaded." + usr << "It's already fully loaded." /obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) @@ -205,23 +205,18 @@ /obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) + add_fingerprint(user) // ******* Check - if (src.bullets > 0 && M.lying) - - for(var/mob/O in viewers(M, null)) - if(O.client) - O.show_message(text("[] casually lines up a shot with []'s head and pulls the trigger!", user, M), 1, "You hear the sound of foam against skull.", 2) - O.show_message(text("\red [] was hit in the head by the foam dart!", M), 1) - + if (bullets > 0 && M.lying) + visible_message("[user] casually lines up a shot with [M]'s head and pulls the trigger!", "You hear the sound of foam against skull.") + M.visible_message("[M] was hit in the head by the foam dart!") playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) new /obj/item/toy/ammo/crossbow(M.loc) - src.bullets-- - else if (M.lying && src.bullets == 0) - for(var/mob/O in viewers(M, null)) - if (O.client) O.show_message(text("[] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", user, M), 1, "You hear someone fall.", 2) + bullets-- + else if (M.lying && bullets == 0) + visible_message("[user] casually lines up a shot with [M]'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", "You hear someone fall.") user.Weaken(5) return @@ -280,25 +275,25 @@ attack_verb = list("attacked", "struck", "hit") /obj/item/toy/sword/attack_self(mob/user as mob) - src.active = !( src.active ) - if (src.active) - user << "\blue You extend the plastic blade with a quick flick of your wrist." + active = !(active) + if (active) + user << "You extend the plastic blade with a quick flick of your wrist." playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - src.icon_state = "swordblue" - src.item_state = "swordblue" - src.w_class = 4 + icon_state = "swordblue" + item_state = "swordblue" + w_class = 4 else - user << "\blue You push the plastic blade back down into the handle." + user << "You push the plastic blade back down into the handle." playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - src.icon_state = "sword0" - src.item_state = "sword0" - src.w_class = 2 + icon_state = "sword0" + item_state = "sword0" + w_class = 2 if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user H.update_inv_l_hand() H.update_inv_r_hand() - src.add_fingerprint(user) + add_fingerprint(user) return // Copied from /obj/item/weapon/melee/energy/sword/attackby @@ -380,7 +375,7 @@ s.set_up(3, 1, src) s.start() new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("\red The [src.name] explodes!","\red You hear a bang!") + visible_message("The [name] explodes!","You hear a bang!") playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) @@ -400,7 +395,7 @@ s.set_up(3, 1, src) s.start() new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("\red The [src.name] explodes!","\red You hear a snap!") + visible_message("The [src.name] explodes!","You hear a snap!") playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) @@ -408,13 +403,13 @@ if((ishuman(H))) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H if(M.m_intent == "run") - M << "\red You step on the snap pop!" + M << "You step on the snap pop!" var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 0, src) s.start() new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("\red The [src.name] explodes!","\red You hear a snap!") + visible_message("The [name] explodes!","You hear a snap!") playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) @@ -585,7 +580,7 @@ obj/item/toy/cards/deck/New() obj/item/toy/cards/deck/attack_hand(mob/user as mob) var/choice = null if(cards.len == 0) - src.icon_state = "deck_[deckstyle]_empty" + icon_state = "deck_[deckstyle]_empty" user << "There are no more cards to draw." return var/obj/item/toy/cards/singlecard/H = new/obj/item/toy/cards/singlecard(user.loc) @@ -594,16 +589,16 @@ obj/item/toy/cards/deck/attack_hand(mob/user as mob) H.parentdeck = src var/O = src H.apply_card_vars(H,O) - src.cards -= choice + cards -= choice H.pickup(user) user.put_in_active_hand(H) - src.visible_message("[user] draws a card from the deck.", "You draw a card from the deck.") + visible_message("[user] draws a card from the deck.", "You draw a card from the deck.") if(cards.len > 26) - src.icon_state = "deck_[deckstyle]_full" + icon_state = "deck_[deckstyle]_full" else if(cards.len > 10) - src.icon_state = "deck_[deckstyle]_half" + icon_state = "deck_[deckstyle]_half" else if(cards.len > 1) - src.icon_state = "deck_[deckstyle]_low" + icon_state = "deck_[deckstyle]_low" obj/item/toy/cards/deck/attack_self(mob/user as mob) if(cooldown < world.time - 50) @@ -619,17 +614,17 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/use if(!user.unEquip(C)) user << "The card is stuck to your hand, you can't add it to the deck!" return - src.cards += C.cardname + cards += C.cardname user.visible_message("[user] adds a card to the bottom of the deck.","You add the card to the bottom of the deck.") qdel(C) else user << "You can't mix cards from other decks." if(cards.len > 26) - src.icon_state = "deck_[deckstyle]_full" + icon_state = "deck_[deckstyle]_full" else if(cards.len > 10) - src.icon_state = "deck_[deckstyle]_half" + icon_state = "deck_[deckstyle]_half" else if(cards.len > 1) - src.icon_state = "deck_[deckstyle]_low" + icon_state = "deck_[deckstyle]_low" obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, params) @@ -639,17 +634,17 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, if(!user.unEquip(C)) user << "The hand of cards is stuck to your hand, you can't add it to the deck!" return - src.cards += C.currenthand + cards += C.currenthand user.visible_message("[user] puts their hand of cards in the deck.", "You put the hand of cards in the deck.") qdel(C) else user << "You can't mix cards from other decks." if(cards.len > 26) - src.icon_state = "deck_[deckstyle]_full" + icon_state = "deck_[deckstyle]_full" else if(cards.len > 10) - src.icon_state = "deck_[deckstyle]_half" + icon_state = "deck_[deckstyle]_half" else if(cards.len > 1) - src.icon_state = "deck_[deckstyle]_low" + icon_state = "deck_[deckstyle]_low" obj/item/toy/cards/deck/MouseDrop(atom/over_object) var/mob/M = usr @@ -712,7 +707,7 @@ obj/item/toy/cards/cardhand/Topic(href, href_list) if (cardUser.get_item_by_slot(slot_l_hand) == src || cardUser.get_item_by_slot(slot_r_hand) == src) var/choice = href_list["pick"] var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc) - src.currenthand -= choice + currenthand -= choice C.parentdeck = src.parentdeck C.cardname = choice C.apply_card_vars(C,O) @@ -721,13 +716,13 @@ obj/item/toy/cards/cardhand/Topic(href, href_list) cardUser.visible_message("[cardUser] draws a card from \his hand.", "You take the [C.cardname] from your hand.") interact(cardUser) - if(src.currenthand.len < 3) - src.icon_state = "[deckstyle]_hand2" + if(currenthand.len < 3) + icon_state = "[deckstyle]_hand2" else if(src.currenthand.len < 4) - src.icon_state = "[deckstyle]_hand3" + icon_state = "[deckstyle]_hand3" else if(src.currenthand.len < 5) - src.icon_state = "[deckstyle]_hand4" - if(src.currenthand.len == 1) + icon_state = "[deckstyle]_hand4" + if(currenthand.len == 1) var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(src.loc) N.parentdeck = src.parentdeck N.cardname = src.currenthand[1] @@ -742,17 +737,17 @@ obj/item/toy/cards/cardhand/Topic(href, href_list) obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params) if(istype(C)) - if(C.parentdeck == src.parentdeck) - src.currenthand += C.cardname + if(C.parentdeck == parentdeck) + currenthand += C.cardname user.unEquip(C) user.visible_message("[user] adds a card to their hand.", "You add the [C.cardname] to your hand.") interact(user) if(currenthand.len > 4) - src.icon_state = "[deckstyle]_hand5" + icon_state = "[deckstyle]_hand5" else if(currenthand.len > 3) - src.icon_state = "[deckstyle]_hand4" + icon_state = "[deckstyle]_hand4" else if(currenthand.len > 2) - src.icon_state = "[deckstyle]_hand3" + icon_state = "[deckstyle]_hand3" qdel(C) else user << "You can't mix cards from other decks." @@ -797,33 +792,33 @@ obj/item/toy/cards/singlecard/verb/Flip() if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained()) return if(!flipped) - src.flipped = 1 + flipped = 1 if (cardname) - src.icon_state = "sc_[cardname]_[deckstyle]" - src.name = src.cardname + icon_state = "sc_[cardname]_[deckstyle]" + name = cardname else - src.icon_state = "sc_Ace of Spades_[deckstyle]" - src.name = "What Card" - src.pixel_x = 5 + icon_state = "sc_Ace of Spades_[deckstyle]" + name = "What Card" + pixel_x = 5 else if(flipped) - src.flipped = 0 - src.icon_state = "singlecard_down_[deckstyle]" - src.name = "card" - src.pixel_x = -5 + flipped = 0 + icon_state = "singlecard_down_[deckstyle]" + name = "card" + pixel_x = -5 obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/toy/cards/singlecard/)) var/obj/item/toy/cards/singlecard/C = I - if(C.parentdeck == src.parentdeck) + if(C.parentdeck == parentdeck) var/obj/item/toy/cards/cardhand/H = new/obj/item/toy/cards/cardhand(user.loc) H.currenthand += C.cardname - H.currenthand += src.cardname + H.currenthand += cardname H.parentdeck = C.parentdeck H.apply_card_vars(H,C) user.unEquip(C) H.pickup(user) user.put_in_active_hand(H) - user << "You combine the [C.cardname] and the [src.cardname] into a hand." + user << "You combine the [C.cardname] and the [cardname] into a hand." qdel(C) qdel(src) else @@ -933,7 +928,7 @@ obj/item/toy/cards/deck/syndicate/black /obj/item/toy/therapy/attack_self(mob/user) if(cooldown < world.time - 8) - user << "You relieve some stress with /the [src]." + user << "You relieve some stress with \the [src]." playsound(user, 'sound/items/squeaktoy.ogg', 20, 1) cooldown = world.time @@ -1262,7 +1257,7 @@ obj/item/toy/cards/deck/syndicate/black var/message = generate_ion_law() user << "You press the button on [src]." playsound(user, 'sound/machines/click.ogg', 20, 1) - src.loc.visible_message("\icon[src] [message]") + visible_message("\icon[src] [message]") cooldown = 1 spawn(30) cooldown = 0 return @@ -1281,7 +1276,7 @@ obj/item/toy/cards/deck/syndicate/black var/message = pick("You won't get away this time, Griffin!", "Stop right there, criminal!", "Hoot! Hoot!", "I am the night!") user << "You pull the string on the [src]." playsound(user, 'sound/misc/hoot.ogg', 25, 1) - src.loc.visible_message("\icon[src] [message]") + visible_message("\icon[src] [message]") cooldown = 1 spawn(30) cooldown = 0 return @@ -1300,7 +1295,7 @@ obj/item/toy/cards/deck/syndicate/black var/message = pick("You can't stop me, Owl!", "My plan is flawless! The vault is mine!", "Caaaawwww!", "You will never catch me!") user << "You pull the string on the [src]." playsound(user, 'sound/misc/caw.ogg', 25, 1) - src.loc.visible_message("\icon[src] [message]") + visible_message("\icon[src] [message]") cooldown = 1 spawn(30) cooldown = 0 return @@ -1532,13 +1527,6 @@ obj/item/toy/cards/deck/syndicate/black else icon_state = "chainsaw0" -/obj/item/weapon/twohanded/toy/chainsaw/attack(mob/target as mob, mob/living/user as mob) - if(wielded) - playsound(loc, 'sound/weapons/chainsaw.ogg', 100, 1, -1) - else - playsound(loc, "swing_hit", 50, 1, -1) - ..() - /* * Action Figures */ diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index 4190e50e6d3..5f1c8024553 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -176,7 +176,7 @@ td.cost.toomuch { if(..()) return 1 - src.add_fingerprint(usr) + add_fingerprint(usr) if(href_list["eject"]) print_tickets() @@ -200,9 +200,9 @@ td.cost.toomuch { if(!tickets) return if(tickets >= 9999) - new /obj/item/stack/tickets(src.loc, 9999) //max stack size + new /obj/item/stack/tickets(get_turf(src), 9999) //max stack size tickets -= 9999 print_tickets() else - new /obj/item/stack/tickets(src.loc, tickets) + new /obj/item/stack/tickets(get_turf(src), tickets) tickets = 0 \ No newline at end of file From aaeccfdff5754b23078feb22d55f5ecab0a3135d Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Mon, 15 Feb 2016 02:36:18 -0500 Subject: [PATCH 24/52] Removes the force from tickets Tickets no longer deal damage when used as a weapon or thrown. --- code/modules/arcade/arcade_prize.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/arcade/arcade_prize.dm b/code/modules/arcade/arcade_prize.dm index b106a8ae7f4..f57a64de03c 100644 --- a/code/modules/arcade/arcade_prize.dm +++ b/code/modules/arcade/arcade_prize.dm @@ -63,8 +63,8 @@ singular_name = "prize ticket" icon = 'icons/obj/arcade.dmi' icon_state = "tickets_1" - force = 1 - throwforce = 1 + force = 0 + throwforce = 0 throw_speed = 1 throw_range = 1 w_class = 1.0 From 4452c24999bebc3ba8f5818c089578ccfa633526 Mon Sep 17 00:00:00 2001 From: Spacemanspark Date: Mon, 15 Feb 2016 12:02:03 -0600 Subject: [PATCH 25/52] Adds *yes and *no emotes to IPCs and other synthetics. Port of https://github.com/PolarisSS13/Polaris/pull/809 --- code/modules/mob/living/carbon/human/emote.dm | 32 +++++++++++++++++- code/modules/mob/living/silicon/emote.dm | 32 +++++++++++++++++- sound/machines/synth_no.ogg | Bin 0 -> 6771 bytes sound/machines/synth_yes.ogg | Bin 0 -> 6867 bytes 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 sound/machines/synth_no.ogg create mode 100644 sound/machines/synth_yes.ogg diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 93b57850974..90660bb6039 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -26,7 +26,7 @@ var/on_CD = 0 switch(act) //Cooldown-inducing emotes - if("ping","buzz","beep") + if("ping","buzz","beep", "yes", "no") if (species.name == "Machine") //Only Machines can beep, ping, and buzz on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm else //Everyone else fails, skip the emote attempt @@ -128,6 +128,36 @@ playsound(src.loc, 'sound/effects/slime_squish.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound. m_type = 1 + if("yes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits an affirmative blip." + playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0) + m_type = 1 + + if("no") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits a negative blip." + playsound(src.loc, 'sound/machines/synth_no.ogg', 50, 0) + m_type = 1 + if("wag") if(body_accessory) if(body_accessory.try_restrictions(src)) diff --git a/code/modules/mob/living/silicon/emote.dm b/code/modules/mob/living/silicon/emote.dm index f7ead12e4cc..26d6520c586 100644 --- a/code/modules/mob/living/silicon/emote.dm +++ b/code/modules/mob/living/silicon/emote.dm @@ -13,7 +13,7 @@ var/on_CD = 0 switch(act) //Cooldown-inducing emotes - if("ping","buzz","beep") //halt is exempt because it's used to stop criminal scum //WHOEVER THOUGHT THAT WAS A GOOD IDEA IS GOING TO GET SHOT. + if("ping","buzz","beep","yes","no") //halt is exempt because it's used to stop criminal scum //WHOEVER THOUGHT THAT WAS A GOOD IDEA IS GOING TO GET SHOT. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm //Everything else, including typos of the above emotes else @@ -75,4 +75,34 @@ playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) m_type = 1 + if("yes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits an affirmative blip." + playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0) + m_type = 1 + + if("no") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits a negative blip." + playsound(src.loc, 'sound/machines/synth_no.ogg', 50, 0) + m_type = 1 + ..(act, m_type, message) \ No newline at end of file diff --git a/sound/machines/synth_no.ogg b/sound/machines/synth_no.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f0d2c3bfb0c4df7ae203eeee08e873fa84832bb0 GIT binary patch literal 6771 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 literal 0 HcmV?d00001 diff --git a/sound/machines/synth_yes.ogg b/sound/machines/synth_yes.ogg new file mode 100644 index 0000000000000000000000000000000000000000..300cad132ede46bd5cf1523c157aa72184680b74 GIT binary patch literal 6867 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 d$Ick-2_*fwKqC!$(wicaiWhr?HuDJx{11i!1 Date: Mon, 15 Feb 2016 19:01:00 -0800 Subject: [PATCH 26/52] Lets you put accessories on other people by attacking them with it --- code/modules/clothing/under/accessories/accessory.dm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index bdf0c955ca4..efa4804dca7 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -34,6 +34,18 @@ usr.put_in_hands(src) src.add_fingerprint(user) +/obj/item/clothing/accessory/attack(mob/living/carbon/human/H, mob/living/user) + // This code lets you put accessories on other people by attacking their sprite with the accessory + if(istype(H)) + var/obj/item/clothing/under/U = H.w_uniform + if(istype(U)) + user.visible_message("[user] is putting a [src] on [H]'s [U]!", "You begin to put a [src] on [H]'s [U]...") + if(do_after(user,40,target=U)) + user.visible_message("[user] puts a [src] on [H]'s [U]!", "You finish putting a [src] on [H]'s [U].") + U.attackby(src, user) + return 1 + return ..() + //default attackby behaviour /obj/item/clothing/accessory/attackby(obj/item/I, mob/user, params) ..() From 41fdd62d5c2cef0f1cefd82a722b6ea8601faad6 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 15 Feb 2016 19:10:54 -0800 Subject: [PATCH 27/52] Makes things a tad bit better grammarwise --- code/modules/clothing/under/accessories/accessory.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index efa4804dca7..fdd1bb07541 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -39,9 +39,9 @@ if(istype(H)) var/obj/item/clothing/under/U = H.w_uniform if(istype(U)) - user.visible_message("[user] is putting a [src] on [H]'s [U]!", "You begin to put a [src] on [H]'s [U]...") - if(do_after(user,40,target=U)) - user.visible_message("[user] puts a [src] on [H]'s [U]!", "You finish putting a [src] on [H]'s [U].") + user.visible_message("[user] is putting a [src.name] on [H]'s [U.name]!", "You begin to put a [src.name] on [H]'s [U.name]...") + if(do_after(user,40,target=H)) + user.visible_message("[user] puts a [src.name] on [H]'s [U.name]!", "You finish putting a [src.name] on [H]'s [U.name].") U.attackby(src, user) return 1 return ..() From 3e41bf62b426f14468d98c4bff065152fcf88420 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 15 Feb 2016 19:22:04 -0800 Subject: [PATCH 28/52] Adds further checks to attaching accessories --- code/modules/clothing/under/accessories/accessory.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index fdd1bb07541..ed9e9c1bf2e 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -37,13 +37,18 @@ /obj/item/clothing/accessory/attack(mob/living/carbon/human/H, mob/living/user) // This code lets you put accessories on other people by attacking their sprite with the accessory if(istype(H)) + if(H.wear_suit && H.wear_suit.flags_inv & HIDEJUMPSUIT) + user << "[H]'s body is covered, and you cannot attach \the [src]." + return 1 var/obj/item/clothing/under/U = H.w_uniform if(istype(U)) user.visible_message("[user] is putting a [src.name] on [H]'s [U.name]!", "You begin to put a [src.name] on [H]'s [U.name]...") if(do_after(user,40,target=H)) user.visible_message("[user] puts a [src.name] on [H]'s [U.name]!", "You finish putting a [src.name] on [H]'s [U.name].") U.attackby(src, user) - return 1 + else + user << "[H] is not wearing anything to attach \the [src] to." + return 1 return ..() //default attackby behaviour From 5a105a979beb480c7c8c14543396ae9d3886d89d Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 15 Feb 2016 19:22:48 -0800 Subject: [PATCH 29/52] Even even more sanity checks --- code/modules/clothing/under/accessories/accessory.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index ed9e9c1bf2e..c7712fef200 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -43,7 +43,7 @@ var/obj/item/clothing/under/U = H.w_uniform if(istype(U)) user.visible_message("[user] is putting a [src.name] on [H]'s [U.name]!", "You begin to put a [src.name] on [H]'s [U.name]...") - if(do_after(user,40,target=H)) + if(do_after(user,40,target=H) && H.w_uniform == U) user.visible_message("[user] puts a [src.name] on [H]'s [U.name]!", "You finish putting a [src.name] on [H]'s [U.name].") U.attackby(src, user) else From 0ea630f18af81cc717b3b6046810b4a325bd4f00 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 15 Feb 2016 22:06:53 -0800 Subject: [PATCH 30/52] Borers will now properly lose control when their host dies --- code/modules/mob/living/carbon/human/death.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 2c7b2cb8bd3..879b7be7c0a 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -104,13 +104,7 @@ B = I if(B) if(!B.ckey && ckey && B.controlling) - B.ckey = ckey - B.controlling = 0 - if(B.host_brain.ckey) - ckey = B.host_brain.ckey - B.host_brain.ckey = null - B.host_brain.name = "host brain" - B.host_brain.real_name = "host brain" + B.detatch() verbs -= /mob/living/carbon/proc/release_control From 441a7345d6efae7b70360b966c4fbc7fc3a05486 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Tue, 16 Feb 2016 03:39:55 -0500 Subject: [PATCH 31/52] Temporary Prize Counter mapping Temporarily adds a prize counter to the bar on Cyberiad and Fitness Room (dorms) on Metastation - The metastation one might stay, but the Cyberiad one will very likely get moved in the near future. Adds a fully upgraded prize counter to the ninja's holding pen on Cyberiad's z2 (map-merged) --- _maps/map_files/MetaStation/MetaStation.v41A.II.dmm | 6 +++--- _maps/map_files/cyberiad/cyberiad.dmm | 3 ++- _maps/map_files/cyberiad/z2.dmm | 6 +++--- code/modules/arcade/prize_counter.dm | 10 ++++++++++ 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index c5efb941401..632b62957c3 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -423,7 +423,7 @@ "aig" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "shower"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aih" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aii" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -5; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup,/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 5; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 5; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 5; pixel_y = 3},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) -"aij" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) +"aij" = (/obj/machinery/prize_counter,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aik" = (/obj/structure/closet/masks,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "ail" = (/obj/structure/closet/athletic_mixed,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aim" = (/obj/structure/closet/boxinggloves,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) @@ -926,7 +926,7 @@ "arP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fore) "arQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fore) "arR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fore) -"arS" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) +"arS" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/Doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) "arT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "arU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) "arV" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/security/brig) @@ -3754,7 +3754,7 @@ "buj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Central Primary Hallway - Starboard - Art Storage"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "buk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "bul" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/civilian/barber) -"bum" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bum" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) "bun" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "buo" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "bup" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/simulated/floor/wood,/area/crew_quarters/bar) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 5a07eb647ca..499f575076b 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3551,6 +3551,7 @@ "bqo" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 1"; dir = 2; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqp" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqq" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) +"bqr" = (/obj/machinery/prize_counter,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bqs" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqt" = (/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/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/engine/gravitygenerator) "bqu" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/hallway/primary/starboard/west) @@ -8833,7 +8834,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbmwbjgbmwbmwbmwbjhbjibmwbhDbjjbglbmwbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbohbptbojbpwbpwbqWbpwbpwbpwbqWblubjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkMbkLbkObkObkPaYibkQaMebmwbkRbkSbglbmwbkTbkUbmwbkVbkWbglbmwbnMbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatddDbgKblrblrblrbaAbwmbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbwmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbmwbnCbmwbmwbmwaRebmwbmwbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbmwbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbqrbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqnbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqyaHkbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 562e99420c0..7e1c55bc1f4 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -189,8 +189,10 @@ "dG" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid1 (EAST)"; icon_state = "asteroid1"; dir = 4},/area/holodeck/source_desert) "dH" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "dI" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) +"dJ" = (/obj/structure/rack,/obj/item/toy/sword,/obj/item/weapon/gun/projectile/revolver/capgun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "dK" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) "dL" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"dM" = (/obj/machinery/prize_counter/maxed,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "dN" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid3 (EAST)"; icon_state = "asteroid3"; dir = 4},/area/holodeck/source_desert) "dO" = (/turf/simulated/floor/holofloor{tag = "icon-carpet1-0 (EAST)"; icon_state = "carpet1-0"; dir = 4},/area/holodeck/source_theatre) "dP" = (/obj/structure/stool,/turf/simulated/floor/holofloor{tag = "icon-carpet5-1 (EAST)"; icon_state = "carpet5-1"; dir = 4},/area/holodeck/source_theatre) @@ -254,8 +256,6 @@ "fB" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fC" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fD" = (/obj/structure/rack,/obj/item/device/camera,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) -"fE" = (/obj/structure/rack,/obj/item/toy/sword,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) -"fF" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/revolver/capgun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "fG" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "fH" = (/turf/unsimulated/beach/sand,/area/ninja/holding) "fI" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/ninja/holding) @@ -1232,7 +1232,7 @@ ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapap ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckbockckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeDeqeqeqbsereEeFeGerbseHeHeIeJeJbseveKeveLevbseMeNeNeNeObsePeQeQeQeRbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapavapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqeqeqeXeqbsereYeYeYerbseHeZeZeZeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffffffgfgfhfififjfgfgfgfgfgfgfgfgfgfkfgfgfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeqbserererererbseHeIeIeIeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDfEfFfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDdJdMfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD ckckckckckckckclckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffufufufffggbfyfyfyfyfygcgdgdgdgefHfHfHgffHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqgkeqeqeqbserglgmgnerbsgogpgpgpgqbsevevevgrevbsgsgtgtgtgubsgveQeQeQgwbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgygzgAfufufufffggBfygCgDgEgFgGgdgdgdgdfHfHgHfHgIfIfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeDbserglgmgnerbsgJeIgKeIgLbsevevevevevbsgMeNeNeNgNbsgveQeQeQgwbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckcmckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgOgPgQfufufufffggRgdgegegegegegdgdgdgdfHfHfHgSfHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbsgTeqeqeqeqbserglgmgnerbsgJgUgUgUgLbsgVgVgVgVgVbsgMeNeNeNgNbsgveQeQeQgwbD diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index 5f1c8024553..02b0c4c6f9e 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -21,6 +21,16 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) RefreshParts() +/obj/machinery/prize_counter/maxed/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/prize_counter(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin/bluespace(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/stack/cable_coil(null, 1) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + RefreshParts() + /obj/machinery/prize_counter/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) prize_tier = B.rating From 03ecddfc4370f65b15f0c7cdae8832f3f1e5e77d Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Tue, 16 Feb 2016 03:50:42 -0500 Subject: [PATCH 32/52] Revert "Temporary Prize Counter mapping" This reverts commit 441a7345d6efae7b70360b966c4fbc7fc3a05486. --- _maps/map_files/MetaStation/MetaStation.v41A.II.dmm | 6 +++--- _maps/map_files/cyberiad/cyberiad.dmm | 3 +-- _maps/map_files/cyberiad/z2.dmm | 6 +++--- code/modules/arcade/prize_counter.dm | 10 ---------- 4 files changed, 7 insertions(+), 18 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 632b62957c3..c5efb941401 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -423,7 +423,7 @@ "aig" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "shower"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aih" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aii" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -5; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup,/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 5; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 5; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 5; pixel_y = 3},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) -"aij" = (/obj/machinery/prize_counter,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) +"aij" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aik" = (/obj/structure/closet/masks,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "ail" = (/obj/structure/closet/athletic_mixed,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aim" = (/obj/structure/closet/boxinggloves,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) @@ -926,7 +926,7 @@ "arP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fore) "arQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fore) "arR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fore) -"arS" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/Doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) +"arS" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) "arT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "arU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) "arV" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/security/brig) @@ -3754,7 +3754,7 @@ "buj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Central Primary Hallway - Starboard - Art Storage"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "buk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "bul" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/civilian/barber) -"bum" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bum" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) "bun" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "buo" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "bup" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/simulated/floor/wood,/area/crew_quarters/bar) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 499f575076b..5a07eb647ca 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3551,7 +3551,6 @@ "bqo" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 1"; dir = 2; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqp" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqq" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) -"bqr" = (/obj/machinery/prize_counter,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bqs" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bqt" = (/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/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/engine/gravitygenerator) "bqu" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/hallway/primary/starboard/west) @@ -8834,7 +8833,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbmwbjgbmwbmwbmwbjhbjibmwbhDbjjbglbmwbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbohbptbojbpwbpwbqWbpwbpwbpwbqWblubjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkMbkLbkObkObkPaYibkQaMebmwbkRbkSbglbmwbkTbkUbmwbkVbkWbglbmwbnMbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatddDbgKblrblrblrbaAbwmbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbwmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbmwbnCbmwbmwbmwaRebmwbmwbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbqrbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbmwbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqnbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqyaHkbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 7e1c55bc1f4..562e99420c0 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -189,10 +189,8 @@ "dG" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid1 (EAST)"; icon_state = "asteroid1"; dir = 4},/area/holodeck/source_desert) "dH" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "dI" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) -"dJ" = (/obj/structure/rack,/obj/item/toy/sword,/obj/item/weapon/gun/projectile/revolver/capgun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "dK" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) "dL" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) -"dM" = (/obj/machinery/prize_counter/maxed,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "dN" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid3 (EAST)"; icon_state = "asteroid3"; dir = 4},/area/holodeck/source_desert) "dO" = (/turf/simulated/floor/holofloor{tag = "icon-carpet1-0 (EAST)"; icon_state = "carpet1-0"; dir = 4},/area/holodeck/source_theatre) "dP" = (/obj/structure/stool,/turf/simulated/floor/holofloor{tag = "icon-carpet5-1 (EAST)"; icon_state = "carpet5-1"; dir = 4},/area/holodeck/source_theatre) @@ -256,6 +254,8 @@ "fB" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fC" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fD" = (/obj/structure/rack,/obj/item/device/camera,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) +"fE" = (/obj/structure/rack,/obj/item/toy/sword,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) +"fF" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/revolver/capgun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "fG" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "fH" = (/turf/unsimulated/beach/sand,/area/ninja/holding) "fI" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/ninja/holding) @@ -1232,7 +1232,7 @@ ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapap ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckbockckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeDeqeqeqbsereEeFeGerbseHeHeIeJeJbseveKeveLevbseMeNeNeNeObsePeQeQeQeRbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapavapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqeqeqeXeqbsereYeYeYerbseHeZeZeZeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffffffgfgfhfififjfgfgfgfgfgfgfgfgfgfkfgfgfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeqbserererererbseHeIeIeIeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDdJdMfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDfEfFfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD ckckckckckckckclckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffufufufffggbfyfyfyfyfygcgdgdgdgefHfHfHgffHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqgkeqeqeqbserglgmgnerbsgogpgpgpgqbsevevevgrevbsgsgtgtgtgubsgveQeQeQgwbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgygzgAfufufufffggBfygCgDgEgFgGgdgdgdgdfHfHgHfHgIfIfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeDbserglgmgnerbsgJeIgKeIgLbsevevevevevbsgMeNeNeNgNbsgveQeQeQgwbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckcmckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgOgPgQfufufufffggRgdgegegegegegdgdgdgdfHfHfHgSfHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbsgTeqeqeqeqbserglgmgnerbsgJgUgUgUgLbsgVgVgVgVgVbsgMeNeNeNgNbsgveQeQeQgwbD diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index 02b0c4c6f9e..5f1c8024553 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -21,16 +21,6 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) RefreshParts() -/obj/machinery/prize_counter/maxed/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/prize_counter(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() - /obj/machinery/prize_counter/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) prize_tier = B.rating From 6a75ede14df78a3df7d91b4eed2b13622935d9eb Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 16 Feb 2016 01:48:04 -0800 Subject: [PATCH 33/52] Enhances borers in various ways - Adds a silent means of two-way conversation between borers and their hosts - the borer must make first contact, to avoid spoiling their presence - Borers will now be unable to talk out loud while inside a host, by default - they can toggle this with a verb. Borer speech is unaffected. - Borers will now properly detach from host control upon the death of the host - Borers will now triple their reagent production while sedated by sugar - Borers infesting and hiding is now silent --- code/game/gamemodes/miniantags/borer/borer.dm | 218 +++++++++++++++--- code/modules/mob/living/carbon/carbon.dm | 67 ------ code/modules/mob/living/carbon/human/human.dm | 5 + 3 files changed, 191 insertions(+), 99 deletions(-) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index a1ee69ac9b7..84ef2424c55 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -60,6 +60,7 @@ pass_flags = PASSTABLE ventcrawler = 2 + var/talk_inside_host = 0 // So that borers don't accidentally give themselves away on a botched message var/used_dominate var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. var/mob/living/carbon/human/host // Human host for the brain worm. @@ -67,6 +68,83 @@ var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. var/docile = 0 // Sugar can stop borers from acting. + var/list/borer_injection_chems = list("mannitol","salglu_solution","methamphetamine", "hydrocodone", "spaceacillin", "mitocholide", "charcoal", "salbutamol", "capulettium_plus") + +/mob/living/simple_animal/borer/verb/Communicate() + set category = "Borer" + set name = "Converse with Host" + set desc = "Send a silent message to your host." + if(!host) + src << "You do not have a host to communicate with!" + return + + var/input = stripped_input(src, "Please enter a message to tell your host.", "Borer", "") + if(!input) return + + + var/say_string = (docile) ? "slurs" :"states" + if(host) + host << "[src.truename] [say_string]: [input]" + log_say("Borer Communication: [key_name(src)] -> [key_name(host)] : [input]") + for(var/M in dead_mob_list) + if(istype(M, /mob/dead/observer)) + M << "Borer Communication from [src.truename] ([ghost_follow_link(src, ghost=M)]): [input]" + src << "[src.truename] [say_string]: [input]" + host.verbs += /mob/living/proc/borer_comm + +/mob/living/simple_animal/borer/verb/toggle_silence_inside_host() + set name = "Toggle speech inside Host" + set category = "Borer" + set desc = "Toggle whether you will be able to say audible messages while inside your host." + + if(talk_inside_host) + talk_inside_host = 0 + src << "You will no longer talk audibly while inside a host." + else + talk_inside_host = 1 + src << "You will now be able to audibly speak from inside of a host." + +/mob/living/proc/borer_comm() + set name = "Converse with Borer" + set category = "Borer" + set desc = "Communicate mentally with your borer." + + + var/mob/living/simple_animal/borer/B = src.has_brain_worms() + if(!B) + return + + var/input = stripped_input(src, "Please enter a message to tell the borer.", "Message", "") + if(!input) return + + B << "[src] says: [input]" + log_say("Borer Communication: [key_name(src)] -> [key_name(B)] : [input]") + + for(var/M in dead_mob_list) + if(istype(M, /mob/dead/observer)) + M << "Borer Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]" + src << "[src] says: [input]" + +/mob/living/proc/trapped_mind_comm() + set name = "Converse with Trapped Mind" + set category = "Borer" + set desc = "Communicate mentally with the trapped mind of your host." + + + var/mob/living/simple_animal/borer/B = src.has_brain_worms() + if(!B || !B.host_brain) + return + var/mob/living/captive_brain/CB = B.host_brain + var/input = stripped_input(src, "Please enter a message to tell the trapped mind.", "Message", "") + if(!input) return + + CB << "[B.truename] says: [input]" + log_say("Borer Communication: [key_name(src)] -> [key_name(B)] : [input]") + + for(var/M in dead_mob_list) + if(istype(M, /mob/dead/observer)) + M << "Borer Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]" + src << "[B.truename] says: [input]" /mob/living/simple_animal/borer/Life() @@ -92,7 +170,10 @@ docile = 0 if(chemicals < 250) - chemicals++ + if(docile) + chemicals += 3 + else + chemicals++ if(controlling) if(docile) @@ -109,11 +190,16 @@ /mob/living/simple_animal/borer/New(var/by_gamemode=0) ..() add_language("Cortical Link") - truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" + updatename() if(!by_gamemode) request_player() +/mob/living/simple_animal/borer/proc/updatename() + var/index_num = rand(1000,9999) + real_name = "Cortical Borer ([index_num])" + truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [index_num]" + /mob/living/simple_animal/borer/Stat() ..() statpanel("Status") @@ -134,7 +220,7 @@ M << "Cortical link, [truename]: [copytext(message, 2)]" /mob/living/simple_animal/borer/verb/dominate_victim() - set category = "Alien" + set category = "Borer" set name = "Dominate Victim" set desc = "Freeze the limbs of a potential host with supernatural fear." @@ -174,7 +260,7 @@ used_dominate = world.time /mob/living/simple_animal/borer/verb/bond_brain() - set category = "Alien" + set category = "Borer" set name = "Assume Control" set desc = "Fully connect to the brain of your host." @@ -240,13 +326,15 @@ host.verbs += /mob/living/carbon/proc/release_control host.verbs += /mob/living/carbon/proc/punish_host host.verbs += /mob/living/carbon/proc/spawn_larvae + host.verbs -= /mob/living/proc/borer_comm + host.verbs += /mob/living/proc/trapped_mind_comm if(src && !src.key) src.key = "@[borer_key]" return /mob/living/simple_animal/borer/verb/secrete_chemicals() - set category = "Alien" + set category = "Borer" set name = "Secrete Chemicals (30)" set desc = "Push some chemicals into your host's bloodstream." @@ -266,8 +354,12 @@ if(chemicals < chem_cost) src << "You don't have enough chemicals!" - - var/chem = input("Select a chemical to secrete.", "Chemicals") as null|anything in list("mannitol","salglu_solution","methamphetamine", "hydrocodone", "spaceacillin", "mitocholide", "charcoal", "salbutamol", "capulettium_plus") + var/list/nice_name_chem_list = list() + for(var/rgnt in borer_injection_chems) + var/datum/reagent/R2 = chemical_reagents_list[rgnt] + nice_name_chem_list[R2.name] = rgnt + var/chem_name = input("Select a chemical to secrete.", "Chemicals") as null|anything in nice_name_chem_list + var/chem = nice_name_chem_list[chem_name] if(!chem || chemicals < chem_cost || !host || controlling || !src || stat) //Sanity check. return @@ -278,12 +370,12 @@ src << "Doing so would cause grievous harm to your host, reducing ability to reproduce. Aborting." return - src << "You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream." + src << "You squirt a measure of [chem_name] from your reservoirs into [host]'s bloodstream." host.reagents.add_reagent(chem, injection_amount) chemicals -= chem_cost /mob/living/simple_animal/borer/verb/release_host() - set category = "Alien" + set category = "Borer" set name = "Release Host" set desc = "Slither out of your host." @@ -332,6 +424,8 @@ host.verbs -= /mob/living/carbon/proc/release_control host.verbs -= /mob/living/carbon/proc/punish_host host.verbs -= /mob/living/carbon/proc/spawn_larvae + host.verbs += /mob/living/proc/borer_comm + host.verbs -= /mob/living/proc/trapped_mind_comm if(host_brain) @@ -369,6 +463,71 @@ return + +//Brain slug proc for voluntary removal of control. +/mob/living/carbon/proc/release_control() + + set category = "Borer" + set name = "Release Control" + set desc = "Release control of your host's body." + + var/mob/living/simple_animal/borer/B = has_brain_worms() + + if(B && B.host_brain) + src << "\red You withdraw your probosci, releasing control of [B.host_brain]" + + B.detatch() + + else + src << "\red ERROR NO BORER OR BRAINMOB DETECTED IN THIS MOB, THIS IS A BUG !" + +//Brain slug proc for tormenting the host. +/mob/living/carbon/proc/punish_host() + set category = "Borer" + set name = "Torment host" + set desc = "Punish your host with agony." + + var/mob/living/simple_animal/borer/B = has_brain_worms() + + if(!B) + return + + if(B.host_brain.ckey) + src << "\red You send a punishing spike of psychic agony lancing into your host's brain." + B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" + +//Check for brain worms in head. +/mob/proc/has_brain_worms() + + for(var/I in contents) + if(istype(I,/mob/living/simple_animal/borer)) + return I + + return 0 + +/mob/living/carbon/proc/spawn_larvae() + set category = "Borer" + set name = "Reproduce (100)" + set desc = "Spawn several young." + + var/mob/living/simple_animal/borer/B = has_brain_worms() + + if(!B) + return + + if(B.chemicals >= 100) + src << "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body." + visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") + B.chemicals -= 100 + + new /obj/effect/decal/cleanable/vomit(get_turf(src)) + playsound(loc, 'sound/effects/splat.ogg', 50, 1) + new /mob/living/simple_animal/borer(get_turf(src)) + + else + src << "You do not have enough chemicals stored to reproduce." + return + /mob/living/simple_animal/borer/proc/leave_host() if(!host) return @@ -382,12 +541,13 @@ host.machine = null var/mob/living/H = host + H.verbs -= /mob/living/proc/borer_comm H.status_flags &= ~PASSEMOTES host = null return /mob/living/simple_animal/borer/verb/infest() - set category = "Alien" + set category = "Borer" set name = "Infest" set desc = "Infest a suitable humanoid host." @@ -435,18 +595,12 @@ if(M in view(1, src)) src << "You wiggle into [M]'s ear." + /* if(!M.stat) M << "Something disgusting and slimy wiggles into your ear!" + */ // Let's see how stealthborers work out - src.host = M - src.forceMove(M) - - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/head = H.get_organ("head") - head.implants += src - - host.status_flags |= PASSEMOTES + perform_infestation(M) return else @@ -462,8 +616,6 @@ var/obj/item/organ/external/head = H.get_organ("head") head.implants += src - host_brain.name = M.name - host_brain.real_name = M.real_name host.status_flags |= PASSEMOTES /mob/living/simple_animal/borer/can_use_vents() @@ -494,13 +646,12 @@ if(!candidate) return - src.mind = candidate.mob.mind - src.ckey = candidate.ckey + src.key = candidate.key if(src.mind) src.mind.assigned_role = "Cortical Borer" /mob/living/simple_animal/borer/verb/borerhide() - set category = "Alien" + set category = "Borer" set name = "Hide" set desc = "Allows to hide beneath tables or certain items. Toggled on or off." @@ -509,13 +660,16 @@ if (layer != TURF_LAYER+0.2) layer = TURF_LAYER+0.2 - src << text("\green You are now hiding.") - for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) - O << text("[] scurries to the ground!", src) + src << "\green You are now hiding." else layer = MOB_LAYER - src << text("\green You have stopped hiding.") - for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) - O << text("[] slowly peaks up from the ground...", src) + src << "\green You have stopped hiding." + +/mob/living/simple_animal/borer/say(var/message) + var/datum/language/dialect = parse_language(message) + if(!dialect) + dialect = get_default_language() + if(!istype(dialect, /datum/language/corticalborer) && loc == host && !talk_inside_host) + src << "You've disabled audible speech while inside a host! Re-enable it under the borer tab, or stick to borer communications." + return + ..() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b2cd0136f30..9ee7f1713d6 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -651,73 +651,6 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, // output for machines^ ^^^^^^^output for people^^^^^^^^^ -//Brain slug proc for voluntary removal of control. -/mob/living/carbon/proc/release_control() - - set category = "Alien" - set name = "Release Control" - set desc = "Release control of your host's body." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - - if(B && B.host_brain) - src << "\red You withdraw your probosci, releasing control of [B.host_brain]" - - B.detatch() - - verbs -= /mob/living/carbon/proc/release_control - verbs -= /mob/living/carbon/proc/punish_host - verbs -= /mob/living/carbon/proc/spawn_larvae - - else - src << "\red ERROR NO BORER OR BRAINMOB DETECTED IN THIS MOB, THIS IS A BUG !" - -//Brain slug proc for tormenting the host. -/mob/living/carbon/proc/punish_host() - set category = "Alien" - set name = "Torment host" - set desc = "Punish your host with agony." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - - if(!B) - return - - if(B.host_brain.ckey) - src << "\red You send a punishing spike of psychic agony lancing into your host's brain." - B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" - -//Check for brain worms in head. -/mob/proc/has_brain_worms() - - for(var/I in contents) - if(istype(I,/mob/living/simple_animal/borer)) - return I - - return 0 - -/mob/living/carbon/proc/spawn_larvae() - set category = "Alien" - set name = "Reproduce (100)" - set desc = "Spawn several young." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - - if(!B) - return - - if(B.chemicals >= 100) - src << "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body." - visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") - B.chemicals -= 100 - - new /obj/effect/decal/cleanable/vomit(get_turf(src)) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - new /mob/living/simple_animal/borer(get_turf(src)) - - else - src << "You do not have enough chemicals stored to reproduce." - return /mob/living/carbon/proc/canBeHandcuffed() return 0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 366ec02ae1e..388fca05a1f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -278,6 +278,11 @@ cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]" stat(null, "Suit charge: [cell_status]") + // I REALLY need to split up status panel things into datums + var/mob/living/simple_animal/borer/B = has_brain_worms() + if(B && B.controlling) + stat("Chemicals", B.chemicals) + if(mind) if(mind.changeling) stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]") From 8e80a0685e6239e3677d6394572ed4fdbe96a217 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 16 Feb 2016 02:28:25 -0800 Subject: [PATCH 34/52] Improves logging --- code/game/gamemodes/miniantags/borer/borer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 84ef2424c55..5ef30808cf2 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -139,11 +139,11 @@ if(!input) return CB << "[B.truename] says: [input]" - log_say("Borer Communication: [key_name(src)] -> [key_name(B)] : [input]") + log_say("Borer Communication: [key_name(B)] -> [key_name(CB)] : [input]") for(var/M in dead_mob_list) if(istype(M, /mob/dead/observer)) - M << "Borer Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]" + M << "Borer Communication from [B] ([ghost_follow_link(src, ghost=M)]): [input]" src << "[B.truename] says: [input]" /mob/living/simple_animal/borer/Life() From 30455cc5f902a199b18a80a3378e69a6d3f53899 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 16 Feb 2016 09:50:38 -0800 Subject: [PATCH 35/52] Borers now do not have enhanced metabolism while under effects of sugar --- code/game/gamemodes/miniantags/borer/borer.dm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 5ef30808cf2..83d6cf04063 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -62,7 +62,8 @@ var/talk_inside_host = 0 // So that borers don't accidentally give themselves away on a botched message var/used_dominate - var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. + var/chemicals = 10 // Chemicals used for reproduction and chemical injection. + var/max_chems = 250 // How many chemicals that can be stored in total var/mob/living/carbon/human/host // Human host for the brain worm. var/truename // Name used for brainworm-speak. var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. @@ -169,11 +170,8 @@ src << "\blue You shake off your lethargy as the sugar leaves your host's blood." docile = 0 - if(chemicals < 250) - if(docile) - chemicals += 3 - else - chemicals++ + if(chemicals < max_chems) + chemicals++ if(controlling) if(docile) From 294ea397ccbbdfcae8b0354daef5bbb7b439905b Mon Sep 17 00:00:00 2001 From: TheDZD Date: Tue, 16 Feb 2016 13:42:04 -0500 Subject: [PATCH 36/52] Automatic changelog generation for PR #3608 --- html/changelogs/AutoChangeLog-pr-3608.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3608.yml diff --git a/html/changelogs/AutoChangeLog-pr-3608.yml b/html/changelogs/AutoChangeLog-pr-3608.yml new file mode 100644 index 00000000000..fd3ace9ea8e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3608.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - tweak: "splits the EMP kit into two things: the standard EMP kit (2 grenades and an implant), and the EMP flashlight by itself" From 219839888493330f9f866a42dba22390b4b3621e Mon Sep 17 00:00:00 2001 From: TheDZD Date: Tue, 16 Feb 2016 17:28:17 -0500 Subject: [PATCH 37/52] Automatic changelog generation for PR #3610 --- html/changelogs/AutoChangeLog-pr-3610.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3610.yml diff --git a/html/changelogs/AutoChangeLog-pr-3610.yml b/html/changelogs/AutoChangeLog-pr-3610.yml new file mode 100644 index 00000000000..8d52a9e03fa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3610.yml @@ -0,0 +1,4 @@ +author: Spacemanspark +delete-after: True +changes: + - rscadd: "Adds *yes and *no emotes to Synthetics. Glory to Synthetica." From 6a099a21a2ac85879aba27e08c1b4101e238dda5 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Tue, 16 Feb 2016 17:31:12 -0500 Subject: [PATCH 38/52] Automatic changelog generation for PR #3600 --- html/changelogs/AutoChangeLog-pr-3600.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3600.yml diff --git a/html/changelogs/AutoChangeLog-pr-3600.yml b/html/changelogs/AutoChangeLog-pr-3600.yml new file mode 100644 index 00000000000..34aa345cbc3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3600.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - tweak: "Laser eyes mutation no longer drains nutrition" From 677ebfbb9de91807324f70e6788e33687efd549b Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 16 Feb 2016 18:57:39 -0500 Subject: [PATCH 39/52] Fixed catwalks dropping wrong amounts --- code/game/objects/items/stacks/rods.dm | 21 +++++++++++++-------- code/game/turfs/simulated/floor/plating.dm | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 4412bff1265..75432a86da2 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -36,17 +36,22 @@ return if(WT.remove_fuel(0,user)) - var/obj/item/stack/sheet/metal/new_item = new(usr.loc) - new_item.add_to_stacks(usr) + var/obj/item/stack/sheet/metal/new_item = new(user.loc) + new_item.add_to_stacks(user) + if(new_item.get_amount() <= 0) + // stack was moved into another one on the pile + new_item = locate() in user.loc + user.visible_message("[user.name] shaped [src] into metal with the weldingtool.", \ "You shaped [src] into metal with the weldingtool.", \ "You hear welding.") - var/obj/item/stack/rods/R = src - src = null - var/replace = (user.get_inactive_hand()==R) - R.use(2) - if (!R && replace) - user.put_in_hands(new_item) + + var/replace = user.get_inactive_hand() == src + use(2) + if (get_amount() <= 0 && replace) + user.unEquip(src, 1) + if(new_item) + user.put_in_hands(new_item) return ..() diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 25694f28fc3..0e900329922 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -223,7 +223,7 @@ if(!broken && isscrewdriver(C)) user << "You unscrew the catwalk's rods." - new /obj/item/stack/rods(src, 2) + new /obj/item/stack/rods(src, 1) ReplaceWithLattice() for(var/direction in cardinal) var/turf/T = get_step(src,direction) From 300d85be1c52574bea570377c7f65b584c29e0d4 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 16 Feb 2016 19:30:48 -0500 Subject: [PATCH 40/52] EngiVend has camera assemblies, can be used by borgs --- code/game/machinery/vending.dm | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 0939b189eb1..4468a42fb64 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -494,15 +494,9 @@ if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) if ((href_list["vend"]) && (src.vend_ready) && (!currently_vending)) - if(istype(usr,/mob/living/silicon)) - if(istype(usr,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = usr - if(!(R.module && istype(R.module,/obj/item/weapon/robot_module/butler) )) - usr << "\red The vending machine refuses to interface with you, as you are not in its target demographic!" - return - else - usr << "\red The vending machine refuses to interface with you, as you are not in its target demographic!" - return + if(issilicon(usr) && !isrobot(usr)) + usr << "The vending machine refuses to interface with you, as you are not in its target demographic!" + return if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH usr << "Access denied." //Unless emagged of course @@ -1096,7 +1090,7 @@ icon_state = "engivend" icon_deny = "engivend-deny" req_access_txt = "11" //Engineering Equipment access - products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/firealarm_electronics = 10,/obj/item/weapon/apc_electronics = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/stock_parts/cell/high = 10) + products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/firealarm_electronics = 10,/obj/item/weapon/apc_electronics = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/stock_parts/cell/high = 10,/obj/item/weapon/camera_assembly = 10) contraband = list(/obj/item/weapon/stock_parts/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) From 951fb006269b438194876519b1d84da1d137c989 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Tue, 16 Feb 2016 22:43:45 -0500 Subject: [PATCH 41/52] unEquip, typeless list, and upgraded subtype --- code/modules/arcade/prize_counter.dm | 17 +++++++++++++++-- code/modules/arcade/prize_datums.dm | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index 5f1c8024553..51c3a43a700 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -21,6 +21,16 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) RefreshParts() +/obj/machinery/prize_counter/upgraded/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/prize_counter(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin/bluespace(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/stack/cable_coil(null, 1) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + RefreshParts() + /obj/machinery/prize_counter/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) prize_tier = B.rating @@ -39,8 +49,11 @@ /obj/machinery/prize_counter/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/stack/tickets)) var/obj/item/stack/tickets/T = O - tickets += T.amount - qdel(T) + if(user.unEquip(T)) //Because if you can't drop it for some reason, you shouldn't be increasing the tickets var + tickets += T.amount + qdel(T) + else + user << "\The [T] seems stuck to your hand!" return if(istype(O, /obj/item/weapon/screwdriver) && anchored) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index 8d1bd5da023..879efe1c3ce 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -2,7 +2,7 @@ var/global/datum/prizes/global_prizes = new /datum/prizes - var/list/datum/prize_item/prizes = list() + var/list/prizes = list() /datum/prizes/New() for(var/itempath in subtypesof(/datum/prize_item)) From b42e4d7da97da28706b4f157ae1957d5baffac0c Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 14 Feb 2016 00:16:29 -0500 Subject: [PATCH 42/52] Mask Adjustment Bugfixes --- code/modules/clothing/clothing.dm | 41 +++++++++++++-------------- code/modules/clothing/masks/boxing.dm | 1 + 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8e3f5cf9b3f..b362a373bc9 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -289,43 +289,44 @@ BLIND // can't see anything if(!ignore_maskadjust) if(!user.canmove || user.stat || user.restrained()) return - if(src.mask_adjusted == 1) - src.icon_state = copytext(src.icon_state, 1, findtext(src.icon_state, "_up")) //Trims the '_up' off the end of the icon state, thus reverting to the most recent previous state + if(mask_adjusted) + icon_state = copytext(icon_state, 1, findtext(icon_state, "_up")) /*Trims the '_up' off the end of the icon state, thus reverting to the most recent previous state. + Had to use this instead of initial() because initial reverted to the wrong state.*/ gas_transfer_coefficient = initial(gas_transfer_coefficient) permeability_coefficient = initial(permeability_coefficient) user << "You push \the [src] back into place." - src.mask_adjusted = 0 + mask_adjusted = 0 slot_flags = initial(slot_flags) if(flags_inv != initial(flags_inv)) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again. flags_inv += HIDEFACE if(H.head == src) - if(src.flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. + if(flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. user.unEquip(src) - else + else //Otherwise, put it in an available hand, the active one preferentially. src.loc = user H.head = null - if(!(H.l_hand) && H.r_hand) //If only the left hand is free, put the bandana there instead. - user.put_in_l_hand(src) - else if(!(H.r_hand) && H.l_hand) //Otherwise if only the right hand is free, put the bandana there instead. - user.put_in_r_hand(src) - else if(!(H.l_hand && H.r_hand)) //Otherwise if both hands are free, pick the active one to put the bandana into. - user.put_in_active_hand(src) + user.put_in_hands(src) else - src.icon_state += "_up" + icon_state += "_up" user << "You push \the [src] out of the way." gas_transfer_coefficient = null permeability_coefficient = null - src.mask_adjusted = 1 + mask_adjusted = 1 if(adjusted_flags) slot_flags = adjusted_flags if(ishuman(user)) if(H.internal) - if(H.internals) - H.internals.icon_state = "internal0" - H.internal = null + if(user.wear_mask == src) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals. + Otherwise, they adjusted it while it was in their hands or some such so we won't be needing to turn off internals.*/ + if(H.internals) + H.internals.icon_state = "internal0" + H.internal = null + if(flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. + flags_inv -= HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE). + This reveals the user's face since the bandana will now be going on their head.*/ if(user.wear_mask == src) - if(src.flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. + if(initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face. if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. user.unEquip(src) else @@ -337,8 +338,6 @@ BLIND // can't see anything user.put_in_r_hand(src) else if(!(H.l_hand && H.r_hand)) //Otherwise if both hands are free, pick the active one to put the bandana into. user.put_in_active_hand(src) - flags_inv -= HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE). - This reveals the user's face since the bandana will now be going on their head.*/ usr.update_inv_wear_mask() usr.update_inv_head() @@ -348,7 +347,7 @@ BLIND // can't see anything name = "shoes" icon = 'icons/obj/clothing/shoes.dmi' desc = "Comfortable-looking shoes." - gender = PLURAL //Carn: for grammarically correct text-parsing + gender = PLURAL //Carn: for grammatically correct text-parsing var/chained = 0 var/can_cut_open = 0 var/cut_open = 0 @@ -376,7 +375,7 @@ BLIND // can't see anything user.visible_message("[user] strikes a [M] on the bottom of [src], lighting it.","You strike the [M] on the bottom of [src] to light it.") else if(M.lit == 1) // Match is lit, not extinguished. M.dropped() - user.visible_message("[user] crushes the [M] into the bottom of [src]. extinguishing it.","You crush the [M] into the bottom of [src], extinguishing it.") + user.visible_message("[user] crushes the [M] into the bottom of [src], extinguishing it.","You crush the [M] into the bottom of [src], extinguishing it.") else // Match has been previously lit and extinguished. user << "The [M] has already been extinguished." return diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index c12fddfc884..d12bac1d3b8 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -8,6 +8,7 @@ w_class = 2 action_button_name = "Adjust Balaclava" ignore_maskadjust = 0 + adjusted_flags = SLOT_HEAD species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/mask.dmi', From e27fb5d27f3baf5f17a47b06b1bc022f0961f479 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 16 Feb 2016 20:10:29 -0500 Subject: [PATCH 43/52] Stops utensils from working on mouthless humanoids --- code/game/objects/items/weapons/kitchen.dm | 5 +++++ code/modules/mob/living/carbon/carbon.dm | 3 +++ code/modules/mob/living/carbon/human/human.dm | 3 +++ code/modules/reagents/oldchem/reagents/reagents_food.dm | 6 +++--- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 83e488c5959..df741ca2328 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -50,6 +50,11 @@ return ..() if (reagents.total_volume > 0) + // Mouthless people cannot eat + if(!M.can_eat()) + user << "[M] cannot eat with a fork!" + return + if(M == user) M.visible_message("\The [user] eats some [loaded] from \the [src].") reagents.trans_to(M, reagents.total_volume) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b2cd0136f30..01337b536fc 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -794,3 +794,6 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, Stun(stun) Weaken(weaken) return 1 + +/mob/living/carbon/proc/can_eat(flags = 255) + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 366ec02ae1e..29637dbb2c0 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1858,3 +1858,6 @@ for(var/obj/item/clothing/C in src) //If they have some clothing equipped that lets them see reagents, they can see reagents if(C.scan_reagents) return 1 + +/mob/living/carbon/human/can_eat(flags = 255) + return species && (species.dietflags & flags) diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm index da3244cbda2..70b8929832d 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_food.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm @@ -14,7 +14,7 @@ if(!(M.mind in ticker.mode.vampires)) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients + if(H.can_eat()) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients H.nutrition += nutriment_factor // For hunger and fatness if(prob(50)) M.heal_organ_damage(1,0) if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals @@ -36,7 +36,7 @@ if(!(M.mind in ticker.mode.vampires)) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore + if(H.can_eat(DIET_CARN | DIET_OMNI)) //Make sure that it is not a herbivore H.nutrition += nutriment_factor // For hunger and fatness if(prob(50)) M.heal_organ_damage(1,0) if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals @@ -58,7 +58,7 @@ if(!(M.mind in ticker.mode.vampires)) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore + if(H.can_eat(DIET_HERB | DIET_OMNI)) //Make sure that it is not a carnivore H.nutrition += nutriment_factor // For hunger and fatness if(prob(50)) M.heal_organ_damage(1,0) if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals From 02707fda093728a2afddce8be98bede77c600bf8 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 17 Feb 2016 16:57:53 -0500 Subject: [PATCH 44/52] Automatic changelog generation for PR #3601 --- html/changelogs/AutoChangeLog-pr-3601.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3601.yml diff --git a/html/changelogs/AutoChangeLog-pr-3601.yml b/html/changelogs/AutoChangeLog-pr-3601.yml new file mode 100644 index 00000000000..e0099cb3060 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3601.yml @@ -0,0 +1,7 @@ +author: FalseIncarnate +delete-after: True +changes: + - rscadd: "Adds prize tickets as a replacement for physical arcade prizes." + - rscadd: "Adds a buildable prize counter to exchange tickets for prizes." + - rscadd: "Adds a bike. Despite what Prof. Oak might claim, you can ride it indoors." + - rscadd: "Adds colorful wallets, for that old school arcade pride." From 50d0d0c5e0b45bd578f2d68a06d6c927ac09be77 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 17 Feb 2016 18:07:23 -0500 Subject: [PATCH 45/52] Paid vending machines usable by borgs too --- code/game/machinery/vending.dm | 72 ++++++++++++++-------------------- code/modules/economy/utils.dm | 6 ++- 2 files changed, 35 insertions(+), 43 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 4468a42fb64..aa66773b16b 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -323,7 +323,9 @@ */ /obj/machinery/vending/proc/pay_with_card(var/obj/item/weapon/card/id/I) visible_message("[usr] swipes a card through [src].") - var/datum/money_account/customer_account = attempt_account_access_nosec(I.associated_account_number) + return pay_with_account(get_card_account(I)) + +/obj/machinery/vending/proc/pay_with_account(var/datum/money_account/customer_account) if (!customer_account) src.status_message = "Error: Unable to access account. Please contact technical support if problem persists." src.status_error = 1 @@ -338,7 +340,7 @@ // empty at high security levels if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) var/attempt_pin = input("Enter pin code", "Vendor transaction") as num - customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) + customer_account = attempt_account_access(customer_account, attempt_pin, 2) if(!customer_account) src.status_message = "Unable to access account: incorrect credentials." @@ -351,28 +353,18 @@ return 0 else // Okay to move the money at this point + var/paid = customer_account.charge(currently_vending.price, + transaction_purpose = "Purchase of [currently_vending.product_name]", + terminal_name = name, + terminal_id = name, + dest_name = vendor_account.owner_name) - // debit money from the purchaser's account - customer_account.money -= currently_vending.price - - // create entry in the purchaser's account log - var/datum/transaction/T = new() - T.target_name = "[vendor_account.owner_name] (via [src.name])" - T.purpose = "Purchase of [currently_vending.product_name]" - if(currently_vending.price > 0) - T.amount = "([currently_vending.price])" - else - T.amount = "[currently_vending.price]" - T.source_terminal = src.name - T.date = current_date_string - T.time = worldtime2text() - customer_account.transaction_log.Add(T) - - // Give the vendor the money. We use the account owner name, which means - // that purchases made with stolen/borrowed card will look like the card - // owner made them - credit_purchase(customer_account.owner_name) - return 1 + if(paid) + // Give the vendor the money. We use the account owner name, which means + // that purchases made with stolen/borrowed card will look like the card + // owner made them + credit_purchase(customer_account.owner_name) + return paid /** * Add money for current purchase to the vendor account. @@ -471,25 +463,21 @@ if (href_list["pay"]) if(currently_vending && vendor_account && !vendor_account.suspended) - if(istype(usr, /mob/living/carbon/human)) - var/paid = 0 - var/handled = 0 - var/mob/living/carbon/human/H = usr - var/obj/item/weapon/card/card = null - if(istype(H.wear_id,/obj/item/weapon/card)) - card = H.wear_id - paid = pay_with_card(card) - handled = 1 - else if(istype(H.get_active_hand(), /obj/item/weapon/card)) - card = H.get_active_hand() - paid = pay_with_card(card) - handled = 1 - if(paid) - src.vend(currently_vending, usr) - return - else if(handled) - nanomanager.update_uis(src) - return // don't smack that machine with your 2 credits + var/paid = 0 + var/handled = 0 + var/datum/money_account/A = usr.get_worn_id_account() + if(A) + paid = pay_with_account(A) + handled = 1 + else if(istype(usr.get_active_hand(), /obj/item/weapon/card)) + paid = pay_with_card(usr.get_active_hand()) + handled = 1 + if(paid) + src.vend(currently_vending, usr) + return + else if(handled) + nanomanager.update_uis(src) + return // don't smack that machine with your 2 credits if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) if ((href_list["vend"]) && (src.vend_ready) && (!currently_vending)) diff --git a/code/modules/economy/utils.dm b/code/modules/economy/utils.dm index 44b5ebdd036..a23308b9219 100644 --- a/code/modules/economy/utils.dm +++ b/code/modules/economy/utils.dm @@ -47,6 +47,10 @@ return "$[num2septext(money)]" /datum/money_account/proc/charge(var/transaction_amount,var/datum/money_account/dest,var/transaction_purpose, var/terminal_name="", var/terminal_id=0, var/dest_name = "UNKNOWN") + if(suspended) + usr << "Unable to access source account: account suspended." + return 0 + if(transaction_amount <= money) //transfer the money money -= transaction_amount @@ -84,5 +88,5 @@ transaction_log.Add(T) return 1 else - usr << "\icon[src]You don't have that much money!" + usr << "Insufficient funds in account." return 0 \ No newline at end of file From 51f1899ebc7b5b31998720bf8039e4bf56c7ef7a Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Thu, 18 Feb 2016 03:11:44 -0500 Subject: [PATCH 46/52] Prize Counters and Metastation Fixes Temporarily adds a prize counter to the station - Cyberiad: Bar - Metastation: Dorms / Fitness Room - Also moved around the arcade machine and some lockers to accomodate Adds a FULLY UPGRADED prize counter to the Ninja Holding Area/Bar - This one is not temporary Fixes a TON of Metastation issues - Fixes #3514 - Fixes #2983 - Fixes #2977 - Fixes #2976 - Had to shift some structure around with maint, but it should work fine - Fixes #2968 - Moved the Medbay Surplus Storage to off of a maint tunnel north of viro (no longer connected to medbay directly), and put the psych office where that had been - Fixes #2967 - Fixes #2964 - Wasn't sure if this was referring to the merch store computer or the PDA cartridge vendor, so I went ahead and added the merch store to cargo's lobby and the PDA cartridge vendor to tool storage (re-organized there too) - Fixes #2959 - Fixes #2952 - Magistrate's machine is in the courtroom, everyone else has their machine in their respective office - Fixes #2951 - Just replaced the problem tiles completely. Probably will want to make it prettier another time - Fixes #2949 - Account's database is in the meeting room, as the one on Cyberiad apparently could be reached by anyone with that access - Scattered a few ATMs around, including in the bar, near the HoP's desk, Mr. Changs, Arrivals, and some other spots. - Fixes #2948 - Fixes #2947 - The report mentioned toxins mixing among others, but that one seemed correct already so I didn't mess with it - Fixes #2946 - Had to re-pipe a couple spots to compensate for the added adapters - Fixes # 2942 - Moved some stuff around to accommodate, put the food cart in the freezer - Fixes #2939 - Also reinforced the floor like how it is on the Cyberiad - Fixes #2932 - Well, not exactly. Added a megaphone and EFTPOS to sec, since they have a secVend and their lockers for the belts, but it was already agreed that this wasn't really an issue, so this is mostly to close it. There are still a couple map issues left with Meta, but they are things that might not be map issues (see #2953), the missing sec podbay (#2926, need a good spot for that), stuff that was incredibly vague (see #2933), potentially IC things that are not bugs (#2950), or require sprites (#2937) --- .../MetaStation/MetaStation.v41A.II.dmm | 586 +++++++++--------- _maps/map_files/MetaStation/z5.dmm | 2 +- _maps/map_files/cyberiad/cyberiad.dmm | 3 +- _maps/map_files/cyberiad/z2.dmm | 6 +- 4 files changed, 310 insertions(+), 287 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index c5efb941401..8c7495f982a 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -467,7 +467,7 @@ "aiY" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/hos,/turf/simulated/floor/carpet,/area/security/hos) "aiZ" = (/obj/item/weapon/phone{desc = "Supposedly a direct line to NanoTrasen Central Command. It's not even plugged in."; pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/security/hos) "aja" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) -"ajb" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) +"ajb" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "ajc" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor/preopen{id_tag = "hosprivacy"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/security/hos) "ajd" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/security/range) "aje" = (/obj/structure/target_stake,/obj/item/target/syndicate,/turf/simulated/floor/plasteel,/area/security/range) @@ -520,7 +520,7 @@ "ajZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/security/hos) "aka" = (/obj/machinery/hologram/holopad,/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Head of Security"},/turf/simulated/floor/carpet,/area/security/hos) "akb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/security/hos) -"akc" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 0},/obj/item/device/radio/off{pixel_x = 0; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) +"akc" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 0},/obj/item/device/radio/off{pixel_x = 0; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "akd" = (/turf/simulated/floor/plasteel,/area/security/range) "ake" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fore) "akf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/fore) @@ -709,9 +709,9 @@ "anG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "anH" = (/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "anI" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/book/manual/chef_recipes,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/firealarm_electronics,/obj/item/weapon/grenade/smokebomb,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"anJ" = (/obj/structure/table,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitered"},/area/security/brig) +"anJ" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Security's Office"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "anK" = (/obj/structure/table,/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 26},/obj/machinery/light/small{dir = 1},/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/weapon/folder/white{pixel_x = -4; pixel_y = 2},/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) -"anL" = (/obj/structure/table,/obj/machinery/alarm{pixel_y = 28},/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) +"anL" = (/obj/machinery/atmospherics/unary/portables_connector,/turf/simulated/floor/plating,/area/maintenance/fore) "anM" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitered"},/area/security/brig) "anN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) "anO" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) @@ -745,9 +745,9 @@ "aoq" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/fore) "aor" = (/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fore) "aos" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fore) -"aot" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fore) -"aou" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fore) -"aov" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) +"aot" = (/obj/machinery/sleeper{dir = 8; name = "Prisoner Sleeper"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitered"},/area/security/brig) +"aou" = (/obj/structure/table,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) +"aov" = (/obj/machinery/sleep_console,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) "aow" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aox" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aoy" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) @@ -785,8 +785,8 @@ "ape" = (/obj/machinery/light_construct/small{dir = 4},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/disk/data,/obj/item/weapon/storage/secure/safe{pixel_x = 35; pixel_y = 0},/obj/item/weapon/grenade/flashbang,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "apf" = (/turf/simulated/wall,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "apg" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore) -"aph" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/item/weapon/reagent_containers/glass/bottle/charcoal,/obj/item/weapon/reagent_containers/syringe,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) -"api" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteredcorner"},/area/security/brig) +"aph" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/item/weapon/reagent_containers/glass/bottle/charcoal,/obj/item/weapon/reagent_containers/syringe,/obj/machinery/alarm{pixel_y = 28},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) +"api" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fore) "apj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig) "apk" = (/obj/machinery/door/window/westleft{base_state = "left"; dir = 4; icon_state = "left"; name = "Infirmary"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitered"; tag = "icon-whitehall (WEST)"},/area/security/brig) "apl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig) @@ -820,9 +820,9 @@ "apN" = (/obj/item/target,/obj/item/target,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/syndicate,/obj/item/target/syndicate,/obj/item/target/syndicate,/obj/structure/closet/crate/secure{desc = "A secure crate containing various materials for building a customised test-site."; name = "Firing Range Gear Crate"; req_access_txt = "1"},/obj/machinery/power/apc{cell_type = 2500; dir = 4; name = "Shooting Range APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/security/range) "apO" = (/obj/structure/rack,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plating,/area/maintenance/fore) "apP" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/fore) -"apQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fore) -"apR" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/fore) -"apS" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) +"apQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/fore) +"apR" = (/obj/machinery/prize_counter,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) +"apS" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) "apT" = (/obj/structure/window/reinforced,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Fitness Ring"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "apU" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "apV" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) @@ -861,9 +861,9 @@ "aqC" = (/obj/structure/rack{dir = 1},/obj/item/clothing/under/rank/mailman,/obj/item/clothing/under/rank/vice{pixel_x = 4; pixel_y = -3},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aqD" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/fore) "aqE" = (/obj/machinery/door/airlock/glass_security{name = "N2O Storage"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore) -"aqF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/morgue,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) -"aqG" = (/obj/effect/landmark/start{name = "Brig Physician"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitered"; tag = "icon-whitehall (WEST)"},/area/security/brig) -"aqH" = (/obj/structure/stool/bed/roller,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig) +"aqF" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteredcorner"},/area/security/brig) +"aqG" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitered"},/area/security/brig) +"aqH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig) "aqI" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitered"; tag = "icon-whitehall (WEST)"},/area/security/brig) "aqJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig) "aqK" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel,/area/security/brig) @@ -920,17 +920,17 @@ "arJ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "arK" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "arL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"arM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"arM" = (/obj/machinery/space_heater,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fore) "arN" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"arO" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/obj/item/weapon/tank/air,/turf/simulated/floor/plating,/area/maintenance/fore) -"arP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fore) -"arQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fore) +"arO" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; level = 1},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/fore) +"arP" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitered"; tag = "icon-whitehall (WEST)"},/area/security/brig) +"arQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig) "arR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fore) -"arS" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) -"arT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) -"arU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) +"arS" = (/obj/effect/landmark/start{name = "Brig Physician"},/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig) +"arT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"arU" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "arV" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/security/brig) -"arW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/rack,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/healthanalyzer{pixel_y = -2},/obj/machinery/camera{c_tag = "Brig - Infirmary"; dir = 1; network = list("SS13")},/obj/item/clothing/under/rank/medical/purple{pixel_y = -4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitered"},/area/security/brig) +"arW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fore) "arX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig) "arY" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/brig) "arZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/brig) @@ -1012,7 +1012,7 @@ "atx" = (/obj/machinery/disposal,/obj/machinery/alarm{pixel_y = 28},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "aty" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/rack,/obj/item/clothing/mask/gas/sechailer{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas/sechailer,/obj/item/clothing/mask/gas/sechailer{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "atz" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 22},/obj/machinery/computer/crew,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"atA" = (/obj/structure/table,/obj/structure/reagent_dispensers/peppertank{pixel_x = 32; pixel_y = 0},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 7},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) +"atA" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/obj/item/weapon/tank/air,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fore) "atB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/reagent_dispensers/peppertank{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) "atC" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plasteel,/area/security/main) "atD" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel,/area/security/main) @@ -1071,7 +1071,7 @@ "auE" = (/obj/item/weapon/vending_refill/cigarette,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "auF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "auG" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/color/fyellow,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"auH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"auH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fore) "auI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "auJ" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/fore) "auK" = (/obj/structure/closet/crate,/obj/item/weapon/restraints/handcuffs,/obj/item/bodybag,/obj/item/device/radio,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fore) @@ -1300,7 +1300,7 @@ "ayZ" = (/obj/machinery/firealarm{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/brig) "aza" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/brig) "azb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/brig) -"azc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) +"azc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) "azd" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "aze" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "azf" = (/obj/structure/table/woodentable,/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) @@ -1438,7 +1438,7 @@ "aBH" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "aBI" = (/turf/simulated/wall,/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aBJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) -"aBK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) +"aBK" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/Doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) "aBL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aBM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass{name = "Fore Primary Hallway"},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aBN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/sleep) @@ -1499,9 +1499,9 @@ "aCQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Detective's Office"; req_access = null; req_access_txt = "4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel,/area/security/detectives_office) "aCR" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/window/reinforced/tinted{dir = 5; health = 120; icon_state = "twindow"; reinf = 0},/turf/simulated/floor/plating,/area/security/detectives_office) "aCS" = (/turf/simulated/wall,/area/security/detectives_office) -"aCT" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) +"aCT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/security/brig) "aCU" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{pixel_y = 26},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) -"aCV" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) +"aCV" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera{c_tag = "Brig - Infirmary"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/closet/secure_closet/brigdoc,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitered"},/area/security/brig) "aCW" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/sign/chinese{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aCX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep) "aCY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) @@ -1567,9 +1567,9 @@ "aEg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "aEh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/fore) "aEi" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fore) -"aEj" = (/obj/structure/mirror{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) +"aEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aEk" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) -"aEl" = (/obj/structure/mirror{pixel_x = 28},/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) +"aEl" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aEm" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/crew_quarters/sleep) "aEn" = (/obj/structure/table,/obj/item/clothing/under/suit_jacket/female{pixel_x = 3; pixel_y = 1},/obj/item/clothing/under/suit_jacket/really_black{pixel_x = -2; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/obj/item/clothing/accessory/waistcoat,/obj/item/clothing/under/suit_jacket/red,/obj/item/clothing/accessory/black,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/crew_quarters/sleep) "aEo" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/sleep) @@ -1638,9 +1638,9 @@ "aFz" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "aFA" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/fore) "aFB" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/fore) -"aFC" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) +"aFC" = (/obj/structure/table,/obj/structure/reagent_dispensers/peppertank{pixel_x = 32; pixel_y = 0},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 7},/obj/item/device/eftpos,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "aFD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) -"aFE" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) +"aFE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aFF" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aFG" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aFH" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/light/small{dir = 1},/obj/machinery/power/apc{dir = 1; name = "Dormitories APC"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/sleep) @@ -2056,7 +2056,7 @@ "aNB" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "aNC" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "aND" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/requests_console{department = "Law office"; pixel_x = 0; pixel_y = 32},/obj/machinery/newscaster{pixel_x = -31; pixel_y = 0},/turf/simulated/floor/wood,/area/lawoffice) -"aNE" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/pen/multi,/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/turf/simulated/floor/wood,/area/lawoffice) +"aNE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aNF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -3; pixel_y = 2},/obj/item/weapon/storage/secure/briefcase{pixel_x = 2; pixel_y = -2},/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/wood,/area/lawoffice) "aNG" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Law Office APC"; pixel_y = 24},/obj/structure/flora/kirbyplants{icon_state = "plant-21"; layer = 4.1; tag = "icon-plant-21"},/turf/simulated/floor/wood,/area/lawoffice) "aNH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/lawoffice) @@ -2119,7 +2119,7 @@ "aOM" = (/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 9},/area/crew_quarters/courtroom) "aON" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; listening = 0; name = "Station Intercom (Court)"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/courtroom) "aOO" = (/obj/structure/table/woodentable,/obj/item/weapon/gavelblock,/obj/item/weapon/gavelhammer,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/courtroom) -"aOP" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/courtroom) +"aOP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) "aOQ" = (/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 5},/area/crew_quarters/courtroom) "aOR" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/crew_quarters/courtroom) "aOS" = (/obj/machinery/door/window/southleft{name = "Court Cell"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) @@ -2178,14 +2178,14 @@ "aPT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aPU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aPV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"aPW" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/device/gps{gpstag = "AUX0"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/storage/primary) +"aPW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aPX" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) "aPY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) "aPZ" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 2; pixel_y = -2},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 5},/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) "aQa" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) "aQb" = (/obj/machinery/vending/assist,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) "aQc" = (/obj/machinery/vending/tool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) -"aQd" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/multitool,/obj/item/device/multitool{pixel_x = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{dir = 5; icon_state = "brown"},/area/storage/primary) +"aQd" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aQe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/storage/primary) "aQf" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/space,/area/space) "aQg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) @@ -2203,7 +2203,7 @@ "aQs" = (/obj/effect/landmark/start{name = "Internal Affairs Agent"},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "aQt" = (/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/crew_quarters/courtroom) "aQu" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/wood,/area/lawoffice) -"aQv" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/clothing/glasses/sunglasses/big,/turf/simulated/floor/wood,/area/lawoffice) +"aQv" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/obj/effect/landmark/start{name = "Civilian"},/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aQw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/lawoffice) "aQx" = (/obj/machinery/photocopier,/obj/machinery/camera{c_tag = "Law Office"; dir = 8; network = list("SS13")},/turf/simulated/floor/wood,/area/lawoffice) "aQy" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/locker) @@ -2253,12 +2253,12 @@ "aRq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/landmark/start{name = "Cargo Technician"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/storage) "aRr" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/quartermaster/storage) "aRs" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/bot/mulebot{home_destination = "QM #3"; suffix = "#3"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage) -"aRt" = (/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/storage/primary) +"aRt" = (/obj/structure/mirror{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aRu" = (/turf/simulated/floor/plasteel,/area/storage/primary) "aRv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel,/area/storage/primary) "aRw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/storage/primary) "aRx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/storage/primary) -"aRy" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/vending/artvend,/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/storage/primary) +"aRy" = (/obj/structure/mirror{pixel_x = 28},/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aRz" = (/obj/structure/table,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "aRA" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "aRB" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneCrewMember,/obj/item/weapon/aiModule/purge,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) @@ -2342,11 +2342,11 @@ "aTb" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 10},/area/crew_quarters/courtroom) "aTc" = (/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/crew_quarters/courtroom) "aTd" = (/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/crew_quarters/courtroom) -"aTe" = (/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 6},/area/crew_quarters/courtroom) +"aTe" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aTf" = (/obj/structure/stool/bed/chair{dir = 8; name = "Defense"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/crew_quarters/courtroom) "aTg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) -"aTh" = (/obj/item/device/taperecorder{pixel_y = 0},/obj/item/weapon/cartridge/lawyer,/obj/machinery/door_control{id = "lawyer_blast"; name = "Privacy Shutters"; pixel_x = 0; pixel_y = -26},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/lawoffice) -"aTi" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/multi,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/lawoffice) +"aTh" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) +"aTi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "aTj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/lawoffice) "aTk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/lawoffice) "aTl" = (/obj/structure/closet/lawcloset,/obj/machinery/light_switch{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/wood,/area/lawoffice) @@ -2395,7 +2395,7 @@ "aUc" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Tool Storage"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary) "aUd" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary) "aUe" = (/obj/structure/table,/obj/item/weapon/weldingtool,/obj/item/weapon/crowbar,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "browncorner"},/area/storage/primary) -"aUf" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/storage/primary) +"aUf" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/item/weapon/cartridge/lawyer,/obj/item/weapon/pen/multi,/turf/simulated/floor/wood,/area/lawoffice) "aUg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/storage/primary) "aUh" = (/obj/structure/table,/obj/item/weapon/wirecutters,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/machinery/requests_console{department = "Tool Storage"; departmentType = 0; pixel_x = 30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera{c_tag = "Tool Storage"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/storage/primary) "aUi" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/turret_protected/ai_upload) @@ -2460,7 +2460,7 @@ "aVp" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/stamp/qm{pixel_x = 0; pixel_y = 0},/obj/machinery/status_display{density = 0; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/quartermaster/qm) "aVq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aVr" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary) -"aVs" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 4; icon_state = "browncorner"},/area/storage/primary) +"aVs" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Magistrate's Office"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/courtroom) "aVt" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{dir = 1; icon_state = "browncorner"},/area/storage/primary) "aVu" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/storage/primary) "aVv" = (/obj/structure/table,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/item/clothing/gloves/color/yellow,/obj/item/device/t_scanner,/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/storage/primary) @@ -2638,7 +2638,7 @@ "aYL" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock{name = "Locker Room"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/crew_quarters/locker) "aYM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 2; name = "Locker Room APC"; pixel_x = -1; pixel_y = -26},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/locker) "aYN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -26},/obj/machinery/camera{c_tag = "Locker Room Port"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/locker) -"aYO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/locker) +"aYO" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/device/gps{gpstag = "AUX0"},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/storage/primary) "aYP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/locker) "aYQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/locker) "aYR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/locker) @@ -2937,7 +2937,7 @@ "bey" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "bez" = (/turf/simulated/wall,/area/storage/tools) "beA" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tools) -"beB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/starboard) +"beB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/vending/cart,/turf/simulated/floor/plasteel{dir = 5; icon_state = "brown"},/area/storage/primary) "beC" = (/turf/simulated/wall/r_wall,/area/storage/tech) "beD" = (/obj/machinery/power/apc{dir = 8; name = "Tech Storage APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/storage/tech) "beE" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/storage/tech) @@ -2947,7 +2947,7 @@ "beI" = (/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "Engineering"; name = "Engineering Lockdown"; pixel_x = -24; pixel_y = -5; req_access_txt = "10"},/obj/machinery/door_control{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = -24; pixel_y = 5; req_access_txt = "24"},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) "beJ" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/engine/chiefs_office) "beK" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/obj/item/weapon/reagent_containers/pill/patch/silver_sulf,/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/engine/chiefs_office) -"beL" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/engine/chiefs_office) +"beL" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/clothing/glasses/sunglasses/big,/turf/simulated/floor/wood,/area/lawoffice) "beM" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/engine/chiefs_office) "beN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) "beO" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engineering) @@ -3024,7 +3024,7 @@ "bgh" = (/obj/structure/closet/toolcloset,/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/storage/tools) "bgi" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/storage/tools) "bgj" = (/obj/effect/decal/cleanable/cobweb,/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) -"bgk" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) +"bgk" = (/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/obj/machinery/vending/artvend,/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/storage/primary) "bgl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/starboard) "bgm" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/storage/tech) "bgn" = (/obj/machinery/camera{c_tag = "Secure Tech Storage"; dir = 8},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/tech) @@ -3038,7 +3038,7 @@ "bgv" = (/obj/item/weapon/cartridge/engineering{pixel_x = 4; pixel_y = 5},/obj/item/weapon/cartridge/engineering{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cartridge/engineering{pixel_x = 3},/obj/structure/table/reinforced,/obj/item/weapon/cartridge/atmos,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/engine/chiefs_office) "bgw" = (/obj/effect/landmark/start{name = "Chief Engineer"},/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "bgx" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) -"bgy" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/engine/chiefs_office) +"bgy" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/storage/primary) "bgz" = (/obj/machinery/computer/security/telescreen{desc = "Used for monitoring the singularity engine safely."; dir = 8; name = "Singularity Monitor"; network = list("Singulo"); pixel_x = 29; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) "bgA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/engineering) "bgB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/engine/engineering) @@ -3171,7 +3171,7 @@ "biY" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light_switch{pixel_x = 8; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) "biZ" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) "bja" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/alarm{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) -"bjb" = (/obj/structure/closet/jcloset,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) +"bjb" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 6},/area/crew_quarters/courtroom) "bjc" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "bjd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/maintcentral{name = "Central Maintenance"}) "bje" = (/turf/simulated/wall/r_wall,/area/maintenance/maintcentral{name = "Central Maintenance"}) @@ -3273,7 +3273,7 @@ "bkW" = (/turf/simulated/wall/r_wall,/area/bridge) "bkX" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) "bkY" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) -"bkZ" = (/obj/structure/table/woodentable,/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) +"bkZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Internal Affairs Office"},/turf/simulated/floor/wood,/area/lawoffice) "bla" = (/obj/effect/landmark/start{name = "Captain"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair/comfy/brown{tag = "icon-comfychair (WEST)"; icon_state = "comfychair"; dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "blb" = (/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "blc" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3360,17 +3360,17 @@ "bmF" = (/obj/item/weapon/tank/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "bmG" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/power/apc{cell_type = 2500; dir = 4; name = "Central Maintenance APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "bmH" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/bridge) -"bmI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/card,/turf/simulated/floor/plasteel{dir = 9; icon_state = "darkgreen"},/area/bridge) -"bmJ" = (/obj/machinery/computer/med_data,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkgreen"},/area/bridge) -"bmK" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkgreen"},/area/bridge) -"bmL" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/folder/yellow{pixel_y = 4},/obj/machinery/camera{c_tag = "Bridge - Central"; dir = 2; network = list("SS13")},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbrown"},/area/bridge) -"bmM" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbrown"},/area/bridge) -"bmN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/monitor{name = "Bridge Power Monitoring Console"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbrown"},/area/bridge) -"bmO" = (/obj/machinery/computer/atmos_alert,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbrown"},/area/bridge) -"bmP" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -1; pixel_y = 4},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbrown"},/area/bridge) -"bmQ" = (/obj/machinery/computer/security,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"; temperature = 273.15},/area/bridge) -"bmR" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"; temperature = 273.15},/area/bridge) -"bmS" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/computer/prisoner,/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkred"; tag = "icon-darkblue"; temperature = 273.15},/area/bridge) +"bmI" = (/obj/machinery/door_control{id = "lawyer_blast"; name = "Privacy Shutters"; pixel_x = 0; pixel_y = -26},/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/multi,/turf/simulated/floor/wood,/area/lawoffice) +"bmJ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/assembly/signaler,/obj/item/device/multitool{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/storage/primary) +"bmK" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/assembly/signaler,/obj/item/device/multitool{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "browncorner"},/area/storage/primary) +"bmL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/locker) +"bmM" = (/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bmN" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/engine/chiefs_office) +"bmO" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) +"bmP" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/clipboard,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/engine/chiefs_office) +"bmQ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/reagent_dispensers/spacecleanertank{pixel_y = 30},/turf/simulated/floor/plasteel,/area/janitor) +"bmR" = (/obj/structure/table/woodentable,/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 1},/obj/machinery/photocopier/faxmachine{department = "Captain's Office"},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) +"bmS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) "bmT" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/bridge) "bmU" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/photo_album{pixel_y = -4},/obj/item/device/camera{pixel_y = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (Captain)"; pixel_x = -28},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bmV" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/obj/item/weapon/razor{pixel_x = -4; pixel_y = 2},/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3445,7 +3445,7 @@ "bom" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/device/multitool,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"}) "bon" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel,/area/quartermaster/office{name = "\improper Cargo Office"}) "boo" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light_switch{pixel_x = 27; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"}) -"bop" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/hallway/primary/port) +"bop" = (/obj/machinery/computer/med_data,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "boq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "bor" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "bos" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) @@ -3457,13 +3457,13 @@ "boy" = (/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "boz" = (/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "boA" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) -"boB" = (/obj/item/weapon/folder/white,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkgreen"},/area/bridge) +"boB" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/card,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "boC" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "boD" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "boE" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "boF" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "boG" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"boH" = (/obj/item/weapon/folder/red{pixel_y = 3},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4},/obj/structure/table/glass,/obj/item/weapon/folder/red{pixel_y = 3},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"; tag = "icon-darkblue"; temperature = 273.15},/area/bridge) +"boH" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/folder/yellow{pixel_y = 4},/obj/machinery/camera{c_tag = "Bridge - Central"; dir = 2; network = list("SS13")},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "boI" = (/turf/simulated/wall,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "boJ" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/structure/window/reinforced{dir = 1; pixel_y = 2},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/light_switch{pixel_x = -28; pixel_y = 0},/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "boK" = (/obj/machinery/door/window{dir = 1; name = "Captain's Bedroom"; req_access_txt = "20"},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3529,7 +3529,7 @@ "bpS" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"}) "bpT" = (/obj/structure/disposalpipe/segment,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"}) "bpU" = (/obj/machinery/autolathe,/obj/machinery/newscaster{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 6; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"}) -"bpV" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{dir = 10; icon_state = "brown"},/area/hallway/primary/port) +"bpV" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bpW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/port) "bpX" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "browncorner"},/area/hallway/primary/port) "bpY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/stack/packageWrap{pixel_x = 2; pixel_y = -3},/obj/item/stack/packageWrap{pixel_x = 2; pixel_y = -3},/obj/item/stack/packageWrap{pixel_x = 2; pixel_y = -3},/obj/item/weapon/hand_labeler,/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/hallway/primary/port) @@ -3537,15 +3537,15 @@ "bqa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) "bqb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) "bqc" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads) -"bqd" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) +"bqd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/monitor{name = "Bridge Power Monitoring Console"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bqe" = (/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) -"bqf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/filingcabinet/chestdrawer{pixel_y = 3},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "darkblue"},/area/bridge) -"bqg" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 29},/obj/machinery/computer/teleporter,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bqh" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = 3},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkgreencorners"; tag = "icon-greencorner (NORTH)"},/area/bridge) +"bqf" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bqg" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -1; pixel_y = 4},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bqh" = (/obj/machinery/computer/atmos_alert,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bqi" = (/obj/item/device/radio/beacon,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bqj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/recharger{pixel_y = 3},/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredcorners"},/area/bridge) -"bqk" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/computer/security/mining,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bql" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkblue"},/area/bridge) +"bqj" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bqk" = (/obj/machinery/computer/security,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bql" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/computer/prisoner,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bqm" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/door/window/westright{dir = 4},/obj/item/weapon/soap/deluxe,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bqn" = (/obj/structure/mirror{pixel_y = 28},/obj/structure/sink{pixel_y = 17},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bqo" = (/obj/structure/toilet{pixel_y = 13},/obj/machinery/light{dir = 2; icon_state = "tube1"},/obj/effect/landmark/start{name = "Captain"},/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3628,25 +3628,25 @@ "brN" = (/obj/structure/sign/directions/security{desc = "A direction sign, pointing out which way the security department is."; dir = 1; icon_state = "direction_sec"; pixel_x = 0; pixel_y = 8; tag = "icon-direction_sec (NORTH)"},/obj/structure/sign/directions/engineering{desc = "A direction sign, pointing out which way the engineering department is."; dir = 4; icon_state = "direction_eng"; pixel_y = 0; tag = "icon-direction_eng (EAST)"},/turf/simulated/wall/r_wall,/area/hallway/primary/port) "brO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) "brP" = (/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/door_control{id = "hop"; name = "Privacy Shutters Control"; pixel_x = 0; pixel_y = 25; req_access_txt = "28"},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/heads) -"brQ" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/secure/briefcase,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/heads) +"brQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall/r_wall,/area/turret_protected/ai) "brR" = (/obj/machinery/recharger,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/item/weapon/storage/secure/safe{pixel_x = 34; pixel_y = 0},/obj/item/device/flash,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/heads) "brS" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "brT" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "brU" = (/obj/item/device/radio/off,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/maintcentral{name = "Central Maintenance"}) "brV" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Bridge"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/maintcentral{name = "Central Maintenance"}) "brW" = (/obj/machinery/door/window/westleft{dir = 4; name = "Bridge Deliveries"; req_access_txt = "19"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/bridge) -"brX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) +"brX" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/hallway/primary/port) "brY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "brZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bsa" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bsb" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) -"bsc" = (/obj/structure/window/reinforced,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bsd" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/window/brigdoor{dir = 2; name = "Command Desk"; req_access_txt = "19"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bse" = (/obj/structure/window/reinforced,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bsf" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) +"bsb" = (/obj/item/weapon/folder/white,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bsc" = (/obj/item/weapon/folder/red{pixel_y = 3},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4},/obj/structure/table/glass,/obj/item/weapon/folder/red{pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bsd" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/wall/r_wall,/area/construction/hallway{name = "\improper MiniSat Exterior"}) +"bse" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/wall/r_wall,/area/construction/hallway{name = "\improper MiniSat Exterior"}) +"bsf" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/wall/r_wall,/area/construction/hallway{name = "\improper MiniSat Exterior"}) "bsg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bsh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bsi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Bridge - Starboard"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) +"bsi" = (/obj/machinery/computer/merch,/turf/simulated/floor/plasteel{dir = 10; icon_state = "brown"},/area/hallway/primary/port) "bsj" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bsk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "bsl" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/central) @@ -3731,21 +3731,21 @@ "btM" = (/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/heads) "btN" = (/obj/effect/landmark/start{name = "Head of Personnel"},/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/wood,/area/crew_quarters/heads) "btO" = (/obj/machinery/newscaster/security_unit{pixel_x = 32; pixel_y = 0},/obj/item/weapon/storage/box/PDAs{pixel_x = 4; pixel_y = 4},/obj/structure/table/woodentable,/obj/item/weapon/storage/box/ids,/obj/item/weapon/storage/box/ids,/turf/simulated/floor/wood,/area/crew_quarters/heads) -"btP" = (/obj/machinery/power/apc{cell_type = 10000; dir = 8; name = "Bridge APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable/yellow,/obj/machinery/camera{c_tag = "Bridge - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) +"btP" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "btQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"btR" = (/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) -"btS" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"btT" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "darkblue"},/area/bridge) +"btR" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 29},/obj/machinery/computer/teleporter,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"btS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/filingcabinet/chestdrawer{pixel_y = 3},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"btT" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = 3},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "btU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/recharger,/obj/item/weapon/restraints/handcuffs,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "btV" = (/obj/machinery/computer/communications,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "btW" = (/obj/machinery/computer/security/wooden_tv{pixel_x = 1; pixel_y = 6},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "btX" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/glass,/obj/item/weapon/folder/blue{pixel_y = 2},/obj/item/weapon/folder/blue{pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"btY" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/bridge) -"btZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) +"btY" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/computer/security/mining,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"btZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/recharger{pixel_y = 3},/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bua" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bub" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) +"bub" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "buc" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/storage/fancy/donut_box,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bud" = (/obj/structure/displaycase{pixel_y = 5},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) +"bud" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall/r_wall,/area/construction/hallway{name = "\improper MiniSat Exterior"}) "bue" = (/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "buf" = (/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bug" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3754,12 +3754,12 @@ "buj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Central Primary Hallway - Starboard - Art Storage"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "buk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "bul" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/civilian/barber) -"bum" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bum" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/secure/briefcase,/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bun" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "buo" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "bup" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "buq" = (/obj/machinery/reagentgrinder,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bur" = (/obj/structure/table/woodentable,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/machinery/camera{c_tag = "Maltese Falcon - Backroom"; dir = 2; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bur" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bus" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/wood,/area/crew_quarters/bar) "but" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Bar Delivery"; req_access_txt = "25"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/bar) "buu" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/crew_quarters/bar) @@ -3842,7 +3842,7 @@ "bvT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bvU" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bvV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) -"bvW" = (/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/pen,/obj/structure/window/reinforced,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/heads) +"bvW" = (/obj/structure/window/reinforced,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bvX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window{dir = 2; name = "HoP's Desk"; pixel_y = 0; req_access_txt = "57"},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bvY" = (/obj/structure/filingcabinet/chestdrawer{pixel_y = 6},/obj/structure/window/reinforced,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bvZ" = (/obj/machinery/vending/cart{req_access_txt = "57"},/turf/simulated/floor/wood,/area/crew_quarters/heads) @@ -3850,18 +3850,18 @@ "bwb" = (/obj/machinery/computer/ordercomp,/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bwc" = (/obj/structure/closet/secure_closet/hop,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bwd" = (/turf/simulated/wall,/area/crew_quarters/heads) -"bwe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bwf" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bwg" = (/obj/structure/rack,/obj/item/device/aicard,/obj/item/device/radio/off,/obj/machinery/computer/security/telescreen{dir = 1; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) +"bwe" = (/obj/structure/window/reinforced,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bwf" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/window/brigdoor{dir = 2; name = "Command Desk"; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bwg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Bridge - Starboard"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bwh" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/cell_charger{pixel_y = 4},/obj/structure/table/glass,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bwi" = (/turf/simulated/floor/carpet,/area/bridge) "bwj" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet,/area/bridge) "bwk" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bwl" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/structure/rack,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/timer,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bwm" = (/obj/machinery/light,/obj/structure/rack,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency{pixel_x = -2; pixel_y = -3},/obj/item/weapon/wrench,/obj/item/device/multitool,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bwn" = (/obj/machinery/light_switch{pixel_x = 8; pixel_y = -26},/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/bridge) -"bwo" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"bwp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 6; icon_state = "darkblue"},/area/bridge) +"bwl" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bwm" = (/obj/machinery/power/apc{cell_type = 10000; dir = 8; name = "Bridge APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable/yellow,/obj/machinery/camera{c_tag = "Bridge - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bwn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bwo" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/displaycase/captains_laser,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) +"bwp" = (/obj/structure/table/woodentable,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/machinery/camera{c_tag = "Maltese Falcon - Backroom"; dir = 2; network = list("SS13")},/obj/item/device/eftpos,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bwq" = (/obj/structure/closet/fireaxecabinet{pixel_y = -32},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 7},/obj/item/weapon/pen{pixel_y = 3},/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bwr" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/power/apc{dir = 8; name = "Captain's Quarters APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/light/small{dir = 8},/obj/item/weapon/paper{info = "Congratulations,

    Your station has been selected to carry out the Gateway Project.

    The equipment will be shipped to you at the start of the next quarter.
    You are to prepare a secure location to house the equipment as outlined in the attached documents.

    --Nanotrasen Blue Space Research"; name = "Confidential Correspondence, Pg 1"; pixel_x = 0; pixel_y = 0},/obj/item/weapon/coin/plasma,/obj/item/weapon/melee/chainofcommand,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bws" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3964,16 +3964,16 @@ "byl" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Head of Personnel APC"; pixel_y = 24},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bym" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads) "byn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/heads) -"byo" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"byp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) +"byo" = (/obj/structure/window/reinforced,/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/turf/simulated/floor/wood,/area/crew_quarters/heads) +"byp" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "byq" = (/turf/simulated/wall,/area/bridge) "byr" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/vending/cola{pixel_x = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bys" = (/obj/machinery/door_control{id = "bridge blast"; name = "Bridge Access Blast Door Control"; pixel_x = -1; pixel_y = -24; req_access_txt = "19"},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/door_control{id = "council blast"; name = "Council Chamber Blast Door Control"; pixel_x = -1; pixel_y = -34; req_access_txt = "19"},/obj/machinery/camera{c_tag = "Bridge - Command Chair"; dir = 1; network = list("SS13")},/turf/simulated/floor/carpet,/area/bridge) "byt" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/bridge) "byu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/door_control{id = "evashutter"; name = "E.V.A. Storage Shutter Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "19"},/obj/machinery/door_control{id = "gateshutter"; name = "Gateway Shutter Control"; pixel_x = 0; pixel_y = -34; req_access_txt = "19"},/turf/simulated/floor/carpet,/area/bridge) "byv" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/machinery/vending/snack{pixel_x = -2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"byw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"byx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) +"byw" = (/obj/structure/rack,/obj/item/device/aicard,/obj/item/device/radio/off,/obj/machinery/computer/security/telescreen{dir = 1; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"byx" = (/obj/machinery/light,/obj/structure/rack,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency{pixel_x = -2; pixel_y = -3},/obj/item/weapon/wrench,/obj/item/device/multitool,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "byy" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced,/obj/machinery/light_switch{pixel_x = -28; pixel_y = 0},/obj/item/weapon/storage/secure/briefcase{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/lockbox/medal{pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "byz" = (/obj/machinery/door/window{dir = 2; name = "Captain's Desk"; req_access_txt = "20"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "byA" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/structure/window/reinforced,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3985,14 +3985,14 @@ "byG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "byH" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "byI" = (/obj/structure/stool/bed/chair/barber{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) -"byJ" = (/obj/structure/table/reinforced,/obj/structure/mirror{dir = 4; pixel_x = 28; pixel_y = 0},/obj/item/weapon/razor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) +"byJ" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/structure/rack,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/timer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "byK" = (/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/wood,/area/crew_quarters/bar) "byL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "byM" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "byN" = (/obj/structure/closet/gmcloset{desc = "It's a storage unit."; icon_state = "black"; name = "spare gear"},/obj/item/weapon/wrench,/turf/simulated/floor/wood,/area/crew_quarters/bar) "byO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/starboard) "byP" = (/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/starboard) -"byQ" = (/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard) +"byQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "byR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/maintenance/starboard) "byS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/starboard) "byT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/hallway/primary/starboard) @@ -4055,15 +4055,15 @@ "bzY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bzZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bAa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/heads) -"bAb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) +"bAb" = (/obj/machinery/light_switch{pixel_x = 8; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bAc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bAd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/bridge) -"bAe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/bookcase,/turf/simulated/floor/wood,/area/bridge) +"bAe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bAf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall,/area/bridge) "bAg" = (/obj/machinery/door/airlock/command{name = "Command Desk"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/bridge) "bAh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/bridge) "bAi" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/bridge) -"bAj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) +"bAj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bAk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bAl" = (/obj/machinery/vending/boozeomat,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bAm" = (/obj/machinery/hologram/holopad{pixel_x = 9; pixel_y = -9},/turf/simulated/floor/carpet{tag = "icon-carpet6-2"; icon_state = "carpet6-2"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -4154,22 +4154,22 @@ "bBT" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/computer/security/telescreen/entertainment{pixel_y = 30},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library) "bBU" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/item/weapon/folder,/obj/item/weapon/folder,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library) "bBV" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/heads) -"bBW" = (/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/heads) +"bBW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bBX" = (/obj/machinery/photocopier{pixel_y = 3},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bBY" = (/obj/machinery/pdapainter,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bBZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bCa" = (/obj/machinery/computer/card,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bCb" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Head of Personnel"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{pixel_x = 38; pixel_y = -4},/obj/machinery/door_control{id = "hopqueue"; name = "Queue Shutters Control"; pixel_x = 25; pixel_y = -4; req_access_txt = "28"},/obj/machinery/door_control{id = "hop"; name = "Privacy Shutters Control"; pixel_x = 25; pixel_y = 6; req_access_txt = "28"},/obj/machinery/flasher_button{id = "hopflash"; pixel_x = 38; pixel_y = 6},/turf/simulated/floor/wood,/area/crew_quarters/heads) -"bCc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) -"bCd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera{c_tag = "Bridge - Port Access"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) -"bCe" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bCf" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law{pixel_y = 3},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bCc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bCd" = (/obj/structure/table/reinforced,/obj/structure/mirror{dir = 4; pixel_x = 28; pixel_y = 0},/obj/item/weapon/razor,/obj/item/device/eftpos,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) +"bCe" = (/obj/item/weapon/storage/toolbox/emergency,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bCf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bCg" = (/obj/machinery/hologram/holopad,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bCh" = (/obj/machinery/camera{c_tag = "Council Chamber"; dir = 2; network = list("SS13")},/obj/machinery/light{dir = 1},/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bCi" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/yellow,/obj/machinery/firealarm{pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bCi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/account_database,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 250; oxygen = 0; temperature = 0},/area/bridge) "bCj" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bCk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Bridge - Starboard Access"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) -"bCl" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) +"bCk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bCl" = (/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/woodentable,/obj/item/device/eftpos,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bCm" = (/obj/machinery/vending/cigarette{pixel_y = 2; products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/random = 4)},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bCn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/carpet{tag = "icon-carpet7-3"; icon_state = "carpet7-3"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bCo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/stool/bed/chair/comfy/brown{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -4227,7 +4227,7 @@ "bDo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bDp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bDq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) -"bDr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Arrivals - Middle Arm"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) +"bDr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera{c_tag = "Bridge - Port Access"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bDs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry{name = "Arrivals"}) "bDt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bluecorner"},/area/hallway/secondary/entry{name = "Arrivals"}) "bDu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -4257,8 +4257,8 @@ "bDS" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id_tag = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) "bDT" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) "bDU" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/window/northleft{dir = 2; icon_state = "left"; name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hop"; layer = 3.1; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) -"bDV" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) -"bDW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) +"bDV" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bDW" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/yellow,/obj/machinery/firealarm{pixel_y = 28},/obj/item/weapon/book/manual/security_space_law{pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bDX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Council Chamber"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bDY" = (/obj/structure/stool/bed/chair/comfy/beige,/turf/simulated/floor/carpet,/area/bridge) "bDZ" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/carpet,/area/bridge) @@ -4267,8 +4267,8 @@ "bEc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/bridge) "bEd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bEe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Council Chamber"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bEf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/bridge) -"bEg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) +"bEf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Bridge - Starboard Access"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"bEg" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bEh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bEi" = (/turf/simulated/floor/carpet{tag = "icon-carpet6-2"; icon_state = "carpet6-2"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet{tag = "icon-carpet15-11"; icon_state = "carpet15-11"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -4297,7 +4297,7 @@ "bEG" = (/turf/simulated/wall,/area/crew_quarters/theatre) "bEH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) "bEI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/hallway/primary/starboard) -"bEJ" = (/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/hallway/primary/starboard) +"bEJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Arrivals - Middle Arm"; dir = 1; network = list("SS13")},/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bEK" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/item/clothing/mask/gas,/obj/machinery/alarm{pixel_y = 23},/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/turf/simulated/floor/plasteel{dir = 9; icon_state = "caution"},/area/atmos) "bEL" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) "bEM" = (/obj/machinery/computer/atmos_alert,/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = 32},/obj/machinery/camera{c_tag = "Atmospherics - Control Room"; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) @@ -4349,7 +4349,7 @@ "bFG" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bFH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/flasher{id = "hopflash"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bFI" = (/turf/simulated/wall/r_wall,/area/bridge/meeting_room{name = "\improper Command Hallway"}) -"bFJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/machinery/door_control{id = "bridge blast"; name = "Bridge Access Blast Door Control"; pixel_x = 24; pixel_y = -24; req_access_txt = "19"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) +"bFJ" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bFK" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/vending/coffee{pixel_x = -3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bFL" = (/obj/machinery/door_control{id = "council blast"; name = "Council Chamber Blast Door Control"; pixel_x = 5; pixel_y = -28; req_access_txt = "19"},/obj/structure/reagent_dispensers/beerkeg{desc = "One of the more successful achievements of the NanoTrasen Corporate Warfare Division, their nuclear fission explosives are renowned for being cheap to produce and devestatingly effective. Signs explain that though this is just a model, every NanoTrasen station is equipped with one, just in case. All Captains carefully guard the disk needed to detonate them - at least, the sign says they do. There seems to be a tap on the back."; icon = 'icons/obj/stationobjs.dmi'; icon_state = "nuclearbomb0"; name = "NanoTrasen-brand nuclear fission explosive"; pixel_x = 2; pixel_y = 6},/turf/simulated/floor/carpet,/area/bridge) "bFM" = (/obj/structure/stool/bed/chair/comfy/teal{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet,/area/bridge) @@ -4360,7 +4360,7 @@ "bFR" = (/obj/machinery/door_control{id = "council blast"; name = "Council Chamber Blast Door Control"; pixel_x = -5; pixel_y = -28; req_access_txt = "19"},/turf/simulated/floor/carpet,/area/bridge) "bFS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/vending/cigarette{pixel_x = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bFT" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door_control{id = "bridge blast"; name = "Bridge Access Blast Door Control"; pixel_x = -24; pixel_y = -24; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bFU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"; temperature = 273.15},/area/bridge) +"bFU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bFV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/carpet{tag = "icon-carpet5-1"; icon_state = "carpet5-1"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bFW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/carpet{tag = "icon-carpetside"; icon_state = "carpetside"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bFX" = (/turf/simulated/floor/carpet{tag = "icon-carpetside"; icon_state = "carpetside"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -4446,14 +4446,14 @@ "bHz" = (/obj/machinery/door/poddoor/shutters/preopen{id_tag = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bHA" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bHB" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor/shutters/preopen{id_tag = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "loadingarea"; tag = "loading"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) -"bHC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge Access"; req_access_txt = "19"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/bridge) -"bHD" = (/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_command{name = "Bridge Access"; req_access_txt = "19"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/bridge) +"bHC" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/hallway/primary/starboard) +"bHD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/machinery/door_control{id = "bridge blast"; name = "Bridge Access Blast Door Control"; pixel_x = 24; pixel_y = -24; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bHE" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) "bHF" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) "bHG" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) "bHH" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) "bHI" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) -"bHJ" = (/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge Access"; req_access_txt = "19"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/bridge) +"bHJ" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bHK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "20;12"},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "bHL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "bHM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=12-Central-Starboard"; location = "11.1-Command-Starboard"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) @@ -4509,8 +4509,8 @@ "bIK" = (/obj/structure/stool/bed/chair,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport) "bIL" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals"}) "bIM" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) -"bIN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"bIO" = (/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"bIN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"bIO" = (/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_command{name = "Bridge Access"; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bIP" = (/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bIQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/security/vacantoffice) "bIR" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/security/vacantoffice) @@ -4617,7 +4617,7 @@ "bKO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bKP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bKQ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) -"bKR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) +"bKR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge Access"; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bKS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/camera{c_tag = "Command Hallway - Port"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bKT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bKU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) @@ -4836,7 +4836,7 @@ "bOZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bPa" = (/obj/machinery/light,/obj/machinery/camera{c_tag = "Kitchen Hatch"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bPb" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) -"bPc" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bPc" = (/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge Access"; req_access_txt = "19"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bPd" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Theatre Stage"; req_access_txt = "0"},/turf/simulated/floor/carpet,/area/crew_quarters/theatre) "bPe" = (/obj/machinery/light_switch{pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light,/turf/simulated/floor/carpet,/area/crew_quarters/theatre) "bPf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet,/area/crew_quarters/theatre) @@ -4937,7 +4937,7 @@ "bQW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/maintenance/atmos_control{name = "Telecoms Storage"}) "bQX" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/engineering{name = "Telecoms Storage"; req_access_txt = "61"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/maintenance/atmos_control{name = "Telecoms Storage"}) "bQY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/wall/r_wall,/area/atmos) -"bQZ" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "External to Filter"; on = 1},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/binary/volume_pump/on{dir = 4; name = "External to Filter"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) +"bQZ" = (/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bRa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bRb" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 2},/turf/simulated/floor/plasteel,/area/atmos) "bRc" = (/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel,/area/atmos) @@ -5007,8 +5007,8 @@ "bSo" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/gateway) "bSp" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "bSq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/obj/machinery/camera{c_tag = "Central Primary Hallway - Starboard - Kitchen"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) -"bSr" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/door_control{id = "kitchenwindow"; name = "Window Shutter Control"; pixel_x = -26; pixel_y = 0; req_access_txt = "28"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"bSs" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/door_control{id = "kitchen"; name = "Kitchen Shutters Control"; pixel_x = -4; pixel_y = 26; req_access_txt = "28"},/obj/machinery/light_switch{pixel_x = 6; pixel_y = 26},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bSr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) +"bSs" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bSt" = (/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bSu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bSv" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) @@ -5093,7 +5093,7 @@ "bTW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) "bTX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) "bTY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor/preopen{id_tag = "kitchenwindow"; name = "kitchen shutters"},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/crew_quarters/kitchen) -"bTZ" = (/obj/structure/rack,/obj/item/weapon/book/manual/chef_recipes{pixel_x = 2; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bTZ" = (/obj/machinery/light,/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bUa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bUb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bUc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) @@ -5161,11 +5161,11 @@ "bVm" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/maintcentral{name = "Central Maintenance"}) "bVn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) "bVo" = (/obj/machinery/door/poddoor/preopen{id_tag = "kitchenwindow"; name = "kitchen shutters"},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/crew_quarters/kitchen) -"bVp" = (/obj/structure/foodcart,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bVp" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/binary/volume_pump/on{dir = 4; name = "External to Filter"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bVq" = (/obj/effect/landmark/start{name = "Cook"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) -"bVr" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"bVs" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"bVt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bVr" = (/obj/structure/table,/obj/machinery/door_control{id = "kitchenwindow"; name = "Window Shutter Control"; pixel_x = -26; pixel_y = 0; req_access_txt = "28"},/obj/machinery/kitchen_machine/microwave,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bVs" = (/obj/structure/table,/obj/machinery/door_control{id = "kitchen"; name = "Kitchen Shutters Control"; pixel_x = -4; pixel_y = 26; req_access_txt = "28"},/obj/machinery/light_switch{pixel_x = 6; pixel_y = 26},/obj/machinery/kitchen_machine/microwave,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bVt" = (/obj/machinery/kitchen_machine/candy_maker,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bVu" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bVv" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bVw" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) @@ -5252,7 +5252,7 @@ "bWZ" = (/obj/machinery/door/airlock/maintenance{name = "Gateway Maintenance"; req_access_txt = "17"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/gateway) "bXa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/maintcentral{name = "Central Maintenance"}) "bXb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) -"bXc" = (/obj/structure/rack,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bXc" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bXd" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bXe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bXf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) @@ -5320,11 +5320,11 @@ "bYp" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Gateway - Access"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/gateway) "bYq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/maintcentral{name = "Central Maintenance"}) "bYr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) -"bYs" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Kitchen APC"; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"bYt" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"bYu" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/door_control{id = "kitchenhydro"; name = "Service Shutter Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "28"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"bYv" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/item/device/radio/intercom{pixel_y = -25},/obj/item/weapon/kitchen/rollingpin,/obj/machinery/camera{c_tag = "Kitchen"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) -"bYw" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bYs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes{pixel_x = 2; pixel_y = 6},/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bYt" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/storage/box/donkpockets,/obj/item/device/eftpos,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bYu" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bYv" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Kitchen APC"; pixel_y = -24},/obj/structure/cable/yellow,/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bYw" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/item/weapon/kitchen/rollingpin,/obj/machinery/camera{c_tag = "Kitchen"; dir = 1; network = list("SS13")},/obj/machinery/door_control{id = "kitchenhydro"; name = "Service Shutter Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "28"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bYx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bYy" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bYz" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Doorsilver.dmi'; name = "Kitchen Cold Room"; req_access_txt = "28"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) @@ -5332,7 +5332,7 @@ "bYB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera{c_tag = "Kitchen - Coldroom"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "bYC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{pixel_y = -26},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "bYD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) -"bYE" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) +"bYE" = (/obj/machinery/cooker/deepfryer,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bYF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/starboard) "bYG" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/maintenance/starboard) "bYH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -5458,8 +5458,8 @@ "caX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/starboard) "caY" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/starboard) "caZ" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/starboard) -"cba" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/starboard) -"cbb" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/maintenance/starboard) +"cba" = (/obj/item/device/radio/intercom{pixel_y = -25},/obj/machinery/camera{c_tag = "Kitchen"; dir = 1; network = list("SS13")},/obj/machinery/kitchen_machine/grill,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"cbb" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/kitchen_machine/oven,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "cbc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cbd" = (/obj/machinery/pipedispenser,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/atmos) "cbe" = (/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/atmos) @@ -5527,7 +5527,7 @@ "cco" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) "ccp" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor/plating,/area/maintenance/portsolar) "ccq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"ccr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"ccr" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/foodcart,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "ccs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "cct" = (/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/aft{name = "Aft Maintenance"}) "ccu" = (/turf/simulated/floor/plating{tag = "icon-warnplatecorner (WEST)"; icon_state = "warnplatecorner"; dir = 8},/area/maintenance/aft{name = "Aft Maintenance"}) @@ -5801,8 +5801,8 @@ "chC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;5"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "chD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/aft{name = "Aft Maintenance"}) "chE" = (/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/trash/candy,/obj/structure/disposalpipe/segment{dir = 4},/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/aft{name = "Aft Maintenance"}) -"chF" = (/obj/item/weapon/storage/box/lights/mixed,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"chG" = (/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) +"chF" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/starboard) +"chG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/starboard) "chH" = (/obj/machinery/door/airlock{name = "Medbay Emergency Storage"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay2{name = "Medbay Storage"}) "chI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"}) "chJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2{name = "Medbay Storage"}) @@ -5932,7 +5932,7 @@ "ckd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cke" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door_control{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "12"},/obj/machinery/door_control{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ckf" = (/obj/machinery/meter,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ckg" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8; name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ckg" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/starboard) "ckh" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cki" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "ckj" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) @@ -6063,9 +6063,9 @@ "cmE" = (/obj/machinery/power/apc{dir = 8; name = "Incinerator APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cmF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cmG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/binary/valve{dir = 2; name = "output gas to space"},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cmH" = (/obj/machinery/atmospherics/binary/pump{dir = 2; on = 1},/obj/machinery/light/small{dir = 8},/obj/structure/sign/fire{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/maintenance/incinerator) -"cmI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/maintenance/incinerator) -"cmJ" = (/obj/machinery/atmospherics/binary/pump{dir = 1; on = 1},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/maintenance/incinerator) +"cmH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/starboard) +"cmI" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"cmJ" = (/obj/item/weapon/storage/box/lights/mixed,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cmK" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/space,/area/space) "cmL" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/space,/area/space) "cmM" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/space,/area/space) @@ -6176,7 +6176,7 @@ "coN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/medical/research{name = "Research Division"}) "coO" = (/obj/machinery/power/apc{cell_type = 10000; dir = 1; name = "Research Division APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/camera{c_tag = "Research Division - Airlock"; dir = 2; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/medical/research{name = "Research Division"}) "coP" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"}) -"coQ" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) +"coQ" = (/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) "coR" = (/obj/structure/stool,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "coS" = (/obj/structure/stool,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "coT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) @@ -6240,7 +6240,7 @@ "cpZ" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "cqa" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "cqb" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) -"cqc" = (/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellowfull"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) +"cqc" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8; name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/obj/machinery/embedded_controller/radio/airlock/access_controller{frequency = 1449; id_tag = "turbine_control"; name = "Turbine Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"; tag_exterior_door = "gas_turbine_exterior"; tag_interior_door = "gas_turbine_interior"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cqd" = (/obj/machinery/computer/rdconsole/core,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/lab) "cqe" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/lab) "cqf" = (/obj/machinery/r_n_d/circuit_imprinter{pixel_y = 4},/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/lab) @@ -6255,7 +6255,7 @@ "cqo" = (/obj/item/weapon/storage/toolbox/emergency,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cqp" = (/obj/machinery/light/small,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cqq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cqr" = (/obj/item/stack/packageWrap,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cqr" = (/obj/machinery/atmospherics/binary/pump{on = 1},/obj/machinery/access_button{command = "cycle_exterior"; layer = 3.1; master_tag = "turbine_control"; name = "Gas Turbine Airlock Control"; pixel_x = 5; pixel_y = -23},/obj/machinery/light/small{dir = 8},/obj/structure/sign/fire{pixel_x = -32},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cqs" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "cqt" = (/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "cqu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) @@ -6272,8 +6272,8 @@ "cqF" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/maintenance/starboard) "cqG" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 4; pixel_y = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 6; pixel_y = -1},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -4; pixel_y = 6},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plating,/area/maintenance/starboard) "cqH" = (/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/reagentgrinder{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) -"cqI" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/binary/pump{dir = 2; name = "Gas Pump"; on = 1},/turf/space,/area/space) -"cqJ" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) +"cqI" = (/obj/machinery/atmospherics/binary/pump{dir = 1; on = 1},/obj/machinery/access_button{command = "cycle_interior"; master_tag = "turbine_control"; name = "Gas Turbine Airlock Control"; pixel_x = -8; pixel_y = 24},/obj/machinery/light/small{dir = 4},/obj/structure/sign/fire{pixel_x = 32},/turf/simulated/floor/engine,/area/maintenance/incinerator) +"cqJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cqK" = (/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cqL" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cqM" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - N2"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) @@ -6311,7 +6311,7 @@ "crs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/medical/sleeper{name = "Sleepers"}) "crt" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/medbay{name = "Medbay Central"}) "cru" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) -"crv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) +"crv" = (/obj/structure/closet/firecloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "crw" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) "crx" = (/obj/machinery/vending/medical,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"},/area/medical/medbay{name = "Medbay Central"}) "cry" = (/obj/structure/stool/bed/roller,/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay{name = "Medbay Central"}) @@ -6321,7 +6321,7 @@ "crC" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/eastright{name = "Chemistry Desk"; req_access_txt = "5; 33"},/obj/machinery/door/window/eastright{dir = 8; name = "Chemistry Desk"; req_access_txt = "5"},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 5; pixel_y = 4},/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 8},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -5; pixel_y = 0},/obj/item/weapon/reagent_containers/syringe/epinephrine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "crD" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) "crE" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) -"crF" = (/obj/structure/stool/bed/chair/office/light,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) +"crF" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "crG" = (/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 8; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 8; pixel_y = 2},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/structure/extinguisher_cabinet{pixel_x = 24; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellowfull"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) "crH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/aft) "crI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera{c_tag = "Aft Primary Hallway - Fore"; dir = 8; network = list("SS13")},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/aft) @@ -6337,8 +6337,8 @@ "crS" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) "crT" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Research Division"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/aft{name = "Aft Maintenance"}) "crU" = (/turf/simulated/wall/r_wall,/area/maintenance/aft{name = "Aft Maintenance"}) -"crV" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) -"crW" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"crV" = (/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 2},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellowfull"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) +"crW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/aft) "crX" = (/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "crY" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "crZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) @@ -6355,8 +6355,8 @@ "csk" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/mask/surgical,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "csl" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "csm" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/insulated{dir = 5},/turf/space,/area/space) -"csn" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8},/turf/simulated/floor/plating/airless,/area/space) -"cso" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) +"csn" = (/obj/item/stack/packageWrap,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cso" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/binary/pump/on,/turf/space,/area/space) "csp" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/space) "csq" = (/obj/machinery/light/small,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "csr" = (/obj/machinery/light/small,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos) @@ -6385,7 +6385,7 @@ "csO" = (/obj/machinery/reagentgrinder,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/requests_console{department = "Chemistry"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) "csP" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "csQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) -"csR" = (/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 2},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) +"csR" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/compressor{comp_id = "incineratorturbine"; dir = 1},/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) "csS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/sign/chemistry{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) "csT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/sign/science{pixel_x = 32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/aft) "csU" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/lab) @@ -6420,11 +6420,11 @@ "ctx" = (/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "cty" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/maintenance/aft{name = "Aft Maintenance"}) "ctz" = (/obj/structure/mineral_door/wood{name = "The Gobbetting Barmaid"},/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) -"ctA" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel,/area/medical/surgery) -"ctB" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/medical/surgery) +"ctA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) +"ctB" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) "ctC" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/medical/surgery) "ctD" = (/obj/structure/table,/obj/item/weapon/cautery{pixel_x = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/razor{pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/medical/surgery) -"ctE" = (/obj/structure/table,/obj/item/weapon/retractor,/turf/simulated/floor/plasteel,/area/medical/surgery) +"ctE" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "ctF" = (/obj/machinery/computer/med_data,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (WEST)"},/area/medical/surgery) "ctG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (WEST)"},/area/medical/surgery) "ctH" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 30; pixel_y = 0},/obj/structure/bedsheetbin{pixel_x = 2},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (WEST)"},/area/medical/surgery) @@ -6438,7 +6438,7 @@ "ctP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) "ctQ" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "ctR" = (/obj/item/weapon/cartridge/medical{pixel_x = -2; pixel_y = 6},/obj/item/weapon/cartridge/medical{pixel_x = 6; pixel_y = 3},/obj/item/weapon/cartridge/medical,/obj/item/weapon/cartridge/chemistry{pixel_y = 2},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) -"ctS" = (/obj/item/weapon/folder/blue,/obj/structure/table/glass,/obj/item/weapon/stamp/cmo,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) +"ctS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "ctT" = (/obj/item/weapon/folder/white,/obj/item/weapon/stamp/cmo,/obj/item/clothing/glasses/hud/health,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "ctU" = (/obj/structure/closet/secure_closet/CMO,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 26},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 30; pixel_y = 0},/obj/item/weapon/screwdriver{pixel_y = 6},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "ctV" = (/obj/item/clothing/glasses/science{pixel_x = 2; pixel_y = 4},/obj/item/clothing/glasses/science,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/structure/table/glass,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/machinery/camera{c_tag = "Chemistry"; dir = 4; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) @@ -6667,10 +6667,10 @@ "cyk" = (/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/aft{name = "Aft Maintenance"}) "cyl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/maintenance/aft{name = "Aft Maintenance"}) "cym" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cyn" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/light{dir = 8},/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cyn" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/space) "cyo" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cyp" = (/obj/structure/table,/obj/item/weapon/cautery{pixel_x = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/razor{pixel_y = 5},/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cyq" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/machinery/light{dir = 4},/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cyq" = (/obj/structure/cable,/obj/machinery/power/turbine,/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) "cyr" = (/obj/structure/stool/bed/roller,/obj/machinery/light/small{dir = 8},/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cys" = (/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cyt" = (/turf/simulated/wall,/area/medical/cryo) @@ -6682,7 +6682,7 @@ "cyz" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "cyA" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/glass,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "cyB" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Medical Officer's Desk"; departmentType = 5; name = "Chief Medical Officer RC"; pixel_x = 0; pixel_y = -32},/obj/effect/landmark/start{name = "Chief Medical Officer"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) -"cyC" = (/obj/machinery/computer/security/telescreen{desc = "Used for monitoring medbay to ensure patient safety."; dir = 8; name = "Medbay Monitor"; network = list("Medbay"); pixel_x = 29; pixel_y = 0},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) +"cyC" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) "cyD" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cyE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cyF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6721,8 +6721,8 @@ "czm" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "czn" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "czo" = (/obj/machinery/vending/assist,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) -"czp" = (/obj/structure/table,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgicaldrill,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"czq" = (/obj/structure/table,/obj/machinery/button/windowtint{pixel_x = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"czp" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/FixOVein,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/medical/surgery) +"czq" = (/obj/structure/table,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/floor/plasteel,/area/medical/surgery) "czr" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "czs" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/patients_rooms{name = "Patient Room A"}) "czt" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/vending/wallmed1{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/patients_rooms{name = "Patient Room A"}) @@ -6741,7 +6741,7 @@ "czG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "czH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/aft) "czI" = (/obj/structure/sign/directions/evac{pixel_y = 0},/turf/simulated/wall,/area/maintenance/aft{name = "Aft Maintenance"}) -"czJ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"czJ" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/turf/simulated/floor/plasteel,/area/medical/surgery) "czK" = (/obj/item/weapon/storage/toolbox/emergency,/obj/structure/closet/firecloset,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "czL" = (/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/machinery/space_heater,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "czM" = (/turf/simulated/wall/r_wall,/area/toxins/misc_lab{name = "\improper Research Testing Range"}) @@ -6785,7 +6785,7 @@ "cAy" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 6},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/medical/genetics) "cAz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/hallway/primary/aft) "cAA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/aft) -"cAB" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) +"cAB" = (/obj/structure/table/glass,/obj/machinery/photocopier/faxmachine{department = "Chief Medical Officer's Office"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "cAC" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cAD" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/storage/box/lights/mixed,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cAE" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6796,7 +6796,7 @@ "cAJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cAK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"}) "cAL" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor/preopen{id_tag = "rdprivacy"; name = "privacy shutter"},/turf/simulated/floor/plating,/area/crew_quarters/hor) -"cAM" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) +"cAM" = (/obj/structure/table,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/light{dir = 8},/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cAN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cAO" = (/obj/machinery/computer/mecha,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cAP" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) @@ -6906,7 +6906,7 @@ "cCP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"}) "cCQ" = (/obj/machinery/power/apc{dir = 2; name = "RD Office APC"; pixel_x = 0; pixel_y = -27},/obj/structure/cable/yellow,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/flora/kirbyplants/dead,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cCR" = (/obj/machinery/hologram/holopad,/obj/machinery/light,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) -"cCS" = (/obj/structure/table,/obj/item/weapon/cartridge/signal/toxins,/obj/item/weapon/cartridge/signal/toxins{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/toxins{pixel_x = 4; pixel_y = 6},/obj/machinery/camera{c_tag = "Research Director's Office"; dir = 1; network = list("SS13","RD")},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) +"cCS" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/machinery/light{dir = 4},/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/item/weapon/hemostat,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cCT" = (/obj/structure/closet/secure_closet/RD,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cCU" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cCV" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) @@ -7328,7 +7328,7 @@ "cKV" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;5;39;6"},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cKW" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) "cKX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) -"cKY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) +"cKY" = (/obj/machinery/computer/security/telescreen{desc = "Used for monitoring medbay to ensure patient safety."; dir = 8; name = "Medbay Monitor"; network = list("Medbay"); pixel_x = 29; pixel_y = 0},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/structure/table/glass,/obj/item/weapon/stamp/cmo,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "cKZ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitecorner"},/area/medical/medbay3{name = "Medbay Aft"}) "cLa" = (/obj/item/device/healthanalyzer{pixel_x = 1; pixel_y = 4},/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = -30},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) "cLb" = (/obj/machinery/vending/medical,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/medical/medbay3{name = "Medbay Aft"}) @@ -7383,7 +7383,7 @@ "cLY" = (/obj/structure/flora/kirbyplants{icon_state = "plant-21"; layer = 4.1; pixel_x = -3; pixel_y = 3; tag = "icon-plant-21"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/medbay3{name = "Medbay Aft"}) "cLZ" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) "cMa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) -"cMb" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) +"cMb" = (/obj/structure/table,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cMc" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cMd" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cMe" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) @@ -7431,9 +7431,9 @@ "cMU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/turf/simulated/floor/plasteel{icon_state = "whitegreenfull"},/area/medical/medbay3{name = "Medbay Aft"}) "cMV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) "cMW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) -"cMX" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) -"cMY" = (/obj/machinery/door/airlock{name = "Medical Surplus Storeroom"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cMZ" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft{name = "Aft Maintenance"}) +"cMX" = (/obj/structure/table,/obj/machinery/button/windowtint{pixel_x = 25},/obj/item/weapon/surgicaldrill,/obj/item/weapon/FixOVein,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cMY" = (/obj/structure/disposalpipe/segment,/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cMZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "cNa" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/backpack/duffel/medical,/obj/item/device/flashlight/pen{pixel_x = 4; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft{name = "Aft Maintenance"}) "cNb" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/device/healthanalyzer,/obj/item/clothing/glasses/eyepatch,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3; pixel_y = 2},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft{name = "Aft Maintenance"}) "cNc" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/maintenance{name = "Morgue Maintenance"; req_access_txt = "6"},/turf/simulated/floor/plating,/area/medical/morgue) @@ -7548,7 +7548,7 @@ "cPh" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server{name = "\improper Research Division Server Room"}) "cPi" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/light/small{dir = 4},/obj/machinery/alarm/server{dir = 8; pixel_x = 22; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server{name = "\improper Research Division Server Room"}) "cPj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cPk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cPk" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/structure/table/reinforced,/obj/item/weapon/cartridge/signal/toxins{pixel_x = 4; pixel_y = 6},/obj/item/weapon/cartridge/signal/toxins{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cPl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/aft{name = "Aft Maintenance"}) "cPm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) "cPn" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) @@ -7566,11 +7566,11 @@ "cPz" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cPA" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/closet/crate,/obj/item/clothing/gloves/color/fyellow,/obj/item/weapon/wrench,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cPB" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cPC" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/screwdriver{pixel_y = 6},/obj/item/weapon/crowbar,/obj/item/weapon/storage/pill_bottle,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cPC" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Research Director's Office"; dir = 1; network = list("SS13","RD")},/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cPD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/aft{name = "Aft Maintenance"}) "cPE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) "cPF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Medical Surplus Storeroom"; req_access_txt = "12"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cPG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/maintenance/aft{name = "Aft Maintenance"}) +"cPG" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/screwdriver{pixel_y = 6},/obj/item/weapon/crowbar,/obj/item/weapon/storage/pill_bottle,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft{name = "Aft Maintenance"}) "cPH" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cPI" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cPJ" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) @@ -7626,7 +7626,7 @@ "cQH" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cQI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cQJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cQK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cQK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cQL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cQM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cQN" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) @@ -7656,7 +7656,7 @@ "cRl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cRm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cRn" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) -"cRo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cRo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) "cRp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/aft{name = "Aft Maintenance"}) "cRq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) "cRr" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;5;39;6"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -7688,7 +7688,7 @@ "cRR" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboardsolar) "cRS" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cRT" = (/obj/docking_port/stationary{dir = 2; dwidth = 2; height = 18; id = "skipjack_sw"; name = "southwest of SS13"; width = 19},/turf/space,/area/space) -"cRU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/virology) +"cRU" = (/turf/simulated/wall,/area/medical/psych) "cRV" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitegreen"},/area/medical/virology) "cRW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{icon_state = "whitegreen"},/area/medical/virology) "cRX" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "whitegreen"},/area/medical/virology) @@ -7721,8 +7721,8 @@ "cSy" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cSz" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/space) "cSA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space) -"cSB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating/airless,/area/space) -"cSC" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/medical/virology) +"cSB" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) +"cSC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/medical{name = "Psych Office"; req_access_txt = "64"},/turf/simulated/floor/wood,/area/medical/psych) "cSD" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology) "cSE" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1; name = "virology air connector port"},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology) "cSF" = (/obj/item/trash/popcorn,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology) @@ -7934,9 +7934,9 @@ "cWD" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cWE" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cWF" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"cWG" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera{c_tag = "Secure Lab - Airlock"; dir = 8; network = list("SS13","RD")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"cWH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"cWI" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; pixel_y = 1},/turf/simulated/floor/plating/airless,/area/space) +"cWG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) +"cWH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/stool/bed/chair/comfy/beige{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor/wood,/area/medical/psych) +"cWI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/wood,/area/medical/psych) "cWJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating/airless/catwalk,/area/solar/starboard) "cWK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk,/area/solar/starboard) "cWL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless/catwalk,/area/solar/starboard) @@ -8020,7 +8020,7 @@ "cYl" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/driver_button{id_tag = "chapelgun"; name = "Chapel Mass Driver"; pixel_x = -4; pixel_y = -26},/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) "cYm" = (/turf/simulated/floor/plating{icon_state = "warnplate"},/area/chapel/main) "cYn" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor/preopen{id_tag = "chapelspaceshutters"; name = "chapel shutters"},/turf/simulated/floor/plating,/area/chapel/main) -"cYo" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; tag = "icon-sink (WEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cYo" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/wood,/area/medical/psych) "cYp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cYq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cYr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) @@ -8324,6 +8324,28 @@ "ded" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/dye_generator,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/civilian/barber) "dee" = (/obj/machinery/cryopod/right,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "def" = (/obj/machinery/cryopod,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) +"deg" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/psych) +"deh" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/medical/psych) +"dei" = (/turf/simulated/floor/wood,/area/medical/psych) +"dej" = (/obj/structure/closet/secure_closet/psychiatrist,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) +"dek" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/medical/psych) +"del" = (/obj/structure/stool/bed/chair/comfy/beige,/obj/machinery/door_control{id = "psychoffice"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/carpet,/area/medical/psych) +"dem" = (/obj/machinery/power/apc{dir = 4; name = "Psychiatrist APC"; pixel_x = 25},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/flora/kirbyplants{tag = "icon-plant-25"; icon_state = "plant-25"},/turf/simulated/floor/carpet,/area/medical/psych) +"den" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"deo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/medical/psych) +"dep" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/medical/psych) +"deq" = (/obj/structure/stool/psychbed,/turf/simulated/floor/carpet,/area/medical/psych) +"der" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/medical/psych) +"des" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"det" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) +"deu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall/r_wall,/area/medical/virology) +"dev" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/plating,/area/medical/virology) +"dew" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating/airless,/area/space) +"dex" = (/obj/structure/table,/obj/item/candle,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"dey" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/space) +"dez" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/camera{c_tag = "Secure Lab - Airlock"; dir = 8; network = list("SS13","RD")},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"deA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"deB" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; tag = "icon-sink (WEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8400,123 +8422,123 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaabqaaaabqaaaaaaaaaabAaaaaaaabqaaaacAafOafPafQafRafSafTafUadsafVafyafWafXafYacQafZadsagaacQagbacQagcagdageacgagfabqaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaaaaabqaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqafcaggaghagiagjagkaaaabeabfabeabqabqaaaaaaaaaaaaaaaaaaaaaaaaabfabqaegaegaegaegaegabqadFabqaegaegaegaegaegabqabfaaaaaaaeFafJaeFaeFaeFaeFaeFaeFaeFaglaeFaeFaeFaeFaeFaeFaeFafJaeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaabqaaaabqabqabAabqabqabqabqacAagmagnagoagpagqafTagradsagsagtaguagvagwacQagxadsagwacQaeaacQagyagzagAacgaaaabqabqagBagBagBagBagBaaaabqaaaaaaagCagCagDagEagFagCagCaaaabqaaaaaaabqaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaabqaaaaaaaaaaaaafbagGagHafHafHagIaaaabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabeaaaaaaaaaabqaaaaaaaaaadFaaaaaaaaaabqaaaaaaaaaabdaaaaaaafhafJagJagJagJagJagJagJaehagKaehagJagJagJagJagJagJafJafkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqabqaaaabqaaaabqagLagMagLabqaaaaaaacAagNagOagPacAagQafTagRagSacQafyacQagTafyacQagRagUafyacQaeBacQafyagVagRacgabqabqagBagBagWagXagYagBagBabqabqagCagCagZahaahbahcahdagCagCabqaheaheahfaheaheabqabqabqabqafbafcafbafcafcafcafbafcafcafcafbafbahgafbahhahiahiahjahiahiahkaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadjadjadjadjadjabqahlabqadjadjadjadjadjabqabfaaaaaaahmahnahoahpahqahraehaglaeFaglaeFaglaehahsahtahuahvahnahwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqabqabqagLahxagLabqabqaaaacAacAacAacAacAahyahzahAahBahCahDahEahFahGahHahIahJahKahLahMahNahOahPahQahRabqagBagBahSahTahUahUahVagBagBabqagCahWahXahYahZaiaaibaicagCabqaheaidaieaifaheaaaaaaaaaabqafbaigafbaihaiiaijafbaikailaimafbainaioaipaiqairairairairairaiqabqabqabqabqabqaaaaaaaaaaaaaaaabfabqadCadDadDadDadDadEadFadGadHadHadHadHadIabqabfaaaaaaafKahnaeGaeGaeGaisaehaeGaeGaeGaeGaeGaehaeGaeGaitaeGahnafNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqagLagLaiuagLagLabqabqabqabqabqabqacnaivaiwaixaiyaizaiAaiBaiwaiCaiDaiEaiFaiGaiHaiwaiIaiJaiKaiLaiMabqagBaiNaiOaiPaiQaiRaiSaiTagBabqaiUaiVaiWaiXaiYaiZajaajbajcabqahfajdajeajfahfaaaajgajgajgafbajhajiajjajkajkajlajkajmajnajoajpajpajpaiqairairairairairaiqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabfabqaegaegaegaegaegabqadFabqaegaegaegaegaegabqabeabqaaaaehajqajrajsajtajuaehajvaeGaeGaeGajwaehajxajyajzajAajqaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaabqajBajCajDajEajBaaaabqaaaaaaaaaabqacgacgajFajGajHacgajIajJajIacQacQacQacQajKajLajMajNajOajPajQacgabqagBajRaiOajSajTajUaiSajVagBabqajWajXajYajZakaakbajYakcajWabqaheajdakdajfaheajgajgakeakfafbafbafbakgakhakiakiakjakkaklakmakmaknakoaiqairairairairairakpafbafbafbaaaabqaaaaaaaaaaaaaaaabeaaaaaaaaaabqaaaaaaaaaadFaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaehakqakqaeFaeFaeFaehakraeGaeGaeGaksaehaeFaeFaeFakqakqaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqabqabqagLahxagLabqabqaaaacAacAacAacAacAahyahzahAahBahCahDahEahFahGahHahIahJahKahLahMahNahOahPahQahRabqagBagBahSahTahUahUahVagBagBabqagCahWahXahYahZaiaaibaicagCabqaheaidaieaifaheaaaaaaaaaabqafbaigafbaihaiiaijafbaikailaimafbainaioajbaiqairairairairairaiqabqabqabqabqabqaaaaaaaaaaaaaaaabfabqadCadDadDadDadDadEadFadGadHadHadHadHadIabqabfaaaaaaafKahnaeGaeGaeGaisaehaeGaeGaeGaeGaeGaehaeGaeGaitaeGahnafNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqagLagLaiuagLagLabqabqabqabqabqabqacnaivaiwaixaiyaizaiAaiBaiwaiCaiDaiEaiFaiGaiHaiwaiIaiJaiKaiLaiMabqagBaiNaiOaiPaiQaiRaiSaiTagBabqaiUaiVaiWaiXaiYaiZajaakcajcabqahfajdajeajfahfaaaajgajgajgafbajhajiajjajkajkajlajkajmajnajoajpajpajpaiqairairairairairaiqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabfabqaegaegaegaegaegabqadFabqaegaegaegaegaegabqabeabqaaaaehajqajrajsajtajuaehajvaeGaeGaeGajwaehajxajyajzajAajqaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaabqajBajCajDajEajBaaaabqaaaaaaaaaabqacgacgajFajGajHacgajIajJajIacQacQacQacQajKajLajMajNajOajPajQacgabqagBajRaiOajSajTajUaiSajVagBabqajWajXajYajZakaakbajYanJajWabqaheajdakdajfaheajgajgakeakfafbafbafbakgakhakiakiakjakkaklakmakmaknakoaiqairairairairairakpafbafbafbaaaabqaaaaaaaaaaaaaaaabeaaaaaaaaaabqaaaaaaaaaadFaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaehakqakqaeFaeFaeFaehakraeGaeGaeGaksaehaeFaeFaeFakqakqaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqaktaktakuakuakuakuakuajBakvakwakxajBakyakzakyakyaaaabqaaaacgacgaiMacgacgacgaiMacgacgakAakBakCakDakEakFakGakHakHakHagBagBagBakIakJakKakLakMakNakOagBabqagCakPakQakRakSakTakUakVagCabqaheajdakdajfaheakWajgakXakYakZalaafbalbakhakialcaldaldaldaleakmalfalgalhairairairairairalialjalkafcaaaabqabqabqabqabqabqabfabqabqabqabqabqaaaaaaadFaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaflallallafgaaaaaaaehalmaeGaeGaeGalnaehaaaaaaaflallallafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaloalpakualqalralsaltajBalualvalwajBalxalyalzakyakyabqaaaaaaaaaabqaaaaaaaaaabqabqalAalBalCalBalDalEalFalGakHalHalIalJagBagBagBalKalLagBagBagBagBagBalMagCagCalNalOalPalQalRagCagCalMalSalTalUalVaheajgajgalWalWalXalYafbalZakhamaambamcamcamdameamfamgamhafcairairairairairafcamiamjafcaaaabqaaaabqaaaamkamkamkamkamkamkamkabqabqabqadFabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehamlaeGaeGaeGalnaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaktammaktamnamoampamqajBajBamramsajBamtamuamvamwakyabqabqabqabqabqabqabqabqabqabqamxakDakDakDakDamyamzamAakHamBamCamDagBamEamFamGamHamIamJamKamLagBamMamNamOamPamQamRamSamTamOamUamValSamWamXamYaheamZalWalWanaalWajgafbanbancandaneanfanfangameamjanhamhafcairairairairairafcanianjafcabqabqabqabqabqamkankanlanmannankamkabqaaaanoanpanoanqanransansanqabqabeabqaaaaaaaaaaaaaaaaaaaaaaehantanuaglantanuaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaakuanvanwanxanyanzanAanBanCanDanEakyanFanGanHanIakzabqaaaaaaabqaaaaaaaaaajgajgajgamxanJanKanLanManNanOanPakHanQamCanRagBanSanTanUanVanWanXanYanZaoaaobaocaodaoeaofaogaohaoiaojaokaolaomaonaooaopaheaoqaoraosaotaouajgaovaowakhaoxambaoyamcaozameaoAamgaoBaoCairairairairairaoDaoEaoFaoGaoHaoGaaaabqaaaamkaoIaoJankaoJaoKamkabqaaaaoLaoMaoLanqaoNaoNaoNanqaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaehaoOaoPaeGaoQaoRaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaktaoSaktaoTaoUaoVaoWaktaoXaoYaoZapaapbapcapdapeakyabqapfapfakzapfapfaaaajgapgapgamxaphapiapjapkaplapmapnapoappapqappaprapsapsaptapuapvapwapxapxapyapzapAapBapCapDapEapFapGapHapIapJapKapLapMapNaheapOapPalWapQapRajgapSaowakhajpapTapUapVapWapXapYamgapZaqaairairairairairaqbafbaqcaoGaqdaqeaefaefabqamkaqfaqgaqhaqiaqjamkabqanoaoLaqkaoLanqaqlaoNaoNanqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaehaqmaqnaeGaqoaqpaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaktaqqaqraqraqraqsaqtaktaquaqvaqwakyaqxaqyaqzaqAakyapfapfaqBaqCanEapfajgajgaqDaqEamxaqFaqGaqHaqIaqJaqKaqLakHaqMaqNaqOagBaqPaqQaqRaqSaqTaqUaqVaqWakHaqXaqYaqZapCaraarbarcardarearfargalSalSarhaheaheajgariajgarjajgajgafbarkarlajpajparmarnaroarparparqapZaqaairairairairairaqbarrarsaoGaqeaoGaoGaoHaoGamkartaruankarvarwamkabqaoLaoLaoMaoLanqaoNaoNaoNanqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaflaeFarxaryarzaeFafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarBaaaaaaarAaaaarAaaaaaaabqabqabqaaaaaaaaaaaaaaaabqaaaabqaaaabqaaaaktarCarDarEarFarGarHaktanHaqvapdapfarIapdapdapdarJapfarKarLarMarNapfarOarParQarRarSarTarUarVarWarXarYarZagBamIasaamIagBagBasbascasbagBasdaseasfasgashaqYasiasjaskaslasmasnasoarfaspasqasrassastasuastasvaswasxasyaszaszasAasBasCasCasDasEasFasGasGasGasHaqaairairairairairaqbasIasJaoGarsasKasLasMasNamkasOasPasQasRasSamkabqasTasUasVasWanqasXasYasZanqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaflaeFaeFaeFafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAabqabqarAarAarAabqaaaarAarAataarAarAaaaabqapfapfakzapfabqaaaabqabqabqabqabqapfakzaktaktatbatcatdaktaktaktapdateaoZatfapbatgathapdatiapfaoXatjatkapfapfatlatmatnatoamxamxamxakDakDatpatqatratsattatuatvatwatxatyaqUatzagBaqUanYatAakHatBaqYatCatDatEatFatGatHatIarfatJatKatKamOamOamOamOatLafbafcatMafcafbatNatOatPatQatRatSatTatUatVatWatXatYatZatZatZatZatZauaaubaucaoGasJasJasJasJaudamkaueaufaugauhauiamkabqasTaujaukaulanqaumaunauoanqaaaabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaupabqarAabqaupabqarAarAabqarAarAarAarAarAaaaaaaaaaapfauqaurapfausautautautautautauuapfarKauvapfauwauxaoXauyauzapfauAauBauCapfarIatjauDauEauFapfauGathauHapfauIatmakeauJauKajgauLamxauMauNaqJatqapnauOauPauQauRauSauTauUauVauWauXaqUauYauZakHavaavbavcavdaveavfavgavhavgaviavjavkavlavlavmavnamOatLafbavoavpavqavravravravravravsavtavuavvavvavvavvavvavwaoGavxavyavzaoGaoGasJaoGavAavBavCasJavDavEavFavGavHavIavJamkaoHasTavKavLavManqavNavOavPanqaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaktammaktamnamoampamqajBajBamramsajBamtamuamvamwakyabqabqabqabqabqabqabqabqamxamxamxakDakDakDakDamyamzamAakHamBamCamDagBamEamFamGamHamIamJamKamLagBamMamNamOamPamQamRamSamTamOamUamValSamWamXamYaheamZalWalWanaanLajgafbanbancandaneanfanfangameamjanhamhafcairairairairairafcanianjafcabqabqabqabqabqamkankanlanmannankamkabqaaaanoanpanoanqanransansanqabqabeabqaaaaaaaaaaaaaaaaaaaaaaehantanuaglantanuaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaakuanvanwanxanyanzanAanBanCanDanEakyanFanGanHanIakzabqaaaaaaabqaaaajgajgajgamxaotaovaouanKaphanManNanOanPakHanQamCanRagBanSanTanUanVanWanXanYanZaoaaobaocaodaoeaofaogaohaoiaojaokaolaomaonaooaopaheaoqaoraosapiapQajgapRaowakhaoxambaoyamcaozameaoAamgaoBaoCairairairairairaoDaoEaoFaoGaoHaoGaaaabqaaaamkaoIaoJankaoJaoKamkabqaaaaoLaoMaoLanqaoNaoNaoNanqaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaehaoOaoPaeGaoQaoRaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaktaoSaktaoTaoUaoVaoWaktaoXaoYaoZapaapbapcapdapeakyabqapfapfakzapfapfapgapgamxapSaqGaqFaqHapjapkaplapmapnapoappapqappaprapsapsaptapuapvapwapxapxapyapzapAapBapCapDapEapFapGapHapIapJapKapLapMapNaheapOapPalWarMarOajgaipaowakhajpapTapUapVapWapXapYamgapZaqaairairairairairaqbafbaqcaoGaqdaqeaefaefabqamkaqfaqgaqhaqiaqjamkabqanoaoLaqkaoLanqaqlaoNaoNanqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaehaqmaqnaeGaqoaqpaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaktaqqaqraqraqraqsaqtaktaquaqvaqwakyaqxaqyaqzaqAakyapfapfaqBaqCanEapfaqDaqEamxamxamxarParSarQaqIaqJaqKaqLakHaqMaqNaqOagBaqPaqQaqRaqSaqTaqUaqVaqWakHaqXaqYaqZapCaraarbarcardarearfargalSalSarhaheaheajgariajgarjajgajgafbarkarlajpajparmarnaroarparparqapZaqaairairairairairaqbarrarsaoGaqeaoGaoGaoHaoGamkartaruankarvarwamkabqaoLaoLaoMaoLanqaoNaoNaoNanqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaflaeFarxaryarzaeFafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarBaaaaaaarAaaaarAaaaaaaabqabqabqaaaaaaaaaaaaaaaabqaaaabqaaaabqaaaaktarCarDarEarFarGarHaktanHaqvapdapfarIapdapdapdarJapfarKarUarTarNapfatAarWauHarRaBKazcaCTarVaCVarXarYarZagBamIasaamIagBagBasbascasbagBasdaseasfasgashaqYasiasjaskaslasmasnasoarfaspasqasrassastasuastasvaswasxasyaszaszasAasBasCasCasDasEasFasGasGasGasHaqaairairairairairaqbasIasJaoGarsasKasLasMasNamkasOasPasQasRasSamkabqasTasUasVasWanqasXasYasZanqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaflaeFaeFaeFafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAabqabqarAarAarAabqaaaarAarAataarAarAaaaabqapfapfakzapfabqaaaabqabqabqabqabqapfakzaktaktatbatcatdaktaktaktapdateaoZatfapbatgathapdatiapfaoXaElaEjapfapfatlatmatnatoamxamxamxakDakDatpatqatratsattatuatvatwatxatyaqUatzagBaqUanYaFCakHatBaqYatCatDatEatFatGatHatIarfatJatKatKamOamOamOamOatLafbafcatMafcafbatNatOatPatQatRatSatTatUatVatWatXatYatZatZatZatZatZauaaubaucaoGasJasJasJasJaudamkaueaufaugauhauiamkabqasTaujaukaulanqaumaunauoanqaaaabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaupabqarAabqaupabqarAarAabqarAarAarAarAarAaaaaaaaaaapfauqaurapfausautautautautautauuapfarKauvapfauwauxaoXauyauzapfauAauBauCapfarIatjauDauEauFapfauGaNEaFEapfauIatmakeauJauKajgauLamxauMauNaqJatqapnauOauPauQauRauSauTauUauVauWauXaqUauYauZakHavaavbavcavdaveavfavgavhavgaviavjavkavlavlavmavnamOatLafbavoavpavqavravravravravravsavtavuavvavvavvavvavvavwaoGavxavyavzaoGaoGasJaoGavAavBavCasJavDavEavFavGavHavIavJamkaoHasTavKavLavManqavNavOavPanqaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAabqarAabqarAarAarAataabqabqabqarAarAabqaaaabqabqakzavQavRavSavTavUavUavUavUavUavVavWavXavYavZawaawbavUawcavUawdaweawfajgajgajgajgajgajgajgajgajgajgawgajgawhajgajgajgajgajgajgamxawiawjaqJatqatratsawkawlawmawnawoawpawqawraqTawsawtawuasgawvawwawxawyawzawAawBawCawDawEawFatKawGawHawGawIamOawJawKawLawMavqavrawNawOawPawQawRawSawTavvawUawVawWavvaoGaoGasJaubavBasIaoGasJaoGavzasJawXasJaoGawYawZamkamkaxaaxbamkaxcasTasTaxdaxeanqanqaxfanqanqaxgaxhaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAarAarAarAabqarAarAabqauparAarAabqabqabqabqapfapfaxiapfapfaxjaxkaxkaxkaxkaxkaxlapfapfapfapfaxmaxnaxoaxoaxoaxoaxpaxqajgaxraxsaxtaxuaxvaxwaxxaxyaxzaxAaxBaxCajgaxDaxEaxEaxEaxFamzaxGaxHaqJaxIaxJaxKaqTaxLagBagBaxMaxNaxOasgagBaxPaxMakHakHamOaxQaxRaxSaxQamOaxTaxUamOaxVatKatKaxWaxWaxWamOamOaxXafbdeeaxZdefavrayaaybayaawQaycaydayeayfaygayhayiavvayjaoGaykaylaymaynaoGasMaoGaoGaoGayoaoGaoGaypayqayramkamkamkamkasMasIaysaytayuaxhayvaywayxaxharsaxhabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqarAarAarAarAarAarAarAarAarAarAarAayyarAabqaupapfapfapfayzayAapfabqabqabqabqabqabqabqabqabqabqabqapfaqBayBapdaoXayCaoXayDayEayFayGayHayIajgajgajgayJayKayKayKayLajgajgayMayNayOayPayMamzamzakDayQayRapnaySaySayTayUaySayVaySayUaySayWaySayVayXayYayZayUazaazbaySaySaySayUaySazcamxazdazeazeazeazeakDatLafbaxYavoavqavrazfazgazhavraziazjazkazlazmavvavvavvaznaoGasIazoawXasJaoGasJaoGazpaoGazqazrazsaztazuazvazwazxazyazzazAazBazyazCazDazDazEazFazGaxgazHaxgaefaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqarAarAarAarAarAarAarAarAarAarAarAayyarAabqaupapfapfapfayzayAapfabqabqabqabqabqabqabqabqabqabqabqapfaqBayBapdaoXayCaoXayDayEayFayGayHayIajgajgajgayJayKayKayKayLajgajgayMayNayOayPayMamzamzakDayQayRapnaySaySayTayUaySayVaySayUaySayWaySayVayXayYayZayUazaazbaySaySaySayUaySaOPamxazdazeazeazeazeakDatLafbaxYavoavqavrazfazgazhavraziazjazkazlazmavvavvavvaznaoGasIazoawXasJaoGasJaoGazpaoGazqazrazsaztazuazvazwazxazyazzazAazBazyazCazDazDazEazFazGaxgazHaxgaefaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupabqarAataarAarAarAarAazIabqarAarAarAarAarAarAazJazKazJazLazMapfapfabqaaaaaaaaaaaaaaaaaaaaaaaaabqapfapfapfathaoXapdaoXazNazOazPazQazRazSajgaaaabqaaaaaaaaaaaaaaaabqaaaazTazUazVazWazXazYazeazZaAaaAbaAcaAdaAdaAeaAcaAdaAfaAgaAcaAhaAiaAdaAjaAkaAlaAdaAmaAnaAoaApaApaAqaAraAsaAtaAuaAvaAwaAxaAyaAzakDatLafbaxYaAAavqavraABaACaADaAEaAFaAGaAHavvaAIaAJaAKavvaALaoGaoGaoGayoaoGaoGasJaoGaucaoGaAMaxhaxhawYaANamkaxhaxhaxhaxhaxhaxhaxhaxhaxharraxhaxhaxhaxhaxhaAOaxhabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAarAarAarAarAarAarAarAarAarAabqarAarAarAabqapfapfapfaAPazSapdapfaaaaAQaARaASaARaATabqabqabqabqapfaAUapfaAVavUavUavUaAWaAXapfaAYaAZaBaajgaaaaBbaBbaBbaBbaBbaBbaBbaaaayMaBcaBdaBeayMamzamzakDaBfaBgaBhaBiaBjaBkaBhaBlaBjaBgaBmaBnaBoaBpaBqaBraBsaBtaBuaBvaBwaBxaByaBwaBzaBAaBBaBCaBDaBEaBFaBGaBHakDatLaBIaBIaBIaBIavraBJaBKaBLaBMaBNaBOayeaBPaBQaBRaBSavvaBTaBUaBVaBWaBXaBWaBYaBWaBZaBWaBWaCaaCbaCcaCdaCeaCfaCgaChaCgaCiaCjaCkaCjaClaxhaxhaxhaCiaCjaClaCmaCmaCgabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqarAarAarAarAarAarAarAaCnarAabqabqabqabqapfaoXazSarIakzaaaaCoaCpaCqaCpaCoaCraCraCraCsaCsaCsaCsaCtaCsaCsaCuaCuaCuaCuaCvaCuaCwajgabqaBbaCxaCyaCzaCAaCBaBbaaaayMaCCaCCaCDayMaaaaaaaCEaCFaCGaCHakDaCFaCIaCHakDaCFaCJaCHakDaCKamzaCLakDamzaCMaCNamzamzaCOaCOaCPaCQaCRaCOaCOaCSakDakDakDakDakDatLaBIaCTaCUaCVavravravravravraCWaCXaCYazlazmavvavvavvaoGaCZasIarrasJasIaDaasJaxhaxhaxhaxhaxhaDbaDcaDdaDeaDfaDgaDfaDhaDiaDjaDiaDkaCjaDlaCjaDmaDiaDjaDiaCmaDnaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqabqabqarAarAarAarAataarAarAarAaDparAarAarAarAabqaaaabqakzayBazSaqwapfaaaaASaDqaDraDqaASaCraDsaDtaCsaDuaDvaDwaDxaDyaCsaDzaDAaDBaDCaDDaCuaCwajgaaaaBbaDEaDFaDGaDHaDIaBbaaaazTaDJaCCaDKayMaDLaDLacAaDMaDNaDOakDaDPaDNaDOakDaDQaDNaDOakDaDRaDSaDTakDaDUaDVaDWaDXaDYaCOaDZaEaaEbaEcaEdaEeaCSaEfaEgaEgaEhaEgaEiaBIaEjaEkaElaBIaEmaEnaEmavvaEoaEpaEqaEraEsaEtaEuaEvaBWaEwaxhaxhaxhaxhaxhaxhaxhaExaExaEyaEzaEAaEBaECaEDaCgaCgaCgabqabqaEEaEFaDiaDiaDiaDiaDiaEGaEEaDiaEHaCgaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqarAarAarAarAarAarAarAabqarAabqabqarAarAabqabqapfapfauyazSapfapfaaaaCoaDqaDqaDqaEIaEJaEKaEKaELaEMaENaEOaEPaEQaERaESaETaEUaEVaEWaCuaCwajgaaaaBbaEXaEYaEZaFaaFbaBbaaaayMaFcaCCaCCaFdaFeaFfacAaFgaDNaFhakDaFgaDNaFiakDaFgaDNaFjakDaFkaFlaFmakDaFnaFoaFpaFqaFraCOaFsaFtaFuaFvaFwaFxaCSaFyaFzaFzaFzaFAaFBaBIaFCaFDaFEaBIaFFaFGaFGaFHaFIaFJaFKavvavvavvavvavvaoGaFLaxhaFMaFNaFOaFPaFQaFRaFSaFTaFTaFTaFTaFUaFVaFWaFXaFYaCgaFZabqabqaaaaaaaaaabqabqaaaaaaabqaaaarAaDiaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAarAarAarAarAarAarAarAarAarAabqarAarAarAabqapfapfapfaAPazSapdapfaaaaAQaARaASaARaATabqabqabqabqapfaAUapfaAVavUavUavUaAWaAXapfaAYaAZaBaajgaaaaBbaBbaBbaBbaBbaBbaBbaaaayMaBcaBdaBeayMamzamzakDaBfaBgaBhaBiaBjaBkaBhaBlaBjaBgaBmaBnaBoaBpaBqaBraBsaBtaBuaBvaBwaBxaByaBwaBzaBAaBBaBCaBDaBEaBFaBGaBHakDatLaBIaBIaBIaBIavraBJaPWaBLaBMaBNaBOayeaBPaBQaBRaBSavvaBTaBUaBVaBWaBXaBWaBYaBWaBZaBWaBWaCaaCbaCcaCdaCeaCfaCgaChaCgaCiaCjaCkaCjaClaxhaxhaxhaCiaCjaClaCmaCmaCgabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqarAarAarAarAarAarAarAaCnarAabqabqabqabqapfaoXazSarIakzaaaaCoaCpaCqaCpaCoaCraCraCraCsaCsaCsaCsaCtaCsaCsaCuaCuaCuaCuaCvaCuaCwajgabqaBbaCxaCyaCzaCAaCBaBbaaaayMaCCaCCaCDayMaaaaaaaCEaCFaCGaCHakDaCFaCIaCHakDaCFaCJaCHakDaCKamzaCLakDamzaCMaCNamzamzaCOaCOaCPaCQaCRaCOaCOaCSakDakDakDakDakDatLaBIaQdaCUaQvavravravravravraCWaCXaCYazlazmavvavvavvaoGaCZasIarrasJasIaDaasJaxhaxhaxhaxhaxhaDbaDcaDdaDeaDfaDgaDfaDhaDiaDjaDiaDkaCjaDlaCjaDmaDiaDjaDiaCmaDnaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqabqabqarAarAarAarAataarAarAarAaDparAarAarAarAabqaaaabqakzayBazSaqwapfaaaaASaDqaDraDqaASaCraDsaDtaCsaDuaDvaDwaDxaDyaCsaDzaDAaDBaDCaDDaCuaCwajgaaaaBbaDEaDFaDGaDHaDIaBbaaaazTaDJaCCaDKayMaDLaDLacAaDMaDNaDOakDaDPaDNaDOakDaDQaDNaDOakDaDRaDSaDTakDaDUaDVaDWaDXaDYaCOaDZaEaaEbaEcaEdaEeaCSaEfaEgaEgaEhaEgaEiaBIaRtaEkaRyaBIaEmaEnaEmavvaEoaEpaEqaEraEsaEtaEuaEvaBWaEwaxhaxhaxhaxhaxhaxhaxhaExaExaEyaEzaEAaEBaECaEDaCgaCgaCgabqabqaEEaEFaDiaDiaDiaDiaDiaEGaEEaDiaEHaCgaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqarAarAarAarAarAarAarAabqarAabqabqarAarAabqabqapfapfauyazSapfapfaaaaCoaDqaDqaDqaEIaEJaEKaEKaELaEMaENaEOaEPaEQaERaESaETaEUaEVaEWaCuaCwajgaaaaBbaEXaEYaEZaFaaFbaBbaaaayMaFcaCCaCCaFdaFeaFfacAaFgaDNaFhakDaFgaDNaFiakDaFgaDNaFjakDaFkaFlaFmakDaFnaFoaFpaFqaFraCOaFsaFtaFuaFvaFwaFxaCSaFyaFzaFzaFzaFAaFBaBIaTeaFDaThaBIaFFaFGaFGaFHaFIaFJaFKavvavvavvavvavvaoGaFLaxhaFMaFNaFOaFPaFQaFRaFSaFTaFTaFTaFTaFUaFVaFWaFXaFYaCgaFZabqabqaaaaaaaaaabqabqaaaaaaabqaaaarAaDiaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarAarAarAarAarAabqabqabqarAarAarAabeaaaabqabqabqapfaGaaoXaoXaGbakzaaaaaaaASaDraDraDraASaCraGcaGdaGeaEMaEKaGfaGgaGhaCsaGiaGjaGkaGlaGmaCuaCwajgabqaBbaGnaGoaGpaGqaGraBbaaaayMaGsaGsaGsayMaDLaGtacAaGuaGvaGwamxaGuaGvaGwamxaGuaGvaGwamxaGxaGyaGzamxamxaCMaGAamxaGBaCOaGCaGDaGEaGFaGGaGHaCSaGIajgajgajgaGJajgaBIaGKaGLaBIaBIaGMaGNaGOaGPaGQaGRaGSazlaGTaGUawWavvaGVaGWaxhaGXaGYaGZaGZaHaaHbaDcaHcaHdaHeaHeaHeaHfaHgaHhaHiaHjaMIaMKaMJaOhaMJaMJaOhaMJaMJaOhaMJaMJaPwarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqaHkaHlaHkabfaaaabqaaaabqapfaHmaHnanEazSapfapfaaaaCoaHoaHpaHqaCoaCraCraCraCsaHraEKaHsaGgaHtaCsaHuaHvaHwaHxaHyaCuaCwajgaaaaBbaHzaHAaHBaHCaBbaBbaaaaHDaHEaHEaHEaHFaHGaHHaHGaHIaHJaHIaHKaHIaHJaHIaHLaHIaHJaHMaHNaHOaHPaHQaHRaHSaHTaHUamxazeaCSaHVaHWaHXaHYaHZaIaaCSaIbaBIaIcaIdaIeaIfaIfaIgaIhaIiaIjaIkaIlaImaInaIoaIpayeaIqaIraIsaItavvaucaGWaxhaIuaIvaIwaIxaIyaIzaIAaIBaICaIDaIDaIDaIEaIFaHhaHiaHjarAaPxarAaPyarAarAaPyarAarAaPyarAarAaPxarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqabqaaaaHkaIGaHkabqabqabqabqabqapfaIHapdapdaIIaIJapfaaaaIKaARaILaARaIMabqabqabqaCraINaIOaIPaIQaIRaCsaISaITaIUaIVaIWaCuaCwajgaaaabqaaaaIXaIYaIZaaaabqaaaaHGaDLaDLaDLaHGaHGaJaaJbaJcaJdaJeaJfaJgaJhaJhaJiaJhaJjaJgaJkaJlaJmaJnaJoaJpaJqaJramxazeaCSaCSaJsaJtaCSaJuaCSaCSaGIaBIaBIaBIaJvaJwaJxaJyaJzaJAaJBaJCaJDaJEaJFaJFaJGaJHavvavvavvavvavvaubaGWaxhaJIaJJaJKaJLaJMaJNaJOaJPaJQaJRaJSaJTaJUaJVaHhaHiaHjaHjaPxaJWaaaaaaaaaaaaaJWaaaaaaaJWarAaPxabqaCgaJXabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaabqaaaaHkaHlaHkaHkaJYaJYaJYaHkaHkaHkaHkaHkaJZaKaapfaaaaaaaaaaaaaaaaaaaaaaaaabqaCraKbaKcaKdaKeaKfaCsaKgaKhaCuaCuaCuaCuaKiajgaKjaKkaKlaKmaKnaKoaKpaKqaKjaHGaKraKsaKsaKtaKuaKvaKwaKxaKyaKzaKAaKBaKCaKDaKEaKCaKFaKGaKHaKIaKJaKKaKLaKMaKNaKOamxazeaKPaCSaKQaKRaCSaKSaKTaKUaKVaBIaKWaKXaKYaKZaBIaLaaLbaLcaBIaLdaLeaLfaLgaLfaLhaLiaLjaLkaLlaLmavvasJaGWaxhaLnaLoaLpaLqaLraFRaLsaLtaJQaLuaCgaCgaLvaLwaCgaHjaHjaHjaPxaaaaaaaaaaaaaaaaLxaaaaaaaaaaTMaRgabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaabqaaaaHkaHlaHkaHkaJYaJYaJYaHkaHkaHkaHkaHkaJZaKaapfaaaaaaaaaaaaaaaaaaaaaaaaabqaCraKbaKcaKdaKeaKfaCsaKgaKhaCuaCuaCuaCuaKiajgaKjaKkaKlaKmaKnaKoaKpaKqaKjaHGaKraKsaKsaKtaKuaKvaKwaKxaKyaKzaKAaKBaTiaKDaKEaKCaKFaKGaKHaKIaKJaKKaKLaKMaKNaKOamxazeaKPaCSaKQaKRaCSaKSaKTaKUaKVaBIaKWaKXaKYaKZaBIaLaaLbaLcaBIaLdaLeaLfaLgaLfaLhaLiaLjaLkaLlaLmavvasJaGWaxhaLnaLoaLpaLqaLraFRaLsaLtaJQaLuaCgaCgaLvaLwaCgaHjaHjaHjaPxaaaaaaaaaaaaaaaaLxaaaaaaaaaaTMaRgabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabqaHkaHkaLyaLzaLAaLBaLBaLCaLDaLEaLFaLGaHkaHkazSapfaaaaLHaLIaLIaLIaLIaLIaLJabqaCsaCsaCsaLKaLLaCsaCsaLMaLNaLOaLPaLQaLRaLSaLTaLUaLVaLWaLXaLYaLWaLZaMaaMbaHGaMcaMdaMeaMfaMfaMgaMfaMfaMfaMfaMfaMfaMfaMfaMgaMfaMhaMiaMjaMkaMkaMkaMlaMlaMlaMlaMlaMkaMmaMkaMnaMnaMnaMnaMoaMnaGIaBIaBIaBIaMpaMqaBIaMraBIaMsaBIaMtaMuaMvazlaMwaMxaMyazlaMzaMAaMBavvaMCaMDaxhaCgaCgaCgaCgaCgaFRaMEaMFaJQaMGaCgaMHaXGaWubssaWuddkaHjaPxaaaaaaabqabqabqabqabqaaaaaaarAaPxarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaHkaMLaMLaMLaLBaLBaLBaLBaLBaLBaMLaMLaMMaHkazSakzaaaaMNaMOaMOaMOaMOaMOaMNabqabqaMPaMQaMRaMSaMTaMUaMVaMWaMXaMYaMZaNaaNbaNcaLRaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaNqaNraNsaNtaMkaNuaNvaNwaNxaNyaNzaNAaNBaNCaMkaNDaNEaNFaNGaNHaMnaNIaBIaNJaNKaJwaMqaBIaNLaBIaNMaBIaNNaNOaNPaNQaNQaNQaNQaNQaNQaNQaNQaNQaoGaNRaxhaNSaNTaNUaNVaCgaNWaIvaMFaNXaNYaNZaOaaObaOcaOdaOeddRaHjaPxaJWabqabqaOgddSaOiabqaOjaaaarAaPxataaCgaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaHkaOkaLBaLBaLBaLBaLBaLBaLBaLBaMLaMLaMLaOlaOmapfaaaaMNaOnaMOaMOaMOaMOaMNaOoaMPaMPaOpaOqaOraOraOsaOtaOuaOvaOwaOxapfaOyapfapfapfapfaOzaOAaOBaOCaODaOEaOAaOAaOAaOAaOFaaaaaaaOGaOGaOGaOGaOGaOGaOGaaaaaaaMfaOHaOIaOJaOKaOLaNAaOMaONaOOaOPaOQaORaOSaMkaOTaOUaOVaOWaOXaMnaOYaBIaBIaBIaOZaOZaBIaBIaBIaBIaBIaPaaPbaPcaNQaPdaPeaPfaPgaPhaPiaPjaNQaPkaGWaxhaNTaNTaPlaOdaPmaGYaPnaPoaPpaPqaCgaPraPsaPtaPuaPvddUddTddVaaaaaaabqddWcspaPzabqaaaaaaaTMaRgarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabqaHkaPAaLBaLBaLBaLBaPBaLBaPCaLBaLBaMLaPDaHkaGbapfaaaaMNaMOaMOaMOaMOaMOaPEaPFaPGaPFaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaPRaPSaPTaPTaPUaPTaPVaOAaPWaPXaPYaPZaQaaQbaQcaQdaQeaQfaQgaQgaQhaQiaQjaQkaQlaQmaQmaQnaQoaQpaKGaNtaMkaQqaNAaQraNAaQsaNAaQtaNAaNAaMkaQuaQvaOVaQwaQxaMnaQyaQzaQAaQBaQCaQDaQEaQFaQGaQHaQIaQJaQKaQLaNQaQMaQNaQNaQNaQOaQPaQQaNQaQRaGWaxhaQSaQSaQTaOdaPmaJJaQUaQVaQWaQXaQYaQZaRaaRbaRcaRdaOfaHjaPxaaaaReabqaRfddXaRhabqabqaJWarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJYaLBaLBaLBaLBaLBaLBaLBaLBaLBaLBaRiaHkaHkaRjapfabqaMNaMOaMOaMOaMOaMOaRkaRlaRmaRlaRnaPIaRoaRoaRpaRoaOuaRqaRraRsapfapfapfapfapfapfazSaOAaRtaRuaRvaRwaRxaRxaRxaRyaOFaaaaOGaRzaRAaRAaRAaRAaRAaRBaOGaaaaMfaRCaMiaMjaMkaRDaREaRFaNAaRGaNAaRHaRIaNAaRJaRKaRLaRMaRNaROaMnaRPaRQaRRaRRaRRaRSaRTaRTaRUaRUaRVaRWaRXaRYaRZaSaaSbaSbaSbaScaSdaSeaNQaSfaGWaxhaQSaSgaShaSiaCgaSjaIvaSkaJQaSlaCgaSmaSnaSoaSoaSoaSpaHjaPxaaaaaaabqabqabqabqabqaaaaaaarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSqaSraSsaaaaJYaLBaLBaLBaLBaLyaLBaStaSuaSuaSvaSwaHkaqBazSapfabqaMNaMOaMOaMOaMOaSxaMNaOoaMPaMPaSyaPIaSzaSAaSBaSCaSDaSEaSFaSGaSHaSIaSJaSKaSLapfaSMaOAaSNaRuaSOaSPaSQaSQaSRaSSaOFaaaaSTaSUaRAaSVaSWaSXaRAaSYaSTaaaaMfaMhaMiaMjaMkaSZaTaaTbaTcaTdaTcaTeaTfaTgaMkaThaTiaTjaTkaTlaMnaTmaTnaToaTpaTqaTraTsaTtaTuaTvaTwaTxaTyaTzaTAaTBaTCaTDaTEaTFaTGaTHaNQasIaGWaxhaCgaCgaCgaCgaCgaFRaTIaTJaTKaTLaCgaCgaLvaLwaCgaHjaHjaHjaPxaaaaaaaaaabqaaaaaaaaaaaaaaaaTMaRgabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaTNaTOaTNacJaHkaLBaLBaLBaLBaLBaLBaLBaLBaLBaTPaTQaHkauAaTRapfaaaaMNaMOaMOaMOaMOaMOaTSaRlaTTaRlaRnaPIaRoaRoaRpaRoaOuaOvaTUaTVaTWaTXaTYaTZaUaapfaUbaUcaUdaRuaRuaUeaUfaRuaUgaUhaOFaaaaUiaUjaUkaUlaUmaUlaUkaUnaUoaaaaMfaMhaUpaUqaMkaUraUraUraUraUsaUraUraUtaUraMkaMnaUuaUvaUwaMnaMnaUxaTnaTpaTqaUyaUzaTnaToaTqaTqaTpaUAaUBaUCaUDaUEaSbaSbaUFaScaUGaUHaNQaUIaUJaxhaUKaULaUMaUNaUOaUPaIvaSkaJQaUQaJSaURaUSaUTaHhaHiaHjaHjaPxaJWaaaaaaaJWaaaaaaaaaaaaaJWarAaPxabqaCgaJXabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdaTNaUWaTNafdaHkaPAaMLaLBaLBaLBaLBaLBaUXaLBaUYaUZaHkaVaaAWapfaaaaMNaMOaMOaMOaMOaMOaVbaVcaVdaVcaVeaPIaRoaVfaVgaVhaViaVjaOuaVkaVlaVmaVnaVoaVpapfaVqaOAaVraRuaRuaVsaVtaVuaUgaVvaOFaaaaOGaVwaVxaUkaVyaRAaVzaVAaOGaaaaMfaVBaOIaOJaVCaVDaVEaVEaVEaNCaVEaVEaVFaVGaMkaVHaVIaVJaVKaVLaVMaVKaVNaVOaVOaVPaVQaVRaVSaVTaVUaVVaVSaVWaVXaNQaVYaVZaWaaWbaWcaWdaWeaNQasJaWfaxhaWgaWhaWiaWjaWkaWlaWmaWnaWoaWpaWqaWqaWraWsaHhaWtaHjddYaPxarAddZarAarAddZarAarAddZarAarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaWvaWwaWxaWxaWxaWyaWxaWxaWxaWxaWzaWxaWxaWxaWxaWAaWxaWxaWxaWBaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaHkaMLaMLaMLaLBaLBaLBaLBaLBaLBaMLaMLaMMaHkazSakzaaaaMNaMOaMOaMOaMOaMOaMNabqabqaMPaMQaMRaMSaMTaMUaMVaMWaMXaMYaMZaNaaNbaNcaLRaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaNqaNraNsaNtaMkaNuaNvaNwaNxaNyaNzaNAaNBaNCaMkaNDaUfaNFaNGaNHaMnaNIaBIaNJaNKaJwaMqaBIaNLaBIaNMaBIaNNaNOaNPaNQaNQaNQaNQaNQaNQaNQaNQaNQaoGaNRaxhaNSaNTaNUaNVaCgaNWaIvaMFaNXaNYaNZaOaaObaOcaOdaOeddRaHjaPxaJWabqabqaOgddSaOiabqaOjaaaarAaPxataaCgaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaHkaOkaLBaLBaLBaLBaLBaLBaLBaLBaMLaMLaMLaOlaOmapfaaaaMNaOnaMOaMOaMOaMOaMNaOoaMPaMPaOpaOqaOraOraOsaOtaOuaOvaOwaOxapfaOyapfapfapfapfaOzaOAaOBaOCaODaOEaOAaOAaOAaOAaOFaaaaaaaOGaOGaOGaOGaOGaOGaOGaaaaaaaMfaOHaOIaOJaOKaOLaNAaOMaONaOOaVsaOQaORaOSaMkaOTaOUaOVaOWaOXaMnaOYaBIaBIaBIaOZaOZaBIaBIaBIaBIaBIaPaaPbaPcaNQaPdaPeaPfaPgaPhaPiaPjaNQaPkaGWaxhaNTaNTaPlaOdaPmaGYaPnaPoaPpaPqaCgaPraPsaPtaPuaPvddUddTddVaaaaaaabqddWcspaPzabqaaaaaaaTMaRgarAaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabqaHkaPAaLBaLBaLBaLBaPBaLBaPCaLBaLBaMLaPDaHkaGbapfaaaaMNaMOaMOaMOaMOaMOaPEaPFaPGaPFaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaPRaPSaPTaPTaPUaPTaPVaOAaYOaPXaPYaPZaQaaQbaQcbeBaQeaQfaQgaQgaQhaQiaQjaQkaQlaQmaQmaQnaQoaQpaKGaNtaMkaQqaNAaQraNAaQsaNAaQtaNAaNAaMkaQubeLaOVaQwaQxaMnaQyaQzaQAaQBaQCaQDaQEaQFaQGaQHaQIaQJaQKaQLaNQaQMaQNaQNaQNaQOaQPaQQaNQaQRaGWaxhaQSaQSaQTaOdaPmaJJaQUaQVaQWaQXaQYaQZaRaaRbaRcaRdaOfaHjaPxaaaaReabqaRfddXaRhabqabqaJWarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJYaLBaLBaLBaLBaLBaLBaLBaLBaLBaLBaRiaHkaHkaRjapfabqaMNaMOaMOaMOaMOaMOaRkaRlaRmaRlaRnaPIaRoaRoaRpaRoaOuaRqaRraRsapfapfapfapfapfapfazSaOAbgkaRuaRvaRwaRxaRxaRxbgyaOFaaaaOGaRzaRAaRAaRAaRAaRAaRBaOGaaaaMfaRCaMiaMjaMkaRDaREaRFaNAaRGaNAaRHaRIaNAaRJaRKaRLaRMaRNaROaMnaRPaRQaRRaRRaRRaRSaRTaRTaRUaRUaRVaRWaRXaRYaRZaSaaSbaSbaSbaScaSdaSeaNQaSfaGWaxhaQSaSgaShaSiaCgaSjaIvaSkaJQaSlaCgaSmaSnaSoaSoaSoaSpaHjaPxaaaaaaabqabqabqabqabqaaaaaaarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSqaSraSsaaaaJYaLBaLBaLBaLBaLyaLBaStaSuaSuaSvaSwaHkaqBazSapfabqaMNaMOaMOaMOaMOaSxaMNaOoaMPaMPaSyaPIaSzaSAaSBaSCaSDaSEaSFaSGaSHaSIaSJaSKaSLapfaSMaOAaSNaRuaSOaSPaSQaSQaSRaSSaOFaaaaSTaSUaRAaSVaSWaSXaRAaSYaSTaaaaMfaMhaMiaMjaMkaSZaTaaTbaTcaTdaTcbjbaTfaTgaMkbmIbkZaTjaTkaTlaMnaTmaTnaToaTpaTqaTraTsaTtaTuaTvaTwaTxaTyaTzaTAaTBaTCaTDaTEaTFaTGaTHaNQasIaGWaxhaCgaCgaCgaCgaCgaFRaTIaTJaTKaTLaCgaCgaLvaLwaCgaHjaHjaHjaPxaaaaaaaaaabqaaaaaaaaaaaaaaaaTMaRgabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaTNaTOaTNacJaHkaLBaLBaLBaLBaLBaLBaLBaLBaLBaTPaTQaHkauAaTRapfaaaaMNaMOaMOaMOaMOaMOaTSaRlaTTaRlaRnaPIaRoaRoaRpaRoaOuaOvaTUaTVaTWaTXaTYaTZaUaapfaUbaUcaUdaRuaRuaUebmJaRuaUgaUhaOFaaaaUiaUjaUkaUlaUmaUlaUkaUnaUoaaaaMfaMhaUpaUqaMkaUraUraUraUraUsaUraUraUtaUraMkaMnaUuaUvaUwaMnaMnaUxaTnaTpaTqaUyaUzaTnaToaTqaTqaTpaUAaUBaUCaUDaUEaSbaSbaUFaScaUGaUHaNQaUIaUJaxhaUKaULaUMaUNaUOaUPaIvaSkaJQaUQaJSaURaUSaUTaHhaHiaHjaHjaPxaJWaaaaaaaJWaaaaaaaaaaaaaJWarAaPxabqaCgaJXabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaUVaUUaUUaUUaUUaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdaTNaUWaTNafdaHkaPAaMLaLBaLBaLBaLBaLBaUXaLBaUYaUZaHkaVaaAWapfaaaaMNaMOaMOaMOaMOaMOaVbaVcaVdaVcaVeaPIaRoaVfaVgaVhaViaVjaOuaVkaVlaVmaVnaVoaVpapfaVqaOAaVraRuaRubmKaVtaVuaUgaVvaOFaaaaOGaVwaVxaUkaVyaRAaVzaVAaOGaaaaMfaVBaOIaOJaVCaVDaVEaVEaVEaNCaVEaVEaVFaVGaMkaVHaVIaVJaVKaVLaVMaVKaVNaVOaVOaVPaVQaVRaVSaVTaVUaVVaVSaVWaVXaNQaVYaVZaWaaWbaWcaWdaWeaNQasJaWfaxhaWgaWhaWiaWjaWkaWlaWmaWnaWoaWpaWqaWqaWraWsaHhaWtaHjddYaPxarAddZarAarAddZarAarAddZarAarAaPxabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaWvaWwaWxaWxaWxaWyaWxaWxaWxaWxaWzaWxaWxaWxaWxaWAaWxaWxaWxaWBaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaWDaWEaWFaWGaWDaHkaLCaMLaWHaWIaWJaLBaLBaLBaLBaUYaWKaHkazSapdakzaaaaMNaOnaMOaMOaMOaMOaMNaOoaMPaMPaWLaPIaRoaRoaRpaRoaOuaVjaWMaWNaVlaWOaWPaWQaWRapfazMaOAaWSaWTaWTaWUaWVaRuaUgaWWaOFabqaOGaOGaOGaWXaWYaWZaOGaOGaOGabqaMfaOHaXaaMjaXbaXcaVEaVEaVEaXdaVEaVEaXeaNCaXbaQCaXfaXgaXhaToaXiaToaTnaTpaToaXjaToaXkaTpaTqaToaTqaTpaXlaXmaNQaXnaXoaXpaXqaXraPiaQQaNQaXsaGWaxhaXtaXuaXvaXwaXxaXyaXzaXAaXBaXCaXDaXDaXEaXFaHhaHiaHjaMIdeaaMJdebaMJaMJdebaMJaMJdebaMJaMJdecabqaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXJaXKaXKaXLaXKaXKaXKaXKaXMaXKaXKaXKaXKaXLaXKaXKaXNaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaWDaXPaXQaXRaXSaHkaXTaMLaXUaXVaXWaMLaMLaMLaXXaXYaXZaHkaYaaYbapfabqaYcaYdaMOaMOaMOaYeaYfabqabqaMPaWLaYgaPJaPKaYhaYiaYjaYkaYlaYmaYnaYnaYnaYnaYnapfaYoaYpaYqaYraYraYsaYtaYuaYvaYwaYxaaaaaaaaaaOGaOGaYyaOGaOGaaaaaaaaaaNqaNraYzaMjaYAaYBaYCaYDaYEaNCaNCaYFaYGaNCaYAaQCaYHaYIaYJaYKaYLaYKaYMaYNaYOaYPaYKaYKaYKaYKaYKaYKaYQaYRaYSaNQaNQaNQaNQaYTaNQaNQaNQaNQaoGaGWaxhaYVaYUaYUaUNaYWaYXaYYaYZaZaaZbaZcaZdaZeaZfaFXaZgaCgaaaabqabqaaaaaaaaaaaaabqaaaaaaabqabqarAaDiaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXOaaaaaaaXLaaaaaaaaaaaaaXMaaaaaaaaaaaaaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaWDaXPaXQaXRaXSaHkaXTaMLaXUaXVaXWaMLaMLaMLaXXaXYaXZaHkaYaaYbapfabqaYcaYdaMOaMOaMOaYeaYfabqabqaMPaWLaYgaPJaPKaYhaYiaYjaYkaYlaYmaYnaYnaYnaYnaYnapfaYoaYpaYqaYraYraYsaYtaYuaYvaYwaYxaaaaaaaaaaOGaOGaYyaOGaOGaaaaaaaaaaNqaNraYzaMjaYAaYBaYCaYDaYEaNCaNCaYFaYGaNCaYAaQCaYHaYIaYJaYKaYLaYKaYMaYNbmLaYPaYKaYKaYKaYKaYKaYKaYQaYRaYSaNQaNQaNQaNQaYTaNQaNQaNQaNQaoGaGWaxhaYVaYUaYUaUNaYWaYXaYYaYZaZaaZbaZcaZdaZeaZfaFXaZgaCgaaaabqabqaaaaaaaaaaaaabqaaaaaaabqabqarAaDiaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXOaaaaaaaXLaaaaaaaaaaaaaXMaaaaaaaaaaaaaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaWDaWDaZiaZjaWDaWDaWDaZkaWDaWDaZlaZmaWDaWDaWDaZnaWDaWDaZoapfapfabqaZpaZqaZraZraZraZqaZsabqabqaZtaZuaPIaRoaRoaRpaRoaOuaZvaOuaZwaYnaZxaZyaZzaZAapfazSaOAaZBaZCaZDaZEaZFaZGaZHaZIaOFaZJaZKaZJaZLaZMaZNaZOaZLaZJaZKaZJaMfaZPaZQaZRaZSaMkaMkaMkaMkaZTaZUaZVaNCaZWaMkaQCaZXaTraZYaZZaZZaZZaZZaoGaoGaoGbaababbacbadbaebafaZZbagbagaoGbahazAazybaiazybajazybakazybalaxhbambambambambanbaobapbaqbarbasbataIvbaubavaCgaCgaCgabqabqbawbaxaDiaDiaDiaDiaDiaDibawaDibayaCgaCgaDoabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXOaaaaaaaXLaXLaXLaXLaXLaXMaXLaXLaXLaXLaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaabazbaAbaBbaCbaDbaEbaBbaFbaGbaHbaGbaIbaJbaGbaKbaLbaMbaNbaOapfaaaaaabaPbaQbaQbaQbaRaaaabqaZtbaSaWLaPIaRoaRobaTbaUaOubaVbaWbaXbaYbaZbbabbbbbcapfazSaOAaOAaOAaOBaOBbbdaOFbbebbfaOFbbgbbhbbiaZLbbjbbkbblaZLbbmbbnbbobbpbbqbbrbbsbbtbbubbvbbwaMkaMkaYAbbxaYAaMkaMkaXibbybbzaXibbAbbBbbCbbDbbEbbFaoGaoGaoGaoGbbGaoGaoGaoGaoGaoGaoGaGWasIasJbbHbbHbbHbbHbbHbbHbbHbambbIbbJbbKbambbLbbMbambbNbbOaFRaFRbbPbbQbbRaDfbbSaDfbbTaDibbUaDiaCiaCjbbVaCjaClaDibbUaDiaCmaDnaDoabqabqabfabfabeabqabeabfabfabeabeabfabfabfabeabqabqabqabqabqarBaWvbbWbbXbbXbbXbbXbbXbbYbbYbbYbbZbbYbbYbbYbbXbcabbXbbXbbXbcbaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaabccbcdbcebcebcfbcebcebcebcgbchbcibcjbckbckbckbclbcmbcnbcoapfaaaaaaabqabqaaaaaaabqabqabqaZtbcpbcqbcrbcsaRobctbcubcvbcwbcxbcybczbcAbcBbcCbcDapfbcEbcFbcGbcHbcIbcJbcKbcLbcMbcNbcObcPbcQbcPbcRbcSbcTbcUbcVbcPbcWbcXbcXbcYbcZbdabcXbcXbdbbdcbdcbdcbddbdebdcbdcbdfbdcbdgbdhbdcbdcbdcbdibdjaoGbdkbdlbdmbdnbdobdpbdobdqbdobdrazBbakbalaubasJbbHbdsbdtbdubdvbdwbdxbambdybdzbdzbdAbdzbdBbambdCbarbdDbdEbdEbdEbdEbdEbdFaCgbdGaCjbdHaCjaDmaCgaCgaCgbdGaCjaDmaCmaCmaCgabqabqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaarBaXHaXIaXOaaaaXLbdIbdIbdJbdKbdLbdMbdNbdKbdObdIbdPaXLaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccbdQbccaWDbccbdRbccbcdbcebdSbdTbccbdRbccbdUbdVbdWbdXapfapfapfapfakzakzakzapfapfapfaZtbdYbdZbdZbdZbdZbeaaRobebbecbedbeeaYnaYnaYnaYnbefapfapfbegapfapfbehbeibejbekbelbembenbekbelbeobepbembeqbekbekbekbelbekbekberbesbekbekbekbekbekbekbekbetbeubekbekbenbevbewbekbekbekbekbexbeybezbezbezbeAbezbezbezaoGbeBaoGaGWaoGaoGbeCbeCbeCbeCbeDbeEbeEbeFbeGbeHbambeIbeJbeKbeLbeMbeNbambeObePbeQbdEbeRbeSbeTbdEbeUaCgaCgaCgaCgaCgaCgaCgbeVaCgaCgaCgaCgaCgaLwaCgabqarBarBabearBarBarBarBabearBarBarBarBabearBarBarBarBarBarBarBarBaWvaXIaXOaaaaXLbdIbdLbeWbeXbeYbeZbfabeXbfbbdLbdPaXLaaaaZhaXIaXObfcbfcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccabqaaaabqaaabccbfdbccbfebfebffbfgbccbfdbccbccaWDbfhbfibfjavTavUbfkavUbflavUbfmbfnavVbfobfpbfqbfqbfrbfsbftbfubfvbfwbfxbfybfwbfzbfAbfwbfBbfCbfDbfEbfFbfGbfHbfIbfJbfKbfKbfLbfMbfNbfObfPbfQbfRbfSbfSbfSbfSbfSbfSbfSbfTbfUbfVbfVbfVbfVbfVbfVbfVbfVbfWbfXbfYbfZbfVbgabfWbfVbfVbgbbgcbgdbezbgebgfbggbghbgibezbgjbgkaoGbglaoGaaabeCbgmbgnbeCbgobgpbgqbgrbgsbgtbambgubgvbgwbgxbgybgzbambgAbgBbgCbdEbgDbgEbgFbdEbgGaOdaOdbgHaOdbgIaOdaOdaOdbgJaOdbgKbgLbgKbgLaefaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaUVbgMaXIaXOaaaaXLbdIbgNbgObdIbgPbgQbgRbdIbgSbgTbdPaXLaaaaZhaXIbgUaaabfcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccbdQbccaWDbccbdRbccbcdbcebdSbdTbccbdRbccbdUbdVbdWbdXapfapfapfapfakzakzakzapfapfapfaZtbdYbdZbdZbdZbdZbeaaRobebbecbedbeeaYnaYnaYnaYnbefapfapfbegapfapfbehbeibejbekbelbembenbekbelbeobepbembeqbekbekbekbelbekbekberbesbekbekbekbekbekbekbekbetbeubekbekbenbevbewbekbekbekbekbexbeybezbezbezbeAbezbezbezaoGbmMaoGaGWaoGaoGbeCbeCbeCbeCbeDbeEbeEbeFbeGbeHbambeIbeJbeKbmNbeMbeNbambeObePbeQbdEbeRbeSbeTbdEbeUaCgaCgaCgaCgaCgaCgaCgbeVaCgaCgaCgaCgaCgaLwaCgabqarBarBabearBarBarBarBabearBarBarBarBabearBarBarBarBarBarBarBarBaWvaXIaXOaaaaXLbdIbdLbeWbeXbeYbeZbfabeXbfbbdLbdPaXLaaaaZhaXIaXObfcbfcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccabqaaaabqaaabccbfdbccbfebfebffbfgbccbfdbccbccaWDbfhbfibfjavTavUbfkavUbflavUbfmbfnavVbfobfpbfqbfqbfrbfsbftbfubfvbfwbfxbfybfwbfzbfAbfwbfBbfCbfDbfEbfFbfGbfHbfIbfJbfKbfKbfLbfMbfNbfObfPbfQbfRbfSbfSbfSbfSbfSbfSbfSbfTbfUbfVbfVbfVbfVbfVbfVbfVbfVbfWbfXbfYbfZbfVbgabfWbfVbfVbgbbgcbgdbezbgebgfbggbghbgibezbgjbmOaoGbglaoGaaabeCbgmbgnbeCbgobgpbgqbgrbgsbgtbambgubgvbgwbgxbmPbgzbambgAbgBbgCbdEbgDbgEbgFbdEbgGaOdaOdbgHaOdbgIaOdaOdaOdbgJaOdbgKbgLbgKbgLaefaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaUVbgMaXIaXOaaaaXLbdIbgNbgObdIbgPbgQbgRbdIbgSbgTbdPaXLaaaaZhaXIbgUaaabfcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqaaabccbdRbccbccbccbccbccbccbdRbccaaaaWDbgVbgWbgXbgXbgXbgXbgXbgXbgXbgXbgYbgZbfwbfwbhabhbbhabfwbfwbfwbhcbfwbhdbhebhfbhgbhhbhibhjbhkbhlbhmbhnbfGbhobfIbhpbhqbhqbhrbhqbhsbhqbhtbhubhtbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhwbhwbhxbhwbhwbhwbhwbhwbhwbhybfIbhzbezbhAbhBbhCbhDbhEbezbhFbhGaoGaGWaoHaaabhHbhIbhJbhKbhLbhMbhNbhObhPbhQbambhRbhSbhTbhTbhUbhVbambhWbhXbhWbdEbhYbhZbiabdEbibaCgaCgaCgaCgaCgaCgaCgaCgaCgaHjaCgaCgbdFaCgabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqarBbicbidbiebifaXLaXLaXLbdIbigbihbiibdIbdIbdIbijbikbilbdPaXLaXLaXLbimaWBaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabinbiobipbiobiqbiobiobiqbiobipbirbisaWDbgVbitbiubivbiwbixbiybizbiAbgXbiBbiCbiDbiEbiFbiGbiFbiGbiHbiGbiIbfwbiJbiKbiLbiMbiNbiObiPbiQbiRbiSbiTbiUbiVbiWbiXbhqbiYbiZbjabjbbhqbjcbjdbjeabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqbhwbjfbjgbjhbjibjjbjkbjlbhwbjmbjnbjobezbjpbjqbjrbjsbjtbezaoGaoGaoGbjuaoGaaabeCbjvbjwbeCbjxbjybjzbjAbjBbjCbambjDbjEbjFbjGbjHbjIbamaFRbjJaFRbdEbjKbjLbjMbdEbjNbjNbjNafdacJaaaaaaaaaaaaabqaaaaaaaCgbgLaCgabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaUUaUUbjObjPaXIbjQbjRaaaaaaaXLbjSbjTbjUbdIbdIbjVbdIbdIbgSbjWbjXaXLaaaaaabjYaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabinbiobiobjZbkabkbbkcbkdbkebkfbkgbkhbkbbkibkjbccbgVbgWbkkbklbkmbknbkobkpbkqbkrbksbktbkubkvbkvbkwbkxbkybfwbfwbfwbfwbkzbkAbkBbkCbkDbhabkEbhkbhlbkFbkGbkHbkIbfIbkJbhqbkKbkLbkMbkNbkObkPbkQbkRabqabqbkSbkTbkUbkVbkWbkXbkTbkVbkWbkXbkUbkUbkYabqabqbhwbkZblablbblcblbbldblebhwblfbfIblgblhbezblibljblkbezbezbllblmaoGblnaoGblobeCbeCbeCbeCbbHbbHbbHblpblqbbHbambambambambamblrblsbambltblubltbdEblvblwblxbdEblyblzblAblBblBblCaaaaaaaaaabqaaaaaaaaaaefaaaabqaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaabqabqaefblDblEblFblEblGaXOaaaaaaaaaaXLblHbdLblIblJblKblLblMblJblNbdLbdPaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablOblPblQblRbkbblSblTblSblTblSblTblSbkbblUblVbccbgVblWbgXblXblYblZbmabmbbmcbgXbmdbmebmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbiVbfIbkJbhqbmBbmCbmDbmEbhqbmFbmGbjeabqabqbmHbmIbmJbmKbmLbmMbmNbmObmPbmQbmRbmSbmTabqabqbhwbmUbmVbmWbmXbmYbmZbnabhwbhybnbbncbndbnebnfbnebngbnhbnibnebnebnebnjbnebnkbnlbnmbnnbnebnebnobnkbngbnjbnpbnqbnobnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDbnEbnFbnFbnGbnHbnIbnJaaaaaaaaaabqaaaaaaaaaaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqaefblDblEbnKblEbnLaXOaaaaaaaaaaXLbnMbnNbdJbnObnPbnQbnRbnSbnTbdIbdPaXLaXLaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiqbkbbkbbipbkbblSblTblSbnVblSblTblSbkbblUblVbccbnWbnXbnYbnZboabobbocbobbiubiubodboebhcbfwbofbogbohboibojbokbolbfwbombonbojbkCboobfwbopboqborbosbotbiUbkIbfIbkJbhqboubovbowboxbhqboybozbjebkWboAbkWboBboCboDboEboDboFboDboEboDboGboHbkWboAbkWbhwboIboIboIboJboKboLboMbhwboNboOboPboQboRboSboRboTboRboUboRboRboRboVboRboWboXboYboZboRboRbpabpbbpcboVbpdboVbpebpfbpgbntbphbpibpibpjbpkbpibpibplbpmbpnbpobnFbnFbppblBblBbpqaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbpraaaaaaaaaabqbjRbjRbjObpsaXIaXOaaaaaaaaaaXLaXLblHbdIbdIbdIbptbdIbdIbdIbdIbpubcabpvaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablObpwbpxblRbkbblSblTblSblTblSblTblSbkbblUblVbccbpybpzbpAbpBbpCbpDbpDbpEbpFbpBbpGbpHbpIbfwbpJbpKbpLbpMbpNbpObpPbfwbpQbpRbpSbpTbpUbfwbpVbpWbpXbpYbpZbfGbqabjnbqbbqcbqcbqcbqcbqcbhtbqdbqebhtbkWbqfbqgbqhboEboEboEboEbqiboEboEboEboEbqjbqkbqlbkWbqmbqnbqobqpbqqbqrbqrbqsbhwbqtbqubqvbqwbqxbqybqxbqzbqxbqAbqxbqxbqBbqxbqxbqCbqDbqxbqEbqBbqFbqGbqCbqHbqxbqIbqJbqKbqLbqMbqNbqObqPbqQbqRbpnbqSbqSbqTbqUbqVbqWbntbntbntafdbqXabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabqYbqZbrabrbbrcbrdbrebrfaXIaXLaXLaXLaXLaXLbrgbrhbrgbrgbribrjbribrkbrkbrlbrmbrnaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbrNbehbfIbrObqcbrPbrQbrRbqcbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebscbscbsfbsabsgbshbsibkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbsmbsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbumaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobthbiobiqbiobiobiqbiobipbtibtjaWDbtkbtlbtmbfGbtnbtobtpbtobtqbfGbtrbtsbttbtubtvbtwbtxbtybtzbtwbtAbtBbtwbtvbtvbtCbtvbtDbtEbtFbtGbtHbtvbtIbtJbtKbkJbtLbtMbtNbtObqcbjebjebjebjebkWbtPbtQbtRbtSbtTbtUboEbtVbtWbtXbtYbtSbtZbuabubbucbhwbudbuebufbugbuhboIbuibhwbujbfIbukbuldedbunbuobsmbupbuqburbusbutbuubuvbuwbuxaoGbuybuzbuAbuBbuCaoGaxcbuDaoGbuEbuFbuGbnEbuHbuHbuHbuIbuJbqSbqSbuKbuLbuMbuNbuObuPbuQbuRbuSbuTbuTbuUbuVbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuYbuZbuTbuTbuTbvabvbbvcbvdbvdbvebvfbvgbvhbvibvjbvkbvlbvmbvnbvobvpbvqbvrbvsbvtbvubvvbbXbbXbvwaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaabccbdRbccbccbccbccbccbccbdRbccaaaaWDbvxbvybvzbfGbvAbvBbvCbvBbvDbfGbvEbvFbvGbvHbvHbvIbvJbvHbvHbvKbvLbvMbvNbvHbvHbvObvHbvHbvHbvPbvQbvRbvRbvSbvTbvUbvVbqcbvWbvXbvYbqcbvZbwabwbbwcbwdbtYbwebtTbwfbwgbwhbwibwjbwibwkbwlbwmbwnbwobwpbwqbhwbwrbwsbwtbwubwvbhwbhwbhwbhybwwbwxbsmbwybwzbwAbsmbwBbwCbwDbwEbwFbwGbwHbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSaoGbsubwTbwUbntbwVbwWbwXbwYbwZbxabxbbxcbxdbqUbxebxfbxgbxhbxiaWCaaaaaabxjbsNabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabxkbxlbsLaaaabqaZhbxmbxnbxobxpbxqbxrbxsbxtbxubxvbxwbxxbxybxzbxAbxBbxCbxDbtfbxEbxFaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccabqaaaabqaaabccbxGbccbxHbxIbfebxJbccbxGbccbccaWDbgVbxKbxLbfGbxMbvBbxNbvBbxObfGbxPbxQbxRbxSbxTbxUbxVbxWbxXbxYbxZbyabxTbxTbxTbybbxTbycbydbxVbyebxTbxTbyfbygbyhbvVbqcbyibyjbykbylbymbynbymbymbwdbyobypbyqbyqbyqbyrbysbytbyubyvbyqbyqbyqbywbyxbkWbhwbyybyzbyAbyBbyCbhwbyDbyEbyFbyGbwxbsnbyHbyIbyJbsmbyKbyLbyMbyNbspbspaoGaoGbyOaoGaoGaoGbyPbyQaoGaoGbyRbySaoGbyTbwTbyUbntbjNbjNbjNbjNbyVbjNbjNbyWbyXbyYbntbntbyZbzabzbbzcaaabqYbzdaaaabqaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabxkbxlbsLabqbzebzfbzgbzhbzibzjbrgbzkbzlbzmbznbzobzpbrgbzqbzrbzsbrkbztbzubtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbccbdQbccaWDbccbdRbccbzvbaBbzwbzxbccbdRbccbzybzzbzAbtlbtmbfGbzBbzCbtpbzCbzBbfGbzDbzEbzFbfGbzGbzHbzIbfGapfbzJapfbzKbzKbzLbzMbzNbzLbzKbzKbzKbzKbzKbzKbzObzPbzQbzRbzSbzTbzUbzVbzWbzVbzXbzYbzZbAabAbbAcbAdbAebAdbAdbAfbAgbAhbyqbyqbAibyqbAjbAkbhwbAlbAmbAnbAobApbAqbhwbArbhtbAsbbrbAtbsmbsmbsmbsmbsmbAubAvbspbspbspbAwbAxbspbAybAzbAAaoGazpbABaoGbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbAKbANbAObjNbAPbAQbARbASbATbAUbAVbAWbAXbsJbAYbAZabqabqabqabqabqaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaabqbpraaabxkbBabrbbBbbBcbrebpsaXIaXLbBdbBebBfbBgbBhbBibrgbrgbBjbBkbBlbrkbrkbBmbBnbBoaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbBpbaBbaCbBqbBrbaBbaBbBsbBtbchbBubBvbBvbBvbBwbBxbBybBzbBAbBBbBCbBDbBEbBFbBGbBBbBHbBIbBJbBKbBKbBLbBKbBKarKbBMbBNbzKbBObBPbBQbBRbBSbzKbBTbBUbzKbBTbBUbzKbzPbfIbkJbqcbBVbBWbBXbqcbBYbBZbCabCbbwdbCcbCdbyqbCebCfbCgboEboEbAkbChbCibCjbyqbCkbClbhwbCmbCnbCobCpbCqbCrbCsbCtbhtbhybbrbhzbspbCubCvbCwbCxbCybCzbCAbspbCBbCCbCDbCEbCFbCGbCHaoGaoGaoGaoGaoGaoGbCIaoGbCJbCKbCLbCMbCNbCNbCNbCNbCNbCMbCMbCNbCObCPbCQbCRbCSbCTbCUbCVbCMbCMbCMabqaaaaaaaaaabqaaaabqaaaabqaaaabeaaaabeaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqarBbicaXIaXObCWaXLbCXbCYbCZbDabDbbDcbDdbDebDfbDgbDhbDibbXbbXbDjaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbcdbcebcebDkbcebDlbDmbDnbDnbDobDnbDpbDqbDrbDsbDtbDubDvbDwbpBbDxbDybDzbDAbDBbDCbDDbDEbDFbDGbDHbDIbDJbBKbDKbDLanHbzKbDMbDNbBQbBRbBSbzKbDObDPbzKbDObDPbzKbDQbfIbkJbqcbqcbDRbqcbqcbqcbDSbDTbDUbqcbDVbDWbDXboEbwibwibDYbDZbEabEbbEcbEdbEebEfbEgbEhbEibEjbEkbElbEmbEnbhwbEobhtbEpbbrbhzbspbEqbErbCybEsbCybEtbCybEubEvbCHbEwbExbEybEzbEAbEBbECbEDbEEbEFbEGbEHaoGbEIbwTbEJbCMbEKbELbEMbENbEObCMbEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabCMabqabqabqabqabqabqabqaaaabeaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbFebFfbFgbDabFhbFibFjbFkbFlbFmbFnbDaaXLaaaaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccaWDbccbdQbccaWDbccbccbccaWDbccaWDaWDaWDbnWbnXapfbFoapfapfbFpbFqbFpbFrbFpbFpbFpbFpbBKbBKbFsbFtbBKbBKbBKbFuaoXbzKbFvbFwbBQbFxbzKbzKbFybzKbzKbFzbzKbzKbFAbfIbkJbFBbFCbFDbFEbFFbFGbFDbFDbFHbFIbAkbFJbAdbFKbFLbFMbFNbFObFPbFQbFRbFSbyqbFTbFUbhwbFVbFWbFXbFYbFZbGabhwbGbbhtbhybbrbhzbspbGcbGdbGebGdbGfbGgbGhbGibEvbCHbGjbGkbCHbEvbGlbGmbGnbGobGpbGqbEGbySaoGbGrbGsbGtbGubGvbGwbGxbGybGzbCMbGAbGBbGCbGDbETbGEbGFbGGbGHbGIbGJbGKbCMabqbGLbGLbGLbGLbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbGMbGNbGObDabGPbGQbGRbGSbGTbGUbGVbDaaXLaaaaaaaUUbjPaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabGWbGXbGXbGYbGXbGXbGXbGZbGXbGXbHaabqbccbHbbgVbHcapfbBMayBbHdbFpbHebHfbHgbHhbHibHjbFpbHkbHkbHlbHmbHnbHobBKbFubHpbzKbHqbHrbBQbBRbHsbHtbFwbHubHvbHwbHxbzLbzPbfIbkJbFBbHybHzbHAbHAbHAbHAbHAbHBbFIbHCbHDbkWbkWbkWbHEbHFbHGbHHbHIbkWbkWbkWbHJbHCbhwbhwbEhbhwbhwbhwbhxbhwbHKbhtbHLbHMbhzbHNbHObHObHObHPbHObHQbHObHRbEvbEvbHSbEvbEvbCHbHTbHUbHVbHWbHXbHYbEGbCIaoGbHZbGsbIabIbbIcbIdbIebIfbIgbIhbIibIjbIkbIlbETbImbInbIobIpbIqbIrbIsbItbIubIvbIwbIxbIxbGLabqaaabFcaaabFbaaaabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLaXLaXLaXLbDabIybIzbIAbFlbIBbICbIDbDaaXLaaaaZhbIEaWxbIFaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGWbIGbIHbIIbIJbIJbIKbIJbIJbIJbIKbGYbILbccbccbgVbIMapfbINbIObIPbFpbIQbHfbHgbIRbISbITbFpbIUbIVbIWbIXbBKbBKbBKbFuatjbzKbIYbIZbBQbBRbBQbBQbBQbBQbBQbJabBQbzMbJbbJcbJdbJebJfbJgbJfbJhbJfbJgbJfbJibJjbJkbJlbJmbJnbJobJpbJpbJqbJrbJpbJsbJtbJubJvbJwbJxbJobJybJzbJobJAbJBbJobJCbJDbJEbJFbwxbJGbCybJHbCybJIbCybJJbCybJKbEvbEvbJLbEvbEvbJMbJNbHUbJObECbHXbJPbEGbCIaoGbJQbJRbyUbGubJSbIdbJTbIdbJUbJVbJWbJXbJYbJZbETbKabKbbKcbKdbKebKfbKgbETabqbETbKhbIxbKibGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaaaaaaaaabKjbKkbKlbKlbKmbKnbKmbKlbKlbKobpvaXLaXLbnUbKpbKqaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKrbKsbKsbKsbKsbKsbKsbKsbKsbKsbKsbKtbKubKvbKubgVbKwapfbKxbKyanEbFpbKzbHfbHgbKAbHfbKBbFpbBKbKCbBKbHmbKDbKEbBKbFuathbzKbKFbHrbKGbKHbKIbKIbKIbKIbKIbKJbKIbKKbygbKLbKMbKNbKObKPbKObKQbKRbKSbKTbKUbKVbKWbKXbKObKYbKZbLabLbbLcbLdbLabLebLfbLgbLhbLibLjbLkbLlbLmbLnbLobLpbLibLqbLrbLsbLtbLubLvbLwbLxbLybLybLzbLAbLwbLBbLCbLDbLEbCHbLFbCHbLGbLHbLIbLJbLKbLLbLMbLNaoGbLObLPbLQbLRbLSbLTbLUbLVbLWbETbLXbLYbLZbMabMbbMcbIobMdbMebMfbMgbMhbMibMjbMkbMlbIxbMmbGLabqaaabFcaaabFbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdbMnaUUaUUaaaaaaaXMbMobMpbMqbKmbMrbKmbMsbMtbMuaXMaaaaZhaXIaXObfcarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabinbiobipbiobiqbiobiobiqbiobipbirbisaWDbgVbitbiubivbiwbixbiybizbiAbgXbiBbiCbiDbiEbiFbiGbiFbiGbiHbiGbiIbfwbiJbiKbiLbiMbiNbiObiPbiQbiRbiSbiTbiUbiVbiWbiXbhqbiYbiZbjabmQbhqbjcbjdbjeabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqbhwbjfbjgbjhbjibjjbjkbjlbhwbjmbjnbjobezbjpbjqbjrbjsbjtbezaoGaoGaoGbjuaoGaaabeCbjvbjwbeCbjxbjybjzbjAbjBbjCbambjDbjEbjFbjGbjHbjIbamaFRbjJaFRbdEbjKbjLbjMbdEbjNbjNbjNafdacJaaaaaaaaaaaaabqaaaaaaaCgbgLaCgabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaUUaUUbjObjPaXIbjQbjRaaaaaaaXLbjSbjTbjUbdIbdIbjVbdIbdIbgSbjWbjXaXLaaaaaabjYaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabinbiobiobjZbkabkbbkcbkdbkebkfbkgbkhbkbbkibkjbccbgVbgWbkkbklbkmbknbkobkpbkqbkrbksbktbkubkvbkvbkwbkxbkybfwbfwbfwbfwbkzbkAbkBbkCbkDbhabkEbhkbhlbkFbkGbkHbkIbfIbkJbhqbkKbkLbkMbkNbkObkPbkQbkRabqabqbkSbkTbkUbkVbkWbkXbkTbkVbkWbkXbkUbkUbkYabqabqbhwbmRblablbblcblbbldblebhwblfbfIblgblhbezblibljblkbezbezbllblmaoGblnaoGblobeCbeCbeCbeCbbHbbHbbHblpblqbbHbambambambambamblrblsbambltblubltbdEblvblwblxbdEblyblzblAblBblBblCaaaaaaaaaabqaaaaaaaaaaefaaaabqaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaabqabqaefblDblEblFblEblGaXOaaaaaaaaaaXLblHbdLblIblJblKblLblMblJblNbdLbdPaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablOblPblQblRbkbblSblTblSblTblSblTblSbkbblUblVbccbgVblWbgXblXblYblZbmabmbbmcbgXbmdbmebmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbiVbfIbmSbhqbmBbmCbmDbmEbhqbmFbmGbjeabqabqbmHboBbopbpVboHbqfbqdbqhbqgbqkbqjbqlbmTabqabqbhwbmUbmVbmWbmXbmYbmZbnabhwbhybnbbncbndbnebnfbnebngbnhbnibnebnebnebnjbnebnkbnlbnmbnnbnebnebnobnkbngbnjbnpbnqbnobnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDbnEbnFbnFbnGbnHbnIbnJaaaaaaaaaabqaaaaaaaaaaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqaefblDblEbnKblEbnLaXOaaaaaaaaaaXLbnMbnNbdJbnObnPbnQbnRbnSbnTbdIbrQaXLaXLaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiqbkbbkbbipbkbblSblTblSbnVblSblTblSbkbblUblVbccbnWbnXbnYbnZboabobbocbobbiubiubodboebhcbfwbofbogbohboibojbokbolbfwbombonbojbkCboobfwbrXboqborbosbotbiUbkIbfIbkJbhqboubovbowboxbhqboybozbjebkWboAbkWbsbboCboDboEboDboFboDboEboDboGbscbkWboAbkWbhwboIboIboIboJboKboLboMbhwboNboOboPboQboRboSboRboTboRboUboRboRboRboVboRboWboXboYboZboRboRbpabpbbpcboVbpdboVbpebpfbpgbntbphbpibpibpjbpkbpibpibplbpmbpnbpobnFbnFbppblBblBbpqaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbpraaaaaaaaaabqbjRbjRbjObpsaXIaXOaaaaaaaaaaXLaXLblHbdIbdIbdIbptbdIbdIbdIbdIbsebsdbsfaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablObpwbpxblRbkbblSblTblSblTblSblTblSbkbblUblVbccbpybpzbpAbpBbpCbpDbpDbpEbpFbpBbpGbpHbpIbfwbpJbpKbpLbpMbpNbpObpPbfwbpQbpRbpSbpTbpUbfwbsibpWbpXbpYbpZbfGbqabjnbqbbqcbqcbqcbqcbqcbhtbtPbqebhtbkWbtSbtRbtTboEboEboEboEbqiboEboEboEboEbtZbtYbubbkWbqmbqnbqobqpbqqbqrbqrbqsbhwbqtbqubqvbqwbqxbqybqxbqzbqxbqAbqxbqxbqBbqxbqxbqCbqDbqxbqEbqBbqFbqGbqCbqHbqxbqIbqJbqKbqLbqMbqNbqObqPbqQbqRbpnbqSbqSbqTbqUbqVbqWbntbntbntafdbqXabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabqYbqZbrabrbbrcbrdbrebrfaXIaXLaXLaXLaXLaXLbrgbrhbrgbrgbribrjbribrkbrkbrlbrmbrnbudaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbrNbehbfIbrObqcbrPbumbrRbqcbrSbrTbrUbrVbrWburbrYbrZbsabsabvWbwfbwebvWbvWbsabsabsgbshbwgbkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbsmbsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbwlaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobthbiobiqbiobiobiqbiobipbtibtjaWDbtkbtlbtmbfGbtnbtobtpbtobtqbfGbtrbtsbttbtubtvbtwbtxbtybtzbtwbtAbtBbtwbtvbtvbtCbtvbtDbtEbtFbtGbtHbtvbtIbtJbtKbkJbtLbtMbtNbtObqcbjebjebjebjebkWbwmbtQboEboEboEbtUboEbtVbtWbtXboEboEbwnbuabAkbucbhwbwobuebufbugbuhboIbuibhwbujbfIbukbuldedbunbuobsmbupbuqbwpbusbutbuubuvbuwbuxaoGbuybuzbuAbuBbuCaoGaxcbuDaoGbuEbuFbuGbnEbuHbuHbuHbuIbuJbqSbqSbuKbuLbuMbuNbuObuPbuQbuRbuSbuTbuTbuUbuVbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuYbuZbuTbuTbuTbvabvbbvcbvdbvdbvebvfbvgbvhbvibvjbvkbvlbvmbvnbvobvpbvqbvrbvsbvtbvubvvbbXbbXbvwaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaabccbdRbccbccbccbccbccbccbdRbccaaaaWDbvxbvybvzbfGbvAbvBbvCbvBbvDbfGbvEbvFbvGbvHbvHbvIbvJbvHbvHbvKbvLbvMbvNbvHbvHbvObvHbvHbvHbvPbvQbvRbvRbvSbvTbvUbvVbqcbyobvXbvYbqcbvZbwabwbbwcbwdboEbtQboEbypbywbwhbwibwjbwibwkbyJbyxbAbbyQbAkbwqbhwbwrbwsbwtbwubwvbhwbhwbhwbhybwwbwxbsmbwybwzbwAbsmbwBbwCbwDbwEbwFbwGbwHbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSaoGbsubwTbwUbntbwVbwWbwXbwYbwZbxabxbbxcbxdbqUbxebxfbxgbxhbxiaWCaaaaaabxjbsNabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabxkbxlbsLaaaabqaZhbxmbxnbxobxpbxqbxrbxsbxtbxubxvbxwbxxbxybxzbxAbxBbxCbxDbtfbxEbxFaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccabqaaaabqaaabccbxGbccbxHbxIbfebxJbccbxGbccbccaWDbgVbxKbxLbfGbxMbvBbxNbvBbxObfGbxPbxQbxRbxSbxTbxUbxVbxWbxXbxYbxZbyabxTbxTbxTbybbxTbycbydbxVbyebxTbxTbyfbygbyhbvVbqcbyibyjbykbylbymbynbymbymbwdbAjbAebyqbyqbyqbyrbysbytbyubyvbyqbyqbyqbBWbCcbkWbhwbyybyzbyAbyBbyCbhwbyDbyEbyFbyGbwxbsnbyHbyIbCdbsmbyKbyLbyMbyNbspbspaoGaoGbyOaoGaoGaoGbyPbCeaoGaoGbyRbySaoGbyTbwTbyUbntbjNbjNbjNbjNbyVbjNbjNbyWbyXbyYbntbntbyZbzabzbbzcaaabqYbzdaaaabqaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabxkbxlbsLabqbzebzfbzgbzhbzibzjbrgbzkbzlbzmbznbzobzpbrgbzqbzrbzsbrkbztbzubtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbccbdQbccaWDbccbdRbccbzvbaBbzwbzxbccbdRbccbzybzzbzAbtlbtmbfGbzBbzCbtpbzCbzBbfGbzDbzEbzFbfGbzGbzHbzIbfGapfbzJapfbzKbzKbzLbzMbzNbzLbzKbzKbzKbzKbzKbzKbzObzPbzQbzRbzSbzTbzUbzVbzWbzVbzXbzYbzZbAabCfbAcbAdbCibAdbAdbAfbAgbAhbyqbyqbAibyqbCkbAkbhwbAlbAmbAnbAobApbAqbhwbArbhtbAsbbrbAtbsmbsmbsmbsmbsmbAubAvbspbspbspbAwbAxbspbAybAzbAAaoGazpbABaoGbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbAKbANbAObjNbAPbAQbARbASbATbAUbAVbAWbAXbsJbAYbAZabqabqabqabqabqaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaabqbpraaabxkbBabrbbBbbBcbrebpsaXIaXLbBdbBebBfbBgbBhbBibrgbrgbBjbBkbBlbrkbrkbBmbBnbBoaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbBpbaBbaCbBqbBrbaBbaBbBsbBtbchbBubBvbBvbBvbBwbBxbBybBzbBAbBBbBCbBDbBEbBFbBGbBBbBHbBIbBJbBKbBKbBLbBKbBKarKbBMbBNbzKbBObBPbBQbBRbBSbzKbBTbBUbzKbBTbBUbzKbzPbfIbkJbqcbBVbClbBXbqcbBYbBZbCabCbbwdbAkbDrbyqboEbDVbCgboEboEbAkbChbDWbCjbyqbEfbEgbhwbCmbCnbCobCpbCqbCrbCsbCtbhtbhybbrbhzbspbCubCvbCwbCxbCybCzbCAbspbCBbCCbCDbCEbCFbCGbCHaoGaoGaoGaoGaoGaoGbCIaoGbCJbCKbCLbCMbCNbCNbCNbCNbCNbCMbCMbCNbCObCPbCQbCRbCSbCTbCUbCVbCMbCMbCMabqaaaaaaaaaabqaaaabqaaaabqaaaabeaaaabeaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqarBbicaXIaXObCWaXLbCXbCYbCZbDabDbbDcbDdbDebDfbDgbDhbDibbXbbXbDjaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbcdbcebcebDkbcebDlbDmbDnbDnbDobDnbDpbDqbEJbDsbDtbDubDvbDwbpBbDxbDybDzbDAbDBbDCbDDbDEbDFbDGbDHbDIbDJbBKbDKbDLanHbzKbDMbDNbBQbBRbBSbzKbDObDPbzKbDObDPbzKbDQbfIbkJbqcbqcbDRbqcbqcbqcbDSbDTbDUbqcbFJbtQbDXboEbwibwibDYbDZbEabEbbEcbEdbEebshbFUbEhbEibEjbEkbElbEmbEnbhwbEobhtbEpbbrbhzbspbEqbErbCybEsbCybEtbCybEubEvbCHbEwbExbEybEzbEAbEBbECbEDbEEbEFbEGbEHaoGbEIbwTbHCbCMbEKbELbEMbENbEObCMbEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabCMabqabqabqabqabqabqabqaaaabeaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbFebFfbFgbDabFhbFibFjbFkbFlbFmbFnbDaaXLaaaaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccaWDbccbdQbccaWDbccbccbccaWDbccaWDaWDaWDbnWbnXapfbFoapfapfbFpbFqbFpbFrbFpbFpbFpbFpbBKbBKbFsbFtbBKbBKbBKbFuaoXbzKbFvbFwbBQbFxbzKbzKbFybzKbzKbFzbzKbzKbFAbfIbkJbFBbFCbFDbFEbFFbFGbFDbFDbFHbFIbAkbHDbAdbFKbFLbFMbFNbFObFPbFQbFRbFSbyqbFTbAkbhwbFVbFWbFXbFYbFZbGabhwbGbbhtbhybbrbhzbspbGcbGdbGebGdbGfbGgbGhbGibEvbCHbGjbGkbCHbEvbGlbGmbGnbGobGpbGqbEGbySaoGbGrbGsbGtbGubGvbGwbGxbGybGzbCMbGAbGBbGCbGDbETbGEbGFbGGbGHbGIbGJbGKbCMabqbGLbGLbGLbGLbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbGMbGNbGObDabGPbGQbGRbGSbGTbGUbGVbDaaXLaaaaaaaUUbjPaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabGWbGXbGXbGYbGXbGXbGXbGZbGXbGXbHaabqbccbHbbgVbHcapfbINbHJbHdbFpbHebHfbHgbHhbHibHjbFpbHkbHkbHlbHmbHnbHobBKbFubHpbzKbHqbHrbBQbBRbHsbHtbFwbHubHvbHwbHxbzLbzPbfIbkJbFBbHybHzbHAbHAbHAbHAbHAbHBbFIbKRbIObkWbkWbkWbHEbHFbHGbHHbHIbkWbkWbkWbPcbKRbhwbhwbEhbhwbhwbhwbhxbhwbHKbhtbHLbHMbhzbHNbHObHObHObHPbHObHQbHObHRbEvbEvbHSbEvbEvbCHbHTbHUbHVbHWbHXbHYbEGbCIaoGbHZbGsbIabIbbIcbIdbIebIfbIgbIhbIibIjbIkbIlbETbImbInbIobIpbIqbIrbIsbItbIubIvbIwbIxbIxbGLabqaaabFcaaabFbaaaabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLaXLaXLaXLbDabIybIzbIAbFlbIBbICbIDbDaaXLaaaaZhbIEaWxbIFaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGWbIGbIHbIIbIJbIJbIKbIJbIJbIJbIKbGYbILbccbccbgVbIMapfbFubQZbIPbFpbIQbHfbHgbIRbISbITbFpbIUbIVbIWbIXbBKbBKbBKbFuatjbzKbIYbIZbBQbBRbBQbBQbBQbBQbBQbJabBQbzMbJbbJcbJdbJebJfbJgbJfbJhbJfbJgbJfbJibJjbJkbJlbJmbJnbJobJpbJpbJqbJrbJpbJsbJtbJubJvbJwbJxbJobJybJzbJobJAbJBbJobJCbJDbJEbJFbwxbJGbCybJHbCybJIbCybJJbCybJKbEvbEvbJLbEvbEvbJMbJNbHUbJObECbHXbJPbEGbCIaoGbJQbJRbyUbGubJSbIdbJTbIdbJUbJVbJWbJXbJYbJZbETbKabKbbKcbKdbKebKfbKgbETabqbETbKhbIxbKibGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaaaaaaaaabKjbKkbKlbKlbKmbKnbKmbKlbKlbKobpvaXLaXLbnUbKpbKqaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKrbKsbKsbKsbKsbKsbKsbKsbKsbKsbKsbKtbKubKvbKubgVbKwapfbKxbKyanEbFpbKzbHfbHgbKAbHfbKBbFpbBKbKCbBKbHmbKDbKEbBKbFuathbzKbKFbHrbKGbKHbKIbKIbKIbKIbKIbKJbKIbKKbygbKLbKMbKNbKObKPbKObKQbSrbKSbKTbKUbKVbKWbKXbKObKYbKZbLabLbbLcbLdbLabLebLfbLgbLhbLibLjbLkbLlbLmbLnbLobLpbLibLqbLrbLsbLtbLubLvbLwbLxbLybLybLzbLAbLwbLBbLCbLDbLEbCHbLFbCHbLGbLHbLIbLJbLKbLLbLMbLNaoGbLObLPbLQbLRbLSbLTbLUbLVbLWbETbLXbLYbLZbMabMbbMcbIobMdbMebMfbMgbMhbMibMjbMkbMlbIxbMmbGLabqaaabFcaaabFbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdbMnaUUaUUaaaaaaaXMbMobMpbMqbKmbMrbKmbMsbMtbMuaXMaaaaZhaXIaXObfcarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMvbMwbMxbMybMzbMzbMAbMzbMzbMzbMAbGYbccbccbccbgVbMBapfbMCapfapfbFpbMDbMEbMFbHfbHfbHfbFpbMGbMHbBKbMIbBKbBKbBKbMJbMKbMLbFwbFwbJabMMbMNbFwbFwbFwbFwbMObMPbzLbzPbMQbMRbMSbMSbMTbMUbMVbMSbMSbMWbMWbMXbMYbMWbMZbNabNbbNcbMZbNdbNdbNebNfbNgbNdbNhbNibNjbNkbNhbNhbNlbNmbNnbNhbNobhtbNpbNqbNrbNsbNtbNubNtbNvbNwbCybCybHRbHSbEvbNxbNybNzbNybLDbNAbNBbNCbNDbNEbEGbNFaoGbNGbNHbNIbNJbNKbNLbNMbNNbNObNPbNQbNRbGIbGFbETbNSbNTbNUbNTbNUbNVbNWbETabqbGLbGLbGLbGLbGLabqaaabFcaaabFbaaabFcabfabeabqabeabfabfabeabeabfabfabfarBarBarBarBbicbNXaWxaWxbNYbrebreaXMbNZbOabObbKmbKnbKmbObbOabOcaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabMvbGXbGXbGYbGXbGXbGXbGZbGXbGXbOdabqbccbOebgVbOfapfbFuatjbOgbFpbOhbHgbOibOjbKBbHfbFpbOkbOlbBKbIUbOmbOnbBKbFuapdbzKbOobOobJabBRbOpbOpbOqbOrbOsbOtbzKbzKbJbbOubOvbMSbOwbOxbOybOzbOAbOBbOCbODbOEbOFbMWbOGbOHbOIbOJbOKbNdbOLbOMbONbOObOPbNhbOQbORbOSbOTbNhbNhbNhbNhbNhbOUbhtbNpbOVbOWbspbOXbOYbHObOZbPabHObPbbspbHSbPcbEvbEvbEvbEvbEvbPdbPebPfbPgbPhbEGbPiaxhbPjbPkbPlbPmbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPwbPxbPybPzbIpbPAbPBbPCbItbIubIvbPDbPEbPEbGLabqabqbPFabqbPGabqbFcaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaarBaaabPHaXKaXNaXIaXOaaaaXMbPIbOabOabOabPJbOabOabOabPKaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccaWDbccbdQbccaWDbccbccbccaWDbccaWDaWDaWDbPLbPMbPNbPObPPbPQbFpbPRbPSbOibPTbPUbPVbFpbBKbBKbBKbBKbBKbBKbBKbFuanHbzKbPWbPXbJabBRbFwbFwbPYbFwbPZbQabzKbQbbzPbfIbQcbMSbQdbQebQfbQgbQhbOBbQibQjbQkbQlbQmbQnbQobQobQobQpbQqbQrbQsbQtbQsbQubQvbQwbQxbQybQzbQAbQBbQCbQDbNhbQEbhtbQFbQGbQHbQIbQIbQIbQJbQKbQLbQMbQNbQIbQObQIbQPbQQbQRbQSbQTbEGbEGbQUbEGbEGbEGbNFbQVbQWbQXbQVbCMbCMbCMbCMbCMbQYbNObQZbRabRbbGGbRcbRdbRebRfbInbRgbRhbRibETabqbETbRjbRkbRlbGLabqaaabFcaaabFbaaabRmarBarBarBarBabearBarBarBarBabearBabqabearBarBarBarBarBaZhaXIaXOaaaaXMbRnbRobRpbOabRqbOabRrbRsbRtaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbRubzzbaCbRvbaCbaBbaBbRwbaBbzzbaBbRxbzzbaBbzAbRyapfbRzaoXatkbFpbRAbRBbHfbHfbHfbRCbFpbRDbREbRFbRGbRHbRIapfbFuauCbzKbRJbRKbJabRLbRMbRMbRNbFwbFwbRObzKbRPbzPbfIbOvbMSbRQbRRbRSbRTbRUbOBbRVbRWbRXbRYbMWbRZbSabSbbSabScbNdbSdbSebSfbSebSgbNhbShbSibSjbSkbSlbSmbSnbSobNhbSpbhtbSqbbrbOWbQIbSrbSsbStbSubSvbSwbSwbSxbSybQIbQIbQIbQIbQIbQIbQIbEGbSzbSAbSBbEGbSCbQVbSDbSEbSFbQVbSGbSHasMbSIbCMbSJbSKbSLbSMbSNbSObSPbSQbSRbSSbRgbSTbSUbMibMjbMkbSVbPEbSWbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfcbicbSXbbXbbXbSYbpvbSZbTabOabTbbOabTcbTdbKjbSYbbXbbXbTeaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbcdbcebcebcebcebcebTfbTgbThbDnbDnbTibTjbTkbTlbTmapfbgYauyatkbFpbHhbTnbHfbHfbTnbTobFpbTparJarLbTqbPQbRHapfbFubTrbzKbTsbTtbTubTvbFwbTwbTxbTybTzbTAbzKbTBbzPbfIbTCbMSbTDbTEbTFbTGbOBbOBbTHbTIbTJbTKbMWbRZbSabSabSabTLbNdbSdbSebTMbTNbTObNhbTPbSibTQbTRbNhbTSbTTbTUbNhbTVbhtbTWbbrbTXbTYbTZbUabUbbUcbUdbStbStbUebUfbQIbUgbUhbUibUhbUjbQIbUkbUlbUmbUnbEGbNFbQVbUobUpbUqbQVavBasJasJbUrbCMbSJbUsbUtbCNbCNbCNbUubGGbUvbGGbRgbUwbRibETabqbGLbGLbGLbGLbGLabqaaaabeaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbUxbOabOabOabUybUzbUAaXMaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccbUBbUBbccbccbccaWDbccaWDbccaWDaWDapfbUCapfapfapfbgYauCatkbFpbTobUDbUEbHfbUEbUFbFpbUGathapdatjbUHaqwapfbFuaoXbzKbzKbzLbUIbUJbzLbzKbzKbzKbzKbUKbzKbzKbULbjnbUMbMSbUNbUObUPbUQbURbOBbUSbUTbUUbUVbMWbUWbUXbUYbUZbVabNdbVbbSebVcbVdbVebNhbVfbSibVgbVhbVibVjbVkbVlbNhbVmbhtbVnbbrbOWbVobVpbVqbVrbVsbVtbVubVqbUebVvbQIbVwbVxbVybVzbUjbQIbVAbVBbVCbVDbVEbVFbQVbVGbVHbVIbQVbVJbVKbVLbVMbCMbVNbVObRabVPbCNbVQbSRbGGbSPbVRbVSbVTbPCbItbIubIvbVUbVVbVWbGLabqaaabFcaaabFbaaabFcaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbVXbVYbVZbOabWabWbbVXaXMaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaabccbWcbfdbccaaaabqaaaaaaaaaabqaaaaaaapfbWdbWebWfbWgbWhbWgbWibFpbFpbFpbFpbWjbFpbFpbFpbWkauyaoXapdbWlbWmapfbWnbWobzKbWpbWqbWrbWsbWtbWubWvbzKbWwbWxbWybzKbzPbfIbWzbMSbQdbTEbWAbWBbQdbOBbWCbWDbWEbWFbMWbWGbWHbWIbWJbWKbWLbWMbWNbWObWPbWQbNhbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabhtbXbbbrbOWbVobXcbXdbXdbXebXfbXgbXhbXibXjbQIbXkbVxbXlbXmbXnbQIbXobXpbXqbXrbEGbNFbQVbQVbQVbQVbQVbXsasJasJbXtbCMbVNbVObRabXubXvbVQbXwbInbSPbXxbRgbXybRibETabqbETbXzbXAbXBbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbXCbKlbXDbXEbXFbKlbXGaXMaaaaaaaZhaXIaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqbccbUBbUBbccabqabqabqabqabqabqabqabqapfbXHavUavUavUbDLathatkaoXaqBayBanHbXIbXJauCapfapfapfapfapfbXKapfapfbFuatjbzKbXLbXMbXNbXNbWsbXObXPbzKbXQbXRbXSbzKbDQbfIbXTbMSbQdbXUbXVbXWbXXbOBbXYbXZbYabMWbMWbYbbYcbYdbYebYfbNdbYgbSdbYhbYibYjbNhbYkbYlbYmbYnbSlbYobYobYpbNhbYqbhtbYrbbrbOWbQIbYsbYtbYubStbYvbYwbUcbYxbYybYzbYAbYBbYCbYDbYEbQIbEGbEGbEGbEGbEGbYFaoGbYGbUraucasJbYHaubbYIasJbCMbCMbYJbNRbVPbCNbYKbYLbGGbYMbVRbRgbYNbSUbMibMjbMkbYObVVbYPbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBbicbYQaXLaXLaXLbpubbXbbXbbXbcabbXbbXbbXbDjaXLaXLaXLbnUaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapfapfapfapfbWmbYRavUbYSbYTbYUbYVbYVbYVbYWbYXbYVbYTbYVbYYbYVbYZbYVaPTbZaapdbzKbZbbZcbZdbZebHrbZfbZgbzKbzKbzKbzKbzKbZhbfIbOvbZibMSbZjbZjbZjbMSbMSbMWbMWbZkbMWbMWbZlbZlbZlbZmbZlbZnbZnbZobZpbZnbZnbNhbNhbNhbNhbNhbNhbZqbZqbZqbNhbZrbhtbZsbbrbZtbZubZvbZvbZvbZwbZvbZvbZxbZybZvbZvbZvbZvbQIbZzbZAbZBbZCbZDbZEasJbZFbZGaoGbVLbZHbZIasJbYHasJasJarrbCMbZJbJWbZKbCNbCNbCNbZLbGGbZMbZNbRgbUwbRibETabqbGLbGLbGLbGLbGLabqabqbRmabqbPGabqabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaaaaaaaaaaaabZOaaaaaaaaaaaaaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZPbZPbZQbZRbZSapfbZTapfapfapfaYabZUbZUbZUbZUbZUbZUbZUapdbZVbZWbZXbzKbZYbZZcaacabbHrbWscaccadcaeayBapfcafbzPcagcahcaicajcakcakcakcalcamcancaocakcapcaqcaicaicarcascarcarcatcarcaucavcavcawcaxcaycazcaAcaBcakcakcakcaCcaDcavcaEbbrcaFcaGcaHcaIcaJcaKcaLcaMcaNcaKcaOcaPcaQcaRbQIcaScaTcaUcaVcaWcaXcaYbZGcaZaoGaoGaoGaoGaoGcbacbbbCMbCMbCMcbcbJWbNRcbdcbecbfbKacbgcbhcbibVScbjbPCbItbIubIvcbkcblcblbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIbMnaUUaUUaUUaUUaUUaUUbZOaUUaUUaUUaUUaUUaUUbjPaXIaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabMvbGXbGXbGYbGXbGXbGXbGZbGXbGXbOdabqbccbOebgVbOfapfbFuatjbOgbFpbOhbHgbOibOjbKBbHfbFpbOkbOlbBKbIUbOmbOnbBKbFuapdbzKbOobOobJabBRbOpbOpbOqbOrbOsbOtbzKbzKbJbbOubOvbMSbOwbOxbOybOzbOAbOBbOCbODbOEbOFbMWbOGbOHbOIbOJbOKbNdbOLbOMbONbOObOPbNhbOQbORbOSbOTbNhbNhbNhbNhbNhbOUbhtbNpbOVbOWbspbOXbOYbHObOZbPabHObPbbspbSsbTZbEvbEvbEvbEvbEvbPdbPebPfbPgbPhbEGbPiaxhbPjbPkbPlbPmbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPwbPxbPybPzbIpbPAbPBbPCbItbIubIvbPDbPEbPEbGLabqabqbPFabqbPGabqbFcaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaarBaaabPHaXKaXNaXIaXOaaaaXMbPIbOabOabOabPJbOabOabOabPKaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccaWDbccbdQbccaWDbccbccbccaWDbccaWDaWDaWDbPLbPMbPNbPObPPbPQbFpbPRbPSbOibPTbPUbPVbFpbBKbBKbBKbBKbBKbBKbBKbFuanHbzKbPWbPXbJabBRbFwbFwbPYbFwbPZbQabzKbQbbzPbfIbQcbMSbQdbQebQfbQgbQhbOBbQibQjbQkbQlbQmbQnbQobQobQobQpbQqbQrbQsbQtbQsbQubQvbQwbQxbQybQzbQAbQBbQCbQDbNhbQEbhtbQFbQGbQHbQIbQIbQIbQJbQKbQLbQMbQNbQIbQObQIbQPbQQbQRbQSbQTbEGbEGbQUbEGbEGbEGbNFbQVbQWbQXbQVbCMbCMbCMbCMbCMbQYbNObVpbRabRbbGGbRcbRdbRebRfbInbRgbRhbRibETabqbETbRjbRkbRlbGLabqaaabFcaaabFbaaabRmarBarBarBarBabearBarBarBarBabearBabqabearBarBarBarBarBaZhaXIaXOaaaaXMbRnbRobRpbOabRqbOabRrbRsbRtaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbRubzzbaCbRvbaCbaBbaBbRwbaBbzzbaBbRxbzzbaBbzAbRyapfbRzaoXatkbFpbRAbRBbHfbHfbHfbRCbFpbRDbREbRFbRGbRHbRIapfbFuauCbzKbRJbRKbJabRLbRMbRMbRNbFwbFwbRObzKbRPbzPbfIbOvbMSbRQbRRbRSbRTbRUbOBbRVbRWbRXbRYbMWbRZbSabSbbSabScbNdbSdbSebSfbSebSgbNhbShbSibSjbSkbSlbSmbSnbSobNhbSpbhtbSqbbrbOWbQIbVrbVsbStbSubSvbSwbSwbSxbSybQIbQIbQIbQIbQIbQIbQIbEGbSzbSAbSBbEGbSCbQVbSDbSEbSFbQVbSGbSHasMbSIbCMbSJbSKbSLbSMbSNbSObSPbSQbSRbSSbRgbSTbSUbMibMjbMkbSVbPEbSWbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfcbicbSXbbXbbXbSYbpvbSZbTabOabTbbOabTcbTdbKjbSYbbXbbXbTeaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbcdbcebcebcebcebcebTfbTgbThbDnbDnbTibTjbTkbTlbTmapfbgYauyatkbFpbHhbTnbHfbHfbTnbTobFpbTparJarLbTqbPQbRHapfbFubTrbzKbTsbTtbTubTvbFwbTwbTxbTybTzbTAbzKbTBbzPbfIbTCbMSbTDbTEbTFbTGbOBbOBbTHbTIbTJbTKbMWbRZbSabSabSabTLbNdbSdbSebTMbTNbTObNhbTPbSibTQbTRbNhbTSbTTbTUbNhbTVbhtbTWbbrbTXbTYbUabUabUbbUcbUdbStbStbUebUfbQIbUgbUhbUibUhbUjbQIbUkbUlbUmbUnbEGbNFbQVbUobUpbUqbQVavBasJasJbUrbCMbSJbUsbUtbCNbCNbCNbUubGGbUvbGGbRgbUwbRibETabqbGLbGLbGLbGLbGLabqaaaabeaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbUxbOabOabOabUybUzbUAaXMaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccbUBbUBbccbccbccaWDbccaWDbccaWDaWDapfbUCapfapfapfbgYauCatkbFpbTobUDbUEbHfbUEbUFbFpbUGathapdatjbUHaqwapfbFuaoXbzKbzKbzLbUIbUJbzLbzKbzKbzKbzKbUKbzKbzKbULbjnbUMbMSbUNbUObUPbUQbURbOBbUSbUTbUUbUVbMWbUWbUXbUYbUZbVabNdbVbbSebVcbVdbVebNhbVfbSibVgbVhbVibVjbVkbVlbNhbVmbhtbVnbbrbOWbVobVtbVqbXcbYtbYsbVubVqbUebVvbQIbVwbVxbVybVzbUjbQIbVAbVBbVCbVDbVEbVFbQVbVGbVHbVIbQVbVJbVKbVLbVMbCMbVNbVObRabVPbCNbVQbSRbGGbSPbVRbVSbVTbPCbItbIubIvbVUbVVbVWbGLabqaaabFcaaabFbaaabFcaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbVXbVYbVZbOabWabWbbVXaXMaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaabccbWcbfdbccaaaabqaaaaaaaaaabqaaaaaaapfbWdbWebWfbWgbWhbWgbWibFpbFpbFpbFpbWjbFpbFpbFpbWkauyaoXapdbWlbWmapfbWnbWobzKbWpbWqbWrbWsbWtbWubWvbzKbWwbWxbWybzKbzPbfIbWzbMSbQdbTEbWAbWBbQdbOBbWCbWDbWEbWFbMWbWGbWHbWIbWJbWKbWLbWMbWNbWObWPbWQbNhbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabhtbXbbbrbOWbVobYubXdbXdbXebXfbXgbXhbXibXjbQIbXkbVxbXlbXmbXnbQIbXobXpbXqbXrbEGbNFbQVbQVbQVbQVbQVbXsasJasJbXtbCMbVNbVObRabXubXvbVQbXwbInbSPbXxbRgbXybRibETabqbETbXzbXAbXBbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbXCbKlbXDbXEbXFbKlbXGaXMaaaaaaaZhaXIaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqbccbUBbUBbccabqabqabqabqabqabqabqabqapfbXHavUavUavUbDLathatkaoXaqBayBanHbXIbXJauCapfapfapfapfapfbXKapfapfbFuatjbzKbXLbXMbXNbXNbWsbXObXPbzKbXQbXRbXSbzKbDQbfIbXTbMSbQdbXUbXVbXWbXXbOBbXYbXZbYabMWbMWbYbbYcbYdbYebYfbNdbYgbSdbYhbYibYjbNhbYkbYlbYmbYnbSlbYobYobYpbNhbYqbhtbYrbbrbOWbQIbYvbYEbYwbStcbacbbbUcbYxbYybYzbYAbYBbYCbYDccrbQIbEGbEGbEGbEGbEGbYFaoGbYGbUraucasJchGchFbYIasJbCMbCMbYJbNRbVPbCNbYKbYLbGGbYMbVRbRgbYNbSUbMibMjbMkbYObVVbYPbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBbicbYQaXLaXLaXLbpubbXbbXbbXbcabbXbbXbbXbDjaXLaXLaXLbnUaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapfapfapfapfbWmbYRavUbYSbYTbYUbYVbYVbYVbYWbYXbYVbYTbYVbYYbYVbYZbYVaPTbZaapdbzKbZbbZcbZdbZebHrbZfbZgbzKbzKbzKbzKbzKbZhbfIbOvbZibMSbZjbZjbZjbMSbMSbMWbMWbZkbMWbMWbZlbZlbZlbZmbZlbZnbZnbZobZpbZnbZnbNhbNhbNhbNhbNhbNhbZqbZqbZqbNhbZrbhtbZsbbrbZtbZubZvbZvbZvbZwbZvbZvbZxbZybZvbZvbZvbZvbQIbZzbZAbZBbZCbZDbZEasJbZFbZGaoGbVLbZHbZIasJbYHckgasJarrbCMbZJbJWbZKbCNbCNbCNbZLbGGbZMbZNbRgbUwbRibETabqbGLbGLbGLbGLbGLabqabqbRmabqbPGabqabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaaaaaaaaaaaabZOaaaaaaaaaaaaaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZPbZPbZQbZRbZSapfbZTapfapfapfaYabZUbZUbZUbZUbZUbZUbZUapdbZVbZWbZXbzKbZYbZZcaacabbHrbWscaccadcaeayBapfcafbzPcagcahcaicajcakcakcakcalcamcancaocakcapcaqcaicaicarcascarcarcatcarcaucavcavcawcaxcaycazcaAcaBcakcakcakcaCcaDcavcaEbbrcaFcaGcaHcaIcaJcaKcaLcaMcaNcaKcaOcaPcaQcaRbQIcaScaTcaUcaVcaWcaXcaYbZGcaZaoGaoGaoGaoGaoGcmHbXtbCMbCMbCMcbcbJWbNRcbdcbecbfbKacbgcbhcbibVScbjbPCbItbIubIvcbkcblcblbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIbMnaUUaUUaUUaUUaUUaUUbZOaUUaUUaUUaUUaUUaUUbjPaXIaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZScbmcbncbobZSapdcbpbPQcbqapfcbrbZUcbscbtcbucbvcbwbZUapdaoXbZWaoXbzKbzKbzKbzKbzKbzKbzKbzKbzKaxqaoXapfcbxbzPcbycbzbekbekbekbekbekbekbenbekcbAcbBcbCbembekbekbekbvTcbDcbEcbFbekbekbekbekbekcbGcbHbekbekbenbekbekbekbekcbIbekcbAcbJcbKcbLcbMcbNcbOcbNcbPcbPcbQcbRcbScbPcbOcbTbQIbQIbQIbQIcbUcbVasIarrcbWcbXasIcbXcbYcbZaoGayoaoGbCMccaccbcccccdcceccfccfccfbMcbGGbGGbGGbRgccgbRibETabqbETcchcciccjbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhcckaWxaWxaWxaWxaWxaWxaWxcclaWxaWxaWxaWxaWxaWxaWxccmaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbZSccnccoccpbZSapdccqccrapfapfccsbZUcctccuccvccwccxbZUapdapdccybYVbYTbYVbYYbYVcczccAccAccAccAccBbcGccCccDccEccFccGccHccIccJccGccGccGccKccGbdabcXccLbcYbcXbcXbcXccMccNbcZbcYbcXbcXbcXbdbccOccPccQccQccQccRccQccQccQccSccTccOccUccVccWccXccYccZcdacdbcdccddcdecdfcdgcdhcdecdibZvcdjcdkbZvcdlcbVasIasIasIasIasIcdmcdncdocdpcdqcdrcdscdtcducdvcdwcdxbGGbGGbGGbGGbGGbInbGGbRgcdybSUbMibMjbMkcdzcblcdAbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaXKaXKaXKaXKaXKaXKaXKaXKcdBaXKaXKaXKaXKaXKaXKaXKaXKaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbZSccnccoccpbZSapdccqcmIapfapfccsbZUcctccuccvccwccxbZUapdapdccybYVbYTbYVbYYbYVcczccAccAccAccAccBbcGccCccDccEccFccGccHccIccJccGccGccGccKccGbdabcXccLbcYbcXbcXbcXccMccNbcZbcYbcXbcXbcXbdbccOccPccQccQccQccRccQccQccQccSccTccOccUccVccWccXccYccZcdacdbcdccddcdecdfcdgcdhcdecdibZvcdjcdkbZvcdlcbVasIasIasIasIasIcdmcdncdocdpcdqcdrcdscdtcducdvcdwcdxbGGbGGbGGbGGbGGbInbGGbRgcdybSUbMibMjbMkcdzcblcdAbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaXKaXKaXKaXKaXKaXKaXKaXKcdBaXKaXKaXKaXKaXKaXKaXKaXKaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZScdCcdDcdEbZScdFapdcdGapfcdHcdIbZUcdJcdKcdLcdMcdNbZUbZUbZUbZUbZUbZUcdObZUbZUcdPcdQcdRaoXauycdSauCcdTcdTcdTcdTcdTcdTcdTcdUcdUcdUcdUcdUcdVcdWcdWcdXcdYcdWcdZcdWceacebbbrceccedceecefceecegcehceeceeceibZubbgbbibbicejbZucekbZucelcemcelbZvcenceocdfcepceqcdecdfcercescetceubZvcevcewbZvcexceycezcdocdocdocdoceAceBceCceDceCceEbPmceFceGceHbGGceIbPwbPwbPwbPwbPwceJbGGbRgbUwceKbCMabqbGLbGLbGLbGLbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfcarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaabZSceLceMceLbZSapfapfapfapfbZUceNbZUceOcePceQceRceSbZUceTceUceVbZUceWceXceYbZUceZbZUbZUbZUbZUbZUbZUcdTcfacfbcfccfdcfecffcdUcfgcfhcficdUcfjcfkcfjcflcfmcfjcfkcfjcfncfocfpcfqcfrcfscftcfscfucfvcfscftcfscfwcfxcfxcfxcfxcfxcfybZucfzcfAcfBcaHcfCcbOcdfcdhcdhcdecfDcdhcdhcdecfEbZvcfFcfGbZvcbUcfHcfIceCceCceEceCceCcfJcfKcfLcfKcfKbCMcfMcfNcfOcfPcfQbInbGGbGGceIbPwcfRbSSbRgcfSbRibCMabqabqabqabqabqabqabqabqbPFabqbPGabqbRmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaaaceLcfTceLaaaabqaaaaaaaaabZUceNbZUbZUbZUbZUcfUbZUbZUcfVcfWcfVbZUbZUbZUbZUbZUcfXcfYbZUcfZcgacgbcgccgdcgecgfcggcgfcghcgicgjcgkcglcgmcgncgocgpcgqcgrcgscgtcgucgvcfkcgwcgxcgycftcgzcgAcgBcgCcgDcgEcgFcgGcgHcfxcgIcgJcgKcfxcgLbZucgMcgNcgOcgPcgQcgRcgScgTcgUcgRcgScgTcgTcgRcgVcgWcgXcgYcgZchacbVasIchbchccfKcfKcfKcfKcfKchdchechfbCMchgchhbGGbGGbSPchibIqbIqchjchkchjbIqchlchmbRibCMbCMbCMaUVaUUaUVaUUaUVaaabFcaaaabqaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabqabqceLceMceLabqabqabqabqabqbZUchnchochpbZUchqchrchsbZUchtchuchvchwchxchychzbZUchAchBchCchDchEchFchGchHchIchJchKchLchMchNchOcdUchPchQchRchSchTchUchVchWchXchYchZciacgwcgxcgycibciccidciecifcigcihcihciiciicijcikcilcimcfxcinbZuciocipciqcaHcirciscitciucivciuciwciucixciuciybZvcizciAciBciCcfJaoGaoGaoGcfKciDciEciFciGciHciIciJbCMciKciLciMciNciOciPciQciRciSciTciUciVciWciXbRiciYciZciYcjacjacjacjacjbabqabeaaaabqaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaacjcaaaaaaabqaaaabqaaabZUbZUbZUceNbZUcjdcjecjfcjgcjhcjicjjchychychscjkbZUcjlcjmbZUcdNcjncjocjpcdTcjqcjrcjscjtcjucjvcjwcjxcjxcjycjxcjzcjAcjBcjBcjCcjDcjEcjFcjGcjHcjIcjJcibciccicciccjKcjLcjMcjNcjOcjPcjQcjRcjScjTcfxcjUbZubZubZubZubZvbZvcjVbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvcjWcjXaoGcjYcjZcfKckackbckcckdckeckfckgbCMckhckhckickhckjckhckickkckjckjbRickhcklckmcknbCMbCMbCMckockpcjackqckoaaabFcaaaabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabqabqceLceMceLabqabqabqabqabqbZUchnchochpbZUchqchrchsbZUchtchuchvchwchxchychzbZUchAchBchCchDchEcmJcoQchHchIchJchKchLchMchNchOcdUchPchQchRchSchTchUchVchWchXchYchZciacgwcgxcgycibciccidciecifcigcihcihciiciicijcikcilcimcfxcinbZuciocipciqcaHcirciscitciucivciuciwciucixciuciybZvcizciAciBciCcfJaoGaoGaoGcfKciDciEciFciGciHciIciJbCMciKciLciMciNciOciPciQciRciSciTciUciVciWciXbRiciYciZciYcjacjacjacjacjbabqabeaaaabqaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaacjcaaaaaaabqaaaabqaaabZUbZUbZUceNbZUcjdcjecjfcjgcjhcjicjjchychychscjkbZUcjlcjmbZUcdNcjncjocjpcdTcjqcjrcjscjtcjucjvcjwcjxcjxcjycjxcjzcjAcjBcjBcjCcjDcjEcjFcjGcjHcjIcjJcibciccicciccjKcjLcjMcjNcjOcjPcjQcjRcjScjTcfxcjUbZubZubZubZubZvbZvcjVbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvbZvcjWcjXaoGcjYcjZcfKckackbckcckdckeckfcqcbCMckhckhckickhckjckhckickkckjckjbRickhcklckmcknbCMbCMbCMckockpcjackqckoaaabFcaaaabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqaaackraaaaaaabqaaacksckscktckubZUckvckwckxbZUbZUbZUckyckzchyckAckBbZUbZUbZUckCckDbZUckEckEckEckEckEckEckEckFcjtckGckHckIcjxckJckKckLckMckNckOckPckQckRckSckTckUcgwckVcgycfsckWckXckYckZclaclbclccldclecfxclfclgclhcfxclicljcljcljclkcljcllclmclncljcljclocljcljcljcljclpclqclrclscdocltcluclvclwbVKcfKclxclyclzclAclBclCclDbCMbCMbCMclEbETclFbETclEbETclFclFclGbETclGbCMbCMbCMabqabqabqclHcjaaWCabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabeabqclIabqabqabqaaaabqabqbZUcbtclJclKbZUbZUbZUclLbZUbZUbZUbZUbZUbZUbZUclMclNcjlclOclPckEclQclRclSclTclUckEclVclWclXclYclZcjxcmacmbcmccmdcmecmfcmgcmhcmicmjcmicmkcmlckVcmmcmncmocmocmocmocmpcmqcmrcmscmtcfxcmucmvcmwcfxcmxcmycmzcmzcmzcmzcmAcmzcmBcmBcmBcmBcmBcmBcmBcmBcmBcmCbZUcmDasJasJasJaoGasJazocfKcmEcmFcmGclAcmHcmIcmJclAabqabqcmKabqcmLabqcmKabqcmMcmNcmOabqcmOabqabqabqabqaaaaaacmPcjacmQaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabeabqclIabqabqabqaaaabqabqbZUcbtclJclKbZUbZUbZUclLbZUbZUbZUbZUbZUbZUbZUclMclNcjlclOclPckEclQclRclSclTclUckEclVclWclXclYclZcjxcmacmbcmccmdcmecmfcmgcmhcmicmjcmicmkcmlckVcmmcmncmocmocmocmocmpcmqcmrcmscmtcfxcmucmvcmwcfxcmxcmycmzcmzcmzcmzcmAcmzcmBcmBcmBcmBcmBcmBcmBcmBcmBcmCbZUcmDasJasJasJaoGasJazocfKcmEcmFcmGclAcqrcqJcqIclAabqabqcmKabqcmLabqcmKabqcmMcmNcmOabqcmOabqabqabqabqaaaaaacmPcjacmQaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaarBaaacmRaaaabqaaaaaaabqaaabZUcmSbZUchnchocjecmTcjecjecmUcmVcmVcmVcmWcmVcmVcmVcmXcmYcmZcnacnbcnccndcnecnfckEcdTcngcnhcnicdTcjxcnjcnkcjxcnlcnmcmgcnncnocnpcnqcnrcmgcnscntcnucmocnvcnwcnxcnycnxcnzcmocnAcnBcnCcnDcnCcfxcfxcnEbZUcmzcnFcnGcnHcnIcnJcmBcnKcnKcnKcnLcnMcnNcnKcmBcmCbZUcnOasIcnPcnQaoGcnRcnScfKcnTcnUcnVclAclBcnWcnXclAabqbGLcnYbETcnYbGLcnYbETcnYbGLcnZbETcoabGLabqaaaabqabqabqcobcjacocabqabqabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqarBaaacjcaaaabqaaaaaaabqaaabZUbZUbZUbZUbZUbZUbZUbZUbZUcodcoecoecofcogcogcogcogcohcogcogcogcoicojcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcoAcoBcoCcoDcoEcmgcoFckVcmmcmpcoGcoHcoIcoJcoKcoLcmocoMcoNcoOcoPcmzcdNcjncoQcfYcmzcoRcoScoTcoUcoVcmBcnKcoWcoXcoYcnKcoZcpacmBcpbbZUbZUbZUbZUbZUaoGaoGaoGcfKcfKcfKcpcclAcpdcpecpfcpgabqbGLcphcpicpjbGLcpkcplcpmbGLcpncpocppbGLabqaaaabqaaabCMcpqcprcpscptaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabeaaackrabqabqabqabqabqaaabZUcpucpvcpwcpxcpycpzcpAbZUcodcoecpBcpCcpDcpEcpFcoecpGcpHcpIcoecpJcpKcpLcpMcpNcpOcpPcpQcpRcpScpTcpUcpTcpScpTcpVcpWcpXcpYcpZcqacqbcqccmicnsckVcmmcmocqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncmzcqocqpcqqcqrcmzcqscqtcqucqvcqwcmBcnKcnKcqxcnKcnKcqycqzcmBcmCbZUcqAcqBbZUcqCcqDcqEcqFcqGcqHaoGcqIclAclAcqJclAclAabqbGLcqKcqLcqMbGLcqNcqOcqPbGLcqQcqRcqSbGLabqabqabqabqcptcqTcqUcqVcqWabqabeabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaarBaaackrabqaaaaaaaaaabqaaacqXcqYcqZcracrbcpycrccrdbZUcodcoecrecrfcrgcrhcricrjcrkcrlcrmcoecrncrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrycrycrzcrAcrBcrCcrDcpZcrEcrFcrGcmgcrHckVcrIcmocrJcrKcrLcrMcrNcrOcmocrPcrQcrRcrScmzcrTcrUcrVcrWcmzcrXcrYcrZcsacsbcmBcmBcsccsdcsecsecmBcsfcmBcsgcshcsicsjbZUcskasJasJasJcdKcslbZUcsmcsnclAcsoclAcspabqbGLcqKcsqcqKbGLcqNcsrcqNbGLcsscstcssbGLabqaaaabqaaacqWcqUcsucqUcjaaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabeabqckrabqaaaaaaaaaabqaaacqXcsvcrccqZcswcpycsxbZUbZUcsycoecszcsAcszcsBcszcoecszcsCcszcoeckEcsDcsEcsFckEckEcsGcsHcsIcsJcsJcsKcsLcsMcsJcsJcsNcmgcsOcsPcsQcsRcmgcmgcsSckVcsTcmocmocsUcsVcsWcsXcsYcmocsZcnBcfwcfwcmzctacmzctbcmzcmzcfwctcctdcfwcfwctectfctgcthctictjctkctlcmBctmbZUctnctobZUctpcdKchschyctqctrbZUctscttctuctvctuarAabqbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLabqabqabqabqcjacqUcqUcqUcqWabqbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaabqaaaaaaarBaaaclIaaaaaaaaaaaaabqaaacqXctwcqZcswctxcpyctyctzcdOcodcoectActBctCctDctEcoectFctGctHcoectIctJctKctLctMctNctOcgrctPcsJctQctRctSctTctUcsJccvcmgctVctWctXctYcmictZcuacubcuccudcuecufcugcuhcuicujcukculcumcuncuocupciccuqcurcusciccutcuucuvciccuwctecuxcuycuzcuAcuBcuCcuDcmBcmCbZUbZUcuEbZUcuFcuGchychycuHcuIcqXabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaaabqaaacjacqWcptbCMcptaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqarBaaacjcaaaabqaaaaaaabqaaabZUbZUbZUbZUbZUbZUbZUbZUbZUcodcoecoecofcogcogcogcogcohcogcogcogcoicojcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcoAcoBcoCcoDcoEcmgcoFckVcmmcmpcoGcoHcoIcoJcoKcoLcmocoMcoNcoOcoPcmzcdNcjncrFcrvcmzcoRcoScoTcoUcoVcmBcnKcoWcoXcoYcnKcoZcpacmBcpbbZUbZUbZUbZUbZUaoGaoGaoGcfKcfKcfKcpcclAcpdcpecpfcpgabqbGLcphcpicpjbGLcpkcplcpmbGLcpncpocppbGLabqaaaabqaaabCMcpqcprcpscptaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabeaaackrabqabqabqabqabqaaabZUcpucpvcpwcpxcpycpzcpAbZUcodcoecpBcpCcpDcpEcpFcoecpGcpHcpIcoecpJcpKcpLcpMcpNcpOcpPcpQcpRcpScpTcpUcpTcpScpTcpVcpWcpXcpYcpZcqacqbcrVcmicnsckVcrWcmocqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncmzcqocqpcqqcsncmzcqscqtcqucqvcqwcmBcnKcnKcqxcnKcnKcqycqzcmBcmCbZUcqAcqBbZUcqCcqDcqEcqFcqGcqHaoGcsoclAclAcsRclAclAabqbGLcqKcqLcqMbGLcqNcqOcqPbGLcqQcqRcqSbGLabqabqabqabqcptcqTcqUcqVcqWabqabeabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaarBaaackrabqaaaaaaaaaabqaaacqXcqYcqZcracrbcpycrccrdbZUcodcoecrecrfcrgcrhcricrjcrkcrlcrmcoecrncrocrpcrqcrrcrscrtcructAcrwcrxcrycrycrycrzcrAcrBcrCcrDcpZcrEctBcrGcmgcrHckVcrIcmocrJcrKcrLcrMcrNcrOcmocrPcrQcrRcrScmzcrTcrUctSctEcmzcrXcrYcrZcsacsbcmBcmBcsccsdcsecsecmBcsfcmBcsgcshcsicsjbZUcskasJasJasJcdKcslbZUcsmcynclAcyqclAcspabqbGLcqKcsqcqKbGLcqNcsrcqNbGLcsscstcssbGLabqaaaabqaaacqWcqUcsucqUcjaaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabeabqckrabqaaaaaaaaaabqaaacqXcsvcrccqZcswcpycsxbZUbZUcsycoecszcsAcszcsBcszcoecszcsCcszcoeckEcsDcsEcsFckEckEcsGcsHcsIcsJcsJcsKcsLcsMcsJcsJcsNcmgcsOcsPcsQcyCcmgcmgcsSckVcsTcmocmocsUcsVcsWcsXcsYcmocsZcnBcfwcfwcmzctacmzctbcmzcmzcfwctcctdcfwcfwctectfctgcthctictjctkctlcmBctmbZUctnctobZUctpcdKchschyctqctrbZUctscttctuctvctuarAabqbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLabqabqabqabqcjacqUcqUcqUcqWabqbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaabqaaaaaaarBaaaclIaaaaaaaaaaaaabqaaacqXctwcqZcswctxcpyctyctzcdOcodcoeczqczpctCctDczJcoectFctGctHcoectIctJctKctLctMctNctOcgrctPcsJctQctRcABctTctUcsJccvcmgctVctWctXctYcmictZcuacubcuccudcuecufcugcuhcuicujcukculcumcuncuocupciccuqcurcusciccutcuucuvciccuwctecuxcuycuzcuAcuBcuCcuDcmBcmCbZUbZUcuEbZUcuFcuGchychycuHcuIcqXabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaaabqaaacjacqWcptbCMcptaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqaaaaaaabqaaaaaaabeaaacmRabqaaaaaaaaaabqaaacqXcqXcqZcpycpycqZcqZcuJcdOcodcoecuKcuLcuMcuNcuOcoecuPcuQcuRcuScuTcuUcuVcuWcuXcuYcuZcgrcgscsKcvacvbcvccvdcvecsJchscmgcvfcvgcvhcvicvjcvkcvlckVcvmcvncvocvpcvqcvrcvscvtcvucvvcvwcvxcvycvzcvAcvBcvCcvDcvEcvDcvFcvGcvHcvIcvJcvKcvLcvMcvNcvOcvPcvQcvRcvSbZUcvTcvUcvVcbvctqchychycvWcvXbZUcvYabqaaaaaaaaaabqaaaaaaaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaabqaaaabqaaaaaaabqaaaabqaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaabqabqaaaaaaarBaaacjcaaaaaaaaaaaaabqaaacqXcvZcqZcwacqZcqZcsxbZUbZUcwbcwccwdcuLcwecuNcwfcwgcwhcwicwjcwkcwlcwmcwncwocwpcwqcwrcwscjAcwtcwucwvcwwcwxcwwcwycwzcmgcwAcwBcwCcwDcmicvkcvlckVcvmcwEcmpcwFcwGcwHcwIcwJcukcwKcwLcwMcwNcwOcwPcwQcwRcihcihcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecmBcmCbZUcxfcxgcxhcsicxicuHcmDchycxjcqXaaaabqaaaaaaaaaabqabqabebFbbFbbFbbFbbFbbFbabebFbbFcbFbbPGabqbFcabqabqabebRmbRmbRmabeabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaabqaaaaaaarBaaackraaaaaaabqabqabqaaacqXcxkcpycracpycxlchscxmbZUcodcoecxncxocxpcxqcxrcoecxscxtcxucoecxvcxwcxxcxycxzctNcxAcgrcxBcsJcxCcxDcxEcxFcxGcsJcxHcmgcmgcxIcmgcmgcmgcmgcxJcxKcxLcmocmocmocmocmocxMcxNcmocmzcmzcxOcxPcxQcxRcxScxTcxUcxUcxUcxUcxVcxWcxXcxVcmBcmBcmBcxYcxZcyacybcmBcmCbZUcvTcycbZUcydcyecyfcygcygcyhbZUabqabqabqabqabqabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaabFcaaaaaaabqaaaaaaabqaaaabqabqaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBabqabearBaaaabearBarBabqabqabqckrabqabqabqaaaabqabqcqXcpycxlcpycyictqcyjcykcylcymcoecyncuLcyocypcyqcoecyrcxtcyscoecoecoecytcytcytcytcyucyvcywcyxcyycyzcyAcyBcyCcsJcyDcyEcyFcyGcyHcyIchBcyJcyKcyLcyMcyNcyOcyEcyPcyQcyRcyScyTcyUcyVcyWcyXcyYcyZczaczbczcczdczeczfcxVczgczhcziczjczkcmBcmBcmBcmBcmBcmBczlbZUbZUbZUbZUbZUbZUbZUcqXbZUbZUbZUaaaabqaaaaaaaaaabqabqabqabebFcbFcbFcabebFcbFcbFcabebFcbRmbFcbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczmaaaaaaaaaabqaaaaaaaaaabqaaaaaaabqaaaclIaaaaaaabqaaaabqaaacqXcqXcqXcqXbZUcznczobZUbZUcodcoeczpcuLcwdcuNczqcoecwdcxtcwdcwdczrcoeczscztczuczvcwrczwczxcsJczyczzczAczBczBczBczBczBczBczBczCczDczCczEczFczGczHczIczJczKczLbZUczMczMczNczMczMczOczPczQcyZczRczSczTczUczVczWcxVczXczYczZcAacAbcrUcfYclPbZUcAccmYcAdbZUcAecfYbZUaaaabqaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacAfcAfcAfcAfcAfabqabqabqcAfcAfcAfcmRcAfaaaarBaaaabqaaaaaaaaaaaaabqbZUbZUbZUbZUcAgcodcwccwdcuLcwecuNcwdcAhcwdcAicwdcwdczrcoecAjcAkcAlcAmcAncAocApcsJcsJcsJcsJczBcAqcArcAscAtcAuczBcAvcAwcAxcAycAzcgxcAAbZUcABcACcADcAEczMcAFcAGcAHczMcAIcAJcAKcALcAMcANcAOcAPcAQcARcxVcAScATcAUcAVcAWcrUcAXcAYcAZcBackDcBbcAZcBccvWcqXabqabqabqabqabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabqcBdcBecBecBecBecBfckrcBgcBhcBhcBhcBhcBiabqabqabqabqabqabqabqabqaaaaaaaaaaaabZUcBjcBkcoecBlcBmcxpcBncBocoecxscwdcwdcwdcBpcoecBqcBrcBrcBrcBscBtcBucBvcBwcBxcByczBcBzcBAcBBcBCcBDczBcBEcBFcBGcBHcAzcgxcBIcBJcBKcBJcBJcBJczMcBLcBMcAGcBNcBOcBPcBQcBRcBScBTcBUcBUcBVcAQcxVcBWcATcBXcBYcBZcrUcCacCbbZUcCcchycCdbZUchycCebZUaaaabqaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaDaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaackraaacCfcCfcCfcCfcCfaaaarBaaaaaaaaaaaaabqabqaaaaaabZUbZUbZUchycBkcoecCgcChcCicCjcCkcoecClcwdcCmcCncCocoecCpcCqcCrcCscCtcCucCvcBvcCwcCxcCyczBcCzcCAcCBcCCcCDczBcCEcCFczCczCcCGcgxcmmcBJcCHcCIcCJcCKczMcCLcAGcCMczMcCNcCOcCPcxUcCQcCRcCScCTcCUcCVcxVcCWcCXcCYcCZcBYcrUbZUbZUbZUctmbZUcDabZUbZUbZUbZUabqabqaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBabqabearBaaaabearBarBabqabqabqckrabqabqabqaaaabqabqcqXcpycxlcpycyictqcyjcykcylcymcoecAMcuLcyocypcCScoecyrcxtcyscoecoecoecytcytcytcytcyucyvcywcyxcyycyzcyAcyBcKYcsJcyDcyEcyFcyGcyHcyIchBcyJcyKcyLcyMcyNcyOcyEcyPcyQcyRcyScyTcyUcyVcyWcyXcyYcyZczaczbczcczdczeczfcxVczgczhcziczjczkcmBcmBcmBcmBcmBcmBczlbZUbZUbZUbZUbZUbZUbZUcqXbZUbZUbZUaaaabqaaaaaaaaaabqabqabqabebFcbFcbFcabebFcbFcbFcabebFcbRmbFcbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczmaaaaaaaaaabqaaaaaaaaaabqaaaaaaabqaaaclIaaaaaaabqaaaabqaaacqXcqXcqXbZUbZUcznczobZUbZUcodcoecMbcuLcwdcuNcMXcoecwdcxtcwdcwdczrcoeczscztczuczvcwrczwczxcsJczyczzczAczBczBczBczBczBczBczBczCczDczCczEczFczGczHczIcMYczKczLbZUczMczMczNczMczMczOczPczQcyZczRczSczTczUczVczWcxVczXczYczZcAacAbcrUcfYclPbZUcAccmYcAdbZUcAecfYbZUaaaabqaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacAfcAfcAfcAfcAfabqabqabqcAfcAfcAfcmRcAfaaaarBaaaabqaaaaaaaaaaaabZUbZUbZUbZUbZUcAgcodcwccwdcuLcwecuNcwdcAhcwdcAicwdcwdczrcoecAjcAkcAlcAmcAncAocApcsJcsJcsJcsJczBcAqcArcAscAtcAuczBcAvcAwcAxcAycAzcgxcAAbZUcMZcACcADcAEczMcAFcAGcAHczMcAIcAJcAKcALcPkcANcAOcAPcAQcARcxVcAScATcAUcAVcAWcrUcAXcAYcAZcBackDcBbcAZcBccvWcqXabqabqabqabqabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabqcBdcBecBecBecBecBfckrcBgcBhcBhcBhcBhcBiabqabqabqabqabqabqabqabqbZUcFRcFScFRbZUcBjcBkcoecBlcBmcxpcBncBocoecxscwdcwdcwdcBpcoecBqcBrcBrcBrcBscBtcBucBvcBwcBxcByczBcBzcBAcBBcBCcBDczBcBEcBFcBGcBHcAzcgxcBIcBJcBKcBJcBJcBJczMcBLcBMcAGcBNcBOcBPcBQcBRcBScBTcBUcBUcBVcAQcxVcBWcATcBXcBYcBZcrUcCacCbbZUcCcchycCdbZUchycCebZUaaaabqaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaDaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaackraaacCfcCfcCfcCfcCfaaaarBaaaaaaaaaaaaabqabqbZUbZUbZUbZUbZUchycBkcoecCgcChcCicCjcCkcoecClcwdcCmcCncCocoecCpcCqcCrcCscCtcCucCvcBvcCwcCxcCyczBcCzcCAcCBcCCcCDczBcCEcCFczCczCcCGcgxcmmcBJcCHcCIcCJcCKczMcCLcAGcCMczMcCNcCOcCPcxUcCQcCRcPCcCTcCUcCVcxVcCWcCXcCYcCZcBYcrUbZUbZUbZUctmbZUcDabZUbZUbZUbZUabqabqaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaaabqaaaabqabqabqaaacDbaaaabqaaaabqaaaabqaaaarBaaaaaaaaaabqabqaaaabqaefbZUcDcbZUchycBkcoecoecoecoecoecoecoecoecDdcoecoecoecoecDecDfcDgcDhcDicDjcDkcDlcDmcDncDocDpcDqcDrcDscDtcDucDvcDwcDxcDyczCcmlcDzcDAcDBcDCcDDcDDcDEczMcDFcDFcDGczMcgCcCOcDHcxUcxUcxUcxUcxUcxUcxUcxVcxVcxVcDIcxVcxVcrUcAccDJcmYcDKbZUchycDLcDMcDNcDMckscksaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacAfcAfcAfcAfcAfabqckrabqcAfcAfcAfcAfcAfabqarBaaaaaaaaaabeaaaaaacDOcDPclJcDQcDRcDQcDScljcljcljcljcljcljcljcljcljcDTcDUcDUcDUcDUcDUcDUcDUcDVcDWcDXcDYcDZcEacEbcEccEdcEecEfcEgcEhcEicEjcEkcElcEmcEncgxcEocEpcEqcErcErcEsczMcEtcEucEuczMcEvcEwcExcEycEzcEAcEBcECcEDcEEcEFcEGcEHcEIcEJcEKcfZcELchychybZUbZUcEMbZUbZUbZUbZUabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcBdcBecBecBecBecBfckrcBgcBhcBhcBhcBhcBiabqaupabqabqabqarBabqabqabqabqbZUcENbZUcdNckDchychycEObZUbZUbZUbZUbZUcEPcEQcDUcERcEScETcEUcEVcDUcEWcEXcEYcBvcEZcFacFbczBcFccFdcFdcFdcFeczBcFfcFgcFhcFicFjcFkcFlcBJcFmcCIcFncFoczMcFpcFqcFrcBNcFscFtcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFBcFEcFFcEKbZUcFGbZUcFHcFHcFIcFJcFKcFLcFMabqabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFNcFOcFNabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaaclIabqcCfcCfcCfcCfcCfaaaarBaaaaaaaaaabqaaaaaaaaaaaabZUbZUbZUcfZbZUcjncFPcFQbZUcFRcFScFRbZUcFTcFUcFVcFWcFXcFYcFZcGacGbcGccGdcGecBvcGfcGgcGhczBcGicGjcGkcGlcGmczBcGncGocGoczCcGpcGqcGrcGscGtcGucGvcGwczMcGxcGycGzcGAcGBcGCcGDcGEcGFcGGcGHcGIcGIcGJcGKcGLcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGVcGVcGWcGXabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFOcFNcGYcFNcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaabqaaaabqaaaabqaaacmRaaaabqaaaabqabqabqabqaupaaaaaaaaaabqaaaaaaaaaaaaabqaaabZUbZUbZUbZUbZUbZUbZUbZUbZUbZUbZUckDcGZcDUcHacHbcHccHdcHecHfcHgcHhcHicBvcBvcHjcBvczBczBczBczBczBczBczBcHkczCczCcHlcHmczGczHcHncHocHocHpcHqczMcHrcHscHtcHucHvcHwcHxcHycHzcHAcHBcHCcHDcHEcHFcHGcHHcHIcHJcHKcHLcHMcHNcHOcHPcHQcHRcHScHTcGXabqabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHUcFOcHVcHWcHXcFOcHUabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacAfcAfcAfcAfcAfabqcHYabqcAfcAfcAfcAfcAfabqarBaaaaaaaaaabeabqcHZcHZcHZcIacHZcHZcHZaaaabqaaaaaaaaaabqaaaaaabZUcIbcEQcDUcIccIdcHbcIecIfcDUcIgcIhcIicDUcIjcIkcIlcImcIncIocIncIpcIncIqcIocIrcImcIscnscgxcItcBJcIucIvcIwcIucIxcIxcIxcIxcIxcIycxPcIzcEycIAcIAcIBcICcIDcIEcIFcIGcIHcIIcIJcEKcIKcILcIMcEycINcGXcGXcFHcGXcFHarAabqaaaaaaabqaaaaaaabqabqabqaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqabqcFOcFOcIOcIPcIPcIPcIQcFOcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcBdcBecBecBecBecBfckrcBgcBhcBhcBhcBhcBiabqarBaaaabqabqarBaaacHZcIRcIScIRcITcIRcHZcHZcIacHZcIacHZcHZabqabqbZUclPcEQcDUcDUcDUcDUcDUcDUcDUcIUcIVcIWcIXcIYcIZcJacImcJbcJccIncIocIncJdcJecJfcImcJgcnscgxcvmcwEcJhcJicJjcJkcJlcJmcJncJocJpcJqcCOczQcEKcEKcEKcEKcEKcEKcJrcJscJtcJucJvcJwcEKbZUcFGbZUcFHcJxcJycJzcJAcJBarAarAabqabqabqabqabqabqabqaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqcJCcJDcJCcIPcJEcIPcJFcJGcFNabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaaclIaaacCfcCfcCfcCfcCfaaaaupabqabqaaaarBabqcHZcJHcJIcJJcJKcJHcJLcJMcJNcJOcJPcJQcHZaaaaaabZUbZUcJRcJScJScJTcJScJUcJVcJWcJXcJYcJZcKacKbcKccKdcKecKfcKgcKfcKfcKhcKicKjcKkcKlcKmcKncFkcKocKpcKqcKrcKscKtcKtcKtcKucKvcJpcgCcCOcKwcEKcKxcKycKzcKAcKBcKCcKBcKDcKEcKFcEKcrUcKGccscfYcFHcFHcFHcFHcFHcKHcKIarAabqaaaaaaaaaaaaaaaabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqabqcFOcFOcKJcIPcIPcIPcKKcFOcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaaaabqabqabqaaaaaacKLabqaaaaaaabqabqaaaaaaarBaaaaaaaaaabeaaacHZcKMcKNcKOcKPcKMcKMcKQcKRcKScKTcKUcHZaaaaaaaaacrUcrUcrUcrUcrUbZUcKVcDUcDUcKWcKXcKYcDUcKZcLacLbcImcLccIocIncIocIncLdcLecLfcLgcLhcLicLjcLkcIxcIxcLlcLmcLncLocLpcLqcLrcJpcLscLtcLucGXcKxcKycLvcLvcLwcLxcLycLzcJucLAcEKcdNcLBceNchycLCbZUabqabqabqabqabqabqabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHUcFOcLDcLEcLFcFOcHUabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaacKLaaaaaaaaaaaaabqaaaaaaaupaaaaaaaaaarBabqcHZcLGcLHcLIcLJcLKcLLcLMcLNcLOcLPcLQcLRcLScLScLScLRcLTcLUcLVcHZcLWcLXcDUcLYcLZcMacMbbZUbZUbZUbZUcImcIncIocIncMccIncMdcMecMfcImcMgcMhcgxcmmcIxcMicMjcMkcLocLocMlcMmcMncJpcMocMpcMqcEKcKxcKycLvcMrcKBcMscKBcMtcMucMvcEKcMwchyceNchycMxbZUabqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFOcFNcMycFNcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabearBarBarBaaaaaaaaacKLaaaaaaaaaarBarBarBauparBabqabqaaaarBaaacIacMzcMAcMBcMCcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMPcMBcMQcMRcMScMTcMUcMScMVcMWcMXcMYcMZcNacNbcImcImcImcImcImcImcImcNccImcImbZUcNdcgxcmmcIxcNecMjcLocLpcLocNfcNgcNhcNicNjcNkcNlcNmcNncNncNncNncNncNocNncNpcNqcNrcEKchychycNschybZUbZUbZUabqabqaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFNcFOcFNabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaarBabqcNtabqarBaaaaaaabqaaaaaaabqaaaabqabqabqaaacHZcNucNvcNwcNxcNycNzcNAcNBcNCcNDcNEcHZcIacIacIacHZcNFcNGcNHcHZcNIcNJcDUcNKcNLcNMcNNbZUcNOcNPcNQbZUcNRcmVcNScmWcmVcNTcNUcDJcmZcNVcNWcNXcBIcIxcNYcNZcOacOacOacObcOccOdcOecOfcOgcOhcOicOjcOkcOlcOmcOncOocOpcOqcOrcOscOtcmYcmYcOucOvcOwcOxbZUbZUbZUcksaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarBaaaabqaaaarBaaaaaaabqabqabqabqaaaaaaaaaabqabqcHZcOycOzcKMcOAcOycOBcOCcODcOEcOFcOGcHZcOHaaaaaacrUcrUcrUcrUcrUbZUcOIcDUcDUcDUcDUcDUbZUcOJcOKcOLbZUcOMbZUbZUbZUbZUbZUbZUbZUbZUczIcONcOOcOPcOQcORcOScOTcOUcOVcOWcLpcOXcOYcOZcPacPbcPccPdcPecPfcPgcPhcPicOpclNcPjbZUbZUbZUbZUbZUcPkcPlcPmclJcPnclJcPoabqabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaacHZcPpcPqcKMcPqcPrcPscKMcKMcPtcKMcKMcHZabqabqabqbZUcjncfZcPucPvcPwcPxcmYcPycPzcPAcPBbZUcPCcPDcPEcPFcPGbZUcPHcPIcPJbZUcPKcPLcPMbZUcPNcPOcPPcIxcPQcPRcPScPTcPUcPVcLpcPWcIxcPXcPYciccPccPZcQacQbcQccQdcQecOpchycQfbZUcQgcQhcQibZUcQjcQkcQlbZUbZUbZUcksaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaacHZcQmcQncKMcQocQpcPscQqcQrcQscQtcQucHZaaaabqaaabZUcQvcQwcQxcQycQzcQAcQBcQAcQAcQCcQfbZUbZUbZUbZUbZUcOMbZUcQDcQEcQFcQGcQHcQIcQJcQKcQLcQMcQNcIxcIxcIxcIxcIxcQOcIxcQPcrUcrUcfwcQQcfwcOpcOpcOpcOpcOpcOpcOpcOpchycQRcQScQTcQUcQVcQWcQWcQXcQYcQWaaaaaaaaaaaaabqabqaaaaaaabqaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacHZcQZcRacKMcRacQZcRbcRccRdcRecRfcRgcIaaaaaaacRhbZUcRibZUbZUbZUcRjbZUbZUbZUbZUcRkcRlcRmcRncRocRmcRpcRqcRrcRscRtcRucRvcRwcRxcRycRycRzcRAcRBcRCcRDcREcmYcmYcRFcmYcRGcmZcRHcRIcRJcRIcRKcjNcjNcRLcRMcOtcmYcmYcmYcRNbZUcnOcROcRPcQWcRQcRRcRScQWabqabqabqabqabqabqabqabqabqabqabqabqaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHZcHZcIacHZcIacHZcRUcRVcRWcRXcRYcRZcHZabqabqcRhcSacSbcRhcSccSdcSecSfcSgcShbZUbZUbZUbZUcSibZUbZUbZUbZUbZUcSjcRtcSkcRtcSlcSmcSncRtcSocSpcSqbZUbZUbZUbZUbZUbZUcCdcSrcfZbZUcSscStcSucfwcicciccSvbZUbZUbZUbZUbZUbZUbZUbZUbZUcuEcQWcSwcSxcSycQWaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaaabqabqabqcSzcSAcSBcSCcSDcSEcSFcSGcSHcHZaaaaaacRhcSIcSJcRhcSKcSLcSMcSNcRhcRhcSOcSPcSQcSRcSScSRcSTcSUcSVcSWcSXcRtcSkcRtcSYcSZcTacRtcTbcTccTdcTecTfcTgcThcTibZUcTjbZUbZUbZUcTkcTlcTmcfwcfwcfwcTnbZUcTocTpcTqbZUcTrcTscTtbZUctocQWcTucTvcTwcQWaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaabqaaaaaacTxabqbCWcHZcHZcHZcHZcHZcHZcHZaaaaaacRhcTycTzcRhcTAcTBcTCcTDcRhcTEcTFcTGcTHcTIcTJcTKcTLcTLcTMcTNcTOcTPcTQcRtcSYcTRcTacRtcSocSpcSYcTScTTcRtcTUcTVbZUcTWbZUabqaaacTXcTYcTXaaaaaacTZcSvbZUcmDchychycUacjicUbcjicUccUdcQWcUecUfcUecQWaaaabqaaaabqabqaaaaaaabqaupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaaclIabqcCfcCfcCfcCfcCfaaaarBaaaaaaaaaabqaaaaaaaaaaaabZUbZUbZUcfZbZUcjncFPcFQbZUcPGcNacNbbZUcFTcFUcFVcFWcFXcFYcFZcGacGbcGccGdcGecBvcGfcGgcGhczBcGicGjcGkcGlcGmczBcGncGocGoczCcGpcGqcGrcGscGtcGucGvcGwczMcGxcGycGzcGAcGBcGCcGDcGEcGFcGGcGHcGIcGIcGJcGKcGLcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGVcGVcGWcGXabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFOcFNcGYcFNcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaabqaaaabqaaaabqaaacmRaaaabqaaaabqabqabqabqaupaaaaaaaaaabqaaaaaaaaaaaaabqaaabZUbZUbZUbZUbZUbZUbZUcNOcNPcNQbZUckDcGZcDUcHacHbcHccHdcHecHfcHgcHhcHicBvcBvcHjcBvczBczBczBczBczBczBczBcHkczCczCcHlcHmczGczHcHncHocHocHpcHqczMcHrcHscHtcHucHvcHwcHxcHycHzcHAcHBcHCcHDcHEcHFcHGcHHcHIcHJcHKcHLcHMcHNcHOcHPcHQcHRcHScHTcGXabqabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHUcFOcHVcHWcHXcFOcHUabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacAfcAfcAfcAfcAfabqcHYabqcAfcAfcAfcAfcAfabqarBaaaaaaaaaabeabqcHZcHZcHZcIacHZcHZcHZaaaabqaaaaaabZUcOJcOKcOLbZUcIbcEQcDUcIccIdcHbcIecIfcDUcIgcIhcIicDUcIjcIkcIlcImcIncIocIncIpcIncIqcIocIrcImcIscnscgxcItcBJcIucIvcIwcIucIxcIxcIxcIxcIxcIycxPcIzcEycIAcIAcIBcICcIDcIEcIFcIGcIHcIIcIJcEKcIKcILcIMcEycINcGXcGXcFHcGXcFHarAabqaaaaaaabqaaaaaaabqabqabqaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqabqcFOcFOcIOcIPcIPcIPcIQcFOcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcBdcBecBecBecBecBfckrcBgcBhcBhcBhcBhcBiabqarBaaaabqabqarBaaacHZcIRcIScIRcITcIRcHZcHZcIacHZcIacHZcHZcPDcPEcPFcjicQKcDUcDUcDUcDUcDUcDUcDUcIUcIVcIWcIXcIYcIZcJacImcJbcJccIncIocIncJdcJecJfcImcJgcnscgxcvmcwEcJhcJicJjcJkcJlcJmcJncJocJpcJqcCOczQcEKcEKcEKcEKcEKcEKcJrcJscJtcJucJvcJwcEKbZUcFGbZUcFHcJxcJycJzcJAcJBarAarAabqabqabqabqabqabqabqaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqcJCcJDcJCcIPcJEcIPcJFcJGcFNabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaaclIaaacCfcCfcCfcCfcCfaaaaupabqabqaaaarBabqcHZcJHcJIcJJcJKcJHcJLcJMcJNcJOcJPcJQcHZbZUbZUbZUbZUcJRcJScJScJTcJScJUcJVcJWcJXcJYcJZcKacKbcKccKdcKecKfcKgcKfcKfcKhcKicKjcKkcKlcKmcKncFkcKocKpcKqcKrcKscKtcKtcKtcKucKvcJpcgCcCOcKwcEKcKxcKycKzcKAcKBcKCcKBcKDcKEcKFcEKcrUcKGccscfYcFHcFHcFHcFHcFHcKHcKIarAabqaaaaaaaaaaaaaaaabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqabqcFOcFOcKJcIPcIPcIPcKKcFOcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaaaabqabqabqaaaaaacKLabqaaaaaaabqabqaaaaaaarBaaaaaaaaaabeaaacHZcKMcKNcKOcKPcKMcKMcKQcKRcKScKTcKUcHZaaaaaaaaacrUcrUcrUcrUcrUbZUcKVcDUcDUcKWcKXcRocDUcKZcLacLbcImcLccIocIncIocIncLdcLecLfcLgcLhcLicLjcLkcIxcIxcLlcLmcLncLocLpcLqcLrcJpcLscLtcLucGXcKxcKycLvcLvcLwcLxcLycLzcJucLAcEKcdNcLBceNchycLCbZUabqabqabqabqabqabqabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHUcFOcLDcLEcLFcFOcHUabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaacKLaaaaaaaaaaaaabqaaaaaaaupaaaaaaaaaarBabqcHZcLGcLHcLIcLJcLKcLLcLMcLNcLOcLPcLQcLRcLScLScLScLRcLTcLUcLVcHZcLWcLXcDUcLYcLZcMacSBcRUcRUcRUcRUcImcIncIocIncMccIncMdcMecMfcImcMgcMhcgxcmmcIxcMicMjcMkcLocLocMlcMmcMncJpcMocMpcMqcEKcKxcKycLvcMrcKBcMscKBcMtcMucMvcEKcMwchyceNchycMxbZUabqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFOcFNcMycFNcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabearBarBarBaaaaaaaaacKLaaaaaaaaaarBarBarBauparBabqabqaaaarBaaacIacMzcMAcMBcMCcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMPcMBcMQcMRcMScMTcMUcMScMVcMWcWGcSCcWIcWHcYocRUcImcImcImcImcImcImcNccImcImbZUcNdcgxcmmcIxcNecMjcLocLpcLocNfcNgcNhcNicNjcNkcNlcNmcNncNncNncNncNncNocNncNpcNqcNrcEKchychycNschybZUbZUbZUabqabqaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFNcFOcFNabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaarBabqcNtabqarBaaaaaaabqaaaaaaabqaaaabqabqabqaaacHZcNucNvcNwcNxcNycNzcNAcNBcNCcNDcNEcHZcIacIacIacHZcNFcNGcNHcHZcNIcNJcDUcNKcNLcNMcNNdegdeidehdejcRUcNRcmVcNScmWcmVcNTcNUcDJcmZcNVcNWcNXcBIcIxcNYcNZcOacOacOacObcOccOdcOecOfcOgcOhcOicOjcOkcOlcOmcOncOocOpcOqcOrcOscOtcmYcmYcOucOvcOwcOxbZUbZUbZUcksaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarBaaaabqaaaarBaaaaaaabqabqabqabqaaaaaaaaaabqabqcHZcOycOzcKMcOAcOycOBcOCcODcOEcOFcOGcHZcOHaaaaaacrUcrUcrUcrUcrUbZUcOIcDUcDUcDUcDUcDUcRUdeldekdemcRUcOMbZUbZUbZUbZUbZUbZUbZUbZUczIcONcOOcOPcOQcORcOScOTcOUcOVcOWcLpcOXcOYcOZcPacPbcPccPdcPecPfcPgcPhcPicOpclNcPjbZUbZUbZUbZUbZUdencPlcPmclJcPnclJcPoabqabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaacHZcPpcPqcKMcPqcPrcPscKMcKMcPtcKMcKMcHZabqabqabqbZUcjncfZcPucPvcPwcPxcmYcPycPzcPAcPBcRUdepdeodeqcRUcOMbZUcPHcPIcPJbZUcPKcPLcPMbZUcPNcPOcPPcIxcPQcPRcPScPTcPUcPVcLpcPWcIxcPXcPYciccPccPZcQacQbcQccQdcQecOpchycQfbZUcQgcQhcQibZUcQjcQkcQlbZUbZUbZUcksaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaacHZcQmcQncKMcQocQpcPscQqcQrcQscQtcQucHZaaaabqaaabZUcQvcQwcQxcQycQzcQAcQBcQAcQAcQCcQfcRUcRUdercRUcRUcOMbZUcQDcQEcQFcQGcQHcQIcQJdescQLcQMcQNcIxcIxcIxcIxcIxcQOcIxcQPcrUcrUcfwcQQcfwcOpcOpcOpcOpcOpcOpcOpcOpchycQRcQScQTcQUcQVcQWcQWcQXcQYcQWaaaaaaaaaaaaabqabqaaaaaaabqaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacHZcQZcRacKMcRacQZcRbcRccRdcRecRfcRgcIaaaaaaacRhbZUcRibZUbZUbZUcRjbZUbZUbZUbZUcRkcRlcRmcRndetcRmcRpcRqcRrcRscRtcRucRvcRwcRxcRycRycRzcRAcRBcRCcRDcREcmYcmYcRFcmYcRGcmZcRHcRIcRJcRIcRKcjNcjNcRLcRMcOtcmYcmYcmYcRNbZUcnOcROcRPcQWcRQcRRcRScQWabqabqabqabqabqabqabqabqabqabqabqabqaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHZcHZcIacHZcIacHZdeucRVcRWcRXcRYcRZcHZabqabqcRhcSacSbcRhcSccSdcSecSfcSgcShbZUbZUbZUbZUcSibZUbZUbZUbZUbZUcSjcRtcSkcRtcSlcSmcSncRtcSocSpcSqbZUbZUbZUbZUbZUbZUcCdcSrcfZbZUcSscStcSucfwcicciccSvbZUbZUbZUbZUbZUbZUbZUbZUbZUcuEcQWcSwcSxcSycQWaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaaabqabqabqcSzcSAdewdevcSDcSEcSFcSGcSHcHZaaaaaacRhcSIcSJcRhcSKcSLcSMcSNcRhcRhcSOcSPcSQcSRcSScSRcSTcSUcSVdexcSXcRtcSkcRtcSYcSZcTacRtcTbcTccTdcTecTfcTgcThcTibZUcTjbZUbZUbZUcTkcTlcTmcfwcfwcfwcTnbZUcTocTpcTqbZUcTrcTscTtbZUctocQWcTucTvcTwcQWaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaabqaaaaaacTxabqdeycHZcHZcHZcHZcHZcHZcHZaaaaaacRhcTycTzcRhcTAcTBcTCcTDcRhcTEcTFcTGcTHcTIcTJcTKcTLcTLcTMcTNcTOcTPcTQcRtcSYcTRcTacRtcSocSpcSYcTScTTcRtcTUcTVbZUcTWbZUabqaaacTXcTYcTXaaaaaacTZcSvbZUcmDchychycUacjicUbcjicUccUdcQWcUecUfcUecQWaaaabqaaaabqabqaaaaaaabqaupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabqabqabqaaaaaaaaaabqabqabqaaaaaaaaaabqaaaaaaaaacRhcUgcUhcUicUjcUkcUlcUmcRhcUncRhcUocUpcUqcUrcUscTHcTHcUtcUucUvcUwcUxcUycSYcUzcTacRtcSocUAcUBcUCcUDcUEcUFcUGbZUcTjbZUabqabqcTXcUHcTXabqaaacTZcUIbZUchychychycUJcUKcctcULbZUcqXcQWcUecUMcUeabqaaaabqaaaaaaabqabqabqabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaaaaaaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaacRhcTycUNcRhcUOcUPcUQcURcUScUTcRhcUUcUVcUWcUXcUYcUZcVacVbcSWcTacRtcVccVdcVecVfcVgcUwcVhcVicVjcVkcVkcVlcVmcVkbZUaefabqaaaaaacTXcVncTXaaaaaacTZcSvbZUcVocVpcVqbZUcVrcVscVqbZUaaaabqcUecUfcUeabqaaaabqaaaaaaabqabqaaaaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabeaaaaaaabqabeabfabeabqabeabeabeabqcSOcSOcSOcRhcRhcRhcRhcVtcVucRhcRhcRhcVvcVwcVxcUXcVycVzcVAcSOcSOcTacRtcRtcRtcSYcSZcTacRtcVBcVCcVDcVEabqabqaaaaaaabqaefabqaaacVFcVGcVHcVGcVIaaacTZcSvbZUbZUbZUbZUbZUbZUbZUbZUbZUaaaabqaaacVJaaaabqabqabqabqabqabqaaaaaaabqarBabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaacVKcVLcVMcSOcVNcVOcVPcVQcVRcVScSOcVTcVUcVVcVWcUXcUYcUZcVacVXcSOcVYcRtcVZcWacWbcWccWdcWacWecRtcWfcVkaaaabqabqabqabqabqabqabqcVGcWgcWhcWicVGaaacTZcWjcWkcWkcWkcWlcWmcTZaaaabqaaaaaaabqaaacVJaaaabqabqaaaaaaaaaabqaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaacVKcWncVMcWocWpcWpcWpcWqcWrcWscWtcWucWvcWucWwcWpcWxcWwcWycWzcSVcWAcWBcWCcWBcWBcWBcWBcWBcWCcWBcWDcVEaaaabqaaaaaaabqaaaaaaaaacVGcWEcWFcWGcWHcWIcTZcTZcTZcTZcTZciccSvcTZabqabqaaaaaaaaaaaacWJcWKcWKcWKcWKcWKcWKcWKcWKcWKcWLaaaaaaaaaaaaaaaaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaacVKcWncVMcWocWpcWpcWpcWqcWrcWscWtcWucWvcWucWwcWpcWxcWwcWycWzcSVcWAcWBcWCcWBcWBcWBcWBcWBcWCcWBcWDcVEaaaabqaaaaaaabqaaaaaaaaacVGcWEcWFdezdeAcyncTZcTZcTZcTZcTZciccSvcTZabqabqaaaaaaaaaaaacWJcWKcWKcWKcWKcWKcWKcWKcWKcWKcWLaaaaaaaaaaaaaaaaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaacVKcWncWMcVRcWNcWOcWNcWPcWQcWRcWScWTcWUcWVcWVcWWcWVcWVcWXcWYcSOcWZcXacXbcXacXacXccXacXacXdcXecXfcVkabqabqaaacVGcVGcVGcVGcVGcVGcXgcXhcXicVGcVGcVGcVGcVGcVGcTZciccSvcTZabqabqabqabqabqabqabqabqabqaaaabqaaaaaaaaaaaaaaacVJaaaaaaabqaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabqaaacVKcXjcVMcVRcWNcWNcWNcXkcSOcSOcSOcSOcXlcXmcUXcXncUXcXmcXocSOcSOcVEcXpcVEcXpcVEcVEcVEcXpcXpcVEcVEcVkaaaabqabqcVGcXqcXrcXscXtcVGcXucXvcVGcVGcXwcXxcXycXzcVGcTZciccSvcTZabqcXAcXBcXCcXBcXCcXBcXDabqauparBaupabqabqabqabqcVJabqabqabqabqabqabearBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcSOcSOcSOcXEcUXcUXcUXcUXcXFcXGcSOcXHcXIcXJcXJcXKcXJcXJcXLcSOaaacVEcXMcVEcXacVEaaacVEcXacXNcVEaaaaaaaaaabqaaacTXcXOcXPcXQcXRcXRcXScXTcXUcXVcXVcXWcXXcXYcTXcTZciccSvcTZabqcXZcYacYbcYccYdcYecXZabqaaaabqaaaabqaaaaaaaaacYfaaaaaaabqaaaaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaacVKcYgcYhcYicYjcYjcYkcXKcYlcYmcSOcSOcSOcYncYncYncYncYncSOcSOabqcVEcXpcVEcXpcVEabqcVEcXpcXpcVEabqabqabqabqaaacTXcYocYpcYqcYrcYrcYscYtcYucYucYucYucYvcYwcTXcTZciccSvcTZabqcYxcYycYbcYdcYbcYzcXCabqaaacYAcYAcYAcYAcYAabqcYBabqcYAcYAcYAcYAcYAaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaacVKcYgcYhcYicYjcYjcYkcXKcYlcYmcSOcSOcSOcYncYncYncYncYncSOcSOabqcVEcXpcVEcXpcVEabqcVEcXpcXpcVEabqabqabqabqaaacTXdeBcYpcYqcYrcYrcYscYtcYucYucYucYucYvcYwcTXcTZciccSvcTZabqcYxcYycYbcYdcYbcYzcXCabqaaacYAcYAcYAcYAcYAabqcYBabqcYAcYAcYAcYAcYAaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcSOcVKcSOcSOcVKcVKcVKcVKcSOcYCcSOaaaaaaaaaaaaaaaaaaaaacYDcYEcYFcYEcYGcYEcYGcYEcYHcYEcYIcYIcYEcYJaaaaaaabqaaacVGcYKcYLcYMcYNcYOcYPcYQcYRcYScYTcYUcYVcYWcVGcTZciccSvcTZcmzcXZcYdcYbcYdcYdcYecXZabqabqcYXcYYcYYcYYcYYcYZcZacZbcZccZccZccZccZdabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaabqaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaacZecZfcZgcZhcZicZjcZkcZlcZmcZncZocZpcZqcZeaaaaaaabqaaacVGcZrcZrcZrcZrcTkcZscZtcZucTkcZrcZrcZrcZrcVGcZvcZvcSvcZwcTZcZxcXBcXCcZycXCcXBcZzabqabqcZAcZAcZAcZAcZAaaacYBaaacZAcZAcZAcZAcZAabqarBabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaacYFcZBcZBcZBcZBcZBcZBcZBcZCcZDcZEcZEcZFcZeaaaaaaabqaaacVGcZGcZHcZHcZIcZJcZKcZLcZMcZNcZOcZPcZPcZPcVGcicciccWjcZQcmzcTZcTZcTZcZRcmzaaaaaaabqaaaabqaaaabqabqabqaaacYBaaaabqaaaabqaaaabqaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MetaStation/z5.dmm b/_maps/map_files/MetaStation/z5.dmm index 35018a0de20..d4ec96886f7 100644 --- a/_maps/map_files/MetaStation/z5.dmm +++ b/_maps/map_files/MetaStation/z5.dmm @@ -419,7 +419,7 @@ "ic" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellowcorner"},/area/research_outpost/hallway) "id" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/research_outpost/hallway) "ie" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellowcorner"},/area/research_outpost/hallway) -"if" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/door/firedoor{dir = 8; layer = 2.6; name = "Firelock West"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/camera{c_tag = "Research Outpost Hallway Starboard"; dir = 2; network = list("Research Outpost"); pixel_x = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) +"if" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/door/firedoor{dir = 8; layer = 2.6; name = "Firelock West"},/obj/machinery/camera{c_tag = "Research Outpost Hallway Starboard"; dir = 2; network = list("Research Outpost"); pixel_x = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "ig" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/research_outpost/hallway) "ih" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/research_outpost/harvesting) "ii" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera{c_tag = "Research Outpost Exotic Particles Airlock"; dir = 2; network = list("Research Outpost")},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/research_outpost/harvesting) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 0342c0a4018..ea44b03330b 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -5416,6 +5416,7 @@ "cah" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) "cai" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cmo) "caj" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cmo) +"cak" = (/obj/machinery/prize_counter,/turf/simulated/floor/wood,/area/crew_quarters/bar) "cal" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) "cam" = (/obj/machinery/photocopier,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay2) "can" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/medbay2) @@ -8833,7 +8834,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbmwbjgbmwbmwbmwbjhbjibmwbhDbjjbglbmwbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbohbptbojbpwbpwbqWbpwbpwbpwbqWblubjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkMbkLbkObkObkPaYibkQaMebmwbkRbkSbglbmwbkTbkUbmwbkVbkWbglbmwbnMbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatddDbgKblrblrblrbaAbwmbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbwmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbmwbnCbmwbmwbmwaRebmwbmwbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDbmwbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDcakbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqnbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqyaHkbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 562e99420c0..8852503d535 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -189,8 +189,10 @@ "dG" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid1 (EAST)"; icon_state = "asteroid1"; dir = 4},/area/holodeck/source_desert) "dH" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "dI" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) +"dJ" = (/obj/structure/rack,/obj/item/toy/sword,/obj/item/weapon/gun/projectile/revolver/capgun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "dK" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) "dL" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"dM" = (/obj/machinery/prize_counter/upgraded,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "dN" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid3 (EAST)"; icon_state = "asteroid3"; dir = 4},/area/holodeck/source_desert) "dO" = (/turf/simulated/floor/holofloor{tag = "icon-carpet1-0 (EAST)"; icon_state = "carpet1-0"; dir = 4},/area/holodeck/source_theatre) "dP" = (/obj/structure/stool,/turf/simulated/floor/holofloor{tag = "icon-carpet5-1 (EAST)"; icon_state = "carpet5-1"; dir = 4},/area/holodeck/source_theatre) @@ -254,8 +256,6 @@ "fB" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fC" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fD" = (/obj/structure/rack,/obj/item/device/camera,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) -"fE" = (/obj/structure/rack,/obj/item/toy/sword,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) -"fF" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/revolver/capgun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "fG" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "fH" = (/turf/unsimulated/beach/sand,/area/ninja/holding) "fI" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/ninja/holding) @@ -1232,7 +1232,7 @@ ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapap ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckbockckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeDeqeqeqbsereEeFeGerbseHeHeIeJeJbseveKeveLevbseMeNeNeNeObsePeQeQeQeRbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapavapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqeqeqeXeqbsereYeYeYerbseHeZeZeZeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffffffgfgfhfififjfgfgfgfgfgfgfgfgfgfkfgfgfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeqbserererererbseHeIeIeIeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD -ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDfEfFfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD +ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDdJdMfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD ckckckckckckckclckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffufufufffggbfyfyfyfyfygcgdgdgdgefHfHfHgffHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqgkeqeqeqbserglgmgnerbsgogpgpgpgqbsevevevgrevbsgsgtgtgtgubsgveQeQeQgwbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgygzgAfufufufffggBfygCgDgEgFgGgdgdgdgdfHfHgHfHgIfIfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeDbserglgmgnerbsgJeIgKeIgLbsevevevevevbsgMeNeNeNgNbsgveQeQeQgwbD ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNapapapapapapapapapapapapapapapapapapapapapapapapaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckcmckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgOgPgQfufufufffggRgdgegegegegegdgdgdgdfHfHfHgSfHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbsgTeqeqeqeqbserglgmgnerbsgJgUgUgUgLbsgVgVgVgVgVbsgMeNeNeNgNbsgveQeQeQgwbD From 939312cd7c48d3bc9946af5e3f6d633b8babf28b Mon Sep 17 00:00:00 2001 From: TheDZD Date: Thu, 18 Feb 2016 13:38:16 -0500 Subject: [PATCH 47/52] Automatic changelog generation for PR #3622 --- html/changelogs/AutoChangeLog-pr-3622.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3622.yml diff --git a/html/changelogs/AutoChangeLog-pr-3622.yml b/html/changelogs/AutoChangeLog-pr-3622.yml new file mode 100644 index 00000000000..6a10ff80c22 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3622.yml @@ -0,0 +1,5 @@ +author: Tastyfish +delete-after: True +changes: + - rscadd: "EngiVend now has 10 camera assemblies." + - tweak: "Borgs can now use vending machines." From 0241c60ca755c5005c36d92ca27853b987e0b00b Mon Sep 17 00:00:00 2001 From: TheDZD Date: Thu, 18 Feb 2016 13:38:46 -0500 Subject: [PATCH 48/52] Automatic changelog generation for PR #3612 --- html/changelogs/AutoChangeLog-pr-3612.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3612.yml diff --git a/html/changelogs/AutoChangeLog-pr-3612.yml b/html/changelogs/AutoChangeLog-pr-3612.yml new file mode 100644 index 00000000000..2583bcd98f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3612.yml @@ -0,0 +1,4 @@ +author: Crazylemon64 +delete-after: True +changes: + - rscadd: "Attacking someone with an accessory will now let you put things on them without having to strip them." From 7fef488c1fc0e80e52e244dec93f8c8c8def4291 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Thu, 18 Feb 2016 13:39:16 -0500 Subject: [PATCH 49/52] Automatic changelog generation for PR #3614 --- html/changelogs/AutoChangeLog-pr-3614.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3614.yml diff --git a/html/changelogs/AutoChangeLog-pr-3614.yml b/html/changelogs/AutoChangeLog-pr-3614.yml new file mode 100644 index 00000000000..528eadcfc9e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3614.yml @@ -0,0 +1,9 @@ +author: Crazylemon64 +delete-after: True +changes: + - bugfix: "Borers will now properly detach upon death of a mob they are controlling" + - tweak: "Borers can now see their chemical count while in control of a mob" + - rscadd: "Borers can now silently communicate with their host - this is not available to the host until the borer has either begun to communicate, or has taken control at least once - this is to avoid spoiling that the borer exists" + - tweak: "Borers won't be able to talk out loud inside of a host, by default - they can remove this safeguard with a verb under their borer tab. Borer hivespeak is unaffected." + - tweak: "Borers infesting and hiding are now silent." + - tweak: "Made borer's chem lists more nicely formatted" From db1f9a059844b2e954ff7959b981a8f3396c2b02 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Thu, 18 Feb 2016 13:39:39 -0500 Subject: [PATCH 50/52] Automatic changelog generation for PR #3578 --- html/changelogs/AutoChangeLog-pr-3578.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3578.yml diff --git a/html/changelogs/AutoChangeLog-pr-3578.yml b/html/changelogs/AutoChangeLog-pr-3578.yml new file mode 100644 index 00000000000..caa61d1c3e1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3578.yml @@ -0,0 +1,4 @@ +author: Tastyfish +delete-after: True +changes: + - tweak: "The PDA system has been completely redone behind the scenes! It should be functionally similar, although there is now a Home and Back button at the bottom as appropriate." From bafde6d696d60e0db44d76dd489c90307079c043 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Thu, 18 Feb 2016 13:40:05 -0500 Subject: [PATCH 51/52] Automatic changelog generation for PR #3599 --- html/changelogs/AutoChangeLog-pr-3599.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3599.yml diff --git a/html/changelogs/AutoChangeLog-pr-3599.yml b/html/changelogs/AutoChangeLog-pr-3599.yml new file mode 100644 index 00000000000..d4297aa6495 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3599.yml @@ -0,0 +1,5 @@ +author: KasparoVy +delete-after: True +changes: + - bugfix: "Adjusting masks while they are not on the face will no longer turn off internals." + - bugfix: "Adjusting masks while they are not on the face will now cause the mask to hide/reveal the wearer's identity the next time it's worn as intended." From e438fd6ec7d86288903edaedd070feb20de2613a Mon Sep 17 00:00:00 2001 From: TheDZD Date: Thu, 18 Feb 2016 13:44:32 -0500 Subject: [PATCH 52/52] Automatic changelog generation for PR #3633 --- html/changelogs/AutoChangeLog-pr-3633.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3633.yml diff --git a/html/changelogs/AutoChangeLog-pr-3633.yml b/html/changelogs/AutoChangeLog-pr-3633.yml new file mode 100644 index 00000000000..b7a239dd37a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3633.yml @@ -0,0 +1,5 @@ +author: FalseIncarnate +delete-after: True +changes: + - rscadd: "Temporarily adds a prize counter to the bar (Cyberiad) or dorms (MetaStation), and adds a max upgrade one to the Ninja Holding Area (Cyberiad z2)" + - bugfix: "Fixes Metastation. Seriously fixed a lot, just read the PR description for the full list."